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的方式来部署
设置中文模式
文件结构
- libs/hbb_common:视频编解码器、配置、tcp/udp 包装器、原型布夫、用于文件传输的 fs 函数以及其他一些实用程序函数
- 库/废料:屏幕捕获
- 库/enigo:平台特定的键盘/鼠标控制
- src/ui: 图形用户界面
- src/服务器:音频/剪贴板/输入/视频服务和网络连接
- src/client:启动对等连接
- src/rendezvous_mediator.rs:与服务器通信,等待远程直接连接(TCP 打孔)或中继连接
- src/平台:平台特定代码
- 颤振:移动抖动代码
- 颤抖/web/js: Javascript for Flutter web client
自建服务器
https://github.com/rustdesk/rustdesk-server/releases
安装
步骤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
效果
控制使用手册
移动端
控制其他设备的屏幕
在首页中输入目标设备的ID或选择历史设备,即可进行验证。 验证成功后即可控制对方的桌面。
首页 | 连接成功 |
输入控制提供鼠标模式/触屏模式两种模式,可以通过下方工具栏进行切换。
进入 | 模式选择 |
在鼠标模式中,你也可以通过双指轻触触发远程设备的鼠标右键
管理其他设备的文件,相互传输文件 (安卓)
1.1.9版本开始,安卓客户端增加了管理其他设备文件的功能。
在首页的已连接设备列表中,找到需要进行文件控制的目标设备ID。
长按或点击右侧更多选项即可选择文件传输
首页 | 连接成功 |
- 初始目录是设备的Home目录,可以点击 快速回到Home。
- 在标题栏下方是目录层级,可以点击相应文件夹快速跳转。
- 点击 可以访问上级目录。
- 列表底部会提示当前绝对路径和项目统计。
- 点击标题栏的本地 / 远程 进行页面切换。
如何传输文件?
多选模式 | 文件粘贴 |
- 长按列表中的文件或文件夹可以可快速进入多选模式,可以进行多项目删除,或文件传输。
- 选择文件后切换本地 / 远程页面,切换页面后将看到粘贴到这里?的提示,点击图中的粘贴文件图标即可将选中的文件/文件夹传输至目标目录。
设置ID/中继服务器
通过底部导航栏点击设置,进入设置页面点击ID/中继服务器。 输入并提交后会自动切换至指定服务器。 也可以通过右上角扫描二维码。 下图是安卓截图,如果是iOS,对应选项在主界面右上角菜单中。
Android被控
共享安卓手机的屏幕或者文件
1.1.9版本开始,安卓客户端增加了共享手机屏幕和共享手机文件系统的功能。
- 基础屏幕共享功能需要安卓6及以上版本
- 共享手机系统内部音频需要安卓10及以上版本
- IOS尚不支持屏幕共享
获取权限与开启服务
通过底部导航栏点击共享屏幕
根据需要,配置各项权限, 每次启动RustDesk后,“屏幕录制"以及“输入控制"权限都再次重新申请。
权限 | 说明 |
屏幕录制 | 是否启动屏幕录制共享权限,启动的同时即开启监听服务 |
输入控制* | 是否允许控制者控制手机的输入,比如用鼠标进行虚拟触屏操作 |
文件传输* | 是否开启文件传输权限,启动后可远程控制这台手机的文件系统 |
音频录制 | 是否共享手机内部的系统音乐(非麦克风输入) |
其中,* 代表特殊权限,获取此类权限需要跳转到安卓系统设置页面手动获取,详情如下
特殊权限获取 - 文件
获取安卓文件权限将会自动跳转到系统设置页面 |
特殊权限获取 - 鼠标输入
步骤 一 找到“已安装的服务” | 步骤 二 启动RustDesk Input |
以上演示操作系统为 Samsung Galaxy S10 mobile11 OneUI, 不同安卓手机系统的系统设置页面可能会不同,请根据您的系统页面调整
远程鼠标控制安卓的快捷操作:
- 点击鼠标右键:返回
- 点击鼠标滚轮:Home
- 长按鼠标滚轮:最近打开的应用
- 鼠标滚轮滚动:模拟垂直方向的滑动
启动服务
获取 屏幕录制 权限后将自动启动服务,也可以通过点击启动服务按钮开启服务,服务启动后即可接受来自其他设备的桌面控制请求。
若开启了文件传输权限,也可以接受来自其他设备的文件控制请求。
启动服务后,会自动为此设备获取唯一ID和随机的密码,其他设备可以通过ID与密码对手机进行控制,也可以在收到新请求时手动进行确认。
启动服务前 | 启动服务后 |
- 点击启动服务会默认开启屏幕录制权限。
- 未获得屏幕录制权限时,其他设备无法发出控制请求。
- 除屏幕录制权限外,其他权限的切换只会对新的连接产生影响,不会影响已经建立的连接。如需对已建立的连接切换权限,请先关闭当前连接,修改权限后再接收控制请求。
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。
显示服务器
登录屏幕
将以下行修改为 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
更多推荐
所有评论(0)