web-dev-qa-db-fra.com

Des problèmes avec libGl, fbConfigs, swrast lors de chaque mise à jour?

J'ai des problèmes pour compiler le projet SFML (je ne vois aucun graphique):

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

Cette erreur peut être résolue en réinstallant nvidia-drivers à travers ce tutoriel: https://askubuntu.com/a/451248/341889

..mais quand j'obtiens de nouvelles mises à jour - cette erreur revient (que dois-je faire? Ce n'est pas la solution - n'utilisez pas la mise à jour du système ...

P.S. et oui, j'ai enregistré toutes les modifications après l'installation de nvidia-drivers

37
pushandpop

swrast est le moteur de rendu du logiciel. Cela signifie que le pilote de votre carte graphique n’est pas trouvé. Un ensemble de bibliothèques libGL sont installées et de nombreux liens symboliques vers ces bibliothèques. Pour les voir, lancez ceci depuis le shell:

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

Maintenant, la cause probable de votre problème est que l’installation de pilotes graphiques casse parfois ces liens symboliques. (Plus précisément, /usr/local/lib/libGL.so.1.2.0 sera probablement soit la mauvaise bibliothèque, soit un lien sym vers le mauvais lien).

Pour savoir quelle bibliothèque les programmes OpenGL essaient d’exécuter, vous pouvez activer un peu de verbosité et exécuter un simple programme OpenGL. Vous pouvez le vérifier en utilisant le programme de test OpenGL standard:

LIBGL_DEBUG=verbose glxgears

Espérons que cela échouera de la même manière que SFML. Avec LIBGL_DEBUG, il devrait vous indiquer la bibliothèque OpenGL qu’elle tente de charger. De plus, la bibliothèque qu’elle essaiera de charger portera presque certainement /usr/local/lib/libGL.so.1.2.0 (Edit: c’était la bibliothèque standard OpenGL sur ma machine au moment où j’ai répondu à cette question. Il se peut qu’il en soit une autre version sur votre machine maintenant).

Donc, la solution (dans ce cas) est de s'assurer que /usr/local/lib/libGL.so.1.2.0 est un lien symbolique pointant vers la bonne bibliothèque OpenGL. Dans mon cas, j'ai le pilote Nvidia 3.40 alors j'ai couru:

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

Mais vous voudrez le pointer sur la bibliothèque OpenGL qui vous convient (listée dans la première commande find).

En résumé: l'installation de pilotes graphiques (propriétaires) peut rompre les liens symboliques utilisés pour les bibliothèques OpenGL. Pour résoudre ce problème, corrigez manuellement les liens symboliques (corrigez d'abord /usr/local/lib/libGL.so.1.2.0).

28
demented hedgehog

J'ai eu le même problème sur Ubuntu 16.10 avec les pilotes nvidia-340 et aucune des solutions ici ne fonctionnait pour moi.

Il s'avère que les bibliothèques 32 bits n'étaient pas sur le chemin de la bibliothèque.

Ce paquebot a fonctionné pour moi:

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

J'avais des problèmes pour faire pointer le lien symbolique correct vers le pilote nVidia et j'ai trouvé un autre moyen qui fonctionne pour moi.

Il est décrit ici .

Et il explique comment installer le pilote nVidia via PPA disponible pour 349.16, la dernière version.

Commencez par désinstaller les pilotes nVidia actuellement installés en ouvrant une fenêtre de terminal (Ctrl + ALT + T) et en tapant

Sudo apt-get remove nvidia*

Redémarrez votre système

Puis ouvrez un autre terminal et tapez ce qui suit

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

Puis redémarrez à nouveau

Je l'ai essayé après m'être égaré avec les liens symboliques et Steam fonctionnait correctement immédiatement après l'installation du pilote. Encore une fois, il fonctionnait encore après avoir eu plus de 400 Mo de mises à jour du système.

4
Adrian

Pour fournir une alternative à la réponse d'Adrian: si vous préférez utiliser des pilotes propriétaires provenant directement de NVIDIA plutôt que ceux trouvés dans un PPA, l'installation (ou dans mon cas, la réinstallation) du dernier pilote propriétaire peut aider à éliminer l'erreur swrast.

Si vous ne possédez pas encore le pilote NVIDIA, téléchargez-le à partir de site Web de NVIDIA . Ensuite, passez à tty (ctrlname __ + altname __ + F1) et désactivez votre gestionnaire de connexion:

Si vous utilisez lightdm, $ Sudo service lightdm stop

Si vous utilisez gdm, $ Sudo service gdm stop

Naviguez jusqu'au script d'installation, exécutez-le et suivez les instructions. Ne vous inquiétez pas si le script de pré-installation échoue. J'accepte toujours d'enregistrer DKMS et les bibliothèques de compatibilité 32 bits. Une fois le pilote installé, redémarrez votre ordinateur:

$ Sudo reboot

Si vous avez déjà un script d'installation à partir d'un ancien pilote NVIDIA, exécutez simplement le script d'installation du pilote NVIDIA comme décrit ci-dessus, mais avec l'option "--update":

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

Cela vous donnera la version la plus récente du pilote.

Cela corrigeait mon erreur libGL error: failed to load driver: swrast.

3
NWRichmond

J'ai eu le même problème sur Ubuntu 18. Cela s'est produit essentiellement avec les applications 32 bits. Donc, mon idée était d'installer quelque chose de nvidia 32 bits, car mon dossier/usr/lib/i386-linux-gnu/était étrangement vide.

Après très peu d'essais, cela a résolu mon problème de vapeur et de vin qui ne démarre pas:

Sudo apt install libnvidia-gl-418:i386

(et remplacez 418 par votre version)

Il est intéressant de noter que les applications ne se sont pas plaintes de dépendances manquantes lors de l’installation.

2
vmicho

Voici une solution _apt- only qui a fonctionné pour moi, sans symlinking ni bidouillage avec ld.so.conf.d:

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

Je dois admettre que je ne sais pas pourquoi cela fonctionne pour moi, mais ça a été le cas. Dans ce cas particulier, "réparer" les entrées ld.so.conf.d en ajoutant une nouvelle entrée comme celle-ci fonctionne:

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

Cela a du sens, jusqu'à ce que vous exécutiez le find suivant:

$ 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

Pourquoi avoir les mêmes entrées en triple, mais pas en double, je n'en ai aucune idée!

2
bbarker

Je viens d'utiliser cette ligne:

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

et il fonctionne.

Parce que je vois une telle entrée quand j'exécute 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
DapangLiu

Il suffit de lancer ceci:

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

La version de votre pilote est affichée dans nvidia-settings.

0
Mimi the Cat