WSL2上のコンテナ環境で、WSLgを使う方法
Table of Contents
Windowsで開発をする人であれば、結構な人がお世話になっているのではないか、WSL。さらにWSLgというGUI表示ツールを使うことで、WSL内のコンテナ内でGUIを使える。
graph TD Windows --> WSL --> Container
この環境でGUIを使いたい。その方法を確立した......というか発見したので、メモメモ。
結論
Containerizing GUI applications with WSLgを見ろー!
こちら、Microsoftの公式のWSLgのサンプル。これにしたがってコンテナを作成すればok。
とはいえ元記事が英語なので、内容をかいつまんで非公式なんちゃって和訳をする。
日本語解説(非公式)
各種GUIサーバに接続
コンテナ上で起動しているGUIを、Windows上で表示させるには、WSLgが提供しているGUI系のサーバに接続する必要がある。
それには
- 適切なディレクトリのマウント
- 環境変数の設定
が必要。具体的にはさっきのWSLgのサンプル内のContainerized GUI applications connecting to X11, Wayland or Pulse serverの章をよく見る。
まずマウント対象のファイルは、
サーバ | マウントポイント |
---|---|
X11 | /tmp/.X11-unix |
Wayland | /mnt/wslg |
PulseAudio | /mnt/wslg |
という表がある。そして、環境変数は
サーバ | 環境変数 |
---|---|
X11 | DISPLAY |
Wayland | WAYLAND_DISPLAY && XDG_RUNTIME_DIR |
PulseAudio | PULSE_SERVER |
となっている。どれもコンテナ作成時に、WSL環境からコンテナに手渡ししてあげる必要がある。わかってしまえば簡単。これでX Server
とWayland
で動いているGUIに関しては、基本的には実行できるぜ。やったね。
設定方法やらなんやらは、Containerizing GUI applications with WSLgに詳しく書いてあるからそれをみよう。あとはdockerやらpodmanやらの使い方だから。本当はdocker-compose.yaml
とかにしたほうがいいんだろう。けれど私はpodman使っていて、composeの書き方もよくわからんので、フツーにCLIで叩いている。
# [Containerizing GUI applications with WSLg]から引用して、podman用に改変
こんなイメージ。あとはコンテナ必要なポートとかも、追加で設定すればok
こんな風にTauri
の画面を召喚したりできる。
所感
WSLこれは便利。WSLgのおかげでわりとGUIもいけるから、重宝している。ただこのGUI表示は、やや内容がこちゃついているから毎回忘れるので、今回の記事は備忘録も兼ねている。
一度、大学の授業でROS
というロボット開発系の環境を構築したことがあったのだが、そのときにメチャクチャGUI周り苦戦した。
もっとWSLとかの中身を、知っていればいいんだろうけどね。そうすれば毎回公式を思い出す方式じゃなくて、公式を導出する方式にできるから。
ちなみにそういう「WSLの中身」が気になる人は、ここが変だよ「WSL2」 自作ディストロ開発で発見した知られざる“バグ”と“事実”が面白いかも。
参考
- Containerizing GUI applications with WSLg (Microsoft) : https://github.com/microsoft/wslg/blob/main/samples/container/Containers.md
- ここが変だよ「WSL2」 自作ディストロ開発で発見した知られざる“バグ”と“事実” (佐伯学哉): https://logmi.jp/main/technology/326106