Skip to content

Latest commit

 

History

History
261 lines (207 loc) · 12 KB

File metadata and controls

261 lines (207 loc) · 12 KB

ClipSync — 跨平台剪贴板实时共享工具

实际实施计划(Python 版)


1. 项目概述

在 Windows、macOS、Linux 三平台间实时同步剪贴板内容,类似 Apple Universal Clipboard。支持文本、富文本(HTML/RTF)、图片、表格数据。后台静默运行,局域网自动发现,端到端加密。


2. 技术选型:Python(原计划 Go,已变更)

维度 Python(实际) Go(原计划)
剪贴板访问 Pillow + ctypes + subprocess,API 成熟 需手写 Win32 syscall / macOS CGo
开发速度 极高,改完即测 编译等待
依赖安装 pip install 即可 编译后单文件
内存占用 ~25-40MB ~5-15MB
分发方式 需 Python 环境 或 PyInstaller 打包 单一 exe
适用场景 开发者自用、快速迭代 分发给普通用户

结论:对于自己多设备使用的场景,Python 开发效率和剪贴板库生态优势明显。后续如需分发,可用 PyInstaller 打包成独立可执行文件。


3. 项目结构(实际)

clipsync/
├── cmd/
│   └── main.py                       # 入口,组装所有模块
├── internal/
│   ├── clipboard/
│   │   ├── clipboard.py              # 抽象接口 (Reader/Writer/Monitor)
│   │   ├── clipboard_windows.py      # Windows: ctypes+Win32 API,事件驱动
│   │   ├── clipboard_darwin.py       # macOS: pbpaste/pbcopy+osascript,轮询
│   │   ├── clipboard_linux.py        # Linux: xclip/wl-paste,自动检测X11/Wayland
│   │   ├── format.py                 # ClipboardContent / SyncMessage 数据类
│   │   └── platform.py              # 平台自动选择
│   ├── config/
│   │   └── config.py                 # JSON配置,支持三平台路径
│   ├── protocol/
│   │   └── codec.py                  # 二进制帧编解码 (TLV+JSON载荷)
│   ├── sync/
│   │   ├── manager.py                # 同步引擎 (去重/防回环/防抖)
│   │   └── file_transfer.py          # 文件传输引擎 (分块/TCP直传/进度)
│   ├── transport/
│   │   ├── discovery.py              # mDNS 局域网设备发现 (zeroconf)
│   │   └── connection.py             # TLS 1.3 TCP 连接管理
│   ├── security/
│   │   └── pairing.py                # Ed25519证书+8位配对码+证书指纹+速率限制
│   └── ui/
│       ├── systray.py                # 系统托盘 UI (pystray)
│       └── settings_window.py        # 图形化设置界面 (customtkinter)
├── requirements.txt
├── run.bat
├── Makefile
└── PLAN.md

4. 架构设计

┌─────────────── ClipSync 节点 ───────────────┐
│                                               │
│  ┌──────────────┐    ┌────────────────────┐   │
│  │ 系统托盘 UI   │◄──►│   Sync Manager     │   │
│  │ + 设置窗口    │    │   (中央协调器)      │   │
│  └──────────────┘    └──┬───┬───┬───┬─────┘   │
│                         │   │   │   │         │
│              ┌──────────┘   │   │   └───────┐ │
│              ▼              ▼   ▼           ▼ │
│     ┌────────────┐  ┌─────────────┐  ┌────────┐│
│     │ 剪贴板监听  │  │  Transport  │  │Pairing ││
│     │ (平台API)   │  │ (TCP+TLS1.3)│  │(Ed25519)│
│     └────────────┘  └──────┬──────┘  └────────┘│
│                            │                   │
└────────────────────────────┼───────────────────┘
                             │
                    ┌────────┴────────┐
                    │   mDNS 发现      │
                    │ (zeroconf/Bonjour)│
                    └────────┬────────┘
                             │
                    ┌────────┴────────┐
                    │   对等节点       │
                    │ (另一台设备)     │
                    └─────────────────┘

