原本的需求是用 mac 通过 ssh 远程连接 windows 主机上的 wsl2,主要参考了這個教程,調試的時候發現問題關鍵是讓 wsl2 保持後台運行,一旦 wsl2 instance 被停止,就無法連接上了。
Windows powershell 可以通過 wsl -l -v
查看所有的 wsl 發行版的狀態。
最後的解決方案參考了這裡,即運行
wsl --exec dbus-launch true
經過實測是有效。順帶一提,退出某個 wsl instance 之後,可以設置一個停止 instance 的 idle time,默認值為 60s,不過滿足我們的需求不需要修改它了,用上面那個命令就行。
這條命令大概是在 wsl 中運行 dbus-launch true
,dbus-launch
是 D-Bus 的一個輔助工具,用於啟動一個 D-Bus 進程並返回環境變量。根據 ChatGPT 的說法,D-Bus 的某些守護進程會保持 WSL 運行。
為了避免每次手動輸入命令,可以考慮將其創建為一個 Windows 任務計劃程序。可以通過 Win+R 輸入 taskschd.msc
以圖形化的方式設置,也可以用更方便的一條命令設置。以管理員身份打開 powershell,並運行:
schtasks /create /tn "AutoStartWSL" /tr "wsl --exec dbus-launch true" /sc ONLOGON /RL HIGHEST /F
大致含義是創建一個任務計劃,在啟動的時候運行上面那條命令。
可以用
Get-ScheduledTask -TaskName "AutoStartWSL"
檢查任務是否成功創建。手動運行任務:
Start-ScheduledTask -TaskName "AutoStartWSL"