RustDesk | 开源远程桌面软件

适配主流的操作系统

GitHub:https://github.com/rustdesk/rustdesk

rustdesk有快照模式,连接过一次后便能记录下机器码id

工作原理

https://github.com/rustdesk/rustdesk/wiki/How-does-RustDesk-work%3F

采用rendezvous protocols协议,进行P2P式的网络连接,客户端双方由rendezvous protocols搭建的服务器进行数据的传输和保留隐私性

协议

Rendezvous_protocol:

rendezvous protocols协议是一种计算机网络协议,它使资源或P2P网络对等体能够相互查找。集合协议使用握手模型,这与直接复制数据的 eager 协议不同。在集合协议中,当目的地说数据准备就绪时发送数据,但在预先协议中,假设目的地可以存储数据,则发送数据。

由于防火墙网络地址转换 (NAT) 问题,rendezvous protocols协议通常要求至少有一个未阻止和未 NATed 的服务器,该服务器允许对等方相互定位并启动并发数据包。

安装

安装的话直接看文档就行

Windows和Android可直接使用安装包执行程序进行安装

Linux、mac有deb程序包,进行编译安装

arm内核的嵌入式设备也有执行编译文件

或者采用docker的方式来部署

设置中文模式

文件结构

自建服务器

https://github.com/rustdesk/rustdesk-server/releases

自建服务器 :: RustDesk文档

安装

步骤1: 下载服务器端软件程序

下载或者使用docker rustdesk/rustdesk-server

提供版本:

  • Linux
  • Windows

以下针对Linux版本做使用说明。

有两个可执行文件和一个文件夹:

  • hbbs - RustDesk ID注册服务器
  • hbbr - RustDesk 中继服务器

Linux版本在Centos7构建,在 Centos7/8,Ubuntu 18/20上测试过,Debian系列的发行版本应该都没有问题。如果有其他发行版本需求,请联系我。

服务器要求

硬件要求很低,最低配置的云服务器就可以了,CPU和内存要求都是最小的。关于网络大小,如果TCP打洞直连失败,就要耗费中继流量,一个中继连接的流量在30k-3M每秒之间(1920x1080屏幕),取决于清晰度设置和画面变化。如果只是办公需求,平均在100K/s。

步骤2: 在服务器上运行 hbbs 和 hbbr

在服务器上运行 hbbs/hbbr (Centos 或 Ubuntu)。建议使用pm2 管理服务。

./hbbs -r <hbbr运行所在主机的地址[:port]>

./hbbr

或者使用 pm2 运行 hbbs/hbbr

pm2 start hbbs -- -r <relay-server-ip[:port]>

pm2 start hbbr

pm2 需要 nodejs v16+,如果你运行 pm2 失败(例如在 pm2 list 中看不到 hbbs/hbbr),请从 https://nodejs.org 下载并安装 LTS 版本的 nodejs。 如果你想让 hbbs/hbbr 在重启后自动运行,请查看 pm2 save 和 pm2 startup。 更多关于 pm2。另一个不错的日志工具是 pm2-logrotate

hhbs的-r参数不是必须的,他只是方便你不用在客户端指定中继服务器,如果是默认21117端口,可以不填port。客户端指定的中继服务器优先级高于这个。

默认情况下,hbbs 监听21115(tcp), 21116(tcp/udp), 21118(tcp),hbbr 监听21117(tcp), 21119(tcp)。务必在防火墙开启这几个端口, 请注意21116同时要开启TCP和UDP。其中21115是hbbs用作NAT类型测试,21116/UDP是hbbs用作ID注册与心跳服务,21116/TCP是hbbs用作TCP打洞与连接服务,21117是hbbr用作中继服务, 21118和21119是为了支持网页客户端。如果您不需要网页客户端(21118,21119)支持,对应端口可以不开。

  • TCP(21115, 21116, 21117, 21118, 21119)
  • UDP(21116)

如果你想选择自己的端口,使用 “-h” 选项查看帮助。

Docker示范

Linux/amd64

sudo docker image pull rustdesk/rustdesk-server

sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbs -r <relay-server-ip[:port]>

sudo docker run --name hbbr -p 21117:21117 -p 21119:21119 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server hbbr

Linux/arm64v8

sudo docker image pull rustdesk/rustdesk-server:latest-arm64v8

sudo docker run --name hbbs -p 21115:21115 -p 21116:21116 -p 21116:21116/udp -p 21118:21118 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server:latest-arm64v8 hbbs -r <relay-server-ip[:port]>

