Estação de trabalho Linux

Estação de trabalho Linux

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á- glxgearslo 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 glxgearssem 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 +iglxcomo Xorg. Em resposta, as novas versões do X.org têm umIndirectGLXopção(Veja tambémxorg.conftexto 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.

informação relacionada