首页
/ RustDesk 源码构建指南:vcpkg 依赖、Linux 发行版安装与 Docker 容器化构建

RustDesk 源码构建指南:vcpkg 依赖、Linux 发行版安装与 Docker 容器化构建

2026-09-03 16:50:29作者:毕习沙Eudora

本篇以 RustDesk 仓库的芬兰语官方 README(docs/README-FI.md)为骨架,系统梳理该自托管远程桌面软件的完整构建链路:sciter 图形库与 vcpkg 媒体编解码栈(libvpx/libyuv/opus/aom)如何就位、各 Linux 发行版的依赖安装命令、Fedora 上 libvpx 的 -fPIC 修补方法,以及基于 Dockerfileentrypoint.sh 的容器化构建流程。读完本文,你可以从零开始在本机或 Docker 中编译出可运行的 rustdesk 二进制。

版本与适用前提

  • 当前仓库版本为 1.4.9,要求 Rust 工具链版本不低于 1.75(rust-version = "1.75",见 Cargo.toml 第 3~9 行)。
  • 桌面版使用 sciter 作为图形界面引擎,需要随构建产物一起分发 sciter 动态库;移动端(Android/iOS)走 Flutter 工程,不在本文范围内。
  • 本文所有命令均以仓库根目录(README.md 所在目录)为工作目录执行,这是官方文档明确强调的前提,否则应用可能找不到所需资源。
  • 构建贡献规范可另见 docs/CONTRIBUTING.md

构建依赖:sciter 与 vcpkg 媒体栈

RustDesk 的构建依赖分为两部分,二者缺一不可。

sciter 图形动态库

桌面版本使用 sciter 作为 UI 框架。构建时需要按平台获取对应的 sciter 动态库并放入输出目录(Linux x64 下即 target/debug/libsciter-gtk.so)。主工程通过 sciter-rs 依赖加载该库(非 Android/iOS 平台,见 Cargo.toml 第 96 行 sciter-rs 条目),因此动态库缺失会直接导致链接或运行失败。

vcpkg 媒体编解码依赖

官方快速构建步骤给出的核心命令是安装四个包:

# Windows
vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static
# Linux / MacOS
vcpkg install libvpx libyuv opus aom

从仓库根目录的 vcpkg.json 看,实际声明的依赖比 README 命令更多,还包括 libjpeg-turboffmpeg(按平台开启 amf/nvcodec/qsv 硬件编码 feature)、Intel mfx-dispatchcpu-features(Android 平台)与 Windows ARM64 下的 libsodium。这些依赖通过 manifest 模式由 vcpkg 自动解析;仓库还通过 overlay-ports 指向 res/vcpkg 目录下的自维护端口(aom、ffmpeg、libvpx、libyuv、mfx-dispatch、opus 的 portfile 与补丁集),并通过 overlay-triplets 指向 res/vcpkg-triplets 提供的 Android triplet,锁定的 baseline 为 9e593bb18ea69cc5095e012465dcd675a822ed0d。也就是说,README 中的四个包是最小命令集,完整依赖以 vcpkg.json 为准。

快速构建步骤(Raw Steps)

原文档给出的最短路径构建流程:

  1. 准备 Rust 开发环境与 C++ 构建环境(ccg++ 等,仓库根目录的 build.rs 会通过 cc crate 编译平台相关的 C/C++ 源码,Windows 下编译 src/platform/windows.cc,macOS 下编译 src/platform/macos.mm);
  2. 安装 vcpkg 并正确设置 VCPKG_ROOT 环境变量;
  3. 按上节命令安装 vcpkg 包;
  4. 运行 cargo run

Linux 发行版依赖安装

不同发行版的系统级依赖包名不同,以下命令逐条继承自原文档,可直接复制执行。

Ubuntu 18(Debian 10)

sudo apt install -y g++ gcc git curl wget nasm yasm libgtk-3-dev clang libxcb-randr0-dev libxdo-dev libxfixes-dev libxcb-shape0-dev libxcb-xfixes0-dev libasound2-dev libpulse-dev cmake

