「xclip」や「xsel」などのコマンドラインクリップボードツールはどのようにクリップボードを保存しますが、X Windows環境では保存しませんか?

「xclip」や「xsel」などのコマンドラインクリップボードツールはどのようにクリップボードを保存しますが、X Windows環境では保存しませんか?

この質問を読んだ後Vimが終了すると、Xクリップボードは消去されます。私はXウィンドウのクリップボードがプログラム(選択項目を含む)が開いている間にのみ存在することを学びました。
「glipper」や「parcellite」などのプログラムが存在するのは、この動作によるものです。

プログラムが終了するたびにXクリップボードをクリアするとどうxclipなりますかxsel
そのようなプログラムを使用すると、セキュリティにどのような影響がありますか?たとえば、パスワードをクリップボードにコピーした場合、そのパスワードをプログラムまたはユーザーがアクセスできる一時ファイルに保存できますか?

答え1

...などの選択を盗むクリップボードアプリケーションがない限りxclipboard、/は選択を所有している限り、将来の選択要求を処理するためにバックグラウンドプロセスを分岐します。clipitxselxclip

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

プロセスxclipは選択要求(ここではデフォルトの選択)を処理しています。ただし、他のアプリケーションがアイテムを選択した場合(または他のアイテムを保存するためにまたはを再使用するxsel場合)、プロセスは他のアプリケーションの選択を放棄して終了します。xclipxclip

$ 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 -idxwininfo -id多くの情報を取得できません。xclipxsel

GNU / Linuxベースのシステムでは、ltraceXライブラリAPIレベルで何が起こっているのかを知るのが便利です。

また、見ることができますX11プロトコルトラフィックキャプチャX11プロトコルレベルで何が起こっているかを確認してください。

関連情報