libGL 错误:找不到匹配的 fbConfigs 或视觉效果 | Glxgears 错误、Docker、CUDA、VirtualGL

tra*_*iak 9 ubuntu opengl docker cuda

当我运行glxgears时,出现以下错误。

libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
Error: couldn't get an RGB, Double-buffered visual
Run Code Online (Sandbox Code Playgroud)

我的系统是 ubuntu 16.04 作为 docker 镜像 -nvidia/cuda:8.0-runtime-ubuntu16.04

该映像包含 VirtualGL 和 TurboVNC,其启动参数如下:

docker run --runtime=nvidia --privileged -d -v /tmp/.X11-unix/X0:/tmp/.X11-unix/X0 -e USE_DISPLAY="7" my_image

如果我将基础图像更改为没有问题nvidia/cuda:10.2-runtime-ubuntu18.04。但该容器所属的应用程序需要 CUDA 8。

我找到了一些删除库的建议:sudo rm /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1。但这不起作用。

Ubuntu 16.04、CUDA 8:

user@host:/opt/noVNC$ sudo ldconfig -p | grep -i libGL.so
    libGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/mesa/libGL.so.1
    libGL.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGL.so
    libGL.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/mesa/libGL.so
user@host:/usr/lib/x86_64-linux-gnu$ ll libGL*
    lrwxrwxrwx 1 root root      13 Jun 14  2018 libGL.so -> mesa/libGL.so
    lrwxrwxrwx 1 root root      32 May 25 14:14 libGLESv1_CM_nvidia.so.1 -> libGLESv1_CM_nvidia.so.440.33.01
    -rw-r--r-- 1 root root   63696 Nov 12  2019 libGLESv1_CM_nvidia.so.440.33.01
    lrwxrwxrwx 1 root root      29 May 25 14:14 libGLESv2_nvidia.so.2 -> libGLESv2_nvidia.so.440.33.01
    -rw-r--r-- 1 root root  111416 Nov 12  2019 libGLESv2_nvidia.so.440.33.01
    -rw-r--r-- 1 root root  911218 Oct 23  2015 libGLU.a
    lrwxrwxrwx 1 root root      15 Oct 23  2015 libGLU.so -> libGLU.so.1.3.1
    lrwxrwxrwx 1 root root      15 Oct 23  2015 libGLU.so.1 -> libGLU.so.1.3.1
    -rw-r--r-- 1 root root  453352 Oct 23  2015 libGLU.so.1.3.1
    lrwxrwxrwx 1 root root      26 May 25 14:14 libGLX_indirect.so.0 -> libGLX_nvidia.so.440.33.01
    lrwxrwxrwx 1 root root      26 May 25 14:14 libGLX_nvidia.so.0 -> libGLX_nvidia.so.440.33.01
    -rw-r--r-- 1 root root 1114496 Nov 12  2019 libGLX_nvidia.so.440.33.01
user@host:/usr/lib/x86_64-linux-gnu$ ll mesa
    -rw-r--r-- 1 root root     31 Jun 14  2018 ld.so.conf
    lrwxrwxrwx 1 root root     14 Jun 14  2018 libGL.so -> libGL.so.1.2.0
    lrwxrwxrwx 1 root root     14 Jun 14  2018 libGL.so.1 -> libGL.so.1.2.0
    -rw-r--r-- 1 root root 471680 Jun 14  2018 libGL.so.1.2.0
Run Code Online (Sandbox Code Playgroud)

Ubuntu 18.04、CUDA 10:

user@host:/opt/noVNC$ sudo ldconfig -p | grep -i libGL.so
    libGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGL.so.1
