Como habilitar contextos GLX indiretos (+ iglx) no Ubuntu 14.04 LTS com nvidia gfx-cards

10

Estou executando um host linux para desenvolvimento de software Qt em um local central.

Com o meu windows box, eu uso o Xming como um servidor X local e massa para conectar-me a esse host linux. Com esta configuração, posso usar todos os programas X (xclock, xterm) e GLX (qtcreator, gxlinfo, glxgears ...) no host do linux.

Minha estação de trabalho principal é um ubuntu 14.04 LTS com uma placa nvidia gfx. Quando eu me conecto ao host linux com o meu sistema ubuntu usando "ssh -p port # -YC my.dev.host.com" Eu também posso usar todos os programas X (xclock, xterm), mas não consigo usar os programas GLX (qtcreator, gxlinfo, glxgears ...).

Até o momento eu aprendi isso porque o servidor X não suporta contextos GLX indiretos por padrão para a versão 1.16 mais nova.

Então, minhas perguntas são: Como habilitar contextos GLX indiretos (servidor X e driver nvidida) na instalação do ubuntu 14.04 LTS para que as coisas funcionem conforme o esperado em um servidor X.

Obrigado por qualquer ajuda!

cmks

Aqui está a saída do glxgears, talvez isso ajude:

[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
fonte

Respostas:

8

Eu tive um problema semelhante ao executar alguns aplicativos GL via 'ssh -X' e o resolvi adicionando "+ iglx" ao comando xserver em /usr/share/lightdm/lightdm.conf.d/50-xserver-command.conf .

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

Após o qual você reinicializa ou Ctrl-Alt-F1, efetue login e 'sudo service lightdm restart'.

Eu espero que isso ajude!

Justin
fonte
glxdemo, glxheads e glxinfo estão funcionando agora. O glxgears inicia, mas mostra apenas o primeiro quadro. Eu acho que está relacionado a "Executando sincronizado com a atualização vertical". Ainda existem as mensagens libGL error: No matching fbConfigs or visuals foundelibGL error: failed to load driver: swrast
cmks 17/03/16
Os erros do libGL são causados ​​pela tentativa de usar o DRI. A configuração LIBGL_ALWAYS_INDIRECT=1proíbe o uso de DRI, então não há mensagens de erro. Mas glxgears ainda só mostra um quadro
cmks
As falhas do seu glxgears podem ser: bugs.freedesktop.org/show_bug.cgi?id=99555 ? Parece que o IGLX está quebrado no Xorg por cerca de um ano :(
Steve Dee
5

Uma maneira alternativa (e independente do gerenciador de exibição) de adicionar as opções é adicionar a seguinte seção ao /etc/X11/xorg.conf:

Section "ServerFlags"
    Option "IndirectGLX" "on"
EndSection
user652430
fonte
Meu xorg.conf continua sendo substituído toda vez que eu reinicio lightdm.
precisa saber é o seguinte
@ArcaneDominion Coloque comandos em um arquivo em /usr/share/X11/xorg.conf.d (pelo menos no xubuntu 16.04)
gerardw
1

Eu estava tendo o mesmo problema ao executar um programa OpenGL personalizado ssh -X. A solução acima trabalhou com uma ligeira modificação

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

Isso funcionou com o servidor ubuntu 16.04 executando o kubuntu-desktop com o driver binário NVIDIA GTX 1070 GPU e NVIDIA instalado através do apt.

Triradiate
fonte
11
Bem-vindo ao Ask Ubuntu! Eu recomendo editar esta resposta para expandi-la com detalhes específicos sobre onde adicionar isso. (Veja também Como faço para escrever uma boa resposta? Para o conselho geral sobre que tipos de respostas são consideradas mais valiosas sobre Ask Ubuntu.)
David Foerster
Parece que a configuração certa é Option "IndirectGLX" "on". De acordo com isso , enableIndirectGLXdeve-se avaliar para TRUEque o BadValueerro não seja retornado. O padrão é: FALSE= -iglx(na linha de comandos). Assim por diante de qualquer conjunto: +iglxopção de linha de comando, ou IndirectGLX "on"ou valor equivalente "truthy"
TrinitronX
Os documentos da Nvidia para os drivers binários dizem que há outra opção AllowIndirectGLXProtocolpara a mesma coisa. No entanto, seus documentos são um pouco confusos, porque mencionam que o BadValueerro será retornado com o nome de configuração como AllowIndirectGLXProtocol = "true". Isso é completamente o oposto do que eles dizem mais tarde " The NVIDIA GLX implementation will prohibit creation of indirect GLX contexts if AllowIndirectGLXProtocol option is set to False." Então é confuso, e talvez os documentos estejam errados?
TrinitronX