爱意满满的作品展示区。
sqlpxc

我自己开发了一个远程控制软件 Airhand 欢迎 star~ 支持 120fps

  •  2
     
  •   sqlpxc · 1 day ago · 2277 views

    airhand

    我是 airhand 的开发者,项目地址:https://github.com/sqlpxc/airhand,欢迎 Star ⭐

    FAQ

    为什么还要再做远程控制?为什么不用 RustDesk ?

    最开始的原因很简单:RustDesk 需要部署 hbbs 和 hbbr,开的端口太多了,我总觉得在服务端开很多端口不是什么好事……

    而且它不支持 AV1 硬件编码。(为什么一定要支持这个?自己使用过我的项目就能体会,效果非常不错。)

    为什么之前一直没有编译二进制文件?

    因为早期版本里,如果服务端不可信,是很危险的:服务器管理员甚至可以直接连接任何客户端。

    后来加了配对码功能,我才自己部署了服务端。

    对了,最终 windows 安装包只有不到 4M ,也就一个高清图片大小。。。

    为什么用 QUIC 可靠流,而不是 UDP 或者数据报?

    BBR 就不说了,为什么用可靠流传输画面呢?

    1. 有现成的 TLS 1.3 可以用。
    2. 编码用的是超长 GOP,关键帧只在控制端请求或分辨率变化时才编码,所以每一帧都依赖前一帧。一个包丢了没补上,这一帧就坏了,而且花屏会一直持续到 下一个关键帧。

    关键帧是这里流量消耗最大的地方。重传丢的包至少要等一个 RTT ;即使换成不可靠传输,也躲不开这一个 RTT 的等待,只是多了一个"先显示花屏"的选项。

    远程桌面上满屏都是文字,花屏比晚一个 RTT 在使用体验上更加难受……

    服务器会一直维护吗?

    大概率不会。公共服务端只是给大家体验一下的,而且服务器配置一般,人多了还是会很卡,建议自己部署。

    特性

    • 只需暴露 1 个 UDP 端口:服务端只有一个 UDP 端口需要对外开放。
    • 中转也走 QUIC/UDP + BBR:据我所知,不少远控软件打洞失败后会退到 TCP 中转,比如 RustDesk 的中转就是 TCP 。TCP 上丢一个包,后面所有数据都得等它 重传。
    • 各通道互不阻塞:控制、画面、剪贴板各走一条流,声音和 Ping 走数据报,鼠标操作不会排在大帧后面。
    • 延迟不堆积:中转把连接拆成两段,在两端之间又做了一层码率控制。发送端限制在途字节,网络慢时跳到最新一帧,不会越用越卡。
    • 多平台兼容:甚至支持电视端。安卓包直接装到电视上就行,会自动检测是不是电视。
    • 支持安卓控制安卓
    • 自动 UDP 打洞:如果两台设备能打洞成功,画面会按实测时延选更快的那条线路。显示「直连」时网络延迟极低,基本和串流效果差不多。
    • 音频冗余设计:保证音频不断。

    给大家截几个图吧: airhand 截图 airhand 截图

    许可证

    MIT License

    Supplement 1  ·  17h 48m ago

    为什么不用 WebRTC,而是基于 QUIC 自己实现?

    1. 核心原因:服务端只开一个 UDP 端口,部署很简单

    • 本项目:服务端只需开放一个 UDP 端口(默认 4433)。信令、控制码登记、会话配对和字节转发都在同一条 QUIC 连接上完成。
    • 典型的自建 WebRTC:需要部署信令服务和 coturn(STUN/TURN),还要开放一段中继端口范围,部署和维护都更麻烦。

    2. 很多环节可以按需自定义

    在 AI 时代,让 AI 针对具体场景重写,可能比直接套用现有技术效果更好。例如:

    • 选路:ICE 选好候选对之后,应用基本无法控制。这里中转和直连可以同时使用,控制数据两条路各发一份,画面和声音由被控端按探测到的延迟选路。
    • 码率和在途控制:按远程桌面的需求定制,按字节限制在途数据,网络跟不上时跳到最新帧,而不是让延迟越积越多。
    • 媒体管线:硬编 AV1 / HEVC 加 GPU 零拷贝,在 WebRTC 上实现困难,集成成本高。

    服务端能不能单独拿出来,无需使用 Docker?

    可以。

    直接下载

    Releases 里有打包好的 airhand-server.exe,方便在内网使用。

    自行编译(其他系统)

    cargo build --release --locked -p airhand-server
    

    产物在 target/release/ 下。

    运行

    ./airhand-server
    

    默认监听 0.0.0.0:4433(UDP)。证书、私钥和数据库放在程序旁边的 data/ 目录里,不存在时会自动创建并生成证书。也可以显式指定路径:

    # Linux / macOS
    AIRHAND_CERT=data/cert.pem AIRHAND_KEY=data/key.pem ./airhand-server
    
    # Windows PowerShell
    $env:AIRHAND_CERT = "data/cert.pem"
    $env:AIRHAND_KEY = "data/key.pem"
    .\airhand-server.exe
    
    32 replies  •  2026-11-15 23:04:19 +08:00
    humbass
    humbass
    1 day ago
    1
    服务器是不是要一个云服务器可以部署的东西? 没看明白。
    sqlpxc
    sqlpxc
    OP
    1 day ago
    2
    @humbass clone 项目,然后 docker compose up -d 就行,如果在国内的话,服务器的话用国内的轻量云就行,80 一年很便宜的。。。。
    litanid
    litanid
    1 day ago
    3
    大神啊
    default996
    default996
    1 day ago
    4
    目前使用的是 UU 远程 和 RDM ,一个出门用,一个局域网用。你这个还要一个服务器,估计只能圈子内玩了
    loveqianool
    loveqianool
    1 day ago via Android
    5
    有 web 控制端吗?在网页上控制其他设备。
    sqlpxc
    sqlpxc
    OP
    1 day ago
    6
    @loveqianool 有,在 web 目录下 docker compose up ,目前没有部署 web 端。。。。
    loveshuyuan
    loveshuyuan
    1 day ago via iPhone
    7
    对比 uu 远程怎么样呢
    sqlpxc
    sqlpxc
    OP
    1 day ago
    8
    @default996 如果你两个设备在局域网下,其实不会走服务端中转,效果比 UU 应该好得多,还能在电视上串流电脑屏幕
    default996
    default996
    1 day ago
    9
    @sqlpxc #8 在内网中,能够不装 Docker 就直接连接另一台设备吗?
    lanthora
    lanthora
    1 day ago
    10
    能否把打洞和依赖服务端的这部分逻辑拆分出来,单独做一个服务端监听特定端口,客户端直接连接这个端口就能使用的版本,整体类似 vnc ,这样网络部分就可以交给其他产品了。现有的 vnc 在有高分辨率屏幕的 mac 上,非局域网几乎不可用。
    sqlpxc
    sqlpxc
    OP
    1 day ago
    11
    @default996
    @lanthora 服务端是可以单独编译一个二进制的,这个暂时我没有编译,后面我编译一份放 github 上吧,使用 cargo build --release --locked -p airhand-server 可以单独把服务端编译出来,就一个二进制文件,使用 AIRHAND_CERT=data/cert.pem AIRHAND_KEY=data/key.pem ./airhand-server 就可以运行,把服务端放在两个客户端都可以访问的地方就行了
    WhatTheBridgeSay
    12
    支持 RustDesk 自托管中转深度用户,多一个选择总是好的
    tinywind
    tinywind
    1 day ago
    13
    之前也写过一个类似项目 https://www.easyremote.link/
    后面懒得推进维护了。
    PopRain
    PopRain
    1 day ago
    14
    先 star,控制码是不是应该多几位? 服务段有没有防止被人爆破授权码?
    xukongyang
    xukongyang
    1 day ago
    15
    感谢分享源码,已经 star ,在 windows 上编译运行成功,在 rustdesk 自建外又多个选择,能加上文件拷贝功能就更好了
    flyqie
    flyqie
    1 day ago
    16
    有点好奇,为什么传输层要自己 quic 做而不是基于 webrtc 这套来改呢?
    165924
    165924
    1 day ago
    17
    @sqlpxc UU 局域网直连,非局域网优先打洞,实在连不上才会走中转。你印象里的 UU 可能是向日葵那种。uuyc.163.com
    shoaly
    shoaly
    19h 23m ago
    18
    @flyqie #16 为了浏览器直出
    zycode
    zycode
    18h 53m ago
    19
    感谢 LZ,有个问题中专服务器就不能不用 docker?感觉之前买的小水管对 docker 的支持都不怎么好
    lizhenda
    lizhenda
    18h 28m ago
    20
    收藏了,多一个选择总是好的
    sqlpxc
    sqlpxc
    OP
    17h 46m ago
    21
    @flyqie 一开始是想让服务端只暴露 1 个 udp 端口,具体为什么附言里写了
    sqlpxc
    sqlpxc
    OP
    17h 43m ago
    22
    @165924 确实没怎么用过 UU,可能记错了,我对国产闭源远程控制不怎么放心
    sqlpxc
    sqlpxc
    OP
    17h 43m ago
    23
    @zycode 可以,具体附言里写了
    sqlpxc
    sqlpxc
    OP
    17h 40m ago
    24
    @PopRain 有配对码,其实是需要 12 个数字才能连接(6 位控制码和 6 位配对码),而且服务端也有防止暴力试码的
    sqlpxc
    sqlpxc
    OP
    17h 37m ago
    25
    @xukongyang 文件拷贝这个功能还在评估,即使加上了也应该是服务端需要手动开启的功能,因为传输大文件对服务器压力太大了
    yws112358
    yws112358
    14h 44m ago
    26
    可以无人值守 是吗 就是远程自己的机器 使用 UU 到这没解决 win10 下装了它 autocad2014 就崩溃的问题
    fedfrank
    fedfrank
    14h 30m ago
    27
    我做了一个收录开源产品的网站,可以收录一下你的作品不
    https://zm94.com/
    sqlpxc
    sqlpxc
    OP
    14h 21m ago
    28
    @fedfrank 可以
    sqlpxc
    sqlpxc
    OP
    13h 59m ago
    29
    @yws112358 win 下第一次要验证配对码,后面可以直接访问,锁屏界面也可以控制
    heliushao88
    heliushao88
    13h 51m ago via Android
    30
    楼主,能添加隐私屏么,也就是被控端黑屏,不影响远端远程控制
    lizhenjia569
    lizhenjia569
    12h 55m ago
    31
    能达到 UU 远程 p2p 直连 的流畅度吗?达不到我懒得试了
    sqlpxc
    sqlpxc
    OP
    6h 46m ago
    32
    @lizhenjia569 能,而且画面效果比 UU 好
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   889 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 21:50 · PVG 05:50 · LAX 13:50 · JFK 16:50
    ♥ Do have faith in what you're doing.