user@host:/usr/lib/x86_64-linux-gnu$ ll libGL*
    lrwxrwxrwx 1 root root      14 May 10  2019 libGL.so.1 -> libGL.so.1.0.0
    -rw-r--r-- 1 root root  567624 May 10  2019 libGL.so.1.0.0
    lrwxrwxrwx 1 root root      32 May 20 16:43 libGLESv1_CM_nvidia.so.1 -> libGLESv1_CM_nvidia.so.440.33.01
    -rw-r--r-- 1 root root   63696 Nov 12  2019 libGLESv1_CM_nvidia.so.440.33.01
    lrwxrwxrwx 1 root root      29 May 20 16:43 libGLESv2_nvidia.so.2 -> libGLESv2_nvidia.so.440.33.01
    -rw-r--r-- 1 root root  111416 Nov 12  2019 libGLESv2_nvidia.so.440.33.01
    lrwxrwxrwx 1 root root      15 May 21  2016 libGLU.so.1 -> libGLU.so.1.3.1
    -rw-r--r-- 1 root root  453352 May 21  2016 libGLU.so.1.3.1
    lrwxrwxrwx 1 root root      15 May 10  2019 libGLX.so.0 -> libGLX.so.0.0.0
    -rw-r--r-- 1 root root   68144 May 10  2019 libGLX.so.0.0.0
    lrwxrwxrwx 1 root root      16 Feb 19 05:09 libGLX_indirect.so.0 -> libGLX_mesa.so.0
    lrwxrwxrwx 1 root root      20 Feb 19 05:09 libGLX_mesa.so.0 -> libGLX_mesa.so.0.0.0
    -rw-r--r-- 1 root root  488344 Feb 19 05:09 libGLX_mesa.so.0.0.0
    lrwxrwxrwx 1 root root      26 May 20 16:43 libGLX_nvidia.so.0 -> libGLX_nvidia.so.440.33.01
    -rw-r--r-- 1 root root 1114496 Nov 12  2019 libGLX_nvidia.so.440.33.01
    lrwxrwxrwx 1 root root      22 May 10  2019 libGLdispatch.so.0 -> libGLdispatch.so.0.0.0
    -rw-r--r-- 1 root root  612792 May 10  2019 libGLdispatch.so.0.0.0
user@host:/usr/lib/x86_64-linux-gnu$ ll mesa
    ls: cannot access 'mesa': No such file or directory
Run Code Online (Sandbox Code Playgroud)

主机有 CUDA 10.2,但我不知道是否需要它并且可能会导致问题。

我不知道如何解决这个问题。

感谢您的任何建议。

que*_*o42 15

当使用 Windows Subsystem for Linux 2 (WSL2) 在 Docker 中运行带有 GUI 的 ROS时,也会出现这两个错误。

\n

该错误libGL error: No matching fbConfigs or visuals found可以通过以下方式修复:

\n

export LIBGL_ALWAYS_INDIRECT=1

\n

该错误libGL error: failed to load driver: swrast可以通过以下方式修复:

\n

sudo apt-get install -y mesa-utils libgl1-mesa-glx

\n
\n

可能不相关的旁注:

\n

要运行“Docker 上带有 GUI 的 ROS 指南”,您还必须安装 dbus。

\n
sudo apt-get update\nsudo apt-get install -y dbus\n
Run Code Online (Sandbox Code Playgroud)\n

我认为这与此无关,因为只有在安装 dbus 后您才会看到有问题的两个错误,但我不知道问题的背景,也许它有帮助。安装 dbus 将消除错误D-Bus 库似乎设置不正确;无法读取机器 uuid:无法打开 \xe2\x80\x9c/var/lib/dbus/machine-id\xe2\x80\x9d

\n

  • 愿意给+2。您解决了我遇到的三个问题中的两个,在一个不相关的项目中从 Docker 获取 OpenGL 工作。 (2认同)

tra*_*iak 2

解决方案是手动替换nvidia/cuda:8.0-runtime-ubuntu16.04映像nvidia/opengl:1.0-glvnd-runtime-ubuntu16.04并安装 CUDA 8。

CUDA 8安装: https://gitlab.com/nvidia/container-images/cuda/-/blob/ubuntu16.04/8.0/runtime/Dockerfile

不要忘记添加display到 nvidia 功能 var:

ENV NVIDIA_DRIVER_CAPABILITIES compute,utility,display
Run Code Online (Sandbox Code Playgroud)

https://hub.docker.com/r/nvidia/opengl