So schließen Sie die Anwendung vom Terminal aus wie beim ordnungsgemäßen Beenden

9

Wenn ich eine Anwendung in einer grafischen Umgebung ausführe und sie schließen möchte, klicke ich normalerweise Xin die obere linke Ecke des Fensters oder gehe zu File > Close.

Ich möchte diese Programme manchmal über ssh vom Terminal aus über die Befehlszeile aus der Ferne schließen. Jetzt verwende ich den killBefehl, aber ich frage mich, dass dies genauso funktioniert wie das ordnungsgemäße Beenden der Anwendung von sich aus.

Das man killStandardsignal scheint 15) SIGTERM zu sein. Wird dieses Signal der Anwendung mitteilen, die ich schließen möchte, um zu bereinigen, geöffnete Dateien zu schließen und Inhalte zu speichern?

Gibt es einen besseren Weg, wenn ich es vom Terminal aus machen möchte?

Mike
quelle
2
Danke für die Frage! Ich habe etwas gelernt, das sich sicherlich irgendwann als nützlich erweisen wird.
Oliphaunt - wieder Monica

Antworten:

9

Die typische Art und Weise zu schließen Anwendung ist ordnungsgemäß zu verwenden kill -TERM 1234, wo 1234die PID des Fensters ist. Das Problem ist jedoch, dass grafische Anwendungen so konzipiert sind, dass sie auf ein bestimmtes Signal vom X-Server selbst warten und nicht auf das TERMSignal warten.

Das bedeutet, dass Sie eine Art Agent zwischen Ihnen und dem X-Server benötigen, um zu kommunizieren, dass Sie das entsprechende Signal senden möchten. Sie können natürlich ein C-Programm schreiben, aber es gibt bereits ein wmctrlProgramm (nicht überraschend in C geschrieben), das genau das tut.

Die Verwendung von wmctrlist einfach:

wmctrl -c :SELECT: # close window that will be selected with pointer
wmctrl -c :ACTIVE: # close currently active window
wmctrl -ic <numeric id> # close window with specific id in hex

Es ist nicht standardmäßig installiert, also holen Sie es sich mit sudo apt-get install wmctrl

Es gibt viele Verwendungsmöglichkeiten, die wmctrlweit über das Schließen von Fenstern hinausgehen. Weitere Beispiele für Skripte, in denen sie verwendet wurden, finden Sie in meinen Antworten und in denen von Jacob Vlijm

Sergiy Kolodyazhnyy
quelle
2
Fügen Sie hier einfach hinzu, dass wmctrl -lalle Fenster aufgelistet werden und geben Sie die numerische ID in der ersten Spalte in hexadezimaler Form an. =)
Terrance
Vielen Dank, arbeitet gut mit den meisten Anwendungen, aber mit Deluge gibt es eine Option Minimize to tray on closeund wmctrl -cwird nur in der Nähe eines Fensters, nicht die Anwendung selbst, wird es bleiben , um Leiste minimiert läuft.
Mike
3

Ich denke, es lohnt sich hinzuzufügen, um wmctrl -xlErgebnisse wie diese auszugeben:

0x03000001 -1 google-chrome.google-chrome  dcentore-pc Rybak - Google Play Music - Google Chrome
0x04600006  0 speedcrunch.Speedcrunch  dcentore-pc SpeedCrunch

Wo die xdas Fenster fordert Klasse in der Ausgabe zu sein. Dies ist oft die einfachste Möglichkeit, jedes Mal dasselbe Programm zu schließen. Dann können wir beim Schließen einfach die Fensterklasse angeben:

wmctrl -xc speedcrunch.Speedcrunch

In diesem Beispiel wird Speedcrunch geschlossen.

Daniel Centore
quelle