如果我使用例如
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测试中重现这种行为。
答案 0 :(得分:3)
我使用
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
*/