x0vnc/x11vnc通过ssh与osc52共享剪切板
前言
没想到这次写文又又又又是因为剪贴板的事情。这次的场景是在x0vncserver下共享服务端剪贴板给客户端主机。archwiki 没有写解决方案,在该项目的issue 中,这位老哥@mathewng
表示有一种workaround。具体是多开一个带参数的无画面x11vnc会话捕抓键盘和剪贴板x11vnc -nofb -clip 4x4+0+0
这意味着将开启两个本地x11的vnc会话,一个是一切正常除了不能把服务端主机剪贴板发送给客户端主机的x0vncserver -rfbauth ~/.vnc/passwd
;另一个是啥都没有仅剩下捕抓键盘和剪贴板x11vnc -nofb -clip 4x4+0+0
(BTW,这里为了前者的正常体验可以加上-repeat参数,就是有亿点点小问题)
两个残疾人取长补短看起来很滑稽,但是确实很好地解决了两者的不足。但是最大的缺点是无法将中文复制出来
PS:x0vnc服务器中的rdp远程windows主机中文却能正确复制出来,甚至还能和跨了两台机器的windows共享图片剪切板…….鄙人由于不懂编码,觉得煞是奇怪
无法复制中文对于以汉语为主要语言的人实在是鸡肋。想起之前的x11转发和osc52,顿时心生一计——能把两者结合在一起,再将命令写进bash脚本,最后做成快捷键或者desktop_entry,以一种比较诡异的办法共享双方剪贴板
思路
通过ssh上的x11转发功能再配置好xauth和xhost就能获得指定x11会话。在这个基础上就可以做到通过ssh控制x11会话。例如像这样通过ssh在x11本地会话下打开xclock
:
而剪贴板是由x11提供的,那么说在ssh中提取或者操作剪贴板内容也不在话下了。很明显,xclip
可以通过命令行胜任这个工作:
1 | ➜ ~ pacman -Ss xclip |
直到这里也仅限于将指定x11会话的内容在ssh中输出出来,或者将ssh中输入的内容通过echo\管道\重定向等方法复制到指定x11会话的剪贴板中,不能单纯通过命令行真正做到双向粘贴
但是,osc52和终端软件配合就能真正做到只通过bash的命令行分享x0vnc服务器的剪贴板到ssh客户端机器,并且只通过bash命令更改x0vnc剪贴板内容
能通过命令行的事情自然能写脚本替代手打,脚本能通过快捷键以及各种方法快速执行。所以笔者将以一个简单的脚本实现标题目的
这里的复制仅仅只代表x11的clipboard剪贴板,x有三种剪贴板,详见以下链接:
https://superuser.com/questions/90257/what-is-the-difference-between-the-x-clipboards
先决条件
- ssh使用的
终端
与x0vncserver服务主机使用的终端
支持osc52转义序列
- ssh服务器开启
X11Forwarding
,ssh客户端开启ForwardX11
和ForwardX11Trusted
(两个选项可以用open-ssh命令行参数-Y
替代)
实践
1-脚本目录结构
文件一览:
1 | ➜ remote_clip ls -hl |
clipboard
提供写入x0vncserver会话剪贴板的内容evnc.sh
提供使用默认文件编辑器打开clipboard
文件的方法sc.sh
将x0vncserver会话的剪贴板的内容复制到ssh客户端机器(蹩脚英文ssh copy)vc.sh
将clipboard
内容复制到x0vncserver会话剪贴板(蹩脚英文vnc copy)wvnc.sh
将传入的第一个参数写入到clipboard
yank_head
上述脚本的具体实现方法
2-脚本内容
yank_head
上述脚本的实现方法:
1 |
|
evnc.sh
提供使用默认文件编辑器打开clipboard
文件的方法:
1 |
|
sc.sh
将x0vncserver会话的剪贴板的内容复制到ssh客户端机器(蹩脚英文ssh copy):
1 |
|
vc.sh
将clipboard
内容复制到x0vncserver会话剪贴板(蹩脚英文vnc copy):
1 |
|
wvnc.sh
将传入的第一个参数写入到clipboard
:
1 |
|
3-食用方法
1 | - 文件名:evnc.sh |
如果要将vc.sh放到图形界面的快捷键中,请务必通过支持osc52转义序列的终端执行此命令
- 标题: x0vnc/x11vnc通过ssh与osc52共享剪切板
- 作者: 7cmb
- 创建于 : 2024-05-28 22:46:13
- 更新于 : 2024-10-12 23:07:35
- 链接: https://7cmb.com/x0vnc-x11vnc通过ssh与osc52共享剪切板/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。