RustDesk 源码构建完全指南:Linux 依赖环境、vcpkg 编解码栈与 Docker 容器化构建
RustDesk 源码构建完全指南Linux 依赖环境、vcpkg 编解码栈与 Docker 容器化构建【免费下载链接】rustdeskAn open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.项目地址: https://gitcode.com/GitHub_Trending/ru/rustdesk本文以 RustDesk 仓库的构建文档为主线完整覆盖从 Sciter GUI 动态库、vcpkg 编解码依赖到各 Linux 发行版系统依赖安装、本地cargo run构建以及 Docker 容器化构建的全部流程并结合仓库中的 vcpkg.json、Dockerfile、entrypoint.sh 与 Cargo.toml 源码深入讲解每条构建命令背后的依赖链路与工程约定帮助你在任意 Linux 发行版上独立完成 RustDesk 的可复现构建。RustDesk 是一个用 Rust 编写的自托管远程桌面应用定位为 TeamViewer 的开源替代。它开箱即用、无需额外配置用户可以完全掌控自己的数据既可以使用官方的 rendezvous/relay 公共服务器也可以自建服务器hbbs/hbbr。客户端与服务器之间的打洞TCP hole punching与中继协商逻辑集中在 src/rendezvous_mediator.rs 中peer 连接的建立则在 src/client.rs。RustDesk 欢迎社区贡献参与方式可以参考 docs/CONTRIBUTING.md。构建前置依赖Sciter 或 Flutter GUIDesktop 版本的 GUI 有两种实现Sciter 或 Flutter。官方构建文档针对的是Sciter路线构建前需要自行下载对应平台的 Sciter 动态库平台动态库文件Windowssciter.dllLinuxlibsciter-gtk.soMacOSlibsciter.dylib仓库文档提供了各平台 Sciter SDK 动态库的直接下载链接见 docs/README.md 的 Dependencies 小节下载后 Linux 版本需要放到构建输出目录target/debug/或target/release/下程序运行时按路径加载该库。另一条 GUI 技术栈是 Flutter其完整的跨平台工程位于 flutter/ 目录包含 Android、iOS、macOS、Windows、Linux 的平台壳代码以及 flutter/lib/main.dart 等 Dart 源码对应 Cargo.toml 中的flutterfeature 会启用flutter_rust_bridge。准备 vcpkg 与编解码依赖原生构建的第二项前置条件是 C 依赖管理器 vcpkg。需要安装 vcpkg 并正确设置VCPKG_ROOT环境变量然后按平台安装 RustDesk 使用的四个编解码库# 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 依赖声明从该文件还能看出当前仓库实际用到的完整依赖面视频编码libvpxVP8/VP9、aomAV1、libyuv像素格式转换均以host/非host成对声明说明部分工具链如 ffmpeg 的构建依赖会在构建主机侧额外编译一份音频编码opus同样成对声明硬编码加速mfx-dispatchIntel QSV在 x86/x64 的 Android、Linux 及非 UWP Windows 上启用ffmpeg则按平台携带amfAMD、nvcodecNVIDIA、qsvIntelfeature仅用于静态构建场景Android 专属cpu-features且 res/vcpkg-triplets/ 下提供了arm-neon-android.cmake、arm64-android.cmake、x64-android.cmake、x86-android.cmake四个自定义 triplet版本锁定vcpkg-configuration段将默认 registry baseline 固定到具体 commit见 vcpkg.json同时通过overlay-ports指向仓库自带的 res/vcpkg/对aom、ffmpeg、libvpx、libyuv、mfx-dispatch、opus等端口打了定制补丁例如 res/vcpkg/ffmpeg/ 中的 CMake 兼容补丁并通过overrides固定ffnvcodec与amd-amf版本保证构建可复现。因此文档中“vcpkg install libvpx libyuv opus aom”只是最小集在启用--features hwcodec、vram等特性或做 Android 交叉构建时vcpkg 会依据 manifest 拉取更多依赖。各 Linux 发行版的系统依赖构建 RustDesk 的 Linux 版本还需要一系列系统级开发库GTK3、X11 扩展、ALSA/PulseAudio、汇编器等。官方文档按发行版给出了完整的安装命令以下原样保留Ubuntu 18Debian 10sudo 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 cmakeopenSUSE 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 28CentOS 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-develArchManjarosudo pacman -Syu --needed unzip git cmake gcc curl wget yasm nasm zip make pkg-config clang gtk3 xdotool libxcb libxfixes alsa-lib pipewire安装 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注意这里把 vcpkg 固定到了2023.04.15这个 release tag——与 Dockerfile 中git clone --branch 2023.04.15的做法一致目的是让整个依赖树与 CI/容器环境保持同一版本避免 vcpkg 滚动更新导致二进制不兼容。libvpx 的 Fedora 修复补丁在 Fedora 上vcpkg 构建的libvpx.a缺少-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该问题的根因是 Fedora 的 GCC 默认对共享目标强制 PIC而静态库libvpx.a若未以-fPIC编译后续链接进动态产物Rust 的cdylib时会报 relocation 错误因此补丁直接在 Makefile 的CFLAGS/CXXFLAGS中注入-fPIC后重新make。本地构建从 rustup 到 cargo run系统依赖与 vcpkg 就绪后执行文档给出的完整构建序列curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh source $HOME/.cargo/env # 克隆本仓库后进入目录 cd rustdesk mkdir -p target/debug wget 文档中的 libsciter-gtk.so 下载链接 mv libsciter-gtk.so target/debug VCPKG_ROOT$HOME/vcpkg cargo run要点说明Cargo.toml 声明rust-version 1.75、包版本1.4.9并通过default-run rustdesk使裸cargo run直接运行rustdesk二进制构建脚本 build.rs 会编译 C/C 平台代码Windows 的src/platform/windows.cc、macOS 的src/platform/macos.mm并在 Android 目标下读取VCPKG_ROOT或VCPKG_INSTALLED_ROOT拼接链接搜索路径——这解释了为什么环境变量VCPKG_ROOT必须正确指向 vcpkg 根目录Cargo.toml 还定义了一系列可选编译特性hwcodec硬件编解码、vram显存零拷贝、mediacodecAndroid MediaCodec、drm/drm-wakeWayland DRM 捕获与唤醒、screencapturekitmacOS 屏幕捕获、flutterFlutter GUI 桥接等。默认cargo run只启用use_dasp音频重采样默认实现等基础特性属于最小可运行构建使用 Docker 构建如果不想在宿主机上铺设依赖仓库自带了构建容器方案镜像定义为 Dockerfile。从该文件可以确认容器的完整环境基础镜像debian:bullseye-slim通过 apt 安装与 Ubuntu 一节完全对齐的依赖集gcc/g、clang、nasm/yasm、libgtk-3-dev、libxcb-* 系列、libasound2-dev、libpulse-dev 等见 Dockerfile手工编译安装 CMake 3.30.6Dockerfile以满足部分 C 端口的 CMake 版本下限以2023.04.15分支克隆 vcpkg 并预装libvpx libyuv opus aomDockerfile并设置VCPKG_FORCE_SYSTEM_BINARIES1强制使用系统工具链规避容器内权限问题预下载libsciter-gtk.so并安装 Rust 工具链rustup最终以非 root 用户运行入口脚本为 entrypoint.sh。构建步骤# 克隆本仓库 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参数含义与 entrypoint.sh 的对应关系-v $PWD:/home/user/rustdesk把宿主机仓库挂载到容器工作目录构建产物直接落回宿主机的target/目录两个rustdesk-git-cache/rustdesk-registry-cache卷缓存 cargo 的 git 与 registry 依赖首次构建较慢依赖未缓存之后显著加速PUID/PGID透传宿主机用户 ID/GID保证挂载目录内生成的文件属主正确入口脚本会先sourcecargo 环境entrypoint.sh然后解析附加参数传--release时创建target/release/并复制libsciter-gtk.so进去entrypoint.sh传--target triple时会先执行rustup target add triple支持交叉编译entrypoint.sh最终统一执行VCPKG_ROOT/vcpkg cargo build --locked $argventrypoint.sh--locked确保依赖版本与Cargo.lock严格一致。构建完成后可执行文件按文档说明位于务必在仓库根目录执行否则程序可能找不到依赖的动态库# debug 版 target/debug/rustdesk # release 版构建时追加 --release target/release/rustdesk文档同时提醒容器内的cargo install、cargo run等子命令目前不受支持因为它们会作用于容器环境而非宿主机所有额外构建参数都追加在docker run命令末尾即可。源码文件结构速览官方文档给出的目录结构与实际仓库一致此处补充各目录下的实际内容作为导航libs/hbb_common视频编解码封装、配置、TCP/UDP 封装、protobuf 消息、文件传输的文件系统函数等公共库。从git submodule status输出看该目录以 git 子模块形式挂载构建前需要初始化子模块libs/scrap屏幕捕获库。其 src/ 下按后端拆分dxgi/Windows、quartz/macOS、x11/、wayland/、android/以及common/中的 aom/vpx/hwcodec/camera 等编解码模块libs/scrap/Cargo.toml 的 featurewayland、drm、hwcodec、vram、mediacodec与主 Cargo.toml 的特性开关一一对应libs/enigo跨平台的鼠标键盘控制库包含linux/、macos/、win/三套实现与统一的 DSL 接口src/uiSciter GUI核心入口为 src/ui/index.html 与配套的.tis模板和.css样式文件另有 remote、chatbox、file_transfer 等页面src/server被控端服务集合可看到audio_service.rs音频、clipboard_service.rs剪贴板、input_service.rs输入注入、video_service.rs/display_service.rs视频显示、video_qos.rsQoS 限速、connection.rs网络连接以及terminal_service.rs等src/client.rspeer 连接的建立与远端会话主逻辑src/rendezvous_mediator.rs与 rustdesk-serverhbbs/hbbr通信负责等待远端重定向TCP 打洞或回退到中继连接src/platform平台相关代码mod.rs之下含linux.rs、macos.rs、windows.rs、windows/ACL、服务注册表等 Windows 专属模块及 macOS 特权安装脚本privileges_scripts/。小结RustDesk 的构建流程围绕三条主线展开Sciter 动态库GUI→ 系统开发库GTK3/X11/音频/汇编器按发行版差异安装→ vcpkg manifest 化的 C 编解码栈libvpx/libyuv/opus/aomvcpkg 固定 2023.04.15。本地路线适合快速迭代VCPKG_ROOT$HOME/vcpkg cargo run一步出结果Docker 路线则把全部依赖固化进rustdesk-builder镜像借助 cargo 卷缓存与entrypoint.sh的--release/--target参数解析实现了宿主机零依赖、产物直出target/的可复现构建。两条路线共用同一套 vcpkg.json 依赖声明与 build.rs 构建脚本特性开关hwcodec、drm、flutter等可按需叠加从而覆盖了从最小构建到全平台发布构建的完整场景。【免费下载链接】rustdeskAn open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.项目地址: https://gitcode.com/GitHub_Trending/ru/rustdesk创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →