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.