"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 -id에는 xwininfo -id많은 정보를 얻을 수 없습니다.xclipxsel

GNU/Linux 기반 시스템에서는 ltraceX 라이브러리 API 수준에서 무슨 일이 일어나고 있는지 아는 것이 유용합니다.

당신은 또한 볼 수 있습니다X11 프로토콜 트래픽 캡처X11 프로토콜 수준에서 무슨 일이 일어나고 있는지 확인하세요.

관련 정보