UniClipboard
核心功能

同步内容

流经剪贴管线的负载类型。

在 GitHub 上编辑

UniClipboard 中的一条"剪贴"不是一份独立 blob,而是一组描述同一次复制的 表示(representation)。 某些应用复制时同时给富文本和纯文本,有些只给文本,复制图片时则会产出图片字节加一个降级路径。 粘贴时,接收端会自动选用它能理解的最丰富格式。

支持的表示类型

类型说明
纯文本UTF-8,作为通用兜底始终可用。
RTF / HTML与文本一同传输,让富格式粘贴跨设备保留格式。
图片PNG / JPEG / WebP,按内容哈希传输。
文件单文件或多文件选择,接收端按序重建。

每种表示在线上都是一条独立负载。调度器等所有表示都送达后才把这条剪贴标记为完全同步 —— 部分送达的状态会在历史里显式呈现。

小负载

文本、RTF、HTML 与小图片以加密信封形式内联传输(V3 wire format)。每个信封携带自己 24 字节随机 XChaCha20-Poly1305 nonce,结构上无法重复使用 nonce。信封由发送方的 node 身份签名,接收方先验签再解密。

大负载(文件与大图)

超过内联阈值的负载会以 blob 形式发布:

  1. 发送端切块,每块用空间 MasterKey 加密后写入本地 blob 存储。
  2. 一份简短的 blob ticket(内容哈希 + 访问元数据)通过与小负载相同的加密通道发给接收端。
  3. 接收端以流式方式拉回。已缓存的块直接跳过,只补缺失部分。

这带来的好处:

  • 文件不必装进内存。 两端都以流式方式与磁盘交互。
  • 重连可续传。 笔记本传输中途关上盖子,下次会话会从最后完成的块继续。
  • 天然去重。 重新复制同一个文件只付元数据成本 —— 块已经在两端的磁盘上。

本地存储

每一份接收到的负载(以及你自己生成的负载)都会落入本地剪贴历史:

  • 平台标准应用数据目录下的加密 SQLite 数据库(详见 安装 — 数据存储位置)。
  • 独立的 加密全文搜索索引,服务于仪表盘搜索框和 uniclip search。索引在磁盘上同样加密 —— "存在本地"不等于"存得安全"。
  • Blob 块位于同级目录下,按你的保留策略自动垃圾回收。

切换空间时(带上另一个 sponsor 的邀请码运行 uniclip join --switch),现有历史会先用新空间的 MasterKey 重新加密,守护进程才会 把切换标记为完成。整个过渡过程中没有任何明文窗口。

按设备粒度的同步开关

每台已配对设备都有一组开关,限定 本机 会向这个对端发出什么、从这个对端接收什么:

  • 向此设备发送(Send to this device) —— 按对端的发送总开关。关掉后, 本机产生的剪贴永远不会发到这台对端。
  • 从此设备接收(Receive from this device) —— 按对端的接收总开关。关掉后, 这台对端之后发来的剪贴不会进入本机历史,也不会写入系统剪贴板。
  • 内容类型白名单 —— 发送和接收可以分别按对端逐项禁用:文本、图片、 链接、文件、HTML / 富文本。

发送开关在 发送端 执行,所以被禁用的类型不会离开本机。接收开关在本机 接受内容之前执行,被拒绝的内容不会进入历史、系统剪贴板或再次转发。GUI 在 设备 页配置,CLI 等价配置子命令在路线图上。

移动端同步(伴侣模式)

已配对的移动设备走 独立的 HTTP 路径,与上文 iroh 线上格式完全不同。 桌面守护进程暴露 SyncClipboard JSON 协议;iOS 快捷指令以及任意兼容 SyncClipboard 协议的 Android 客户端通过这个接口读写。

可用能力:

  • 双向同步文本、图片与文件,桌面 ↔ 已配对的移动客户端。
  • 按设备凭据:用户名 / 密码在配对时签发,与单一已注册的移动设备绑定。
  • 密码轮换:无需重新配对该设备即可生效。

相对于桌面 ↔ 桌面同步,目前的限制:

  • 移动端这边不走 P2P。 移动客户端不走 iroh、不打洞、也不走中继 —— 它就是个普通 HTTP 客户端。同一 LAN 下开箱即用;需要跨网络时,自建 无头 server 节点(公网 HTTPS 端点) 或让两端接入同一个 Tailscale / VPN overlay 即可。
  • 移动端之间不会互相同步。 两部手机不会直连,它们都与桌面通信。
  • 暂无按方向 / 按内容类型的开关 适用于移动端配对。
  • 不参与空间的加密历史网络。 移动客户端通过 HTTP 读取与推送最新一条剪贴, 不持有空间数据库的副本。

完整协议接口见 移动端 LAN API,配对界面见 配对与同步 — 移动端伴侣

同步 做这些事

  • 不跨设备合并历史。 每台设备各自保有自己的加密历史。在 A 上复制会实时进入 B 的历史, 但 B 不会回溯接收 A 在配对之前的历史。
  • 不跨空间泄漏。 同一台机器上的两个空间使用各自独立的 MasterKey。切换空间会重新加密,但不会共享。
  • 不轮询剪贴板。 UniClipboard 监听系统的原生剪贴板事件 —— 没有 busy-wait 读 pasteboard 的循环。

本页目录