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.