Page.startScreencast + Input.dispatchMouseEvent),只能投射 Chromium 内部页面。
要扩展到「任意软件 + 三平台」,本质上要做的是 OS 级 KVM(Keyboard / Video / Mouse)。
但 iOS Simulator 测试是一个独立子问题——它有更精准的自动化路径(simctl + Appium/WDA),不应被强行塞进通用 KVM 方案。
用户的核心场景是「代码由 AI 写,用户在 Web 端点一点、测一测 iOS App」。 这不需要通用桌面 KVM——iOS Simulator 有专用的自动化接口,比像素级鼠标注入更精准、更可控。
xcrun simctl# 列出设备
xcrun simctl list devices
# 启动模拟器
xcrun simctl boot <udid>
# 安装 & 运行 App
xcrun simctl install <udid> /path/to/MyApp.app
xcrun simctl launch <udid> com.example.MyApp
# 截图 & 录屏
xcrun simctl io <udid> screenshot out.png
xcrun simctl io <udid> recordVideo out.mp4
# 清理
xcrun simctl terminate <udid> com.example.MyApp
xcrun simctl erase <udid>
Appium XCUITest Driver 基于 Apple 官方 XCTest 框架,通过 WebDriverAgent (WDA) 执行操作:
tapswipesendKeys比 OS 级鼠标注入(CGEvent)更稳定——WDA 直接走 XCTest 框架,不受 TCC 权限限制。
| 阶段 | 方案 | 延迟 | 工程量 |
|---|---|---|---|
| MVP | 定频截图流:WDA screenshot / simctl io screenshot,压 JPEG 走现有 WS |
200-500ms | 低 |
| 体验升级 | ScreenCaptureKit 捕获 Simulator.app 窗口 → H.264 → WebRTC | <100ms | 中 |
| 兜底 | macOS 通用 KVM 控制整个桌面(方案 A/C) | 取决于方案 | — |
被控端跑平台原生 VNC server,Go 后端把 RFB 协议翻译成现有 WS 协议送给前端。定位:内部 demo/PoC,验证 Web UI 坐标映射、缩放、键鼠事件、会话生命周期等产品链路。
| 平台 | VNC server | 输入注入 | 抓屏 | 备注 |
|---|---|---|---|---|
| Linux (X11) | x11vnc(控制当前桌面) | XTEST | XGetImage / XShm | TigerVNC 偏虚拟 session,控制物理桌面用 x11vnc |
| Linux (Wayland) | gnome-remote-desktop / KDE RDP | RemoteDesktop portal | PipeWire ScreenCast portal | wayvnc 仅限 wlroots compositor,不通用 |
| Windows | TightVNC / UltraVNC | SendInput | Mirror Driver / DXGI DD / WGC | UAC/锁屏/管理员窗口受 UIPI 限制 |
| macOS | 系统自带「屏幕共享」 | CGEvent | CGDisplayStream | 需 Screen Recording + Accessibility TCC 权限 |
BrowserView.tsx 的 JPEG-MJPEG + 信用流 WS,前端几乎不改Apache Guacamole 是协议转换网关,不是抓屏 agent。架构:浏览器 → Guacamole Web App (Java) → guacd (C) → 连接目标机上已有的 RDP/VNC/SSH server。
注意:noVNC 和 Guacamole 是两个独立方案,不应混为一谈:
| 路线 | 适用场景 | 融合成本 |
|---|---|---|
| noVNC 直连 | 只需 VNC 协议,轻量嵌入 | 低(一个 JS 库 + WebSocket proxy) |
| Guacamole 全套 | 企业远程桌面网关、多协议、审计录制 | 高(Java Web App + guacd + 部署运维) |
写轻量 Go / Rust agent,每平台用各自 OS API 抓屏/注入,编码后走 WebRTC 发到浏览器。建议先跑通单平台(macOS 或 Windows),再扩展。
| 平台 | 抓屏 | 输入注入 | 硬件编码 |
|---|---|---|---|
| Linux (X11) | XShm / XGetImage | XTest | VAAPI |
| Linux (Wayland) | xdg-desktop-portal ScreenCast + PipeWire | xdg-desktop-portal RemoteDesktop + libei | VAAPI |
| Windows | DXGI Desktop Duplication / Windows Graphics Capture | SendInput(受 UIPI 限制) | MediaFoundation / NVENC / AMF / QuickSync |
| macOS | ScreenCaptureKit(12.3+)/ CGDisplayStream(旧版兜底) | CGEvent(需 Accessibility TCC) | VideoToolbox |
uiAccess=true 需要签名 + 受信路径安装。DXGI 受 DRM/protected content 限制uinput 需设备权限且不等于"对当前桌面注入"DISPLAY + Xauthority 即可全局控制,需做好网络隔离核心问题:没有一个项目同时满足"三平台原生捕获 + WebRTC 推流到浏览器 + 浏览器端输入注入"。但各项目在不同维度上非常成熟,可以直接复用或作为技术参照。
| 技术栈 | Go (后端, Pion WebRTC) + TypeScript/Vue.js (Web 客户端) + C (X11/XTEST via CGo) |
|---|---|
| 平台 | Linux only(Docker 容器,amd64/arm64) |
| 抓屏 | GStreamer ximagesrc 捕获 Docker 内 Xvfb 虚拟桌面——不是宿主机物理桌面 |
| 输入 | XTEST(XTestFakeKeyEvent/XTestFakeButtonEvent)+ 自研 xf86-input-neko 触屏驱动 |
| 编码 | VP8/VP9/H.264(x264)/AV1。硬编:NVENC、VAAPI(有专用 Docker 镜像) |
| Web 客户端 | 完整 Vue.js SPA,全屏、剪贴板同步、多用户共享/锁定控制,可 iframe 嵌入 |
| 维护 | 活跃,v3.1.0 (2026-04) |
价值:最成熟的 WebRTC-to-Browser 方案。虽然捕获的是 Docker 虚拟桌面而非物理桌面,但如果目标是"在 Docker 里跑应用然后远程操作",可以直接用。Go + Pion 架构与本项目技术栈高度一致,Web 客户端代码可直接参考。
局限:不适合控制用户物理桌面或 macOS/Windows 应用。
| 技术栈 | Python (43%) + JavaScript/TypeScript (42%),GStreamer 核心 |
|---|---|
| 平台 | Linux only(Ubuntu/CentOS,Wayland WIP) |
| 抓屏 | GStreamer ximagesrc (X11)。Wayland 支持正在集成(LinuxServer.io Smithay compositor) |
| 输入 | pynput + Xlib (X11), xdotool, Wayland 下 wtype (合并中) |
| 编码 | 15 种编码器:NVENC/VAAPI/Vulkan Video (硬编) + x264/x265/VP8/VP9/SVT-AV1 (软编)。支持零拷贝 GPU 编码 |
| Web 客户端 | gst-web——HTML5/JS,明确设计为可嵌入任何 Web 页面,类 noVNC 形态但走 WebRTC |
| 维护 | 活跃,Google 工程师 2019 年创建,用于学术/HPC 环境 |
价值:架构最干净的 WebRTC 桌面投屏方案。Web 客户端可嵌入、编码器选择最丰富、MPL-2.0 许可友好。如果只做 Linux 桌面投屏,可以直接集成。
局限:Linux only,Python 技术栈与本项目不一致,社区较小。
| 技术栈 | C++ (98%) |
|---|---|
| 平台 | Windows + Linux + macOS |
| 协议 | MiniRTC——自研类 WebRTC 库,实现 RFC5245 NAT 穿透 + SRTP + H.264/AV1 + Opus |
| Web 客户端 | 有,浏览器可直接操控远程桌面 |
| 维护 | 活跃,v1.3.6 (2026-05),33 个 release |
价值:唯一跨三平台且有 Web 客户端的方案。轻量 RustDesk 替代品。
局限:非标准 WebRTC(MiniRTC),C++ 技术栈,社区相对小。
5.1k stars · C++/C · Linux only。名字叫 VNC 但不走 RFB 协议,有 WebRTC UDP 模式。WASM + WebGL 渲染,比传统 VNC 帧率提升 150%+。
Mixed License · 驱动 Kasm Workspaces
657 stars · Rust · Win + macOS。用 WGC (Win) / ScreenCaptureKit (macOS) 原生捕获,WebRTC P2P。60fps@4K,110ms 延迟。
早期阶段 · 无 Linux
| 技术栈 | C++ (74%),Vue.js 配置 UI |
|---|---|
| 平台 | Windows + Linux + macOS + FreeBSD |
| 抓屏 | Win: DXGI DD + WGC (beta)。Linux: KMS/NvFBC/wlr-screencopy/KWin/X11/XCB/PipeWire/XDG Portal。macOS: AVCaptureScreen |
| 输入 | Win: SendInput + ViGEmBus (手柄)。Linux: uinput/XTest/inputtino。macOS: CGEventPost |
| 编码 | H.264/HEVC/AV1 · NVENC/AMF/QSV/VAAPI/Vulkan Video/VideoToolbox 全覆盖,业界最完整 |
| 协议 | Moonlight 协议(RTSP + RTP/UDP + FEC),非 WebRTC |
| Web 客户端 | 原生无。第三方 moonlight-web-stream (v2.10.0, 2026-05) 可桥接为 WebRTC → 浏览器 |
| 维护 | 极活跃,日均提交 |
价值:捕获 + 编码部分是开源界的标杆,三平台所有 GPU 厂商的硬编全覆盖。如果自研 Agent,应以 Sunshine 为技术参照。
最实用的组合方案:Sunshine 负责原生捕获和硬编 → moonlight-web-stream 桥接到 WebRTC → 浏览器显示和输入。代价是 GPL 许可 + 两个进程的集成复杂度。
| 技术栈 | Rust (核心) + Flutter/Dart (UI) + WASM (Web) |
|---|---|
| 平台 | Windows / Linux / macOS / Android(Host + Viewer)。iOS / Web(Viewer only) |
| 抓屏 | Win: DXGI。Linux X11: XGetImage/SHM。Linux Wayland: PipeWire。macOS: ScreenCaptureKit/CGDisplayStream |
| 编码 | VP8/VP9 (libvpx) + H.264/H.265 (hwcodec)。NVENC/QSV/AMF/VAAPI/VideoToolbox |
| 协议 | 自有协议(hbbs rendezvous + hbbr relay,UDP 打洞,Protobuf)。非 WebRTC |
| Web 客户端 | 有但受限——仅 WebSocket(无 P2P),延迟高,剪贴板/音频/文件传输有限 |
| 维护 | 极活跃,最大社区 |
价值:社区最大、平台最全的远程桌面。子 crate(scrap、hwcodec)可独立使用做抓屏/编码。
局限:AGPL 许可、Web 客户端体验差、不适合深度嵌入。
2k stars · C++ · MIT · Linux Docker。自研 headless Wayland compositor + Moonlight 协议。不捕获已有桌面,按需创建虚拟桌面。inputtino 库与 Sunshine 共享。
MIT · 多用户隔离游戏串流
9.3k stars · Rust · AGPL · Win/Linux/macOS。WebSocket + MSE(非 WebRTC),用于平板当手绘板。Linux 触控笔/压感最好。主项目半维护,社区 fork (WeylusCommunityEdition) 更活跃。
AGPL · 半维护
21k stars · Electron · WebRTC。跨平台第二屏投屏。仅观看,无输入注入。
View-only
Android 设备显示与控制。如扩展到 Android 测试,可结合 Appium UIAutomator2。
Apache 2.0 · Android only
商业参照(体验/权限/延迟指标):Parsec、AnyDesk、TeamViewer、Chrome Remote Desktop、Microsoft RDP
不是 A → C 线性过渡,而是按会话类型独立演进:
Phase 0 — 保持现状
Web 页面会话继续用 CDP / Playwright screencast。已经跑通,不动。
Phase 1 — iOS Simulator MVP(最高优先级)
simctl 管生命周期 + Appium/WDA 做输入 + 截图流复用现有 WS。
这最贴近「AI 写代码、用户测试」的核心需求,最快产生业务价值。
前端新增 SimulatorView.tsx,渲染截图 + 发送坐标事件。
Phase 2 — 通用桌面 PoC
VNC bridge 支持 X11 / macOS / Windows 基础桌面。明确不承诺 Wayland 完整体验。
新增 DesktopView.tsx + Go RFB bridge。
Phase 3 — iOS Simulator 体验升级
ScreenCaptureKit 捕获 Simulator.app 窗口 → H.264 → WebRTC 视频。
输入仍走 WDA(比 CGEvent 稳定)。延迟从 200-500ms 降到 <100ms。
Phase 4 — 通用桌面 WebRTC 投屏(按需,三条路径选一)
路径 A(集成):Sunshine + moonlight-web-stream 桥接。捕获/编码能力最强,但 GPL 许可 + 双进程集成。
路径 B(嵌入):参考 neko(Go + Pion)架构自研轻量 agent,先跑通 macOS(ScreenCaptureKit + VideoToolbox + CGEvent),再扩展。
路径 C(Linux 快速):直接集成 selkies-gstreamer 的 gst-web 客户端,Linux 场景开箱即用。
Phase 5 — 企业网关(可选)
企业远程桌面/多协议网关需求强时,引入 Guacamole 作为独立 backend,不强行塞进自研 Agent 路线。