Kon*_*che 6 unix linux x11 ubuntu xclip
我做了以下观察:
$ xclip text.txt
Run Code Online (Sandbox Code Playgroud)
执行立即终止,它将内容复制text.txt到默认选择XA_PRIMARY,这意味着您可以通过鼠标中键或xclip -o.
当我想看看xclip正在做什么时,它不会再终止:
$ xclip -verbose text.txt
Connected to X server.
Using UTF8_STRING.
Reading text.txt...
Waiting for selection requests, Control-C to quit
Waiting for selection request number 1
Run Code Online (Sandbox Code Playgroud)
它直到我在我的X11系统中选择了某些东西才终止,例如我在这里粘贴的这个输出.如果行为仅限于此,我会理解这一点verbose.毕竟你想坐下来看看会发生什么.
我可以重现相同的行为strace,但仅当提供了fork选项时
$ strace -f xclip text.txt
Run Code Online (Sandbox Code Playgroud)
或者,当使用应该返回输出的系统执行命令从Ruby中弹出时,实际上什么都没有.
$ ruby -e "`xclip text.txt`"
Run Code Online (Sandbox Code Playgroud)
给出的提示strace是,它在文件描述符上轮询以等待事件.如果我选择了某些内容,则会满足此事件 这种行为可以解释吗?我有证据表明,这在任何系统上都不可重现.这可能与票证#9没有关闭stdout从stdin设置剪贴板?
我xclip在Ubuntu 13.04上运行版本0.12.
XClip在没有启动时会分叉一个孩子-verbose.唯一的区别-verbose是没有子分叉,并且相同的原始进程处理ConvertSelection事件.
通常在X Window工具包中通过X选择实现复制/粘贴:
选择是由atom命名并由特定客户端拥有的全局服务器资源.选择的数量不受协议的限制; 可能存在与原子一样多的选择.选择旨在为在客户端之间建立通信机制提供基础.官方定义可以在X协议的glosary中找到:
"...具有动态类型的间接属性;也就是说,它不是将属性存储在服务器中,而是由某个客户端("所有者")维护.选择本质上是全局的,被认为是属于用户(尽管由客户端维护),而不是对特定窗口子层次结构或特定客户端集的私有."
从应用程序的角度来看,选择提供了一种在X客户端之间传输信息的机制.由于X是网络协议,因此不能假设存在用于各种客户端之间的数据传输的单独信道的存在.选择仅用于直接与应用程序的用户界面方面相关的数据传输,尽管没有执行此策略.
选择内容存储在应用程序本身中,并通过ConvertSelection事件请求(此处"转换",因为客户端有一种方式可以询问所选数据的特定mimetype(或"视图"或格式).转换再次发生在拥有所选缓冲区的应用程序.
由于这种架构,没有办法"将文本复制到系统缓冲区并退出" - 因为你是一个系统缓冲区.XClip通过分叉和守护来模拟"复制和退出".