sudo docker run --name hbbr -p 21117:21117 -p 21119:21119 -v `pwd`:/root -td --net=host rustdesk/rustdesk-server:latest-arm64v8 hbbr

据我所知,–net=host 仅适用于 Linux,它让 hbbs/hbbr 可以看到对方真实的ip, 而不是固定的容器ip (172.17.0.1)。 如果–net=host运行正常,-p选项就不起作用了, 可以去掉。

请去掉 –net=host,如果您在非Linux系统上遇到无法连接的问题

步骤3: 在客户端设置 hbbs/hbbr 地址

点击 ID 右侧的菜单按钮如下,选择“ ID/中继服务器”。

在 ID 服务器输入框中(被控端+主控端)输入 hbbs 主机或 ip 地址,另外两个地址可以不填,RustDesk会自动推导(如果没有特别设定),中继服务器指的是hbbr(21116)端口。

例如:

hbbs.example.com

或者

hbbs.example.com:21116

把配置放在可执行文件名里 (Windows only)

把rustdesk.exe 修改为 rustdesk-host=<host-ip-or-name>,key=<public-key-string>.exe, 例如: rustdesk-host=192.168.1.137,key=xfdsfsd32=32.exe,你可以在About窗口看到配置结果,如下图所示。

host 和 key 都需要添加,缺少一个就不好使。

If there are invalid characters in the key which can not be used in file name, please remove id_ed25519 file and restart your hbbs/hbbr, the id_ed25519.pub file will be regenerated, please repeat until you get valid characters.

Menu

About Page

Key


同上个版本不同,本版本中的key是强制的,但是不用你自己设置。hbbs在第一次运行时,会自动产生一对加密私钥和公钥(分别位于运行目录下的id_ed25519和id_ed25519.pub文件中),其主要用途是为了通讯加密。

如果您在上一步骤中没有填写Key:(公钥文件id_ed25519.pub中的内容),不影响连接,但是连接无法加密。

cat ./id_ed25519.pub

如果您禁止没有key的用户建立非加密连接,请在运行hbbs和hbbr的时候添加-k _ 参数,例如:

./hbbs -r <relay-server-ip[:port]> -k _

./hbbr -k _

如果要更改key,请删除 id_ed25519 和 id_ed25519.pub 文件并重新启动 hbbs/hbbr,hbbs将会产生新的密钥对。

WINDOWS & PM2

安装NodeJs

请点击下载安装,可能会有点慢,如果卡顿太久,尝试关掉重新安装。 NodeJs是pm2的运行时环境,所以要先安装NodeJs。

安装pm2

在cmd.exe中分别输入下面三行,每一行都要按回车键,一行一行运行。

npm install -g pm2

npm install pm2-windows-startup -g

pm2-startup install

运行hbbr和hbbs

  • hbbs - RustDesk ID注册服务器
  • hbbr - RustDesk 中继服务器

下载Windows版本服务器程序,假设你解压缩到了C盘下。分别运行下面四行命令。

端口号请参考安装的步骤二

默认情况下,hbbs 监听21115(tcp)和21116(tcp/udp) ,hbbr 监听21117(tcp). 务必在防火墙开启这几个端口.

如果你想选择自己的端口,使用 “-h” 选项查看帮助.

cd c:\rustdesk-server-windows-x64 pm2 start hbbs.exe -- -r hbbr运行所在主机的地址:端口号

pm2 start hbbr.exe

pm2 save

查看log

pm2 log hbbr pm2 log hbbs

效果

控制使用手册

使用手册 :: RustDesk文档

移动端

控制其他设备的屏幕


在首页中输入目标设备的ID或选择历史设备,即可进行验证。 验证成功后即可控制对方的桌面。

首页

连接成功

输入控制提供鼠标模式/触屏模式两种模式,可以通过下方工具栏进行切换。

进入

模式选择

在鼠标模式中,你也可以通过双指轻触触发远程设备的鼠标右键

管理其他设备的文件,相互传输文件 (安卓)


1.1.9版本开始,安卓客户端增加了管理其他设备文件的功能。

在首页的已连接设备列表中,找到需要进行文件控制的目标设备ID。

长按或点击右侧更多选项即可选择文件传输

首页

连接成功

  • 初始目录是设备的Home目录,可以点击 快速回到Home。
  • 在标题栏下方是目录层级,可以点击相应文件夹快速跳转。
  • 点击 可以访问上级目录。
  • 列表底部会提示当前绝对路径和项目统计。
  • 点击标题栏的本地 / 远程 进行页面切换。

