如何获取单个显示器的EDID?


20

在等待xrandr回答之前,将放大器检测为监视器,可能的解决方法是将具有特定EDID的设备列入黑名单。不幸的是,xrandr --verbose所有内容都以难以解析的格式打印,并且不支持查询单个设备,并且get-edid的输出似乎不容易映射到xrandr的监视器ID(例如DVI-1)。

是否有某种方法可以为单个监视器获取易于解析的 EDID ?


我去xrandr解析。这很麻烦,但是您只需一劳永逸地编写脚本,然后它便可以在任何地方使用。
吉尔(Gilles)'所以

Answers:


18

线索1:监控程序编辑

我没有使用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

但是,在我的联想笔记本电脑上,这些“文件”为空,也许在您的系统上是不同的。我发现这个论坛线程显示了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个吗?似乎更多。我可能会混淆这个问与您问他们的类别。我将删除有问题的位8
slm

#3 / sys / ...对我Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)i915
有用

#3 / sys / ... xrandr --verbose都返回我的HDMI监视器的EDID数据,但都不返回我的DVI监视器的EDID数据。
noobninja

monitor-edid链接已失效,archive.org没有任何备份。有人知道我可以从哪里获得该工具吗?
Peter W.

@PeterW。-有替代方法,谢谢您引起我的注意。大多数主要存储库中都包含该工具。我在Fedora 24和CentOS中找到了它。因此,您可以将工具安装为二进制文件,这可能是一个更简单的选择。
slm

11

xrandr --props对于每个已连接的显示,的输出包含十六进制EDID字符串,而不再那么冗长。这是一个简单的Python脚本,利用它为特定的已连接监视器获取EDID。

我尚未在基于NVidia的系统上找到任何其他可用于EDID提取的发行版打包CLI工具,但是大多数用于解析二进制EDID的工具似乎都可以正常工作。


8

如果您恰巧使用x86或powerpc拱门,则可以使用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
只是为了澄清get-edid对我不起作用,直到我执行了“ modprobe i2c-dev”。Xorg不接受“ parse-edid”制作的Modeline。因此,我在设备部分使用了此选项:选项“ CustomEDID”“ CRT-0:/etc/X11/edid-StarLight-170418_gb-nv-gf-650-GTX-VGA.bin”我需要手动提供EDID因为无法通过10m长的VGA电缆正确读取它。设置“ DisplaySize”对我也很有用。
Delian Krustev '17

3

名为edid-decode的工具的最新版本可以解析EDID信息,并且可以读写文本和二进制EDID文件。它对的输出效果很好xrandr --verbose。例如,它可以用于将EDID保存在二进制文件中:

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

Fedora 27附带的edid-decode版本(软件包:xorg-x11-utils)过旧,无法正常工作。我使用了最新版本


2

EDID以二进制形式提供,位于/sys/class/drm/card%d-%s/edid,其中%d代表DRM设备索引(可能是GPU索引),并且%s是您在xrandr输出中看到的连接器ID 。

要列出所有可用的,请运行 ls -1 /sys/class/drm/*/edid

如果您的GPU驱动程序不支持DRM,您将无法通过这种方式获得EDID。

要以十六进制形式查看,请hexdump在其上运行。

如果您希望使用可读格式,请将其传递给edid-decode,例如:

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

sudo apt install edid-decode对于Ubuntu ,您可能需要使用软件包管理器进行安装)


您如何将其传递给edid-decode?另请注意,也存在断开连接的监视器的子目录。
WinEunuuchs2Unix

@ WinEunuuchs2Unix,我添加了一个示例。
用户
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.