Windows 11のWSLは、普段使いには向いていない

VMware上のWindows 10をWindows 11にアップグレードできたので、これを機にWSL上のUbuntuGUI環境を調べてみました。

MicrosoftWindows上のLinuxサブシステムであるWSL (Windows Subsystem for Linux )を発表して随分と経ちます。WSLはその後WSL2にアップグレードされ、互換レイヤーではなく本物のLinuxカーネルを走らせることが出来るようになりました。そしてWindows 11のリリースと気を同じくして、LinuxGUI環境を提供するWSLgがリリースされています。

巷では
Windowsこそ最高に便利なLinux環境」
「Windows11の最大の利点はLInuxが自由に使えるようになったこと」
「WSLがあれば初心者はLinuxの勉強をいくらでもできる」
と、称賛の声が飛び交っています。

そこまで言うのなら、と実験環境で試してみました。WSLにはMicrosoftによるものをはじめとして大量の解説が公開されていますのでそれを参考にします。

結果

いじってみた結論ですが「GUI環境のLinuxとしては実用には程遠い」という感想です。LinuxGUI環境をWindowsと共存させたければ、素直にVMを作ってその上でUbuntuのようなディストリビューションを使うことをお勧めします。

WSLは確かによくできています。特にshell環境の完成度は特筆すべきものがあります。しかしながら、普段使いのLinuxと考えると、いくつも難点があります。

  • GUIアプリを使う時に純正Ubuntuディストリビューションと比べると手間が多い
  • GUI環境が不安定で時々スクリーンが起動せず待たされる
  • snap-storeのような基本的な機能ですら躓く

こういったことから考えると、WSLの使用はUbuntuのaptエコシステムで完結するコマンドライン・プログラムだけに絞った方が合理的に思えます。たまにGUIプログラムを作ったときなどに動作確認をしたくなることはありますが、そういった場合はGUIが不安定なWSLよりも、安定して動作するVMを使うほうが余計な時間を取られなくて済むでしょう。

なお、WindowsVMを使うなら、私のお勧めはHyper-VではなくVMware Workstationです。サクサク動きますし表示もきれいで、USBの互換性も高いです。有償版はスナップショットも取り放題で実験が楽ですよ。

snapストアを利用できるようにする

自分用のメモです。以下のコマンドを実行します。1行目は1度だけ実行すればいいですね。3行目は .bashrc に入れておきます。2行目をどうするか実験しきれていません。

sudo apt-get update && sudo apt-get install -yqq daemonize dbus-user-session fontconfig
sudo daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
exec sudo nsenter -t $(pidof systemd) -a su - $LOGNAME

ソースはこちら。snap-storeが動かない、といった厳しい問題が1年半前に報告されていて、まだ閉じていないあたりにWSL上のUbuntuの状況をうかがうことが出来ます。
github.com

GUIのディスプレイをXサーバーにする

DISPLAY環境変数を":0"にすればよい…のですが、localhostへのアクセスがうまくいかないという話がある模様です。このスクリプトは自分自身のIPアドレスを調べてそれを明示的にディスプレイ・サーバーのアドレスとして指定しています。

export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0

こちらを参考にしました。
blog.odaryo.com

おまけ

f:id:suikan:20211029072543p:plain
Bashから起動したWindowsVS Codeで.bashrcを開いている様子
/* -----codeの行番号----- */