巨硬搞的 WSL 非常好用,然鹅,因为他们用了自定义的 init 启动,使用 systemd 会报下面的错误:
System has not been booted with systemd as init system (PID 1). Can’t operate.
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 发行版名称。