rustdesk/rustdesk
GitHub: rustdesk/rustdesk
一款基于 Rust 开发的开源远程桌面软件,支持自建服务器、跨平台远程控制、文件传输和 TCP 隧道功能。
Stars: 108578 | Forks: 16165

Build •
Docker •
Structure •
Snapshot
[Українська] | [česky] | [中文] | [Magyar] | [Español] | [فارسی] | [Français] | [Deutsch] | [Polski] | [Indonesian] | [Suomi] | [മലയാളം] | [日本語] | [Nederlands] | [Italiano] | [Русский] | [Português (Brasil)] | [Esperanto] | [한국어] | [العربي] | [Tiếng Việt] | [Dansk] | [Ελληνικά] | [Türkçe] | [Norsk] | [Română]
We need your help to translate this README, RustDesk UI and RustDesk Doc to your native language
加入讨论:[Discord](https://discord.gg/nDceKgxnkV) | [Twitter](https://twitter.com/rustdesk) | [Reddit](https://www.reddit.com/r/rustdesk) | [YouTube](https://www.youtube.com/@rustdesk)
又一远程桌面软件,使用 Rust 编写。开箱即用,无需任何配置。您完全掌控自己的数据,无需担忧安全性。您可以使用我们的 rendezvous/relay 服务器,也可以[自建](https://rustdesk.com/server),或者[编写自己的 rendezvous/relay 服务器](https://github.com/rustdesk/rustdesk-server-demo)。

[**常见问题**](https://github.com/rustdesk/rustdesk/wiki/FAQ)
[**二进制文件下载**](https://github.com/rustdesk/rustdesk/releases)
[**每日构建 (Nightly Build)**](https://github.com/rustdesk/rustdesk/releases/tag/nightly)
[

](https://f-droid.org/en/packages/com.carriez.flutter_hbb)
[

](https://flathub.org/apps/com.rustdesk.RustDesk)
## 依赖
桌面版本使用 Flutter 或 Sciter(已弃用)作为 GUI,本教程仅针对 Sciter,因为它入门更简单友好。请查看我们的 [CI](https://github.com/rustdesk/rustdesk/blob/master/.github/workflows/flutter-build.yml) 以构建 Flutter 版本。
请自行下载 Sciter 动态库。
[Windows](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.win/x64/sciter.dll) |
[Linux](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so) |
[macOS](https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.osx/libsciter.dylib)
## 构建的基本步骤
- 准备好 Rust 开发环境和 C++ 构建环境
- 安装 [vcpkg](https://github.com/microsoft/vcpkg),并正确设置 `VCPKG_ROOT` 环境变量
- 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
- 运行 `cargo run`
## [构建](https://rustdesk.com/docs/en/dev/build/)
## 如何在 Linux 上构建
### Ubuntu 18 (Debian 10)
```
sudo 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-dev libpam0g-dev
```
### openSUSE Tumbleweed
```
sudo 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-devel pam-devel
```
### 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 gstreamer1-devel gstreamer1-plugins-base-devel pam-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
```
### 安装 vcpkg
```
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
```
### 修复 libvpx (针对 Fedora)
```
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
```
### 构建
```
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
git clone --recurse-submodules 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
```
## 如何使用 Docker 构建
首先克隆仓库并构建 Docker 容器:
```
git clone https://github.com/rustdesk/rustdesk
cd rustdesk
git submodule update --init --recursive
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
```
请注意,首次构建在缓存依赖项之前可能需要较长时间,随后的构建会更快。此外,如果您需要向构建命令指定不同的参数,可以在命令末尾的 `
` 位置添加。例如,如果您想构建优化后的 release 版本,可以在上述命令后跟 `--release`。生成的可执行文件将在您系统的 target 文件夹中可用,可以通过以下方式运行:
```
target/debug/rustdesk
```
或者,如果您运行的是 release 可执行文件:
```
target/release/rustdesk
```
请确保您在 RustDesk 仓库的根目录下运行这些命令,否则应用程序可能无法找到所需的资源。另请注意,目前不支持通过此方法使用其他 cargo 子命令(如 `install` 或 `run`),因为它们会在容器内而不是主机上安装或运行程序。
## 文件结构
- **[libs/hbb_common](https://github.com/rustdesk/rustdesk/tree/master/libs/hbb_common)**: 视频编解码器、配置、tcp/udp 封装、protobuf、用于文件传输的 fs 函数以及其他实用函数
- **[libs/scrap](https://github.com/rustdesk/rustdesk/tree/master/libs/scrap)**: 屏幕捕获
- **[libs/enigo](https://github.com/rustdesk/rustdesk/tree/master/libs/enigo)**: 特定平台的键盘/鼠标控制
- **[libs/clipboard](https://github.com/rustdesk/rustdesk/tree/master/libs/clipboard)**: Windows, Linux, macOS 的文件复制粘贴实现。
- **[src/ui](https://github.com/rustdesk/rustdesk/tree/master/src/ui)**: 旧的 Sciter UI(已弃用)
- **[src/server](https://github.com/rustdesk/rustdesk/tree/master/src/server)**: 音频/剪贴板/输入/视频服务,以及网络连接
- **[src/client.rs](https://github.com/rustdesk/rustdesk/tree/master/src/client.rs)**: 启动对等连接
- **[src/rendezvous_mediator.rs](https://github.com/rustdesk/rustdesk/tree/master/src/rendezvous_mediator.rs)**: 与 [rustdesk-server](https://github.com/rustdesk/rustdesk-server) 通信,等待远程直接(TCP 打洞)或中继连接
- **[src/platform](https://github.com/rustdesk/rustdesk/tree/master/src/platform)**: 特定平台代码
- **[flutter](https://github.com/rustdesk/rustdesk/tree/master/flutter)**: 桌面和移动端的 Flutter 代码
- **[flutter/web/js](https://github.com/rustdesk/rustdesk/tree/master/flutter/web/v1/js)**: Flutter Web 客户端的 JavaScript 代码
## 截图



标签:Awesome, Docker, Flutter, IT管理, P2P, PE 加载器, RDP, Rust, RustDesk, Sciter, TeamViewer替代, VNC, 低延迟, 可视化界面, 安全防御评估, 开源, 文件传输, 桌面共享, 端到端加密, 系统管理, 网络工具, 网络流量审计, 自托管, 请求拦截, 远程办公, 远程协助, 远程控制, 远程桌面, 远程访问, 通知系统, 通知系统