RustDesk 1.4.9 实测:自建远程桌面的 Rust 方案到底值不值得用
一款可自行托管的开源远程桌面应用。
秒懂
- 它是什么?
- RustDesk 是一款用 Rust 编写的自托管远程桌面软件,支持完全自建 rendezvous/relay 服务器。本文基于其仓库与文档,拆解它的架构、构建流程、许可证约束,并指出它在哪些场景下是合适的选择。
- 适合谁用?
- RustDesk 适合那些对数据主权有硬性要求、愿意投入时间维护自建服务器的团队,尤其是中小型 IT 部门或隐私敏感组织。它不适合希望开箱即用、不愿处理构建依赖或无法接受 AGPL-3.0 传染性的商业闭源项目。
- 能商用吗?
- 可以,但条件严格。AGPL-3.0 是网络 copyleft 许可证:如果别人通过网络使用你修改过的版本(例如作为托管服务),你必须以同一许可证向他们提供源代码。
- 还在维护吗?
- 在维护。仓库在最近一天内有新的提交。
- 用什么语言写的?
- 主要是 Rust(依据 GitHub 的语言统计)。
以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。
开源项目深度解析
它解决什么问题:远程桌面里的数据主权缺口
远程桌面工具并不少,TeamViewer、AnyDesk 都成熟,但它们默认把连接握手和中继流量交给第三方服务器。对某些企业来说,这意味着屏幕内容、剪贴板文本、甚至键盘输入都可能经过别人的基础设施。RustDesk 的定位很直接:用 Rust 写一个远程桌面,允许你完全自建 rendezvous 服务器和 relay 服务器,数据路径上不再有外部中间人。仓库描述里明确写着“You have full control of your data, with no concerns about security”,这句话是它的核心卖点。它面向的是两类人:一是对数据隐私有合规要求的组织,二是喜欢自己掌控基础设施的技术人员。RustDesk 不是第一个做自托管远程桌面的,但它是少数用 Rust 实现、且把自建服务器作为一等公民来设计的项目。
架构拆解:rendezvous、relay 与客户端之间的数据流
仓库没有给出完整的架构图,但从 README 和项目结构能拼出大致轮廓。RustDesk 的客户端负责采集屏幕、编码视频、处理输入,而连接建立依赖 rendezvous 服务器,它只做信令,帮两端找到对方。如果两端无法直接建立 P2P 连接,流量会走 relay 服务器中转。官方提供了默认的 rendezvous/relay 服务,也允许你自建,甚至提供了 rustdesk-server-demo 这个参考实现,说明协议层是开放的。客户端用 Flutter 或 Sciter 做 GUI,Sciter 已标记为 deprecated,但 README 的构建教程仍以 Sciter 为主,理由是“easier and more friendly to start”。这意味着当前的开发重心在 Flutter 版本,但 Sciter 路径依然是新手入门的最短路线。视频编码依赖 libvpx、libyuv、opus 和 aom,这些库通过 vcpkg 管理,构建时会被静态链接进二进制。整体数据流是:客户端 A 通过 rendezvous 找到客户端 B,尝试打洞建立 P2P,失败则切换到 relay。这个设计并不新颖,但它的价值在于你可以把 rendezvous 和 relay 都部署在自己的机器上,彻底绕开第三方。
构建的真实成本:vcpkg、Sciter 动态库与平台差异
README 给出的构建步骤相当具体,但也很繁琐。以 Linux 为例,你需要先安装一堆系统包,比如 nasm、yasm、libgtk-3-dev、libxdo-dev,然后克隆 vcpkg 并锁定到 2023.04.15 这个提交。接着用 vcpkg 安装 libvpx、libyuv、opus、aom,再下载 Sciter 的动态库放到 target/debug 目录,最后才能跑 cargo run。Fedora 上还有额外的 libvpx 修复步骤,要手动改 Makefile 加 -fPIC 标志,这显然是个坑。Docker 构建可以避开一部分环境问题,但第一次构建会拉取大量依赖,README 也承认首次构建较慢。如果你只想快速体验,直接下载 release 二进制是更现实的选择,仓库提供了 nightly 和稳定版 1.4.9。但如果你想改代码或定制功能,就必须面对这套构建链。我的判断是:RustDesk 的构建复杂度明显高于普通 Go 或 Python 项目,它更适合有 Rust 经验的开发者,而不是临时起意的用户。
许可证的现实约束:AGPL-3.0 不是可以忽略的细节
RustDesk 采用 AGPL-3.0 许可证,这一点在仓库元数据里写得很清楚。AGPL 的核心要求是:如果你修改了代码并通过网络提供服务,你必须把修改后的源码提供给用户。对于远程桌面这种典型网络服务,这个条款意味着如果你基于 RustDesk 搭建公共服务,你可能需要公开你的改动。对于内部自用,影响相对较小,但如果你把 RustDesk 集成进商业产品,AGPL 的传染性会让不少法务团队皱眉。仓库本身也附带了一个 misuse disclaimer,声明开发者不纵容非法使用,这更多是法律自我保护。我的看法是:RustDesk 的许可证决定了它适合那些愿意开源自己改动的组织,或者只做内部部署、不分发修改的组织。如果你需要更宽松的许可证,比如 MIT 或 Apache-2.0,那 RustDesk 不是一个合适的基础。
维护与升级成本:nightly 节奏和文档的碎片化
从 release 记录看,RustDesk 的发布节奏相当快,1.4.8 到 1.4.9 只隔了半个月,nightly 更是每天都在更新。这种节奏对普通用户意味着频繁的版本升级,但好处是 bug 修复和新功能落地快。坏处是,如果你自建服务器,你需要跟上客户端和服务端的兼容性,因为新旧版本之间的协议可能变化。文档方面,README 提供了详细构建步骤,但完整文档在 rustdesk.com 和 doc.rustdesk.com,仓库里只留了链接。翻译工作还在进行中,中文版 README 存在,但可能滞后于英文版。维护成本还体现在依赖上:Sciter 已弃用,未来 Flutter 会成为唯一 GUI,这意味着如果你现在基于 Sciter 做定制,后续可能需要迁移。整体看,RustDesk 的维护成本不低,适合有持续投入意愿的团队。
替代方案的真实差异:TeamViewer 与自建服务的取舍
最直接的替代是 TeamViewer 和 AnyDesk,它们开箱即用,无需任何服务器配置,但代价是你必须信任它们的云基础设施。另一个开源替代是 Apache Guacamole,它走的是浏览器访问、服务端代理的模式,与 RustDesk 的客户端-客户端模式完全不同。Guacamole 需要部署在服务器上,客户端只需浏览器,适合需要从任意设备访问的场景,但它的视频编码和交互延迟通常不如原生客户端。RustDesk 的优势在于 P2P 优先,延迟可能更低,但你需要安装客户端。如果你追求完全自建且不想碰 AGPL,可以看看 TigerVNC 或 x11vnc,它们基于 VNC 协议,许可证更宽松,但安全性和现代功能(比如剪贴板双向同步)不如 RustDesk 完善。我的建议是:如果你的需求是跨平台、低延迟、且能接受客户端安装,RustDesk 是合理选择;如果你需要零安装的浏览器访问,Guacamole 更合适。
一个明确的局限:构建依赖的脆弱性和平台碎片化
README 里的构建步骤暴露了一个问题:依赖链非常脆弱。vcpkg 需要锁定到特定提交,Fedora 需要手动修补 libvpx,Sciter 动态库需要单独下载。这些步骤一旦上游库更新,就可能失效。仓库的 CI 只覆盖 Flutter 构建,Sciter 构建没有自动化保障,这意味着 Sciter 路径可能随时出问题。另一个局限是,RustDesk 的服务器端组件(如 rendezvous/relay)没有包含在主仓库里,你需要单独部署 rustdesk-server 或参考 demo 实现,这增加了运维复杂度。如果你只想在内网用,可以只跑客户端,但那样就失去了远程连接的意义。总之,RustDesk 不是一个零维护的工具,它的灵活性是以构建和部署的复杂度为代价的。
编辑结论
RustDesk 适合那些对数据主权有硬性要求、愿意投入时间维护自建服务器的团队,尤其是中小型 IT 部门或隐私敏感组织。它不适合希望开箱即用、不愿处理构建依赖或无法接受 AGPL-3.0 传染性的商业闭源项目。在采用前,务必先验证三件事:你的网络环境能否稳定访问自建的 rendezvous/relay 服务器,你的团队是否有能力处理 Rust 构建链和 vcpkg 依赖,以及你是否已经咨询过法律顾问关于 AGPL 对分发和修改的影响。如果你需要的是快速部署、无需运维的远程支持工具,RustDesk 的复杂度可能高于你的需求,商业方案或更简单的开源替代品会更合适。最终判断:RustDesk 的价值在于可完全掌控数据流,但代价是运维和许可证合规的持续成本。
社区笔记