[开源自荐] 一个剪贴板实时同步工具 | 五端支持 | P2P | 跨网络 | UniClipboard

为什么要做这个?

我先讲一讲为什么做这个,对这个部分不感兴趣的小伙伴,可以直接跳到下方的介绍部分。

在上家公司是做机械臂的,每个人会佩两台电脑,一台是 Ubuntu 台式机,另一台是 Windows 笔记本。我们开发用的 Ubuntu + Teams 办公,部署和其他同事都使用的 Windows 笔记本 + 企业微信,所以经常互相发送截图,接受日志文件等等操作,需要在两台设备间传输。

如果只是文件传输,很多工具都可以做到了,比如:LocalSend

但程序猿就是非常懒的,我更期望的是在这台电脑上复制,然后直接在另一台电脑上粘贴。我不想去先打开传输工具,找到文件,上传,然后在另一台设备上下载。

所以,经过我跌跌撞撞经历了半年的开发,近 3000 次 commit 开发了 UniClipboard

介绍

25 秒演示视频: https://www.bilibili.com/video/BV1QGLp64E6q/

文本、图片、文件,复制粘贴全覆盖

桌面端是无感同步,复制完直接到对端粘贴,不用点任何按钮。

P2P 端到端加密传输

两台设备先用匹配码交换连接信息,之后双方直连通信,不经过第三方服务器。

遇到 NAT 就先打洞,打不通才走中继兜底。即便走中继,中继也看不到具体内容 ------ 传输前已经做过加密。

也就是说,跨网段、跨公网都能同步,不局限于局域网。

加密存储

剪贴板工具都会有持久化存储的功能,但剪贴板内容本身就是非常敏感的,所以在存储这些内容时,我采用了 XChaCha20-Poly1305 加密算法去做加密存储,加解密的口令保存在系统的 Keychain / 凭据管理器里

五端覆盖

macOS/Windows/Linux(wayland&x11)/iOS/Android 全覆盖。桌面端是无感同步的,后台运行即可。移动端因为系统限制的原因,需要用户主动式的触发才能访问到剪贴板,比如通过分享入口来分享文字、图片和文件。

移动端有些不完善的地方:

  1. 目前是只支持局域网;

  2. iOS 原生 APP 正在开发中,当前是用快捷指令替代

  3. 安卓 APP fork 了 SyncClipboard (另一款剪贴板同步工具)的安卓端,做了协议兼容,感谢开源!

还有个纯 Rust 的 CLI 版本

桌面端是 Rust + Tauri2 ,虽然安装包 20MB ,看着小小的,但运行时带 WebView ,实际内存占用 200MB 左右。

我自己后台常驻嫌它太重和为了方便端到端测试,就另外写了一个 CLI 版本,纯 Rust 实现。

为什么不用 XXX ?

为什么不用微信输入法 ?

微信输入法支持文字和图片的云同步,同时支持桌面端和移动端。

  1. 微信不支持 Linux 环境

  2. 隐私内容会上云,我不知道腾讯有没有做加密存储

  3. 有自己想用的输入法软件,比如 Rime

为什么不用 LocalSend

LocalSend 确实很强:开源、跨平台、局域网点对点,不走云不要账号,作者从 2022 年开源到现在一直在迭代,GitHub 几万 star ,我自己平时也在用。

但它的核心是「点对点传文件」------ 选设备、选文件、对面点确认、等传完。我要的是 Ctrl+C / Ctrl+V

为什么不用 Barrier/Deskflow

用,而且非常好用。这两个工具可以将两台电脑共享一套键鼠,但是剪贴板共享只是他们的附属功能,文本和图片可以同步,但文件好像不行。

所以,我现在就禁用它们的剪贴板共享功能,换作使用 UniClipboard ,这样两台电脑共享一套键鼠,一个剪贴板。

最后

项目是 AGPL-3.0 开源的,代码可以审计,也可以自己构建。

如果你有任何问题或反馈,欢迎下方留言。


下载链接

GitHub:https://github.com/uniclipboard/uniclipboard

官网:https://uniclipboard.app

8 个赞

说到cli,我做过类似的东西,但是是可以用管道支架从cli发送到一个服务器。

这类剪贴板工具其实可以考虑加上这个,远程的时候方便一些

嗯嗯,管道用法很实用,对于 Linux 用户来说也会非常顺手。 感谢反馈,我给加上。

其实我做 CLI 主要是两个原因,一个就是上文提到的 webview 不可避免的为带来额外的内存开销;另一个就是方便 Agent 使用 CLI 进行端到端的测试。

提个建议:能不能把配置、日志等数据放程序所在目录?:joy:

程序目录和产生的动态数据分开保存才是正常的吧

安卓版没有发布在GitHub?

最好能复制目录。之前有个类似的剪贴板实时同步工具有实现复制目录的功能。

安卓端 fork 的 SyncClipboard 的仓库,后续会在此基础上进行二开

感谢反馈,这就计划上

感谢反馈,我改进下

确实是的,感谢反馈,我改进下

提两个小建议:

(1)Linux 版的 .desktop 文件需要修改一下

当前安装包内的 .desktop 文件的内容是:

[Desktop Entry]
Categories=
Comment=一个剪切板同步工具
Exec=uniclipboard
StartupWMClass=uniclipboard
Icon=uniclipboard
Name=UniClipboard
Terminal=false
Type=Application

少填了一个 Categories= 参数,这会导致安装后该程序的图标只能出现在 “其他” 类别中。而有些桌面环境(比如 MATE)默认是在主菜单中隐藏 “其他” 这个分类的,从而造成该程序无法在主菜单中显示。

建议把第 2 行改成 “Categories=Network”,这样该程序的图标即可被放到 “互联网” 分类中,方便查找。

(2)是否可以增加一个 IPv6 支持?

我这边希望在电脑(Linux Mint)与手机(Android)之间同步剪切板,但发现该程序要求二者处于同一局域网内。但我现在手机和电脑连接的都是校园网,有 IP 隔离,无法直接连接,但可以通过 IPv6 互通。未来是否有计划加入 IPv6 支持呢?

我现在用的就是这种方式,一端复制一端直接粘贴
Win: ClipSync
Andorid: ClipSync + tasker
尤其在PC端登陆网站需要验证码的时候,手机得到验证码后自动复制到剪贴板,然后PC端直接复制即可。

1 个赞

为什么不直播SyncClipboard,他就是支持剪贴板同步的。不过支持其它平台否也没没注意过。

IOS端能后台自动同步吗?

是否考虑支持多标签管理,日常使用CopyQ会作为临时笔记和常用信息粘贴板

难得能碰到这种项目,提几个移动设备端的建议吧。

  1. 移动端应该以输入法的形态存在,尤其是iOS
  2. 考虑下付费计划

我也是一个重度需求跨设备,跨生态的剪切板、文件传送的用户。

不会用。安装在安卓10上,打开还是需要配置服务器。不会配置,请指导一下。

还有,是否必须依赖一个PC,两个安卓手机是否直接可以同步。

非常感谢这些建议,我会跟进优化下。 IPv6 我还没搞,不过我会尝试优化下。感谢反馈