WSL2でGUI環境が必要となったので、その構築方法を書いておきます。
なぜ、必要になったか
ちょっとお仕事でplateaupyを動かす必要があったのです。
Plateauというのは国土交通省が進めている3D都市モデルの整備プロジェクトで、例えば東京23区の3D都市モデルなんかがオープンデータ化されているのです。plateaupyは、そのPlateauのデータをPythonでパースしたり、3D地図を描画したりするビューアです。
パースするまではWindowsで問題なく動作したのですが、ビューア部分がどうやらXを必要とするようで、Ubuntuを使おうか・・・ということになりました。
素直にUbuntuマシンを準備すれば良かったのですが、どうにか手元のWindows機でやりたくて。それで、最初はVirtualBox上にUbuntuを導入してやってみたのですが、3Dのレンダリングができず頓挫。それで、WSL2を使ってみたらどうだろう・・・と思ったわけです。
ちなみにWSLg
MicrosoftとしてはWSLをどんどん推し進めていて良い感じだし、WSLgを使えばX Windowで動くLinuxのGUIアプリもWindowsで使えるよ!と、尚結構な感じなのですが、残念ながらWSLgはまだInsider ProgramのDevチャネルでしか使えません。仕事でガッツリ使っているLet’s noteで試す気にはなれないので、他の方法を採らねばなりません。
その結果、WSL2で動かしているUbuntu 20.04 LTSをGUI化しようということになったわけです。
WSL2をGUI化
WSL2をGUI化といっても、やることはVPS上のUbuntuをGUI化する方法と何ら変わりません。そりゃそうですね。WSL2上で動作しているUbuntuはCUIだけが動く状態で、VPSなんかで構築したUbuntuの初期状態と同じようなもの。だから、まずX Windowを導入して、RDPサーバを入れれば良いというわけです。あとは、Windows上で「リモートデスクトップ接続」アプリを開いて接続すれば、それでOK。
下記が導入手順です。普段はWSL2にUbuntu(無印・・・Microsoft Store上の)を入れて使っているのですが、今回は別の環境でやりたかったので、別途、Microsoft StoreからUbuntu 20.04 LTSを導入しました。そのため、Ubuntuの最低限の初期設定をやった後からの操作ログです。
まず、apt upgrade
で導入済みパッケージを最新化して、日本語化。
sudo apt update
sudo apt upgrade
sudo apt install language-pack-ja
sudo update-locale LANG=ja_JP.UTF8
ここからX Windowの導入です。デスクトップ環境として軽量なxfce4を使いました。
sudo apt install xfce4 xfce4-goodies
次にRDPサーバを導入します。
sudo apt install xrdp
/etc/xrdp/xrdp.ini
を少し編集します。更新部分のみ記載します。
port=3389 # ポートを変えるなら
max_bpp=128
xserverbpp=128
次に、~/.xsession
ファイルを作成し、下記のようにします。(この1行だけのファイルを作る)
xfce4-session
/etc/xrdp/startwm.sh
を開き、下記のように編集します。
#test -x /etc/X11/Xsession && exec /etc/X11/Xsession ←コメントアウト
#exec /bin/sh /etc/X11/Xsession ←コメントアウト
startxfce4 # ←追記
あとは、下記のようにRDPサーバを起動すればOKです。
WSLなので、常時起動の設定は不要です。(できません)
sudo service xrdp start
ここまでできたら、Windowsのリモートデスクトップ接続アプリを開いて、接続してみましょう。
こんな感じでX Windowの画面が表示されます。
目的であるplateaupyのビューアもちゃんと動きました!(その件はまた別の記事で。)
ちなみに、htop
コマンドを実行してみると、私のLet’s note QVが搭載してるCore i7-10710Uが6コア12スレッドなので、CPUの稼働率バーは12個全部が表示されています。また、メモリは16GB搭載ですがWSL的には12GBと見えているようです。
VirtualBoxのような仮想マシンだと仮想化の処理が入りますし、6コア12スレッドまるまる使うというわけにはいかないので、WSLのメリットが発揮されていると思います。