私が走るとき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イメージとしてUbuntu 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
。しかし、これはうまくいきません。
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
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
ホストコンピュータにCUDA 10.2がありますが、これが必要かどうか、問題が発生する可能性があるかどうかわかりません。
この問題を解決する方法がわかりません。
どんなアドバイスもありがとうございます。
答え1
これら2つのエラーは次にも表示されます。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をインストールした後にのみ問題の2つのエラーが表示されるので、ここでは関係がないと思いますが、問題の背景を知らないので役に立つかもしれません。 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
display
nvidia関数varに追加することを忘れないでください:
ENV NVIDIA_DRIVER_CAPABILITIES compute,utility,display
答え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",
],