V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
cby0414
V2EX  ›  分享创造

用 Tauri+egui 做了一款开源 Rust 远程桌面: MirrorX

  •  
  •   cby0414 · 2022-11-23 19:23:53 +08:00 · 7855 次点击
    这是一个创建于 739 天前的主题,其中的信息可能已经有所发展或是发生改变。

    通俗的开头:试遍了市面上的远程桌面,离我需要在 mac 上玩 win 游戏至少 60 帧且能免费不折腾的需求都还有些差距,所以我决定自己写一个。

    之前由于工作原因没有时间来做,在去年底失业玩了 3 个多月且求职屡屡碰壁并看在还有些积蓄的时候,我开始下决心做好这件事。

    目前已发布 0.1.2 版本,基于 tauri 和 egui 使用 Rust 开发,tauri 用于主界面这种性能要求不高但是 ui 业务逻辑有点复杂的地方,egui 用于远程桌面窗口这种性能要求较高但仅需要少量 ui 的地方,桌面图像使用 opengl 绘制。tauri 和 egui 理论上桌面和移动平台都支持,但是目前我还是只主要测试了 Windows 和 macOS 平台,其他平台的支持会慢慢加上去(取决于我的精力😂)

    全部的 3 个组件,包括客户端、信令服务器、中转服务器都完全开源,基于 p2p 打洞的方式正在研究中。

    视频的编解码目前限制在 h264 软编软解,h265 、vp9 和硬件编解码在测试稳定后会加入到编码方式设置里。

    代码仓库

    https://github.com/MirrorX-Desktop/MirrorX

    软件截图

    截图

    最后

    我现在是无业状态,每晚会在 B 站直播写这个项目的代码,有兴趣的 V 友可以来看看: http://live.bilibili.com/9020546

    另外还是希望能找到一份远程的工作,能解决我的生存问题并继续投入在这个项目里,本人经验 go4 年,rust 不到 1 年,有意的请留言或联系~

    最后希望 V 友们能给仓库一个 Star ,谢谢啦😁

    第 1 条附言  ·  2022-12-23 19:11:12 +08:00

    经过一个月拖拖拉拉的开发后,我又来啦~

    昨天发布了v0.1.3版本,带来了全新的UI布局、亮/暗主题以及比较重要的局域网发现与直连功能,个人测试在局域网基本可以秒开。

    本次版本也改善了因为目前唯一的自费搭设的服务器在海外导致很多朋友第一次打开时圈圈转不停各种报错等很影响使用体验的问题。

    注1:由于本次版本有些破坏性更新,所以下载使用新版前请将旧的mirrorx.db删除,具体删除路径可到Github Release页的详情查看。

    注2:很多朋友尝试在虚拟机里使用导致各种报错,由于目前的版本使用了大量的D3D11和opengl的api且没有fallback,如果虚拟机不支持硬件加速或没有开启硬件加速,就会导致D3D设备创建失败或虚拟机系统内的opengl版本过低从而无法正常使用,这点还请各位注意。

    61 条回复    2023-06-13 13:09:34 +08:00
    fzls
        1
    fzls  
       2022-11-23 19:30:45 +08:00   ❤️ 2
    好厉害,远程桌面感觉开发起来好复杂
    amlee
        2
    amlee  
       2022-11-23 19:48:58 +08:00   ❤️ 2
    我去,你能自己做这种项目,为啥还找不到工作
    dragonszy
        3
    dragonszy  
       2022-11-23 19:52:16 +08:00   ❤️ 2
    战略马克
    ihipop
        4
    ihipop  
       2022-11-23 19:53:46 +08:00 via Android   ❤️ 1
    @amlee 找工作就是个人期望和公司期望至少要有另双方满意的契合点,个人能力和个人经历会影响个人的契合点,公司需求和市场环境会影响公司的契合点,不是单方面的。
    dabaibai
        5
    dabaibai  
       2022-11-23 20:11:57 +08:00   ❤️ 1
    大佬厉害。
    Aloento
        6
    Aloento  
       2022-11-23 20:13:15 +08:00   ❤️ 1
    《快速助手》
    OP 加油,希望早日找到工作


    @amlee 翻译一下就是不合适(
    xieren58
        7
    xieren58  
       2022-11-23 20:21:48 +08:00   ❤️ 2
    非常牛, 已 star,
    ZxBing0066
        8
    ZxBing0066  
       2022-11-23 20:44:42 +08:00   ❤️ 1
    点个赞
    adoal
        9
    adoal  
       2022-11-23 20:48:11 +08:00   ❤️ 1
    前有 RustDesk ,后有 MirrorX ,用 Rust 写远程桌面的大业方兴未艾
    bequt
        10
    bequt  
       2022-11-23 20:53:13 +08:00   ❤️ 1
    感受到 rust 才是桌面软件的未来呀。
    KHfqLAYYS6BKJT3R
        11
    KHfqLAYYS6BKJT3R  
       2022-11-23 20:53:43 +08:00   ❤️ 1
    目前 RustDesk 有两个问题:
    1.mbp 息屏后无法唤醒
    2.画质不知道能不能进一步提升(现在可以满足使用,想更进一步)

    不知 op 开发的有没有改善
    KHfqLAYYS6BKJT3R
        12
    KHfqLAYYS6BKJT3R  
       2022-11-23 20:54:04 +08:00
    @cjzlol #11 息屏->睡眠
    KHfqLAYYS6BKJT3R
        13
    KHfqLAYYS6BKJT3R  
       2022-11-23 20:58:07 +08:00
    0.0 下载了打开一直转圈圈
    cby0414
        14
    cby0414  
    OP
       2022-11-23 22:14:19 +08:00 via Android
    @cjzlol 刚才好像解析有点问题现在应该正常了😃
    cby0414
        15
    cby0414  
    OP
       2022-11-23 22:21:33 +08:00 via Android
    @bequt tauri 或者 egui 或者编译成 c 库集成进 flutter ,都是不错的方案
    zyxk
        16
    zyxk  
       2022-11-23 23:00:02 +08:00   ❤️ 1
    win10 打开闪退, 换了一台, 远程后提示
    other error (message="negotiate desktop params failed",file ="mirrorx src\window desktop\statemod.rs",line 303)

    另外有个问题是, 输入 id 后, 点击桌面, 要对方点同意后, 才输入密码? 这不应该是 2 选 1 吗?
    FightPig
        17
    FightPig  
       2022-11-23 23:05:39 +08:00   ❤️ 1
    牛 p 啊
    fox233
        18
    fox233  
       2022-11-23 23:19:27 +08:00   ❤️ 1
    太 cool 了 支持局域网用局域网 IP 互联吗 那样延迟会更低 毕竟是同一个网段
    cby0414
        19
    cby0414  
    OP
       2022-11-24 00:13:49 +08:00 via Android
    @zyxk 感谢反馈,另外无人值守或者说是默认信任这个功能会在后续加上,目前缺失功能比较多我只有一个个来,还望理解😂
    cby0414
        20
    cby0414  
    OP
       2022-11-24 00:15:23 +08:00 via Android
    @fox233 局域网目前还需要架设一个中转服务器,不过局域网直连的功能也在计划中,目前缺失的功能还比较多我只有一个个来,还望理解😂
    xumng123
        21
    xumng123  
       2022-11-24 07:29:44 +08:00 via iPhone   ❤️ 1
    fox233
        22
    fox233  
       2022-11-24 10:49:27 +08:00
    @cby0414 好的 理解 局域网希望能快点上 局域网直接走千兆或者万兆内网 延迟很低 那感觉应该很爽
    okakuyang
        23
    okakuyang  
       2022-11-24 13:18:53 +08:00   ❤️ 1
    能开发 ipad 版本吗?我觉得这个比较关键,我这最近 steam link 挂逼了。
    cby0414
        24
    cby0414  
    OP
       2022-11-24 16:45:57 +08:00
    @okakuyang 肯定会有,但是目前优先级比较低,因为还有很多功能缺失,加之我只有一个人精力比较有限,希望理解😂
    avv
        25
    avv  
       2022-11-24 17:23:55 +08:00   ❤️ 1
    参股!参股!参股!参股!
    lizhenda
        26
    lizhenda  
       2022-11-24 19:19:22 +08:00   ❤️ 1
    强,这个有技术含量
    qi19901212
        27
    qi19901212  
       2022-11-24 20:21:51 +08:00   ❤️ 1
    来加个联系方式,合作一下 s16621672841
    ljsh093
        28
    ljsh093  
       2022-11-24 23:34:27 +08:00   ❤️ 1
    期待 iOS 版本
    kice
        29
    kice  
       2022-11-25 05:41:13 +08:00 via Android   ❤️ 1
    硬件编解码在 win 上用 dx 会简单些。不过既然都上 ffmpeg ,直接用 ffmpeg 更好。

    追求性能可以看看 OBS 的实现。
    aeli
        30
    aeli  
       2022-11-25 07:27:15 +08:00   ❤️ 1
    厉害,学习学习
    iOCZ
        31
    iOCZ  
       2022-11-25 12:00:10 +08:00   ❤️ 1
    怎么控制远程设备的?
    unclemcz
        32
    unclemcz  
       2022-11-25 13:29:46 +08:00   ❤️ 1
    最近也在学 tauri ,准备做个剪切板管理器,但是看着 tauri 文档,连门都还没摸到,rust+vue 组合看的一脑浆糊。
    我就想问一下,为何楼主你如此优秀,人和人的差距怎么就这么大😂。
    cby0414
        33
    cby0414  
    OP
       2022-11-25 17:49:27 +08:00
    @kice dx11 只支持硬解,dx12 才支持硬解硬编,考虑到还有大量设备停留在 dx11 ,所以选择了用 ffmpeg 来集成 qsv,amf,envenc 等多种编码器
    cby0414
        34
    cby0414  
    OP
       2022-11-25 17:50:32 +08:00
    @iOCZ 这个说简单点就是在控制端收集键盘、鼠标的输入事件,然后传输到被控端,再在被控端模拟键鼠事件
    cby0414
        35
    cby0414  
    OP
       2022-11-25 17:52:21 +08:00
    @unclemcz 过奖了😂,tauri 的文档还是比较齐全的也有中文版,把 rust 这边当做写一个后端 web api 服务器就好理解很多了
    iOCZ
        36
    iOCZ  
       2022-11-25 20:45:52 +08:00
    @cby0414 我也知道原理,想问问是哪部分代码?
    tabris233
        37
    tabris233  
       2022-11-27 12:16:14 +08:00   ❤️ 1
    B 站刷到过您
    cby0414
        38
    cby0414  
    OP
       2022-11-27 18:04:53 +08:00
    @iOCZ 在 mirrorx_core/src/component/input 下
    cby0414
        39
    cby0414  
    OP
       2022-11-27 18:05:15 +08:00
    @tabris233 哈哈欢迎有空过来看看
    HulkLee
        40
    HulkLee  
       2022-11-27 22:39:41 +08:00   ❤️ 1
    支持原创开源👍,祝早日找到一份满意的工作。
    另外,本回复就是在 mac 用 rustdesk 远程 win 来回复的。其实自建 rustdesk 服务器的话是可以满足你的游戏需求的。我就是这么玩的。
    cby0414
        41
    cby0414  
    OP
       2022-11-28 05:02:11 +08:00
    @HulkLee 谢谢,不过 rustdesk 帧率好像是锁在 30 ?
    Thinsky313
        42
    Thinsky313  
       2022-11-28 10:12:25 +08:00   ❤️ 1
    @cby0414 我们有 tauri 的开源项目,有兴趣合作一下吗?
    Wechat: BenY1ng
    Email: [email protected]
    davinci21s
        43
    davinci21s  
       2022-11-28 11:13:18 +08:00 via iPhone   ❤️ 1
    牛逼
    cby0414
        44
    cby0414  
    OP
       2022-11-28 14:09:13 +08:00
    @Thinsky313 已加~
    allanpk716
        45
    allanpk716  
       2022-11-28 17:50:57 +08:00   ❤️ 1
    本地多屏幕支持了吗? 4K 屏幕卡吗?
    cby0414
        46
    cby0414  
    OP
       2022-11-28 23:11:51 +08:00
    @allanpk716 本地多屏幕是指被控端多个屏幕选择或者多个屏幕同时采集吗?还是控制端可以选择采集哪个屏幕?
    allanpk716
        47
    allanpk716  
       2022-11-29 12:27:10 +08:00
    @cby0414 受控端无屏幕,控制端有两个屏幕,是否可以在控制端连接上被控端后,让其支持双屏。类似微软的 mstsc
    Metre
        48
    Metre  
       2022-11-29 16:38:11 +08:00   ❤️ 1
    厉害了 fork 为敬
    horou
        49
    horou  
       2022-11-29 17:51:38 +08:00   ❤️ 1
    太棒了,不仅技术牛 B ,还很有开源精神,已 Star ,希望作者能够坚持下去。
    cby0414
        50
    cby0414  
    OP
       2022-11-29 20:20:20 +08:00
    @allanpk716 从你的描述看如果被控端没有屏幕,那么就需要虚拟屏幕出来,这个在 Windows 上需要写驱动来支持,linux 上可能可以启动一个桌面服务器,macOS 上目前暂时不知道怎么实现,原理我倒是能摸个大差不差,但是实现起来应该比较费劲,所以暂时没有规划这个功能。
    lookStupiToForce
        51
    lookStupiToForce  
       2022-11-30 18:11:21 +08:00   ❤️ 1
    感谢!
    正好有同 op 的需求,rdp 和 steamlink 都莫名卡顿( rdp 可能跟微软本身就不打算将之支持游戏有关,压缩算法顾及不到高 fps ; steamlink 就真不知道了),来试一试这个
    再次感叹分享区的 v 友真是太棒了!
    cby0414
        52
    cby0414  
    OP
       2022-11-30 20:31:23 +08:00
    @lookStupiToForce 感谢,我看提醒里,老哥你是发了啥被删了 2 次😂
    cby0414
        53
    cby0414  
    OP
       2022-11-30 20:33:26 +08:00
    @lookStupiToForce 哦不好意思是我看错了😂
    tonytonychopper
        54
    tonytonychopper  
       2022-12-19 11:45:27 +08:00 via iPhone
    @unclemcz 我最近也在做这个,但是我发现 tauri 拿不到剪贴板图片,感觉还得好好学一下 rust 怎么用。。。
    FrankAdler
        55
    FrankAdler  
       2022-12-26 16:23:08 +08:00
    macOS12.6 下发现一个问题:启动后默认窗口置顶,会挡住所有的应用,且没找到可设置的地方,点击关闭后窗口消失且再也点不开,只能退出重启,最小化正常
    cby0414
        56
    cby0414  
    OP
       2022-12-26 19:00:17 +08:00
    @FrankAdler 感谢反馈,置顶后续会增加一个开关;窗口关闭是由于窗口的消息循环原因,目前是直接隐藏掉窗体,所以如果关闭后想要复原窗体,需要点击托盘菜单里的显示。
    opentrade
        57
    opentrade  
       2023-02-13 19:02:17 +08:00
    @cjzlol 一直没重视这个熄屏问题,贡献者提交一个小 PR ,会再优化,画面质量现在我们是把 bitrate 卡的比较低,后面会综合优化,提高 bitrate 。
    opentrade
        58
    opentrade  
       2023-02-13 19:04:04 +08:00
    opentrade
        59
    opentrade  
       2023-02-13 19:04:50 +08:00
    opentrade
        60
    opentrade  
       2023-02-13 19:05:48 +08:00
    @cby0414 依然感谢你之前对 RustDesk 的贡献,加油!
    xiaoxiao168
        61
    xiaoxiao168  
       2023-06-13 13:09:34 +08:00
    @cby0414 可以在这里个要求吗?希望可以直接 p2p 加密链接 不需要用 Relay Server 的吗? 当然都是自己的机器 或对方提供 public ip 的情况下, 直接链接。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5569 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 08:16 · PVG 16:16 · LAX 00:16 · JFK 03:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.