Wie speichern Befehlszeilentools für die Zwischenablage wie „xclip“ und „xsel“ die Zwischenablage dauerhaft – in einer X-Windows-Umgebung, in der dies nicht der Fall ist?

Wie speichern Befehlszeilentools für die Zwischenablage wie „xclip“ und „xsel“ die Zwischenablage dauerhaft – in einer X-Windows-Umgebung, in der dies nicht der Fall ist?

Nach dem Lesen dieser Frage überdie X-Zwischenablage wird gelöscht, wenn vim beendet wirdIch habe gelernt, dass die Zwischenablage des X-Windows nur existiert, solange das Programm, aus dem die Auswahl stammt, geöffnet bleibt.
Aufgrund dieses Verhaltens existieren Programme wie „Glipper“ und „Parcellite“.

Wenn die X-Zwischenablage jedes Mal geleert wird, wenn ein Programm beendet wird, wie sehen dann die Programme aus xclipund wie xselfunktionieren sie?
Und welche Sicherheitsauswirkungen hat die Verwendung solcher Programme? Wenn beispielsweise ein Passwort in die Zwischenablage kopiert wurde, könnte dieses Passwort in einer temporären Datei gespeichert werden, auf die Programme oder Benutzer zugreifen können?

Antwort1

Sofern es keine Zwischenablageanwendung wie ... gibt, xclipboarddie clipitihnen die Auswahl stiehlt, wird xsel/ xclipeinen Hintergrundprozess aufspalten, um die zukünftigen Auswahlanforderungen zu verarbeiten, solange sie die Auswahl besitzen.

$ printf test | xclip
$ ps -C xclip
  PID TTY          TIME CMD
14115 pts/10   00:00:00 xclip

Dieser xclipProzess verarbeitet Anfragen für die Auswahl (hier PRIMÄRE Auswahl). Wenn Sie jedoch etwas in einer anderen Anwendung auswählen (oder xseloder xcliperneut verwenden, um etwas anderes zu speichern), xclipüberlässt dieser Prozess die Auswahl dieser anderen Anwendung und wird beendet.

$ printf test | xsel
$ ps -C xclip
  PID TTY          TIME CMD
$ ps -C xsel
  PID TTY          TIME CMD
14212 ?        00:00:00 xsel

Oben xselwurde die Auswahl von übernommen xclip.

Sie können herausfinden, wem eine bestimmte Auswahl gehört, indem Sie:

#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;
}

Dann:

$ make xgo LDFLAGS=-lX11
$ ./xgo PRIMARY
0x07000001

Dadurch erhalten Sie die Fenster-ID. Sie können xprop -idoder xwininfo -idfür diese ID verwenden, aber im Fall von xclip/ xselerhalten Sie nicht viele Informationen.

Auf GNU/Linux-basierten Systemen ltraceist es nützlich zu sehen, was auf der API-Ebene der X-Bibliothek geschieht.

Siehe auchErfassen Sie den Datenverkehr des X11-Protokollsum zu sehen, was auf der X11-Protokollebene passiert.

verwandte Informationen