Jak włączyć pośrednie konteksty GLX (+ iglx) w Ubuntu 14.04 LTS z kartami NVIDIA GFX


10

W centralnym miejscu prowadzę hosta Linux dla rozwoju oprogramowania Qt.

Z moim oknem Windows używam Xming jako lokalnego serwera X i kita do połączenia z tym hostem Linux. W tej konfiguracji mogę używać wszystkich programów X (xclock, xterm) i GLX (qtcreator, gxlinfo, glxgears ...) na hoście Linux-a.

Moją główną stacją roboczą jest Ubuntu 14.04 LTS z kartą NVIDIA GFX. Kiedy łączę się z hostem linux z moim systemem Ubuntu za pomocą „ssh -p port # -YC my.dev.host.com”, mogę również korzystać ze wszystkich programów X (xclock, xterm), ale nie mogę używać programów GLX (qtcreator, gxlinfo, glxgears ...).

O ile się dowiedziałem, to dlatego, że X-serwer domyślnie nie obsługuje pośrednich kontekstów GLX dla wersji młodszej 1.16.

Więc moje pytania brzmią: w jaki sposób mogę włączyć pośrednie konteksty GLX (X-server i sterownik nvidida) w mojej instalacji ubuntu 14.04 LTS, aby wszystko działało zgodnie z oczekiwaniami od X-serwera.

Dziękuję za wszelką pomoc!

cmks

Oto dane wyjściowe glxgears, może to pomaga:

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

Odpowiedzi:


8

Miałem podobny problem podczas uruchamiania niektórych aplikacji GL za pomocą „ssh -X” i rozwiązałem go, dodając „+ iglx” do polecenia xserver w /usr/share/lightdm/lightdm.conf.d/50-xserver-command.conf .

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

Po tym albo zrestartujesz komputer, albo Ctrl-Alt-F1, zaloguj się i „sudo service lightdm restart”.

Mam nadzieję, że to pomoże!


glxdemo, glxheads i glxinfo już działają. glxgears zaczyna się, ale pokazuje tylko pierwszą klatkę. Myślę, że jest to związane z „Uruchamianiem zsynchronizowanym z odświeżaniem pionowym”. Nadal są wiadomości libGL error: No matching fbConfigs or visuals foundilibGL error: failed to load driver: swrast
cmks

Błędy libGL są spowodowane próbą użycia DRI. Ustawienie LIBGL_ALWAYS_INDIRECT=1zabrania korzystania z DRI, wtedy nie ma komunikatów o błędach. Ale glxgears wciąż pokazuje tylko jedną ramkę
cmks

Czy Twoje awarie Glxgears mogą być następujące: bugs.freedesktop.org/show_bug.cgi?id=99555 ? Wygląda na to, że IGLX jest zepsuty w Xorg przez około rok :(
Steve Dee

5

Alternatywnym (i niezależnym od menedżera wyświetlania) sposobem dodania opcji jest dodanie następującej sekcji do /etc/X11/xorg.conf:

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

Mój xorg.conf jest ciągle nadpisywany przy każdym ponownym uruchomieniu lightdm.
ArcaneDominion

@ArcaneDominion Umieść polecenia w pliku w /usr/share/X11/xorg.conf.d (przynajmniej na Xubuntu 16.04)
gerardw

1

Miałem ten sam problem z uruchomieniem niestandardowego programu OpenGL ssh -X. Powyższe rozwiązanie działało z niewielką modyfikacją

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

Działa to z serwerem Ubuntu 16.04 z systemem kubuntu-desktop z procesorem graficznym NVIDIA GTX 1070 i sterownikiem binarnym NVIDIA zainstalowanym przez apt.


1
Witamy w Ask Ubuntu! Zalecam edycję tej odpowiedzi, aby rozszerzyć ją o szczegółowe informacje o tym, gdzie ją dodać. (Zobacz także Jak napisać dobrą odpowiedź? Zawiera ogólne porady na temat tego, jakie rodzaje odpowiedzi są uważane za najcenniejsze w Ask Ubuntu.)
David Foerster

Wydaje się, że właściwe jest ustawienie Option "IndirectGLX" "on". Zgodnie z tym , enableIndirectGLXmusi dawać TRUEwięc BadValuebłąd nie jest zwracany. Domyślnie: FALSE= -iglx(w wierszu poleceń). Tak więc w obu ustawieniach: +iglxopcja wiersza polecenia, LUB IndirectGLX "on"lub równoważna wartość „prawdy”
TrinitronX

Dokumenty Nvidii dla sterowników binarnych mówią, że istnieje inna opcja AllowIndirectGLXProtocolna to samo. Jednak ich dokumenty są nieco mylące, ponieważ wspominają, że BadValuebłąd zostanie zwrócony z nazwą ustawienia jako AllowIndirectGLXProtocol = "true". Jest to całkowicie przeciwne do tego, co mówią później. ” The NVIDIA GLX implementation will prohibit creation of indirect GLX contexts if AllowIndirectGLXProtocol option is set to False.„ To jest mylące, a może doktorzy się mylą?
TrinitronX
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.