dsh-wayland-use:Wayland 下给 DSH 用的原生桌面控制

前言

在 DeepSeek Harness 里做「电脑使用」类工作流时,常见做法是依赖 xdotool、uinput 或 X11 路径去点按、截图。纯 Wayland 会话里,这些手段往往只影响 XWayland 区域,或每一步都要重新拉起会话,延迟和可靠性都不理想。下面介绍维护者 Ganglith 发布的 dsh-wayland-use:分类为工作流,通过 Mutter 的 RemoteDesktop 与 ScreenCast 两条 D-Bus 会话读写桌面,在 GNOME/Mutter 环境下做截图、带坐标的 OCR、按文字点击和批量动作。

这是什么

dsh-wayland-use 是 DeepSeek Harness 的 Wayland 原生桌面控制插件(版本 0.1.0,MIT 许可证)。不走 xdotool / uinput / X11,后端为常驻 Python 进程,Mutter 会话与 GStreamer 管道只建立一次(约 300ms),后续单步操作多在毫秒级。对外坐标统一为逻辑像素,与 OCR、wayland_windows 列出的矩形同一套,可直接互用。

核心功能

插件通过 Cordis patch 暴露一组工具,概要如下。

工具 作用
wayland_screenshot 截图;支持 region、scale、maxWidth
wayland_read OCR 读出屏幕文字并带坐标;可用 contains 过滤
wayland_windows 列窗口标题、矩形与焦点(AT-SPI)
wayland_act 一次调用执行多步动作,只返回一张最终截图
wayland_click_text 按文字查找并点击
wayland_key 组合键,如 ctrl+a、super+Return
wayland_launch 启动程序
wayland_status 自检;reset: true 可重建会话

wayland_act 的 step 支持:click、clickText、type、key、move、scroll、wait、waitText、launch、sleep,每步可带 settleMs。README 建议能用批量就不要逐步调用,以减少往返。

相对「每步重建会话」的实现,README 给出了一组参考耗时:wayland_status 约 0.1ms;首次 wayland_screenshot 约 230ms,之后取缓存帧约 2ms;wayland_key 约 1–2ms;含 OCR 的 wayland_click_text 约 170–190ms;wayland_act 三步加截图约 600ms。静止画面时 PipeWire 不出新帧,插件用动作时间戳与缓存帧配合,避免不必要的重抓。

OCR 默认并行 eng 与 chi_sim(可通过环境变量调整),找不到文字时会从 1 倍放大自动升到 2 倍。

安装与启用

官方安装命令如下。

dsh plugin add https://github.com/Ganglith/dsh-wayland-use

也可手动装进 profile(~/.dsh/profiles/<profile>/):

  1. 将包放入 node_modules/dsh-wayland-use(或符号链接以便改源码立即生效)
  2. 在 package.json 的 dependencies 增加 "dsh-wayland-use",并在 dsh.profile.bundles 增加对应条目
  3. 在 cordis.patch.yml 增加 - id: wayland-use 与 name: dsh-wayland-use

DSH 的 HMR 会热载新 patch,一般无需重启。例外:lib/daemon.py 为子进程,修改后需执行 pkill -f "daemon[.]py",下次调用时会自动重新拉起。

系统依赖包括:python3-gi(Gio/GLib/Gst/PIL)、gstreamer1.0-plugins-{base,good}、tesseract-ocr 与 tesseract-ocr-chi-sim(OCR 可选)。无 Node 侧依赖。

常用环境变量(节选):

变量 默认 说明
DSH_WAYLAND_PYTHON /usr/bin/python3 需带 gi
DSH_WAYLAND_JPEG_QUALITY 75 截图 JPEG 质量
DSH_WAYLAND_OCR_LANGS eng,chi_sim OCR 并行语言
DSH_WAYLAND_OCR_BANDS 8 OCR 横切条数
DSH_WAYLAND_OCR_UPSCALE 1 默认放大;找不到会自动升到 2

后端 stderr 中带 ERROR/Traceback 的行会写入 $TMPDIR/dsh-wayland-<uid>/daemon.log。

典型用法思路

  1. 用 wayland_status 确认会话与后端正常;异常时可 reset: true 重建。
  2. 需要 Agent 理解界面时,先 wayland_read 或 wayland_screenshot;OCR 框左上角 文字 @x,y 可直接作为 wayland_act 里 click 的逻辑坐标。
  3. 已知按钮文字时,可用 wayland_click_text 或 wayland_act 里的 clickText,避免手猜坐标。
  4. 多步操作(输入、按键、等待)尽量收成一次 wayland_act,减少截图往返。

README 还记录了实现层面的约束(如 ibus 下文本宜走剪贴板 + Ctrl+V、RemoteDesktop 与 ScreenCast 启动顺序等),集成复杂工作流前建议在仓库 README「几个坑」一节通读一遍。

适用场景与注意

适合在 GNOME/Mutter 纯 Wayland 环境下,为 DSH 智能体提供截图、读屏、点击与批量桌面动作;与依赖 X11 或每步冷启动后端的方案相比,README 强调常驻后端与批量 wayland_act 的延迟优势。

插件以当前 dsh 进程的用户权限运行,能访问的桌面与 D-Bus 能力与此一致。安装前请自行审阅 GitHub 源码 与 MIT 许可证;DSH 社区插件目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

链接

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

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

小夜