¿Problemas con libGl, fbConfigs, en cada actualización?

38

Tengo problemas al compilar el proyecto SFML (no veo ningún gráfico):

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

Este error puede resolverse simplemente reinstalando nvidia-drivers a través de este tutorial: https://askubuntu.com/a/451248/341889

... pero cuando recibo nuevas actualizaciones, este error regresa; (¿Qué debo hacer? No es la solución, no usar la actualización del sistema ...

PD y sí, guardé todos los cambios después de instalar nvidia-drivers

pushandpop
fuente
1
Esto me pasa si trato de poner en marcha una dinámica ejecutable OpenGL carga de la mesa libGL.so: LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/mesa ./glprogram. Por defecto, mi Ubuntu 16.04 usa /usr/lib/nvidia-361/libGL.sodebido /etc/ld.so.conf.d/x86_64-linux-gnu_GL.confy todo funciona bien.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

29

La swrastcosa es el procesador de software. Eso significa que no está encontrando el controlador de hardware para su tarjeta gráfica. Hay un montón de bibliotecas libGL instaladas y un montón de enlaces simbólicos a esas bibliotecas. Para ver esto, ejecute esto desde el shell:

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

Ahora, la causa probable de su problema es que la instalación de controladores de gráficos a veces rompe estos enlaces simbólicos. ( /usr/local/lib/libGL.so.1.2.0Es probable que sea específicamente la lib incorrecta o un enlace simbólico al enlace incorrecto).

Para determinar qué biblioteca están tratando de ejecutar los programas OpenGL, puede activar un poco de verbosidad y ejecutar un simple programa OpenGL. Puede verificar esto utilizando el programa de prueba estándar OpenGL:

LIBGL_DEBUG=verbose glxgears

Esperemos que eso falle de la misma manera que SFML. Con LIBGL_DEBUGél debería decirte qué biblioteca de OpenGL está tratando de cargar. Además, la /usr/local/lib/libGL.so.1.2.0biblioteca que intentará cargar seguramente será (Edición: esta era la biblioteca estándar de OpenGL en mi máquina en el momento en que respondí esto. Bien podría ser alguna otra versión en su máquina ahora).

Entonces, la solución (en este caso) es asegurarse de que /usr/local/lib/libGL.so.1.2.0sea ​​un enlace simbólico que apunte a la biblioteca de OpenGL correcta. En mi caso tengo el controlador Nvidia 3.40, así que ejecuté:

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

Pero querrá apuntarlo a la biblioteca OpenGL que sea apropiada para usted (enumerada en el primer comando de búsqueda).

En resumen: la instalación de controladores de gráficos (propietarios) puede romper los enlaces simbólicos utilizados para las bibliotecas OpenGL. Para resolver este problema, arregle manualmente los enlaces simbólicos (arregle /usr/local/lib/libGL.so.1.2.0primero).

erizo demente
fuente
Este problema me ayudó a entender el mensaje de error, pero no lo solucioné. La respuesta de "reinstalar los controladores de nvidia" fue un buen complemento, ya que realmente solucionó el problema para mí.
henko
@henko sí, reinstalar los controladores de nvidia es probablemente la forma más rápida y fácil de solucionar esto. Vuelva a este enfoque si, por alguna razón, reinstalar los controladores no soluciona su problema y necesita ensuciarse las manos.
erizo demente
66
Entendí todas las partes, excepto "casi seguro sea /usr/local/lib/libGL.so.1.2.0". El mío muestra "libGL: OpenDriver: intentando /usr/lib/x86_64-linux-gnu/dri/tls/swrast_dri.so libGL: OpenDriver: intentando /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so" y todo estos archivos existen en mi sistema ...
Samuel Li
1
Gracias de nuevo por tu explicación; Entiendo mejor sobre el problema. También quiero señalar que en mi caso, hay un error confirmado en ubuntu swrast.so, y la gente lo ha estado discutiendo .
Samuel Li
1
Gracias @dementedhedgehog Esta fue una publicación excelentemente articulada y me ayudó a resolver mi problema (en Fedora-25, por cierto). = :). Votado a favor.
NYCeyes
5

Tuve el mismo problema en Ubuntu 16.10 con los nvidia-340controladores y ninguna de las soluciones aquí funcionó para mí.

Resulta que las bibliotecas de 32 bits no estaban en la ruta de la biblioteca.

Este trazador de líneas funcionó para mí:

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

Estaba teniendo problemas para obtener el enlace simbólico correcto para apuntar al controlador nVidia y encontré otra forma que funciona para mí.

Se describe aquí .

Y enumera cómo instalar el controlador nVidia a través de PPA, que está disponible para 349.16, la última versión.

Primero desinstale cualquier controlador nVidia instalado actualmente abriendo una ventana de terminal ( Ctrl+ ALT+ T) y escribiendo

sudo apt-get remove nvidia*

Reinicie su sistema

Luego abra otra terminal y escriba lo siguiente

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

Luego reinicie nuevamente

Lo probé después de perderme con los enlaces simbólicos y steam funcionó bien inmediatamente después de instalar el controlador y nuevamente funcionó después de haber tenido más de 400 megas de actualizaciones del sistema.

Adrian
fuente
2
No sugeriría dejar xorg-edgers ppa después de instalar el controlador. Muchos paquetes inestables vendrán en actualizaciones.
Piloto6
¡simplemente eliminar el nvidia * ya me resolvió este problema!
xtofl
3

