1. Windows11 WSL2 里装 OpenClaw 为什么总卡在 npm 这一步
如果你在 Windows11 上开了 WSL2 Ubuntu,准备装 OpenClaw 玩一玩,结果第一条npm install -g openclaw@latest就给你甩一脸ETIMEDOUT,别急着怀疑人生,这几乎是每个国内开发者的必经之路。OpenClaw 是一个跑在终端里的 AI 编码助手,能读你本地仓库、改文件、跑命令,适合习惯命令行工作流的开发者。它官方推荐在 WSL2 + Ubuntu 下安装,因为原生 Windows 环境跑起来不太稳定,尤其是涉及文件监听和子进程调用的部分。
问题出在哪?npm 默认走的是registry.npmjs.org,这个域名在国内访问经常抽风,包体一大就超时。更麻烦的是,WSL2 的网络默认是 NAT 模式,和 Windows 主机是两套网络栈,你在 Windows 上能正常访问的东西,WSL 里不一定通。再加上sudo npm和普通用户 npm 的全局目录权限混用,装到一半报EACCES也是家常便饭。
我试过在全新 Ubuntu 22.04 上从零走一遍,把踩过的坑按顺序记下来。这篇不是那种“三步搞定”的爽文,而是把 npm 源切换、权限归属、settings 配置错位、WSL 网络联动这几个真实卡点拆开讲,每一步都给可复制的命令和配置文件片段。你跟着做,至少能少走两小时弯路。
核心检索词先摆出来:Windows11 WSL2 Ubuntu 安装 OpenClaw、npm ETIMEDOUT 解决、OpenClaw settings 配置、WSL2 npm registry 切换。这几个词你搜到的多数文章只讲一半,要么只换源不讲权限,要么只讲权限不讲 settings 路径。下面按实际排查顺序展开。
先说清楚适用人群:你已经在 Windows11 上启用了 WSL2,装好了 Ubuntu(20.04 或 22.04 都行),Node.js 版本在 18 以上,准备用 npm 全局装 OpenClaw。如果你还没装 WSL2,先去 Microsoft Store 装 Ubuntu,wsl --set-default-version 2确认版本,这部分不展开。
第一个坑就是网络。很多人以为换了 npm 源就万事大吉,其实 WSL2 的 DNS 和路由在 NAT 模式下有额外一层。你ping registry.npmmirror.com通,不代表 npm 拉 tarball 就稳。后面会讲怎么用.wslconfig开 Mirrored Networking 让 WSL 直接复用 Windows 的网络栈,这一步对后续 OpenClaw 调用外部 API 也有影响。
第二个坑是权限。sudo npm install -g装出来的包归 root,普通用户跑openclaw命令时可能读不到配置目录;不加 sudo 又因为/usr/lib/node_modules没写权限直接EACCES。正确做法是一开始就决定用哪种权限模式,别混着来。
第三个坑是 settings 配置错位。OpenClaw 启动时会读用户目录下的配置文件,如果你用 sudo 装的,配置可能落在/root/.config下,而你在普通用户下跑命令,它读的是~/.config,两边对不上,表现就是“装好了但启动报配置缺失”。这个后面给具体路径和片段。
把这三个坑按顺序解决,OpenClaw 在 WSL2 里跑起来就是顺理成章的事。下面从环境准备开始,一步步来。
2. 装 OpenClaw 前先把 TaoToken 的 Key 和 Base URL 准备好
OpenClaw 本身是个客户端壳子,它需要接一个大模型服务才能干活。你可以把它理解成一个终端里的“遥控器”,真正干活的是背后的模型。所以装 OpenClaw 之前,先把模型服务的接入信息准备好,否则装完了也没法验证是否正常。
这里用 TaoToken 作为模型接入方,它提供 OpenAI 兼容的接口,OpenClaw 配置起来比较直接。你需要拿到两样东西:API Key 和 Base URL。API Key 在控制台的 API Keys 页面生成,Base URL 固定是https://taotoken.net/api,注意这个地址后面不加任何路径后缀,OpenClaw 或 OpenAI SDK 会自己拼/v1/chat/completions这类端点。
生成 Key 的入口在控制台里,点进去新建一个就行。建议给这个 Key 起个能认出来的名字,比如wsl-openclaw,方便以后在多个设备间区分。Key 只显示一次,复制下来先存到安全的地方,别直接贴在聊天窗口里。
模型 ID 这块要注意,OpenClaw 的配置里需要填具体的模型标识。TaoToken 支持的模型列表在文档里有,你按自己需要的选。常见的是 Claude 系列和 GPT 系列,填的时候用文档里给的准确 ID,别自己猜缩写。比如文档里写claude-sonnet-4-5你就填这个,不要写成claude-3.5之类的。
如果你打算长期用 OpenClaw 做编码任务,可以考虑 Coding Plan,它按周期计费,比按量付费更适合高频调用。只是偶尔试试的话,按量付费的 Key 就够了。这个选择不影响安装流程,只是计费方式不同。
拿到 Key 和 Base URL 之后,先别急着装 OpenClaw。在 WSL2 里用 curl 测一下连通性,确认网络层没问题:
curl -s -o /dev/null -w "%{http_code}\n" https://taotoken.net/api/v1/models \ -H "Authorization: Bearer 你的Key"如果返回 200,说明 WSL2 到 TaoToken 的网络是通的,Key 也有效。如果返回 401,检查 Key 有没有复制错;如果超时,先解决 WSL2 的网络问题,别往下走。这一步能帮你把“网络问题”和“配置问题”分开,后面排查会轻松很多。
另外提醒一句,Key 不要写进会提交到 git 的文件里。OpenClaw 的配置文件通常在用户目录下,不在仓库里,但如果你手动改过路径,注意别把 Key 暴露出去。环境变量是个更安全的做法,后面配置片段里会给两种方式。
准备好这些,再进 WSL2 装 OpenClaw,整个流程会顺很多。下面进入实际安装和配置环节。
3. 可复制的 npm registry 与 OpenClaw settings 配置片段
这一节是全文的核心操作区,每一步都给完整命令和文件内容,你直接复制改改就能用。顺序是:先切 npm 源,再决定权限模式装包,最后写 settings 配置文件。
3.1 切换 npm registry 到国内镜像
WSL2 Ubuntu 里默认的 npm 源是https://registry.npmjs.org/,国内拉包经常超时。先确认当前源:
npm config get registry npm config get proxy npm config get https-proxy如果 proxy 和 https-proxy 都是 null,registry 是官方源,那就直接换:
npm config set registry https://registry.npmmirror.com npm config get registry换完之后再装包,速度会明显不一样。注意这里用的是普通用户执行,不要加 sudo,因为 npm 的用户级配置写在~/.npmrc里,sudo 会去读 root 的配置,两边不一致。
如果你之前用 sudo 改过 registry,root 的配置和用户的配置会分家。检查一下:
sudo npm config get registry如果 root 那边还是官方源,要么统一改掉,要么后面装包时确保用的是同一个用户。建议统一用普通用户操作,全局包目录通过 npm 的 prefix 配置改到用户目录下,避免 sudo。
3.2 决定权限模式:推荐用户级全局安装
前面 excerpt 里提到的EACCES报错,根源是/usr/lib/node_modules归 root 所有,普通用户没写权限。有两种解法:一是继续用 sudo,二是把 npm 全局目录改到用户目录下。推荐第二种,干净且不用每次 sudo。
先看当前全局目录:
npm config get prefix如果是/usr或/usr/local,改成用户目录:
mkdir -p ~/.npm-global npm config set prefix ~/.npm-global然后把~/.npm-global/bin加到 PATH 里。编辑~/.bashrc:
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc source ~/.bashrc确认 PATH 生效:
which npm npm config get prefix现在装 OpenClaw 就不需要 sudo 了:
npm install -g openclaw@latest如果你之前已经用 sudo 装过,先卸掉再重装,避免两套目录混在一起:
sudo npm uninstall -g openclaw npm install -g openclaw@latest装完之后确认命令位置:
which openclaw openclaw --version如果which openclaw指向~/.npm-global/bin/openclaw,说明权限模式对了。
3.3 OpenClaw settings 配置文件片段
OpenClaw 启动时会读用户目录下的配置文件。具体路径取决于版本,常见的是~/.config/openclaw/settings.json或~/.openclaw/settings.json。先确认你的版本读哪个路径:
openclaw --help | grep -i config如果没有明确提示,就两个路径都建,内容一致。下面给一份可复制的 JSON 配置,把 Base URL、Key、Model ID 三件套填进去:
{ "provider": "openai-compatible", "baseUrl": "https://taotoken.net/api", "apiKey": "你的Key", "model": "claude-sonnet-4-5", "maxTokens": 8192, "temperature": 0.2 }如果你不想把 Key 写死在文件里,可以用环境变量。先导出:
echo 'export TAOTOKEN_API_KEY=你的Key' >> ~/.bashrc source ~/.bashrc然后配置里引用环境变量(具体语法看 OpenClaw 版本,有的支持${TAOTOKEN_API_KEY}占位):
{ "provider": "openai-compatible", "baseUrl": "https://taotoken.net/api", "apiKeyEnv": "TAOTOKEN_API_KEY", "model": "claude-sonnet-4-5" }注意baseUrl后面不要加/v1,OpenClaw 或底层 SDK 会自己拼。如果你加了/v1,很可能变成/v1/v1/chat/completions,直接 404。这个坑很多人踩。
3.4 WSL2 网络联动配置(可选但推荐)
如果你在 WSL2 里 curl 外部地址不稳定,可以在 Windows 用户目录下建.wslconfig,开启 Mirrored Networking。文件路径是C:\Users\你的用户名\.wslconfig,内容:
[wsl2] networkingMode=mirrored autoProxy=true dnsTunneling=true改完之后在 PowerShell 里执行wsl --shutdown,再重新进 WSL。这样 WSL2 会复用 Windows 的网络栈,代理设置也能自动继承。注意这个配置因 Windows 版本而异,Win11 22H2 以上支持较好,老版本可能不生效。不生效也不影响 npm 换源后的安装,只是网络层多一层保障。
配置写完,下一步就是实际跑起来验证。
4. 验证 OpenClaw 启动与请求是否真正打通
配置写好了不代表能用,得实际跑一次请求,看到模型返回内容才算通。这一节给完整的验证步骤,从命令启动到请求发出,再到结果确认。
4.1 启动 OpenClaw 并检查配置加载
先直接启动:
openclaw如果它进入交互模式,说明二进制没问题。如果报配置文件找不到,检查上一节的路径。可以用 verbose 模式看它读了哪个文件:
openclaw --verbose输出里会打印配置加载路径和解析结果。重点看baseUrl和model有没有被正确读到。如果显示的是默认值而不是你填的,说明配置文件路径不对,或者 JSON 格式有误。用python3 -m json.tool ~/.config/openclaw/settings.json验证 JSON 合法性。
4.2 发一条测试请求
在 OpenClaw 交互模式里输入一句简单的话,比如“用一句话说明你是什么模型”。如果配置正确,它会返回模型生成的内容。如果报错,记下错误码,下一节对照排查。
如果你想在非交互模式下测,可以用管道:
echo "回复 OK 两个字母" | openclaw --non-interactive或者直接用 curl 测底层接口,排除 OpenClaw 本身的干扰:
curl -s https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer 你的Key" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-sonnet-4-5", "messages": [{"role": "user", "content": "回复 OK"}], "max_tokens": 16 }'如果 curl 返回正常 JSON,但 OpenClaw 报错,问题在 OpenClaw 配置;如果 curl 也报错,问题在网络或 Key。这样分层排查效率最高。
4.3 确认成功结果长什么样
成功的响应里会有choices数组,第一个元素的message.content就是模型回复。OpenClaw 交互模式下会直接显示这段文本。如果你看到类似:
OK或者模型对“你是什么模型”的正常回答,说明整条链路通了:WSL2 网络 → npm 装的 OpenClaw → settings 配置 → TaoToken 接口 → 模型返回。
再验证一下文件操作能力(OpenClaw 的核心功能之一)。在交互模式里让它读一个本地文件:
读一下 ~/.bashrc 的前 5 行如果它能正确返回内容,说明工具调用也正常。这一步能确认 OpenClaw 不只是一个聊天壳,而是真的能操作本地环境。
4.4 记录版本和配置快照
验证通过后,把关键信息记下来,方便以后排查:
openclaw --version node --version npm --version npm config get registry npm config get prefix这几条命令的输出贴到一个笔记里。以后换机器或者升级出问题,对照这份快照能快速定位差异。尤其是 npm prefix 和 registry,换环境后最容易变。
验证通过之后,日常使用基本不会有大问题。但如果遇到报错,下一节按错误码对照排查。
5. 安装 OpenClaw 常见报错对照排查
这一节把实际会遇到的报错按类型列出来,每条给原因和解决命令。你遇到哪个直接对号入座。
5.1 npm ETIMEDOUT / network read ETIMEDOUT
完整报错类似:
npm error code ETIMEDOUT npm error syscall read npm error errno -110 npm error network read ETIMEDOUT原因:npm 默认源在国内访问不稳定,或者 WSL2 网络层有问题。解决顺序:先换源,再测连通性。
npm config set registry https://registry.npmmirror.com npm config get registry curl -s -o /dev/null -w "%{http_code}\n" https://registry.npmmirror.com如果 curl 返回 200 但 npm 还是超时,检查 proxy 配置:
npm config get proxy npm config get https-proxy如果这两个不是 null,说明之前设过代理,清掉:
npm config delete proxy npm config delete https-proxyWSL2 网络层的问题用.wslconfig的 mirrored 模式解决,见 3.4 节。
5.2 EACCES permission denied mkdir /usr/lib/node_modules
完整报错:
npm error code EACCES npm error syscall mkdir npm error path /usr/lib/node_modules/openclaw npm error errno -13原因:普通用户对/usr/lib/node_modules没写权限。解决:改 npm prefix 到用户目录,见 3.2 节。如果你已经用 sudo 装过,先卸掉:
sudo npm uninstall -g openclaw npm config set prefix ~/.npm-global npm install -g openclaw@latest注意不要用sudo npm install和普通npm install交替,两套目录会打架。
5.3 401 Unauthorized / invalid api key
报错里出现 401,说明 Key 有问题。检查:
echo $TAOTOKEN_API_KEY如果为空,说明环境变量没生效,重新 source 一下~/.bashrc。如果 Key 有值但还报 401,确认 Key 没有多余空格,以及 Base URL 没有拼错。用 curl 直接测:
curl -s -o /dev/null -w "%{http_code}\n" https://taotoken.net/api/v1/models \ -H "Authorization: Bearer $TAOTOKEN_API_KEY"返回 401 就是 Key 本身的问题,去控制台重新生成一个。
5.4 local proxy failed / connection refused
报错里出现local proxy failed或connection refused,通常是 WSL2 里设了代理但代理没跑起来,或者代理地址在 WSL 里不通。检查环境变量:
env | grep -i proxy如果有http_proxy或https_proxy指向127.0.0.1:某端口,而 WSL2 是 NAT 模式,这个地址在 WSL 里指向的是 WSL 自己,不是 Windows 主机。解决:要么清掉这些变量,要么用 mirrored 模式让网络栈统一。
unset http_proxy https_proxy然后重新测 curl。如果必须用代理,在 mirrored 模式下 Windows 的代理会自动继承,不需要手动设。
5.5 reading choices 相关报错 / 响应解析失败
报错里出现reading 'choices'或cannot read property of undefined,说明 OpenClaw 拿到的响应不是预期的 OpenAI 格式。常见原因:Base URL 多加了/v1,或者模型 ID 填错导致接口返回错误结构。
检查配置里的baseUrl,确保是https://taotoken.net/api,不带/v1。然后用 curl 测同一个模型 ID:
curl -s https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"你的模型ID","messages":[{"role":"user","content":"hi"}],"max_tokens":8}'如果 curl 返回的 JSON 里有choices,说明接口没问题,是 OpenClaw 配置里的模型 ID 或 URL 写错了。对照文档里的准确 ID 改。
5.6 OAuth 相关报错
如果 OpenClaw 版本涉及 OAuth 登录流程,报错里可能出现OAuth字样。这类问题通常是回调地址在 WSL2 里无法被浏览器访问。解决:用设备码模式(如果支持),或者手动把回调 URL 复制到 Windows 浏览器里打开。具体看 OpenClaw 版本的文档。如果你用的是 API Key 模式,不会遇到这个问题。
5.7 装完了但 openclaw 命令找不到
which openclaw返回空,说明~/.npm-global/bin没在 PATH 里。检查:
echo $PATH | grep npm-global如果没有,重新 source~/.bashrc,或者手动加:
export PATH=~/.npm-global/bin:$PATH确认后which openclaw应该能定位到。
排查完这些,基本覆盖了 90% 的安装问题。剩下的多半是版本兼容性,升级 Node.js 到 18 以上通常能解决。
6. 后续怎么用:把 OpenClaw 接进日常编码流
装好只是开始,真正有价值的是把它用起来。OpenClaw 在 WSL2 里跑,能直接访问你的 Linux 文件系统,这意味着它可以读你 clone 下来的仓库、改代码、跑测试命令。配合 TaoToken 的接口,你可以把它当成一个终端里的编码助手。
日常用法上,我习惯在项目根目录启动 OpenClaw,让它先读一遍 README 和目录结构,然后再提具体任务。比如“把这个 Python 脚本里的 requests 调用改成异步”,它会自己找文件、改代码、跑一遍看有没有语法错误。这种工作流比在编辑器里复制粘贴效率高,尤其是处理多个文件的改动时。
如果你要长期高频用,Coding Plan 比按量付费更划算,具体在控制台里能看到套餐选项。只是偶尔用的话,按量付费的 Key 就够了。模型 ID 按任务选,复杂重构用能力强的,简单改动用快的,这个在配置里可以随时换。
接入文档里有更详细的参数说明和示例,遇到配置项不确定的时候去翻一下。模型对话页面可以直接测模型连通性,不用每次都开终端。API Keys 页面管理你的 Key,建议定期轮换。
最后留一个实用技巧:把 OpenClaw 的配置目录纳入你的 dotfiles 管理,换机器时直接同步过去,省得重新配。但 Key 不要进 dotfiles,用环境变量或者单独的 secrets 文件,记得加进.gitignore。这样你在任何一台 Windows11 + WSL2 的机器上,几分钟就能恢复完整环境。