剪贴板实时同步工具: SynCopy,主机、虚拟机、远程桌面共享剪贴板,体验极佳 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
aronstrider
V2EX    分享创造

剪贴板实时同步工具: SynCopy,主机、虚拟机、远程桌面共享剪贴板,体验极佳

  •  
  •   aronstrider
    ArcaneEcholan 137 天前 3577 次点击
    这是一个创建于 137 天前的主题,其中的信息可能已经有所发展或是发生改变。

    平时在 Ubuntu 上写代码,开着 VirtualBox 装的 Windows ,双向剪贴板老是掉链子。
    跟同事聊点代码、或者 VPN 到公司桌面,总是得各种中转、手动粘贴,挺麻烦。

    于是就写了个 SyncCopy ,监听剪贴板变动,直接用文件做同步,连坚果云这种网盘都能用上。
    反正剪贴板文本量也不大,实时同步,效果出乎意料地好。

    优点:

    • 功能专一,只同步剪贴板内容,不含花里胡哨的多余功能
    • 基于文件夹同步,配合坚果云、OneDrive 等更方便
    • 支持 Windows 、Linux ,跨平台更灵活

    项目放在这儿:
    GitHub: ArcaneEcholan/SynCopy

    欢迎大家试试,或者提点改进思路!
    如果你也经常在主机 / 虚拟机 / VPN 来回切,SynCopy 可能会帮到你。

    23 条回复    2025-06-03 18:03:30 +08:00
    loveyu
        1
    loveyu  
       137 天前 via Android
    巧了,我也写过一个类似的,支持图片和文字,效果确实比虚拟机自带的双向同步好用,用的 http 协议
    aronstrider
        2
    aronstrider  
    OP
       137 天前
    @loveyu 我好奇你怎么解决同步冲突的,手搓吗,而且每个机器还要开个服务器
    loveyu
        3
    loveyu  
       137 天前 via Android
    为啥要解决冲突,强制覆盖就行了,剪贴板历史记录看上一个
    NASK
        4
    NASK  
       137 天前
    之前也写过一个局域网内剪贴板同步,用的广播实现局域网不同设备的互相发现,tcp 同步数据.你这个利用网盘同步的思路不错啊,想借鉴一下
    kuanat
        5
    kuanat  
       137 天前
    我也有自己写的工具,大致看了一下代码,随便说说想法:

    1. 监控剪贴板内容变化,win 有 api 可以注册监听,mac 有 api 提供变化计数,linux 取决于窗口管理器,移动设备基本没戏。轮询不是一个好的做法。

    2. 你的思维模型过于复杂了,本质上你不需要解决完全分布式的同步问题,只需要把同步的模型改为星型连接,这个同步问题可以简化。

    具体说就是,所有节点设备之间只需要一个中转节点,也就是上面 #3 提到的覆盖逻辑。剪贴板更新行为是有方向性的,一定是从写端传递到读端。

    3. 使用网盘同步很慢,如果服务器和费用是障碍,可以考虑用各种 serverless 服务实现。
    aronstrider
        6
    aronstrider  
    OP
       137 天前
    @NASK 我是先去通过手动改网盘里的文本文件实现同步,然后再过度到自动化的
    aronstrider
        7
    aronstrider  
    OP
       137 天前
    @kuanat 感谢,我也进行相应的回复:

    1. 我的代码不依赖某个操作系统的特性,简单有效。当然,移动设备确实是短板。
    2. 我压根没解决分布式的相关问题,因为网盘帮我 handle 了一切。
    3. 简单文本的同步基本不会产生费用,同时,网盘同步简单文本的速度已经可以应付“复制粘贴”这种简单需求。

    总体来说,你提出的意见很有建设性,是很有架构师的风范的独到见解,但是我们还是应该从需求出发,一切从简。
    aronstrider
        8
    aronstrider  
    OP
       137 天前
    @loveyu 3

    有点好奇,其他类型的数据(除文本)是怎么触发粘贴的
    nananqujava
        9
    nananqujava  
       137 天前
    我也写过类似的, 靠 http 请求发送剪切板内容
    inframe
        10
    inframe  
       137 天前
    VirtualBox 装的 Windows ,为啥不用远程桌面连进去,xrdp 支持剪贴板同步
    Linho1219
        11
    Linho1219  
       137 天前 via Android
    剪贴板同步现在方案挺多的
    但是现在有个问题没法解决:安卓 10+ 严格限制后台应用读取剪贴板,除了输入法和系统应用都不能后台访问
    我折腾了半天,现在开摆了反正,用的微信输入法自带同步(反正隐私早被 tx 看光了),轻喷(
    Citrus
        12
    Citrus  
       136 天前 via iPhone
    aronstrider
        13
    aronstrider  
    OP
       136 天前 via iPhone
    @inframe 走远程桌面是一种绕过本地,放弃流程体验的不得已之选。
    prodcd
        14
    prodcd  
       136 天前
    微信输入法也有这个功能,最近一直用 mac 远程桌面 windows ,但 mac 版的远程桌面对这块貌似不支持。
    loveyu
        15
    loveyu  
       136 天前
    @aronstrider 比如 我使用 wl-paste --list-types 读取剪贴板类型,还是很容易的,如果复制的是图片就会输出图片的 mime 类型,然后读取就行了
    loveyu
        16
    loveyu  
       136 天前
    微信输入法有个优势就是,如果复制了图片。在微信里面可以直接输入远程同步的剪贴板中的图片。
    导致我现在的同步链路成了:

    Linux ---HTTP 同步----> Windows 虚拟机 ----微信输入法---> Android 手机

    然后反向链路就有点不稳,偶尔需要 KDE Connect 协助一些
    haoxuexiaoyao
        17
    haoxuexiaoyao  
       136 天前
    支持图片和文件同步么
    KevinXC
        18
    KevinXC  
       135 天前
    @loveyu #16 你试过两台 windows 上通过微信输入法同步图片吗,好像只能电脑和手机同步
    aronstrider
        19
    aronstrider  
    OP
       135 天前
    @haoxuexiaoyao 暂时没有支持
    aronstrider
        20
    aronstrider  
    OP
       135 天前
    @loveyu #16 你是有桌面端到移动端的同步需求吗
    aronstrider
        21
    aronstrider  
    OP
       135 天前
    @haoxuexiaoyao #17 我觉得图片可以考虑支持一下,但是文件还是走同步盘吧
    loveyu
        22
    loveyu  
       135 天前 via Android
    @aronstrider 这个是必然存在的,移动 pc 双向同步是强需求

    @KevinXC 没试过,只有一个 windows
    nicoljiang
        23
    nicoljiang  
    PRO
       128 天前
    一直没明白一个问题,请教一下:移动端如何自动触发复制和粘贴同步?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     852 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 21:57 PVG 05:57 LAX 14:57 JFK 17:57
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86