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

验证与自查

  1. ps --no-headers -o comm 1 返回 systemd,说明 WSL2 系统级 systemd 已启用
  2. systemctl --user status 显示 State: running,说明用户级 systemd 正常
  3. free -h 中内存总量约为 .wslconfig 中配置的 memory
  4. sudo systemctl enable docker.service 后,重启 WSL(wsl.exe --shutdown)Docker 自动运行

参考