Problemy z libGl, fbConfigs, swrast przez każdą aktualizację?

38

Mam problemy podczas kompilacji projektu SFML (nie widzę żadnej grafiki):

libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast

Ten błąd można rozwiązać, instalując ponownie sterowniki NVIDIA w tym samouczku: https://askubuntu.com/a/451248/341889

.. ale kiedy otrzymuję nowe aktualizacje - ten błąd powraca; (Co powinienem zrobić? To nie jest rozwiązanie - nie używaj aktualizacji systemu ...

PS i tak, zapisałem wszystkie zmiany po zainstalowaniu sterowników NVIDIA

pushandpop
źródło
1
Dzieje się tak na mnie, gdy próbuję uruchomić wykonywalny OpenGL Dynamiczne ładowanie Mesa libGL.so: LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa ./glprogram. Domyślnie mój Ubuntu 16.04 używa z /usr/lib/nvidia-361/libGL.sopowodu /etc/ld.so.conf.d/x86_64-linux-gnu_GL.confi wszystko działa dobrze.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Odpowiedzi:

29

Chodzi swrasto renderer oprogramowania. Oznacza to, że nie znajduje sterownika sprzętowego dla karty graficznej. Zainstalowano kilka bibliotek libGL i kilka dowiązań symbolicznych do tych bibliotek. Aby zobaczyć te, uruchom to z powłoki:

find /usr -iname "*libGL.so*" -exec ls -l -- {} + 

Prawdopodobną przyczyną tego problemu jest to, że instalacja sterowników graficznych czasami psuje te dowiązania symboliczne. (W szczególności /usr/local/lib/libGL.so.1.2.0może to być niewłaściwa biblioteka lub link do niewłaściwego linku).

Aby dowiedzieć się, jaką bibliotekę próbują uruchomić programy OpenGL, możesz włączyć trochę gadatliwości i uruchomić prosty program OpenGL. Możesz to sprawdzić za pomocą standardowego programu testowego OpenGL:

LIBGL_DEBUG=verbose glxgears

Mam nadzieję, że zawiedzie w taki sam sposób jak SFML. Dzięki LIBGL_DEBUGniemu dowiesz się, jaką bibliotekę OpenGL próbuje załadować. Co więcej, lib, który będzie próbował załadować, prawie na pewno będzie /usr/local/lib/libGL.so.1.2.0(Edycja: To była standardowa biblioteka OpenGL na moim komputerze w chwili, gdy odpowiedziałem na to pytanie. Może to być inna wersja na twoim komputerze).

Zatem rozwiązaniem (w tym przypadku) jest upewnienie się, że /usr/local/lib/libGL.so.1.2.0jest to dowiązanie symboliczne wskazujące właściwą bibliotekę OpenGL. W moim przypadku mam sterownik Nvidia 3.40, więc uruchomiłem:

ln -s /usr/lib/nvidia-340/libGL.so.1 /usr/local/lib/libGL.so.1.2.0

Ale będziesz chciał wskazać na bibliotekę OpenGL, która jest dla Ciebie odpowiednia (wymieniona w pierwszym poleceniu find).

Podsumowując: instalowanie (zastrzeżonych) sterowników graficznych może uszkodzić dowiązania symboliczne używane w bibliotekach OpenGL. Aby rozwiązać ten problem, ręcznie napraw łącza symboliczne ( /usr/local/lib/libGL.so.1.2.0najpierw napraw ).

szalony jeż
źródło
Ten problem pomógł mi zrozumieć komunikat o błędzie, ale go nie naprawiłem. Odpowiedź „Ponowna instalacja sterowników NVIDIA” była dobrym uzupełnieniem, ponieważ faktycznie rozwiązała problem.
henko
@henko tak Ponowna instalacja sterowników NVIDIA jest prawdopodobnie najszybszym i najłatwiejszym sposobem na rozwiązanie tego problemu. Wróć do tego podejścia, jeśli z jakiegokolwiek powodu ponowna instalacja sterowników nie rozwiąże problemu i musisz ubrudzić sobie ręce.
szalony jeż
6
Zrozumiałem każdą część, z wyjątkiem „prawie na pewno być /usr/local/lib/libGL.so.1.2.0”. Mój pokazuje „libGL: OpenDriver: próbuję /usr/lib/x86_64-linux-gnu/dri/tls/swrast_dri.so libGL: OpenDriver: próbuję /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so” i wszystkie te pliki istnieją w moim systemie ...
Samuel Li,
1
Jeszcze raz dziękuję za wyjaśnienie; Rozumiem lepiej o problemie. Chcę również zauważyć, że w moim przypadku w pliku ubuntu swrast.so znajduje się potwierdzony błąd i ludzie o nim dyskutują .
Samuel Li
1
Dziękuję @dementedhedgehog To był doskonale artykułowany post i pomógł mi rozwiązać mój problem (nawiasem mówiąc, na Fedorze-25). = :). Podwyższony głos.
NYCeyes,
5