Fedora 28(CentOS 8)

sudo yum -y install gcc-c++ git curl wget nasm yasm gcc gtk3-devel clang libxcb-devel libxdo-devel libXfixes-devel pulseaudio-libs-devel cmake alsa-lib-devel

Arch(Manjaro)

sudo pacman -Syu --needed unzip git cmake gcc curl wget yasm nasm zip make pkg-config clang gtk3 xdotool libxcb libxfixes alsa-lib pipewire

这些包大体对应三大用途:编译器与构建工具(gcc/g++、nasm/yasm、cmake)、X11/Wayland 显示相关开发库(libxcb、libxdo、libxfixes、libxcb-*)、音频库(libasound2、libpulse、alsa-lib)。对照 Dockerfile 第 6~33 行可以看到,容器构建在 Debian bullseye 上安装的正是同一套包,另加 libgstreamer1.0-devninja-build 等,可视为 Ubuntu 命令超集。

安装 vcpkg(钉住 2023.04.15 版本)

git clone https://github.com/microsoft/vcpkg
cd vcpkg
git checkout 2023.04.15
cd ..
vcpkg/bootstrap-vcpkg.sh
export VCPKG_ROOT=$HOME/vcpkg
vcpkg/vcpkg install libvpx libyuv opus aom

注意官方明确要求 git checkout 2023.04.15——该版本号同时出现在 Dockerfile 第 42 行的 git clone --branch 2023.04.15 中,说明构建链对该 vcpkg 版本有实际约束,不要随意换用新版 vcpkg。

Fedora 下的 libvpx 修补

Fedora 构建 libvpx 静态库时缺少 -fPIC,会导致后续链接失败。官方给出的修复流程是在 vcpkg 源码树中手工重编并把产物拷回安装目录:

cd vcpkg/buildtrees/libvpx/src
cd *
./configure
sed -i 's/CFLAGS+=-I/CFLAGS+=-fPIC -I/g' Makefile
sed -i 's/CXXFLAGS+=-I/CXXFLAGS+=-fPIC -I/g' Makefile
make
cp libvpx.a $HOME/vcpkg/installed/x64-linux/lib/
cd

核心思路是给 configure 生成的 Makefile 的 CFLAGS/CXXFLAGS 注入 -fPIC,重编后把 libvpx.a 覆盖到 vcpkg 安装目录,其余依赖不受影响。

本机最终构建流程

完成系统依赖与 vcpkg 准备后,原文档的完整构建序列为:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
git clone https://github.com/rustdesk/rustdesk
cd rustdesk
mkdir -p target/debug
wget https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so
mv libsciter-gtk.so target/debug
VCPKG_ROOT=$HOME/vcpkg cargo run

要点解析:

  • mkdir -p target/debug 与把 libsciter-gtk.so 移入 target/debug 是 Linux 桌面版运行的前置条件,因为运行时按输出目录查找 sciter 库;
  • VCPKG_ROOT=$HOME/vcpkg cargo run 通过环境变量把 vcpkg 安装根目录传给构建脚本,manifest 模式据此解析依赖;
  • 编译产物启用 LTO、codegen-units = 1panic = "abort"stripCargo.toml 第 245~251 行的 [profile.release]),因此 --release 构建的二进制更小但编译更慢。

Docker 容器化构建

当本机环境难以凑齐全部系统依赖时,仓库提供了 Dockerfile 构建的官方构建容器。

构建构建容器

git clone https://github.com/rustdesk/rustdesk
cd rustdesk
docker build -t "rustdesk-builder" .

该 Dockerfile 以 debian:bullseye-slim 为基座,依次完成:安装上文 Ubuntu 一节的系统依赖(加 GStreamer、ninja 等)、源码编译 CMake 3.30.6、按 2023.04.15 分支克隆并 bootstrap vcpkg(附带 VCPKG_FORCE_SYSTEM_BINARIES=1 环境变量以走系统编译器)、安装 libvpx/libyuv/opus/aom、下载 libsciter-gtk.so、以及安装 rustup。

