不同设备间的剪切板同步服务GCopy

本文软件由网友 dawei 推荐;

什么是 GCopy ?

GCopy 是一个跨平台的剪切板同步工具,旨在帮助用户在不同设备之间共享和同步剪切板内容。它支持在多种操作系统(如 WindowsMacOS 和移动端)之间传输文本、截图和文件。

GCopy 的使用非常简便,用户只需通过浏览器访问其网站并使用相同的邮箱登录,即可实现数据的即时同步。此外,GCopy 不持久化存储用户数据,所有数据都在内存中处理, 如果你 24 小时内不使用,数据就会被删除。以保障用户的数据隐私和安全。

和老苏之前介绍的 ClipCascade 不同,ClipCascade 需要客户端,而且只支持文字,但截图、文件不支持。而 GCopy 解决了这些问题。 目前,您可以在 PCMac 和移动端之间共享剪切板,支持文字、截图和文件。

文章传送门:跨设备剪贴板同步服务ClipCascade

GCopy 不需要安装客户端,仅依赖浏览器的剪贴板 API。以下是测试过的浏览器和版本:

浏览器 版本 测试结果
适用于 Windows 的 Chrome 版本 123.0.6312.86(官方版本)(x86_64) ✅ 经过测试
适用于 Windows 10 的 Edge 版本 124.0.2478.80(官方版本)(64 位) ✅ 经过测试
适用于 Windows 10 的 Opera Opera One(版本:109.0.5097.68) ✅ 经过测试
适用于 macOS 的 Chrome 版本 121.0.6167.85(官方版本)(x86_64) ✅ 经过测试
适用于 macOS 的 Opera Opera One(版本:109.0.5097.68)(x86_64) ✅ 经过测试
Safari 版本 15.6.1 (17613.3.9.1.16) ✅ 经过测试
适用于 iOS 的 Safari 版本 16.1 ✅ 经过测试
适用于 HarmonyOS 3.0/4.0 的 Edge Edge 122.0.2365.99 ✅ 经过测试
Android 版 Chrome 107.0.5304.105 ✅ 经过测试
Android 版 Edge Edge 108.0.1462.48 ✅ 经过测试

当然也存在不足之处:

  • 由于浏览器限制,不支持直接在剪贴板中读取和设置文件,只能通过上传和下载的方式实现文件同步,保证用户体验的流畅。
  • 同时只能同步一个文件。
  • 由于服务器内存有限,您同步的文件不能超过 --max-content-length MB。

反向代理

因为浏览器要访问系统的剪贴板,必须使用 HTTPS 协议来执行这类敏感操作,因为使用 HTTPS 可以确保数据在传输过程中的加密,防止中间人攻击。否则的话是不允许的

假设 GCopy 实际访问地址为: https://gc.laosu.tech

域名 局域网地址 备注
gc.laosu.tech http://192.168.0.197:3375 GCopy 前端的访问地址

因为不需要公网地址,所以本次采用的是 tailscale + npm 方案

文章传送门:用自定义域名访问tailscale节点

按我们预设置的域名、局域网 IP 和端口,在 npm 中进行设置

SSL 没有问题的话,都勾选了

安装

在群晖上以 Docker 方式安装。

本文写作时,

  • 镜像 llaoj/gcopylatest 版本对应为 v1.4.2
  • 镜像 llaoj/gcopy-frontendlatest 版本对应也为 v1.4.2

env.txt

env.txt 文件的内容如下,主要作用就是告诉前端页面服务端的地址

1
SERVER_URL=http://gcopy:3376

docker-compose

采用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
version: '3.8'

services:
gcopy:
image: llaoj/gcopy
container_name: gcopy
restart: always
ports:
- "3376:3376"
command: ["--app-key=<app-key>", "--smtp-host=<smtp-host>", "--smtp-port=<smtp-port>", "--smtp-username=<smtp-username>", "--smtp-password=<smtp-password>", "--smtp-ssl"]

gcopy-frontend:
image: llaoj/gcopy-frontend
container_name: gcopy-frontend
restart: always
ports:
- "3375:3375"
volumes:
- ./env.txt:/app/.env.production
depends_on:
- gcopy

服务端容器 llaoj/gcopy 采用的不是环境变量,而是命令行参数,简单说明如下:

  • --app-key:随机字符串,可以用 openssl rand -base64 32 之类的命令来生成;
  • --smtp-host:表示 SMTP 服务器的主机。以 88 邮箱为例,设为 smtp.88.com
  • --smtp-port:表示 SMTP 服务器的端口。默认为 587。因设置采用了 SSL 协议,所以端口为 465
  • --smtp-username:用于向 SMTP 服务器进行身份验证的用户名。例如:wbsu2003@88.com
  • --smtp-password:用于向 SMTP 服务器进行身份验证的密码。对应的第三方邮件客户端密码
  • --smtp-ssl:是否使用 SSL 连接
  • --max-content-length:默认值为 10 MiB

更多的参数,可以参考官方文档:https://github.com/llaoj/gcopy/blob/main/docs/zh-CN/deploy-by-docker.md

下面是完整的示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
version: '3.8'

services:
gcopy:
image: llaoj/gcopy
container_name: gcopy
restart: always
ports:
- "3376:3376"
command: ["--app-key=WdcUo7tYPMO6Lh1zoL/ojbPM7oye978VHHSf34hqZQo=", "--smtp-host=smtp.88.com", "--smtp-port=465", "--smtp-username=wbsu2003@88.com", "--smtp-password=<第三方邮件客户密码>", "--smtp-ssl"]

gcopy-frontend:
image: llaoj/gcopy-frontend
container_name: gcopy-frontend
restart: always
ports:
- "3375:3375"
volumes:
- ./env.txt:/app/.env.production
depends_on:
- gcopy

然后执行下面的命令

1
2
3
4
5
6
7
8
9
10
# 新建文件夹 gcopy 和 子目录
mkdir -p /volume1/docker/gcopy

# 进入 gcopy 目录
cd /volume1/docker/gcopy

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

运行

在浏览器中输入 https://gc.laosu.tech 就能看到主界面

要实现剪贴板同步,需要登录相同的邮箱

会向邮件发送验证码

如果 smtp 邮箱设置无误,很快就能收到

登录成功后,能看到 GCopy 的主界面

第一次同步剪贴板时,会需要授权,必须要点 允许

总结一下同步的步骤:

  1. 在两个设备 AB 上打开网站 https://gc.laosu.tech,使用相同的电子邮箱登录。
  2. 在设备 A 上复制(例如,使用 Ctrl+C),然后按页面右侧的 同步剪切板 按钮。
  3. 切换到设备 B,再次按 同步剪切板 按钮,数据完成同步。现在, 去粘贴(Ctrl+V) 吧!

手机端也是 OK

参考文档

llaoj/gcopy: A clipboard synchronization service for different devices that can synchronize text, screenshots, and files.
地址:https://github.com/llaoj/gcopy

GCopy - 不同设备间的剪切板同步服务
地址:https://gcopy.rutron.net/zh