RemoteDesk
架构决策(2026-08-15):Flutter 用于 Windows 控制界面;Rust 保持 Agent、 控制服务、协议、WebRTC 与原生视频呈现。远程视频不经过 Dart、Flutter Texture 或 HTTP;全屏会话使用原生 D3D11 呈现。
RemoteDesk 是一套面向个人工作站的 Windows 控制端与 Linux 远程桌面方案。项目不包含 VDI、桌面池或多租户调度,重点是从 Windows 控制端连接现代 Linux 被控端。
产品定位
RemoteDesk 使用原生 Linux Agent 通道:
- Linux 被控端:安装自研 RemoteDesk Linux Agent,支持 Wayland、Xorg 桌面和纯命令行终端。
- Windows 控制端:提供唯一的桌面客户端,Linux 不提供控制端 UI。
+----------------------+
| RemoteDesk Client |
| Flutter control UI |
| Rust native video |
+----------+-----------+
|
WebRTC + DataChannel
|
RemoteDesk Linux Agent
目标能力
以下内容是项目路线目标,不表示当前仓库已经全部实现。实际可运行范围以 实现状态 和 使用指南 为准。
- Linux 连接配置统一管理。
- 原生全屏、动态分辨率、多显示器、音频和剪贴板。
- 远程分辨率支持自动跟随、原始分辨率、720p/1080p/1440p/4K 固定档和自定义尺寸。
- 自研 Linux Agent 支持 Wayland、Xorg 当前会话和无桌面的命令行终端。
- 命令行会话使用 PTY,以指定普通用户运行,不要求图形桌面已登录。
- H.264 默认视频编码,按硬件能力扩展 HEVC 和 AV1。
- Linux 桌面默认要求双端零拷贝:Agent 使用 DMA-BUF 硬件编码,Windows 原生 helper 使用 D3D11 surface 解码与呈现。
- 客户端 GPU 默认自动选择,也支持全局或单主机手动指定。
- 多显示器支持主屏、全部和自定义子集,保留负坐标、混合 DPI 与布局 generation。
- 断线重连、连接质量统计和自适应画质。
- 智能比较直连与 CDN 路径;CDN 模式让两端进入最近 POP,并通过优质骨干网传输。
- 使用系统密钥库保存凭据。
明确不做
- 不提供 Windows RDP 或
mstsc回退通道。 - 发布客户端不包含 JavaScript、Tauri、WebView 或 C# 启动器;远程媒体也不经过 Flutter。
- 不提供 VDI 桌面池、模板克隆和用户调度。
- 不承诺所有 Wayland 合成器均支持无人值守控制。
- 不使用缓存型 CDN 转码或缓存远程桌面内容。
- 首期边缘模式不依赖完整云账号体系,设备权限仍由 Agent 本地保存。
- 不依赖 xrdp、GNOME Remote Desktop 或 KDE KRdp。
- 首个稳定版本不承诺在所有 Wayland 桌面上控制登录界面。
技术基线
| 模块 | 技术 |
|---|---|
| Windows 操作界面 | Flutter、Dart、loopback control-service |
| Linux Agent | Rust、Tokio、PipeWire/Portal/libei、X11、PTY/PAM |
| 媒体 | str0m、GStreamer、平台硬件编解码、纯 Rust Opus |
| Linux 会话显示 | Rust、Media Foundation、D3D11 VideoProcessor 与平台原生 GPU surface |
| 命令行显示 | Rust 原生终端 + WebRTC DataChannel |
| 本地数据 | SQLite |
| 凭据 | Windows Credential Manager |
| 边缘中继 | Rust Rendezvous/Allocator、双 POP TURN、优质骨干网 |
| 发布产物 | Windows 便携 ZIP、Linux DEB/RPM、SHA-256 清单 |
具体依赖版本在进入编码阶段时锁定到当时可用的稳定版本。
仓库规划
RemoteDesk/
├── client/ # Flutter 控制 UI、Rust helpers 与共享 crate
├── agent/ # Rust Linux Agent workspace
├── protocol/ # Protobuf 契约和兼容性测试
├── edge/ # 独立 Edge Presence/Allocator/byte relay
├── packaging/ # Windows、Linux Agent 和 Edge 打包
├── tests/ # 集成和端到端测试
└── docs/
├── architecture.md
└── roadmap.md
设计文档
- 实现状态
- 使用指南
- 总体架构
- Windows 客户端设计
- Linux 被控端设计
- 技术栈规划
- 协议设计
- 安全设计
- 差网络自适应
- CDN 与边缘中继
- 中转服务器部署
- 客户端 GPU 加速
- 在线升级
- M0 技术验证
- 实施路线
- 开发指南
当前代码
本节仅描述当前 Rust workspace;迁移前的 Tauri、React、WebView 和 Hysteria2 文字只保留在历史设计文档中,不属于构建或发布入口。
当前 Windows 发布入口只生成 Flutter 控制端与 Linux 原生会话 helper 的版本化便携 ZIP,以及统一 SHA-256 清单;不生成 MSI,也不依赖 WiX、NuGet 或 .NET 构建链。
当前工程包含 Rust workspace、Flutter Windows 控制界面、回环控制服务、Ed25519 配对、TLS/WSS 信令、WebRTC H.264/RTX/Opus/DataChannel 传输、Linux Agent 的 Wayland/Xorg/PTY/文件会话,以及 Windows 上 Media Foundation H.264 到同 D3D11 device 的 VideoProcessor/swap-chain 原生呈现路径。远程视频只在 Rust 原生进程内流动,不经过 Flutter、Dart 或 HTTP。
Linux 图形的 X11 兼容捕获/输入、GStreamer H.264 WebRTC 发送端和 Windows 原生远端 H.264 接收、解码与呈现已接入源码。Wayland Portal/PipeWire DMA-BUF、EIS 输入、音频和剪贴板路径仍需在真实 GNOME、KDE 和 Xorg 主机上完成端到端验证;在验证完成前不得将运行时状态标记为端到端零拷贝。