NextPaste 是一款旨在打破设备壁垒的跨设备剪切板同步工具。通过 WebSocket 协议,实现 HarmonyOS Next 设备与 Windows/Mac/Linux 设备之间文本、图片的实时无缝流转。
本项目采用单仓风格管理,客户端与服务端代码共存:
NextPaste/
├── entry/ # HarmonyOS 客户端 (ArkTS)
├── server/ # Windows/Mac/Linux 桌面端 (Wails: Go + Vue3)
│ ├── frontend/ # 桌面端管理界面 (Vue3 + TS)
│ ├── internal/ # Go 后端逻辑
│ │ ├── websocket/ # WebSocket 服务器和客户端
│ │ ├── clipboard/ # 剪贴板监听
│ │ └── protocol/ # 通信协议
│ └── main.go # Wails 入口
├── relay-server/ # 中继服务器 (纯 Go 命令行)
│ ├── main.go # 服务器入口
│ ├── relay.go # 中继逻辑
│ └── README.md # 中继服务器文档
├── docs/ # 项目文档及通信协议
└── README.md
- 全自动同步:支持双向、仅发送、仅接收三种工作模式。
- 持久化后台:利用长时任务确保息屏状态下依然可以实时接收同步。
- 响应式设计:完美适配手机、平板及 2in1 设备。
- 实时监控:内置详细的运行日志过滤系统,方便排查连接问题。
- 双模式运行:支持服务器模式和客户端模式
- 服务器模式:在局域网内提供 WebSocket 服务,其他设备连接到本机
- 客户端模式:连接到远程 WebSocket 服务器(包括中继服务器)
- 零配置启动:自动检测本地所有 IP 地址,生成连接二维码或地址
- 协议完整实现:支持握手校验、心跳保持(Heartbeat)及数据广播
- 状态看板:实时显示当前连接的客户端数量及同步记录
- Windows 图片监听增强:兼容更多截图/IM 工具写入方式(见下方“Windows 图片监听兼容性”)
- 房间隔离:通过 roomID 实现多个独立的剪贴板共享空间
- 纯转发:不处理剪贴板,只负责消息转发,保护隐私
- 无限房间:支持无限数量的房间,自动创建和清理
- 跨网络同步:解决局域网限制,通过公网中继实现跨网络剪贴板共享
- 轻量高效:纯命令行,资源占用极低,支持数千并发连接
- 通信协议:默认为 V1.1 二进制协议 (高效、支持分片传输,在1.2后支持V2二进制帧模式,并且不兼容V1.0)。
- 客户端:严格遵循 MVVM 架构,通过服务分层(剪切板服务、网络服务、后台服务)解耦业务逻辑。
- 服务端:利用 Wails 的桥接能力,在 Go 后端调用 Windows 原生 API 监听剪切板,通过 Vue3 构建桌面管理界面。
- Client: HarmonyOS SDK, ArkUI, @ohos.net.webSocket, PersistentStorage.
- Server: Go 1.23, Wails v2, gorilla/websocket,
github.com/Okysu/clipboard.
为提升 Windows 端 FmtImage 的可用性(尤其是微信截图、Snipaste 等常见工具),本项目在服务端使用了对 golang.design/x/clipboard 的 fork:
go.mod中通过replace指向:golang.design/x/clipboard => github.com/Okysu/clipboard v0.0.0-20260207041531-2b2e2d7c4eca- Windows 图片读取策略扩展:不再只依赖
CF_DIBV5,而是按优先级尝试:CF_DIBV5->CF_DIB-> 注册格式PNG->CF_BITMAP(HBITMAP,GDI 转 PNG)
Watch行为修复/增强:- 增加
ticker.Stop(),避免 goroutine/ticker 泄漏 - 读取失败时仍推进 sequence number,避免同一次变更被重复触发
- 增加
- 新增 Windows-only 测试:
clipboard_windows_watch_test.go覆盖Watch(ctx, FmtImage)能收到变更并读到 PNG bytes
效果:微信和 Snipaste 的截图/图片写入,在 Windows 上也可以稳定触发监听并读取到 PNG bytes。
由于不同操作系统及应用对剪切板的处理逻辑差异,目前存在以下已知问题:
| 场景 | 状态 | 备注 |
|---|---|---|
| 文本同步 | ✅ 正常 | 跨设备文本传输稳定 |
| QQ/系统截图 | ✅ 正常 | 能够识别标准 PNG/DIB 格式并触发监听 |
| 微信截图 | ✅ 正常 (Windows) | Windows 端已增强图片读取策略(支持 DIB/PNG/Bitmap 等) |
| 大图传输 | 受限于局域网带宽,高分辨率图片(主要耗时在写入剪贴板)可能存在一定的传输延迟。 |
- 进入
server目录:cd server - 安装环境依赖(需 Go 1.23+, Node.js 16+, Wails CLI)。
- 编译运行:
wails dev # 开发模式
wails build # 构建正式版
- 在界面点击 “启动服务”,记下显示的
ws://地址。
- 使用 DevEco Studio 打开项目根目录。
- 将设备连接至同一局域网。
- 在应用主页输入服务端的 WebSocket 地址。
- 授予 “读取剪切板” 权限并点击 “开始同步”。
ohos.permission.INTERNET: 用于 WebSocket 通信。ohos.permission.KEEP_BACKGROUND_RUNNING: 用于申请后台长时任务。ohos.permission.READ_PASTEBOARD: 核心权限,用于读取本地剪切板。
- 建议在受信任的局域网环境内使用。
- 若需通过公网同步,请配置防火墙并建议配合 WSS (WebSocket over TLS) 使用。
- 许可证:本项目基于 MIT License 开源,仅供学习和研究使用。
- 贡献:欢迎提交 Issue 或 Pull Request 来改进跨平台图片兼容性或其他功能。
NextPaste —— 让你的剪切板触手可及。