# RemoteDesk 实施路线 路线按风险优先,而不是按界面完成度排序。最先验证 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 `