Jak uzyskać EDID dla jednego monitora?


20

W oczekiwaniu na odpowiedź dla xrandr wykrywa wzmacniacz, ponieważ możliwe jest obejście czarnej listy urządzeń o określonych EDID . Niestety xrandr --verbosedrukuje wszystko w formacie, który jest nieporęczny do analizy i nie obsługuje get-edidwysyłania zapytań do pojedynczych urządzeń, a wyniki nie wydają się łatwe do mapowania na xrandridentyfikatory monitorów (na przykład DVI-1).

Czy jest jakiś sposób na uzyskanie łatwo analizowalnego EDID dla pojedynczego monitora?


Poszedłbym na xrandrparsowanie. Jest to uciążliwe, ale po prostu piszesz skrypt raz na zawsze, a potem zadziała wszędzie.
Gilles „SO- przestań być zły”

Odpowiedzi:


18

Lead # 1: monitor-edid

Nie przepadam za EDID i monitorami, ale znalazłem to narzędzie, monitor-edidktóre może ci się tu przydać.

Wybacz mi, jeśli jest poza bazą, staram się również dowiedzieć się więcej o tej przestrzeni, biorąc pod uwagę różnorodność pytań, które zadajesz na ten temat.

$ 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

Lead # 2: ddcontrol

Nazywałem się też innym narzędziem ddccontrol, które może być pomocne w uzyskiwaniu potrzebnych informacji.

Ołów nr 3: / sys

W końcu przeszukując /syszauważyłem, że z różnych interfejsów wideo zwisają węzły liści.

$ 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

Jednak na moim laptopie Lenovo te „pliki” były puste, być może różnią się w twoim systemie. Znalazłem ten wątek forum, który pokazywał przykładowe dane wyjściowe z 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.       ..

Źródło: Wyciąg Monitor Numer seryjny / Data produkcji przy użyciu EDID? .

Bibliografia


@ l0b0 - czy to tylko 2? Wydawało się, że więcej. Być może myliłem kategorię tego pytania z tylko pytaniem. Usunę obraźliwy bit 8-)
slm

# 3 / sys / ... działa dla mnie, mam Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)ze i915sterownikiem, Kubuntu 15.04
user.dz

# 3 / sys / ... i xrandr --verboseoba zwracają dane EDID dla mojego monitora HDMI, ale nie zwracają danych EDID dla mojego monitora DVI.
noobninja

Link monitor-edid nie działa, a archive.org nie ma żadnych kopii zapasowych. Czy ktoś wie, gdzie mogę zdobyć to narzędzie?
Peter W.

@PeterW. - istnieje alternatywa, dziękuję za zwrócenie mojej uwagi na to. Również narzędzie znajduje się w większości dużych repozytoriów. Znalazłem to na przykład w Fedorze 24, a także w CentOS. Możesz więc zainstalować narzędzie jako plik binarny, co jest prawdopodobnie znacznie łatwiejszą opcją.
slm

11

Dane wyjściowe xrandr --propszawierają ciągi szesnastkowe EDID dla każdego podłączonego wyświetlacza w mniej szczegółowy sposób. Oto prosty skrypt Pythona wykorzystujący to do pobrania EDID dla konkretnego podłączonego monitora.

Nie znalazłem żadnych innych narzędzi CLI w pakiecie dystrybucyjnym, które działają w celu wyodrębnienia EDID w moim systemie opartym na NVidii, ale większość narzędzi do analizowania binarnego EDID wydaje się działać dobrze.


8

Jeśli używasz łuku x86 lub powerpc, możesz użyć read-edid. W Debianie jest to dostępne tutaj .

Użycie jest po prostu (musisz być rootem):

$ sudo get-edid > /tmp/edid

a następnie przeanalizuj strukturę:

$ 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

Często łączy się to w:

$ sudo get-edid | parse-edid

Zobacz także tutaj, jak przekazać ten niestandardowy plik edid na kartę graficzną za pomocą:

  • CustomEDID lub,
  • drm_kms_helper.edid_firmare

3
Żeby wyjaśnić, że get-edid nie działało dla mnie, dopóki nie zrobiłem „modprobe i2c-dev”. Xine nie przyjęła modeliny wyprodukowanej w „parsididid”. Użyłem tego w sekcji urządzenia: Opcja „CustomEDID” „CRT-0: /etc/X11/edid-StarLight-170418_gb-nv-gf-650-GTX-VGA.bin” Muszę ręcznie podać EDID ponieważ nie można go poprawnie odczytać na kablu VGA o długości 10 m. Ustawienie „DisplaySize” było również dla mnie przydatne.
Delian Krustev

3

Najnowsza wersja narzędzia o nazwie edid-decode może analizować informacje EDID oraz odczytywać i zapisywać pliki tekstowe i binarne EDID. Działa dobrze na wyjściu xrandr --verbose. Na przykład można go użyć do zapisania EDID w pliku binarnym:

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

Wersja edid-decode dostarczana z Fedorą 27 (pakiet: xorg-x11-utils) jest za stara i nie działa idealnie. Użyłem najnowszej wersji .


2

W formie binarnej EDID jest dostępny pod adresem /sys/class/drm/card%d-%s/edid, gdzie %dreprezentuje indeks urządzenia DRM (prawdopodobnie indeks GPU) i %sjest identyfikatorem złącza widocznym na xrandrwyjściu.

Aby wyświetlić listę wszystkich dostępnych, uruchom ls -1 /sys/class/drm/*/edid

Jeśli twój sterownik GPU nie obsługuje DRM, nie będziesz mógł uzyskać EDID w ten sposób.

Aby wyświetlić w formie szesnastkowej, uruchom hexdumpna nim.

Jeśli chcesz formy czytelnej dla ludzi, przekaż ją edid-decodenp .:

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

(może być konieczne zainstalowanie go za pomocą menedżera pakietów sudo apt install edid-decodew systemie Ubuntu)


Jak to przekazać edid-decode? Należy również pamiętać, że istnieją również podkatalogi dla odłączonych monitorów.
WinEunuuchs2Unix

@ WinEunuuchs2Unix, dodałem przykład.
użytkownik
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.