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


38

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 simplement 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 ...

PS et oui, j’ai enregistré toutes les modifications après avoir installé les pilotes nvidia


1
Cela arrive à moi si je tente de lancer un chargement dynamique exécutable OpenGL mesa libGL.so: LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa ./glprogram. Par défaut, mon Ubuntu 16.04 utilise à /usr/lib/nvidia-361/libGL.socause de /etc/ld.so.conf.d/x86_64-linux-gnu_GL.confet tout fonctionne bien.
Ciro Santilli a posté le 04/09/16

Réponses:


29

La swrastchose est le moteur de rendu logiciel. Cela signifie que le pilote de votre carte graphique n’est pas trouvé. De nombreuses bibliothèques libGL sont installées et de nombreux liens symboliques vers ces bibliothèques. Pour voir cela, 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.0sera probablement la mauvaise bibliothèque ou 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_DEBUGcela devrait vous dire quelle bibliothèque OpenGL il essaie de charger. De plus, la bibliothèque qu’elle essaiera de charger sera 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).

La solution (dans ce cas) est donc de s’assurer qu’il /usr/local/lib/libGL.so.1.2.0s’agit d’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’ /usr/local/lib/libGL.so.1.2.0abord).


Ce problème m'a aidé à comprendre le message d'erreur, mais pas à le corriger. La réponse "réinstaller les pilotes nvidia" a été un bon complément, car elle a résolu le problème pour moi.
henko

@henko yes La réinstallation des pilotes nvidia est probablement le moyen le plus rapide et le plus simple de résoudre ce problème. Revenez à cette approche si, pour une raison quelconque, la réinstallation des pilotes ne résout pas votre problème et que vous devez vous salir les mains.
hérisson dément

6
J'ai compris chaque partie, sauf "presque certainement être /usr/local/lib/libGL.so.1.2.0". Mine montre "libGL: OpenDriver: essayer /usr/lib/x86_64-linux-gnu/dri/tls/swrast_dri.so libGL: OpenDriver: essayer /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so" et tous ces fichiers existent dans mon système ...
Samuel Li

1
Merci encore pour votre explication; Je comprends mieux le problème. Je tiens également à souligner que, dans mon cas, il existe un bogue confirmé dans le swrast d'ubuntu.so et que des gens en ont déjà discuté .
Samuel Li

1
Merci @dementedhedgehog C’était un message parfaitement articulé qui m’a aidé à résoudre mon problème (sur Fedora-25, au fait). = :). Voté.
NYCeyes

5

J'ai eu le même problème sur Ubuntu 16.10 avec les nvidia-340pilotes 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

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.

C'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 bien 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.


2
Je ne recommanderais pas de quitter xorg-edgers ppa après l’installation du pilote. De nombreux paquets instables viendront dans les mises à jour.
Pilot6

il suffit de retirer le nvidia * pour résoudre ce problème!
xtofl

3

Pour proposer 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 depuis le site Web de NVIDIA . Ensuite, passez à tty ( ctrl+ alt+ 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 et exécutez-le, puis 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 d'un pilote NVIDIA plus ancien, exécutez simplement le script d'installation du pilote NVIDIA comme indiqué 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.

Faire cela a corrigé mon libGL error: failed to load driver: swrasterreur.


3

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.


Cela semble avoir résolu l'un de mes problèmes liés à la question, au moins ...
Andrew

Ce 32 bits pourrait être pourquoi. D'autres programmes fonctionnent bien, mais ceux-ci sont probablement en 64 bits. Néanmoins, cela fonctionne très bien (je devais cependant bousculer la version)
Zoe

2

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 ce qui suit 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

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


Fonctionne pour moi sur Ubunu 17.04. Juste une remarque - le chemin est / usr / lib / nvidia-xxx, où xxx est le numéro du pilote, adaptez la commande à cela.
user2082382

2

Voici une aptsolution qui ne fonctionne que pour moi, pas de liens symboliques ni de bidouilles ld.so.conf.d:

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

1

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
Les gens sont-ils censés suivre ce que cela signifie ...?
Andrew

Travaille pour moi, merci!
Hett

0

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

Dans mon cas, la solution à ce problème résidait dans la suite du message d'erreur.

Paraview 5.7.0 m'a informé que:

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

Le message

GLEW could not be initialized: Missing GL version

a été la clé. Je lance 'glxgears' pour vérifier que les bibliothèques graphiques fonctionnent correctement - voir aussi man glxgears- montrant cette animation:

capture d'écran de glxgears

Ensuite, ma solution consistait simplement à définir la variable d'environnement

LD_PRELOAD=/usr/lib/libGL.so

Prendre note:

  1. Bien que je dispose d’une carte graphique Nvidia, je n’ai pas besoin de la manipuler;
  2. En lançant locate libGL.so, je trouve un autre candidat /usr/lib/i386-linux-gnu/libGL.so. Définir ceci comme LD_PRELOAD, cependant, n'a pas résolu le problème.
  3. Pas besoin de définir aucune information sur la bibliothèque GLEW apparaissant ci-dessus soit --- voir locate libGLEW.so

Je suis redevable de https://github.com/openai/mujoco-py/issues/44 pour des indices


Pour connaître la différence entre LD_PRELOAD et LD_LIBRARY_PATH, plus communément cité, veuillez consulter stackoverflow.com/q/14715175/5459638
XavierStuvw

-3

J'étais confronté à ce problème étrange lorsque je ssh sur mon ordinateur virtuel Ubuntu à partir de mon Macbook Pro, mais l'installation du pilote Nvidia ci-dessous sur mon Ubuntu 16.04 a résolu le problème. J'espère que cela fonctionne pour toi.

sudo apt-get install nvidia-331


1
Pourquoi voudriez-vous installer les pilotes GPU Nvidia sur un système invité VM? Ó_ò
David Foerster Le

Le vote négatif n'est pas approprié. @DavidFoerster a raison de dire que l'installation de pilotes GPU dans une machine virtuelle n'a aucun sens (à moins que vous ne transmettiez le matériel GPU à la machine virtuelle). Mais: je cours sous X sur SSH et je suis confronté au même problème. Le démarrage d'applications X sur la machine distante (VM) entraîne presque toujours les messages d'erreur mentionnés dans la question du PO. Je ne l' ai pas trouvé une solution à ce problème encore, mais si l' installation des pilotes GPU sur la machine virtuelle à distance serait la solution, je le ferais, que il est logique, juste pour que les erreurs disparaissent (je suis en les ignorant actuellement).
Binarus
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.