Probleme mit libGl, fbConfigs, durchlaufen jedes Update?


38

Ich habe Probleme beim Übersetzen des SFML-Projekts (sehe keine Grafik):

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

Dieser Fehler kann durch eine einfache Neuinstallation der nvidia-Treiber über dieses Tutorial behoben werden: https://askubuntu.com/a/451248/341889

..aber wenn ich neue Updates bekomme - dieser Fehler wird zurückgegeben; (Was soll ich tun? Es ist nicht die Lösung - verwende kein Systemupdate ...

PS und ja, ich habe alle Änderungen nach der Installation von NVIDIA-Treibern gespeichert


1
Das passiert mir , wenn ich versuche , die Mesa einen OpenGL ausführbaren dynamisch Laden zu starten libGL.so: LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa ./glprogram. Standardmäßig verwendet mein Ubuntu 16.04 /usr/lib/nvidia-361/libGL.soda /etc/ld.so.conf.d/x86_64-linux-gnu_GL.confund alles funktioniert einwandfrei.
Ciro Santilli

Antworten:


29

Das swrastDing ist der Software-Renderer. Das bedeutet, dass der Hardwaretreiber für Ihre Grafikkarte nicht gefunden wird. Es sind eine Reihe von libGL-Bibliotheken installiert und eine Reihe von symbolischen Links zu diesen Bibliotheken. Um dies zu sehen, führen Sie dies von der Shell aus:

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

Die wahrscheinliche Ursache für Ihr Problem ist, dass bei der Installation von Grafiktreibern diese symbolischen Verknüpfungen manchmal unterbrochen werden. (Insbesondere /usr/local/lib/libGL.so.1.2.0handelt es sich wahrscheinlich entweder um die falsche Bibliothek oder um einen Sym-Link zum falschen Link.)

Um herauszufinden, welche Bibliothek die OpenGL-Programme ausführen möchten, können Sie ein wenig Ausführlichkeit aktivieren und ein einfaches OpenGL-Programm ausführen. Sie können dies mit dem Standard-OpenGL-Testprogramm überprüfen:

LIBGL_DEBUG=verbose glxgears

Hoffentlich scheitert das genauso wie SFML. Damit LIBGL_DEBUGsollten Sie wissen, welche OpenGL-Bibliothek geladen werden soll. Außerdem wird die /usr/local/lib/libGL.so.1.2.0Bibliothek, die es zu laden versuchen wird, mit ziemlicher Sicherheit sein (Bearbeiten: Dies war die Standard-OpenGL-Bibliothek auf meinem Computer zum Zeitpunkt der Beantwortung dieser Frage. Möglicherweise befindet sich jetzt eine andere Version auf Ihrem Computer).

Die Lösung (in diesem Fall) besteht also darin, sicherzustellen, dass /usr/local/lib/libGL.so.1.2.0es sich um einen symbolischen Link handelt, der auf die rechte OpenGL-Bibliothek verweist. In meinem Fall habe ich den Nvidia 3.40-Treiber, also lief ich:

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

Sie sollten es jedoch auf die OpenGL-Bibliothek verweisen, die für Sie geeignet ist (im ersten find-Befehl aufgeführt).

Zusammenfassend lässt sich sagen, dass die Installation von (proprietären) Grafiktreibern die für OpenGL-Bibliotheken verwendeten symbolischen Links beschädigen kann. Um dieses Problem manuell zu lösen, korrigieren Sie die symbolischen Verknüpfungen ( /usr/local/lib/libGL.so.1.2.0zuerst korrigieren ).


Dieses Problem hat mir geholfen, die Fehlermeldung zu verstehen, aber nicht zu beheben. Die Antwort "nvidia-Treiber neu installieren" war eine gute Ergänzung, da sie das Problem für mich tatsächlich behoben hat.
Henko

@henko Ja, die Neuinstallation von NVIDIA-Treibern ist wahrscheinlich der schnellste und einfachste Weg, dies zu klären. Greifen Sie auf diesen Ansatz zurück, wenn die Neuinstallation der Treiber aus irgendeinem Grund Ihr Problem nicht behebt und Sie sich die Hände schmutzig machen müssen.
Demented Hedgehog

6
Ich habe jeden Teil verstanden, außer "mit ziemlicher Sicherheit /usr/local/lib/libGL.so.1.2.0". Meins zeigt "libGL: OpenDriver: versuchen /usr/lib/x86_64-linux-gnu/dri/tls/swrast_dri.so libGL: OpenDriver: versuchen /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so" und alle Diese Datei existiert in meinem System ...
Samuel Li

1
Nochmals vielen Dank für Ihre Erklärung; Ich verstehe das Problem besser. Ich möchte auch darauf hinweisen, dass es in meinem Fall einen bestätigten Fehler im Ubuntu-Swrast gibt, und die Leute haben darüber diskutiert .
Samuel Li

1
Vielen Dank @dementedhedgehog Dies war ein exzellent artikulierter Beitrag, der mir geholfen hat, mein Problem zu lösen (auf Fedora-25 übrigens). = :). Aufgestimmt.
NYCeyes

