前言¶
在 Linux 上用浏览器访问 DeepSeek Harness(DSH)网页端时,侧边栏、会话、设置等常见操作大多没有默认快捷键;设置 → 快捷键里大量动作显示「暂无快捷键」,手工改绑也往往存不进去。桌面 Electron 客户端不受此影响,但习惯纯浏览器或远程开发机场景的用户会明显感到效率落差。下面介绍的 dsh-linux-shortcut(维护者 nohappiness)是一条客户端插件路径:不改 core 安装树,只在首页尽早注入平台映射,让快捷键子系统按 web:windows 的同一套表解析键位、展示键帽并持久化改绑。
这是什么¶
dsh-linux-shortcut 归类为 DSH 客户端插件(dsh.client.platform: web)。当前包版本 0.1.3(MIT),在 package.json 中注明针对 0.2.2-rc.1 做过验证(verifiedAgainst)。
一句话:在 Linux 非 Android 的浏览器里,把 navigator.platform 映射成 Win32,使网页端快捷键逻辑与 Windows 网页端共用同一默认表与绑定规则;设置 → 通用底部另有一行状态,用于确认映射是否真实生效。
为什么 Linux 网页端原本没有快捷键¶
依据仓库 README 对 core 源码的梳理,问题不在「浏览器按不了键」,而在 平台键 web:linux 未登记、也无法合法落盘:
- 网页端在
packages/client/shortcuts/src/client/dom.ts用navigator.platform识别平台,Linux x86_64会得到platform = 'linux'。 - 多处快捷键注册点只配置
desktop:{macos,windows,linux}与web:{macos,windows},没有web:linux。 resolveShortcutDefault()按${runtime}:${platform}取值,取不到即未绑定。isWebBindingAllowed()在 Linux 网页端仅放行Ctrl+/、Ctrl+Shift+,、Ctrl+Shift+.;其余组合报unsupported-browser,编辑器不写localStorage。
因此面板里除 Ctrl+/ 外多为空,改绑也难以保存。
核心做法¶
插件分两半,与 README 一致:
宿主半:挂接 webServer.tapIndex(),在首页 <head> 最前面插入带 data-dsh-linux-shortcut="platform" 的脚本。当 navigator.platform 以 Linux 开头且 UA 非 Android 时,用 Object.defineProperty 把平台读值遮蔽为 "Win32"。注入必须早于 bootstrap 队列脚本,故不能仅靠 index-inject 追加到表尾。
浏览器半(lib/client.js):在设置 → 通用增加「Linux 快捷键」状态行,用于判断映射是否在浏览器侧真实生效。
键位语义仍由 core 的 effectiveShortcuts()、dsh.keybindings.v1 等同一事实源计算,不自建第二份键位表(仓库 docs/DESIGN.md 记录了为何放弃读 ShortcutRegistry 私有字段的方案)。
键位(与 Windows 网页端一致)¶
装上插件后,默认组合与 Windows 网页端相同,例如:
| 类别 | 键 |
|---|---|
| 新建会话 / 搜索会话 / 添加工作区 | Ctrl+Alt+N / Ctrl+Alt+K / Ctrl+Alt+O |
| 折叠左栏 / 右面板 | Ctrl+Alt+B / Ctrl+Shift+B |
| 终端 / 分屏 | Ctrl+` / Ctrl+\ |
| 设置 / 快捷键面板 | Ctrl+Alt+, / Ctrl+/ |
README 提示三组可能被浏览器或桌面环境先占用:Ctrl+Shift+B(Edge 书签栏)、Ctrl+Shift+O(Edge 书签管理器)、Ctrl+Alt+T(GNOME/KDE 开终端)。可在 设置 → 快捷键 改绑,例如右面板改为 Ctrl+Alt+Y。
安装与启用¶
安装命令以 README 原文为准。插件以当前 DSH 进程权限运行,添加前建议在 GitHub 仓库 查看源码与 MIT 许可证。
本地 link(示例路径来自 README,按你的环境替换):
dsh plugin --profile web add link:/data/ai_copilot/dsh-plugins/dsh-linux-shortcut
远端仓库(首次会走 GitHub 连接检查):
dsh plugin --profile web add git+ssh://git@github.com/nohappiness/dsh-linux-shortcut.git
dsh plugin add 会通过 reconcile 把带 dsh.bundle.patch 的包写入 profile 的 dsh.profile.bundles,一般无需手改 package.json。
生效步骤:
systemctl --user restart dsh.service # 会断开当前会话,宜在空闲时执行
浏览器侧需 Ctrl+Shift+R 强刷;客户端 chunk 按 rev 缓存在进程内,不强刷可能仍是旧包。
卸载并回滚到「Linux 无快捷键」状态:
dsh plugin --profile web remove dsh-linux-shortcut && systemctl --user restart dsh.service
验证与典型用法¶
按 README 建议顺序自检:
- 首页是否注入脚本(端口改成本机监听端口):
curl -s http://127.0.0.1:<PORT>/ | head -c 300
期望在第一个 <script src> 之前看到 <head><script data-dsh-linux-shortcut="platform">。
- 浏览器 Console:
navigator.platform // "Win32"
navigator.userAgent // 仍含 Linux 信息 —— 映射生效时的特征
-
设置 → 通用 底部「Linux 快捷键」为绿色结论;设置 → 快捷键 各动作有键帽且可改绑。
-
实按:
Ctrl+Alt+N新建会话、Ctrl+Alt+B收左栏、Ctrl+/打开快捷键面板。
仓库提供 npm test(17 条 node 测试),覆盖宿主 index 改写与注入脚本行为,供二次开发时回归。
适用场景与注意¶
适合谁:在 Linux 上用 Chromium 系或 Firefox 等访问 DSH 网页端,希望与 Windows 网页端相同的默认快捷键、设置页键帽和改绑持久化,且不愿改 @deepseek-ai/* 安装树的用户。
不适用:Electron 桌面客户端本身已有完整键位;Android 虽 platform 常含 Linux,插件脚本已用 UA 排除。
限制(README 明示):
- 当前发行版仍未内置
web:linux,此插件在该现状下是文档化的修复入口;若上游日后补齐web:linux,映射仍可与官方默认值并存,插件非必须但可保留。 tapIndex属于官方 escape hatch,非承诺 API;升级 DSH 后若接口变更,插件装载可能报错(可见,非静默失败)。- 插件仅改首页注入与客户端状态行,不修改 dsh 安装树内文件;
dsh plugin update或重装 core 不会冲掉插件,卸载即恢复。
社区目录 SkillHub 插件页 与 GitHub 为独立收录渠道,与 DeepSeek / 幻方无官方从属关系;安装前自行核对源码与许可证即可。
结尾¶
dsh-linux-shortcut 用最小的宿主注入 + 客户端状态展示,把 Linux 网页端快捷键拉回与 web:windows 同一套 core 行为,避免维护平行键位表。需要收录信息或贡献代码时,可访问 SkillHub 目录 与 GitHub:nohappiness/dsh-linux-shortcut。