
RustDesk 构建完全指南从依赖安装到 Docker 构建与源码结构解析【免费下载链接】rustdeskAn open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.项目地址: https://gitcode.com/GitHub_Trending/ru/rustdeskRustDesk 是一款用 Rust 编写的开源远程桌面软件可自托管部署作为 TeamViewer 的替代品开箱即用、无需复杂配置数据完全由用户自行掌控。本文基于仓库内官方挪威语版 READMEdocs/README-NO.md整理并扩展完整覆盖构建依赖安装、Linux 各发行版编译步骤、Docker 容器化构建以及源码目录结构帮助你从零开始成功构建 RustDesk 客户端并理解各核心模块在代码库中的位置。前置说明GUI 方案与依赖概览桌面版 RustDesk 使用 Flutter 或 Sciter已弃用作为 GUI 框架。本文档的构建步骤仅针对 Sciter 方案因为它更易上手、门槛更低Flutter 版本的构建方式可参考仓库的 CI 流程flutter目录包含完整的 Android/iOS/Linux/macOS/Windows 工程与构建脚本如 flutter/build_android.sh、flutter/build_fdroid.sh。从源码结构看当前仓库的 Cargo.toml 将flutter定义为可选 featureCargo.tomlflutter [flutter_rust_bridge]默认构建不带该 feature因此cargo run走的是 Sciter UI 路径。两种方案的核心依赖一致都需要通过 vcpkg 安装四个 C/C 库依赖库用途libvpxVP8/VP9 视频编解码远程画面传输的核心编码引擎libyuvYUV 色彩空间转换与缩放opus音频编码远端音频传输aomAV1 视频编码对应关系可以直接在仓库中找到佐证根目录 vcpkg.json 声明了libvpx、libyuv、opus、aom四个核心依赖host 与 target 双端并配置了./res/vcpkg与./res/vcpkg-triplets作为 overlay ports/tripletsCargo.toml 中 workspace 成员包含libs/scrap屏幕捕获、libs/hbb_common、libs/enigo键鼠控制、libs/clipboard等本地 crate主程序入口 src/main.rs 中非 Android/iOS/Flutter 平台走ui::start(args)Sciter UIFlutter 平台则仅执行common::global_init()初始化。另外使用 Sciter 方案时需要自行下载对应的 Sciter 动态库并放置到构建产物目录Windowssciter.dllLinuxlibsciter-gtk.somacOSlibsciter.dylib原始构建步骤Windows / macOS / Linux 通用文档给出的三步原始流程如下准备 Rust 开发环境与 C 构建环境安装 vcpkg外部依赖管理器此处仅作为安装途径说明并修正VCPKG_ROOT环境变量Windowsvcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-staticLinux/macOSvcpkg install libvpx libyuv opus aom运行cargo run启动开发构建。注意事项Windows 上需使用带-static后缀的 triplet如x64-windows-static以保证静态链接VCPKG_ROOT必须指向 vcpkg 安装根目录否则构建脚本找不到已安装的依赖构建出的二进制需要能加载到 Sciter 动态库因此运行前要把上一步下载的.so/.dll/.dylib放到可执行文件所在目录Docker 方案中这一步由容器入口脚本自动完成见下文。Linux 构建各发行版依赖安装Ubuntu 18 / Debian 10sudo apt install -y zip 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 make \ libclang-dev ninja-build libgstreamer1.0-dev libgstreamer-plugins-base1.0-devopenSUSE Tumbleweedsudo zypper install gcc-c git curl wget nasm yasm gcc gtk3-devel clang libxcb-devel libXfixes-devel cmake alsa-lib-devel gstreamer-devel gstreamer-plugins-base-devel xdotool-develFedora 28 / CentOS 8sudo 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 gstreamer1-devel gstreamer1-plugins-base-develArch / Manjarosudo pacman -Syu --needed unzip git cmake gcc curl wget yasm nasm zip make pkg-config clang gtk3 xdotool libxcb libxfixes alsa-lib pipewire这些系统包与 Docker 构建中安装的清单完全对应可以从根目录 Dockerfile 中验证g gcc git curl nasm yasm libgtk-3-dev clang libxcb-randr0-dev libxdo-dev libxfixes-dev libxcb-shape0-dev libxcb-xfixes0-dev libasound2-dev libpulse-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev ninja-build等说明文档命令与 CI/容器化构建保持同一套依赖基线。其中几类关键依赖的作用libxcb-*-dev/libxfixes-dev用于 X11 屏幕捕获与窗口操作对应 libs/scrap/src/x11/ 捕获后端libasound2-dev/libpulse-dev用于 Linux 音频采集对应 Cargo.toml 中的libpulse-simple-binding、libpulse-bindingnasm/yasm是汇编器vcpkg 编译 libvpx/aom 时必需libgtk-3-dev是 Sciter GTK 库的前置。安装 vcpkggit 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注意文档锁定的是2023.04.15版本Dockerfile 同样使用--branch 2023.04.15 --depth1克隆并安装libvpx libyuv opus aom保证构建环境一致性。vcpkg 目录中res/vcpkg/下为这些库定制了 portfile 与补丁如 res/vcpkg/libvpx/ 中的 patch 集合若使用 manifest 模式则通过根目录 vcpkg.json 自动加载 overlay。修复 libvpx仅 FedoraFedora 上 libvpx 的 Makefile 缺少-fPIC标志会导致生成共享对象/链接时出错需要手动打补丁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该步骤将编好的libvpx.a静态库回拷到 vcpkg 安装目录后续 cargo 构建即可正常链接。其他发行版无此问题可跳过。完整构建流程Linux 示例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要点解析cargo run会触发 build.rs 构建脚本与 cc crate 编译 C/C 源码如 Windows 平台的 src/platform/windows.cc当前仓库要求 Rust 工具链版本不低于 1.75Cargo.tomlrust-version 1.75libsciter-gtk.so必须放在target/debug/下因为运行时动态库按可执行文件所在目录搜索release 构建可使用cargo build --releaseCargo.toml 中 release profile 启用了lto true、codegen-units 1、strip true等体积与性能优化选项。使用 Docker 构建如果不想在宿主机上安装整套依赖可以直接使用仓库根目录提供的 Dockerfile 构建容器。该镜像基于debian:bullseye-slim内部已预装全部系统依赖、CMake 3.30.6、锁定版本的 vcpkg 及其四个依赖库并预先下载好libsciter-gtk.so和 Rust 工具链Dockerfile。第一步克隆仓库并构建镜像git clone https://github.com/rustdesk/rustdesk cd rustdesk docker build -t rustdesk-builder .第二步每次需要构建时运行容器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将仓库挂载进容器构建产物直接落在宿主机两个 cargo 命名卷用于缓存依赖索引第二次构建起显著提速首次构建因依赖缓存需要更长时间PUID/PGID保证容器内生成文件与宿主机用户权限一致。入口脚本 entrypoint.sh 负责实际构建其行为值得了解解析命令行参数--release会切换到 release 构建并把libsciter-gtk.so拷贝到target/release/entrypoint.sh支持--target triple容器内会自动执行rustup target add添加交叉编译目标最终统一执行VCPKG_ROOT/vcpkg cargo build --locked $argventrypoint.sh保证依赖版本锁定。使用限制原文强调务必遵守可执行文件在宿主机仓库的target/目录下查找并运行target/debug/rustdesk或 release 版本target/release/rustdesk必须从 RustDesk 仓库根目录运行上述命令否则应用可能找不到正确的资源文件cargo install、cargo run等子命令在此方案下不受支持——它们会在容器内部安装/运行程序而不是宿主机。需要额外构建参数时直接附加在docker run命令末尾即可例如构建优化版 release 版本时追加--release。源码文件结构文档给出的目录结构说明是理解 RustDesk 代码库的地图结合仓库现状逐项说明libs/hbb_common视频编解码调度、配置管理、TCP/UDP 协议封装、protobuf 定义、文件传输用文件系统功能及其他工具函数是整个项目最底层的公共库workspace 成员Cargo.tomllibs/scrap屏幕捕获包含 X11libs/scrap/src/x11/、Waylandlibs/scrap/src/wayland/、Windows DXGIlibs/scrap/src/common/dxgi.rs、macOS Quartzlibs/scrap/src/quartz/、DRM 等捕获后端以及 VPX/AOM/硬解相关实现libs/scrap/src/common/vpx.rs、libs/scrap/src/common/aom.rs与上文 vcpkg 依赖直接对应libs/enigo跨平台键鼠控制按平台拆分实现libs/enigo/src/linux/、libs/enigo/src/macos/、libs/enigo/src/win/libs/clipboardWindows/Linux/macOS 的文件复制粘贴实现libs/clipboard/src/lib.rs 及 platform 子目录src/ui已弃用的 Sciter UIHTML/CSS/TS 混合实现如 src/ui/index.html、src/ui/remote.rssrc/server服务端各服务——音视频src/server/video_service.rs、输入src/server/input_service.rs、剪贴板src/server/clipboard_service.rs以及网络连接处理src/server/connection.rssrc/client.rs发起点对点连接的客户端入口逻辑src/rendezvous_mediator.rs与 RustDesk 服务端rustdesk-server通信的中介模块等待建立直接远程控制连接TCP 打洞或中继转发连接src/platform平台相关代码按操作系统拆分src/platform/linux.rs、src/platform/macos.rs、src/platform/windows.rs 及 Windows 特权脚本等flutterFlutter 代码覆盖桌面与移动端按desktop/mobile页面组织flutter/lib/Dart 侧模型层在 flutter/lib/models/。从源码结构看入口 src/main.rs 按编译目标分流Flutter 构建只做全局初始化其余平台调用core_main解析命令行后进入ui::startCargo.toml 还声明了naming、service两个独立二进制分别用于设备命名与后台服务。小结与适用前提本文全部步骤基于当前仓库版本 1.4.9见 Cargo.toml实际内容vcpkg 锁定2023.04.15核心依赖为libvpx libyuv opus aomRust 版本要求 1.75Sciter 路径文档标注该 GUI 方案已弃用长期维护的重点在 Flutter 路径构建 Flutter 版应参考仓库 CI 与 flutter 目录下的平台脚本Docker 方案仅支持cargo build类操作cargo run/install不可用且运行二进制必须在仓库根目录执行。【免费下载链接】rustdeskAn open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.项目地址: https://gitcode.com/GitHub_Trending/ru/rustdesk创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考