前言¶
用 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 共用,适合在会话开发流程里少切工具、多看远端图形。