DSH启动器(dsh-launcher)
August 20, 2026 · View on GitHub
dsh(DeepSeek Harness)的系统托盘启动器:通过菜单栏控制 dsh --profile web 的启动、停止与重启,并在内置浏览器中打开 dsh 界面。
功能
- 启动 / 停止 / 重启 dsh:菜单栏一键控制 dsh web 服务
- 打开 dsh 界面:启动应用后自动在托盘内置浏览器中打开,也可从菜单重新打开
- 开机自启:勾选“开机自启 dsh”后,登录时自动启动 dsh(默认关闭)
- 崩溃自愈:dsh 进程异常退出后会自动拉起(macOS 由 launchd 托管,Linux 由 systemd user service 托管)
- 状态显示:菜单栏实时显示 dsh 运行状态(运行中 / 已停止)
- 查看日志:菜单“查看日志”直接打开 dsh 日志文件
- 退出托盘:退出托盘不影响已运行的 dsh
支持平台
| 平台 | 架构 | 安装包 |
|---|---|---|
| macOS | arm64 | .dmg |
| Linux (Debian/Ubuntu) | x86_64 | .deb |
安装
macOS
- 从 GitHub Releases 下载
dsh-launcher_<version>_aarch64.dmg - 打开 dmg,将
dsh-launcher.app拖入/Applications - 由于当前发布包未进行 Apple 官方签名(未加入 Apple Developer Program), 首次打开前需要手动移除隔离属性,否则 macOS 会拦截启动:
# 方式一:先解除 Gatekeeper 隔离再首次启动(推荐)
xattr -dr com.apple.quarantine /Applications/dsh-launcher.app
# 方式二:首次启动时在“访达”中右键点击 dsh-launcher.app → 打开 → 再点“打开”
- 首次启动时,若 dsh 未运行会自动拉起;之后可通过菜单栏控制
说明:
xattr -dr会移除整个应用的隔离标记。若系统提示“无法验证开发者”, 执行该命令后重新打开即可;如仍被拦截,可在“系统设置 → 隐私与安全性”中点击“仍要打开”。
Linux (Debian/Ubuntu)
sudo apt install ./dsh-launcher_<version>_amd64.deb
安装后可从应用菜单启动 DSH启动器,或执行 dsh-launcher。
使用
启动后会自动拉起 dsh 并弹出内置 WebView,同时菜单栏出现 DSH 鲸鱼图标;点击托盘图标可展开菜单:
| 菜单项 | 作用 |
|---|---|
| 状态行 | 显示 dsh 运行状态 |
| 打开 dsh 界面 | 在托盘内置浏览器中打开 dsh Web 界面 |
| 重启 dsh | 重启 dsh 服务 |
| 停止 dsh / 启动 dsh | 停止 / 启动 dsh 服务 |
| 开机自启 dsh | 登录时自动启动 dsh(默认关) |
| 查看日志 | 打开 dsh 日志文件 |
| 退出托盘 | 退出托盘(dsh 继续运行) |
依赖
- dsh:需已安装且可通过 shell 找到(支持 nvm / Volta / Homebrew /
~/.local/bin等常见安装位置) - Node.js:dsh 运行所需,与 dsh 同版本目录解析
- Linux:systemd(用户级服务),
libwebkit2gtk-4.1、libgtk-3、libappindicator3(deb 已声明依赖)
服务与数据位置
macOS
| 内容 | 路径 |
|---|---|
| 窗口尺寸 | ~/Library/Application Support/dsh-launcher/window-size.json |
| 托盘日志 | ~/Library/Logs/dsh-launcher.log |
| dsh 日志 | ~/Library/Logs/dsh-web.log |
| LaunchAgent | ~/Library/LaunchAgents/com.dsh-launcher.web.plist |
Linux
| 内容 | 路径 |
|---|---|
| 窗口尺寸 | ~/.config/dsh-launcher/window-size.json |
| 托盘日志 | ~/.local/state/dsh-launcher/dsh-launcher.log |
| dsh 日志 | ~/.local/state/dsh-launcher/dsh-web.log |
| systemd unit | ~/.config/systemd/user/dsh-launcher-web.service |
遵循 XDG 规范:
XDG_CONFIG_HOME/XDG_STATE_HOME被设置时优先使用对应目录。
开发
# 依赖安装
pnpm install
# debug 启动(需在 src-tauri 目录)
cd src-tauri && cargo run
# 正式打包(macOS)
pnpm tauri build --bundles app # 仅 .app
pnpm tauri build --bundles dmg # .app + dmg
# 正式打包(Linux x86_64 deb,需在 Linux 环境或 CI 中执行)
pnpm tauri build --bundles deb --target x86_64-unknown-linux-gnu
产物路径:
src-tauri/target/release/bundle/macos/dsh-launcher.app
src-tauri/target/release/bundle/dmg/dsh-launcher_<version>_aarch64.dmg
src-tauri/target/x86_64-unknown-linux-gnu/release/bundle/deb/dsh-launcher_<version>_amd64.deb
CI 构建
仓库内置 release workflow:
- 手动触发(
workflow_dispatch)或在v*tag 推送时自动触发 - Linux job:
cargo check+ 构建 x86_64 deb - macOS job:构建 aarch64 dmg
- 打 tag 时自动创建 GitHub Release 并附上 deb + dmg 产物
卸载
macOS
launchctl bootout gui/$(id -u)/com.dsh-launcher.web
rm ~/Library/LaunchAgents/com.dsh-launcher.web.plist
rm -rf ~/Library/Application\ Support/dsh-launcher
Linux
systemctl --user disable --now dsh-launcher-web.service
rm ~/.config/systemd/user/dsh-launcher-web.service
systemctl --user daemon-reload
rm -rf ~/.config/dsh-launcher ~/.local/state/dsh-launcher
sudo apt remove dsh-launcher