linux安装xclip实现终端与剪贴板之间的通道

ゞ 浴缸里的玫瑰 2022-12-12 13:41 435阅读 0赞

概要: 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打印到标准输出,然后将其重定向到一个文件或另一个程序

说明:

  1. X11 又称为 X window 或 X 系统。X Window系统 (X11或X)是一种 位图 显示的 视窗系统 。它是在 Unix 和 类Unix 操作系统 ,以及 OpenVMS 上建立图形用户界面 的标准工具包和协议,并可用于几乎所有已有的现代操作系统。
    详细介绍见 百度百科
  2. X终端是做为X客户机在X服务器上运行的专用硬件。该架构广泛用于为了你多人同时使用同一个大型服务器而构造终端。这也符合MIT的计划的初衷。 X终端搜索网络,使用 XDMCP 产生允许其运行客户机的主机列表。 初始主机需要运行 X display manager 。 专用的X终端(硬件)已经不堪常见了,经常使用 个人计算机来完成相同的功能。

X selection (X11 黏贴板)的说明

wayland or X11

检查自己使用的是wayland还是X11,使用这个命令

  1. 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 安装时遇到以下错误:

  1. /usr/bin/mandb: 无法创建索引缓存 /var/cache/man/oldlocal/zh_CN/9796: 没有那个文件或目录

在这里插入图片描述

虽然出现以上安装错误,但实际上 xclip 仍然成功安装了。

xclip -version 查看 xclip 的版本信息:

在这里插入图片描述

可用:xclip -h 查看 xclip 命令的语法 或 查阅 man 手册:man xclip.

在这里插入图片描述

xclip 用法详解

xclip man手册

  1. 名称
  2. xclip - X selections(剪贴板)与命令行之间的接口
  3. 语法
  4. xclip [选项] [文件]...
  5. 描述
  6. 从标准输入或从一个或多个文件中读取数据,并使数据作为X selection可用,以便粘贴到X应用程序中。打印当前X selection 到标准输出。
  7. -i, -in
  8. 将标准输入或文件中的文本读入X selection中(默认)
  9. 这个默认选项一般都省略。
  10. -o, -out
  11. selection中数据打印到标准输出(通常用于建立和文件或程序之间的管道)
  12. -f, -filter
  13. xclip在输出级别设置为silent(默认值)的in模式下被调用时,
  14. filter选项将导致xclip打印由标准输入管道输送到标准输出的未经修改的文本
  15. -r, -rmlastnl
  16. 当所选内容的最后一个字符是换行符时,将其删除。
  17. 不是 selection 中的最后一个字符的换行字符不受影响。如果选择没有以换行符结束,则此选项无效。
  18. 对于将类似于pwd的程序的单行输出复制到剪贴板,再次将其粘贴到命令提示符中,由于换行符 pwdappends,无需立即执行该行,此选项非常有用。
  19. -l, -loops
  20. 退出之前等待的X selection请求的数量(粘贴到X应用程序中),值为0(默认值)导致xclip等待无限数量的请求,
  21. 直到另一个应用程序(可能是另一个调用xclip的应用程序)获得selection的所有权
  22. -t, -target
  23. 使用给定的目标原子指定特定的数据格式。
  24. 通过-o,可以使用特殊的目标原子名称“TARGETS”来获得用于此选择的有效目标原子列表。
  25. 有关目标原子的更多信息,请参阅ICCCM2.6.2
  26. -d, -display
  27. X display to use (e.g. "localhost:0"),如果该选项被省略,xclip默认为$DISPLAY中的值。
  28. -h, -help
  29. 打印 xclip 选项简要说明信息
  30. -selection
  31. 指定要使用哪个X selection,使用XA_PRIMARY(默认)的选项是“primary”,
  32. 使用XA_SECONDARY的选项是“secondary”,(未用)
  33. 使用XA_CLIPBOARD的选项是“clipboard
  34. buffer-cut 已被废弃。
  35. 常用的主要选项:primary clipboard
  36. -version
  37. 显示 xclip 版本信息
  38. -silent
  39. fork到后台等待请求,没有信息输出,除非有错误发生 (xclip 默认在后台运行)
  40. -quiet 在终端上显示信息消息并在前台运行
  41. -verbose
  42. 打印 xclip 运行时详细信息
  43. -noutf8
  44. 在遗留模式下操作(例如,非UTF-8)以实现向后兼容性
  45. (只有在真正需要时才使用此选项,因为旧的行为已经被打破)
  46. xclip 默认是在 utf-8 模式下操作。
  47. 环境
  48. DISPLAY
  49. 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应用程序中单击中间进行粘贴。

  1. $ uptime
  2. # 把 uptime 程序的运行结果放在X selection
  3. $ uptime | xclip
  4. # 按鼠标中键,将 PRIMARY selection中数据粘贴到终端
  5. # 将 PRIMARY selection中数据输出到终端
  6. $ xclip -o

