モニターメーカー、製品ID、シリアル番号を確認してください。

モニターメーカー、製品ID、シリアル番号を確認してください。

目標は、Linuxプラットフォームでモニターの製造元、製品ID、およびシリアル番号を取得することです。最終的にはC++プログラムからこの情報を入手する必要があります。しかし、私はコマンドラインメソッドも受け入れます。

答え1

この情報は/sys/class/drmサブシステムを通じて提供されます。このようなツールxrandrが広く使用されています。このサブシステムの各ディスプレイには、ファイルを含むディレクトリがありますedid識別データの拡張表示

Debianベースのシステムでも2つのパッケージを使用できますedid-decoderead-edidどちらもうまく動作しているようですが、古いモデルと古いモデルではエラーを返しread-edidながらも十分に動作するようです。edid-decode

EDID block does NOT conform to EDID 1.3!
    Detailed block string not properly terminated
EDID block does not conform at all!
    Bad year of manufacture

read-edidしたがって、パッケージをインストールすることをお勧めします。インストールが完了したら、parse-edid次のコマンドを使用します。

$ parse-edid < /sys/class/drm/card0-HDMI-A-1/edid 
Checksum Correct

Section "Monitor"
    Identifier "X20G-NagaIII"
    ModelName "X20G-NagaIII"
    VendorName "SPT"
    # Monitor Manufactured week 42 of 2005
    # EDID version 1.3
    # Digital Display
    DisplaySize 410 310
    Gamma 2.20
    Option "DPMS" "true"
    Horizsync 30-92
    VertRefresh 40-86
    # Maximum pixel clock is 170MHz

もう一つのコマンドは、get-edidi2cバスに接続して、どのディスプレイが接続されていて、どのデータが利用可能かを自動的に把握するようです。もちろん、これはC ++アプローチではありませんが、これら2つのツールはおそらくCで書かれています。ソースコードを見て、どのライブラリを使用しているかを記録してください。

答え2

ほぼ同じ(edid出力の解析に違いはありません)2つのDell U3014モニタがありますが、5番目と6番目のディスプレイポートのedidファイルを確認すると、異なるシリアル番号が表示されます。

# Compare edid output
diff -a /sys/class/drm/card0-DP-{5,6}/edid
1c1
PT�K���qO�@�����h��@.`0 6��!�P1V6N45V001L
---
PT�K���qO�@�����h��@.`0 6��!�P1V6N45V002L
4c4
<       ��P� #  �:�q8-@X,E��!�q X,%��!�rQ� n(U��!�
---
>       ��P� #  �:�q8-@X,E��!�q X,%��!�rQ� n(U��!�

# Better view of just serial numbers:
grep -ao 'P1V6N45V00.L' /sys/class/drm/card0-DP-*/edid
/sys/class/drm/card0-DP-5/edid:P1V6N45V001L
/sys/class/drm/card0-DP-6/edid:P1V6N45V002L

また、注目に値するのは、Card0-DPが1-8で表示され、arandrでは0-7で表示されることです。したがって、edidをarandrに一致させるには1を減算します(DP-5 = DP-4およびDP-6 = DP-5)。

関連情報