linux安装xclip实现终端与剪贴板之间的通道
概要: ubuntu 20.04 通过安装 xclip 来实现终端与剪贴板之间的数据通道:xclip 类似 dos 中的 clip命令,xclip 可将命令执行的结果保存到剪贴板,还允许将文件的内容直接放入剪贴板 ,使用 xclip -o 命令可查看剪贴板中的内容。
文章目录
- What’s xclip
- X selection (X11 黏贴板)的说明
- wayland or X11
- X11 selection 类别及详细介绍
- selection
- cut-buffer
- xclip 安装 (in ubuntu 20.04)
- xclip 用法详解
- 示例:
- 参考
What’s xclip
xclip github官方仓库
xclip is a command line utility that is designed to run on any system with an X11 implementation. It provides an interface to X selections (“the clipboard”) from the command line. It can read data from standard in or a file and place it in an X selection for pasting into other X applications. xclip can also print an X selection to standard out, which can then be redirected to a file or another program.
译
xclip 是一个命令行实用程序,设计用于运行在任何有X11实现的系统上。它提供了一个从命令行进行X selection(“剪贴板”)的接口。它可以从标准输入或文件中读取数据,并将其放在X selection中,以便粘贴到其他X应用程序中。xclip还可以将X selection打印到标准输出,然后将其重定向到一个文件或另一个程序。
说明:
- X11 又称为 X window 或 X 系统。X Window系统 (X11或X)是一种 位图 显示的 视窗系统 。它是在 Unix 和 类Unix 操作系统 ,以及 OpenVMS 上建立图形用户界面 的标准工具包和协议,并可用于几乎所有已有的现代操作系统。
详细介绍见 百度百科 - X终端是做为X客户机在X服务器上运行的专用硬件。该架构广泛用于为了你多人同时使用同一个大型服务器而构造终端。这也符合MIT的计划的初衷。 X终端搜索网络,使用 XDMCP 产生允许其运行客户机的主机列表。 初始主机需要运行
X display manager
。 专用的X终端(硬件)已经不堪常见了,经常使用 个人计算机来完成相同的功能。
X selection (X11 黏贴板)的说明
wayland or X11
检查自己使用的是wayland还是X11,使用这个命令
echo $XDG_SESSION_TYPE
Wayland是一个简单的“显示服务器”(Display Server),与X Window属于同一级的事物,而不是仅仅作为X Window下X Server的替代(注:X Window下分X Server和X Client)。也就是说,Wayland不仅仅是要完全取代X Window,而且它将颠覆Linux桌面上X Client/X Server的概念,以后将没有所谓的“X Client”了,而是“Wayland Client”。
Wayland 更详细的介绍 参见。
X11 selection 类别及详细介绍
在X11中,有两种黏贴板:selections 和 cut-buffer。两者的机制是不同的。
selection
selection中 的内容由提供的应用程序维护,从 selection 取数据的程序要向原引用程序索取数据。当原应用程序退出时,你也要不到这段数据了。selection其实由三部分构成:Primary,Secondary,Clipboard。其中Secondary表现 ill-defined,我们不会再提到它。如果你想要黏贴 Primary 中的数据,按下鼠标的中键,如果你想黏贴Clipboard中的数据,鼠标右键,在弹出框中选择粘贴。
cut-buffer
cut-buffer由cut-buffer0-7 , 8个buffer构成。cut-buffer 中的数据由X-server维护。如果你不知道什么是x-server,…。只有当x-server退出时(如log out),数据才会消失。也就是说cut-buffer中的数据较为持久,但cut-buffer是一种old and outdated的技术。
目前 cut-buffer 机制基本被废弃,以下主要说明 selection 中的 Primary 和 Clipboard 机制。
xclip 安装 (in ubuntu 20.04)
xclip github官方仓库
ubuntu 默认未安装 xclip 命令,可以通过 sudo apt-get install xclip
命令安装。
笔者在 ubuntu 20.04 安装时遇到以下错误:
/usr/bin/mandb: 无法创建索引缓存 /var/cache/man/oldlocal/zh_CN/9796: 没有那个文件或目录
虽然出现以上安装错误,但实际上 xclip 仍然成功安装了。
xclip -version
查看 xclip 的版本信息:
可用:xclip -h
查看 xclip 命令的语法 或 查阅 man 手册:man xclip
.
xclip 用法详解
xclip man手册
名称
xclip - X selections(剪贴板)与命令行之间的接口
语法
xclip [选项] [文件]...
描述
从标准输入或从一个或多个文件中读取数据,并使数据作为X selection可用,以便粘贴到X应用程序中。打印当前X selection 到标准输出。
-i, -in
将标准输入或文件中的文本读入X selection中(默认)
这个默认选项一般都省略。
-o, -out
将selection中数据打印到标准输出(通常用于建立和文件或程序之间的管道)
-f, -filter
当xclip在输出级别设置为silent(默认值)的in模式下被调用时,
filter选项将导致xclip打印由标准输入管道输送到标准输出的未经修改的文本
-r, -rmlastnl
当所选内容的最后一个字符是换行符时,将其删除。
不是 selection 中的最后一个字符的换行字符不受影响。如果选择没有以换行符结束,则此选项无效。
对于将类似于pwd的程序的单行输出复制到剪贴板,再次将其粘贴到命令提示符中,由于换行符 pwdappends,无需立即执行该行,此选项非常有用。
-l, -loops
退出之前等待的X selection请求的数量(粘贴到X应用程序中),值为0(默认值)导致xclip等待无限数量的请求,
直到另一个应用程序(可能是另一个调用xclip的应用程序)获得selection的所有权
-t, -target
使用给定的目标原子指定特定的数据格式。
通过-o,可以使用特殊的目标原子名称“TARGETS”来获得用于此选择的有效目标原子列表。
有关目标原子的更多信息,请参阅ICCCM第2.6.2节
-d, -display
X display to use (e.g. "localhost:0"),如果该选项被省略,xclip默认为$DISPLAY中的值。
-h, -help
打印 xclip 选项简要说明信息
-selection
指定要使用哪个X selection,使用XA_PRIMARY(默认)的选项是“primary”,
使用XA_SECONDARY的选项是“secondary”,(未用)
使用XA_CLIPBOARD的选项是“clipboard”
“buffer-cut” 已被废弃。
常用的主要选项:primary 和 clipboard。
-version
显示 xclip 版本信息
-silent
fork到后台等待请求,没有信息输出,除非有错误发生 (xclip 默认在后台运行)
-quiet 在终端上显示信息消息并在前台运行
-verbose
打印 xclip 运行时详细信息
-noutf8
在遗留模式下操作(例如,非UTF-8)以实现向后兼容性
(只有在真正需要时才使用此选项,因为旧的行为已经被打破)
xclip 默认是在 utf-8 模式下操作。
环境
DISPLAY
X display to use if none is specified with the -display option.
说明:
xclip从标准输入或文件中读取文本,并将其提供给其他X应用程序,以作为X selection 粘贴(通常是通过中间的鼠标按钮)。它从指定的所有文件中读取,如果没有指定文件,则从标准输入中读取。xclip也可以用-o选项打印选择的内容到标准输出。
xclip 被设计为允许更紧密地集成 X 应用程序和命令行程序。默认的操作是在后台静默等待X selection 请求(粘贴),直到另一个X应用程序将数据放入剪贴板,此时xclip会静默退出。
您可以使用-verbose选项来查看xclip是否以及何时实际收到来自其他X应用程序的选择请求。
选项可以缩写,只要它们保持明确。例如,可以使用-d或-disp代替-display。但是,不能使用-v,因为它是不明确的(它可以是-verbose或-version的缩写),因此它将被解释为文件名。
注意,只有 selection 用 -selection选项指定的第一个字符选项比较重要。这意味着“p”、“sec”和“clip”分别与“primary”、“secondary”或“clipboard”具有相同的效果。
示例:
1.把 uptime 程序的运行结果放在X selection。然后在X应用程序中单击中间进行粘贴。
$ uptime
# 把 uptime 程序的运行结果放在X selection
$ uptime | xclip
# 按鼠标中键,将 PRIMARY selection中数据粘贴到终端
# 将 PRIMARY selection中数据输出到终端
$ xclip -o
执行过程:
说明:
按鼠标中键,将 PRIMARY selection中数据粘贴到终端时,多输出 1行,提示 “未找到命令”。
原因是:程序执行结果如果只有单行,在终端打印时,会自动加上换行符,而在终端输出的文本+换行符会自动将文本作为命令执行,因为此命令不存在,故提示此信息。解决方案:在 将 uptime 执行结果 复制到 selection 中时,加上 -r 选项,删除文本中最后一个换行符(当最后一个字符为换行符时)即:
uptime | xclip -r
修改后的程序执行结果:
2.在/etc/motd(当天信息)粘贴10次后退出。显示已经处理了多少选择请求(粘贴)
xclip -loops 5 -verbose /etc/motd
以上命令执行后,当在另一个终端按鼠标中键复制一次,这个终端将输出1次请求,请求数加1.当按 ctrl+c可提前退出。
3.将剪贴板中数据写入 helloworld.c 文件中
xclip -o > helloworld.c
4.将 thread.c 文件读入 selection,并输出到 thread2.c 文件中
xclip thread.c
xclip -o > thread2.c
5.在支持HTML的X应用程序中单击中键,将给定文件的内容粘贴为HTML
xclip -t text/html index.html
6.-selection选项值 primary 和 clipboard 测试
- 当用
-selection primary
选项或省略时(默认值),如果你想要黏贴 Primary 中的数据,按下鼠标的中键,可在目标窗口粘贴数据。 - 当用
-selection clipboard
, 如果你想黏贴Clipboard中的数据,鼠标右键,在弹出框中选择粘贴即可。
Note:
- primary 和 clipboard 中的数据在内存中存储在不同的位置,工作机制存在差异。
xclip -o
只能输出 primary selection 中的数据,不能输出 clipboard selection 中的数据。
如果要输出 clipboard selection 中的数据,需要加-selection clipboard
选项,即:xclip -o -selection clipboard
程序验证
7.将 XA_PRIMARY 数据复制到 XA_CLIPBOARD
xclip -o | xclip -sel clip
8.在vim的命令模式下,选择一些文本行,然后按shift-:作为一个ex提示,并使用此命令复制选定的文本行到 primary X selection:
!xclip -f
参考
- xclip github
- X window selection — xclip
- X window link1, X window link2, X11(也叫做X Window系统)
- Wayland
- linux 命令大全: https://ipcmen.com/
- ubuntu 安装常用小工具
(本文完)
还没有评论,来说两句吧...