dsh-remote-screen:在 DSH Web UI 裏打開遠程 Linux 桌面

前言

用 DeepSeek Harness(DSH)做智能體或會話開發時,經常需要登錄一臺 Linux 開發機或 VM:看圖形界面、點 xrdp 登錄、對照控制台裏的實際畫面。常見做法是切到系統自帶的 RDP 客戶端,或單獨開 VNC 頁面,和 DSH 側欄、會話列表割裂開來。

dsh-remote-screen(倉庫 fengasdf/dsh-remote-screen2)在 DSH Web 界面側欄增加「遠程桌面」入口:從已保存的機器列表選一臺,在應用內的可拖動浮窗裏顯示遠端桌面,鼠標鍵盤可直接操作;鏈路經遠端 guacd 橋接 RDP 或 VNC,而不是讓瀏覽器直接說 RDP。

這是什麼

維護者 fengasdf,分類爲 DSH 客戶端插件(package.json 中 dsh.client.platform 爲 web)。一句話:在 DSH Web UI 中通過 xrdp 開 RDP 桌面會話,或通過 VNC 鏡像 Linux 控制台,多窗口可拖放縮放,後端依賴 Apache Guacamole 的 guacd。

當前 package.json 版本爲 0.1.0,許可證 MIT;運行要求 Node >=20,DSH 引擎 >=0.2.0-rc.1 <0.3.0。

核心功能

側欄與浮窗交互

裝好後重載頁面,側欄出現顯示器圖標,進入「遠程桌面」頁面。從列表選機器後,桌面顯示在獨立浮窗中:拖標題欄移動,拖八個邊/角縮放,雙擊標題欄最大化。縮放時遠端畫面會等比適配;資料說明 guacd 0.9.9 / FreeRDP 1.1 不支持連接中動態改分辨率,應儘量保持 1:1,放不下時再縮放。

每臺機器兩個入口

  1. 打開桌面(RDP):經 xrdp 新開一個桌面會話(文檔示例環境配的是 XFCE)。與 VM 控制台不是同一會話。
  2. 鏡像控制台(VNC):經 x11vnc 鏡像控制台當前圖形會話(示例爲 display :1),畫面與 VM 控制台窗口一致,且不需要在鏡像流裏再登錄一次。

多窗口與關閉語義

浮窗掛在根級 shell.overlay,不隨側欄會話切換卸載。可多機並存,每臺一個窗口;再次點同一臺只會置頂。頁面「已打開的桌面」列表記錄窗口打開或已關閉狀態,可顯示窗口或關閉;右擊列表項可選:顯示窗口 / 僅關閉窗口 / 斷開連接。

點浮窗關閉(✕)會先詢問:僅關閉窗口(隱藏,RDP 連接保持)或 斷開連接並關閉(卸載 iframe、斷開 WebSocket、guacd 結束本次 xrdp 會話)。

宿主側組成(便於排錯)

部分 說明
index.js 註冊 /remote-desktop/* 與 /remote-desktop/ws;讀機器列表;探測 RDP/guacd 端口;把瀏覽器 Guacamole 客戶端橋到遠端 guacd
viewer/ 獨立頁面 + guacamole-common-js 客戶端
client.js 側欄條目與主頁面(機器列表、探測狀態、內嵌查看器)

安裝與啓用

在 DSH 所在環境執行官方安裝命令:

dsh plugin add dsh-remote-screen

也可在 dsh-market 的 Discover 中搜索 dsh-remote-screen。安裝後重載頁面(例如瀏覽器控制台執行 location.reload()),側欄應出現遠程桌面入口。

插件以當前 DSH 進程權限運行;安裝前建議閱讀倉庫源碼與 MIT 許可證,確認是否符合你的環境策略。社區目錄 SkillHub 插件頁 與 GitHub 倉庫由社區維護,與 DeepSeek / 幻方無官方從屬關係。

機器列表從哪裏來

按順序讀取,取第一個非空來源:

  1. 若已安裝 dsh-remote,複用 $DSH_HOME/remote-workspaces/machines.json(本插件不讀取其中密碼字段)。
  2. 否則使用本插件的 $DSH_HOME/remote-screen.json,示例:
{
  "machines": [
    {
      "id": "vm1",
      "name": "Build VM",
      "host": "192.168.1.5",
      "username": "dev",
      "rdpPort": 3389,
      "guacdPort": 4822,
      "vncPort": 5900
    }
  ]
}

id、host 必填;rdpPort、guacdPort、vncPort 可省略,默認分別爲 3389、4822、5900。README 註明:本插件沒有單獨的配置項文件時,機器列表可完全來自 dsh-remote 註冊表;端口亦可在機器記錄裏用 rdpPort / guacdPort 覆蓋。

典型用法

1. 在遠端 Linux 上一次性準備

在目標 Ubuntu/Debian 主機上執行倉庫腳本:

curl -fsSL https://raw.githubusercontent.com/fengasdf/dsh-remote-screen2/main/scripts/remote-setup.sh | bash

腳本會安裝 guacd、libguac-client-rdp0、libguac-client-vnc0、x11vnc,將 guacd 監聽改爲 0.0.0.0:4822,並用 x11vnc 把當前控制台會話鏡像到 127.0.0.1:5900。

若只關心 RDP 網關,文檔也給出最小安裝與監聽調整:

sudo apt-get install -y guacd libguac-client-rdp0
sudo sed -i 's/^LISTEN_ADDRESS=.*/LISTEN_ADDRESS=0.0.0.0/' /etc/default/guacd
sudo systemctl restart guacd

