在 wsl2 中啟用 systemd 的方法至少有如下三種:
本文主要介紹第三種方法,並在後文介紹選用第三種方法的優勢。
安裝方法#
安裝分為兩個選項:
- 安裝一個新的帶有 systemd 的發行版
- 為現有的發行版增加 systemd 支持
以下分別介紹。
安裝一個新的帶有 systemd 的發行版#
-
下載並解壓縮 distrod_wsl_launcher,執行解壓縮出的二進制文件
-
跟隨引導安裝一個新的發行版
-
[可選項] 使用如下命令使你的發行版在 Windows 啟動時自動運行:
sudo /opt/distrod/bin/distrod enable --start-on-windows-boot
為現有的發行版增加 systemd 支持#
-
下載並執行最新的安裝腳本:
curl -L -O "https://raw.githubusercontent.com/nullpo-head/wsl-distrod/main/install.sh" chmod +x install.sh sudo ./install.sh install
-
在你的發行版中開啟 distrod
有兩個選擇:
-
在 Windows 啟動時運行你的發行版:
/opt/distrod/bin/distrod enable --start-on-windows-boot
-
否則:
/opt/distrod/bin/distrod enable
注:接下來仍然可以通過執行
/opt/distrod/bin/distrod enable --start-on-windows-boot
讓發行版跟隨 Windows 啟動。
-
-
重新啟動你的發行版
關掉你的 WSL 窗口,在 PowerShell 中執行如下命令:
wsl --shutdown
接下來重新打開一個新的 WSL 窗口,你的 shell 將在 systemd 會話中運行。
與其他方法的對比#
在官方文檔中,Distrod 描述了其工作原理:
簡而言之,Distrod 是一個二進制文件,它會創建一個簡單的容器,將 systemd 作為 init 進程,並在該容器中啟動您的 WSL 會話。為了做到這一點,Distrod 做了以下事情:
- 修改具體發行版的 rootfs,以使其與 WSL 和 systemd 兼容。
- 修改 systemd 服務,使其與 WSL 兼容。
- 把
/opt/distrod/bin/distrod
和其他資源放進 rootfs。- 把 Distrod 二進制文件註冊為登錄 shell。
- 當 Distrod 作為登錄 shell 被 WSL 的 init 進程啟動時,Distrod:
- 在簡單的容器中啟動 systemd
- 在這個容器中啟動你實際的 shell
- 在 systemd 會話和 WSL 交互環境間建立橋梁。
事實上 Distrod 和 genie、subsystemctl 的工作原理是類似的:創建一個容器,在容器內以 pid 1 啟動 systemd 並使用 shell。在其官方文檔中也有提過:
把 Distrod 作為一個獨立的一次性命令:在這種情況下, distrod 的工作方式就像 genie 和 subsystemctl。
但是,Distrod 在自啟動方面做了更多的工作。通過上述操作,Distrod 做到了:
- 安裝並啟用後,啟動 WSL 會自動啟動 systmed。
- 添加
--start-on-windows-boot
參數後,Distrod 會註冊一個 Windows 任務,使得 WSL 在 Windows 開機時就會運行。
對比其他方法需要手動編寫 shell 腳本實現自動啟動,安裝更簡單、使用更方便的 Distrod 無疑更受用戶青睞。
結語#
在安裝、使用過程中遇到任何問題,可以參考官方資料。
文章中發現任何錯誤歡迎在評論區指出!~