使用github action编译自定义rustdesk客户端指南(内置自己的服务器信息、内置固定密码、内置自定义api服务器)

为何青睐rustdesk

远程功能刚需,parsec近期总是延迟莫名爆表,故而转投rustdesk。在搭建了自己的信号、中继服务器和第三方api以后,无比心水官方付费的自定义客户端功能,因此采用了本篇的廉价0元方案。

前期准备

  1. 会使用git远程连接github仓库,并会简单的git push指令
  2. 已搭建好rustdesk自托管服务器和api服务器
  3. 本指南适用于目前最新的1.4.0版本

操作指南

  1. fork或者import rustdesk/hbb_common和rustdesk/rustdesk这两个项目(建议import并设置不公开,因为后面如果需要固定被控端密码的话,你的密码会以明文的形式公开在自己名下的仓库中)
  2. 针对hbb_common仓库的操作
    git clone 你自己名下的hbb_common仓库到本地,在src/config.rs中修改RENDEZVOUS_SERVERS字段为自己的服务器地址,修改RS_PUB_KEY字段为自己的服务器key(简单的替换即可)

还是src/config.rs文件,找到HARD_SETTINGS字段
将那一整行替换为如下代码块:

 pub static ref HARD_SETTINGS: RwLock<HashMap<String, String>> = {
        let mut map = HashMap::new();
        map.insert("password".to_string(), "<明文填写你要固定的被控端密码>".to_string());
        RwLock::new(map)
    };

最后,将以上所有调整push到github仓库
(hbb_common仓库的相关改动直接在网页修改也可以)

  1. 针对rustdesk仓库的操作
    git clone 你自己名下的rustdesk仓库到本地,首先删除官方源码中的引用hbb_common子模块(直接在本地删除libs/hbb_common那个空文件夹即可)
    cd到本地rustdesk仓库根目录,添加上面自己修改过的hbb_common子模块
git submodule add https://github.com/<你自己的github用户名>/hbb_common libs/hbb_common

替换过子模块后push,再输一次如下指令强制更新子模块

git submodule sync

查找到rustdesk仓库中src/common.rs文件的get_custom_rendezvous_server这个函数,下面有个官方的api地址,将其替换成自己的,最后push(这一步其实也可以直接在网页操作)

对两个仓库所作的修改完毕,务必记得一定要push到github上自己名下的仓库!!!

  1. 使用github action在线编译
    在<自己名下的>/rustdesk项目,找到Settings → Actions → General,确保勾选Allow all actions and reusable workflows和Read and write permissions两项

回到本地rustdesk仓库,创建一个tag

git tag -a <自己拟一个tag名> -m "这是我的自定义客户端tag"

在<自己名下的>/rustdesk项目,找到Actions,点击"i understand xxxx"那个按钮

回到本地rustdesk仓库,输入

git push --tags

将刚才新创建的标签同步到远程仓库

在actions页找到Full Flutter CI,选择"run workflow"并点开branch下拉,选择刚才创建的标签

然后,愉快的开始run,等跑完去releases就能下到自己的专属rustdesk客户端啦~

26 个赞

感谢大佬教程,有时间就去试试 :star_struck:

感谢大佬!

写错了 是 RENDEZVOUS_SERVERS 不是 RSENDZVOUS_SERVER

1 个赞

是的hhh 感谢指正

hbb_common 仓库私有化,编译报错了,没权限, rustdesk 也没权限

请问能否实现被控不弹窗提醒,每次都弹窗挺烦的

hbb_common仓库如果私有化,rustdesk编译会因为没权限而报错,这个怎么解决呢?

嗷,的确存在这个问题,写文的时候没确认这点。应该可以通过安全变量的方式存储密码,但是我没有尝试过

1 个赞

感谢大佬分享 一直在尝试自己编译

可能是因为,主项目没有正确同步fork下来的子项目hbb_common模块,可以在github页面上点击libs/hbb_common看会不会正确跳转子项目

我参考另一个大佬,在论坛上传了一个ai总结的文档: 通过Github Action 编译rustdesk - 文档共建 - LINUX DO,你可以试试

有没有编译好的?
我的需求是生成的rustdesk客户端 进程名和相关的描述特征要改成别的名字
因为公司电脑强制装的安全杀软会把rustdesk给禁用
所以需要改个进程名和特征描述
现在是只要下载到正版的rustdesk和运行,安全软件就会直接扫描到并且提示禁止使用,不会删除exe,只是不让你运行
所以我需要修改进程名和相关特征,访问的时候我是IP直连

做三步

  1. 创建 Fine-grained Token
    访问 Sign in to GitHub · GitHub
    点击 “Generate new token”
    配置:
    Token name: 随便写
    Expiration: 永久
    Repository access: 选择 “Only select repositories”
    搜索并选择 你的id/hbb_common
    Permissions → Repository permissions:
    Contents: Read-only (Access: Read-only)
    Metadata: Read-only (自动勾选,必需)
    其他权限全部留空
    点击 “Generate token” 并复制新 token
    接着添加token
    访问你的rustdesk仓库设置页面:
    点击右上角的 “New repository secret” 按钮
    填写表单:
    Name: SUBMODULE_TOKEN (必须是这个名字,因为 workflow 中将用的是这个)
    Secret: 粘贴你刚才复制的 token (完整的 github_pat_11AEKTLOQ0...)
    点击 “Add secret” 保存
    2.修改所有workflows yml配置的拉取方式
    将包含uses: actions/checkout的部分(无论v3还是v4)做如下替换
- name: Checkout source code
  uses: actions/checkout@v4
  with:
    submodules: recursive

部分替换为

- name: Checkout source code
  uses: actions/checkout@v4

- name: Setup Git for private submodules
  run: |
    git config --global url."https://${{ secrets.SUBMODULE_TOKEN }}@github.com/".insteadOf "https://github.com/"
    git submodule update --init --recursive

3.显示传入secrets给workflow流
两个文件flutter-ci.yml和flutter-build.yml中用到诸如

uses: ./.github/workflows/flutter-build.yml
with:
  upload-artifact: false

的地方改成

uses: ./.github/workflows/flutter-build.yml
with:
  upload-artifact: false
secrets: inherit

跑完Full Flutter CI 发现没有产物,签名和编译msi什么的直接被跳过了,用的目前最新的master分支