Antworten:
Ich bin nach vielen Suchen und Versuchen auf diesen Befehl gekommen:
for file in /proc/[0-9]*; do grep -ao 'DISPLAY=[^[:cntrl:]]*' $file/environ 2>/dev/null && grep -ao '(.*)' $file/stat; done | sed 'N;s/\n/\t/'
Ein Beispiel für die Ausgabe ist:
DISPLAY=:0 (unity-files-dae)
DISPLAY=:0 (unity-music-dae)
DISPLAY=:0 (unity-lens-vide)
DISPLAY=:0 (zeitgeist-daemo)
DISPLAY=:0 (zeitgeist-fts)
DISPLAY=:0 (zeitgeist-datah)
DISPLAY=:0 (cat)
DISPLAY=:0 (unity-scope-vid)
DISPLAY=:0 (unity-musicstor)
DISPLAY=:0 (dconf-service)
DISPLAY=:0 (gdu-notificatio)
DISPLAY=:0 (telepathy-indic)
DISPLAY=:0 (mission-control)
DISPLAY=:0 (goa-daemon)
DISPLAY=:0 (VBoxXPCOMIPCD)
DISPLAY
in jeder Datei. Diese Dateien befinden sich tatsächlich in den Prozessen, die ausgeführt werden. Jede Datei, die das Wort enthält, DISPLAY
bedeutet, dass dieser Prozess es verwendet. Sie können nicht den vollständigen Prozessnamen abrufen, da die Namen in der Ausgabe die Dateinamen sind, die gegründet wurden. /proc
Sie können also einfach nicht mehr als die angebotenen wissen.
Mit einer kleinen Änderung am Maythux-Skript können wir auch die PID der Prozesse mithilfe der DISPLAY-Variablen abrufen.
for file in /proc/[0-9]*; do grep -ao 'DISPLAY=[^[:cntrl:]]*' $file/environ 2>/dev/null && grep -ao '[0-9]* (.*)' $file/stat; done | sed 'N;s/\n/\t/' |column -t |sort -n -k2
Die Ausgabe ist:
DISPLAY=:0 590 (lxsession)
DISPLAY=:0 645 (unclutter)
DISPLAY=:0 705 (gvfsd)
DISPLAY=:0 710 (gvfsd-fuse)
DISPLAY=:0 727 (openbox)
DISPLAY=:0 729 (lxpolkit)
DISPLAY=:0 732 (lxpanel)
DISPLAY=:0 734 (pcmanfm)
DISPLAY=:0 772 (menu-cached)
DISPLAY=:0 781 (gvfs-udisks2-vo)
DISPLAY=:0 791 (gvfs-gphoto2-vo)
DISPLAY=:0 795 (gvfs-mtp-volume)
DISPLAY=:0 799 (gvfs-afc-volume)
DISPLAY=:0 804 (gvfs-goa-volume)
DISPLAY=:0 816 (gvfsd-trash)
DISPLAY=:0 21053 (npm)
DISPLAY=:0 21102 (sh)
DISPLAY=:0 21103 (sh)
DISPLAY=:0 21104 (node)
DISPLAY=:0 21110 (electron)
DISPLAY=:0 21112 (electron)
DISPLAY=:0 21149 (electron)
DISPLAY=:0 21154 (electron)
DISPLAY=:0 21180 (rec)
Das ist ein ziemlich geschicktes Kommandozeilen-Scripting! Ich werde eine Kopie dieses Skripts erstellen, falls ich es hacken muss, um etwas anderes herauszufinden.
Im Idealfall enthalten alle aktuellen Prozesse, die den Programmen entsprechen, die Sie nach dem Anmelden auf dem lokalen Computer ausführen, dieselbe Anzeigevariable wie Ihre erste offene pts-Konsole (Pseudo-Terminal-Sitzung).
Wenn Sie beispielsweise Ihre erste Terminalsitzung (gnome-terminal) öffnen und den Befehl who oder w ausführen, werden Sie eine Ausgabe wie die folgende bemerken:
$ who
yourusername :0 2015-06-08 14:05 (:0)
yourusername pts/0 2015-06-08 14:22 (:0)
oder einige Leute könnten so aussehen (aber nicht Ihr Fall)
yourusername :0 2015-06-08 14:05 (:0)
yourusername pts/0 2015-06-08 14:22 (:0.0)
Wenn bei Verwendung des Lichtanzeigemanagers die Variable DISPLAY für die Ausführung von Shells nach der Anmeldung anders eingestellt ist (z. B. 0.0), ergibt die Umgebungsvariable für DISPLAY dieselbe Anzeigevariable wie die Anzeigevariable nach der Anmeldung der ersten geöffneten Punkte (: 0.0), aber die Hostvariable bei der Anmeldung wäre immer noch (: 0).
Durch Echo der DISPLAY-Variablen oder durch Ausführen von set auf weniger wie unten gezeigt:
:~$ echo $DISPLAY
oder
:~$ set | less
Sie können auch die aktuelle Anzeigevariable Ihrer Sitzung überprüfen und sehen, auf welche sie eingestellt ist, um Shells nach der Anmeldung auszuführen. Im Grunde genommen hat die Anzeigevariable der Prozesse, die Sie ausführen, dieselbe Anzeigevariable wie Ihre ersten offenen Punkte nach der Anmeldung.
Die Ausgabe des Skripts, das Sie veröffentlicht haben, deutet darauf hin, dass Ihre ersten geöffneten Punkte dieselbe Anzeigevariable haben wie das Login Ihres Anzeigemanagers, in diesem Fall: 0.
Für das zweite Beispiel würde die Ausgabe ungefähr so aussehen:
DISPLAY=:0.0 (gvfs-udisks2-vo)
DISPLAY=:0.0 (zeitgeist-daemo)
DISPLAY=:0.0 (zeitgeist-fts)
DISPLAY=:0.0 (zeitgeist-datah)
DISPLAY=:0.0 (gvfs-mtp-volume)
DISPLAY=:0.0 (gvfs-gphoto2-vo)
DISPLAY=:0.0 (gvfs-afc-volume)
DISPLAY=:0.0 (geyes_applet2)
DISPLAY=:0.0 (indicator-apple)
DISPLAY=:0.0 (cat)
DISPLAY=:0.0 (python)
DISPLAY=:0.0 (gvfsd-trash)
DISPLAY=:0.0 (indicator-keybo)
DISPLAY=:0.0 (gvfsd-burn)
DISPLAY=:0.0 (cat)
DISPLAY=:0.0 (cat)
DISPLAY=:0.0 (gnome-terminal)
DISPLAY=:0.0 (bash)
DISPLAY=:0.0 (bash)
DISPLAY=:0.0 (sed)
Weitere Informationen finden Sie in den Manpages zu ptmx
$ man ptmx
Dies könnte Ihnen einen Einblick in die Master-Slave-Beziehung von Pseudo-Terminals geben.
Ich hoffe das hilft!
Auch woher hast du das Drehbuch?