
Depois de ler esta pergunta sobrea área de transferência do X sendo limpa quando o vim é encerradoAprendi que a área de transferência da janela X só existe enquanto o programa - do qual a seleção foi obtida - permanece aberto.
É por causa desse comportamento que existem programas como "glipper" e "parcellite".
Se a área de transferência do X for limpa toda vez que um programa for encerrado, como os programas gostam xclip
e xsel
funcionam?
E quais são as implicações de segurança do uso de programas como este? Por exemplo, se uma senha fosse copiada para a área de transferência, essa senha poderia ser salva em algum arquivo temporário que pudesse ser acessado por programas ou usuários?
Responder1
A menos que haja um aplicativo de área de transferência como xclipboard
... clipit
que roube as seleções deles, xsel
/ xclip
criará um processo em segundo plano para lidar com as solicitações de seleção futuras, desde que eles possuam a seleção.
$ printf test | xclip
$ ps -C xclip
PID TTY TIME CMD
14115 pts/10 00:00:00 xclip
Esse xclip
processo trata de solicitações de seleção (aqui seleção PRIMÁRIA). Mas, se você selecionar algo em outro aplicativo (ou usar xsel
ou xclip
novamente para armazenar outra coisa), esse xclip
processo concederá a seleção a esse outro aplicativo e será encerrado.
$ 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 lhe dará o ID da janela. Você pode usar xprop -id
or xwininfo -id
nesse ID, mas no caso de xclip
/ xsel
, você não obterá muitas informações.
Em sistemas baseados em GNU/Linux, ltrace
é útil ver o que está acontecendo no nível da API da biblioteca X.
Veja tambémCapture o tráfego do protocolo X11para ver o que está acontecendo no nível do protocolo X11.