Non letteralmente quello che hai chiesto, ma almeno una soluzione (effettivamente) comparabile sarebbe quella di mettere lo script sotto sotto un tasto di scelta rapida.
Cosa fa
Quando si utilizza il tasto di scelta rapida:
Poi:
- Se l'utente preme Enter, il sistema si spegne
- Se l'utente non fa nulla, il sistema attende per 30 secondi (o qualsiasi altro periodo di tempo che si desidera impostare) e si spegne.
- Se l'utente sposta il mouse durante i 30 secondi, la procedura viene interrotta
Il copione
#!/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
Come usare
Sono abbastanza sicuro che tu sappia come usarlo, ma qui andiamo per motivi di habbit:
Lo script usa xdotool
sudo apt-get install xdotool
Copia lo script in un file vuoto, salvalo come run_close.py
Nella sezione head, imposta la posizione dello schermo del pulsante di spegnimento nella finestra di chiusura (la mia prima ipotesi era corretta):
#--- set the location of the close button x, y
q_loc = [1050, 525]
e il tempo di attesa prima dell'arresto automatico:
#--- set the time to wait before shutdown
countdown = 30
Test-eseguirlo con il comando:
python3 /path/to/run_close.py
Provalo con tutte le opzioni: premendo Enterper lo spegnimento immediato, lo spegnimento automatico e interrompi la procedura con il mouse
Se tutto funziona bene, aggiungilo a un tasto di scelta rapida: scegli: Impostazioni di sistema> "Tastiera"> "Tasti di scelta rapida"> "Tasti di scelta rapida personalizzati". Fai clic su "+" e aggiungi il comando:
python3 /path/to/run_close.py
MODIFICARE
Di seguito una versione dello script che non richiede alcuna impostazione aggiuntiva. Calcola le coordinate del pulsante Esci, indipendentemente dalla risoluzione dello schermo.
L'installazione è praticamente la stessa, ma [3.]
può essere saltata.
#!/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
Spiegazione
Le dimensioni della finestra di Session Manager per chiudere il sistema sono sempre centrate e di dimensioni fisse (assolute), indipendentemente dalla risoluzione dello schermo. Pertanto la posizione relativa al centro dello schermo è un fattore costante.
Tutto ciò che dobbiamo fare è leggere la risoluzione dello schermo e calcolare la posizione del pulsante da lì.
La funzione applicata ( get_qloc()
) calcola la risoluzione dello schermo sinistro , poiché quella è quella in cui apparirà il dialogo.
Nota
Il tempo impostato nella riga time.sleep(0.4)
è impostato per sistemi relativamente lenti, per assicurarsi che il mouse venga spostato dopo la visualizzazione della finestra di spegnimento. Su sistemi più veloci, può essere più breve, su sistemi più lenti (come probabilmente una VM) potrebbe essere necessario impostare su un valore più lungo.