Files
曾志威 19a8e03a83
ci / rust (push) Canceled after 0s
ci / web (push) Canceled after 0s
ci / package-preview (push) Canceled after 0s
ci / package-installer (push) Canceled after 0s
ci / linux-agent (push) Canceled after 0s
ci / edge-service (push) Canceled after 0s
ci / coturn-pop (push) Canceled after 0s
ci / package-windows-host (push) Canceled after 0s
Document all-Rust migration and extend native media stack
2026-08-14 14:31:57 +08:00

193 lines
8.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# RemoteDesk 实施路线
> 全 Rust 架构迁移的当前执行顺序和验收标准见
> [全 Rust 架构迁移计划](all-rust-migration.md)。该计划依据
> [ADR 0001](adr/0001-all-rust-runtime.md),优先于下文旧版里程碑中的
> Tauri、WebView、Go、Hysteria2 和兼容模式描述。
路线按风险优先,而不是按界面完成度排序。最先验证 Agent 与客户端原生 helper 的双端零拷贝、IronRDP、Wayland Portal、Xorg DRI3、PTY 和差网络自适应等核心技术。
## M0:技术验证
目标:确认架构可以落地,不制作完整产品界面。
九项独立实验、通过标准和回退决策见 [M0 技术验证计划](m0-validation.md)。
- 建立 Tauri/React Client、统一 Rust workspace 和 Linux Agent。
- 验证 native-video helper 的 D3D11 解码、surface 和呈现零拷贝。
- RDP viewer 已完成安全 Named Pipe、Job Object 和握手失败诊断源码接线;继续完成 Windows 编译/伪造客户端/控制服务崩溃验收,以及 native-video/Tauri 的同类运行时接入。
- 验证自动跟随、固定/自定义分辨率、动态切换、键鼠和剪贴板。
- 在 GNOME Wayland 中通过 Portal 获取 PipeWire 画面。
- 通过 libei/Portal 发送输入。
- 在 Xorg 中通过 XComposite/DRI3/XDamage 零拷贝获取画面并通过 XTest 发送输入。
- 在无桌面 Linux 中创建降权 PTY,并由 xterm.js 正确显示 UTF-8 终端。
- 验证 H.264 硬件编码、解码和 WebRTC 直连。
- 验证 Wayland DMA-BUF 到硬件编码器、原生 D3D11 解码到呈现的零拷贝路径。
- 验证 1%~15% 随机/突发丢包下的码率、帧率和分辨率调整。
- 测量 1080p60 下的复制次数、CPU/GPU 占用和延迟。
验收标准:
- Windows RDP 会话可连续运行 2 小时,无崩溃和明显内存增长。
- IronRDP 完成 NLA、动态分辨率、剪贴板和 UDP multitransport 能力报告。
- GNOME 当前会话可在用户授权后显示并控制。
- Xorg 当前会话可显示并完成基础键鼠控制。
- 无桌面 Linux 可创建普通用户 PTY,退出后无残留进程。
- 输入通道不被视频编码阻塞。
- WebView2 crash 不终止主程序,helper crash 不影响其他会话。
- 默认 Linux 图形会话只有 Agent/client 两端均验证 `zero_copy` 后才能连接。
- 形成技术验证报告并确定最终媒体库组合。
## M1Windows RDP MVP
目标:交付可日常使用的 Windows 远程客户端。
- 主机列表、新建/编辑/删除配置。
- 系统密钥库保存凭据。
- NLA/TLS、证书指纹确认。
- 全屏、本地缩放、自动跟随、固定/自定义分辨率和剪贴板。
- 音频播放和基础多显示器。
- 断线原因、手动重连和有限自动重连。
- Windows 客户端安装包和基础诊断日志。
验收标准:
- 可连接 Windows 11 Pro 和 Windows Server。
- 密码不出现在 SQLite、日志或导出配置中。
- 证书变化会阻断自动连接。
- 中文键盘与剪贴板通过专项测试。
## M2Linux Agent 基础
目标:建立完全自研的 Linux 被控端,不依赖任何 Linux RDP 服务。
- `remotedesk-agentd` systemd 系统服务。
- `remotedesk-agent-session` 用户会话服务。
- `remotedesk-shell-session` 降权终端会话进程。
- Unix Socket IPC、进程身份校验和版本握手。
- 一次性配对码、设备公钥、授权列表和撤销。
- Agent 能力、桌面类型和 Portal 支持检测。
- Windows 客户端与 Agent 的 TLS WebSocket 信令。
验收标准:
- 系统服务不读取或处理桌面画面和剪贴板。
- 未配对客户端无法创建会话。
- 至少两种主流发行版完成安装、升级和卸载测试。
- 不安装或调用 xrdp、GNOME Remote Desktop、KRdp。
## M3Linux 桌面 Agent
目标:通过自研 Agent 控制 Wayland 和 Xorg 当前用户会话。
- Agent 配对、设备密钥和撤销。
- Portal/PipeWire 捕获与 libei 输入。
- XComposite/DRI3/XDamage 捕获、XRandR 显示器和 XTest 输入;XShm 仅显式兼容模式。
- H.264/Opus WebRTC 会话。
- Native Video 默认 D3D11 零拷贝渲染,WebView2 `<video>` 仅显式兼容模式。
- Wayland/Xorg Agent 与 Windows 客户端默认双端严格零拷贝,非零拷贝路径不自动回退。
- 自适应分辨率、帧率和码率。
- 分辨率菜单、主机级保存、锁定策略,并保证 Linux 不改变实体显示模式。
- TWCC/GCC 反馈、NACK/RTX、PLI 和关键帧恢复。
- 输入/音频优先,严重丢包时限制文件与剪贴板流量。
- 文本剪贴板、会话通知和用户主动终止。
- Linux 被控端用户级 Agent 安装包,不包含客户端 UI。
验收标准:
- GNOME、KDE 各完成一次自研 Agent 的 Wayland Portal 模式端到端验证。
- 至少一个 Xorg DRI3 桌面完成零拷贝 1080p60、输入和分辨率变化验证。
- 用户拒绝授权时不会降级为隐蔽捕获。
- 1080p60 可稳定运行 4 小时。
- Wayland DMA-BUF、Xorg DRI3 和客户端 D3D11 均由 tracer/perf/ETW/驱动指标验证零拷贝。
- 配对撤销后旧客户端无法重连。
- 5% 丢包不主动断开,10% 突发丢包能自动降档并在恢复后稳定升档。
## M4Linux 命令行
目标:支持没有图形环境的 Linux 被控端。
- 配对权限中增加独立的终端权限。
- PAM 会话、目标 UID/GID 降权和 PTY 生命周期。
- xterm.js、UTF-8、ANSI、窗口尺寸和信号。
- 断线宽限期、会话恢复和有限输出缓冲。
- shell、工作目录和环境白名单。
- sudo 交互兼容,但不绕过系统提权策略。
验收标准:
- 无桌面 Debian/Ubuntu Server 可以被 Windows 客户端控制。
- 命令进程以目标普通用户运行,不能直接创建 root Shell。
- 中文、颜色、全屏终端程序和窗口缩放通过测试。
- 客户端撤销终端权限后不能创建或恢复终端会话。
## M5:体验和性能
目标:从“能连接”提升到稳定的日常工具。
- GPU 纹理路径和脏矩形渲染。
- GPU 默认自动选择、全局手动选择和单主机覆盖。
- 手动 Linux GPU 自动切换 Native Video Helper。
- HEVC/AV1 能力协商。
- 多显示器与 HiDPI 完善。
- 麦克风、图片剪贴板和可控文件传输。
- 质量预设、实时统计和诊断包。
- 网络质量状态、码率阶梯、恢复迟滞和手动质量上限。
- 崩溃恢复、更新检查和依赖 SBOM。
验收标准:
- 4K 办公场景可以使用硬件编解码。
- 会话运行 8 小时无持续资源增长。
- 所有重定向能力均可按主机独立关闭。
## M6CDN 边缘中继
目标:在直连不可用或质量不足时,通过边缘 TURN POP 保持远程会话。
- Rust Rendezvous Gateway 和 Relay Allocator。
- Agent 主动出站控制连接,无云账号设备签名路由。
- 单 POP coturnUDP、TCP、TLS 443。
- 短期、限 session/POP/配额的 TURN credential。
- Direct -> TURN ICE 选择与明确诊断。
- 双端独立 POP 探测、优质骨干评分和 Dual Edge 路径。
- 智能优选、直连优先和 CDN 优先策略。
- 备用 POP 和 ICE restart。
- Windows RDP 透明 L4 Edge Connector 与 TCP/UDP 分流。
- 中继容量、流量成本、限速和 DDoS 指标。
- 签名发布物静态 CDN。
验收标准:
- Direct 可用时不产生 Relay 流量。
- Direct 可用但质量更差时可以选择 Dual Edge 骨干路径。
- 禁止 UDP 后可回退 TURN TLS 443。
- 主 POP 故障后现有 Session ID 可恢复到备用 POP。
- Relay 无法解密媒体和 DataChannel。
- RDP Edge 不终止目标 Windows TLS/NLAUDP 不被封装进 TCP。
- 控制面短时故障不影响已建立会话。
- 过期或跨 session TURN credential 被拒绝。
## 后续评估项
以下能力不进入首个稳定版本:
- 通用 Linux 图形桌面无人值守 Agent。
- 登录界面和系统锁屏控制。
- 完整云账号与跨设备配置同步。
- 移动端客户端。
- 会话录制。
- 多用户管理和集中策略。
- 游戏专用串流模式。
其中“通用 Linux 图形桌面无人值守”必须先完成针对目标发行版和合成器的安全设计,不能简单通过 root 权限绕过 Wayland。纯命令行终端不受这一图形限制,但仍必须经过设备授权和普通用户降权。
## 建议的首轮开发顺序
1. 建立最小 Tauri/WebView2 + Rust helper 技术验证工程。
2. 完成 Windows RDP MVP,稳定会话状态机和安全存储。
3. 建立 Linux Agent 系统服务、桌面会话、终端会话、配对和信令骨架。
4. 完成 Wayland 与 Xorg 桌面通道。
5. 完成 PTY 命令行通道和 Windows 终端控件。
6. 完成单 POP 边缘中继,再扩展双 POP 选择和故障切换。