RustDesk 源码构建实战:vcpkg 依赖准备、Linux 编译流程与 Docker 构建详解

发布时间:2026/11/5 12:08:32

RustDesk 源码构建实战:vcpkg 依赖准备、Linux 编译流程与 Docker 构建详解 RustDesk 源码构建实战vcpkg 依赖准备、Linux 编译流程与 Docker 构建详解【免费下载链接】rustdeskAn open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.项目地址: https://gitcode.com/GitHub_Trending/ru/rustdesk本文基于 RustDesk 仓库中的官方构建文档 docs/README-ID.md 及其对应的英文主文档 README.md 展开系统讲解 RustDesk 桌面版从源码构建的完整链路GUI 运行时与 vcpkg 四大核心编解码依赖libvpx、libyuv、opus、aom、Ubuntu/Fedora/Arch 三类发行版下的编译环境准备、Docker 容器化构建方案以及libs/、src/目录的代码结构脉络。读完本文你可以独立在本地或容器内完成 RustDesk 的 debug/release 构建并定位关键源码模块。项目背景与文档定位RustDesk 是一个用 Rust 编写的开源远程桌面程序面向自托管self-hosting场景定位为 TeamViewer 的替代方案。其核心卖点见 README.md 与 docs/README-ID.md开箱即用无需额外配置即可连接数据完全由自己掌控可自建 rendezvous/relay会合/中继服务器也可使用官方服务器或自行编写会合/中继服务桌面端 GUI 使用 Sciter 或 Flutter 实现跨 Windows / Linux / macOS并有 Android / iOS / Web 端。本仓库的构建文档英文 README.md、印尼语 docs/README-ID.md 等 20 语言版本同时承担着两个角色一是用户下载预编译二进制之外的源码构建教程二是贡献者进入代码库前的结构导览。下文所有命令与配置均以当前仓库rustdeskcrate 版本 1.4.9Rust 1.75见 Cargo.toml实际内容为准。构建依赖GUI 运行时与 vcpkg 四大核心库GUI 运行时Sciter 或 Flutter桌面版的图形界面有两种技术路线docs/README-ID.md “Dependensi” 一节Sciter传统 GUI 方案实现位于src/ui/Sciter 模板 Rust 脚本绑定。英文 README.md 补充说明该方案已被标记为 deprecated官方教程仍以 Sciter 为准因为上手更简单Flutter当前桌面与移动端共用的 UI 框架Dart 代码位于 flutter/ 目录Rust 侧通过flutter_rust_bridge桥接Cargo.toml 中的flutterfeature。若走 Sciter 路线需要自行下载 Sciter 动态库并按平台放置文档给出的下载源为 c-smile/sciter-sdk 官方发行件平台动态库文件放置位置Linux 构建流程中Windowssciter.dll可执行文件同目录Linuxlibsciter-gtk.sotarget/debug/见下文 Build 步骤macOSlibsciter.dylib可执行文件同目录vcpkg音频与视频编解码依赖C/C 依赖统一通过 Microsoft vcpkg 管理文档要求安装 vcpkg 并正确设置环境变量VCPKG_ROOT。核心依赖是四个编解码库按平台分别安装Windows 需静态链接 triplet# 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四个库在 RustDesk 中的分工可以从源码结构对应上libvpx/aom是 VP8/VP9 与 AV1 视频编码器libs/scrap的屏幕采集编码路径libyuv负责帧格式转换opus负责音频编码src/server/audio_service.rs使用。当前仓库根目录的 vcpkg manifest vcpkg.json 还声明了更完整的依赖集说明实际 CI/移动端构建比“最小四件套”更多libjpeg-turbo、libsodiumWindows ARM64mfx-dispatch与带amf/nvcodec/qsvfeature 的ffmpeg用于 x86/x64 平台的硬件编解码对应 Cargo.toml 中hwcodec、vram、mediacodec等 feature 门控vcpkg-configuration中通过overlay-ports: ./res/vcpkg与overlay-triplets: ./res/vcpkg-triplets引用了仓库自带的定制端口与 Android tripletres/vcpkg-triplets/下含arm-neon-android.cmake、arm64-android.cmake等这解释了 res/vcpkg/ 下大量针对 aom/ffmpeg/libvpx 的补丁文件。最小启动步骤环境Rust 工具链 C 编译环境 vcpkg就绪后文档给出的最小路径只有一条命令cargo runLinux 下的完整构建流程文档按发行版给出了系统包清单全部保留如下可直接复制执行。1. 安装系统依赖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-devFedora 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-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从包清单可以读出构建环境的硬性要求clangRust FFI 绑定如libxdo-sys需要 Clang 解析系统头文件、libgtk-3-devLinux 桌面窗口与 Sciter 集成、libxdo-dev/xdotool键鼠控制对应libs/enigo的 Linux 实现、libasound2-dev/libpulse-dev音频服务、nasm/yasmaom/libvpx 汇编构建、libgstreamer1.0-dev屏幕/音频采集管线。2. 安装并配置 vcpkg# 从 Microsoft 官方仓库克隆 vcpkg微软 vcpkg 项目 git clone vcpkg 官方仓库地址 vcpkg cd vcpkg git checkout 2023.04.15 # 文档固定版本基线与 Dockerfile 中一致 cd .. vcpkg/bootstrap-vcpkg.sh export VCPKG_ROOT$HOME/vcpkg vcpkg/vcpkg install libvpx libyuv opus aomgit checkout 2023.04.15不是可选项Docker 构建文件 Dockerfile 中同样固定了--branch 2023.04.15保证宿主机手工构建与容器构建使用同一份端口定义避免端口升级导致编译失败。3. Fedora 下 libvpx 的 -fPIC 修复文档给出了 Fedora 特有的手工修复步骤vcpkg 构建的 libvpx 静态库缺-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即重新 configure 后向CFLAGS/CXXFLAGS注入-fPIC手工编译并把手工产物libvpx.a覆盖回 vcpkg 的installed/x64-linux/lib/目录。4. 克隆仓库、放置 Sciter 库并构建# 使用 rustup 安装 Rust 工具链rustup 官方安装脚本 curl --proto https --tlsv1.2 -sSf rustup 安装脚本地址 | sh source $HOME/.cargo/env git clone https://gitcode.com/GitHub_Trending/ru/rustdesk cd rustdesk mkdir -p target/debug # 从 Sciter SDK 下载 Linux 动态库 wget sciter-sdk 的 libsciter-gtk.so 发行地址 mv libsciter-gtk.so target/debug VCPKG_ROOT$HOME/vcpkg cargo run两个容易踩坑的细节libsciter-gtk.so必须提前放进target/debug/——Sciter 库不是 crate 依赖而是运行时由进程加载的动态库Cargo 不会替你处理因此文档用mkdir -pmv显式放置libs/hbb_common是 git 子模块仓库根.gitmodules指向rustdesk/hbb_common仓库英文 README.md 的 Docker 章节因此要求克隆时加--recurse-submodules或克隆后执行git submodule update --init --recursive否则hbb_common目录为空、cargo run会因找不到路径依赖而失败。cargo run会构建 Cargo.toml 中声明的default-run rustdesk主程序另含naming、service两个辅助 bin。Docker 方式构建Docker 方案把整套 Linux 环境固化进镜像宿主只需 Docker。流程分两步第一步构建构建镜像git clone https://gitcode.com/GitHub_Trending/ru/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把宿主仓库目录挂到容器内工作目录/home/user/rustdesk-v rustdesk-git-cache:...、-v rustdesk-registry-cache:...两个命名卷缓存 cargo 的 git 依赖与 registry 依赖首次构建慢、后续构建快的关键-e PUID/PGID注入宿主用户 ID使容器内生成的target/文件属主与宿主一致避免后续 sudo 改属主。结合 Dockerfile 与 entrypoint.sh 看构建细节对照 Dockerfile 可以验证镜像内容与文档声明完全一致基础镜像debian:bullseye-slim安装与 Ubuntu 清单同源的编译依赖libgtk-3-dev、libxdo-dev、libpulse-dev、libgstreamer1.0-dev等见 Dockerfile源码编译 CMake 3.30.6Dockerfile固定 vcpkg2023.04.15并预装libvpx libyuv opus aom同时设置VCPKG_FORCE_SYSTEM_BINARIES1Dockerfile预下载libsciter-gtk.so到/home/userDockerfile创建非 root 用户useruid 1000与docker run时注入的PUID/PGID配合。入口脚本 entrypoint.sh 负责真正的构建其逻辑值得逐行看entrypoint.sh遍历docker run追加的参数遇到--release时置标志位并把libsciter-gtk.so复制到target/release/遇到--target triple时调用rustup target add即文档所说的“在OPTIONAL-ARGS位置追加参数”debug 构建则把 Sciter 库复制到target/debug/最终以VCPKG_ROOT/vcpkg cargo build --locked $argv收尾——--locked保证按 Cargo.lock 精确复现依赖版本。因此文档中“追加--release构建优化版”的用法实际生效链路是docker run ... rustdesk-builder --release→ entrypoint 复制动态库到target/release/→cargo build --locked --release。构建产物直接落在宿主机因为源码目录被挂载target/debug/rustdesk # debug 构建 target/release/rustdesk # release 构建两点使用限制文档明确提示源码同样印证必须从 RustDesk 仓库根目录运行否则应用找不到所需资源如res/下的图标、语言文件容器方式下cargo install、cargo run等子命令不可用——程序会在容器内而非宿主机安装/运行entrypoint 也只会透传给cargo build。此外 release profile 在 Cargo.toml 中开启了lto true、codegen-units 1、panic abort、strip true所以 release 构建耗时长但产物小且紧凑这也解释了“首次构建慢”的官方提示。仓库代码结构导览文档 “File Structure” 一节是理解 RustDesk 代码组织的入口结合 Cargo.toml 的 workspace 成员声明libs/scrap、libs/hbb_common、libs/enigo、libs/clipboard、libs/virtual_display、libs/portable、libs/remote_printer可还原如下结构路径职责libs/hbb_common公共基础设施视频 codec 封装、配置读写、tcp/udp wrapper、protobuf 协议定义、文件传输用的 fs 函数等git 子模块libs/scrap屏幕采集screen capture按平台分为 x11/wayland/quartz/dxgi 等后端支持 hwcodec、vram、drm 等 featurelibs/enigo平台相关的键盘/鼠标控制Linux 基于 xdo/nixmacOS/Windows 各自实现libs/clipboard跨平台Windows/Linux/macOS剪贴板与文件复制粘贴实现src/ui已弃用的 Sciter GUIHTML/TIS 模板 Rust 绑定如 cm.html、remote.htmlsrc/server服务端五大服务audio/clipboard/input/video service、显示服务与网络连接管理service.rs、video_service.rs 等src/client.rs发起对被端peer的连接src/rendezvous_mediator.rs与 rustdesk-server会合/中继服务器通信等待直连TCP 打洞或中继连接建立src/platform平台特有代码windows/macos/linux 子目录含权限脚本、特权提升等flutter桌面与移动端的 Flutter UIDart 代码 各平台壳工程见 flutter/pubspec.yaml补充两个与本文档语言版本相关的细节UI 多语言由 src/lang/ 下的逐语言文件维护印尼语对应 src/lang/id.rsdocs/README-ID.md 顶部的翻译招募说明即指向这些文件src/server/ 中还包含文档未展开的终端服务terminal_service.rs等较新模块结构清单可视为“主干导览”而非全量清单。小结构建路径选择只想快速跑起来按“最小启动步骤”装好 Rust C 环境 vcpkg 四件套cargo run宿主机环境脏、不想污染系统优先 Docker 方案镜像已固化 vcpkg2023.04.15、CMake 3.30.6 与 Sciter 动态库配合 cargo 缓存卷实现增量快速构建需要深入修改先读libs/hbb_common协议与配置、libs/scrap采集编码、src/rendezvous_mediator.rs连接建立三条主线再进入src/server各服务。参考文档与源码入口docs/README-ID.md、README.md、Dockerfile、entrypoint.sh、vcpkg.json、Cargo.toml。【免费下载链接】rustdeskAn open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.项目地址: https://gitcode.com/GitHub_Trending/ru/rustdesk创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/27 1:22:40

