在多设备协作场景中,剪贴板同步往往是最容易被忽视、却又最频繁使用的一类能力。
这篇文章记录的是我近期完成的一次实践:
基于 ntfy,自建消息中枢,实现 Windows 与 Android 多端剪贴板的实时同步,并通过 ShortX 自动化任务,让 Android 设备也成为对等节点。
本项目为个人项目,由 AI 辅助生成,在此基础上进行大量人工调试、修改与优化完成,用于学习、研究与效率提升。
一、目标:真正的“多端对等同步”
很多现成方案存在一些共性问题:
- 依赖第三方云服务
- 需要登录账号
- 同步链路不透明
- Android 端受系统限制严重
- 延迟不可控
这次实践的目标非常明确:
- Windows ⇄ Android ⇄ Android
- 任意一端复制,其他端立刻可用
- 不区分“主端 / 从端”
- 不依赖账号体系
- 同步链路完全可控
最终采用的方案是:
ntfy 作为消息中枢 + WebSocket 实时推送 + 本地自动化逻辑
二、整体架构说明
整体结构可以用一张非常简单的逻辑图表示:
Android(ShortX)
↑ ↓
ntfy(上行:HTTP POST 下行:WebSocket)
↑ ↓
Windows(Python GUI 程序)
所有设备都订阅同一个 ntfy topic,并同时具备发送与接收能力。
三、为什么选择 ntfy
选择 ntfy 的原因非常现实:
- 支持 HTTP POST(发送简单)
- 支持 WebSocket(实时下行)
- 可自建(Docker / 二进制)
- 不强制鉴权
- 消息模型非常贴合“剪贴板内容”
在这个项目中,剪贴板内容就是消息体本身,不需要复杂协议。
四、Windows 端实现(Python GUI)
功能概览
Windows 端是一个 Python + Tkinter 编写的 GUI 程序,主要功能包括:
- 监听本地剪贴板变化
- 自动 POST 到 ntfy
- WebSocket 实时接收下行消息
- 写入本地剪贴板
- 关键词过滤(发送 / 接收)
- 回环抑制(防止无限同步)
- 系统托盘后台运行
- Windows 通知提醒
- 开机自启动(支持中文路径)
- 实时日志输出窗口
剪贴板回环问题的处理
剪贴板同步的最大难点不是“能不能同步”,而是:如何避免同步自己刚刚写入的内容
Windows 端采用了多层抑制策略:
- 最近一次本地写入记录
- 下行写入后的时间窗口抑制
- 完全一致内容直接丢弃
三层叠加后,可以在多设备环境下稳定运行,不产生回环。
实时日志窗口的必要性
程序 GUI 底部提供一个 实时日志输出窗口,用于显示:
- WebSocket 连接状态
- ntfy POST 成功 / 失败
- 过滤命中
- 抑制触发
- 自启动脚本写入情况
相比只写日志文件,实时窗口在调试和排错时价值非常高。
五、Android 端实现:ShortX 自动化任务
为什么不是普通 Android App
Android 对剪贴板监听有诸多限制:
- 后台限制严格
- 普通 App 很难长期运行
- 权限受限
因此选择使用 ShortX 自动化框架,它本质上是一个系统级自动化执行器,非常适合事件驱动逻辑。
ShortX 在这个项目中做了什么
在 Android 端,ShortX 主要完成:
- 监听系统剪贴板变化
- 内容变化 → HTTP POST 到 ntfy
- 长连接 WebSocket 订阅 ntfy
- 收到消息 → 写入系统剪贴板
- 过滤规则与抑制窗口逻辑
Android ⇄ Windows 的统一模型
无论是 Windows 程序,还是 Android 的 ShortX 任务,通信模型完全一致:
- 上行:HTTP POST
- 下行:WebSocket
这意味着:
- 不需要区分平台
- 不需要中转服务器
- 任意设备都可以随时加入或退出
六、为什么必须使用 WebSocket
整个同步链路采用 WebSocket 实时推送,而不是轮询:
- 延迟极低
- 几乎是“复制即到达”
- 请求数量极少
- 对 Android 更省电
在实际使用中,Android → PC 的体验几乎是瞬时完成。
七、开机自启动与中文路径问题
Windows 端采用 启动文件夹 + bat 的方式实现自启动,但过程中踩了不少坑:
- exe 路径包含中文
- 使用 cd 导致路径丢失
- bat 编码不正确
- PyInstaller onefile 路径变化
最终稳定方案是:
- bat 不使用 cd
- 全路径 start “” “xxx.exe”
- UTF-8 BOM 写入
- 自动更新当前 exe 路径
即使程序目录是中文,也可以稳定自启动。
八、安全与使用边界说明
必须强调一点:
- ntfy 默认 topic 是公开的
- 同一 topic 下的所有客户端都能看到消息
- 剪贴板内容可能包含敏感信息
因此这套方案:
- 更适合自建 ntfy
- 使用随机 topic
- 配合关键词过滤
- 只用于可信设备之间
九、关于本项目
- 项目性质:个人项目
- 实现方式:AI 辅助生成 + 人工调试与修复
- 使用目的:学习、实践、效率提升






暂无评论内容