# WSL2最新事情(2022-11月時点) ## 著者の立ち位置と前書き 古くはWindowsXPの中古ネットブックを担いでCooperative-Linux(Co-Linux)から、仮想マシン、WSL1, WSL2そのすべてを追いかけて、常にWindows+Linuxの理想を追いかけてきた。当然mingw, msys2もやったがどうにも偽物感が拭えなかった。私はWindowsを捨てたくなかったし、Linuxを諦めたくなかった。かといってLinuxやWindowsについて造詣が深いわけでもない。ただ単に、貧乏性故にPCという限られたリソースを最も効率よく活用したかったのだ。Windowsでゲームもやって、その上で動作する黒画面(端末ソフトでもなんでもいい)がLinuxコマンドを叩けること、それだけを理想としていた。 それ故にWSL1の登場には本当に心が躍った。普通に問題なくWeb開発ができてプロダクトを完成させたし、当時Linuxの深いところを知らない私には、偽物と言えど大した不満はなかった。 WSL2になって、Linuxはいよいよ本物となった。Windows側でXserverを建てればGUIも動いて、ますます満足できるものとなった。 その後しばらく精神的な問題で私は活動を休止していたが、最近になって復活すると、WSLはOSの機能から切り離されMicrosoftStoreアプリと化し、更にはSystemdをPID1として起動することが可能になったというのだ。 これは試さずにいられない。色々と試行錯誤してみると、様々な事実が分かってきた。 ## 最新の環境構築について Storeアプリと化したWSLを入れるにはやはりwingetだろう。一点注意点として、どこかのMS公式ドキュメントには/Windows/System32にある旧WSLがあっても、新WSLが優先されると書かれていたが、アレは真っ赤な嘘だ。気になると人は旧WSLをキレイに始末しておこう。 ID指定だと意味不明な文字列で、あまりにも何やってるか不明なものだったので、名前完全一致で取得 ```cmd winget install --name --exact "Windows Subsystem for Linux Preview" ``` Ubuntu22.04を入れる ```cmd wsl --install Ubuntu-22.04 ``` という方法があるが今は全部アプリストアからの取得に統一してみよう。 ```cmd winget install Canonical.Ubuntu.2204 ``` 11月時点、22.04以外は以下の動作を保証しない。 スタートからUbuntuとでも検索すれば出てくるので、クリック。さて何が変わったのか? - SystemdのPIDが1である - 最初からXサーバーがWindows側に連携されている?ようで、Ubuntu側のブラウザなどを立ち上げることができる。 これらは非常に嬉しい。何も設定しなくとも理想のUbuntuが一瞬で手に入るのだ。 …とはいっても起動時に設定を行いたい人もいて、そうした人はwslを元に起動するだろう。しかし残念なことに、wsl -d Ubuntu-22.04にするとSystemdのPID1は失われる。 ここからは私の一押し端末Alacrittyを前提にする。 ```cmd $ winget install Alacritty.Alacritty ``` 次から必要な設定ファイルを見てみよう。 ## wsl-systemdとnslogin SystemdをPID1にする。結論から言うとこれらを、実行タイミングの合う場所で実行するという事が肝要になる。wsl-systemdは恐らく以下の通りbootタイミングでしか機能せず、その後実行しても何の意味もない。変わって、nsloginはwsl-systemd実行後に実行すればいつでもPIDを1にできるが、ログイン後に実行する必要がある。故に以下のようにbootタイミングで動かせる/etc/wsl.confに記載の上、どのタイミングでも良いが、nsloginを実行すると良い(私はAlacrittyの起動オプションで設定した) /etc/wsl.conf ```conf [boot] command = /usr/libexec/wsl-systemd ``` Alacrittyの起動オプション例 ```yaml shell: program: wsl -u username -d Ubuntu-22.04 -e /usr/bin/bash -c /usr/libexec/nslogin ```