Steam:libGL错误:找不到匹配的fbConfigs或visuals libGL错误:无法加载驱动程序:swrast

如果我点击“Steam”的桌面应用程序,什么都不会发生。
在终端中运行steam会产生以下结果:
STEAM_RUNTIME is enabled automatically
Installing breakpad exception handler for appid(steam)/version(1474415843)
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast

有趣的是,如果我将GPU驱动程序更改为xorg,它就能完美运行。
我该怎么做才能让它正常工作?在最新的Steam更新(36小时前)之后,它停止工作了。
我尝试卸载NVIDIA - sudo apt-get remove nvidia*并重新安装驱动程序,但没有成功。
6个回答

Ubuntu 16.04+ 如果你仍然遇到相同的错误,而且你正在使用nvidia驱动程序,有时你会发现libGL.so.1指向由mesa和nvidia提供的模糊的libGL。为了测试这个问题,你可以运行以下命令

$ sudo ldconfig -p | grep -i gl.so

输出结果大致如下:
    libwayland-egl.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libwayland-egl.so.1
    libftgl.so.2 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libftgl.so.2
    libcogl.so.20 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libcogl.so.20
    libQt5OpenGL.so.5 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libQt5OpenGL.so.5
    libQtOpenGL.so.4 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libQtOpenGL.so.4
    libQtOpenGL.so.4 (libc6) => /usr/lib/i386-linux-gnu/libQtOpenGL.so.4
    libOpenGL.so.0 (libc6,x86-64) => /usr/lib/nvidia-378/libOpenGL.so.0
    libOpenGL.so (libc6,x86-64) => /usr/lib/nvidia-378/libOpenGL.so
    libGL.so.1 (libc6,x86-64) => /usr/lib/nvidia-378/libGL.so.1
    libGL.so.1 (libc6) => /usr/lib/i386-linux-gnu/mesa/libGL.so.1
    libGL.so.1 (libc6) => /usr/lib32/nvidia-378/libGL.so.1
    libGL.so (libc6,x86-64) => /usr/lib/nvidia-378/libGL.so
    libGL.so (libc6) => /usr/lib32/nvidia-378/libGL.so
    libEGL.so.1 (libc6,x86-64) => /usr/lib/nvidia-378/libEGL.so.1
    libEGL.so.1 (libc6) => /usr/lib32/nvidia-378/libEGL.so.1
    libEGL.so (libc6,x86-64) => /usr/lib/nvidia-378/libEGL.so
    libEGL.so (libc6) => /usr/lib32/nvidia-378/libEGL.so

现在我只需要移除Mesa提供的库,一切都运行得非常完美。
$ sudo rm /usr/lib/i386-linux-gnu/mesa/libGL.so.1

更新: 从Ubuntu 18.04 LTS开始,这个问题已经不存在了。

