Windows 的 Linux 子系统 (WSL) 有同样的错误

Windows 的 Linux 子系统 (WSL) 有同样的错误

如果我单击“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:

以下是yadUbuntu 中的窗口样子(在 WSL 中略有不同):

锁屏定时器

答案4

就我而言,问题在于我启用了一些安装了 440 nvidia 驱动程序和工具的 CUDA apt 源。禁用该源并安装最新版本的 nvidia 驱动程序 (435) 后,它安装了所需的所有其他内容,错误也消失了。

相关内容