为什么xclip -loop 1停止工作?

时间:2014-03-27 11:55:27

标签: linux clipboard xclip

如果我使用例如

  echo 'test' | xclip -i -selection primary -loops 1 -quiet

并粘贴到另一个终端窗口,它按预期工作,即' test'粘贴,然后主要选择返回到以前的客户端,'测试'离开了。但是,如果我粘贴到X程序中,这不起作用。如果我使用-loops 10,我可以看到' test'被粘贴到例如第四循环的应用程序中。 gedit和webkit浏览器,在firefox中甚至是第七个循环。如果我使用xsel代替,我会收到以下行为:

echo 'test' | xsel -i -p -n -vvvv
xsel: Window id: 0x2e00001 (unmapped)
xsel: Timestamp: 2495171514
xsel: Maximum request size: 4000 bytes
xsel: Accumulated 5 bytes input
xsel: handle_selection_request, property=0x1ca (<unknown atom>), target=0x23d (<unknown atom>)
xsel: Refusing conversion
xsel: handle_selection_request, property=0x1ca (<unknown atom>), target=0x1a9 (TARGETS)
xsel: change_property ()
xsel: data within maximum request size
xsel: Confirming conversion
xsel: handle_selection_request, property=0x1ca (<unknown atom>), target=0x121 (UTF8_STRING)
xsel: change_property ()
xsel: data within maximum request size
xsel: Confirming conversion

如果我使用clipboard代替primary,也会发生同样的情况。在前几个循环中会发生什么以及数据在哪里?

注意:这是有意义的,因为在密码管理器中,您可能希望将密码完全粘贴一次......

另一个注意事项:我记得过去曾经在某个时刻工作,可能是在旧的Ubuntu版本上。现在我可以在Ubuntu 12.04以及Debian测试中重现这种行为。

1 个答案:

答案 0 :(得分:3)

请参阅following Debian bug

  

我使用xclip -l 1将内容粘贴到Iceweasel。这曾经非常有效   好吧,但在Iceweasel 26中爆发了。这是因为Iceweasel 26探测了   TARGETS的PRIMARY剪贴板在实际请求之前多次   UTF8_STRING内容,导致xclip过早退出。   上游为此行为提供了修复:
  http://sourceforge.net/p/xclip/code/85/
  如果你为Debian挑选补丁,我将不胜感激。谢谢   考虑。

解决申请the following patch并重新编译:

-- a/trunk/xclib.c
+++ b/trunk/xclib.c
@@ -411,6 +411,10 @@
    XSendEvent(dpy, evt.xselectionrequest.requestor, 0, 0, &res);
    XFlush(dpy);

+   /* don't treat TARGETS request as contents request */
+   if (evt.xselectionrequest.target == targets)
+       return 0;
+
    /* if len < chunk_size, then the data was sent all at
     * once and the transfer is now complete, return 1
     */

http://anonscm.debian.org/gitweb/?p=collab-maint/xclip.git;a=blob_plain;f=debian/patches/01_dont-treat-TARGETS-as-contents.patch;h=1fe637d7ca9ee6ac1dbf8ea4b68ae0381e7558e2;hb=ba750dfa3a9527aede5ac1d8ebc9b98979433b87