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

15

Estou interessado em encaminhar uma sessão X11 pelo SSH, a fim de iniciar um processo remoto que utiliza o OpenGL (especificamente, gazebo para qualquer pessoa familiar).

O problema em que pareço me deparar é que o gazebo trava devido a uma incompatibilidade nas placas gráficas; não consegue encontrar extensões "NV-GLX". A saída exata do erro:

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.

Testei o encaminhamento de gazebo X11 entre duas máquinas com placas NVIDIA. Funciona muito bem.

Tanto quanto posso dizer, parece que uma das três coisas está acontecendo:

  1. Estou fazendo algo errado,
  2. O que eu quero fazer é impossível,
  3. O Gazebo não é construído de maneira agnóstica com caminhos de código ramificados para hardware diferente; seja qual for o seu sistema quando ele for criado, é o que você recebe.

A máquina remota está executando o Ubuntu e minha máquina local é um Mac executando 10.8.2; Eu já sei que tenho o encaminhamento x11 configurado corretamente para uso normal, pois posso abrir coisas como o xclock no XQuartz. A solução (se existir) também funcionaria preferencialmente para outros sistemas operacionais, incluindo Windows sobre WinSCP.

Doug Stephen
fonte

Respostas:

9

Algumas notas do artigo da GLX Wikipedia :

GLX [is] Uma extensão do protocolo X, que permite ao cliente (o aplicativo OpenGL) enviar comandos de renderização em 3D ao servidor X (o software responsável pela exibição). O software cliente e servidor pode ser executado em computadores diferentes.

e

Se o cliente e o servidor estiverem em execução no mesmo computador e uma placa de vídeo 3D acelerada usando um driver adequado estiver disponível, os dois primeiros componentes poderão ser ignorados pelo DRI. Nesse caso, o aplicativo cliente pode acessar diretamente o hardware de vídeo através de várias camadas da API.

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

Coisas para experimentar:

  1. Em vez de gazebo, tente glxdemo.
  2. Se possível, coloque os dois computadores na mesma rede e retire ssh da imagem
  3. A grande arma: stracesua gazeboinvocação e descubra por que ela está carregando nv-glx

Boa sorte!

ckhan
fonte
Os computadores já estão na mesma rede, mas gostaríamos de mudar todas as nossas máquinas de gazebo para um armário de servidor em algum momento, mas ainda temos os recursos visuais do software disponíveis, e é por isso que estou procurando o encapsulamento SSH. A menos que você esteja dizendo que tê-los na mesma rede permite uma configuração diferente que torna o SSH desnecessário (acho que estou configurando uma configuração maluca de xhost / cliente, não sei muito sobre o X11).
Doug Stephen
Não há necessidade de ssh - se isso toda a sua rede privada de sistemas confiáveis, tente xhost +em sua máquina local e definir o seu DISPLAY no sistema remoto para 'ip-ou-nome-de-local: 0`
ckhan
1
Não consegui gazebotrabalhar, mas estou marcando isso como a resposta aceita, porque suas sugestões eram tecnicamente corretas. Eu sou capaz de encapsular glxdemousando todas as sugestões que você fez (ssh e xserver / xclient pela rede), mas o próprio Gazebo parece não criar caminhos de código ramificados e assume que ele não deve ser executado nessa configuração estranha. Obrigado!.
Doug Stephen
Existe um gazebo web e é realmente incrível, você pode iniciar um servidor de gazebo em uma máquina remota (até WAN), encapsular um túnel com ssh e abrir o navegador para ver o gazebo lá. Melhor solução de sempre.
Mehdi