WSL Containers で GUI アプリを実行
WSL には WSLg があるので、GUI アプリも使用することが可能です。WSL Container は WSL の名を冠してはいますが、2026年7月時点では WSLg には対応していないようです。
コンテナ内から GUI アプリを使うか? という話もあるかもしれませんが、使い捨てのブラウザ環境だったり、一時的な開発ツールを動作させたりする際に使うこともあるので、何か方法がないか調べてみました。
WSL Container から WSLg は使えない?
WSLg が使える場合、WSL 環境からは /mnt/wslg がマウントされて必要なファイルが提供されます。WSLg が利用可能な WSL だとそのディレクトリが参照できます。
このファイルを使って GUI の機能が提供されるのですが、この /mnt/wslg は自動でマウントされるので、どうやって WSL Container からアクセスするかが不明です。
socat
そこで、TCP でも UNIX ソケットでもいろいろリレーできてしまう、socat というツールを使います。
インストール
socat は WSLg を使用できる WSL 環境にインストールします。手元に debia があったので、今回は debian で試していますが、普通に apt update && apt install -y socat でインストール可能です。
インストールが完了したら、同じ WSL にて 2か所確認をします。1 つは X11 の UNIX SOCKET のパスが /tmp/.X11-unix/X0 で間違いないかどうか。もう1つは WSL の IP アドレスです。IP アドレスは ip addr コマンドなどで確認が可能です。
この場合、IP アドレスは 172.18.113.216 となります。
socat 実行
socat コマンドは、WSL 環境で以下のように実行します。
socat TCP-LISTEN:6000,fork UNIX-CONNECT:/tmp/.X11-unix/X0
これで 6000/tcp で待ち受けて、それを /tmp/.X11-unix/X0 へとリレーする形になります。実行するとフォアグランドで実行されるので、プロンプトは戻ってきませんが、このままターミナルは閉じないようにします。
コンテナ用意 (wslc)
PowerShell やエクスプローラーから Containerfile というファイル名のテキストファイルを作成し、以下の内容を保存します。
FROM debian
RUN apt update
RUN apt install -y firefox-esr firefox-esr-l10n-ja fonts-noto-cjk
PowerShell でこの Containerfile を保存したディレクトリへ移動し、コンテナイメージをビルドします。
wslc build -t fx .
Firefox 実行
ビルドしたイメージを使って Firefox を実行するのですが、環境変数 DISPLAY を設定する必要があります。ここで先ほど WSL の方で確認した IP アドレスを指定して、PowerShell から以下のように実行します。
wslc run --rm -it -e DISPLAY=172.18.113.216:0.0 fx firefox-esr
いくつか WARNING が表示されると思いますが、
無事に Firefox が起動しました。
インターネットへの接続も問題なさそうです。これでコンテナを閉じるたびにきれいにリセットされるブラウザを用意できました。
設定を残したい場合
逆に、設定やブックマークなどを残したい場合は、ブラウザを閉じるたびにリセットだと面倒ですよね。その場合は、
wslc run --rm -it -v .\mozilla:/root/.mozilla -e DISPLAY=172.18.113.216:0.0 fx firefox-esr
と /root/.mozilla をコンテナ外に出しておけば、コンテナを閉じても設定が残る形になります。
まとめ
リレーするために WSL 環境が必要だったり、都度 IP アドレスを確認する必要があったりと、なんだか本末転倒のような気もしますが (そのまま WSL から GUI アプリを使えばいいのでは、と思わなくもない)、こういう方法もあるんだ、という話です。socat 自体はポート転送などにも使えるので、他にも使い道があるかもしれないですしね。