
Publicar esta pregunta para un colega después de bastante investigación. Quiere conectarse a un antiguo servidor Centos 4 a través de ssh -X
(o -Y
) y ejecutar alguna aplicación X allí. Solía funcionar bien durante años, pero las actualizaciones recientes (tanto en Centos 7 como en Ubuntu) en las PC de sus clientes ahora lo hacen imposible. Su aplicación simplemente se cuelga y al intentar simplemente ejecutarla glxgears
se bloquea:
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 150 (GLX)
Minor opcode of failed request: 3 (X_GLXCreateContext)
Value in failed request: 0x0
Serial number of failed request: 19
Current serial number in output stream: 21
Realmente es un problema de versión del cliente. Volver a Centos 6 anterior en el lado del cliente hace que funcione nuevamente. No hay nada en el registro X11 del lado del servidor. Corrí strace glxgears
sin notar nada fuera de lo normal. ¿Qué puedo intentar para diagnosticar esto más a fondo?
EDITAR: En cualquier Linux moderno, el siguiente intento de forzar un contexto de representación indirecta fallará:
glxinfo -i
name of display: :0
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: 24 (X_GLXCreateNewContext)
Value in failed request: 0x0
Serial number of failed request: 39
Current serial number in output stream: 40
Intenté lo siguiente para volver a habilitar la representación indirecta. A menos que me equivoque, todo esto debe hacerse en la máquina cliente:
en las secciones Pantalla o Dispositivo de /etc/X11/xorg.conf agregas:
Opción "AllowIndirectGLXProtocol" "Verdadero"
en /usr/bin/startx (o donde se encuentre startx):
defaultserverargs="+iglx"
en /usr/share/lightdm/lightdm.conf.d/50-xserver-command.conf cambias la línea:
xserver-command=X -core +iglx
antes de iniciar KDE, por ejemplo en .kde/env/igl.sh
exportar LIBGL_ALWAYS_INDIRECT=1
Ninguno de esos funciona.
Respuesta1
estación de trabajo linux
Perversamente, muchas versiones deGDM no ofreceuna forma de pasar argumentos +iglx
como Xorg
. En respuesta, las nuevas versiones de X.org tienen unaIndirectGLX
opción(ver tambiénxorg.conf
texto de ejemplo).
En ausencia de esa opción, existe una solución alternativa:envolviéndose Xorg
con un script de shell:
mv /usr/bin/Xorg /usr/bin/Xorg.original
echo -e '#!/usr/bin/env bash\nexec /usr/bin/Xorg.original "$@" +iglx' > /usr/bin/Xorg
chmod +x /usr/bin/Xorg
chcon --type=bin_t /usr/bin/Xorg
Estación de trabajo macOS (XQuartz)
Solo corre
defaults write org.macosforge.xquartz.X11 enable_iglx -bool true
y reinicie XQuartz si se está ejecutando. (Cuidado con los errores tipográficos: no hay verificación de errores en el dominio ni en los nombres de variables). Las versiones recientes utilizan el formato org.xquartz.X11
.