Como obter o EDID para um único monitor?

20

Na pendência de uma resposta, o xrandr detecta o amplificador, pois, como monitor, uma possível solução alternativa é colocar dispositivos na lista negra com EDID s específicos . Infelizmente, xrandr --verboseimprime tudo em um formato que é difícil de analisar e não suporta a consulta de dispositivos únicos, e get-edida saída da parece não ser fácil de mapear para xrandros IDs do monitor (por exemplo DVI-1).

Existe alguma maneira de obter um EDID facilmente analisável para um único monitor?

l0b0
fonte
Eu iria xrandranalisar. É complicado, mas você apenas escreve seu script de uma vez por todas, e então ele funciona em qualquer lugar.
Gilles 'SO- stop be evil'

Respostas:

18

Lead nº 1: monitor-edid

Não gosto muito de EDID e monitores, mas encontrei essa ferramenta, monitor-edidque também pode ser útil para você aqui.

Perdoe-me se estiver fora da base, estou tentando também aprender mais sobre esse espaço, dada a variedade de perguntas que você faz sobre o assunto.

$ 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 nº 2: ddcontrol

Houve outra ferramenta que me deparei chamada ddccontrol, que pode ser útil para obter as informações que você procura.

Lead nº 3: / sys

Finalmente, observando /sys, notei que havia nós de folhas pendurados nas várias interfaces de vídeo.

$ 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

No entanto, no meu laptop Lenovo, esses "arquivos" estavam vazios, talvez sejam diferentes no seu sistema. Encontrei este tópico do fórum que mostrava saída de amostra do 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.       ..

Fonte: Extrair o número de série do monitor / data de fabricação usando o EDID? .

Referências

slm
fonte
@ l0b0 - foram apenas 2? Parecia mais. Eu posso estar confundindo a categoria deste Q com apenas você perguntando a eles. Vou remover o bit ofensivo 8-)
slm
# 3 / sys / ... funciona para mim, tenho Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)com o i915driver, Kubuntu 15.04
user.dz
# 3 / sys / ... e xrandr --verboseambos retornam dados EDID para o meu monitor HDMI, mas também não retornam dados EDID para o meu monitor DVI.
noobninja
O link monitor-edid está inoperante e archive.org não possui nenhum backup. Alguém sabe onde eu posso conseguir essa ferramenta?
Peter W.
@PeterW. - existe a alternativa, obrigado por trazer isso à minha atenção. Além disso, a ferramenta está presente na maioria dos principais repositórios. Encontrei no Fedora 24, por exemplo, e também no CentOS. Então você pode instalar a ferramenta como um binário, o que provavelmente é uma opção muito mais fácil.
Slm
11

A saída de xrandr --propscontém seqüências EDID hexadecimais para cada exibição conectada de uma maneira menos detalhada. Aqui está um script Python simples que explora isso para obter um EDID para um monitor conectado específico.

Não encontrei nenhuma outra ferramenta CLI distribuída que distribua para a extração de EDID no meu sistema baseado em NVidia, mas a maioria das ferramentas para analisar um EDID binário parece funcionar bem.

Matt Vollrath
fonte
8

Se você estiver usando um arco x86 ou powerpc, poderá usar read-edid. No debian, isso está disponível aqui .

O uso é simples (você precisa ser root):

$ sudo get-edid > /tmp/edid

e depois analise a estrutura:

$ 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

Geralmente, isso é combinado em:

$ sudo get-edid | parse-edid

Veja também aqui como passar esse arquivo edid personalizado para sua placa gráfica usando:

  • CustomEDID ou,
  • drm_kms_helper.edid_firmare
malat
fonte
3
Apenas para esclarecer que o get-edid não funcionou para mim até que eu "modprobe i2c-dev". E a Modeline "parseedidida" produzida não foi aceita pelo Xorg. Então, usei isso na seção de dispositivos: Opção "CustomEDID" "CRT-0: /etc/X11/edid-StarLight-170418_gb-nv-gf-650-GTX-VGA.bin" Eu preciso fornecer manualmente o EDID pois não pode ser lido corretamente com um cabo VGA de 10 m de comprimento. Definir o "DisplaySize" também foi útil para mim.
Delian Krustev 19/04
3

Uma versão recente de uma ferramenta chamada edid-decode pode analisar informações EDID e pode ler e escrever arquivos EDID de texto e binários. Funciona bem na saída de xrandr --verbose. Por exemplo, ele pode ser usado para salvar o EDID em um arquivo binário:

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

A versão do edid-decode que acompanha o Fedora 27 (pacote: xorg-x11-utils) é muito antiga e não funciona perfeitamente. Eu usei a versão mais recente .

Eric Sokolowsky
fonte
2

No formato binário, o EDID está disponível em /sys/class/drm/card%d-%s/edid, onde %drepresenta o índice do dispositivo DRM (provavelmente um índice da GPU) e %sé um ID do conector que você vê na xrandrsaída.

Para listar todos os disponíveis, execute ls -1 /sys/class/drm/*/edid

Se o seu driver de GPU não suportar DRM, você não poderá obter o EDID dessa maneira.

Para visualizar em formato hexadecimal, execute hexdumpnele.

Se você deseja uma forma legível por humanos, passe-a para edid-decode, por exemplo:

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

(pode ser necessário instalá-lo usando o gerenciador de pacotes, sudo apt install edid-decodepara Ubuntu)

do utilizador
fonte
Como você passa isso para edid-decode? Observe também que existem subdiretórios para monitores desconectados.
WinEunuuchs2Unix 28/11
@ WinEunuuchs2Unix, adicionei um exemplo.
usuário