
Después de leer esta pregunta sobreel portapapeles X se borra cuando se sale de vimAprendí que el portapapeles de la ventana X sólo existe mientras el programa, del cual se obtuvo la selección, permanece abierto.
Es por este comportamiento que existen programas como "glipper" y "parcellite".
Si el portapapeles X se borra cada vez que se sale de un programa, ¿cómo funcionan xclip
y les gustan los programas xsel
?
¿Y cuáles son las implicaciones de seguridad del uso de programas como este? Por ejemplo, si se copió una contraseña en el portapapeles, ¿podría guardarse esta contraseña en algún archivo temporal al que puedan acceder los programas o los usuarios?
Respuesta1
A menos que haya una aplicación de portapapeles como xclipboard
, clipit
... que les robe las selecciones, xsel
/ xclip
bifurcará un proceso en segundo plano para manejar las futuras solicitudes de selección siempre que sean propietarios de la selección.
$ printf test | xclip
$ ps -C xclip
PID TTY TIME CMD
14115 pts/10 00:00:00 xclip
Ese xclip
proceso maneja las solicitudes de selección (aquí selección PRIMARIA). Pero, si selecciona algo en otra aplicación (o usa xsel
o xclip
nuevamente para almacenar algo más), entonces ese xclip
proceso concederá la selección a esa otra aplicación y finalizará.
$ printf test | xsel
$ ps -C xclip
PID TTY TIME CMD
$ ps -C xsel
PID TTY TIME CMD
14212 ? 00:00:00 xsel
Arriba, xsel
se hizo cargo de la selección de xclip
.
Puede averiguar quién posee una selección determinada con:
#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;
}
Entonces:
$ make xgo LDFLAGS=-lX11
$ ./xgo PRIMARY
0x07000001
Eso le dará la ID de la ventana. Puedes usar xprop -id
o xwininfo -id
en esa identificación, pero en el caso de xclip
/ xsel
, no obtendrás mucha información.
En sistemas basados en GNU/Linux, ltrace
es útil ver qué sucede en el nivel API de la biblioteca X.
Ver tambiénCapture el tráfico del protocolo X11para ver qué está sucediendo en el nivel del protocolo X11.