¿Cómo se pueden mostrar los gráficos OpenGL de forma remota usando VNC?

24

Estoy intentando ejecutar un programa que usa OpenGL para representar un modelo en una ventana gráfica a través de VNC sin éxito.

El mensaje de error que recibo es - Xlib: falta la extensión "GLX" en la pantalla ": 1.0".

Entendí que VNC se puede configurar para renderizar todos los gráficos de forma remota y enviar una captura de pantalla comprimida desde el búfer de visualización al cliente local. Esto parecería negar la necesidad de extensiones GLX en el cliente local. ¿Se puede configurar VNC de esta manera y podría describir brevemente cómo?

Servidor remoto:

vncserver en RHEL 5

Cliente local:

UltraVNC en Windows XP

Jared Brown
fuente
¿El programa OpenGL funcionará localmente en la consola RH # L5? ¿Funcionará de forma remota a través de X-Windows? Si no, no funcionará en VNC.
kmarsh
2
¿Por qué es esto un Wiki de la comunidad?
Chris S
Pensé que si se tratara de una comunidad wiki, la gente podría editar la pregunta para hacerla más relevante para el archivo.
Jared Brown

Respuestas:

17

Es posible que desee mirar GL virtual

Cita: "VirtualGL es un paquete de código abierto que brinda a cualquier software de visualización remota de Unix o Linux la capacidad de ejecutar aplicaciones OpenGL con aceleración de hardware 3D completa"

Totaam
fuente
14

Estoy usando x11vnc para obtener acceso remoto a lo que se muestra en el monitor. x11vnc se comunica con el servidor X11 local y copia el framebuffer del servidor al cliente a través de vnc. Dado que el servidor X11 local representa todo con aceleración de hardware, obtengo OpenGL acelerado por hardware sobre VNC, incluso con todos los efectos geniales de escritorio. Así es como comienzo x11vnc:

x11vnc -rfbauth ~/.vnc/passwd  -display :0 -forever -bg -repeat -nowf -o ~/.vnc/x11vnc.log

Creo que casi cualquier visor vnc funciona, pero recomendaría turbovnc o tigervnc. Primero probé VirtualGL, y funciona bien, pero no para todo el escritorio, solo para aplicaciones OpenGL individuales.

Incluso es posible cambiar la resolución en la pantalla / vnc usando xrandr. Por ejemplo, así:

xrandr -q (to see available modes and outputs)
xrandr --output DVI-I-0 --mode "1024x768" (change mode on DVI output)

(Es posible agregar nuevas resoluciones si los modos disponibles no son suficientes, pero eso está fuera del alcance aquí).

Así que ahora tengo una sesión VNC completamente acelerada y redimensionable por hardware OpenGL.

Henrik
fuente
1
Probé este enfoque con xfce4 y blender en una máquina Tesla K80 GCE ... funcionó a la perfección. Gnome-shell todavía no se mostraría correctamente por alguna razón, como siempre. askubuntu.com/questions/229989/…
Ray Foss
1

Deshabilite el controlador especial Video Hook que utiliza UltraVNC, o use TightVNC.

Dado que el controlador UltraVNC se utiliza para mejorar el rendimiento, elimina cualquier tipo de procesamiento de video realizado en la tarjeta de video, como OpenGL.

El controlador de video que UltraVNC instala esto de manera predeterminada, lo hace para que no pueda mostrar gráficos OpenGL. Tenga en cuenta que deshabilitar el controlador disminuirá drásticamente el rendimiento. También tenga en cuenta que mientras se muestran los elementos representados en OpenGL, el rendimiento se verá afectado en ambos extremos, ya que la máquina del cliente ahora tiene mucho más trabajo por hacer y el ancho de banda requerido es mucho mayor. No esperes nada más de 4 segundos por cuadro (no 4 fps, más como 0.25 fps)

Mago de hielo
fuente
Cuando dice deshabilitar el enlace de video en UltraVNC, ¿se refiere al cliente local? ¿No debería configurarse en su lugar el vncserver que se ejecuta en el host remoto?
Jared Brown el
No, me refiero al cliente local. UltraVNC incluye un controlador de video que se instala con él. A menos que usted indique explícitamente lo contrario, el controlador de video intentará procesar todo el video en el extremo del cliente para que pueda comprimirlo y transmitirlo para su uso en la red. A veces es posible especificar en el visor que no desea utilizar esta función, pero UltraVNC (al menos solía) tiende a ignorar esto.
IceMage
Además, lo remoto y lo local dependen de su perspectiva. Cuando digo local, realmente me refiero al Host (la computadora que está escuchando nuevas conexiones), y Remoto significa la computadora que hace la conexión. Corregiré esto para futuras publicaciones.
IceMage
OK, supongo que estoy usando la jerga opuesta. Cuando instalé el visor UltraVNC, no creo que haya instalado un controlador de video. El servidor UltraVNC que conozco lo hace, pero no lo estoy usando. Estoy usando vncserver en una máquina RHEL5 como host.
Jared Brown el
Entonces, mi verdadera pregunta es, ¿cómo configuro vncserver para que no envíe comandos GLX sino que simplemente envíe una pantalla comprimida desde el búfer de visualización al visor UltraVNC?
Jared Brown el