鏈路爲:瀏覽器 ⇄ DSH 本機 WebSocket 橋 ⇄ 遠端 guacd:4822 ⇄ 遠端 xrdp:3389(TLS)。

2. 在 DSH 裏連接

  1. 確認機器已出現在側欄「遠程桌面」列表(來源見上一節)。
  2. 需要獨立桌面時點 打開桌面,在浮窗內的 xrdp 登錄畫面輸入賬號密碼(插件頁面不接收、不保存 RDP 密碼)。
  3. 需要與控制台一致的畫面時點 鏡像控制台;遠端須已按文檔運行 x11vnc(控制台會話結束或註銷後 x11vnc 會退出,需重新啓動才能再鏡像)。

鏡像控制台時,文檔示例命令(display 與 Xauthority 路徑需按實際環境改):

sudo apt-get install -y x11vnc libguac-client-vnc0
nohup x11vnc -display :1 -auth /run/user/1000/gdm/Xauthority \
  -localhost -rfbport 5900 -forever -shared -nopw -noxdamage -bg -o /tmp/x11vnc.log

-localhost 表示僅本機可連 5900,供同機 guacd 轉發。

適用場景與注意

適合誰:已在 DSH Web 裏工作或調試、需要頻繁看多臺 Linux 圖形環境,且願意在遠端維護 guacd / xrdp /(可選)x11vnc 的開發者或運維。

安全與網絡

  • /remote-desktop/* 在裸 Web 服務器上精確註冊,不在 /api 下;README 說明其不受瀏覽器登錄 Cookie 保護,主要靠服務監聽地址隔離(默認迴環時僅本機進程可達)。
  • guacd 默認不做認證;若將 4822 暴露在非可信網絡,風險較高。不需要暴露時應綁回 127.0.0.1 並用 SSH 隧道。
  • 宿主只接受已保存機器的 host:port,不按瀏覽器任意查詢串做開放 RDP 代理。

遠端桌面會話

  • xrdp 須能提供 TLS(security_layer=negotiate 且證書可讀),否則 guacd 可能只能使用不加密的 RDP 安全層。
  • 若遠端用戶已在本地圖形登錄(如 GNOME 控制台),同一用戶再開 xrdp 的 GNOME 會話可能立刻退出;文檔建議爲 xrdp 配置獨立桌面(如 XFCE + ~/.xsession 中 exec startxfce4),與控制台會話分離。

已知限制(來自 README)

  • 分辨率在連接時按窗口大小計算一次;改變窗口大小需重新連接。
  • 剪貼板、文件傳輸、聲音未接入。
  • 老舊 guacd(如 Ubuntu 18.04 自帶 0.9.9)下 Guacamole 1.5 客戶端大多可用,個別新指令可能不支持。

結尾

dsh-remote-screen 把 xrdp RDP 與控制台 VNC 鏡像收進 DSH Web UI 的可拖動多窗口裏,機器列表可與 dsh-remote 共用,適合在會話開發流程裏少切工具、多看遠端圖形。

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

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

小夜