Skip to content
OSpark-TeamPublic

About

NextPaste 是一款旨在打破设备壁垒的跨设备剪切板同步工具。通过 WebSocket 协议,实现 HarmonyOS Next 设备与 Windows/Mac/Linux 设备之间文本、图片的实时无缝流转。

Resources

Stars

24 stars

Watchers

0 watching

Forks

Repository files navigation

NextPaste

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


功能特性

HarmonyOS 客户端

  • 全自动同步:支持双向、仅发送、仅接收三种工作模式。
  • 持久化后台:利用长时任务确保息屏状态下依然可以实时接收同步。
  • 响应式设计:完美适配手机、平板及 2in1 设备。
  • 实时监控:内置详细的运行日志过滤系统,方便排查连接问题。

PC 桌面端

  • 双模式运行:支持服务器模式和客户端模式
    • 服务器模式:在局域网内提供 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 图片监听兼容性

为提升 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 等)
大图传输 ⚠️ 延迟 受限于局域网带宽,高分辨率图片(主要耗时在写入剪贴板)可能存在一定的传输延迟。

快速开始

服务端部署

  1. 进入 server 目录:cd server
  2. 安装环境依赖(需 Go 1.23+, Node.js 16+, Wails CLI)。
  3. 编译运行:
wails dev  # 开发模式
wails build # 构建正式版
  1. 在界面点击 “启动服务”,记下显示的 ws:// 地址。

客户端部署 (HarmonyOS)

  1. 使用 DevEco Studio 打开项目根目录。
  2. 将设备连接至同一局域网。
  3. 在应用主页输入服务端的 WebSocket 地址。
  4. 授予 “读取剪切板” 权限并点击 “开始同步”。

权限及安全说明

权限申请

  • ohos.permission.INTERNET: 用于 WebSocket 通信。
  • ohos.permission.KEEP_BACKGROUND_RUNNING: 用于申请后台长时任务。
  • ohos.permission.READ_PASTEBOARD: 核心权限,用于读取本地剪切板。

网络安全

  • 建议在受信任的局域网环境内使用。
  • 若需通过公网同步,请配置防火墙并建议配合 WSS (WebSocket over TLS) 使用。

贡献与许可

  • 许可证:本项目基于 MIT License 开源,仅供学习和研究使用。
  • 贡献:欢迎提交 Issue 或 Pull Request 来改进跨平台图片兼容性或其他功能。

NextPaste —— 让你的剪切板触手可及。


About

NextPaste 是一款旨在打破设备壁垒的跨设备剪切板同步工具。通过 WebSocket 协议,实现 HarmonyOS Next 设备与 Windows/Mac/Linux 设备之间文本、图片的实时无缝流转。

Resources

Stars

24 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages