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

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

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

小夜