原本の要求は、mac を使用して ssh 経由で Windows ホスト上の wsl2 にリモート接続することです。主にこのチュートリアルを参考にしましたが、デバッグ中に問題の鍵はwsl2 をバックグラウンドで実行し続けることであることがわかりました。一度 wsl2 インスタンスが停止すると、接続できなくなります。
Windows PowerShell では、wsl -l -v
を使用してすべての wsl ディストリビューションの状態を確認できます。
最終的な解決策はこちらを参考にしており、次のコマンドを実行します。
wsl --exec dbus-launch true
実際にテストしたところ、効果がありました。ちなみに、特定の wsl インスタンスを終了した後、インスタンスを停止するアイドルタイムを設定できます。デフォルト値は 60 秒ですが、私たちのニーズには変更する必要はなく、上記のコマンドを使用するだけで大丈夫です。
このコマンドは、wsl 内でdbus-launch true
を実行していると思われます。dbus-launch
は D-Bus の補助ツールで、D-Bus プロセスを起動し、環境変数を返します。ChatGPT によれば、D-Bus のいくつかのデーモンが WSL を実行し続けるとのことです。
毎回手動でコマンドを入力するのを避けるために、これを Windows タスクスケジューラとして作成することを検討できます。Win+R を押してtaskschd.msc
と入力することで、グラフィカルに設定することもできますし、より便利な 1 つのコマンドで設定することもできます。管理者として PowerShell を開き、次のコマンドを実行します。
schtasks /create /tn "AutoStartWSL" /tr "wsl --exec dbus-launch true" /sc ONLOGON /RL HIGHEST /F
大まかな意味は、起動時に上記のコマンドを実行するタスクスケジュールを作成することです。
次のコマンドでタスクが正常に作成されたかどうかを確認できます。
Get-ScheduledTask -TaskName "AutoStartWSL"
タスクを手動で実行するには:
Start-ScheduledTask -TaskName "AutoStartWSL"