5

Ich hatte das gleiche Problem mit den nvidia-340Treibern unter Ubuntu 16.10 und keine der hier beschriebenen Lösungen funktionierte für mich.

Es stellte sich heraus, dass sich die 32-Bit-Bibliotheken nicht im Bibliothekspfad befanden.

Dieser eine Liner arbeitete für mich:

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib32/nvidia-340"

4

Ich hatte Probleme, den richtigen Symlink zu finden, um auf den nVidia-Treiber zu verweisen, und ich habe einen anderen Weg gefunden, der für mich funktioniert.

Es wird hier umrissen .

Außerdem erfahren Sie, wie Sie den nVidia-Treiber über PPA installieren, der für die neueste Version 349.16 verfügbar ist.

Deinstallieren Sie zunächst alle derzeit installierten nVidia-Treiber, indem Sie ein Terminalfenster öffnen ( Ctrl+ ALT+ T) und tippen

sudo apt-get remove nvidia*

Starten Sie Ihr System neu

Öffnen Sie dann ein anderes Terminal und geben Sie Folgendes ein

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

Starten Sie dann erneut

Ich habe es versucht, nachdem ich mich mit den Symlinks verlaufen hatte, und Steam funktionierte sofort nach der Installation des Treibers einwandfrei. Wieder funktionierte es, nachdem ich mehr als 400 MB System-Updates hatte.


2
Ich würde nicht empfehlen, xorg-edgers ppa nach der Installation des Treibers zu verlassen. Viele instabile Pakete werden in Updates enthalten sein.
Pilot6

nur das entfernen von nvidia * hat dieses problem für mich gelöst!
xtofl

3

Als Alternative zu Adrian: Wenn Sie proprietäre Treiber verwenden möchten, die direkt von NVIDIA bezogen wurden, anstatt die in einem PPA zu finden, können Sie den neuesten proprietären Treiber installieren (oder in meinem Fall neu installieren), um den Kontrastfehler zu beseitigen.

Wenn Sie den NVIDIA-Treiber noch nicht haben, laden Sie ihn von der NVIDIA-Website herunter . Wechseln Sie als Nächstes zu tty ( ctrl+ alt+ F1) und schalten Sie Ihren Login-Manager aus:

Wenn Sie lightdm verwenden, $ sudo service lightdm stop

Wenn Sie gdm verwenden, $ sudo service gdm stop

Navigieren Sie zum Installationsskript, führen Sie es aus und befolgen Sie die Anweisungen. Machen Sie sich keine Sorgen, wenn das Vorinstallationsskript fehlschlägt. Ich akzeptiere immer die Registrierung von DKMS und der 32-Bit-Kompatibilitätsbibliotheken. Starten Sie Ihren Computer nach der Installation des Treibers neu:

$ sudo reboot

