単一のモニターのEDIDを取得する方法は?


20

xrandrへの回答を保留中にモニターとしてアンプを検出すると、回避策として特定のEDIDを持つデバイスをブラックリストに登録することができます。残念ながらxrandr --verbose、解析するのが面倒で、単一のデバイスのクエリをサポートしていない形式ですべてを印刷します。また、get-edid出力はxrandrのモニターID(たとえばDVI-1)にマッピングするのは簡単ではないようです。

単一のモニターで簡単に解析可能な EDID を取得する方法はありますか?


xrandr解析に行きます。面倒ですが、スクリプトを一度だけ書くだけで、どこでも動作します。
ジル「SO-悪であるのをやめる」14

回答:


18

リード#1:monitor-edid

私はEDIDとモニターについてはそれほど詳しくはmonitor-edidありませんが、このツールを見つけました。このツールはここでも役に立つかもしれません。

それがベースから外れていても許してください、あなたがトピックに関して尋ねるさまざまな質問を考えると、私はこのスペースについてももっと学ぼうとしています。

$ monitor-edid 
EISA ID: LEN4036
EDID version: 1.3
EDID extension blocks: 0
Screen size: 30.3 cm x 19.0 cm (14.08 inches, aspect ratio 16/10 = 1.59)
Gamma: 2.2
Digital signal

    # Monitor preferred modeline (60.0 Hz vsync, 55.8 kHz hsync, ratio 16/10, 120 dpi)
    ModeLine "1440x900" 114.06 1440 1488 1520 2044 900 903 909 930 -hsync -vsync

    # Monitor supported modeline (50.0 Hz vsync, 51.8 kHz hsync, ratio 16/10, 120 dpi)
    ModeLine "1440x900" 114.06 1440 1488 1520 2204 900 903 909 1035 -hsync -vsync

リード#2:ddcontrol

私が出会った別のツールがありました。これは、あなたが求めddccontrolている情報を取得するのに役立つかもしれません。

リード#3:/ sys

最後に/sys、さまざまなビデオインターフェイスからリーフノードがぶら下がっていることに気付きました。

$ sudo find . |grep -i edid
./devices/pci0000:00/0000:00:02.0/drm/card0/card0-HDMI-A-1/edid
./devices/pci0000:00/0000:00:02.0/drm/card0/card0-HDMI-A-2/edid
./devices/pci0000:00/0000:00:02.0/drm/card0/card0-HDMI-A-3/edid
./devices/pci0000:00/0000:00:02.0/drm/card0/card0-VGA-1/edid
./devices/pci0000:00/0000:00:02.0/drm/card0/card0-LVDS-1/edid
./devices/pci0000:00/0000:00:02.0/drm/card0/card0-DP-1/edid
./devices/pci0000:00/0000:00:02.0/drm/card0/card0-DP-2/edid
./devices/pci0000:00/0000:00:02.0/drm/card0/card0-DP-3/edid
./module/drm/parameters/edid_fixup
./module/drm_kms_helper/parameters/edid_firmware

しかし、私のLenovoラップトップでは、これらの「ファイル」は空でした。おそらく、システム上で異なっています。VGA EDIDからのサンプル出力を示すこのフォーラムスレッドを見つけました。

$ lspci | grep VGA
01:00.0 VGA compatible controller: nVidia Corporation NV17 [GeForce4 440 Go 64M] (rev a3)
$ xxd  /sys/devices/pci0000:00/0000:00:0b.0/0000:01:00.0/drm/card0/card0-VGA-1/edid
0000000: 00ff ffff ffff ff00 5a63 0213 0101 0101  ........Zc......
0000010: 2b0a 0103 1c25 1bb0 eb00 b8a0 5749 9b26  +....%......WI.&
0000020: 1048 4cff ff80 8199 8159 714f 6159 4559  .HL......YqOaYEY
0000030: 3159 a94f 0101 863d 00c0 5100 3040 40a0  1Y.O...=..Q.0@@.
0000040: 1300 680e 1100 001e 0000 00ff 0033 3139  ..h..........319
0000050: 3030 3433 3030 3737 330a 0000 00fd 0032  004300773......2
0000060: a01e 6114 000a 2020 2020 2020 0000 00fc  ..a...      ....
0000070: 0047 3930 6d62 0a20 2020 2020 2020 00ba  .G90mb.       ..

出典:EDIDを使用してモニターのシリアル番号/製造日を抽出しますか?

参照資料


@ l0b0-2のみでしたか?より多くのように見えた。私はこのQのカテゴリを混乱させているかもしれません。問題のあるビットを削除します8
slm