执行过程:

在这里插入图片描述

说明:

  1. 按鼠标中键,将 PRIMARY selection中数据粘贴到终端时,多输出 1行,提示 “未找到命令”。
    原因是:程序执行结果如果只有单行,在终端打印时,会自动加上换行符,而在终端输出的文本+换行符会自动将文本作为命令执行,因为此命令不存在,故提示此信息。

    解决方案:在 将 uptime 执行结果 复制到 selection 中时,加上 -r 选项,删除文本中最后一个换行符(当最后一个字符为换行符时)即:uptime | xclip -r

修改后的程序执行结果:

在这里插入图片描述

2.在/etc/motd(当天信息)粘贴10次后退出。显示已经处理了多少选择请求(粘贴)

  1. xclip -loops 5 -verbose /etc/motd

以上命令执行后,当在另一个终端按鼠标中键复制一次,这个终端将输出1次请求,请求数加1.当按 ctrl+c可提前退出。

在这里插入图片描述

3.将剪贴板中数据写入 helloworld.c 文件中

  1. xclip -o > helloworld.c

4.将 thread.c 文件读入 selection,并输出到 thread2.c 文件中

  1. xclip thread.c
  2. xclip -o > thread2.c

5.在支持HTML的X应用程序中单击中键,将给定文件的内容粘贴为HTML

  1. xclip -t text/html index.html

6.-selection选项值 primary 和 clipboard 测试

  1. 当用 -selection primary 选项或省略时(默认值),如果你想要黏贴 Primary 中的数据,按下鼠标的中键,可在目标窗口粘贴数据。
  2. 当用 -selection clipboard, 如果你想黏贴Clipboard中的数据,鼠标右键,在弹出框中选择粘贴即可。

Note:

  1. primary 和 clipboard 中的数据在内存中存储在不同的位置,工作机制存在差异。
  2. xclip -o 只能输出 primary selection 中的数据,不能输出 clipboard selection 中的数据。
    如果要输出 clipboard selection 中的数据,需要加 -selection clipboard 选项,即:xclip -o -selection clipboard

程序验证

在这里插入图片描述
在这里插入图片描述

7.将 XA_PRIMARY 数据复制到 XA_CLIPBOARD

  1. xclip -o | xclip -sel clip

在这里插入图片描述

8.在vim的命令模式下,选择一些文本行,然后按shift-:作为一个ex提示,并使用此命令复制选定的文本行到 primary X selection:

  1. !xclip -f

参考

  1. xclip github
  2. X window selection — xclip
  3. X window link1, X window link2, X11(也叫做X Window系统)
  4. Wayland
  5. linux 命令大全: https://ipcmen.com/
  6. ubuntu 安装常用小工具

(本文完)

发表评论

表情:
评论列表 (有 0 条评论,435人围观)

还没有评论,来说两句吧...

相关阅读