16兄弟,你真是应得一块巨大的饼干。 - Aritz Lopez
5在Debian 9上,我移除了这个文件并且成功了,但是没有提到"mesa",然而,"dpkg -S libGL.so.1"给出了一个提示,告诉你应该移除哪个文件。所以:rm /usr/lib/i386-linux-gnu/libGL.so.1祝你享受你的饼干 :) - FabricioFCarv
是的,基本上你需要从系统中删除 libGL.so.1。 - Zobayer Hasan
1这是正确的;起初我以为最好移除libGL.so.1所属的软件包(libgl1-mesa-glx),但事实上,这是Steam软件包的要求。所以只需移除libGL.so.1(它本来应该是一个符号链接)。 - bbarker
/usr/lib/i386-linux-gnu/目录下,我没有一个名为mesa的文件夹。我尝试删除了/usr/lib/i386-linux-gnu/libGL.so.1,然后Steam显示:您缺少以下32位库,可能导致Steam无法运行:libGL.so.1 - alephalpha
1这是一个由于Mesa和NVIDIA之间的冲突导致的错误情景。如果你没有其中之一,那么可能原因是不同的。如果你使用的是Ubuntu 18.04,这个问题已经不存在了。 - Zobayer Hasan
1我在CentOS 7中遇到了相同的问题(感谢@ZobayerHasan节省了很多时间)。移除默认的libGL库解决了这个问题。但是有没有更好的解决方案而不必删除默认库? - Waruna Ranasinghe
5这个问题在18.10版本中仍然存在。 - QkiZ
@QkiZ,有趣的是,我刚刚安装了18.04和Steam,并且安装了NVIDIA驱动程序,但是没有遇到这个问题。不知何故,18.10重新引入了这个问题? - Zobayer Hasan
1是的。我通过从https://github.com/ValveSoftware/steam-for-linux/issues/5884#issuecomment-437690163解决了这个问题。 - QkiZ
6在将Linux Mint从18更新到19之后,我遇到了这个问题。我不得不删除/usr/lib/i386-linux-gnu/libGL.so.1。非常感谢Zobayer Hasan的帮助! - kayo
1删除 /usr/lib/i386-linux-gnu/libGL.so.1 可以让 Steam 在某种程度上启动,但随后会抱怨缺少此文件,如果找到它,则启动会崩溃并显示 "发生 X 错误" :( - NikoNyrh
@NikoNyrh 当它是多余的时候,你应该只删除它,否则可能需要考虑其他解决方案。 - Zobayer Hasan
似乎我的问题与CUDA 10不提供某些驱动程序的x86版本相关,而Steam需要这些驱动程序。我目前手头上没有相关链接。 - NikoNyrh
2这个问题在19.10版本上仍然存在。请尝试使用以下命令修复:sudo rm -rf /lib/x86_64-linux-gnu/libGL.so.1 - Antoine Boucher

在我的情况下,我不得不安装i386的NVIDIA驱动程序。之后它就正常工作了。
sudo apt install libnvidia-gl-440:i386
祝您有美好的一天!

3谢谢兄弟!这在我的Ubuntu 20.04上有效。 - Noctis
4我只需要运行sudo apt install libnvidia-gl-440就能成功安装。 - gbronner
升级到nvidia-driver-440后,这对我起作用了!起初我没有意识到我的glxgears二进制文件是32位的。 - erjiang
1我使用Lutris玩魔兽世界,在将显卡从390升级到450以支持我的新GeForce GTX 1660,并在Mint 19.3上遇到了相同的错误,错误信息如下:libGL error: failed to load driver: swrast``` 通过安装`libnvidia-gl-450:i386`解决了这个错误,不知何故,默认情况下没有选择安装该软件包。 - EvilSupahFly
3它说Depends: libnvidia-gl-450:i386,但安装libnvidia-gl-450:i386会威胁到删除cuda-10-1 cuda-demo-suite-10-1 cuda-drivers cuda-drivers-450 cuda-runtime-10-1 libnvidia-gl-450 libnvidia-ifr1-450 nvidia-driver-450,但我需要Cuda 10.1。由于许多我每天使用的库不支持Cuda 11和Cuda 10.2,所以我想要同时使用Steam和Cuda。 - Black Chase
1非常感谢。我需要在Ubuntu 18.04上执行apt install libnvidia-gl-460:i386命令。 - Neil Stockbridge
这对我解决了一个问题。最近我在WSL2(Windows 10)中安装了Ubuntu 20.04,其中主机拥有NVidia GPU。 - Matthew Zaleski
请注意,末尾的数字需要与您使用的NVIDIA驱动程序版本相匹配。您可以使用nvidia-smi | grep -i version命令进行检查。 - Jeff Ward

Windows Subsystem for Linux (WSL)在Windows 10下出现了相同的错误。
在Windows 10的Windows Subsystem for Linux (WSL)中,文件/usr/lib/i386-linux-gnu/mesa/libGL.so.1不存在。取而代之的是文件/usr/lib/x86_64-linux-gnu/mesa/libGL.so.1似乎替代了它。然而,如果删除替代文件,库将完全无法工作。
重命名库文件,然后再次重命名可以解决问题。
如果您将文件重命名,然后再将其重命名回来,错误将消失,并且它的工作速度会更快。
───────────────────────────────────────────────────────────────────────────────
rick@alien:/mnt/e/etc$ lock-screen-timer
Linux version 4.4.0-43-Microsoft (Microsoft@Microsoft.com) (gcc version 5.4.0 (GCC) ) #1-Microsoft Wed Dec 31 14:42:53 PST 2014
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
───────────────────────────────────────────────────────────────────────────────
rick@alien:/mnt/e/etc$ 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
        libQt5OpenGL.so.5 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libQt5OpenGL.so.5
        libGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
        libEGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/mesa-egl/libEGL.so.1
───────────────────────────────────────────────────────────────────────────────
rick@alien:/mnt/e/etc$ sudo rm /usr/lib/i386-linux-gnu/mesa/libGL.so.1
rm: cannot remove '/usr/lib/i386-linux-gnu/mesa/libGL.so.1': No such file or directory
───────────────────────────────────────────────────────────────────────────────
rick@alien:/mnt/e/etc$ sudo mv /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1 /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.ORIGINAL
───────────────────────────────────────────────────────────────────────────────
rick@alien:/mnt/e/etc$ lock-screen-timer
Linux version 4.4.0-43-Microsoft (Microsoft@Microsoft.com) (gcc version 5.4.0 (GCC) ) #1-Microsoft Wed Dec 31 14:42:53 PST 2014
/usr/bin/zenity: error while loading shared libraries: libGL.so.1: cannot open shared object file: No such file or directory
───────────────────────────────────────────────────────────────────────────────
rick@alien:/mnt/e/etc$ sudo mv /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1.ORIGINAL /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
───────────────────────────────────────────────────────────────────────────────
rick@alien:/mnt/e/etc$ lock-screen-timer
Linux version 4.4.0-43-Microsoft (Microsoft@Microsoft.com) (gcc version 5.4.0 (GCC) ) #1-Microsoft Wed Dec 31 14:42:53 PST 2014
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
───────────────────────────────────────────────────────────────────────────────
rick@alien:/mnt/e/etc$

我验证了更改是持久的,即关闭WSL终端窗口并打开一个新窗口。

谁在使用这个库?

该库被yadlock-screen-timer bash脚本中使用,该脚本升级为WSL的混合支持,除了Ubuntu。 Yad是Zenity的分支,这就是为什么您在上面第三个错误消息中看到类似于Zenity的Gtk-Message:引用的原因。

这是Ubuntu中yad窗口的外观(在WSL中略有不同):

Lock Screen Timer


3这对我来说没用 - 尽管我没有使用锁屏定时器。 - Eric
lock-screen-timer只是一个调用GUI的脚本示例。你可以使用gedit - WinEunuuchs2Unix
好的,我明白。我的意思是,我的应用程序(rqt)可能以不同的方式调用GUI,这可能是为什么在尝试了您的修复方法后仍然失败的原因。 - Eric
嗯,对我来说,gnome-terminal也会出现同样的警告,但即使不重命名任何东西,在启动第二个gnome-terminal实例时,警告就消失了。也许你的“解决方案”也是这种情况吧? - jan-glx
这对我也没有起作用 - Tropilio
我在我的WSL2中甚至没有mesa文件夹。 - Praytic
@Praytic WSL(版本1)的答案已发布。我还没有时间重新启动和测试WSL2。 - WinEunuuchs2Unix
1对于WSL,您需要运行export LIBGL_ALWAYS_INDIRECT=1。请参阅关于WSL的专门问题。https://stackoverflow.com/questions/61831052/how-do-i-run-opengl-programs-using-wsl-ubuntu-20-04 - Aaron
@Aaron 谢谢你的评论。我将其整合到答案中,希望能对其他人有所帮助。 - WinEunuuchs2Unix

这可能是一个 Nvidia 驱动程序问题,根据steam-for-linux issue

在我的情况下,我通过 flapak 安装了 SuperTuxKart,当我运行它时,遇到以下错误:

..:: Antarctica Rendering Engine 2.0 ::..
Linux 4.15.0-52-generic #56-Ubuntu SMP Tue Jun 4 22:49:08 UTC 2019 x86_64
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast

我的解决方案是:
1. 检查我的系统上的NVIDIA驱动程序 ``` ubuntu-drivers devices ``` 已经安装了`nvidia-driver-430`。
2. 根据steam-for-linux issue问题,安装`nvidia-driver-418`来替换`nvidia-driver-430` ``` sudo apt install libnvidia-gl-418 ``` 提示缺少`libnvidia-compute-418`的依赖项,所以先安装`libnvidia-compute-418`。 ``` sudo apt install libnvidia-compute-418 ``` 然后再执行 ``` sudo apt install libnvidia-gl-418 ```
3. 重新启动系统。
然后我运行了SuperTuxKart,它正常工作了。

这对我在wine中使用Target3001有所帮助。 - eDeviser
我使用AMD显卡遇到了这个问题。 - Aditya Patnaik

在我的情况下,问题是我启用了一些CUDA apt源,这些源安装了440版的NVIDIA驱动程序和工具。一旦我禁用了它,并安装了最新版本的NVIDIA驱动程序(435版),它就会安装所需的所有其他内容,错误就消失了。

我使用的解决方案如下:
Ubuntu 20.04: sudo apt install libnvidia-gl-440 (不需要 :i386)
WSL2 Windows 10:使用 -nowgl(和 -ac)参数运行 XServer: "C:\Program Files\VcXsrv\vcxsrv.exe" :0 -multiwindow -clipboard -nowgl -ac 参考链接:https://askubuntu.com/a/1394781/498339