如何传输文件?

多选模式

文件粘贴

  1. 长按列表中的文件或文件夹可以可快速进入多选模式,可以进行多项目删除,或文件传输。
  2. 选择文件后切换本地 / 远程页面,切换页面后将看到粘贴到这里?的提示,点击图中的粘贴文件图标即可将选中的文件/文件夹传输至目标目录。

设置ID/中继服务器


通过底部导航栏点击设置,进入设置页面点击ID/中继服务器。 输入并提交后会自动切换至指定服务器。 也可以通过右上角扫描二维码。 下图是安卓截图,如果是iOS,对应选项在主界面右上角菜单中。

Android被控

共享安卓手机的屏幕或者文件


1.1.9版本开始,安卓客户端增加了共享手机屏幕和共享手机文件系统的功能。

  • 基础屏幕共享功能需要安卓6及以上版本
  • 共享手机系统内部音频需要安卓10及以上版本
  • IOS尚不支持屏幕共享

获取权限与开启服务

通过底部导航栏点击共享屏幕

根据需要,配置各项权限, 每次启动RustDesk后,“屏幕录制"以及“输入控制"权限都再次重新申请。

权限

说明

屏幕录制

是否启动屏幕录制共享权限,启动的同时即开启监听服务

输入控制*

是否允许控制者控制手机的输入,比如用鼠标进行虚拟触屏操作

文件传输*

是否开启文件传输权限,启动后可远程控制这台手机的文件系统

音频录制

是否共享手机内部的系统音乐(非麦克风输入)

其中,* 代表特殊权限,获取此类权限需要跳转到安卓系统设置页面手动获取,详情如下

特殊权限获取 - 文件

获取安卓文件权限将会自动跳转到系统设置页面

特殊权限获取 - 鼠标输入

步骤 一 找到“已安装的服务”

步骤 二 启动RustDesk Input

以上演示操作系统为 Samsung Galaxy S10 mobile11 OneUI, 不同安卓手机系统的系统设置页面可能会不同,请根据您的系统页面调整

远程鼠标控制安卓的快捷操作:

  • 点击鼠标右键:返回
  • 点击鼠标滚轮:Home
  • 长按鼠标滚轮:最近打开的应用
  • 鼠标滚轮滚动:模拟垂直方向的滑动

启动服务

获取 屏幕录制 权限后将自动启动服务,也可以通过点击启动服务按钮开启服务,服务启动后即可接受来自其他设备的桌面控制请求。

若开启了文件传输权限,也可以接受来自其他设备的文件控制请求。

启动服务后,会自动为此设备获取唯一ID和随机的密码,其他设备可以通过ID与密码对手机进行控制,也可以在收到新请求时手动进行确认。

启动服务前

启动服务后

  1. 点击启动服务会默认开启屏幕录制权限。
  2. 未获得屏幕录制权限时,其他设备无法发出控制请求。
  3. 除屏幕录制权限外,其他权限的切换只会对新的连接产生影响,不会影响已经建立的连接。如需对已建立的连接切换权限,请先关闭当前连接,修改权限后再接收控制请求。

PC端:

mobile端:

可以随时停止服务或关闭指定连接

可以接收或发起聊天

MAC

安装


打开 .dmg 文件并将 RustDesk 拖到 应用程序,如下所示。

确保您已退出所有正在运行的 RustDesk。还要确保退出托盘上显示的 RustDesk 服务。

允许 RustDesk 运行

解锁改变

点击"App Store and identified developers"

启用权限

Due to MacOS security policy change, our api which captures input on local side does not work any more. You have to enable “Input Monitoring” permission on local Mac side. Please follow this

https://github.com/rustdesk/rustdesk/issues/974#issuecomment-1185644923

It seems no quick fix, we need to fix together with our Flutter version.

为了获得捕获屏幕的能力,您需要授予 RustDesk 辅助功能 权限和 屏幕录制 权限。 RustDesk 将引导您进入设置窗口。

RustDesk 窗口

设置窗口

如果您在设置窗口中启用了它,但 RustDesk 仍然会发出警告。请通过 - 按钮从设置窗口中删除 RustDesk,然后单击 + 按钮,在 /Applications 中选择 RustDesk。

- + 按钮

选择 RustDesk

请按照上面相似步骤设置*屏幕录制**权限。

