DeepSeek Harness 在 WSL2 里安装:DSH plugin 路径、浏览器联动与端口转发

安装与快速上手发布于 2026-10-17作者: DeepSeek Plugin 插件市场
DeepSeek Harnessdsh安装WSL2DSH plugindsh web端口转发
在 WSL2 里装 DeepSeek Harness 有三种玩法:只装 WSL 侧、装 Windows 侧操作 /mnt/c、两侧都装各自独立。含 DSH plugin 路径互操作、Windows 浏览器打开 dsh web 的三条路与端口转发失效的排查。

WSL2 里装 DeepSeek Harness 的第一件事不是敲命令,而是决定「装哪一侧」——因为它决定了你的 DSH plugin 能操作哪些文件、dsh web 给谁看、以及后来所有路径问题长什么样。 三种玩法都成立:只装 WSL 侧(处理 Linux 项目最顺)、只装 Windows 侧(处理 Windows 项目、WSL 只当工具链)、两侧都装(各自独立、互不干扰)。真正容易踩的是三处:路径互操作(/mnt/c 的跨文件系统代价、Windows 反斜杠路径被 Markdown 转义吃掉)、浏览器联动(WSL 的端口转发什么时候会失效)、以及跨系统挂载带来的文件属主差异让插件写文件失败。

DeepSeek Harness 装哪一侧:WSL 侧与 Windows 侧的三种玩法

一句话结论:别问「WSL 能不能装 DeepSeek Harness」,要问「你要它操作哪一侧的文件」——按文件在哪决定装在哪,混装只会带来两套互不相通的环境。

玩法适合优势代价
A. 只装 WSL 侧项目在 Linux 文件系统里、要跑 Linux 工具链文件 IO 最快、插件与 shell 行为一致Windows 侧资源(如 Windows 专属工具)用不上
B. 只装 Windows 侧 + WSL 当工具链项目在 Windows 盘上直接用 Windows 的资源与桌面端操作 /mnt/c 时的性能损耗由 WSL 侧承担
C. 两侧都装两种项目都要处理各干各的、互不影响两套数据目录、两套已装 DSH plugin、两套凭据——升级与排查都要做两遍

方案 A:只装 WSL 侧(最常用)

一句话结论:在 WSL 里用 npm 全局装 @deepseek-ai/dsh、把 DSH_HOME 放在 WSL 原生文件系统里、起 dsh web 后由 Windows 浏览器经本机转发访问——这是 Linux 项目最顺的一条路。

  1. 用 nvm 装 Node(避免 sudo npm -g 带来的权限问题):
bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
nvm install 20 && nvm use 20 && node -v
  1. 全局安装 DeepSeek Harness 本体:
bash
npm i -g @deepseek-ai/dsh
dsh --version        # 预期:打印版本号
  1. 把数据目录固定在 WSL 原生盘(放 /home 下,别放 /mnt/c):
bash
export DSH_HOME="$HOME/.dsh"     # 建议写进 ~/.bashrc 持久化
mkdir -p "$DSH_HOME"
  1. 起 dsh web(参数名以 dsh web --help 为准):
bash
dsh web --port 3080
# 预期:WSL 内 curl -I http://127.0.0.1:3080 有响应
  1. 在 Windows 浏览器打开 http://127.0.0.1:3080(WSL2 本机转发默认生效,见第 5 节)。

方案 B:装 Windows 侧 + 工作区走 /mnt/c

一句话结论:DeepSeek Harness 装在 Windows 侧、项目也在 Windows 盘上,WSL 只作为你的 shell——这样文件 IO 走 Windows 原生路径,代价是 WSL 侧命令看到的路径是 /mnt/c/...,引用要转换。

  1. Windows 侧安装:在 Windows 终端里 npm i -g @deepseek-ai/dsh,用 dsh --version 验证。
  2. 工作区用 Windows 路径加入;插件操作的是 Windows 盘上的文件,性能与属主都正常。
  3. 要跨到 WSL 侧时用 \\wsl$\<发行版>\home\...(资源管理器)或 /mnt/...(WSL 侧命令)—— 别在 Windows 程序里写 Linux 风格路径,反之亦然。
  4. 取舍提醒:这条玩法下你失去了「Linux 工具链一致性」——同一条插件命令在两侧表现可能不同(shell、路径分隔符、权限模型都不一样)。

方案 C:两侧都装(各自独立)

