Come abilitare contesti GLX indiretti (+ iglx) in Ubuntu 14.04 LTS con le schede gfx nvidia


10

Sto gestendo un host Linux per lo sviluppo di software Qt in un posto centrale.

Con la mia finestra di Windows uso Xming come X-server locale e mastice per connettermi a quell'host Linux. Con questa configurazione posso usare tutti i programmi X (xclock, xterm) e GLX (qtcreator, gxlinfo, glxgears ...) sull'host linux.

La mia workstation principale è un Ubuntu 14.04 LTS con una scheda gvx nvidia. Quando mi collego all'host linux con il mio sistema ubuntu usando "ssh -p port # -YC my.dev.host.com" posso anche usare tutti i programmi X (xclock, xterm) ma non posso usare i programmi GLX (qtcreator, gxlinfo, glxgears ...).

Per quanto ho imparato, questo è perché l'X-server non supporta i contesti GLX indiretti per impostazione predefinita per la versione 1.16 più giovane.

Quindi le mie domande sono: Come posso abilitare i contesti GLX indiretti (X-server e driver nvidida) nella mia installazione di Ubuntu 14.04 LTS per far funzionare le cose come previsto da un X-server.

Grazie per tutto l'aiuto!

cmks

Ecco l'output di glxgears, forse questo aiuta:

root@my.dev.host.com:~# 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

Risposte:


8

Ho avuto un problema simile durante l'esecuzione di alcune applicazioni GL tramite 'ssh -X' e l'ho risolto aggiungendo "+ iglx" al comando xserver in /usr/share/lightdm/lightdm.conf.d/50-xserver-command.conf .

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

Dopo di che riavvia o Ctrl-Alt-F1, accedi e 'sudo service lightdm restart'.

Spero che questo possa essere d'aiuto!


glxdemo, glxheads e glxinfo stanno funzionando ora. glxgears inizia ma mostra solo il primo fotogramma. Immagino sia correlato a "Esecuzione sincronizzata con l'aggiornamento verticale". Ci sono ancora i messaggi libGL error: No matching fbConfigs or visuals foundelibGL error: failed to load driver: swrast
cmks

Gli errori libGL sono causati dal tentativo di utilizzare DRI. L'impostazione LIBGL_ALWAYS_INDIRECT=1proibisce l'uso di DRI in quanto non ci sono messaggi di errore. Ma glxgears mostra ancora solo un fotogramma
cmks

I tuoi glxgears potrebbero andare in crash: bugs.freedesktop.org/show_bug.cgi?id=99555 ? Sembra che IGLX sia rotto a Xorg da circa un anno :(
Steve Dee,

5

Un modo alternativo (e indipendente da display manager) per aggiungere le opzioni è quello di aggiungere la seguente sezione a /etc/X11/xorg.conf:

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

Il mio xorg.conf viene sovrascritto ogni volta che riavvio lightdm.
ArcaneDominion

@ArcaneDominion Inserisci i comandi in un file in /usr/share/X11/xorg.conf.d (almeno su xubuntu 16.04)
gerardw,

1

Stavo riscontrando lo stesso problema con l'esecuzione di un programma OpenGL personalizzato ssh -X. La soluzione sopra ha funzionato con una leggera modifica

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

Funzionava con il server Ubuntu 16.04 che eseguiva kubuntu-desktop con GPU NVIDIA GTX 1070 e driver binario NVIDIA installati tramite apt.


1
Benvenuto in Ask Ubuntu! Consiglio di modificare questa risposta per espanderla con dettagli specifici su dove aggiungere questa. (Vedi anche Come posso scrivere una buona risposta? Per consigli generali su quali tipi di risposte sono considerate più preziose su Ask Ubuntu.)
David Foerster,

Sembra che l'impostazione giusta sia Option "IndirectGLX" "on". In base a ciò , enableIndirectGLXdeve valutare in TRUEmodo che l' BadValueerrore non venga restituito. L'impostazione predefinita è: FALSE= -iglx(sulla riga di comando). Quindi su uno dei due set: +iglxopzione della riga di comando, OR IndirectGLX "on"o valore "verità" equivalente
TrinitronX

I documenti Nvidia per i driver binari dicono che esiste un'altra opzione AllowIndirectGLXProtocolper la stessa cosa. Tuttavia, i loro documenti sono in qualche modo confusi, perché menzionano l' BadValueerrore verrà restituito con il nome dell'impostazione come AllowIndirectGLXProtocol = "true". Questo è completamente opposto a quello che dicono dopo " The NVIDIA GLX implementation will prohibit creation of indirect GLX contexts if AllowIndirectGLXProtocol option is set to False." Quindi è confuso, e forse i documenti sono sbagliati?
TrinitronX,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.