WSL 安装与 systemd 配置
本文适合在 Windows 上使用 WSL2 的开发者和运维用户。你会学到:一条命令安装 WSL2、启用 systemd 并用它管理服务(如 Docker)、通过 .wslconfig 限制资源占用,以及解决 systemctl --user 不可用的排障方法。
现在,可以使用单个命令安装运行 WSL 所需的一切内容。 在管理员模式下打开 PowerShell 或 Windows 命令提示符,输入 wsl --install 命令,然后重启计算机。
wsl --install
这会启用"虚拟机平台"以及"适用于 Linux 的 Windows 子系统"功能,并安装 Ubuntu 为 WSL2 的默认发行版。
重启后系统会自动安装并启动 Ubuntu,我们需要设置用户名及密码。
安装完成后,我们可以在 powershell 里查看 WSL 中发行版的版本。
> wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2
我们可以看到运行的 Ubuntu 已经是 WSL2 版本。
启用 systemd
在 WSL 中修改 /etc/wsl.conf 文件
[boot]
systemd=true
然后在 powershell 中重启 WSL。
wsl.exe --shutdown
重启后可以在 WSL 中进行验证
ps --no-headers -o comm 1
如果返回 systemd 说明启用成功。
我们现在就可以通过 systemd 来管理服务了。例如开机自启动 docker
sudo systemctl enable docker.service
添加用户组
sudo usermod -aG docker $USER
我们还可以通过输入命令来查看 systemd 管理的服务状态。
systemctl list-unit-files --type=service
限制 WSL2 资源占用
WSL2 默认会占用系统一半的内存,我们可以通过配置文件来限制 WSL2 占用的资源。
修改 Windows 用户目录下 .wslconfig 文件,例如
[wsl2]
processors=4
memory=2GB
swap=2GB
限制 WSL2 使用 4 核处理器,2GB 内存以及 2GB 的交换空间。
问题:没有启用 user 级别的 systemd
报错
ateway service runtime ────────────────────────────────────────────╮
│ │
│ QuickStart uses Node for the Gateway service (stable + supported). │
├──────────────────────────────────────────────────────────────────────╯
Error: systemctl is-enabled unavailable: Command failed: systemctl --user is-enabled openclaw-gateway.service
原因
出现此错误的原因通常是因为 WSL2 虽然启用了 systemd(系统级),但没有正确初始化"用户级" (User-level) 的 systemd 实例或 D-Bus 会话。
systemctl --user 命令依赖于 XDG_RUNTIME_DIR 环境变量和用户 D-Bus 服务。在 WSL2 中,这些环境有时不会自动配置。
以下是解决步骤:
步骤 1:开启用户驻留 (Linger)
这是最关键的一步。它允许 systemd 用户实例在用户没有登录时也能运行,并自动创建必要的运行时目录。
在 WSL2 终端执行:
sudo loginctl enable-linger $(whoami)
步骤 2:配置环境变量
你需要手动指向用户运行目录。将以下内容添加到你的 ~/.bashrc(或 ~/.zshrc)文件中:
# 在终端执行以下命令
echo 'export XDG_RUNTIME_DIR=/run/user/$(id -u)' >> ~/.bashrc
source ~/.bashrc
步骤 3:验证用户服务状态
执行以下命令确认用户级 systemd 是否已就绪:
systemctl --user status
- 正常结果:显示 State: running 且没有错误。
- 如果报错 “Failed to connect to bus”:请确保你没有使用 sudo 运行此命令。systemctl –user 严禁使用 sudo。
步骤 4:重新安装 OpenClaw Gateway 服务
由于之前的安装因为检测失败而中断,现在请强制重新安装:
# 强制覆盖安装
openclaw gateway install --force
# 或者使用修复工具
openclaw doctor --repair
验证与自查
ps --no-headers -o comm 1返回systemd,说明 WSL2 系统级 systemd 已启用systemctl --user status显示State: running,说明用户级 systemd 正常free -h中内存总量约为.wslconfig中配置的memory值sudo systemctl enable docker.service后,重启 WSL(wsl.exe --shutdown)Docker 自动运行