前言¶
用 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,放不下時再縮放。
每臺機器兩個入口¶
- 打開桌面(RDP):經 xrdp 新開一個桌面會話(文檔示例環境配的是 XFCE)。與 VM 控制台不是同一會話。
- 鏡像控制台(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 / 幻方無官方從屬關係。
機器列表從哪裏來¶
按順序讀取,取第一個非空來源:
- 若已安裝 dsh-remote,複用
$DSH_HOME/remote-workspaces/machines.json(本插件不讀取其中密碼字段)。 - 否則使用本插件的
$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 裏連接¶
- 確認機器已出現在側欄「遠程桌面」列表(來源見上一節)。
- 需要獨立桌面時點 打開桌面,在浮窗內的 xrdp 登錄畫面輸入賬號密碼(插件頁面不接收、不保存 RDP 密碼)。
- 需要與控制台一致的畫面時點 鏡像控制台;遠端須已按文檔運行 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 共用,適合在會話開發流程裏少切工具、多看遠端圖形。