Fazer o DVI funcionar através do Lenovo USB Port Replicator em 12.10: Instabilidade e fazer com que ele use o arquivo xorg.conf

3

Configuração:

O computador é um Lenovo Thinkpad SL500 que usa o Replicador de porta USB executando o LiveCD para o Ubuntu 12.10.

O computador possui um anexo USB para o replicador de porta. Replicador de porta tem conversor DVI para HDMI e conecta via HDMI para Sony Bravia TV

Sintoma Inicial:

Todas as funções do replicador de porta (áudio, portas USB, porta lan) funcionam exceto o vídeo. No dmesg, obtenha o seguinte erro:

[drm:drm_edid_block_valid] *ERROR* EDID checksum is invalid, remainder is '<num>'

usb 2-4.1: DVI-I-1: EDID invalid.

Estado atual:

Não há problema em obter um EDID, mas há muitas falhas e só é possível usá-lo parcialmente, mesmo se forçá-lo (mais detalhes: consulte EDIT 3).

Conclusão atual:

Então, depois do tempo queimado, minhas conclusões são:

  1. não é plug and play
  2. provavelmente poderia funcionar, mas ainda sinto falta de algo
  3. não é muito estável

Ainda seria bem-vindo qualquer contribuição de alguém que esteja passando por isso.

Primeira solução de problemas:

Solução de problemas até o momento:

  1. Ao usar o Windows Vista, o monitor externo funciona através do replicador de portas USB
  2. Ao conectar o monitor externo diretamente na porta HDMI, ele funciona bem
  3. Ao conectar um laptop diferente (lenovo thinkpad x61t) que esteja executando o Ubuntu 12.10 nativamente, obtenha o mesmo erro. Note que todos os testes que lidam com o download de pacotes e compilação foram feitos com este laptop desde que ele está executando 12.10 nativamente.

Do acima:

  • não há problema com monitor externo (já que funciona via HDMI e através de replicador de porta com windows)
  • não há problema com o computador (o mesmo comportamento no outro computador)
  • não há problema com a placa de vídeo (já que funciona via HDMI e através do replicador de porta com o Windows)
  • não há problema com o replicador de portas (já que funciona com o windows)

Parece estar relacionado especificamente ao reconhecimento do DVI através do replicador de porta USB com o Ubuntu.

Alguém já conseguiu vídeo para trabalhar com o replicador de porta usb? Em caso afirmativo, qual configuração é necessária?

Esta é a última coisa que preciso para trabalhar para convencer minha esposa a mudar do Windows para o Ubuntu em seu computador. Eu estava tão perto!

EDIT1: segunda solução de problemas

Tentando usar o driver xf86-displaylink-0.3. Há muitos posts sobre isso aqui e em outros lugares. Infelizmente, recebo um erro de compilação que, de acordo com alguns sites, é devido ao upgrade do xorg. Alguém já se deparou com uma correção? Parece que carregar esse driver pode ser a etapa que preciso para passar pelo erro acima e seguir para a próxima etapa para que isso funcione.

Aqui está o erro:

make  all-recursive
make[1]: Entering directory '/home/rob/xf86-video-displaylink'
Making all in src
make[2]: Entering directory '/home/rob/xf86-video-displaylink/src'
/bin/bash ../libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I..    -fvisibility=hidden -I/usr/include/pixman-1 -I/usr/include/libdrm -I/usr/include/xorg -I/usr/include/X11/dri   -g -O2 -MT displaylink.lo -MD -MP -MF .deps/displaylink.Tpo -c -o displaylink.lo displaylink.c
libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -fvisibility=hidden -I/usr/include/pixman-1 -I/usr/include/libdrm -I/usr/include/xorg -I/usr/include/X11/dri -g -O2 -MT displaylink.lo -MD -MP -MF .deps/displaylink.Tpo -c displaylink.c  -fPIC -DPIC -o .libs/displaylink.o
displaylink.c: In function ‘DisplayLinkFreeRec’:
displaylink.c:165:2: warning: ‘Xfree’ is deprecated (declared at /usr/include/xorg/os.h:234) [-Wdeprecated-declarations]
displaylink.c: In function ‘DisplayLinkProbe’:
displaylink.c:204:10: warning: assignment discards ‘const’ qualifier from pointer target type [enabled by default]
displaylink.c:226:28: warning: assignment from incompatible pointer type [enabled by default]
displaylink.c:237:2: warning: ‘Xfree’ is deprecated (declared at /usr/include/xorg/os.h:234) [-Wdeprecated-declarations]
displaylink.c: In function ‘DisplayLinkPreInit’:
displaylink.c:285:7: error: ‘struct _ScrnInfoRec’ has no member named ‘racMemFlags’
displaylink.c:285:23: error: ‘RAC_FB’ undeclared (first use in this function)
displaylink.c:285:23: note: each undeclared identifier is reported only once for each function it appears in
displaylink.c:285:32: error: ‘RAC_COLORMAP’ undeclared (first use in this function)
displaylink.c:285:47: error: ‘RAC_CURSOR’ undeclared (first use in this function)
displaylink.c:285:60: error: ‘RAC_VIEWPORT’ undeclared (first use in this function)
displaylink.c:287:7: error: ‘struct _ScrnInfoRec’ has no member named ‘racIoFlags’
displaylink.c:290:2: warning: passing argument 3 of ‘fbdevHWInit’ discards ‘const’ qualifier from pointer target type [enabled by default]
In file included from displaylink.c:52:0:
/usr/include/xorg/fbdevhw.h:21:23: note: expected ‘char *’ but argument is of type ‘const char *’
displaylink.c:351:2: warning: ‘Xalloc’ is deprecated (declared at /usr/include/xorg/os.h:215) [-Wdeprecated-declarations]
displaylink.c: In function ‘DisplayLinkScreenInit’:
displaylink.c:474:2: warning: passing argument 1 of ‘fbdevHWAdjustFrame’ makes pointer from integer without a cast [enabled by default]
In file included from displaylink.c:52:0:
/usr/include/xorg/fbdevhw.h:50:23: note: expected ‘ScrnInfoPtr’ but argument is of type ‘int’
displaylink.c:474:2: error: too many arguments to function ‘fbdevHWAdjustFrame’
In file included from displaylink.c:52:0:
/usr/include/xorg/fbdevhw.h:50:23: note: declared here
displaylink.c:554:23: warning: assignment from incompatible pointer type [enabled by default]
displaylink.c: In function ‘DisplayLinkCloseScreen’:
displaylink.c:575:2: warning: passing argument 1 of ‘pScreen->CloseScreen’ makes pointer from integer without a cast [enabled by default]
displaylink.c:575:2: note: expected ‘ScreenPtr’ but argument is of type ‘int’
displaylink.c:575:2: error: too many arguments to function ‘pScreen->CloseScreen’
make[2]: *** [displaylink.lo] Error 1
make[2]: Leaving directory '/home/rob/xf86-video-displaylink/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/rob/xf86-video-displaylink'
make: *** [all] Error 2

EDIT2: Terceira solução de problemas:

Consegui chegar à tela verde. Eu precisava alterar a instrução de retorno da função DisplayLinkCloseScreen comente a instrução de inclusão para fbdevhw.h no código-fonte.

A declaração de retorno é agora:

    return pScreen->CloseScreen;

Isso colocou o driver instalado com sucesso. (Atenção: não sou engenheiro de software).

No entanto, depois de criar o tipo de arquivo xorg.conf em xorg.conf.d , ainda não obtive êxito para que o monitor displaylink funcione. O displaylink é reconhecido, mas depois removido (como visto no log).

Aqui está o arquivo de configuração atual do xorg, que teve várias variações sutis:

Section "Device"
    Identifier  "Configured Video Device"
    Driver      "intel"
    BusID       "PCI:00:02:0"