IOPaint批量擦除教程:5分钟跑通百张图去水印

IOPaint批量擦除教程:5分钟跑通百张图去水印 【免费下载链接】IOPaint Image inpainting tool powered by SOTA AI Model. Remove any unwanted object, defect, people from your pictures or erase and replace(powered by stable diffusion) any thing on your p…

2026/11/2 1:24:40

客户价值创造闭环:从认知到复利的方法论

简介:围绕客户价值创造主题的财务管理类PPT文档,系统梳理客户价值的基本含义、FABE原则、CRM与客户价值创造的联结点,并结合五大需求(生理、安全、社交、受尊重、自我实现)详细阐释22条客户价值创造法则,适…

2026/11/5 12:04:19

下班回消息也算加班:北京法院给隐形加班划线

宝企通云关怀:下班后的关怀别变成打扰图1:北京法院:下班后线上沟通满足条件应认定加班一、热搜里发生了什么据人民网报道,北京多家法院发布劳动争议典型案例,首次以司法判决形式明确:下班后线上沟通、节假日…

2026/11/5 11:39:15

PostgreSQL数据类型选择指南与性能优化实践

1. PostgreSQL数据类型概述PostgreSQL作为一款功能强大的开源关系型数据库,其数据类型系统之丰富远超大多数同类产品。我在实际项目中最常遇到的问题是:面对十几种数字类型、多种字符串类型以及各种特殊类型时,开发团队往往凭直觉选择&#x…