5. 核心模块实现细节

5.1 剪贴板监听

平台 方法 特点
Windows AddClipboardFormatListener + 消息窗口 + GetMessageW 事件驱动,空闲零CPU
macOS NSPasteboard.changeCount 轮询 (400ms) 唯一可行方案,Chromium 同款
Linux 内容哈希轮询 (400ms),自动检测 X11/Wayland xclip (X11) / wl-paste (Wayland)

5.2 网络发现

  • mDNS/DNS-SD 协议,zeroconf 库(纯 Python)
  • 服务类型:_clipsync._tcp.local.
  • 广播元数据:设备名、设备ID、版本号、端口
  • 同一局域网自动发现,无需任何配置

5.3 传输安全

  • TLS 1.3 加密所有流量
  • Ed25519 自签名证书,每台设备首次启动自动生成
  • 8 位配对码(100,000,000 种组合),首次连接时两端显示,用户确认
  • 证书锁定:配对后存储对端证书指纹,任何变更立即拒绝(防 MITM)
  • 速率限制:5 次错误尝试 / 5 分钟窗口
  • 证书指纹:SHA-256 指纹,支持带外验证

5.4 同步引擎

  • 去重:内容 SHA-256 哈希,64 条 LRU 环
  • 防回环:本地产生的变更不触发远端同步回来
  • 防抖:300ms 最小发送间隔
  • 格式优先级:HTML > RTF > TEXT > IMAGE

6. 实施阶段与完成状态

阶段 内容 状态
Phase 1 项目结构、配置、协议编解码、剪贴板接口 ✅ 完成
Phase 2 Windows/macOS/Linux 剪贴板监听、Sync Manager ✅ 完成
Phase 3 mDNS 发现、TLS 连接、Ed25519 配对认证 ✅ 完成
Phase 4 系统托盘 UI、customtkinter 图形化设置界面 ✅ 完成
Phase 5 安全加固(8位配对码、证书指纹校验、速率限制、证书变更检测) ✅ 完成
Phase 6 文件传输(分块/TCP直传/进度)、开机自启、PyInstaller 打包、中继服务器 🔄 文件传输已完成
Phase 7 跨平台联调测试、压力测试、代码签名 ❌ 未做

7. 安全性设计

层级 措施 说明
传输加密 TLS 1.3 业界标准,数据在网络上是密文
身份认证 Ed25519 证书 256-bit 安全级别,无法伪造
首次信任 8 位配对码 + 用户确认 蓝牙式配对模型
持续信任 证书锁定 (Pinning) 证书指纹变更立即报警
防暴力破解 5 次/5分钟 速率限制 10^8 空间,穷举不可行
带外验证 SHA-256 证书指纹 可通过电话/消息比对确认
本地存储 配置文件 0600 权限 私钥存于平台私有目录

8. 图形化设置界面

使用 customtkinter 构建现代化界面:

  • 侧边栏导航(General / Devices / Security / Network / Transfers)
  • 卡片式设备列表,状态色标(绿=已连接,橙=已配对,灰=待配对)
  • 明暗色主题切换
  • 设备管理:配对、取消配对、移除、手动连接
  • 配对码显示与确认
  • 同步开关、设备名称编辑
  • 网络设置(端口、服务类型)
  • 文件传输面板:发送文件、传输进度卡片(方向/状态/进度条)

9. 未来优化方向

近期(v1.1 - v1.3)

  1. 开机自启:Windows 注册表 / macOS LaunchAgent / Linux autostart
  2. PyInstaller 打包:生成独立 .exe / .app / Linux 二进制,无需 Python 环境
  3. 通知提醒:配对请求时桌面通知、同步失败提醒
  4. 剪贴板历史:本地存储最近 50 条记录,支持搜索和重新复制
  5. 内容过滤:检测密码/密钥特征,可选不同步敏感内容
  6. 文件分享:在设备间直接传输文件 ✅ 已实现
    • 从设置界面选择文件发送到已配对设备
    • 分块传输 + SHA-256 校验
    • 传输进度实时显示(进度条、百分比)
    • 与剪贴板同步共享同一 TLS 1.3 加密通道
    • 自动接收来自已配对设备的文件