运行构建

docker run --rm -it -v $PWD:/home/user/rustdesk -v rustdesk-git-cache:/home/user/.cargo/git -v rustdesk-registry-cache:/home/user/.cargo/registry -e PUID="$(id -u)" -e PGID="$(id -g)" rustdesk-builder

命令中几个参数的作用:

  • -v $PWD:/home/user/rustdesk:把宿主机仓库目录挂进容器工作目录,产物直接落回宿主机;
  • -v rustdesk-git-cache:.../cargo/git-v rustdesk-registry-cache:.../cargo/registry:两个命名卷缓存 crate 依赖,首次构建较慢,之后显著提速;
  • -e PUID/-e PGID:让容器内非 root 用户与宿主机 UID/GID 对齐,避免产物文件属主混乱。

entrypoint 对参数的处理

容器入口脚本 entrypoint.sh 会解析追加的参数:

  • 追加 --release:脚本会把 libsciter-gtk.so 拷入 target/release/,并以 release 模式构建,最终产物为 target/release/rustdesk
  • 追加 --target <triple>:先执行 rustup target add <triple> 再构建,用于交叉编译;
  • 不追加时默认 debug 构建,产物为 target/debug/rustdesk

实际执行的最终命令是 VCPKG_ROOT=/vcpkg cargo build --locked $argv(entrypoint.sh 第 36 行),即固定 vcpkg 根目录为容器内路径 /vcpkg 并锁定 Cargo.lock。原文档还特别提醒:cargo installcargo run 等子命令在此方案下不受支持,因为它们会在容器内部执行而非宿主机;构建完成后可在仓库根目录直接运行:

target/debug/rustdesk   # debug 版
# 或
target/release/rustdesk # release 版

仓库文件结构速览

原文档最后给出核心模块地图,这里转为仓库内相对路径并补充说明(与 Cargo.toml 第 211 行 workspace members 一致):

模块 职责
libs/hbb_common 视频编解码封装、配置、tcp/udp 封装、protobuf、文件传输 fs 函数及其他工具函数
libs/scrap 屏幕采集(X11/Wayland/quartz/dxgi/drm 等后端,见 libs/scrap/src/common
libs/enigo 平台相关的键盘/鼠标控制,按 linux/macos/win 分目录实现
src/ui sciter 图形界面(HTML/CSS/TIS 模板 + Rust 侧处理)
src/server 音频/剪贴板/输入/视频服务与网络连接
src/client.rs 发起对端连接
src/rendezvous_mediator.rs 与 rendezvous 服务器通信,等待远程直连(TCP 打洞)或中继连接
src/platform 平台相关代码(Windows/macOS/Linux 权限、服务、剪贴板等)

构建时 build.rs 还会按目标平台自动选择编译 C/C++ 源文件并生成版本号信息,这与上文“准备 C++ 构建环境”的要求直接对应。

小结

RustDesk 的构建难度主要集中在两点:一是 vcpkg 版本钉在 2023.04.15 且依赖 manifest 与 overlay 端口,本机构建务必按序执行“系统依赖 → vcpkg → 四件套”;二是 sciter 动态库必须手动放入 target/{debug,release}。若环境受限,直接使用 rustdesk-builder 镜像配合两个 cargo 缓存卷是最省事的路线,--release--target 参数覆盖常见编译场景。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
903
1.82 K
docsdocs
暂无描述
Markdown
888
5.78 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
527
590
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.51 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.33 K
1.45 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384
flutter_flutterflutter_flutter
本仓库是 Flutter SDK 与 Flutter Engine 的 OpenHarmony 适配版本,由 CPF-Flutter 团队维护。开发者可使用熟悉的 Flutter 技术栈开发 OpenHarmony 应用,3.35.7 及以后的适配版本可基于本仓库源码构建支持 OpenHarmony 的 Flutter Engine。
Dart
1.17 K
341