在 Linux 服务器和本机之间共享剪贴板

陪她去流浪 桃子 2020年05月22日 编辑 阅读次数:3334

鸟哥今天发表了一篇文章《使用OSC52实现iTerm2远程pbcopy》,讲解了如何用 PHP 程序在服务器上拷贝数据到本机/当前电脑剪贴板的方法。 正好这两天也有同事问到我怎么实现这个能力,所以这里整理一下。

目的:能够在服务器上复制文本到当前电脑的剪贴板内,即共享剪贴板。

注意,这个能力是服务器进程直接能操控当前电脑的剪贴板,而不是直接用鼠标在终端模拟器上选择复制。 不同之处在于,终端里面全部是字符,用鼠标选择复制,可能会选中不想要的字符,比如 VIM 的行号等。 再比如文件太长的时候,不易用鼠标直接选择所有文本。

实现方式在鸟哥的文章里面已经比较详细地说明了,而且写了一个兼容性脚本。 但是由于我的服务器上没有 PHP,所以我把它改成了 Bash 脚本。没有做完整的兼容性测试,有问题再修复。

Gist 地址:https://gist.github.com/movsb/30beb738148f971865c1d28947fed9e5

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#!/bin/bash

set -euo pipefail

t=$(cat <&0 | base64 --wrap=0)
if [ ! -z ${STY+x} ]; then
	echo -ne "\eP\e]52;c;$t\a\e\\"
elif [ ! -z ${TMUX+x} ]; then
	echo -ne "\ePtmux;\e\e]52;c;$t\a\e\\"
else
	echo -ne "\e]52;c;$t\a"
fi

写入到标准输入的东西会全部复制到当前电脑的系统剪贴板。

同时,别忘了开启 iTerm2 的:PreferencesGeneralSelectionApplication in terminal may access clipboard.

参考

2021-07-15 更新

如果你在服务器上使用 Tmux 的话,使用 Tmux 的 copy-mode 复制的内容,能直接复制到当前电脑的系统剪贴板,无需使用上面的脚本。

同样记得开启终端模拟器的系统剪贴板访问能力。

2021-09-16 更新

最近把开发环境部署在了云端,通过 VSCode 的 Remote-SSH 开发,结果发现 VSCode 不支持此功能。使用脚本也不行,我抽空提个单。

2024-12-16 更新

VsCode 已经支持。

标签:linux · tmux · 剪贴板 · iTerm2