配置WSL环境
主要用于隔离环境(防止误删文件和读取隐私),多开(方便重新配置新的环境)和不使用powershell这个坑
但是WSL所有发行版共享同一个 IP 和同一个网络栈,同时多开实例需要注意端口冲突。
一、添加实例
推荐使用 Ubuntu 24.04 ,比较稳定,其它随意,我这里起名 Zero , 寓意最初的环境
二、隔离环境
因为 WSL 并不是与 Window 宿主机完全隔离的,我们还需要一些配置来单方面隔离 WSL ,使其无法在文件系统上操作 Window 宿主机的文件,网络方面我们还是让其互通,方便 MCP 等
GUI操作
先点击右边按钮展开。
再点击右边按钮配置。
把 自动挂载磁盘,处理/etc/fstab,启用 Windows 交互,追加 Windows 路径 ,四个默认勾选全部取消掉,然后点击保存并重启发行版。
最终配置如下
或者文件操作
打开文件管理器
进入etc
打开wsl.conf编辑
添加
[automount]
enabled = false
mountFsTab = false
[interop]
enabled = false
appendWindowsPath = false
使用 PowerShell 重启
wsl --shutdown
需要注意的是笔者实测的时候有 BUG ,当 automount.enabled = false 和 mountFsTab = false 同时关闭就无法使用 Windows 的文件管理器浏览 \\wsl.localhost,经过搜索是一个 WSL1 历史遗留问题 Plan9 file server is never started on WSL2 when both automount.enabled and automount.mountFsTab are false, making \wsl.localhost inaccessible. 已经在 7月15日 修复。
目前 2026.9.15 的2.9.8预览版本已经修复这个问题,之前的版本应该都有这个问题,可以通过 wsl --version 查看自身版本遇到这个问题需要更新,使用wsl --update或者wsl --update --pre-release
但是如果你开启了 WSLg ,有可能出现"无法加载远程桌面服务ActiveX控件。请确保rdclientax.dll 在路径中。" 这个报错,这时候如果你还是想使用 WSLg ,目前只能回退到 2.7.10 ,这个问题暂时没看到解决办法。GUI 在 Windows 10 ltsc 2021 x64 19044.1288 上无法运行
现在有了 Releases · WslzGmzs/WSL-2.7.10-plan9-fix,两个我都要好吧。目前用着没什么问题,有问题再说吧。用法的话可以用安装包直接覆盖安装试试,我没测试过安装包(实测WSL Settings会没有打包,建议用下面的方法),我是安装官方的2.7.10,然后直接把C:\Program Files\WSL\tools文件夹下的init,initrd.img两个二进制文件给覆盖了,就没第一个问题了,至于第二个问题,不更新2.7.10就不管了
三、环境配置
点击打开进入终端
先更新一下
//刷新软件源列表然后升级已安装的软件包
sudo apt update && sudo apt upgrade -y
//彻底升级,安装新依赖或删除旧依赖,就第一次用好了
sudo apt full-upgrade -y
//自动删除不再需要的软件包
sudo apt autoremove -y
//清理 APT 下载软件时留下的旧缓存包
sudo apt autoclean
代理配置
- 获取 Windows 主机 IP
cat /etc/resolv.conf | grep nameserver | awk '{print $2}'
- 点击 WSL Dashboard 的侧栏网络进行配置,记得保存
- 重启实例可以通过下面命令看是否配置成功
env | grep -i proxy
- 如果报错了
Connection refused,记得看局域网代理有没有打开,一般默认是只监听127.0.0.1
实现硬件加速图形渲染
//安装 Mesa 图形工具集
apt install -y mesa-utils
在 .bashrc 或 /etc/profile 中加入环境变量
export GALLIUM_DRIVER=d3d12
export LIBVA_DRIVER_NAME=d3d12
需要注意的是多 GPU 环境可能需手动指定(例如,强制使用 NVIDIA 显卡)
export MESA_D3D12_DEFAULT_ADAPTER_NAME=NVIDIA
验证是否生效
glxinfo | grep "OpenGL renderer"
- 若输出包含 OpenGL renderer string: D3D12 等字样,说明硬件图形加速已成功开启。但是多 GPU 环境看是不是自己主力 GPU
- 若输出包含 llvmpipe,则是 CPU 软件渲染,启用失败。
如果 OpenGL 在英特尔 GPU 上依然使用 llvmpipe 软件渲染,则需要为 libedit 创建符号链接:
ln -s /usr/lib/libedit.so /usr/lib/libedit.so.2
参考 WSL GUI 使用小技巧
而设置应用的显示协议与缩放率详情需要看原贴,这里不再赘述。其它 GPU 的问题遇到了再写了。
WSLg 可能遇到问题:
- 运行 GUI 应用任务栏条目出现但是没有渲染窗口,窗口标题包含:
[WARN:COPY MODE],确认为这个问题https://github.com/microsoft/wslg/issues/1456,底层问题似乎是https://github.com/microsoft/openvmm/issues/4274,尝试重启 WSLg 可以恢复,或者参考 issue 的解决办法
尝试修半天发现修不会算了,多实例启动不全部关闭一般遇不到这个问题,全部关闭了建议用wsl --shutdown一般问题就没有了
测试 GUI 是否正常运行可以用 x11-apps
sudo apt install x11-apps yad -y
xeyes
粗略测帧率,会弹出旋转齿轮窗口,终端会打印帧率。
sudo apt install mesa-utils -y
glxgears
使用下面命令看看中文是否正常,一般刚安装的都是乱码的需要配置的
yad --title "WSLg Test" --text "WSLg GUI正常!"
配置中文语言环境(其它语言也可以参考)
设置中文语言环境
- 执行
locale命令查看当前系统语言配置,如果是LANG=zh_CN.UTF-8就不用继续配置
否则编辑/etc/locale.gen文件,将以下配置放开,去除前面的#注释就可以,我这里是在165行和505行,如果你和我一样安装的 Ubuntu
en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8
否则的话 Debian 仓库里可能默认没有这个文件,需要安装,然后编辑 /etc/locale.gen 文件把 en_US.UTF-8 UTF-8 放开
sudo apt install -y language-pack-zh-hans
- 然后生成语言环境缓存
sudo locale-gen
- 执行
echo $LANG查看是否是zh_CN.UTF-8,如果不是参考上面可以在$HOME/.bashrc或$HOME/.zshrc等文件中添加
export LANG=zh_CN.UTF-8
设置默认中文字体
- 安装字体文件
我这里是使用思源黑体/宋体和 Maple Mono NF CN
安装 思源黑体/宋体
sudo apt install -y fonts-noto-cjk fonts-noto-cjk-extra
安装 Maple Mono NF CN
这里选择安装 v7.9,等 v8.0 完善了再安装,可以先安装到 Windows ,解压出来
进入/usr/share/fonts,新建一个文件夹maple-mono-nf-cn,直接把解压出来的所有 .ttf 复制到里面
刷新缓存并验证
fc-cache -fv
fc-list | grep -i "Maple Mono NF CN" | head -5
- 修改系统默认字体。添加配置文件
~/.config/fontconfig/fonts.conf或/etc/fonts/local.conf,内容如下:
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<!-- 默认 sans-serif → 思源黑体 -->
<match target="pattern">
<test qual="any" name="family"><string>sans-serif</string></test>
<edit name="family" mode="assign" binding="same">
<string>Noto Sans CJK SC</string>
</edit>
</match>
<!-- 默认 serif → 思源宋体 -->
<match target="pattern">
<test qual="any" name="family"><string>serif</string></test>
<edit name="family" mode="assign" binding="same">
<string>Noto Serif CJK SC</string>
</edit>
</match>
<!-- 默认 monospace → Maple Mono NF CN -->
<match target="pattern">
<test qual="any" name="family"><string>monospace</string></test>
<edit name="family" mode="assign" binding="same">
<string>Maple Mono NF CN</string>
</edit>
</match>
</fontconfig>
刷新缓存
fc-cache -fv
验证映射生效,只要这三个都指向了你配置的字体,配置就没问题
fc-match sans-serif
fc-match serif
fc-match monospace
设置完可以再试试使用下面命令看看中文是否正常
yad --title "WSLg Test" --text "WSLg GUI正常!"
配置下载生产工具
- Git
查看是否安装
git -v
提示bash: git: command not found代表没有安装,通过下面命令安装
sudo apt install -y git
- Python
查看是否安装或者使用python3 -V也是可以的(要大写V)
python3 --version
提示bash: python3: command not found代表没有安装,通过下面命令安装
sudo apt install -y python3
直接使用python --version会报错,需要把python链接到python3
apt install -y python-is-python3
这时候使用python不带3就正常了
python --version
- Node
查看是否安装
node -v
正常新环境是会报错提示`Command 'node' not found,参考 Node官网命令 安装
# 下载并安装 nvm:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
# 代替重启 shell
\. "$HOME/.nvm/nvm.sh"
# 下载并安装 Node.js:
nvm install 24
# 验证 Node.js 版本:
node -v
# 验证 npm 版本:
npm -v
- Tmux
查看是否安装
tmux -V
提示bash: tmux: command not found代表没有安装,通过下面命令安装
sudo apt install -y tmux
- uv
查看是否安装或者使用uv -V也是可以的(要大写V)
uv --version
提示bash: uv: command not found代表没有安装,通过下面命令安装
curl -LsSf https://astral.sh/uv/install.sh | sh
- ripgrep
查看是否安装或者使用rg -V也是可以的(要大写V)
rg --version
提示bash: rg: command not found代表没有安装,通过下面命令安装
sudo apt install ripgrep
- unzip
查看是否安装
unzip -v
提示bash: unzip: command not found代表没有安装,通过下面命令安装
sudo apt install -y unzip
- bun
查看是否安装
bun -v
提示bash: bun: command not found代表没有安装,通过下面命令安装
curl -fsSL https://bun.com/install | bash
- 安装 GitHub CLI
- 添加官方 GPG 密钥,软件源,最后更新并安装,参考官方安装文档
(type -p wget >/dev/null || (sudo apt update && sudo apt install wget -y)) \
&& sudo mkdir -p -m 755 /etc/apt/keyrings \
&& out=$(mktemp) && wget -nv -O$out https://cli.github.com/packages/githubcli-archive-keyring.gpg \
&& cat $out | sudo tee /etc/apt/keyrings/githubcli-archive-keyring.gpg > /dev/null \
&& sudo chmod go+r /etc/apt/keyrings/githubcli-archive-keyring.gpg \
&& sudo mkdir -p -m 755 /etc/apt/sources.list.d \
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \
&& sudo apt update \
&& sudo apt install gh -y
- 安装成功验证
gh --version
- 认证登录(在 WSL 建议使用 token 登录,简单一点)
gh auth login
- 验证登录
gh auth status
- Git 认证
gh auth setup-git
- 验证 Git 认证
printf "protocol=https\nhost=github.com\n\n" | git credential fill
配置 Windows
- 安装 Cursor(编辑器而已,这里推荐Cursor,其它也是可以的)
设置和扩展按自己的感觉来,我是尽量配置的像idea
安装Cursor++,参考Cursor++ 轻指南
$env:CCURSOR_CURSOR_ROOT = "D:\你的自定义安装路径\resources\app"
npx @cometix/ccursor install
2. 安装 ThinkWatch (选择它是因为简单易上手和轻量一点,用其它ccs或者不使用也是可以的,主要是为了方便配置和解决对第三方非Claude模型的兼容问题)
- 先新建一个上游
- 可以新建一个key(用默认的也可以)
- 在“路由”页面上,打开默认密钥使用的路由或者新建一个路由,然后 “添加规则”
- 添加转发规则:条件 “模型” ,然后输入
*claude*。*匹配任何字符,匹配不区分大小写。 - 在 “转发至” 下,选择 “指定型号” ,选择上游并输入型号名称。可以添加备份,备份将按顺序尝试。将该规则置于任何其他匹配项之上。参考 官方说法
- 改写参数可以设置恒定推理参数,解决 Claude Code 使用第三方模型的一些不支持的推理参数并且更好的支持 Ultracode
安装Claude Code
npx zcf
然后直接选择1完整初始化(仅第一次初始化配置的时候用此项,会覆盖配置)
- 模板语言配置: 英文(按自己需求选择,决定下载skill的语言版本,英文省token一些)
- 配置 AI 输出语言:1. 简体中文(按自己需求选择)
- 选择自动安装 Claude Code
- 安装方式选择 curl,其次是 homebrew
- 已有配置文件:1. 备份并覆盖全部
- API 配置模式:自定义 API 配置
这里以AnyRouter为例,有参考Any牌路由器使用清障!
配置名称:AnyRouter
认证类型:Auth Token
API基础URL:https://anyrouter.top
API密钥:sk-you-token-to-here
主要使用的模型名称:opus[1m]
默认 Haiku 模型名称:回车跳过
默认 Sonnet 模型名称:同上
默认 Opus 模型名称:同上
是否设为默认配置:yes - 继续添加 Claude Code 配置:no
- 选择要安装的工作流类型:Git 指令
- 选择要安装的输出风格:这个可以全选
- 选择全局默认输出风格:按照自己想法来,可能有一定程度影响代码质量
- 是否配置 MCP 服务:no(我这里暂时不选择安装它推荐的mcp,都还行,看个人想法,我选择使用skill)
- 是否安装 CCometixLine:no(我选择使用ccstatusline/ccstatusline-zh)
- 输入q退出
- 安装 ccstatusline-zh
npm install -g ccstatusline-zh
配置
ccstatusline-zh setup
- 配置 settings.json
- 删除冗余权限配置
因为没有配置mcp,所以这些mcp添加没什么用,当然不删除也没什么,主要是强迫症
"mcp__ide",
"mcp__exa",
"mcp__context7",
"mcp__mcp-deepwiki",
"mcp__Playwright",
"mcp__spec-workflow",
"mcp__open-websearch",
"mcp__serena"
- 关闭 Claude 作为协助者提交和PR
{
"attribution": {
"commit": "",
"pr": ""
}
}
- 不需要删除旧会话
"cleanupPeriodDays": 9999
- 始终开启做梦和推理
"alwaysThinkingEnabled": true,
"autoDreamEnabled": true
- 关闭追加客户端类型区分文本(env)
"CLAUDE_CODE_ATTRIBUTION_HEADER": "0"
- 关于上下文压缩(env)
// 设定压缩计算的基准容量
// 自动压缩的百分比阈值"CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "90",默认1m似乎是95,200k似乎是83,只能调低
"CLAUDE_CODE_AUTO_COMPACT_WINDOW": "1000000"
- 使 /init 运行交互式设置流程。该流程会询问要生成哪些文件,包括 CLAUDE.md、skills 和 hooks,然后再探索代码库并编写它们。(env)
"CLAUDE_CODE_NEW_INIT": "1"
- 禁用灰度的优先使用 Bash 命令(env)
"CLAUDE_CODE_THRIFTY_SONIC": "0"
- 允许它自动从该网关获取模型列表(env)
"CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY": "1"
- 使用客户端api请求自动模式审查,需要 claude 模型或者设置模型映射(env)
"CLAUDE_CODE_AUTO_MODE_SERVER": "0"
- 完整配置奉上
settings.json
{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
"env": {
"CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY": "1",
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
"CLAUDE_CODE_ATTRIBUTION_HEADER": "0",
"CLAUDE_CODE_THRIFTY_SONIC": "0",
"CLAUDE_CODE_NEW_INIT": "1",
"MCP_TIMEOUT": "60000",
"CLAUDE_CODE_AUTO_COMPACT_WINDOW": "1000000",
"ANTHROPIC_AUTH_TOKEN": "sk-you-token-to-here",
"ANTHROPIC_BASE_URL": "https://anyrouter.top",
"ANTHROPIC_MODEL": "opus[1m]"
},
"cleanupPeriodDays": 9999,
"alwaysThinkingEnabled": true,
"autoDreamEnabled": true,
"attribution": {
"commit": "",
"pr": ""
},
"permissions": {
"allow": [
"Bash",
"Edit",
"Glob",
"Grep",
"KillShell",
"LS",
"LSP",
"MultiEdit",
"NotebookEdit",
"NotebookRead",
"Read",
"Skill",
"Task",
"TaskCreate",
"TaskGet",
"TaskList",
"TaskOutput",
"TaskStop",
"TaskUpdate",
"TodoWrite",
"ToolSearch",
"WebFetch",
"WebSearch",
"Write"
],
"deny": []
},
"outputStyle": "default",
"statusLine": {
"type": "command",
"command": "ccstatusline-zh",
"padding": 0,
"refreshInterval": 10
}
}
- 如果使用 ThinkWatch
把 URL 和 认证token 改成 ThinkWatch 的就好了,ANTHROPIC_MODEL可以删除,172.23.80.1参考代理在 WSL 使用cat /etc/resolv.conf | grep nameserver | awk '{print $2}'获取
"ANTHROPIC_BASE_URL": "http://172.23.80.1:8788",
"ANTHROPIC_AUTH_TOKEN": "tw-xxx"