コンピュータに接続されている現在のモニタの短縮バージョンを抽出しました。
例は次のとおりです。 vendor "VSC", prod id "18500"
Ubuntuのモニター設定ではViewsonic Corporation 16"
。
これを人間が読める形式でどのように抽出できますか? ...また、モニターがaかaかどうかを確認するにはCRT
どうすればよいですかLCD
? (実際に私がこのミッションを始めた理由もこれです)
EDID形式はWikipediaにあります。識別データの拡張表示Vendor
EDIDを取得するために使用されるコードです。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-desktop
edidをデコードしてpnp.ids
3桁のベンダー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フラットパネルモニタモデルを入手しようとしてきました。これがついに私のために働いたものです。
- edid-decodeパッケージをインストールしました。
$sudo 適切な更新 $ sudo apt install -y edid デコード
- edid-decode のマニュアルページには次のように記載されています。
要約 edid デコード [入力] [出力] 説明する [...]には2つの引数があり、通常の出力は抑制されます。 バイナリEDID blobは次のように書かれています。 第二の主張。 [...] ノート すべてのフィールドが復号されるか完全に復号されるわけではありません。一部 フィールドをデコードすると出力が破損する可能性があります。
破損した出力の「説明」セクション以下の説明が私に起こります。 edid-decodeを実行すると、人間が読めるテキストの一部が出力される前に、いくつかの誤った出力(印刷されない文字)が生成されます。
マニュアルページの情報に基づいて、次のコマンドラインを試しました。
$edid-decode/sys/class/drm/card0/card0-VGA-1/edid vga.edid
残念ながら、これは出力ファイルを生成しませんvga.edid
。そのため、名前の空のファイルを手動で作成し、vga.edid
edid-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モデル番号が作成されました。