libGL 오류: 일치하는 fbConfigs 또는 시각적 개체가 없습니다. Glxgears 오류, Docker, CUDA, VirtualGL |

libGL 오류: 일치하는 fbConfigs 또는 시각적 개체가 없습니다. Glxgears 오류, Docker, CUDA, VirtualGL |

내가 달릴 때GLX 기어, 다음 오류가 발생합니다.

libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
Error: couldn't get an RGB, Double-buffered visual

내 시스템은 docker 이미지로 우분투 16.04입니다 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. 그러나 이것은 작동하지 않습니다.

우분투 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

우분투 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

호스트 컴퓨터에 CUDA 10.2가 있지만 이것이 필요한지 여부와 문제를 일으킬 수 있는지 모르겠습니다.

이 문제를 해결하는 방법을 모르겠습니다.

어떤 조언이라도 감사드립니다.

답변1

이 두 가지 오류는 다음에도 나타납니다.WSL2(Linux용 Windows 하위 시스템)를 사용하여 Docker의 GUI를 통해 ROS 실행.

이 오류는 libGL error: No matching fbConfigs or visuals found다음을 통해 해결할 수 있습니다.

export LIBGL_ALWAYS_INDIRECT=1

이 오류는 libGL error: failed to load driver: swrast다음을 통해 해결할 수 있습니다.

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


아마도 관련이 없는 참고 사항:

"Docker 가이드에서 GUI를 사용하는 ROS"를 실행하려면 dbus도 설치되어 있어야 합니다.

sudo apt-get update
sudo apt-get install -y dbus

dbus를 설치한 후에만 문제의 두 가지 오류가 표시되기 때문에 여기서는 관련이 없다고 생각하지만 문제의 배경을 모르므로 도움이 될 수도 있습니다. dbus를 설치하면 오류가 제거됩니다.D-Bus 라이브러리가 잘못 설정된 것 같습니다. 시스템 uuid를 읽을 수 없습니다. '/var/lib/dbus/machine-id'를 열 수 없습니다..

답변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

displaynvidia 함수 var에 추가하는 것을 잊지 마세요 :

ENV NVIDIA_DRIVER_CAPABILITIES compute,utility,display

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

답변3

Nvidia를 사용하는 호스트 시스템(Ubuntu 22)의 Docker 컨테이너(Ubuntu 18)에서 비슷한 오류가 발생했습니다. 내가 한 일은 다음과 같습니다.

1단계(에서주인머신): # nvidia-container-toolkit 설치

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu22.04/nvidia-docker.list > /etc/apt/sources.list.d/nvidia-docker.list
apt update
apt -y install nvidia-container-toolkit
systemctl restart docker

#시험

docker run --gpus all nvidia/cuda:11.5.2-base-ubuntu20.04 nvidia-smi

# 테스트 문제가 발견되면 호스트를 다시 시작하세요.

2단계(docker 실행) # NVIDIA_VISIBLE_DEVICES=all -e NVIDIA_DRIVER_CAPABILITIES=all --gpus all 플래그를 사용하여 실행합니다.

#나의 경우:

docker run -e NVIDIA_VISIBLE_DEVICES=all -e NVIDIA_DRIVER_CAPABILITIES=all  --gpus all -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY myimage 

3단계(vscode devcontainer를 사용하는 경우)

#devcontainer.json의 실행 매개변수에 다음을 제공합니다.

"runArgs": [
    "-e","DISPLAY=:1",
    "-e","NVIDIA_VISIBLE_DEVICES=all",
    "-e","NVIDIA_DRIVER_CAPABILITIES=all",
    "--gpus","all",
    "--runtime=nvidia",
]

#decontainer.json의 마운트 섹션에서:

"mounts": [
    "source=/tmp/.X11-unix,target=/tmp/.X11-unix,type=bind",
],

관련 정보