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
193 lines
8.6 KiB
Markdown
193 lines
8.6 KiB
Markdown
# 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` 后才能连接。
|
||
- 形成技术验证报告并确定最终媒体库组合。
|
||
|
||
## M1:Windows RDP MVP
|
||
|
||
目标:交付可日常使用的 Windows 远程客户端。
|
||
|
||
- 主机列表、新建/编辑/删除配置。
|
||
- 系统密钥库保存凭据。
|
||
- NLA/TLS、证书指纹确认。
|
||
- 全屏、本地缩放、自动跟随、固定/自定义分辨率和剪贴板。
|
||
- 音频播放和基础多显示器。
|
||
- 断线原因、手动重连和有限自动重连。
|
||
- Windows 客户端安装包和基础诊断日志。
|
||
|
||
验收标准:
|
||
|
||
- 可连接 Windows 11 Pro 和 Windows Server。
|
||
- 密码不出现在 SQLite、日志或导出配置中。
|
||
- 证书变化会阻断自动连接。
|
||
- 中文键盘与剪贴板通过专项测试。
|
||
|
||
## M2:Linux 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。
|
||
|
||
## M3:Linux 桌面 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% 突发丢包能自动降档并在恢复后稳定升档。
|
||
|
||
## M4:Linux 命令行
|
||
|
||
目标:支持没有图形环境的 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 小时无持续资源增长。
|
||
- 所有重定向能力均可按主机独立关闭。
|
||
|
||
## M6:CDN 边缘中继
|
||
|
||
目标:在直连不可用或质量不足时,通过边缘 TURN POP 保持远程会话。
|
||
|
||
- Rust Rendezvous Gateway 和 Relay Allocator。
|
||
- Agent 主动出站控制连接,无云账号设备签名路由。
|
||
- 单 POP coturn:UDP、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/NLA,UDP 不被封装进 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 选择和故障切换。
|