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

l0b*_*0b0 29 xrandr edid

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

有什么方法可以为单个显示器获得易于解析的EDID ?

slm*_*slm 23

线索 #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
Run Code Online (Sandbox Code Playgroud)

线索#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
Run Code Online (Sandbox Code Playgroud)

但是,在我的联想笔记本电脑上,这些“文件”是空的,也许它们在您的系统上有所不同。我发现这个论坛帖子显示了 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.       ..
Run Code Online (Sandbox Code Playgroud)

来源:使用 EDID 提取显示器序列号/制造日期?.

参考


Mat*_*ath 21

的输出xrandr --props包含每个连接的显示器的十六进制 EDID 字符串,以一种不太冗长的方式。这是一个简单的 Python 脚本,利用它来获取特定连接监视器的 EDID。

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


mal*_*lat 13

如果您碰巧使用的是 x86 或 powerpc arch,则可以使用read-edid. 在 debian 上,这可以在这里找到

用法很简单(你需要是root):

$ sudo get-edid > /tmp/edid
Run Code Online (Sandbox Code Playgroud)

然后解析结构:

$ 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
Run Code Online (Sandbox Code Playgroud)

通常这被组合成:

$ sudo get-edid | parse-edid
Run Code Online (Sandbox Code Playgroud)

另请参阅此处,了解如何使用以下任一方法将此自定义 edid 文件传递​​到您的图形卡:

  • 自定义EDID或,
  • drm_kms_helper.edid_firmare

  • 只是为了澄清 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”对我也很有用。 (3认同)

use*_*ser 10

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,例如:

edid-decode < /sys/class/drm/card0-eDP-1/edid
Run Code Online (Sandbox Code Playgroud)

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