EndSection

Section "Monitor"
    Identifier  "Configured Monitor"
EndSection

Section "Screen"
    Identifier  "Default Screen"
    Monitor     "Configured Monitor"
    Device      "Configured Video Device"
EndSection

#################################################

Section "ServerLayout"
        Identifier      "Server Layout"          
        Screen  1       "Default Screen" 0 0
        Screen  0       "DisplayLinkScreen" rightof "Default Screen"
    Option          "Xinerama" "on"
    Option      "Clone" "off"
EndSection

#################################################

Section "Files"
        ModulePath      "/usr/lib/xorg/modules"
        ModulePath      "/usr/local/lib/xorg/modules"
    ModulePath  "/usr/local/lib/xorg/modules/drivers"
EndSection

############### DisplayLink Stuff
###############                                                                 

Section "Device"
        Identifier      "DisplayLinkDevice"
        driver          "displaylink"
        Option  "fbdev" "/dev/fb1"
    Option "ModeValidation" "NoEdidModes"
EndSection

Section "Monitor"
        Identifier      "DisplayLinkMonitor"
    Option   "ExactModeTimingsDVI" "TRUE"
    HorizSync 15.0 - 70.0
    VertRefresh 58.0 - 62.0
    Modeline     "1024x768" 65.00 1024 1048 1184 1344 768 771 777 806 -h
sync -vsync
EndSection

Section "Screen"
        Identifier      "DisplayLinkScreen"
    Device          "DisplayLinkDevice"
        Monitor         "DisplayLinkMonitor"
        SubSection "Display"
                Depth   16
        Modes   "1024x768"
        EndSubSection
EndSection

Aqui está a parte no Xorg.0.log, onde parece ao meu olho inexperiente estar retirando o displaylink:

[    33.383] (II) LoadModule: "displaylink"
[    33.436] (II) Loading /usr/local/lib/xorg/modules/drivers/displaylink_drv.so
[    33.444] (II) Module displaylink: vendor="X.Org Foundation"
[    33.445] (II) DL: driver for : displaylink
[    33.445] (WW) Falling back to old probe method for displaylink
[    33.484] (II) UnloadModule: "displaylink"
[    33.484] (II) Unloading displaylink

O site a seguir foi útil para chegar até onde eu sou atualmente: link

Alguma idéia?

EDIT3: quarta solução de problemas

Ok, depois de muito mais trabalho e muito mais surf (há pessoas demais tentando isso para dar crédito; infelizmente, ninguém que eu encontrei tinha uma boa resposta limpa para 12.10), eu percebi algumas coisas:

    A tela
  1. não precisa estar verde. Ele será verde com udlfb (que está na lista negra nativamente em 12.10) e não mostrará nenhuma cor com udl em 12.10.

  2. não precisa necessariamente carregar nenhum módulo fora do 12.10. De fato, se você fizer isso, como mostrado acima, isso causa problemas em 12.10, já que a API mudou para o xorg 1.13 e você recebe muitos problemas de compilação

  3. ao tentar modificar os módulos anteriores para trabalhar em 12.10, acabei recebendo falhas de segmentação no xorg

  4. usando os recursos nativos 12.10, com udl ou udlfb, não são plug and play

  5. Eu posso fazer o monitor externo funcionar usando udl ou udlfb em uma configuração de teste, onde forço o uso do arquivo xorg.conf executando um startx -- :2 -config <name of xorg.conf file> .No entanto:

    • geralmente leva a quedas no xorg
    • quando isso não acontece, só consigo fazer o monitor displaylink funcionar e perder meu monitor de laptop em :2 ; também, eu não obtenho o Unity no monitor displaylink
    • Eu só consigo usar o monitor displaylink com o comando startx ; caso contrário, ele não verá o monitor displaylink nem o usará, apesar da presença do mesmo arquivo conf em /etc/X11/xconf.d .
por robatbeach 10.02.2013 / 22:03

0 respostas