Miałem ten sam problem na Ubuntu 16.10 ze nvidia-340sterownikami i żadne z rozwiązań tutaj nie działało dla mnie.

Okazuje się, że biblioteki 32-bitowe nie były na ścieżce biblioteki.

Ta jedna wkładka działała dla mnie:

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib32/nvidia-340"
alexg
źródło
4

Miałem problemy z uzyskaniem poprawnego dowiązania symbolicznego do wskazania sterownika nVidia i znalazłem inny sposób, który działa dla mnie.

Zostało to przedstawione tutaj .

Wymienia także sposób instalacji sterownika nVidia przez PPA, który jest dostępny dla najnowszej wersji 349.16.

Najpierw odinstaluj aktualnie zainstalowane sterowniki nVidia, otwierając okno terminala ( Ctrl+ ALT+ T) i wpisując

sudo apt-get remove nvidia*

Uruchom ponownie system

Następnie otwórz inny terminal i wpisz następujące polecenie

sudo add-apt-repository ppa:xorg-edgers/ppa
sudo apt-get update
sudo apt-get install nvidia-349 nvidia-settings
sudo add-apt-repository -r ppa:xorg-edgers/ppa

Następnie uruchom ponownie komputer

Wypróbowałem to po zgubieniu się z dowiązaniami symbolicznymi, a para działała dobrze natychmiast po zainstalowaniu sterownika i znowu działała po tym, jak miałem ponad 400 megapikseli aktualizacji systemu.

Adrian
źródło
2
Nie sugeruję pozostawiać xorg-edgers ppa po zainstalowaniu sterownika. Wiele niestabilnych pakietów pojawi się w aktualizacjach.
Pilot6
właśnie usunięcie nvidii * już rozwiązało ten problem dla mnie!
xtofl
3

Aby zapewnić alternatywę dla odpowiedzi Adriana: jeśli wolisz używać zastrzeżonych sterowników pochodzących bezpośrednio z NVIDIA zamiast tych zawartych w PPA, instalowanie (lub w moim przypadku ponowne instalowanie) najnowszego zastrzeżonego sterownika może pomóc wyeliminować błąd swrast.

Jeśli nie masz jeszcze sterownika NVIDIA, pobierz sterownik ze strony internetowej NVIDIA . Następnie przejdź do tty ( ctrl+ alt+ F1) i wyłącz menedżera logowania:

Jeśli używasz lightdm, $ sudo service lightdm stop

Jeśli używasz gdm, $ sudo service gdm stop

Przejdź do skryptu instalacyjnego, uruchom go i postępuj zgodnie z instrukcjami. Nie martw się, jeśli skrypt przedinstalacyjny zawiedzie. Zawsze akceptuję rejestrację DKMS i bibliotek kompatybilności 32-bitowej. Po zainstalowaniu sterownika uruchom ponownie komputer:

$ sudo reboot

Jeśli masz już skrypt instalacyjny ze starszego sterownika NVIDIA, po prostu uruchom skrypt instalacyjny sterownika NVIDIA zgodnie z powyższym opisem, ale z opcją „--update”:

$ sudo ./NVIDIA-Linux-x86_64-***.**.run --update

Otrzymasz najbardziej aktualną wersję sterownika.

W ten sposób naprawiono mój libGL error: failed to load driver: swrastbłąd.

NWRichmond
źródło
3

Ten sam problem dotyczy Ubuntu 18. Zdarzyło się to tylko w przypadku aplikacji 32-bitowych. Więc moim pomysłem było zainstalowanie 32-bitowej nvidii, ponieważ mój folder / usr / lib / i386-linux-gnu / był podejrzanie pusty.

Po kilku próbach rozwiązało to mój problem z uruchomieniem się pary i wina:

sudo apt install libnvidia-gl-418:i386

(i zmień 418 na dowolną wersję)

Ciekawe, że aplikacje nie narzekały na brakujące zależności podczas instalacji.

VMicho
źródło
Wydaje się, że to rozwiązało jeden z moich problemów związanych z pytaniem, przynajmniej ...
Andrew
Może to być 32 bit. Inne programy działają dobrze, ale prawdopodobnie są one 64-bitowe. Niemniej jednak działa to dobrze (musiałem jednak podbić wersję)
Zoe
2

Muszę przyznać, że nie jestem pewien, dlaczego to dla mnie działa, ale tak się stało. W tym szczególnym przypadku „poprawianie” wpisów ld.so.conf.d przez dodanie nowego wpisu, jak to działa:

sudo ln -s /usr/lib/nvidia-381/ld.so.conf /etc/ld.so.conf.d/nvidia64.conf
sudo ldconfig 

Ma to sens, dopóki nie uruchomisz find:

