少し前に、WSL2でLinuxのGUIアプリを利用できるようにするという記事を見ました。最近のMicrosoftの動きは柔軟というか開発者にやさしいというか、見ていてとても好ましい感じです。
WindowsでLinux GUIアプリを使う方法は以前からありました。WSLの登場以降は本当に簡単になり、私でもさらっと構築できました。
今後、WSL2で正式にGUIアプリをサポートするようになったときどのような形で実現するのかまだ詳しくはわかりませんが、今回はWSL2でGUIアプリを起動し、Windows上で稼働できるX410というX Serverを経由してデスクトップにレンダリングする。というやり方を試してみようと思います。
X410以外にもWindowsで稼働できるX Serverは他にもあります。WSL2とX410の連携は一般的なLAN環境を介して行うものなので他のX Serverでもほとんど同じやり方で構築できると思います。
WSL2とX410を連携させる方法はX410の公式クックブックで説明されています。
X410の設定
X410はサードパーティのXサーバアプリで、Microsoft Storeで購入できます。(たまに商店街にある店のようにずっと割引してます。私が買ったときは税込み580円でした。)
インストールしたらX410を起動してください。起動できたらタスクバーのX410アイコンを右クリックしてAllow Public Accessを設定します。
あとは必要に応じてファイアウォールの開放を行ってください。ファイアウォールの設定は使っているソフトウェアによって変わるのでここでは説明しません。X410の公式クックブックにWindows Defender Firewallの設定方法が説明されているので参考になると思います。
Linuxディストリビューションの設定
Linuxディストリビューション(以降はdistro)は任意のもので構いませんが、WSL2としてインストールしてください。v1からv2への変換も簡単にできます。
インストールされているdistroのバージョンは wsl -l -v
コマンドで確認できます。
変換は --set-version
オプションで行います。詳しくはヘルプを見てください。
今回は、Ubuntuを使います
まずは、distroに使いたいGUIアプリをインストールします。今回は nemo
を使おうと思います。
sudo apt install -y nemo
次に、GUIアプリが利用するX Serverのディスプレイの設定を行います。
ここでいうディスプレイはWindows上で稼働するX410が作り出す仮想スクリーンのことですが、アクセスはネットワークを介して行います。設定は以下のコマンドで出来ます。
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0.0
DISPLAY
という環境変数は<host>:<display>.<screen>
という形式で指定します。 <host>
はIPアドレスを指定するのですが、WSLの仮想ネットワークのIPアドレスは変わる可能性があるので、少し工夫が必要です。この辺りは公式クックブックで説明されています。
これで基本的な設定は完了です。
後は、コマンドラインでGUIアプリを実行すればデスクトップにレンダリングされるはずです。
ちょっと試したいとか、たまにしか使わないということなら毎回 export コマンドを実行すればよいのですが、よく使うということなら .bashrc
や .profile
に追記してもいいと思います。
ダブルクリックで実行できるようにする
コマンドで毎回実行するのは面倒なので、ダブルクリックで実行できるようにします。
方法は2通りあります。batファイルを使う方法とショートカットを使う方法。どちらでも構いません。
batファイルを使う方法
batファイルを以下の内容で作成します。 distro
には使うLinuxディストリビューション名を cmd
にはGUIアプリを起動するコマンドを指定します。これでbatファイルをダブルクリックするだけで実行できます。
set distro=Ubuntu
set cmd=nemo
wsl -d %distro% -- export DISPLAY="$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0.0"; %cmd%
この方法の利点は、わかりやすさだと思います。複数行に分けたり適宜コメントを書いたりできるので後から見たときにも理解しやすいです。
ショートカットを使う方法
デスクトップ等で右クリックのメニューからショートカット作成ウィザードを呼び出します。
項目の場所を入力してください に以下のコマンドを入力します。
cmd /c wsl -d Ubuntu-18.04 -- export DISPLAY="$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0.0"; nemo
先頭のcmd /c
がポイントです。それ以降はbatファイルを使う方法で説明したコマンドをワンライナーにしたものです。
後は任意の名前を付けて作成を完了します。これでショートカットをダブルクリックすれば実行できるはずです。
この方法の利点は、アイコンを変更できたり、スタートメニューに登録できることです。私はよく使うアプリはスタートメニューにピン止めしているのでこっちのほうが好みです。
batファイルのショートカットを作成することはできるので2つの方法を組み合わせることは可能です。個人的にファイルが増えるのは好みじゃないのでショートカットだけで使っています。
最後に
これでLinux GUIアプリが使いやすくなりました。
それほど使う機会はないかもしれませんが、Unix系でしか提供されていないクライアントアプリなどもたまにあるのでそういう時に試してみるといいかもしれません。
まあ、公式にLinux GUIがサポートされるようになったらもっと簡単にできるようになるとは思うので、ちょっとの間ですけどね。