一句话结论:两侧都装完全可行,关键是从头就把两套环境当两个独立的机器**——各自一份 DSH_HOME、各自一份插件清单;任何「一边装了另一边怎么没有」的疑问,答案都是「它们本来就不共享」。**

  1. 两侧分别设 DSH_HOME,并且不要把同一个卷/目录同时给两侧用(跨系统并发写同一份数据容易产生状态不一致)。
  2. 插件各装各的:在 WSL 侧装的是给 WSL 环境用的,Windows 侧的插件操作 Windows 文件。装了哪个、什么版本,用 DSH Plugin Hub 的已装列表逐侧核对,比在两边命令行里对清单快。
  3. 升级也要做两遍:两侧版本漂移是常态,见 多台机器统一更新 DeepSeek Harness。
  4. 别共享凭据文件:两侧的品牌与账号体系独立,凭据格式也会有版本差异,强行共享会直接启动失败。
已安装插件列表

DSH plugin 与 Windows 的路径互操作:WSL2 三种写法与取舍

一句话结论:路径问题只有一条原则——谁执行、用谁的路径风格;而性能问题只有一条原则——项目放 WSL 原生盘,跨系统只放必须跨的产物。

写法用在哪特点
/mnt/c/Users/you/projectWSL 侧命令访问 Windows 盘可用但慢(跨文件系统,大目录扫描尤其明显)
/home/you/projectWSL 侧原生最快,建议项目落这里
C:\Users\you\projectWindows 侧程序Windows 侧正常;在 Markdown 里会被当转义,吃掉一级分隔符
\\wsl$\Ubuntu\home\youWindows 侧访问 WSL 文件资源管理器可用,批量操作慢
  1. 遇到「路径明明存在却打不开」,先看它在哪一侧执行、用的是哪种风格(跨系统时最常见的是把 C:\ 塞给了 WSL 侧命令)。
  2. 遇到「图片/附件预览 404」,优先怀疑反斜杠转义把路径写坏了——优先改用正斜杠,这类问题在 Windows 路径被 Markdown 吃掉 有更细的现场。

让 Windows 浏览器打开 WSL 里的 DSH plugin 网页端:三条路

一句话结论:默认靠 WSL2 本机转发就能用 127.0.0.1 打开;转发失效时按「显式绑定 → 用 WSL IP → 手动端口转发」三步退,而不是去改鉴权设置。

  1. 路一:本机转发(默认,优先用)。WSL2 会把 WSL 内监听的端口映射到 Windows 本机,直接在 Windows 浏览器访问 http://127.0.0.1:3080。
  2. 路二:显式绑定 + 用 WSL IP 访问(转发失效时的退路):
bash
dsh web --host 0.0.0.0 --port 3080          # WSL 侧
ip addr show eth0 | grep "inet "             # 查 WSL 的 IP
# 然后在 Windows 浏览器访问 http://<WSL的IP>:3080
  1. 路三:重建 WSL 网络,让转发重新生效:wsl --shutdown 后重新进入发行版——本机转发会在实例重建后刷新,这是最省事的一招。
  2. 还打不开再查防火墙:Windows 防火墙或第三方安全软件会拦非常规端口,临时放行该端口验证一次即可定位。
  3. 反过来也要会查:如果 WSL 内 curl 都不通,问题就在 dsh web 本身(端口被占/权限),与转发无关(见 DeepSeek Harness 端口冲突排查)。

WSL 里跑 DSH plugin 的前提与 DSH插件 排查注意事项

一句话结论:插件在 WSL 里与原生 Linux 行为一致,所以失败几乎都集中在「Node 装法(权限)」与「原生模块(编译)」两处;跨系统挂载再叠一层属主差异。

  1. 全局安装权限:用 nvm 管理的 Node 装全局包不需要 sudo;如果报 EACCES,改用 nvm 而不是 sudo npm -g(后者会把文件属主写成 root,后续升级更麻烦)。
  2. 原生模块编译:sudo apt-get install -y build-essential python3 之后再装;纯 JS 插件不受影响。
  3. 文件属主差异:插件在 /mnt/c 下写文件可能失败或属主错乱——把需要频繁写入的目录放到 WSL 原生盘。
  4. 环境变量与 shell:DSH_HOME 之类变量要写进 ~/.bashrc,否则新开的 shell 又回到默认数据目录,表现为「插件列表突然空了」。
  5. 两侧清理与卸载:WSL 侧的卸载与 容器 / CI 环境里的清理 思路相同——先记录已装清单,再删数据目录。
  6. 修复状态如实:本文命令基于官方 CLI 包与 WSL 官方网络文档;dsh web 的具体参数名以你机器上的 --help 输出为准,Windows 侧与 WSL 侧的差异行为可能随版本变化。

