RemoteDesk

架构决策(2026-08-15):Flutter 用于 Windows 控制界面;Rust 保持 Agent、 控制服务、协议、WebRTC 与原生视频呈现。远程视频不经过 Dart、Flutter Texture 或 HTTP;全屏会话使用原生 D3D11 呈现。

该边界描述 Windows 控制 Linux 的主客户端。独立 Flutter Android 控制端也支持 Windows AgentTCP 只负责强制 TOTP 和有界 SDP/ICE 信令,H.264 视频、控制与输入 使用 WebRTC DTLS-SRTP/SCTPWebRTC 不可用时回退 TCP BGRA+zlib。该直连信令无需 TLS 证书,但缺少主机身份认证,只应运行在可信局域网、VPN 或 AnyTLS 隧道内。

RemoteDesk 是一套面向个人工作站的远程桌面方案,重点是 Windows 控制端连接现代 Linux 被控端,并提供独立 Flutter Android 控制端连接 Windows Agent。项目不包含 VDI、桌面池或多租户调度。

产品定位

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

设计文档

当前代码

本节仅描述当前 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 主机上完成端到端验证;在验证完成前不得将运行时状态标记为端到端零拷贝。

S
Description
No description provided
Readme
1.3 MiB
Languages
Rust 85.1%
Dart 10.3%
PowerShell 1.6%
Shell 1.3%
C++ 0.9%
Other 0.8%