X11 reenvía una aplicación OpenGL desde una máquina que ejecuta una tarjeta NVIDIA a una máquina con una tarjeta AMD

15

Estoy interesado en reenviar una sesión X11 a través de SSH, para iniciar un proceso remoto que utilice OpenGL (específicamente, gazebo para cualquier persona familiarizada).

El problema con el que parece estar tropezando es que la glorieta se bloquea debido a una falta de coincidencia en las tarjetas gráficas; no puede encontrar extensiones "NV-GLX". El resultado exacto del error:

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

La máquina remota funciona con una tarjeta NVIDIA y mi máquina local está usando una tarjeta AMD.

He probado el reenvío X11 de gazebo entre dos máquinas con tarjetas NVIDIA. Funciona bien

Por lo que puedo decir, parece que una de las tres cosas está sucediendo:

  1. Estoy haciendo algo mal,
  2. Lo que quiero hacer es imposible
  3. Gazebo no se construye de manera agnóstica con rutas de código de ramificación para hardware diferente; lo que su sistema se ve cuando se construye es lo que obtienes.

La máquina remota ejecuta Ubuntu y mi máquina local es una Mac con 10.8.2; Ya sé que tengo el reenvío x11 configurado correctamente para el uso normal, ya que puedo hacer que cosas como xclock se abran en XQuartz muy bien. La solución (si existe) también funcionaría preferiblemente para otros sistemas operativos, incluido Windows sobre WinSCP.

Doug Stephen
fuente

Respuestas:

9

Algunas notas del artículo de Wikipedia GLX :

GLX [es] Una extensión del protocolo X, que permite al cliente (la aplicación OpenGL) enviar comandos de renderizado 3D al servidor X (el software responsable de la pantalla). El cliente y el software del servidor pueden ejecutarse en diferentes computadoras.

y

Si el cliente y el servidor se ejecutan en la misma computadora y una tarjeta gráfica 3D acelerada que utiliza un controlador adecuado está disponible, DRI puede omitir los dos componentes anteriores. En este caso, la aplicación cliente puede acceder directamente al hardware de video a través de varias capas API.

Creo que el primer punto responde a su pregunta sobre si esto es posible o no: ciertamente debería ser posible. El segundo puede proporcionar una explicación de por qué su programa cliente insiste en usar las funciones de su servidor X local (el controlador NV GLX), tal vez cree que localhost:10.0es la misma computadora, y por eso intentó una conexión de dirección.

Cosas para probar:

  1. En lugar de gazebointentarlo glxdemo.
  2. Si es posible, obtenga las dos computadoras en la misma red y saque ssh de la imagen
  3. El gran arma: stracetu gazeboinvocación, y descubre por qué está cargando nv-glx

¡Buena suerte!

ckhan
fuente
Las computadoras ya están en la misma red, pero nos gustaría mover todas nuestras máquinas de gazebo a un armario de servidores en algún momento, pero todavía tenemos las imágenes del software a nuestra disposición, por eso estoy buscando un túnel SSH. A menos que esté diciendo que tenerlos en la misma red permite una configuración diferente que hace que SSH no sea necesario (supongo que configurar una configuración loca de xhost / cliente, no sé mucho sobre X11).
Doug Stephen
No necesita ssh: si esta es toda su red privada de sistemas confiables, pruebe xhost +su máquina local y configure su PANTALLA en el sistema remoto a 'ip-or-name-of-local: 0'
ckhan
1
No pude llegar gazeboal trabajo, pero estoy marcando esto como la respuesta aceptada porque sus sugerencias eran técnicamente correctas. Puedo hacer un túnel glxdemousando todas las sugerencias que hizo (ssh y xserver / xclient a través de la red), pero Gazebo parece no construir rutas de código de ramificación y supone que no se ejecutará en esta configuración extraña. ¡Gracias!.
Doug Stephen
Hay gazebo web y es realmente sorprendente, puede iniciar un servidor de gazebo en una máquina remota (incluso WAN), hacer un túnel con ssh y abrir su navegador para ver allí. La mejor solución de todas.
Mehdi