Cómo habilitar contextos GLX indirectos (+ iglx) en Ubuntu 14.04 LTS con nvidia gfx-cards

10

Estoy ejecutando un host Linux para el desarrollo de software Qt en un lugar central.

Con mi caja de Windows uso Xming como un servidor X local y masilla para conectarme a ese host Linux. Con esta configuración, puedo usar todos los programas X (xclock, xterm) y GLX (qtcreator, gxlinfo, glxgears ...) en el host de Linux.

Mi estación de trabajo principal es ubuntu 14.04 LTS con una tarjeta nvidia gfx. Cuando me conecto al host Linux con mi sistema ubuntu usando "ssh -p port # -YC my.dev.host.com", también puedo usar todos los programas X (xclock, xterm) pero no puedo usar los programas GLX (qtcreator, gxlinfo, glxgears ...).

Hasta ahora aprendí que esto se debe a que el servidor X no admite contextos GLX indirectos por defecto para la versión más joven 1.16.

Entonces mis preguntas son: ¿Cómo puedo habilitar contextos GLX indirectos (servidor X y controlador nvidida) en mi instalación ubuntu 14.04 LTS para que todo funcione como se espera de un servidor X?

¡Gracias por cualquier ayuda!

cmks

Aquí está la salida de glxgears, tal vez eso ayude:

[email protected]:~# LIBGL_DEBUG=verbose glxgears 
libGL: screen 0 does not appear to be DRI2 capable
libGL: OpenDriver: trying /usr/lib/x86_64-linux-gnu/dri/tls/swrast_dri.so
libGL: OpenDriver: trying /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so
libGL: Can't open configuration file /root/.drirc: No such file or directory.
libGL: Can't open configuration file /root/.drirc: No such file or directory.
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
X Error of failed request:  BadValue (integer parameter out of range for operation)
  Major opcode of failed request:  154 (GLX)
  Minor opcode of failed request:  3 (X_GLXCreateContext)
  Value in failed request:  0x0
  Serial number of failed request:  35
  Current serial number in output stream:  37
cmks
fuente

Respuestas:

8

Tuve un problema similar al ejecutar algunas aplicaciones GL a través de 'ssh -X' y lo resolví agregando "+ iglx" al comando xserver en /usr/share/lightdm/lightdm.conf.d/50-xserver-command.conf .

[SeatDefaults]
# Dump core
xserver-command=X -core +iglx

Después de lo cual reinicia o Ctrl-Alt-F1, inicia sesión y 'sudo service lightdm restart'.

¡Espero que esto ayude!

Justin
fuente
glxdemo, glxheads y glxinfo están funcionando ahora. glxgears comienza pero muestra solo el primer fotograma. Supongo que está relacionado con "Ejecución sincronizada con la actualización vertical". Todavía hay mensajes libGL error: No matching fbConfigs or visuals foundylibGL error: failed to load driver: swrast
cmks
Los errores de libGL son causados ​​por el intento de usar DRI. La configuración LIBGL_ALWAYS_INDIRECT=1prohíbe el uso de DRI, entonces no hay mensajes de error. Pero glxgears todavía solo muestra un cuadro
cmks
¿Podría su accidente de glxgears ser: bugs.freedesktop.org/show_bug.cgi?id=99555 ? Parece que IGLX está roto en Xorg durante aproximadamente un año :(
Steve Dee
5

Una forma alternativa (e independiente del administrador de pantalla) de agregar las opciones es agregar la siguiente sección a /etc/X11/xorg.conf:

Section "ServerFlags"
    Option "IndirectGLX" "on"
EndSection
usuario652430
fuente
Mi xorg.conf se sobrescribe cada vez que reinicio lightdm.
ArcaneDominion
@ArcaneDominion Ponga comandos en un archivo en /usr/share/X11/xorg.conf.d (al menos en xubuntu 16.04)
gerardw
1

Estaba teniendo el mismo problema al ejecutar un programa OpenGL personalizado ssh -X. La solución anterior funcionó con una ligera modificación.

Section "ServerFlags"  
    Option "AllowIndirectGLX" "on"  
    Option "IndirectGLX" "on"  
EndSection  

Esto funcionó con el servidor ubuntu 16.04 que ejecuta kubuntu-desktop con GPU NVIDIA GTX 1070 y el controlador binario NVIDIA instalado a través de apt.

Triradiate
fuente
1
Bienvenido a Ask Ubuntu! Recomiendo editar esta respuesta para expandirla con detalles específicos sobre dónde agregar esto. (Consulte también ¿Cómo escribo una buena respuesta? Para obtener consejos generales sobre qué tipos de respuestas se consideran más valiosas en Ask Ubuntu.)
David Foerster
Parece que la configuración correcta es Option "IndirectGLX" "on". De acuerdo con esto , enableIndirectGLXdebe evaluar para TRUEque BadValueno se devuelva el error. El valor predeterminado es: FALSE= -iglx(en la línea de comando). Así sucesivamente, ya sea de conjunto: +iglxopción de línea de comando, OR IndirectGLX "on"o valor equivalente "verdadero"
TrinitronX
Los documentos de Nvidia para los controladores binarios dicen que hay otra opción AllowIndirectGLXProtocolpara lo mismo. Sin embargo, sus documentos son algo confusos, porque mencionan que el BadValueerror se devolverá con su nombre de configuración como AllowIndirectGLXProtocol = "true". Esto es completamente opuesto a lo que dicen más tarde " The NVIDIA GLX implementation will prohibit creation of indirect GLX contexts if AllowIndirectGLXProtocol option is set to False." ¿Entonces es confuso, y tal vez los documentos están mal?
TrinitronX