Clipboard

諸如“xclip”和“xsel”之類的命令行剪貼板工具如何保留剪貼板 - 在沒有的X windows環境中?

  • February 23, 2019

在閱讀了有關退出 vim 時清除 X 剪貼板的問題後,我了解到 X 視窗剪貼板僅在程序(從中獲得選擇)保持打開狀態時才存在。

正是由於這種行為,才出現了“glipper”和“parcellite”之類的程序。

如果每次退出程序時都清除 X 剪貼板,程序如何喜歡xclipxsel工作?

使用這樣的程序有什麼安全隱患?例如,如果將密碼複製到剪貼板,是否可以將此密碼保存到某個臨時文件中,以便程序或使用者可以訪問?

除非有像xclipboard, clipit… 這樣的剪貼板應用程序從他們那裡竊取選擇,xsel/xclip將派生一個後台程序來處理未來的選擇請求,只要他們擁有選擇。

$ printf test | xclip
$ ps -C xclip
 PID TTY          TIME CMD
14115 pts/10   00:00:00 xclip

xclip過程正在處理選擇請求(此處為 PRIMARY 選擇)。但是,如果您在另一個應用程序中選擇了某些內容(或再次使用xselorxclip來儲存其他內容),那麼該xclip程序會將選擇權讓給該其他應用程序並終止。

$ printf test | xsel
$ ps -C xclip
 PID TTY          TIME CMD
$ ps -C xsel
 PID TTY          TIME CMD
14212 ?        00:00:00 xsel

上面,xsel接管了從 中的選擇xclip

您可以通過以下方式找出誰擁有給定選擇:

#include <stdio.h>
#include <X11/Xlib.h>
#include <X11/Xatom.h>
int main(int argc, char* argv[])
{
   Display *d = XOpenDisplay(NULL);
   Window w = XGetSelectionOwner(d, XInternAtom (d, argv[1], False));
   printf("0x%08x\n", w);
   return 0;
}

然後:

$ make xgo LDFLAGS=-lX11
$ ./xgo PRIMARY
0x07000001

這將為您提供視窗 ID。您可以在該 id 上使用xprop -idor xwininfo -id,但在xclip/的情況下xsel,您不會獲得太多資訊。

在基於 GNU/Linux 的系統上,ltrace查看 X 庫 API 級別發生的事情很有用。

另請參閱擷取 X11 協議的流量以查看 X11 協議級別發生的情況。

引用自:https://unix.stackexchange.com/questions/368775