如果我单击“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*
并重新安装驱动程序,但没有成功。
答案1
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 开始,该问题不再存在。
答案2
在我的情况下,我必须安装 i386 NVIDIA 驱动程序。此后它就可以正常工作了。
安装 libnvidia-gl-440:i386
祝你有美好的一天!
答案3
Windows 的 Linux 子系统 (WSL) 有同样的错误
在 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 ([email protected]) (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 ([email protected]) (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 ([email protected]) (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 终端窗口并打开一个新窗口。
通过评论快速修复
在下面的评论中建议尝试https://stackoverflow.com/a/63450299/6929343:
export LIBGL_ALWAYS_INDIRECT=1
要进行快速测试,请运行:
glxinfo -B | grep renderer
笔记:我还没有测试过这个解决方案。
图书馆在做什么?
yad
该库用于鎖屏錶時器bash 脚本已升级,除了 Ubuntu 之外,还支持 WSL 的混合版本。Yad 是它的一个分支,这就是为什么您会在上面的第三个错误消息中Zenity
看到类似 Zenity 的引用。Gtk-Message:
以下是yad
Ubuntu 中的窗口样子(在 WSL 中略有不同):
答案4
就我而言,问题在于我启用了一些安装了 440 nvidia 驱动程序和工具的 CUDA apt 源。禁用该源并安装最新版本的 nvidia 驱动程序 (435) 后,它安装了所需的所有其他内容,错误也消失了。