OpenGL en remoto (ssh) y Nvidia

Para el rendering OpenGL en un ordenador remoto se recurre (por defecto) a «indirect rendering» (los comandos Open GL pasan por el protocolo GLX). El «direct rendering» permite acceder directamente a la GPU del ordenador donde se ejecuta la aplicación. Este es el modo que usa por defecto el controlador nativo de Nvidia, que de hecho por defecto rechaza el uso del «indirect rendering» (se puede rehabilitar con la opción «AllowIndirectGLX» de la sección «ServerFlags» de xorg.con).

Así pues, ejecutando la instalación por defecto del driver nativo de Nvidia, se sustituye la biblioteca del sistema libGL. Con lo cual, se pierde el «indirect rendering» y las aplicaciones OpenGL dejan de funcionar en remoto (X11 sobre SSH)

Por otro lado, la biblioteca libGL que Nvidia instala puede ser necesaria para otras aplicaciones (por ejemplo, CUDA)

Una posibilidad es rescatar la biblioteca libGL original (del paquete libgl1-mesa-glx, o equivalente) y recurrir a ella para uso remoto, anteponiendo LD_PRELOAD=/ruta/a/libGLoriginal.so al programa a utilizar.

Si MESA recurre a swrast_dri.so para hacer el rendering (render por software), es probable que haya conflictos con bibliotecas como libstdc++.so.6 o libgcc_s.so (como suele suceder con UCSF Chimera, que tiene sus propias copias de esas bibliotecas en su directorio lib). En este caso se puede usar el mismo «truco» de LD_PRELOAD, pero con esas bibliotecas:

LD_PRELOAD=/usr/lib/gcc/x86_64-linux-gnu/4.9/libgcc_s.so:/usr/lib/x86_64-linux-gnu/libstdc++.so.6 chimera

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *