モニターの製造元、モデル、その他の情報を人間が読める形式でインポートします。

モニターの製造元、モデル、その他の情報を人間が読める形式でインポートします。

コンピュータに接続されている現在のモニタの短縮バージョンを抽出しました。
例は次のとおりです。 vendor "VSC", prod id "18500"

Ubuntuのモニター設定ではViewsonic Corporation 16"

これを人間が読める形式でどのように抽出できますか? ...また、モニターがaかaかどうかを確認するにはCRTどうすればよいですかLCD? (実際に私がこのミッションを始めた理由もこれです)

EDID形式はWikipediaにあります。識別データの拡張表示
VendorEDIDを取得するために使用されるコードです。Product id

edid=$(xrandr -q --verbose | 
         sed -n '/^[[:space:]]\+00ffffffffffff00/,/[^a-fA-F0-9[:space:]]/{
                                                  /[^a-fA-F0-9[:space:]]/d
                                                  s/[[:space:]]\+//g; p}')
nibble=({0..1}{0..1}{0..1}{0..1})
vend=$(for i in {16..19} ;do 
           printf "%s" ${nibble[$((16#${edid:$i:1}))]}
       done)
vend="$(for i in 1 6 11 ;do
            printf \\x$(printf %x $((2#${vend:$i:5} +64)))
        done)"
prod=$((16#${edid:22:2}${edid:20:2}))
printf "monitor: vendor \"%s\", prod id \"%s\"\n" "${vend}" "$prod"

xrandr -q verbose編集:以下は、EDID 16進ダンプが終了するまでoutptの先頭行です。

Screen 0: minimum 320 x 200, current 1280 x 960, maximum 8192 x 8192
VGA1 connected 1280x960+0+0 (0x47) normal (normal left inverted right x axis y axis) 320mm x 240mm
        Identifier: 0x41
        Timestamp:  26386
        Subpixel:   unknown
        Clones:    
        CRTC:       0
        CRTCs:      0 1
        Transform:  1.000000 0.000000 0.000000
                    0.000000 1.000000 0.000000
                    0.000000 0.000000 1.000000
                   filter: 
        EDID:
                00ffffffffffff005a63444809000000
                15090101682018b1e84f22a157479925
                0f484ffffe00315945596159714f8140
                818001010101000000ff004848393231
                30303030390a2020000000fd0032781e
                46ff000a202020202020000000fc0056
                696577536f6e696320453737000000fc
                00312d320a2020202020202020200084
  1280x1024 (0x46)  108.0MHz +HSync +VSync
        h: width  1280 start 1328 end 1440 total 1688 skew    0 clock   64.0KHz
        v: height 1024 start 1025 end 1028 total 1066           clock   60.0Hz
  1280x960 (0x47)  ....  
        ...
        ... etc

答え1

Ubuntuのモニター設定では、Viewsonic Corporation 16 "と識別されます。これを人間が読める形式にどのように抽出しますか?

人が読める形式(「ビューソニック株式会社」)はEDIDから直接提供されません。 Ubuntuは次のgnomeライブラリを使用します。libgnome-desktopedidをデコードしてpnp.ids3桁のベンダーID(「VSC」あなたの特別な場合)は「表示するきれいな名前です。
私のシステムでは」に翻訳されます。

grep VSC /usr/share/hwdata/pnp.ids

返品:

VSC    ViewSonic Corporation

これに加えて、EDID(ディスクリプタブロックなど)から追加情報を抽出できます。同じWikipediaリンクから:

記述子ブロック。詳細なタイミング説明(優先順位の降順)。すべての詳細タイミング記述子の後には、追加の記述子が許可されます。

  • 監視範囲制限(必須)
  • ASCIIテキスト(モニター名(必須)、モニターシリアル番号、または構造化されていないテキスト)
  • 6 追加標準タイミング情報ブロック
  • カラーポイントデータ

現在定義されている記述子の種類は次のとおりです。

  • 0xFF:モニターシリアル番号(テキスト)
  • 0xFE:指定されていないテキスト(テキスト)
  • 0xFD:監視範囲の制限。 6または13バイトのバイナリ記述子。
  • 0xFC:モニター名(テキスト)
  • 0xFB:追加のホワイトポイントデータです。 2×5バイト記述子、0A 20 20で埋められます。
  • 0xFA:追加の標準タイミング識別子。 6×2バイト記述子、0Aで満たされる。

EDIDの0xFF記述子1(バイト54-71)に(シリアル番号)があります。

00 ff 00 48 48 39 32 31 30 30 30 30 39 0a 20 20 00 00

0xFC記述子3(バイト90–107)と4(バイト108–125)には(モニタ名)があります。

  00 fc 00 56 69 65 77 53 6f 6e 69 63 20 45 37 37 00 00
  00 fc 00 31 2d 32 0a 20 20 20 20 20 20 20 20 20 00 84

したがって、記述子3のようにそこから情報を抽出します。

56 69 65 77 53 6f 6e 69 63 20 45 37 37>>ビューソニック E77


最後に、モニタがLCDであるかCRTであるか(Linuxで)確認する方法がわかりません。私はそのような機能を実装するライブラリを知りません(例:これマイクロソフトから)。

答え2

これはうまくいくでしょう(ここの他のすべての答えは100%動作しません)。

for file in `ls -1 /sys/class/drm/*/edid`; do text=$(tr -d '\0' <"$file"); if [ -n "$text" ]; then edid-decode "$file" | grep -e Manufacturer: -e Product; sleep 0.0001; fi done

ここでは2つのモニターでテストしました。私のプライマリモニタは内蔵ラップトップモニタで、セカンダリモニタはDELL 25インチです。出力は次のとおりです。

Manufacturer: DELL Model 53359 Serial Number 809781068
Display Product Serial Number: YKFWP5790DGL
Display Product Name: DELL U2515H
Manufacturer: LGD Model 1133 Serial Number 0

edid-decodeディストリビューションにインストールされている必要があります。私の設定はDELL Latitude e5450とUbuntu 20.04です。

答え3

次のツールは、EDID情報をデコードするのに役立ちます。 http://cgit.freedesktop.org/xorg/app/edid-decode

答え4

私はUbuntu 16.04 LTEを実行している古いコンピュータに接続するいくつかのDellフラットパネルモニタモデルを入手しようとしてきました。これがついに私のために働いたものです。

  1. edid-decodeパッケージをインストールしました。
$sudo 適切な更新
$ sudo apt install -y edid デコード
  1. edid-decode のマニュアルページには次のように記載されています。
要約
    edid デコード [入力] [出力]

説明する
    [...]には2つの引数があり、通常の出力は抑制されます。
    バイナリEDID blobは次のように書かれています。
    第二の主張。 [...]

ノート
       すべてのフィールドが復号されるか完全に復号されるわけではありません。一部
       フィールドをデコードすると出力が破損する可能性があります。

破損した出力の「説明」セクション以下の説明が私に起こります。 edid-decodeを実行すると、人間が読めるテキストの一部が出力される前に、いくつかの誤った出力(印刷されない文字)が生成されます。

マニュアルページの情報に基づいて、次のコマンドラインを試しました。

$edid-decode/sys/class/drm/card0/card0-VGA-1/edid vga.edid

残念ながら、これは出力ファイルを生成しませんvga.edid。そのため、名前の空のファイルを手動で作成し、vga.edidedid-decodeコマンドラインを再実行しました。

$touchvga.edid
$edid-decode/sys/class/drm/card0/card0-VGA-1/edid vga.edid

今回は、edid-decodeがEDIDデータを出力ファイルにダンプしますvga.edid

次に、アプリケーションを使用してxxdファイル内容の16進ダンプを生成しますvga.edid。 16進ダンプ出力の最後の行は、モニターのモデル番号を示します。

$xxdvga.edid
[...他のもの...]
00000070: 0044 454c 2031 3930 3846 5042 4c4b 00ad.DEL 1908FPBLK..

だからモニターはDell 1908FP(黒いケース)です。

FWIW、上記のedid-decodeコマンドラインには、モニター製造元に関するこの情報も表示されます。

メーカー: DEL モデル 4047 シリアル番号 xxxxxxxxx

(注:シリアル番号の値がぼやけています。)周りを見回しましたが、整数値4047を特定のDellモニタ製品にマッピングするルックアップテーブルがオンラインで見つかりませんでした。

2つの異なるDellモニター(両方とも古いモデル)でこれを試しましたが、両方のモデルに対して正しいDellモデル番号が作成されました。

関連情報