Wenn Sie bereits ein Installationsskript von einem älteren NVIDIA-Treiber haben, führen Sie das NVIDIA-Treiberinstallationsskript wie oben beschrieben aus, jedoch mit der Option "--update":

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

Dadurch erhalten Sie die aktuellste Version des Treibers.

Dadurch wurde mein libGL error: failed to load driver: swrastFehler behoben .


3

Habe das gleiche Problem auf Ubuntu 18. Das passierte im Grunde nur mit 32bit Apps. Meine Idee war also, 32bit nvidia zu installieren, da mein Ordner / usr / lib / i386-linux-gnu / verdächtig leer war.

Nach sehr wenigen Versuchen wurde das Problem behoben, dass Dampf und Wein nicht ansprangen:

sudo apt install libnvidia-gl-418:i386

(und ändern Sie 418 auf die von Ihnen verwendete Version)

Interessant, dass sich die Anwendungen bei der Installation nicht über fehlende Abhängigkeiten beschwert haben.


Dies scheint eines meiner Probleme im Zusammenhang mit der Frage behoben zu haben, zumindest ...
Andrew

Es könnte sein, dass 32 Bit der Grund sind. Andere Programme funktionieren gut, aber das sind wahrscheinlich 64-Bit. Trotzdem funktioniert dies gut (ich musste die Version allerdings
Zoe

2

Ich muss zugeben, ich bin mir nicht sicher, warum das bei mir funktioniert, aber es hat funktioniert. In diesem speziellen Fall "reparieren" Sie die ld.so.conf.d-Einträge, indem Sie einen neuen Eintrag wie diesen hinzufügen:

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

Dies ist sinnvoll, bis Sie Folgendes ausführen 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

Warum die gleichen Einträge in dreifacher Ausfertigung funktionieren, aber nicht doppelt, weiß ich nicht!


Funktioniert bei mir auf Ubunu 17.04. Nur eine Anmerkung - der Pfad ist / usr / lib / nvidia-xxx, wobei xxx die Treibernummer ist. Passen Sie den Befehl an diese an.
user2082382

2

Hier ist eine apteinzige Lösung, die für mich funktioniert hat und mit der ich weder sympathisiert noch rumgespielt habe ld.so.conf.d:

apt install --reinstall libgl1-mesa-glx:i386
apt install mesa-utils nvidia-driver nvidia-driver-libs-i386

1

Ich benutze nur diese Zeile:

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

und es funktioniert.

Weil ich solche Eingaben sehe, wenn ich ausführe 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

1
Sollen die Leute befolgen, was das bedeutet ...?
Andrew

Funktioniert für mich, danke!
Hett

0

Führen Sie einfach Folgendes aus:

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

Die Version Ihres Treibers wird in den NVIDIA-Einstellungen angezeigt.


-3

Ich hatte dieses seltsame Problem, als ich von meinem Macbook Pro auf meine Ubuntu-VM sshte, aber die Installation des folgenden Nvidia-Treibers auf meinem Ubuntu 16.04 behebte das Problem. Ich hoffe, das funktioniert für Sie.

sudo apt-get installiere nvidia-331


1
Warum sollten Sie Nvidia-GPU-Treiber auf einem VM-Gastsystem installieren? Ó_ò
David Foerster

Die Gegenstimme ist nicht angemessen. @DavidFoerster hat Recht, dass die Installation von GPU-Treibern in einer VM keinen Sinn ergibt (es sei denn, Sie übergeben die GPU-Hardware an die VM). Aber: Ich verwende X über SSH und stehe vor dem gleichen Problem. Das Starten von X-Anwendungen auf der Remote-Maschine (VM) führt fast immer zu den in der Frage des OP genannten Fehlermeldungen. Ich habe nicht eine Lösung für dieses Problem noch nicht gefunden, aber wenn VM auf dem Remote - GPU - Treiber installieren würde die Lösung sein, ich würde es tun, unabhängig davon , ob es Sinn macht, nur um sicherzustellen , dass Fehler weggehen (ich bin derzeit ignorieren sie).
Binarus
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.