X11 encaminhando um aplicativo OpenGL de uma máquina executando uma placa NVIDIA para uma máquina com uma placa AMD

14
Estou interessado em encaminhar uma sessão do X11 sobre o SSH, a fim de lançar um processo remoto que utiliza OpenGL (especificamente, gazebo para qualquer pessoa familiar .)

O problema que parece estar correndo é que o gazebo trava devido a uma incompatibilidade nas placas gráficas; Não é possível encontrar extensões "NV-GLX". A saída de erro exata:

Xlib:  extension "NV-GLX" missing on display "localhost:10.0".
Xlib:  extension "NV-GLX" missing on display "localhost:10.0".
X Error of failed request:  GLXUnsupportedPrivateRequest
  Major opcode of failed request:  149 (GLX)
  Minor opcode of failed request:  16 (X_GLXVendorPrivate)
  Serial number of failed request:  24
  Current serial number in output stream:  25

A máquina remota está funcionando com uma placa NVIDIA, e minha máquina local está usando uma placa AMD.

Eu testei o encaminhamento do X11 do gazebo entre duas máquinas com cartões NVIDIA. Funciona muito bem.

Por mais que eu saiba, parece que uma de três coisas está acontecendo:

  1. estou fazendo algo errado,
  2. O que eu quero fazer é impossível
  3. O Gazebo não cria de maneira agnóstica com codepaths de ramificação para hardware diferente; seja qual for o seu sistema quando ele é construído, você obtém o que obtém.

Eu realmente espero que seja # 1, e eu estou realmente esperando que alguém aqui possa me ajudar. Se isso faz alguma diferença, a máquina remota está executando o Ubuntu e minha máquina local é um Mac rodando 10.8.2; Eu já sei que eu tenho x11 encaminhamento configurado corretamente para uso normal, como posso fazer coisas como xclock para abrir em XQuartz muito bem. A solução (se existir) também funcionaria preferencialmente para outros sistemas operacionais, incluindo o Windows, através do WinSCP.

    
por Doug Stephen 16.05.2013 / 01:38

1 resposta

9

Algumas notas do artigo da Wikipédia GLX :

GLX [is] An extension of the X protocol, which allows the client (the OpenGL application) to send 3D rendering commands to the X server (the software responsible for the display). The client and server software may run on different computers.

e

If client and server are running on the same computer and an accelerated 3D graphics card using a suitable driver is available, the former two components can be bypassed by DRI. In this case, the client application is then allowed to directly access the video hardware through several API layers.

Acredito que o primeiro ponto responde à sua pergunta sobre se isso é possível ou não: certamente deveria ser possível. O segundo pode fornecer uma explicação sobre por que seu programa cliente insiste em usar os recursos de seu servidor X local (o driver NV GLX) - talvez ele ache que localhost:10.0 é o mesmo computador e tentou uma conexão de direção.

Coisas para experimentar:

  1. Em vez de gazebo , tente glxdemo .
  2. Se possível, obtenha os dois computadores na mesma rede e tire ssh da imagem
  3. A arma grande: strace your gazebo invocation e descubra porque ele está carregando nv-glx

Boa sorte!

    
por 16.05.2013 / 06:43

Tags