LINUX

安装

Ubuntu (>= 16)

# please ignore the wrong disk usage report sudo apt install -fy ./rustdesk-<version>.deb

centos/fedora (>=18)

sudo yum localinstall ./rustdesk-<version>.rpm

arch/manjaro

sudo pacman -U ./rustdesk-<version>.pkg.tar.zst

Opensuse (> = Leap 15.0)

sudo zypper install --allow-unsigned-rpm ./rustdesk-<version>-suse.rpm

X11 Required

rustdesk还不支持wayland;您需要手动切换到 X11。

显示服务器

Ubuntu|fedora|arch

登录屏幕

将以下行修改为 in 或 :WaylandEnable=false

需要修改的配置文件:

  • /etc/gdm/custom.conf
  • /etc/gdm3/custom.conf

#WaylandEnable=false

重新启动以使上述更改生效:reboot

编译

关于打包桌面版本, 请查看 build.py

依赖

C++编译环境

推荐下载msvc并安装

Rust 开发环境

下载rustup-init.exe并安装

vcpkg(c++包管理工具)

使用git-bash运行下列命令, 下载vcpkg, 安装libvpx, libyuv, opus

  git clone https://github.com/microsoft/vcpkg
  cd vcpkg
  git checkout 2021.12.01
  cd ..
  vcpkg/bootstrap-vcpkg.bat
  export VCPKG_ROOT=$PWD/vcpkg
  vcpkg/vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static

添加环境变量VCPKG_ROOT=<path>\vcpkg。

Sciter

桌面版本使用sciter , 下载动态库sciter.dll

llvm

rust-bindgen依赖于clang, 下载llvm并安装, 添加环境变量LIBCLANG_PATH,值为<llvm_install_dir>/bin

构建

git clone https://github.com/rustdesk/rustdesk
cd rustdesk
mkdir -p target/debug
mv sciter.dll target/debug
cargo run

WINDOWS 常见问题

vcpkg下载包失败

错误示例

 -- Fetching https://chromium.googlesource.com/libyuv/libyuv 287158925b0e03ea4499a18b4e08478c5781541b...
   CMake Error at scripts/cmake/vcpkg_execute_required_process.cmake:127 (message):
       Command failed: D:/program/Git/mingw64/bin/git.exe fetch https://chromium.googlesource.com/libyuv/libyuv 287158925b0e03ea4499a18b4e08478c5781541b --depth 1 -n

解决方法

使用浏览器下载https://chromium.googlesource.com/libyuv/libyuv/+archive/287158925b0e03ea4499a18b4e08478c5781541b.tar.gz, 然后放到vcpkg/downloads下, 重新安装.

Cargo.lock里的版本不存在

错误示例

cargo run
       Updating git repository `https://github.com/open-trade/confy`
   warning: spurious network error (2 tries remaining): failed to receive response: 操作超时
   ; class=Os (2)
   error: failed to get `confy` as a dependency of package `hbb_common v0.1.0 (D:\rustdesk\rustdesk\rustdesk\libs\hbb_common)`

   Caused by:
     failed to load source for dependency `confy`

   Caused by:
     Unable to update https://github.com/open-trade/confy#27fa1294

   Caused by:
     object not found - no match for id (27fa12941291b44ccd856aef4a5452c1eb646047); class=Odb (9); code=NotFound (-3)

可能作者使用git force push覆盖了之前的commit

解决方法

cargo update强制更新包

VCPKG_ROOT环境变量未设置

错误示例

thread 'main' panicked at 'Failed to find package: VcpkgNotFound("No vcpkg installation found. Set the VCPKG_ROOT environment variable or run 'vcpkg integrate install'")', libs\scrap\build.rs:7:45

解决办法

添加VCPKG_ROOT环境变量, 或者使用VCPKG_ROOT=<vcpkg_dir> cargo run

未安装clang环境, 或未设置LIBCLANG_PATH环境变量

错误示例

thread 'main' panicked at 'Unable to find libclang: "couldn't find any valid shared libraries matching: ['clang.dll', 'libclang.dll'], set the `LIBCLANG_PATH` environment variable to a path where one of these files can be found (invalid: [])"', C:\Users\selfd\.cargo\registry\src\mirrors.ustc.edu.cn-61ef6e0cd06fb9b8\bindgen-0.59.2\src/lib.rs:2144:31

解决办法

安装llvm, 设置LIBCLANG_PATH环境变量为llvm_install_dir/bin

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