Windows 11 起動時に WSL も起動させておく VBScript

ココまで設定したのだが、どうも WSL というのは Windows 起動時には立ち上がっていないようで、マシンを起動しただけでは WSL 環境への SSH 接続ができなかった。一度 Windows Terminal なんかを開いて、WSL Ubuntu のプロンプトを目視してあげれば、以降は SSH 接続ができた。

というワケで、マシン起動時に WSL を起動させるためのスクリプトを VBScript で組んだ。こうなった経緯を書いておく。


軽く調べてみると、PS> wsl -d Ubuntu --exec /bin/true という風に /bin/true を実行すれば WSL を起動できます、という文献が見つかるのだが、コレは実はうまく行かない。

実際、コマンドによって一瞬 WSL は起動する。PS> wsl -l -v で確認すれば Running にはなるのだが、数分放置しているとすぐに Stopped になってしまうのだ。

そこで実行すべきコマンドを調べ直すと、/bin/true ではなく sleep infinity を実行し続けるのが良いらしい。

コレさえ実行できればいいので、最初はタスクスケジューラで設定してみたのだが、PowerShell や Windows Terminal のウィンドウが開きっぱなしになる問題が避けられなかった。

というワケで、PowerShell を想定してコマンドを直接叩くのではなく、余計なウィンドウが出ないようにするため VBScript を経由することにした。

CreateObject("WScript.Shell").Run "C:\Windows\System32\wsl.exe -d Ubuntu --exec sleep infinity", 0, False

このような1行の .vbs ファイルを作ってコレを実行することで、完全ウィンドウ非表示にできる。

この .vbs ファイルをスタートアップに入れるだけにして、タスクスケジューラは使わない運用にして解消できた。

マシン起動後、スタートアップから呼ばれた .vbs ファイルによって、裏では VBScript 経由で sleep infinity が実行されっぱなしになっているはず。

試しに WSL のプロンプトを開かないように注意しながら PowerShell のウィンドウを起動して、以下のようなコマンドで直接 WSL 環境を確認してみると良い。

# WSL 内の SSH と cloudflared が起動しているか確認する
PS> wsl -d Ubuntu -- systemctl is-active ssh cloudflared

自分はコレで上手く行った。