"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프로세스는 선택(여기서는 PRIMARY 선택)에 대한 요청을 처리합니다. 그러나 다른 응용 프로그램에서 항목을 선택하거나 다른 항목을 저장하기 위해 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 프로토콜 수준에서 무슨 일이 일어나고 있는지 확인하세요.

관련 정보