
Postar esta pergunta para um colega depois de bastante pesquisa. Ele deseja se conectar a um servidor Centos 4 antigo via ssh -X
(ou -Y
) e executar algum aplicativo X lá. Ele funcionou bem durante anos, mas atualizações recentes (no Centos 7 e no Ubuntu) em seus PCs clientes agora tornam isso impossível. Seu aplicativo simplesmente trava e tentar simplesmente executá- glxgears
lo causa uma falha:
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 um problema de versão do cliente. Reverter para o Centos 6 anterior no lado do cliente faz com que ele funcione novamente. Não há nada no log do X11 no lado do servidor. Corri strace glxgears
sem perceber nada fora do comum. O que posso tentar diagnosticar isso ainda mais?
EDIT: Em qualquer Linux moderno, a seguinte tentativa de forçar um contexto de renderização indireta falhará:
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
Tentei o seguinte para reativar a renderização indireta. A menos que eu esteja enganado, tudo isso deve ser feito na máquina cliente:
nas seções Tela ou Dispositivo de /etc/X11/xorg.conf você adiciona:
Opção "AllowIndirectGLXProtocol" "Verdadeiro"
em /usr/bin/startx (ou onde quer que startx esteja localizado):
defaultserverargs="+iglx"
em /usr/share/lightdm/lightdm.conf.d/50-xserver-command.conf você altera a linha:
xserver-command=X -core +iglx
antes de iniciar o KDE, por exemplo em .kde/env/igl.sh
exportar LIBGL_ALWAYS_INDIRECT=1
Nada disso funciona.
Responder1
Estação de trabalho Linux
Perversamente, muitas versões deGDM não ofereceuma maneira de passar argumentos +iglx
como Xorg
. Em resposta, as novas versões do X.org têm umIndirectGLX
opção(Veja tambémxorg.conf
texto de exemplo).
Na ausência dessa opção, há uma solução alternativa deenvolvendo Xorg
-se com um 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
Estação de trabalho macOS (XQuartz)
Apenas corra
defaults write org.macosforge.xquartz.X11 enable_iglx -bool true
e reinicie o XQuartz se estiver em execução. (Cuidado com erros de digitação: não há verificação de erros nos nomes de domínio e variáveis.) Versões recentes usam o org.xquartz.X11
.