OpenClaw 官方文档 建议通过WSL2(推荐Ubuntu)在Windows上使用。CLI + Gateway在Linux内运行,这样可以保持了运行时的一致性,并使工具能够兼容(Node/Bun/pnpm,Linux二进制文件,技能)。原生Windows可能遇到一些棘手的情况。WSL2为您提供完整的Linux体验------一个安装命令:wsl --install。
截止发文日,原生Windows配套应用程序还在计划中。
当让,你最好对计算机,特别是 Ubuntu 有一定了解再尝试通过wsl安装。
这在调用本机浏览器时也比较麻烦。
1. Install (WSL2)
1.1安装发行版
如果你已经安装,可以忽略这一步
ps
wsl --install
此命令将启用运行WSL和安装Linux的Ubuntu发行版所需的功能。
参考文档 Install WSL| Microsoft Learn.
安装完毕之后,打开 ubuntu,你需要为新的发行版设定用户名和密码。
如果太久不用,密码忘记了
通过下面命令, 换成你要重置密码的发行版名称。
sh
wsl -d <DistroName> -u root
登陆之后,重置 的密码。
sh
passwd <username>
1.2启动 systemd
sh
sudo tee /etc/wsl.conf >/dev/null <<'EOF'
[boot]
systemd=true
EOF
1.3 重启 wsl
在 Powershell中
sh
wsl --shutdown
重新进入wsl
sh
systemctl --user status
2. 安装 OpenClaw
sh
curl -fsSL https://openclaw.ai/install.sh | bash
3. 安装为服务
sh
openclaw onboard --install-daemon
检查服务状态
sh
openclaw gateway status
4. 配置在 Windows 登录前自动启动
可选,如果你想让这个服务在登录电脑之前就能用,服务器比较需要这个功能。
在 wsl 中运行
sh
sudo loginctl enable-linger "$(whoami)"
openclaw gateway install
在 Windows Powershell中执行
将下面命令中的换成你的发行版。
sh
schtasks /create /tn "WSL Boot" /tr "wsl.exe -d <DistroName> --exec /bin/true" /sc onstart /ru SYSTEM
检查登录前启动是否配置成功
在wsl中运行
sh
systemctl --user is-enabled openclaw-gateway
systemctl --user status openclaw-gateway --no-pager
5. 将wsl中的服务暴露给外部网络
还是服务器需要的功能。
WSL有自己的虚拟网络。如果另一台机器需要访问在WSL内运行的服务(SSH、本地TTS服务器或网关),您必须将Windows端口转发到当前的WSL IP。WSL IP在重新启动后会发生变化,因此您可能需要刷新转发规则。
添加映射
用管理员模式启动 Powershell:
sh
$Distro = "Ubuntu-24.04"
$ListenPort = 18000
$TargetPort = 18789
$WslIp = (wsl -d $Distro -- hostname -I).Trim().Split(" ")[0]
if (-not $WslIp) { throw "WSL IP not found." }
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=$ListenPort `
connectaddress=$WslIp connectport=$TargetPort
添加防火墙允许规则
只需要开一次
sh
New-NetFirewallRule -DisplayName "WSL SSH $ListenPort" -Direction Inbound `
-Protocol TCP -LocalPort $ListenPort -Action Allow
在WSL重启后,刷新端口代理
sh
netsh interface portproxy delete v4tov4 listenport=$ListenPort listenaddress=0.0.0.0 | Out-Null
netsh interface portproxy add v4tov4 listenport=$ListenPort listenaddress=0.0.0.0 `
connectaddress=$WslIp connectport=$TargetPort | Out-Null