中期(v1.4 - v2.0)

  1. 中继服务器:WebSocket 中继实现跨网络(不同 WiFi)同步,E2E 加密,中继不可见明文
  2. 二维码配对:扫描二维码代替手动输入配对码
  3. Web 管理面板:localhost 上的 Web UI,查看连接状态和同步日志,支持全文本搜索和时间范围过滤
  4. 压缩传输:大内容 zstd 压缩,减少带宽占用
  5. 差分同步:大内容仅发送变更部分
  6. 代码片段库:内置语法高亮的代码片段管理器,支持标签搜索,跨设备同步常用模板
  7. 终端命令日志:自动检测复制的终端命令,记录到可搜索的跨设备命令历史
  8. 颜色选择器同步:检测 Hex/RGB 色值,在接收端显示颜色预览色块
  9. 多槽位剪贴板:Ctrl+Shift+1~9 分配 9 个独立粘贴槽,跨设备保持
  10. 时间线回溯:像 Time Machine 一样浏览剪贴板历史,相邻版本显示可视化 diff
  11. 屏幕截图区域同步:任意设备截图后自动推送到所有设备并显示桌面通知预览
  12. URL/标签页交接:复制 URL 后配对设备自动提示"在浏览器中打开"
  13. 临时公开剪贴板:生成临时网页链接,实时显示剪贴板内容(用于结对编程),到期自动销毁

远期(v2.1+,含跨平台集成)

  1. 插件系统:社区格式处理器(CAD 数据、代码片段、自定义格式等)
  2. 云同步服务:托管中继,端到端加密,零知识架构
  3. 企业版:LDAP/SSO 集成、审计日志、集中管理控制台
  4. NFC/蓝牙配对:触碰设备即可配对
  5. iOS/Android App:移动端剪贴板桥接,支持 Share Sheet 集成、相机拍文档 OCR 后同步文字到桌面
  6. 浏览器扩展:右键菜单"发送到 [设备名]",无需先复制到系统剪贴板
  7. IDE 插件(VS Code / JetBrains):在编辑器中直接拉取其他设备的剪贴板内容
  8. AI 智能分类:本地模型识别剪贴板内容类型(代码/密码/URL/地址等),自动过滤敏感内容、自动归档代码片段
  9. AI 格式适配:跨平台粘贴时智能转换格式(如 macOS Pages 表格 → Windows Excel 格式)
  10. AI 翻译/摘要:右键剪贴板内容即可翻译或摘要,无需离开工作流
  11. 团队剪贴板房间:多人共享剪贴板空间,适用于结对编程和故障排查

10. 当前使用方式

# 安装依赖
pip install -r requirements.txt

# 运行
python cmd/main.py

# 系统托盘右键 → Settings... 打开图形设置界面

三平台运行要求:

  • Windows:Python 3.10+,无需额外系统依赖
  • macOS:Python 3.10+,首次运行需授予辅助功能权限
  • Linux:Python 3.10+,需安装 xclip(X11)或 wl-clipboard(Wayland)

11. 关键依赖

用途
zeroconf mDNS 局域网设备发现
cryptography Ed25519 证书、TLS 操作
Pillow 图片处理、系统托盘图标、剪贴板图片读写
pystray 跨平台系统托盘
customtkinter 现代化 GUI 设置界面

12. 资源占用

指标 目标 实测 (Windows)
空闲 CPU < 0.1% ~0% (事件驱动)
空闲内存 < 40MB ~30MB
网络空闲 ~0 仅 mDNS 心跳
磁盘 ~5KB 配置文件 + 日志