Clipboard
諸如“xclip”和“xsel”之類的命令行剪貼板工具如何保留剪貼板 - 在沒有的X windows環境中?
在閱讀了有關退出 vim 時清除 X 剪貼板的問題後,我了解到 X 視窗剪貼板僅在程序(從中獲得選擇)保持打開狀態時才存在。
正是由於這種行為,才出現了“glipper”和“parcellite”之類的程序。
如果每次退出程序時都清除 X 剪貼板,程序如何喜歡
xclip
和xsel
工作?使用這樣的程序有什麼安全隱患?例如,如果將密碼複製到剪貼板,是否可以將此密碼保存到某個臨時文件中,以便程序或使用者可以訪問?
除非有像
xclipboard
,clipit
… 這樣的剪貼板應用程序從他們那裡竊取選擇,xsel
/xclip
將派生一個後台程序來處理未來的選擇請求,只要他們擁有選擇。$ printf test | xclip $ ps -C xclip PID TTY TIME CMD 14115 pts/10 00:00:00 xclip
該
xclip
過程正在處理選擇請求(此處為 PRIMARY 選擇)。但是,如果您在另一個應用程序中選擇了某些內容(或再次使用xsel
orxclip
來儲存其他內容),那麼該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
orxwininfo -id
,但在xclip
/的情況下xsel
,您不會獲得太多資訊。在基於 GNU/Linux 的系統上,
ltrace
查看 X 庫 API 級別發生的事情很有用。另請參閱擷取 X11 協議的流量以查看 X11 協議級別發生的情況。