A menos que haja um aplicativo da área de transferência como xclipboard , clipit ... que rouba as seleções deles, xsel / xclip criará um processo em segundo plano para manipular as futuras solicitações de seleção, desde que elas sejam proprietárias seleção.
$ printf test | xclip
$ ps -C xclip
PID TTY TIME CMD
14115 pts/10 00:00:00 xclip
Esse processo xclip está manipulando solicitações para a seleção (aqui seleção PRIMARY). Mas, se você selecionar algo em outro aplicativo (ou usar xsel ou xclip novamente para armazenar outra coisa), esse processo xclip concederá a seleção a esse outro aplicativo e terminará.
$ printf test | xsel
$ ps -C xclip
PID TTY TIME CMD
$ ps -C xsel
PID TTY TIME CMD
14212 ? 00:00:00 xsel
Acima, xsel assumiu a seleção de xclip .
Você pode descobrir quem possui uma determinada seleção com:
#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;
}
Então:
$ make xgo LDFLAGS=-lX11
$ ./xgo PRIMARY
0x07000001
Isso fornecerá a ID da janela. Você pode usar xprop -id ou xwininfo -id nesse ID, mas, no caso de xclip / xsel , não obterá muita informação.
Em sistemas baseados em GNU / Linux, ltrace é útil para ver o que está acontecendo no nível da API da biblioteca X.
Veja também Capture o tráfego do protocolo X11 para ver o que está acontecendo no nível do protocolo X11.