前言¶
在 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。