【WSL】WSL上でGUIアプリを動かす

こんにちは、しきゆらです。
今回は、タイトル通りWSL上でGUIアプリを動かせるように環境を作っていきます。

作業としては、WSL側はもちろんですがWin側にも準備が必要になっています。
なお、イメージとしてはWin側がサーバとなり、WSL上のアプリとやり取りしてGUIを表示する感じになります。


Win側の準備

Win側には、X Serverを入れて簡単な設定をしてあげます。
まずは、X Serverをダウンロードしてインストールしましょう。
ここでは、VcXsrvを使います。
https://sourceforge.net/projects/vcxsrv/
上記URLから最新版を起動し、流れに沿ってインストールしていきます。

インストール後、起動すると以下のような画面が表示されます。

初期に選択されている「Multiple windows」にチェックを入れ次へ。

次はデフォルトのまま「Start no client」を選び次へ。

「Extra settings」では「Additional parameters for VcXsrv」に「-ac」と入力し次へ。

これにて設定は完了。
ここで設定したものを再度使うことを考えて「Save configuration」から保存してあげると便利です。
次回以降、起動するときは保存したファイルをダブルクリックで起動するだけでよくなります。

Win側の準備はおしまいです。
次はWSL側の準備をしていきます。

WSL側の設定

ここではUbuntu20.04上で作業していることを前提としています。
それ以外の環境では、適宜読み替えてください。

必要となるパッケージのインストール

以下のコマンドを実行してインストールしましょう。
sudo apt install libgl1-mesa-dev xorg-dev
大量のパッケージが依存しているので、完了するまでまったり待ちましょう。

X Serverの向き先を設定

WSLから見てサーバにあたるWin側のIPアドレスを指定してあげる。
・・・ということだが、WSLから見たWinのIPアドレスはどうやら毎回変わるようです。
しかし、それを何とかする方法がMSのリポジトリ内にあったので、それをありがたく参照して設定します。
https://github.com/microsoft/WSL/issues/4106

設定するファイルは、.zshrcや.bashrcなどシェル起動時に読み込まれるものに書いてあげればOK。
以下の設定を書き込む。
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0

なお、最後の「0.0」の部分は環境によって異なるようだ。
WinのタスクトレイにあるVcXsrvのアイコンにマウスを持っていくと文字が出るので、その末尾の「x.y」を書いてあげればよい。

これにてWSL側の設定も完了である。

確認

何かWSL側でGUIアプリを動かして、表示できるか確認してみましょう。
入っていればなんでもいいですが、入っていない場合は以下のコマンドでサンプルアプリを入れておきましょう。
sudo apt install x11-apps

インストール出来たら、以下のコマンドで実行します。
xeyes
これで、目のアプリが起動すれば成功です。

マウスの位置を目で追ってくれます。
かわいい。

まとめ

今回は、WSL上でGUIアプリを動かせるように設定しました。
これでたいていのことはWSL上でできるようになったかと思います。

それでは、今回はここまで。
おわり