2026/11/5 11:34:12

Simulink S-function执行时序与状态管理原理详解

简介:本资源是面向MATLAB/Simulink初学者与控制系统建模学习者的S-Function入门实践包,聚焦自定义系统函数开发这一核心能力,解决标准库无法覆盖的特定数学运算与动态逻辑建模需求。压缩包共4个文件(2个M文件实现核心算法逻辑&…

2026/11/5 11:34:12

低空经济三维智能感知与实时调度技术解析

1. 低空经济三维空间智能感知与管控体系概述低空经济作为新兴经济形态,正在全球范围内快速发展。根据国际航空运输协会(IATA)预测,到2030年,全球城市空中交通市场规模将达到1.5万亿美元。在这一背景下,《低…

2026/11/5 11:34:12

链表数据结构与PTA解题技巧详解

1. 链表基础与数据结构课程实践 链表作为线性表的链式存储结构,是数据结构课程中承前启后的关键内容。在山东理工大学(SDUT)的数据结构与算法课程体系中,链表章节通常安排在顺序表之后、树结构之前,这种教学顺序设计体…

2026/11/5 11:34:12

Simulink S-Function核心机制与两个经典C示例解析

简介:本资源是面向MATLAB/Simulink初学者与控制系统建模学习者的S-Function入门实践包,聚焦自定义系统函数开发这一核心能力,解决标准库无法覆盖的特定数学运算与动态逻辑建模需求。压缩包共4个文件(2个M文件实现核心算法逻辑&…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/4 12:38:23

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