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 / 幻方無官方從屬關係。

鏈接

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

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

小夜