我先讲一讲为什么做这个,对这个部分不感兴趣的小伙伴,可以直接跳到下方的介绍部分。
在上家公司是做机械臂的,每个人会佩两台电脑,一台是 Ubuntu 台式机,另一台是 Windows 笔记本。我们开发用的 Ubuntu + Teams 办公,部署和其他同事都使用的 Windows 笔记本 + 企业微信,所以经常互相发送截图,接受日志文件等等操作,需要在两台设备间传输。
如果只是文件传输,很多工具都可以做到了,比如:LocalSend
但程序猿就是非常懒的,我更期望的是在这台电脑上复制,然后直接在另一台电脑上粘贴。我不想去先打开传输工具,找到文件,上传,然后在另一台设备上下载。
所以,经过我跌跌撞撞经历了半年的开发,近 3000 次 commit 开发了 UniClipboard
25 秒演示视频: https://www.bilibili.com/video/BV1QGLp64E6q/
桌面端是无感同步,复制完直接到对端粘贴,不用点任何按钮。
两台设备先用匹配码交换连接信息,之后双方直连通信,不经过第三方服务器。
遇到 NAT 就先打洞,打不通才走中继兜底。即便走中继,中继也看不到具体内容 —— 传输前已经做过加密。
也就是说,跨网段、跨公网都能同步,不局限于局域网。
剪贴板工具都会有持久化存储的功能,但剪贴板内容本身就是非常敏感的,所以在存储这些内容时,我采用了 XChaCha20-Poly1305 加密算法去做加密存储,加解密的口令保存在系统的 Keychain / 凭据管理器里
macOS/Windows/Linux(wayland&x11)/iOS/Android 全覆盖。桌面端是无感同步的,后台运行即可。移动端因为系统限制的原因,需要用户主动式的触发才能访问到剪贴板,比如通过分享入口来分享文字、图片和文件。
移动端有些不完善的地方:
桌面端是 Rust + Tauri2 ,虽然安装包 20MB ,看着小小的,但运行时带 WebView ,实际内存占用 200MB 左右。
我自己后台常驻嫌它太重和为了方便端到端测试,就另外写了一个 CLI 版本,纯 Rust 实现。
微信输入法支持文字和图片的云同步,同时支持桌面端和移动端。
LocalSend 确实很强:开源、跨平台、局域网点对点,不走云不要账号,作者从 2022 年开源到现在一直在迭代,GitHub 几万 star ,我自己平时也在用。
但它的核心是「点对点传文件」—— 选设备、选文件、对面点确认、等传完。我要的是 Ctrl+C / Ctrl+V
用,而且非常好用。这两个工具可以将两台电脑共享一套键鼠,但是剪贴板共享只是他们的附属功能,文本和图片可以同步,但文件好像不行。
所以,我现在就禁用它们的剪贴板共享功能,换作使用 UniClipboard ,这样两台电脑共享一套键鼠,一个剪贴板。
项目是 AGPL-3.0 开源的,代码可以审计,也可以自己构建。
如果你有任何问题或反馈,欢迎下方留言。
GitHub:https://github.com/uniclipboard/uniclipboard 官网:https://uniclipboard.app
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.