
1. Windows11 WSL2 里装 OpenClaw 为什么总卡在 npm 这一步如果你在 Windows11 上开了 WSL2 Ubuntu准备装 OpenClaw 玩一玩结果第一条npm install -g openclawlatest就给你甩一脸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装好了 Ubuntu20.04 或 22.04 都行Node.js 版本在 18 以上准备用 npm 全局装 OpenClaw。如果你还没装 WSL2先去 Microsoft Store 装 Ubuntuwsl --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 都是 nullregistry 是官方源那就直接换npm config set registry https://registry.npmmirror.com npm config get registry换完之后再装包速度会明显不一样。注意这里用的是普通用户执行不要加 sudo因为 npm 的用户级配置写在~/.npmrc里sudo 会去读 root 的配置两边不一致。如果你之前用 sudo 改过 registryroot 的配置和用户的配置会分家。检查一下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 里。编辑~/.bashrcecho export PATH~/.npm-global/bin:$PATH ~/.bashrc source ~/.bashrc确认 PATH 生效which npm npm config get prefix现在装 OpenClaw 就不需要 sudo 了npm install -g openclawlatest如果你之前已经用 sudo 装过先卸掉再重装避免两套目录混在一起sudo npm uninstall -g openclaw npm install -g openclawlatest装完之后确认命令位置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后面不要加/v1OpenClaw 或底层 SDK 会自己拼。如果你加了/v1很可能变成/v1/v1/chat/completions直接 404。这个坑很多人踩。3.4 WSL2 网络联动配置可选但推荐如果你在 WSL2 里 curl 外部地址不稳定可以在 Windows 用户目录下建.wslconfig开启 Mirrored Networking。文件路径是C:\Users\你的用户名\.wslconfig内容[wsl2] networkingModemirrored autoProxytrue dnsTunnelingtrue改完之后在 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 openclawlatest注意不要用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 测同一个模型 IDcurl -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 的机器上几分钟就能恢复完整环境。