$ find -L /etc/ld.so.conf.d -type f | xargs grep -i nvidia
/etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf:/usr/lib/nvidia-381
/etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf:/usr/lib32/nvidia-381
/etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf:/usr/lib/nvidia-381
/etc/ld.so.conf.d/x86_64-linux-gnu_EGL.conf:/usr/lib32/nvidia-381
/etc/ld.so.conf.d/nvidia64.conf:/usr/lib/nvidia-381
/etc/ld.so.conf.d/nvidia64.conf:/usr/lib32/nvidia-381

Po co te same wpisy w trzech egzemplarzach, ale nie w duplikatach, nie mam pojęcia!

bbarker
źródło
Działa dla mnie na Ubunu 17.04. Tylko uwaga - ścieżka to / usr / lib / nvidia-xxx, gdzie xxx to numer sterownika, więc dostosuj polecenie do tego.
user2082382,
2

Oto aptjedyne rozwiązanie, które zadziałało dla mnie, bez symlinkowania i bezsensownego ld.so.conf.d:

apt install --reinstall libgl1-mesa-glx:i386
apt install mesa-utils nvidia-driver nvidia-driver-libs-i386
Cuadue
źródło
1

Po prostu używam tej linii:

 sudo rm /usr/lib/i386-linux-gnu/libGL.so.1

i to działa.

Ponieważ widzę takie dane wejściowe podczas wykonywania sudo ldconfig -p | grep -i gl.so:

libwayland-egl.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libwayland-egl.so.1
libcogl.so.20 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcogl.so.20
libOpenGL.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libOpenGL.so.0
libOpenGL.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libOpenGL.so
libGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGL.so.1
libGL.so.1 (libc6) => /usr/lib/i386-linux-gnu/libGL.so.1
libGL.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGL.so
libEGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libEGL.so.1
libEGL.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libEGL.so
DapangLiu
źródło
1
Czy ludzie powinni podążać za tym, co to znaczy ...?
Andrew
Działa dla mnie, dzięki!
Hett
0

Po prostu uruchom to:

sudo apt-get install libnvidia-gl-(the version of your driver):i386

Wersja sterownika jest wyświetlana w ustawieniach NVIDIA.

Kot Mimi
źródło
0

W moim przypadku rozwiązanie tego problemu polegało na kontynuacji komunikatu o błędzie

Paraview 5.7.0 poinformował mnie, że:

libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
(   0.833s) [paraview] vtkOpenGLRenderWindow.c:748 ERR| vtkXOpenGLRenderWindow (0x5588ae6a2160): GLEW could not be initialized: Missing GL version
...
Segmentation fault

Wiadomość

GLEW could not be initialized: Missing GL version

był kluczowy. Uruchamiam „glxgears”, aby sprawdzić, czy biblioteki graficzne działają poprawnie - patrz także man glxgears- pokazując tę ​​animację:

zrzut ekranu glxgears

Potem moim rozwiązaniem było po prostu ustawienie zmiennej środowiskowej

LD_PRELOAD=/usr/lib/libGL.so

Uwaga:

  1. Chociaż mam kartę graficzną Nvidia, nie musiałem się nią bawić.
  2. Po uruchomieniu locate libGL.soznajduję innego kandydata /usr/lib/i386-linux-gnu/libGL.so. Ustawienie tego parametru na LD_PRELOAD nie rozwiązało jednak problemu;
  3. Nie trzeba też ustawiać żadnych informacji o bibliotece GLEW wyświetlanej powyżej --- patrz locate libGLEW.so

Jestem wdzięczny https://github.com/openai/mujoco-py/issues/44 za wskazówki

XavierStuvw
źródło
Aby zobaczyć różnicę między LD_PRELOAD a najczęściej cytowaną LD_LIBRARY_PATH, zobacz stackoverflow.com/q/14715175/5459638
XavierStuvw
-3

Napotkałem ten dziwny problem, kiedy ssh do mojej maszyny Wirtualnej Ubuntu z mojego Macbooka Pro, ale zainstalowanie poniższego sterownika Nvidia na moim Ubuntu 16.04 rozwiązało ten problem. Mam nadzieję, że to Ci odpowiada.

sudo apt-get install nvidia-331

TekTutorJegan
źródło
1
Dlaczego miałbyś instalować sterowniki GPU Nvidia w systemie-gościu VM? Ó_ò
David Foerster
Opinia negatywna jest nieodpowiednia. @DavidFoerster ma rację, ponieważ instalacja sterowników GPU na maszynie wirtualnej nie ma żadnego sensu (chyba że przełączysz sprzęt GPU na maszynę wirtualną). Ale: Używam X przez SSH i mam ten sam problem. Uruchomienie aplikacji X na zdalnej maszynie (VM) prawie zawsze prowadzi do komunikatów o błędach wspomnianych w pytaniu PO. Nie znalazłem rozwiązanie tego problemu jeszcze, ale jeśli instalacji sterowników GPU na pilocie zdalnego VM byłoby być rozwiązanie, będę to robić, niezależnie od tego, czy ma to sens, tak aby, że błędy odejść (jestem obecnie je ignoruję).
Binarus