¿Cómo conservan el portapapeles las herramientas de línea de comandos como "xclip" y "xsel" en un entorno X Windows que no lo hace?

¿Cómo conservan el portapapeles las herramientas de línea de comandos como "xclip" y "xsel" en un entorno X Windows que no lo hace?

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 xclipy 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/ xclipbifurcará 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 xclipproceso maneja las solicitudes de selección (aquí selección PRIMARIA). Pero, si selecciona algo en otra aplicación (o usa xselo xclipnuevamente para almacenar algo más), entonces ese xclipproceso 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, xselse 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 -ido xwininfo -iden esa identificación, pero en el caso de xclip/ xsel, no obtendrás mucha información.

En sistemas basados ​​en GNU/Linux, ltracees ú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.

información relacionada