前回はWSL2で導入したUbuntuにLAN上のPCから接続する方法を紹介しました。
ここまで来るとWSL2上で動いているとはいえ普通のLinuxと変わりなく感じてきます。そこでUbuntu(WSL2)が自動的に起動するようにしてしまいましょう。
常に動かしておけば、少々メモリは消費しますが、サーバーのように利用できます。
WSL2の自動終了
WSLのLinuxは立ち上げても何もしていないと勝手に終了してしまいます。
一方、WSL2の設定ファイル「.wslconfig」には「vmIdleTimeout」という設定項目があります。

公式サイトでは
VMがアイドル状態になってからシャットダウンされるまでのミリ秒数。 Windows 11 でのみ使用できます。
と説明されています。
デフォルト値は「60000」なので、アイドル状態が60秒つづくと自動的に終了するということかと思い、この値を変えて試してみたのですが、自動終了する時間に変化はないようです。
WSL2のLinuxをサーバのように動かしておきたい場合は、この自動終了は避けなければいけません。
問題は「アイドル状態」というのは何を指しているのか、よくわからないことです。
いろいろ試したところ、
- WSL2のLinuxのシェルが起動している(Windows Terminalなどでシェルを起動している) → 自動的に終了しない (アイドル状態ではない)
- wslコマンドで適当なLinuxコマンド(lsやecho等のコマンド)を実行する → 自動的に終了する (コマンド実行後はアイドル状態)
- systemdでSSHサーバを起動する状態にしてSSHで接続する(Windows terminalなどのシェルは閉じる) → 自動的に終了する (アイドル状態)
という挙動でした。
3番目の挙動はSSHサーバを有効にするという記事でも言及したものです。

SSHサーバが起動していてクライアントが接続していればアイドル状態ではないと思ったのですが、そうではないようです。
以前はwslコマンドを使って何らかのデーモンを起動すると、WSL2が自動的に終了しないという挙動だったのですが、最近のWSL2ではこの手も使えないようです。
確証はありませんが、WSL2がsystemdに対応したことと関係している気がします。
さらに調べてみたところwslコマンドが実行中ならWSL2が自動終了しないことに気づきました。
そこで、Windows起動時にwslコマンドで永久に終わらない処理を実行させれば、バックグラウンドでWSLのLinuxを起動し続けることができ、サーバのように利用できることになります。
WSL2の自動起動の設定
WSL2が自動的に終了する条件がなんとなくわかったところで、WSL2のLinuxを自動起動させる設定をします。
やることはタスクスケジューラでWindowsの起動時にwslコマンドを実行するようにすることです。
まず、スタートメニューで「タスクスケジューラ」と入力してタスクスケジューラを実行します。
タスクスケジューラが起動したら、左側のペインで「タスクスケジューラライブラリ」を選択し、右側のペインで「タスクの作成」を選択します。これでタスクの作成画面の「全般タブ」が表示されます。
この画面では下記の設定をします。
- 名前: 何でも良いのですがわかりやすい名前をつけておきます。今回は「Start WSL2」としました。
- ユーザがログインしているかどうかにかかわらず実行する: Windowsの起動時に自動実行するためにこれを選択します。
- 最上位の特権で実行する: いらないような気もしますが念の為チェックしておきます。
つづいて「トリガー」タブを選択します。
トリガータブでは「新規」を選んで、「タスクの開始」を「スタートアップ時」にして新しいトリガーを作成します。
次に「操作」タブを選択します。
操作タブでは「新規」を選んで、
- 操作: プログラムの開始
- プログラム/スクリプト:「wsl」
- 引数の追加:「–distribution Ubuntu –exec bash -c “sleep infinity”」
として新しい操作を作成します。
「引数の追加」の「Ubuntu」の部分は、起動したいディストリビューションの名前にしてください。
次に「条件」タブを選択します。
条件タブでは、「コンピューターをAC電源で使用している場合のみにタスクを開始する」をオフにします。
最後に「設定」タブを選択します。
設定タブでは「タスクを停止するまでの時間」と「要求時に実行中のタスクが終了しない場合、タスクを強制的に停止する」をオフにします。
以上の設定が終わったら「OK」を選択します。
このとき次のようなウィンドウが表示されたら、Windowsの管理者ユーザのユーザ名とパスワードを入力しましょう。
これで設定完了です。
Windowsを再起動しましょう。再起動後にWindowsTerminalを起動して、wslコマンドで状態を確認し、「Running」と表示されていれば成功です。
> wsl --list -v
NAME STATE VERSION
* Ubuntu Running 2
これでバックグラウンドでWSL2のLinuxが動いているのでいつでもSSHやリモートデスクトップで接続できます。
まとめ
今回はWSL2で導入したUbuntuをWindowsの起動に合わせて自動実行する設定を紹介しました。
WSL2のLinuxを自動的に立ち上がるようにしておくと、SSHやリモートデスクトップでいつでも接続することができ、あたかもLinuxサーバが起動しているように使うことができます。
コメント