dsh-beacon:Linux 托盘三色灯,一眼看见 DSH 是否在等你

前言

DeepSeek Harness(DSH)在本地跑起来之后,一个工作区里往往开着多条会话。你切到编辑器或别的窗口时,很难立刻判断:哪条会话停在「等你回答」,哪条还在跑,哪条已经闲下来。去网页里逐个翻状态,既打断思路,又容易漏掉待批准的权限请求。

下面介绍社区插件 doncc/dsh-beacon:在 Linux 系统托盘放一个常驻小圆点,把本机全部 DSH 会话聚合成一种颜色;需要处理时,用中键或菜单跳回最早那条在等你的对话。它只读 DSH 本地状态文件,不向 DSH 进程注入代码。维护者为 doncc,归类为客户端插件,许可证 MIT(见 GitHub 仓库)。

这是什么

dsh-beacon 由两部分可选组成:

  1. 托盘程序:tray.py 在顶栏/托盘显示三色状态灯,并提供跳转、刷新、停止 DSH 等操作。
  2. DSH 插件(可选):在 DSH 设置里提供「状态灯」开关,并让前端通过焦点文件完成会话切换。

定位可以概括成一句话:顶栏一个点,告诉你 DSH 有没有在等你。

三种颜色分别表示什么

状态优先级为 黄 > 灰 > 绿。

颜色 状态 含义
绿 全部完成 没有会话在跑,也没有等你确认的事
黄 等你确认 至少有一条待回答的提问,或待批准的权限请求;图标会闪烁
灰 正在执行 有会话在跑,但没有卡在等你

核心功能与交互

聚合状态:约每 1.5 秒轮询一次本机 DSH 数据,单次聚合约 26 ms。读取 ~/.dsh/storages/session_projcache/sessions/*.json 判断是否在跑、是否有 userQuestions;对需要细查的会话再解压 session.v4.jsonl.zstd,用审批与提问的配对差集补齐「待批准 / 待回答」。

交互(GNOME 等遵循 AppIndicator 的桌面):

操作 效果
中键单击 跳到「最早待确认」的那条会话
左键 / 右键 菜单:状态摘要、待确认列表(可点跳转)、打开 DSH 网页、刷新状态、停止 DSH、仅关闭状态灯

左键在 GNOME 上会打开菜单而非直达,这是托盘协议限制;中键走 SecondaryActivate,是一键直达的手势。

装好 DSH 插件后,还会在设置页出现「状态灯」分区,可勾选隐藏托盘图标;托盘写入 beacon-focus.json,前端轮询后切换到对应会话。

安装与启用

安装分两条路径,按是否需要托盘图标选择。

只装 DSH 侧(无托盘图标)

插件市场收录后,仅需 DSH 设置与跳转逻辑、不要系统托盘时,使用:

dsh plugin --profile web add github:doncc/dsh-beacon

装完后设置页会有「状态灯」相关分区,但系统托盘里不会出现圆点。

要托盘状态灯

先做依赖,再跑仓库里的 install.sh。第 4 节的 --with-plugin 会在装托盘时顺带注册 DSH 插件;若已用上面的 dsh plugin add 装过插件,后续 --with-plugin 可跳过。

1. 依赖(Debian / Ubuntu)

sudo apt install python3-gi gir1.2-ayatanaappindicator3-0.1 zstd x11-utils
  • python3-gi 与 ayatana AppIndicator:GTK3 托盘图标。
  • zstd:解压会话日志以配对审批与提问。
  • x11-utils(xwininfo):查找已打开的 DSH 浏览器窗口并置前。

GNOME 通常需要 AppIndicator 扩展;KDE、XFCE 等支持 StatusNotifierItem 的桌面也可显示。

2. 安装托盘本体

仓库 README 给出的步骤为克隆仓库并执行安装脚本(示例将 DSH 装在 ~/opt/DSH):

git clone https://github.com/doncc/dsh-beacon.git
cd dsh-beacon
./install.sh --dsh-root ~/opt/DSH
  • 默认安装到 ~/.local/share/dsh-beacon,可用 --prefix 修改。
  • --dsh-root 指向 DSH 本体安装目录:状态灯从这里读 dsh.log(带 token 的地址)并调用 stop-dsh.sh,不修改该目录内容。

先启动 DSH,再手动试跑托盘:

DSH_ROOT=~/opt/DSH ~/.local/share/dsh-beacon/tray.py

3. 随 DSH 一起启动(可选)

在 DSH 启动脚本中,端口起来且存在图形会话时拉起托盘;在停止脚本中按 tray.pid 结束进程。也可使用用户级 systemd 单元 dsh-beacon.service(见仓库 README)。托盘发现 DSH 端口(默认 3080)未监听时会自行退出,启动顺序不必严丝合缝。

4. 安装 DSH 插件(可选)

若未用 dsh plugin add 装过,可在仓库目录执行:

./install.sh --with-plugin           # 默认 web profile
./install.sh --with-plugin --profile tui

脚本会把插件放到 ~/.dsh/plugins/dsh-beacon 并注册到对应 profile。完成后重启 DSH。

典型用法

  1. 日常开着 DSH 与托盘,切到其他应用时看顶栏颜色:绿表示可以放心忽略,黄表示至少有一条需要你确认或回答。
  2. 出现黄灯且闪烁时,中键单击托盘图标,跳回最早待处理会话;或打开菜单从列表里选具体会话。
  3. 不需要托盘但仍要设置页开关时,只执行 dsh plugin --profile web add github:doncc/dsh-beacon 即可。

环境变量(可按本机路径覆盖):

环境变量 默认值 作用
DSH_ROOT ~/opt/DSH 读 dsh.log、调用 stop-dsh.sh
DSH_BEACON_HOME 脚本所在目录 图标与 tray.pid
DSH_HOME ~/.dsh DSH 配置与状态目录
DSH_PORT 3080 DSH Web 端口

相关文件:~/.dsh/beacon-settings.json(启用开关)、~/.dsh/beacon-focus.json(跳转目标,前端消费后删除)。

适用场景与注意

适合谁:在 Linux 桌面上长期跑 DSH、多会话并行、又经常切走主窗口的开发者。需要「不用回网页扫一圈就知道有没有卡点」时使用托盘;仅需设置里开关与前端跳转时,可以只装 DSH 插件。

权限与安全:托盘与插件在本机用户权限下读取 ~/.dsh 与 DSH 安装目录中的日志/脚本,安装前建议阅读 源码与 LICENSE。

已知限制(摘自上游文档):

  1. 窗口置前依赖 X11;Wayland 下置前可能失败,焦点文件仍可用,切回浏览器后页面会跳转。
  2. 顶栏图标须用 PNG,且换状态须换文件名(GNOME 缓存限制)。
  3. 不能靠带 token 的 URL 深链跳会话,故采用焦点文件 + 前端轮询。
  4. 轮询间隔与闪烁节奏目前写死(1.5 s 轮询、350 ms 半周期)。

卸载可在克隆目录执行 ./uninstall.sh。

结尾

dsh-beacon 把「全机会话是否在等你」收成托盘上的一个点:黄灯闪就表示该回去了。DSH 生态主张「一切皆插件」;插件目录由社区站点维护,与 DeepSeek / 幻方无官方从属关系。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye