Как получить EDID для одного монитора?

20

В ожидании ответа на xrandr обнаружение усилителя в качестве монитора возможный обходной путь - занести в черный список устройства с определенными значениями EDID . К сожалению, xrandr --verboseпечатает все в формате, который является громоздким для анализа и не поддерживает запросы к отдельным устройствам, и get-edidвыходные данные, кажется, не легко сопоставить xrandrс идентификаторами монитора (например DVI-1).

Есть ли способ получить легко разбираемый EDID для одного монитора?

l0b0
источник
Я бы пошел на xrandrразбор. Это громоздко, но вы просто напишите свой сценарий раз и навсегда, и тогда он будет работать везде.
Жиль "ТАК - перестань быть злым"

Ответы:

18

Ведущий № 1: монитор-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? ,

Ссылки

SLM
источник
@ l0b0 - только 2? Похоже, больше. Возможно, я путаю категорию этого вопроса с тем, что вы спрашиваете их. Я удалю оскорбительный бит 8-)
slm
# 3 / sys / ... у меня работает, у меня Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)с i915драйвером, Kubuntu
15.04
# 3 / sys / ... и xrandr --verboseоба возвращают данные EDID для моего монитора HDMI, но не возвращают данные EDID для моего монитора DVI.
noobninja
Ссылка на монитор-edid неактивна, а archive.org не имеет резервных копий. Кто-нибудь знает, где я могу получить этот инструмент?
Питер В.
@PeterW. - есть альтернатива, спасибо, что обратили на это мое внимание. Также инструмент находится в большинстве крупных репо. Я нашел это в Fedora 24, например, а также в CentOS. Таким образом, вы можете установить инструмент в виде двоичного файла, что, вероятно, намного проще.
SLM
11

Вывод xrandr --propsсодержит шестнадцатеричные строки EDID для каждого подключенного дисплея менее подробным способом. Вот простой скрипт Python, использующий это для получения EDID для конкретного подключенного монитора.

Я не нашел других дистрибутивных инструментов CLI, которые бы работали для извлечения EDID в моей системе на базе NVidia, но большинство инструментов для анализа двоичного 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
Просто чтобы уточнить, что get-edid не работал для меня, пока я не сделал "modprobe i2c-dev". И созданный "parse-edid" Modeline не был принят Xorg. Итак, я использовал это в разделе устройства: Опция "CustomEDID" "CRT-0: /etc/X11/edid-StarLight-170418_gb-nv-gf-650-GTX-VGA.bin" Мне нужно вручную предоставить EDID так как он не может быть правильно прочитан более 10 м длиной VGA-кабеля. Настройка «DisplaySize» также была полезна для меня.
Делиан Крустев
3

Последняя версия инструмента под названием edid-decode может анализировать информацию EDID, а также может читать и записывать текстовые и двоичные файлы EDID. Хорошо работает на выходе xrandr --verbose. Например, его можно использовать для сохранения EDID в двоичном файле:

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

Версия edid-decode, поставляемая с Fedora 27 (package: xorg-x11-utils), слишком старая и не работает идеально. Я использовал самую последнюю версию .

Эрик Соколовский
источник
2

В двоичном виде EDID доступен по адресу /sys/class/drm/card%d-%s/edid, где %dпредставляет индекс устройства DRM (возможно, индекс GPU) и %sпредставляет собой идентификатор соединителя, который вы видите в xrandrвыходных данных.

Чтобы просмотреть все доступные, запустите 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, я добавил пример.
пользователь