Para proporcionar una alternativa a la respuesta de Adrian: si prefiere usar controladores propietarios directamente de NVIDIA en lugar de los que se encuentran en un PPA, la instalación (o en mi caso, la reinstalación) del último controlador propietario puede ayudar a eliminar el error de la ráfaga.

Si aún no tiene el controlador NVIDIA, descárguelo del sitio web de NVIDIA . A continuación, cambie a tty ( ctrl+ alt+ F1) y apague su administrador de inicio de sesión:

Si usa lightdm, $ sudo service lightdm stop

Si usa gdm, $ sudo service gdm stop

Navegue hasta el script de instalación y ejecútelo, y siga las indicaciones. No se preocupe si falla el script de preinstalación. Siempre acepto registrar DKMS y las bibliotecas de compatibilidad de 32 bits. Después de instalar el controlador, reinicie su máquina:

$ sudo reboot

Si ya tiene un script de instalación de un controlador NVIDIA anterior, simplemente ejecute el script de instalación del controlador NVIDIA como se indicó anteriormente, pero con la opción "--update":

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

Esto le proporcionará la versión más actualizada del controlador.

Hacer esto solucionó mi libGL error: failed to load driver: swrasterror.

NWRichmond
fuente
3

Tengo el mismo problema en ubuntu 18. Esto sucedió básicamente solo con aplicaciones de 32 bits. Así que mi idea era instalar 32bit nvidia algo, ya que mi carpeta / usr / lib / i386-linux-gnu / estaba sospechosamente vacía.

Después de muy pocos intentos, esto solucionó mi problema con el vapor y el vino que no comenzaba:

sudo apt install libnvidia-gl-418:i386

(y cambie 418 a la versión que tenga)

Es interesante que las aplicaciones no se quejen de las dependencias faltantes durante la instalación.

vmicho
fuente
Esto parece haber solucionado uno de mis problemas relacionados con la pregunta, al menos ...
Andrew
Ser de 32 bits podría ser el motivo. Otros programas funcionan bien, pero esos son probablemente de 64 bits. Sin embargo, esto funciona bien (aunque tuve que cambiar la versión)
Zoe
2

Tengo que admitir que no estoy seguro de por qué esto funciona para mí, pero lo hizo. En este caso particular, "arreglar" las entradas ld.so.conf.d agregando una nueva entrada como esta funciona:

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

Esto tiene sentido, hasta que ejecute lo siguiente 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

¿Por qué tener las mismas entradas por triplicado funciona, pero no por duplicado, no tengo idea!

bbarker
fuente
Funciona para mí en Ubunu 17.04. Solo una nota: la ruta es / usr / lib / nvidia-xxx donde xxx es el número del controlador, así que adapte el comando a eso.
usuario2082382
2

Aquí hay una aptsolución única que funcionó para mí, sin simbología ni manipulación ld.so.conf.d:

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

Solo uso esta línea:

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

y funciona.

Porque veo esa entrada cuando ejecuto 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
fuente
1
¿Se supone que las personas deben seguir lo que esto significa ...?
Andrew
Funciona para mí, gracias!
Hett
0

Solo ejecuta esto:

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

La versión de su controlador se muestra en nvidia-settings.

Mimi la gata
fuente
0

En mi caso, la solución a este problema residía en la continuación del mensaje de error

El párrafo 5.7.0 me 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

El mensaje

GLEW could not be initialized: Missing GL version

Ha sido clave. Ejecuté 'glxgears' para verificar que las bibliotecas de gráficos funcionaban bien, vea también man glxgears, mostrando esta animación:

captura de pantalla de glxgears

Entonces mi solución fue simplemente establecer la variable de entorno

LD_PRELOAD=/usr/lib/libGL.so

Tomar nota:

  1. Aunque tengo una tarjeta gráfica Nvidia, no necesitaba jugar con ella;
  2. Al lanzar locate libGL.so, encuentro otro candidato /usr/lib/i386-linux-gnu/libGL.so. Sin embargo, establecer esto como LD_PRELOAD no solucionó el problema;
  3. No es necesario establecer ninguna información sobre la biblioteca GLEW que aparece arriba --- ver locate libGLEW.so

Estoy en deuda con https://github.com/openai/mujoco-py/issues/44 por pistas

XavierStuvw
fuente
Para conocer la diferencia entre LD_PRELOAD y el LD_LIBRARY_PATH más comúnmente citado, consulte stackoverflow.com/q/14715175/5459638
XavierStuvw
-3

Me estaba enfrentando a este extraño problema cuando ssh a mi Ubuntu VM desde mi Macbook Pro, pero la instalación del siguiente controlador Nvidia en mi Ubuntu 16.04 solucionó el problema. Espero que esto funcione para usted.

sudo apt-get install nvidia-331

TekTutorJegan
fuente
1
¿Por qué instalaría controladores de GPU Nvidia en un sistema invitado VM? Ó_ò
David Foerster
El voto negativo no es apropiado. @DavidFoerster tiene razón en que instalar controladores de GPU en una VM no tiene ningún sentido (a menos que pase el hardware de la GPU a la VM). Pero: estoy ejecutando X sobre SSH, y estoy enfrentando el mismo problema. Iniciar aplicaciones X en la máquina remota (VM) casi siempre conduce a los mensajes de error mencionados en la pregunta del OP. No he encontrado una solución a ese problema todavía, pero si la instalación de controladores de la GPU en la máquina virtual a distancia podría ser la solución, me gustaría hacerlo, independientemente de si tiene sentido, sólo para asegurarse de que los errores desaparecen (soy actualmente ignorándolos).
Binarus