前言#
巨軟搞的 WSL 非常好用,然鵝,因為他們用了自定義的 init 啟動,使用 systemd 會報下面的錯誤:
System has not been booted with systemd as init system (PID 1). Can’t operate.
通過 genie 使用 systemd#
genie 通過創建一個 pid 空間來實現在 WSL 上使用 systemd。
genie 基於 .NET Core 3 構建,使用前需要先安裝 .NET Core 運行環境,安裝方法參考微軟的官方文檔。
然後安裝 genie 即可:
curl -s https://packagecloud.io/install/repositories/arkane-systems/wsl-translinux/script.deb.sh | sudo bash
sudo apt install systemd-genie
genie 的使用方法比較簡單:
# 啟動 systemd 環境
genie -i
# 啟動 systemd 環境,並在環境中打開 shell
genie -s
# 啟動 systemd 環境,並在環境中運行命令
genie -c command
開機啟動#
只做上面的配置,還無法完成開機自啟 enabled services,需要繼續配置啟動項。
首先進入 WSL 環境,創建 /etc/init.wsl
文件,內容如下:
#!/bin/bash
/usr/bin/genie -i
然後回到 Windows,Win + R
組合鍵打開運行,輸入 shell:startup
進入啟動目錄。
創建一個 vbs
文件,名稱隨意,內容如下:
Set ws = CreateObject("Wscript.Shell")
ws.run "wsl -d Debian -u root /etc/init.wsl", vbhide
注:參數中的
Debian
需要改成你自己使用的 WSL 發行版名稱。