来源:apps/cli/README.md、README.zh.md、Microsoft Learn · WSL networking。

常见问题

WSL2 里安装 DeepSeek Harness 应该装在 Windows 侧还是 WSL 侧?

取决于你要让 DeepSeek Harness 操作哪些文件:让它处理 WSL 里的 Linux 项目就装在 WSL 侧,处理 Windows 盘上的项目就装在 Windows 侧并用 WSL 做辅助。两侧都装也完全可行,但它们是两套独立环境——两边的数据目录、已装 DSH plugin 清单与凭据互不相同,别指望一边装另一边能用。

WSL2 里起了 DeepSeek Harness 的 dsh web,Windows 浏览器怎么打开?

在 DeepSeek Harness 里,WSL2 默认会做本机到 Windows 的端口转发,正常情况下在 Windows 里访问 127.0.0.1 对应的端口就能打开 dsh web。打不开一般是三种原因:服务只监听回环之外没生效、WSL 的端口转发失效(重启 WSL 或 wsl --shutdown 后重建)、Windows 防火墙拦了该端口。排查顺序是先确认服务本身在 WSL 内 curl 得通,再看转发。

在 WSL 里让 DSH plugin 操作 /mnt/c 下的项目,为什么这么慢?

在 DeepSeek Harness 里,因为 /mnt/c 是跨文件系统访问,WSL2 走的是网络式文件协议而不是原生磁盘 IO,大量小文件读写会慢一个量级。DeepSeek Harness 的文件工具与插件在扫描、读取、写入时都会放大这个差距。项目代码放 WSL 原生文件系统(/home 下)、只有必须跨系统访问的产物放 /mnt/c,是最省事的取舍。

DeepSeek Harness 在 WSL 里该用哪种路径写法?反斜杠路径会出问题吗?

在 DeepSeek Harness 里,在 WSL 侧执行命令时用 Linux 风格路径(/mnt/c/Users/...),在 Windows 侧程序里用 Windows 风格路径(C:\Users\...),两者不要混写。特别提醒:Windows 反斜杠路径在 Markdown 里会被当成转义字符吃掉一级分隔符,导致引用失效——跨系统传路径时优先用正斜杠或让工具自己解析。

WSL 里装 DSH plugin 报权限或原生模块错误,怎么处理?

DeepSeek Harness 的插件在 WSL 里安装与在原生 Linux 一致,常见两类失败:一是全局安装目录没权限(改用 nvm 管理的 Node,或用 sudo 装到系统目录);二是插件依赖原生模块需要编译(先装 build-essential 与 python3)。跨系统挂载目录还会带来文件属主差异,插件写文件失败时优先怀疑这一条。

相关术语

WSL2 本机转发
WSL2 本机转发是 WSL2 提供的网络特性:在 WSL 里监听的端口会自动映射到 Windows 本机,使 Windows 侧用 127.0.0.1 就能访问。它默认开启,但会因 WSL 实例重启或休眠而失效。— https://learn.microsoft.com/windows/wsl/networking
跨文件系统访问(/mnt/c)
跨文件系统访问指 WSL 通过挂载点访问 Windows 盘符的路径,读写经由协议转发而非原生磁盘 IO,因此大量小文件操作明显变慢。DeepSeek Harness 的项目目录放在哪一侧,直接决定文件工具与插件的速度。— https://learn.microsoft.com/windows/wsl/networking
DSH_HOME
DSH_HOME 是 DeepSeek Harness 指定数据目录的环境变量,profile 配置、已装 DSH plugin 记录、会话与凭据都在其中。WSL 侧与 Windows 侧各有一份独立的 DSH_HOME,这是「两边互不相通」的根源。— https://github.com/deepseek-ai/deepseek-harness/blob/master/apps/cli/README.md
dsh web
dsh web 是 DeepSeek Harness 的网页端入口,把会话与插件管理能力以本地网页服务的形式提供。在 WSL 里启动时它监听的是 WSL 网络命名空间,需要经由本机转发或显式绑定才能被 Windows 侧访问。— https://www.npmjs.com/package/@deepseek-ai/dsh

来源