はじめに
普段は Ubuntu 24.04 を使用していますが、今回 Ubuntu 20.04 上で MuJoCo を動かす必要があり、Docker コンテナ内で作業を行いました。しかし、Docker 内ではそのままでは MuJoCo の GUI を表示できなかったため、表示できるように環境を整備した手順をまとめます。
目次
使用環境
・ホストOS: Windows 11 Home(バージョン 24H2、ビルド 26100.3915)
・WSL2: Ubuntu 24.04 LTS
・CPU: Intel Core i7-1065G7
・RAM: 16 GB
・Dockerバージョン: 26.1.3(build 26.1.3-0ubuntu1~24.04.1)
・Xサーバ: VcXsrv(GUI表示用)
注意事項
DISPLAYを設定後は既存のパスが変更されてしまい、Docker外でのGUI表示ができなくなるので、現在のDISPLAYを確認しておきましょう。
デフォルトだとDISPLAY=:0のようです。
環境構築
1. Docker コンテナを起動して MuJoCo をインストール
以下のコマンドでUbuntu20.04コンテナを起動し、必要なパッケージとMuJoCoをインストールします。
docker run -it ubuntu:20.04 bash
apt update
apt install python3-pip
pip3 install mujoco
python3 -m mujoco.viewer
この時点ではまだGUI表示環境が整っていないため、次のようなエラーが出ます。
X11: The DISPLAY environment variable is missing
2. コンテナの一時停止
いったん Docker コンテナを停止して GUI 環境を整えます。
docker ps
docker stop <コンテナ名 or コンテナID>
3. VcXsrv のインストールと起動(Windows側)
Docker コンテナから GUI を表示するために、Windows 側に X サーバ が必要です。今回は「VcXsrv」を使用します。
ダウンロード:https://sourceforge.net/projects/vcxsrv/[1]
インストール後、「XLaunch」を起動し、以下の設定で進めます。
「Multiple windows」を選択
「Start no client」を選択
「Disable access control」にチェックを入れる
※私は次のページを参考にしました:https://atmarkit.itmedia.co.jp/ait/articles/1812/06/news040.html[2]
4. ホストPCのIPアドレスを確認
WindowsのCMDで以下を実行し、Wireless LAN adapter Wi-Fiの項目にある IPv4 アドレス をメモしておきます。
ipconfig
5. DISPLAY 環境変数とアクセス設定
WSLに戻り、以下のように設定します。
export DISPLAY=<IPアドレス>:0.0
xhost +local:root # rootユーザーのXアクセスを許可
docker start -ai NAME//Dokerの再開
Docker コンテナ内で以下を再実行
python3 -m mujoco.viewer
以下のようなMuJoCo の GUI が表示されれば成功です。
7. 作業終了後のアクセス制限解除
作業が終わったら、アクセス制限を戻しておきましょう
xhost -local:root