发布时间:2026/9/6 18:23:08
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/9/6 18:23:08

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/9/6 18:23:08

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

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

2026/9/6 19:18:11

通达信选股指标源码拆解:从强势股回调到MACD金叉的实战应用

简介:一份通达信选股指标源码,面向股票投资者与技术分析爱好者,主要解决横盘整理后如何捕捉放量突破机会的问题,可将盘感转化为明确选股信号。资源以 1 个 doc 文档打包,整体约 203KB,文档内含完整可复制的…

2026/9/6 19:18:11

云端容灾解决方案:从备份到分钟级恢复的架构与实践

简介&#xff1a;面向企业IT运维、架构师及灾备规划人员&#xff0c;这份云端容灾解决方案PPT系统梳理了传统灾备的痛点与云端容灾的核心价值。方案明确给出RTO<15分钟、RPO<5分钟的量化恢复指标&#xff0c;并以自动灾难演练、集中备份管理、低成本投入等对比优势&#…

2026/9/6 19:13:11

泰坦尼克号英语剧本:从精读到角色扮演的三轮榨干学习法

简介&#xff1a;《泰坦尼克号》中英对照剧本doc文档&#xff0c;聚焦英语听力、口语与电影文化学习&#xff0c;以经典台词为语料&#xff0c;面向英语自学者、影视爱好者和教师&#xff0c;用于原声对照、剧情精读和口语模仿。资源仅1个doc文件&#xff0c;压缩包仅55KB&…

2026/9/6 0:06:59

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊&#xff01;#雷神 #复联”这类调侃式短标题&#xff0c;第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里&#xff0c;但细想一下就能发现&#xff0c;它真正碰到的根本不是…

2026/9/6 0:06:59

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊&#xff0c;可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”&#xff0c;你会发现&#xff0c;这场比较本质上是两个不同 IP 策略的长期结果对比&#xff1a;超人赢在定义了整个超级英雄题材…

2026/9/6 0:06:59

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介&#xff1a;本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案&#xff0c;聚焦调制信号自动检测与识别这一典型无线通信任务&#xff0c;解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件&#xff08;10.73MB&#xff09;&…

2026/9/6 0:06:59

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊&#xff01;#雷神 #复联”这类调侃式短标题&#xff0c;第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里&#xff0c;但细想一下就能发现&#xff0c;它真正碰到的根本不是…

2026/9/6 0:06:59

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊&#xff0c;可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”&#xff0c;你会发现&#xff0c;这场比较本质上是两个不同 IP 策略的长期结果对比&#xff1a;超人赢在定义了整个超级英雄题材…

2026/9/6 0:06:59

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介&#xff1a;本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案&#xff0c;聚焦调制信号自动检测与识别这一典型无线通信任务&#xff0c;解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件&#xff08;10.73MB&#xff09;&…

2026/9/6 11:40:10

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行&#xff0c;Type-C接口算是典型的“看着简单&#xff0c;做起来全坑”的东西。光引脚就24个&#xff0c;高低速信号、电源、控制线全部塞在一个小小的连接器里&#xff0c;如果PCB布局不做规划&#xff0c;打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/5 2:30:42

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/6 10:19:40

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…