#3 / sysが/ ...私のための作品は、私が持っているIntel Corporation 3rd Gen Core processor Graphics Controller (rev 09)i915、ドライバ、Kubuntuの15.04
user.dz

#3 / sys / ...およびxrandr --verbose両方が私のHDMIモニターのEDIDデータを返しますが、どちらも私のDVIモニターのEDIDデータを返しません。
noobninja

monitor-edidリンクは無効であり、archive.orgにはバックアップがありません。誰がそのツールを入手できるか知っていますか?
ピーターW.

@PeterW。-代替手段があります。これに注意してくれてありがとう。また、このツールはほとんどの主要なリポジトリにあります。たとえばFedora 24とCentOSで見つけました。そのため、おそらくはるかに簡単なオプションであるツールをバイナリとしてインストールできます。
slm

11

の出力にxrandr --propsは、接続された各ディスプレイの16進EDID文字列がより簡潔に含まれています。これを利用して、特定の接続されたモニターのEDIDを取得する単純なPythonスクリプトを次に示します。

NVidiaベースのシステムでEDID抽出に機能する他のディストリビューションパッケージのCLIツールは見つかりませんでしたが、バイナリEDIDを解析するためのほとんどのツールは正常に動作するようです。


8

x86またはpowerpc archを使用してread-edidいる場合は、を使用できます。Debianでは、こちらから入手できます

使用法は単純です(rootになる必要があります):

$ sudo get-edid > /tmp/edid

そして、構造を解析します:

$ parse-edid < /tmp/edid
Checksum Correct

Section "Monitor"
    Identifier "HP v220"
    ModelName "HP v220"
    VendorName "HWP"
    # Monitor Manufactured week 13 of 2008
    # EDID version 1.3
    # Analog Display
    DisplaySize 470 300
    Gamma 2.20
    Option "DPMS" "true"
    Horizsync 30-81
    VertRefresh 56-76
    # Maximum pixel clock is 160MHz
    #Not giving standard mode: 1152x720, 60Hz
    #Not giving standard mode: 1280x960, 60Hz
    #Not giving standard mode: 1280x1024, 60Hz
    #Not giving standard mode: 1440x900, 60Hz
    #Not giving standard mode: 1600x1000, 60Hz
    #Not giving standard mode: 1680x1050, 60Hz
    Modeline    "Mode 0" -hsync +vsync 
EndSection

多くの場合、これは次のように組み合わされます。

$ sudo get-edid | parse-edid

次のいずれかを使用して、このカスタムedidファイルをグラフィックカードに渡す方法については、こちらも参照してください。

  • CustomEDIDまたは、
  • drm_kms_helper.edid_firmare

3
「modprobe i2c-dev」を実行するまでget-edidが機能しなかったことを明確にするためです。そして、「parse-edid」で作成されたModelineはXorgに受け入れられませんでした。デバイスセクションでこれを使用しました。オプション「CustomEDID」「CRT-0:/etc/X11/edid-StarLight-170418_gb-nv-gf-650-GTX-VGA.bin」EDIDを手動で提供する必要があります10mの長さのVGAケーブルでは正しく読み取れないためです。「DisplaySize」を設定することも私にとって便利でした。
デリアンクルステフ

3

edid-decodeと呼ばれるツールの最新バージョンは、EDID情報を解析でき、テキストおよびバイナリEDIDファイルの読み取りと書き込みができます。の出力でうまく機能しますxrandr --verbose。たとえば、EDIDをバイナリファイルに保存するために使用できます。

xrandr --verbose | edid-decode - /file/to/save

Fedora 27に付属しているedid-decodeのバージョン(パッケージ:xorg-x11-utils)は古すぎて、完全に機能しません。私は最新バージョンを使用しました。


2

バイナリ形式では/sys/class/drm/card%d-%s/edid、EDIDはで利用できます。ここで、%dDRMデバイスインデックス(おそらくGPUインデックス)を表し%sxrandr出力に表示されるコネクタIDです。

使用可能なすべてを一覧表示するには、次を実行します ls -1 /sys/class/drm/*/edid

GPUドライバーがDRMをサポートしていない場合、この方法でEDIDを取得することはできません。

16進形式で表示するには、実行hexdumpします。

人間が読める形式が必要な場合は、次のように渡しますedid-decode

cat /sys/class/drm/card0-eDP-1/edid | edid-decode

sudo apt install edid-decodeUbuntuの場合、パッケージマネージャーを使用してインストールする必要があります)


どうやって渡すのedid-decode?また、切断されたモニター用のサブディレクトリもあります。
WinEunuuchs2Unix

@ WinEunuuchs2Unix、例を追加しました。
ユーザー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.