
讀完這個問題後vim 退出時 X 剪貼簿被清除我了解到,X 視窗剪貼簿僅在程式(從中獲取選擇)保持開啟狀態時才存在。
正是由於這種行為,諸如“glipper”和“parcellite”之類的程式才存在。
如果每次退出程式時都會清除X剪貼板,那麼程式如何xclip
運作xsel
?
使用此類程序的安全隱患是什麼?例如,如果將密碼複製到剪貼簿,是否可以將該密碼儲存到程式或使用者可以存取的某個臨時檔案?
答案1
除非有像xclipboard
, clipit
... 這樣的剪貼簿應用程式會竊取他們的選擇,否則xsel
/xclip
將分叉一個後台進程來處理未來的選擇請求,只要他們擁有該選擇。
$ printf test | xclip
$ ps -C xclip
PID TTY TIME CMD
14115 pts/10 00:00:00 xclip
該xclip
流程正在處理選擇請求(此處為主要選擇)。但是,如果您在另一個應用程式中選擇某些內容(或再次使用xsel
或xclip
來儲存其他內容),則該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 -id
or ,但在/xwininfo -id
的情況下,您不會獲得太多資訊。xclip
xsel
在基於 GNU/Linux 的系統上,ltrace
了解 X 庫 API 層級發生的情況非常有用。
也可以看看捕獲X11協定的流量查看 X11 協定層級發生的情況。