Nicht wörtlich, wonach Sie gefragt haben, aber zumindest eine (effektiv) vergleichbare Lösung wäre, das folgende Skript unter eine Tastenkombination zu setzen.
Was es macht
Wenn die Tastenkombination verwendet wird:
Dann:
- Wenn der Benutzer drückt Enter, wird das System heruntergefahren
- Wenn der Benutzer nichts unternimmt, wartet das System 30 Sekunden (oder einen anderen Zeitraum, den Sie festlegen möchten) und fährt herunter.
- Wenn der Benutzer die Maus während der 30 Sekunden bewegt, wird der Vorgang abgebrochen
Das Drehbuch
#!/usr/bin/env python3
import subprocess
import time
#--- set the location of the close button x, y
q_loc = [1050, 525]
#--- set the time to wait before shutdown
countdown = 30
subprocess.Popen(["gnome-session-quit", "--power-off"])
# for slower systems, set a longer break, on faster systems, can be shorter:
time.sleep(0.4)
subprocess.Popen(["xdotool", "mousemove", str(q_loc[0]), str(q_loc[1])])
coords1 = q_loc
t = 0
while True:
time.sleep(1)
cmd = "xdotool", "getmouselocation"
currloc = subprocess.check_output(cmd).decode("utf-8").split()[:2]
coords2 = [int(n.split(":")[1]) for n in currloc]
if coords2 != coords1:
break
else:
if t >= countdown:
subprocess.Popen(["xdotool", "key", "KP_Enter"])
break
t += 1
Wie benutzt man
Ich bin mir ziemlich sicher, dass Sie wissen, wie man es benutzt, aber hier kommen wir aus Gründen der Gewohnheit:
Das Skript verwendet xdotool
sudo apt-get install xdotool
Kopieren Sie das Skript in eine leere Datei und speichern Sie es unter run_close.py
Legen Sie im Kopfbereich die Position des Bildschirms für die Schaltfläche zum Herunterfahren im Schließfenster fest (meine erste Vermutung war richtig):
#--- set the location of the close button x, y
q_loc = [1050, 525]
und die Wartezeit vor dem unbeaufsichtigten Herunterfahren:
#--- set the time to wait before shutdown
countdown = 30
Führen Sie es mit dem folgenden Befehl aus:
python3 /path/to/run_close.py
Testen Sie es mit allen Optionen: Drücken Sie, Enterum sofort herunterzufahren, und brechen Sie den Vorgang mit der Maus ab
Wenn alles funktioniert, fügen Sie es einer Tastenkombination hinzu: Wählen Sie: Systemeinstellungen> "Tastatur"> "Tastenkombinationen"> "Benutzerdefinierte Tastenkombinationen". Klicken Sie auf das "+" und fügen Sie den Befehl hinzu:
python3 /path/to/run_close.py
BEARBEITEN
Unten eine Version des Skripts, für die keine zusätzlichen Einstellungen erforderlich sind. Es berechnet die Koordinaten der Schaltfläche "Beenden", unabhängig von der Bildschirmauflösung.
Das Setup ist ziemlich gleich, [3.]
kann aber übersprungen werden.
#!/usr/bin/env python3
import subprocess
import time
#--- set the time to wait before shutdown
countdown = 30
def get_qloc():
xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
scrs = [s.split("+") for s in xr if all([s.count("x") == 1, s.count("+") == 2])]
center = [int(int(s)/2) for s in [scr[0] for scr in scrs if scr[1] == "0"][0].split("x")]
return [center[0] + 250, center[1]]
q_loc = get_qloc()
subprocess.Popen(["gnome-session-quit", "--power-off"])
# for slower systems, set a longer break, on faster systems, can be shorter:
time.sleep(0.4)
subprocess.Popen(["xdotool", "mousemove", str(q_loc[0]), str(q_loc[1])])
coords1 = q_loc
t = 0
while True:
time.sleep(1)
cmd = "xdotool", "getmouselocation"
currloc = subprocess.check_output(cmd).decode("utf-8").split()[:2]
coords2 = [int(n.split(":")[1]) for n in currloc]
if coords2 != coords1:
break
else:
if t >= countdown:
subprocess.Popen(["xdotool", "key", "KP_Enter"])
break
t += 1
Erläuterung
Die Größe des Session Manager-Fensters zum Schließen des Systems ist immer zentriert und von fester (absoluter) Größe, unabhängig von der Bildschirmauflösung. Daher die Position relativ zur Bildschirmmitte ein konstanter Faktor.
Alles, was wir dann tun müssen, ist, die Bildschirmauflösung zu lesen und die Position der Schaltfläche von dort aus zu berechnen.
Die angewendete Funktion ( get_qloc()
) berechnet die Auflösung des linken Bildschirms , da hier der Dialog angezeigt wird.
Hinweis
Die in der Zeile festgelegte Zeit time.sleep(0.4)
ist für relativ langsame Systeme festgelegt, um sicherzustellen, dass die Maus bewegt wird, nachdem das Fenster zum Herunterfahren angezeigt wird. Auf schnelleren Systemen kann es kürzer sein, auf langsameren Systemen (wie möglicherweise einer VM) muss es möglicherweise länger eingestellt werden.