WSL2をGUIで使う(WSLgまでのつなぎ)

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のメリットが発揮されていると思います。

この記事を書いた人

井上 研一

株式会社ビビンコ代表取締役、ITエンジニア/経済産業省推進資格ITコーディネータ。AI・IoTに強いITコーディネータとして活動。2018年、株式会社ビビンコを北九州市に創業。IoTソリューションの開発・導入や、画像認識モデルを活用したアプリの開発などを行っている。近著に「使ってわかった AWSのAI」、「ワトソンで体感する人工知能」。日本全国でセミナー・研修講師としての登壇も多数。