📟
WSL2上のコンテナからWSLgを使用する
WSL2上でDockerコンテナ内からWSLgを使用してGUIアプリケーションを表示するときの手順をまとめました。
コンテナ作成
WSLgをコンテナ内から使用するには、以下のディレクトリをマウントして、環境変数を設定する必要があります。[1]
サーバ | マウント | 環境変数 |
---|---|---|
X11 | /tmp/.X11-unix |
DISPLAY |
Wayland | /mnt/wslg |
WAYLAND_DISPLAY , XDG_RUNTIME_DIR
|
X11アプリケーションはXWaylandで処理されるのでX11/Waylandどちらのアプリケーションも動作します。
WSLgのアーキテクチャ図[2]
以下のコマンドでDockerコンテナを作成します。ベースイメージはubuntu:22.04
とします。
$ docker run -it --name gui \
--mount type=bind,source=/tmp/.X11-unix,target=/tmp/.X11-unix \
--mount type=bind,source=/mnt/wslg,target=/mnt/wslg \
--env DISPLAY=${DISPLAY} --env WAYLAND_DISPLAY=${WAYLAND_DISPLAY} \
--env XDG_RUNTIME_DIR=${XDG_RUNTIME_DIR} \
ubuntu:22.04
動作確認
X11 の動作確認
コンテナ内
# apt install x11-apps
# xeyes
Wayland の動作確認
コンテナ内
# apt install weston
# weston-simple-egl
以下のように表示されます。(weston-simple-egl は三角形が回転してます)
フォント設定
タイトルバーのフォントはコンテナ内から参照されません。
そのため、タイトルバーのみ文字化けが発生することがあります。
gnome-terminal
タイトルバーに「あいうえお」と表示されてほしい
フォントは/mnt/wslg/distro
配下の/usr/share/fonts
フォルダから読み込まれます。[3]
/mnt/wslg/distro
はDockerホストの/
にリンクされているのでDockerホスト側でフォントをインストールする必要があります。
Dockerホスト側
$ sudo apt install fonts-noto-cjk
フォントを読み込ませるために一度WSLを終了する必要があります。
コマンドプロンプト
> wsl --shutdown
ホスト側のフォント設定後
Discussion