Pas littéralement ce que vous avez demandé, mais au moins une solution (effectivement) comparable serait de mettre le script ci-dessous sous une touche de raccourci.
Ce qu'il fait
Lorsque la touche de raccourci est utilisée:
Alors:
- Si l'utilisateur appuie sur Enter, le système s'arrête
- Si l'utilisateur ne fait rien, le système attend 30 secondes (ou toute autre période que vous souhaitez définir) et s'arrête.
- Si l'utilisateur déplace la souris pendant les 30 secondes, la procédure est arrêtée
Le script
#!/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
Comment utiliser
Je suis sûr que vous savez comment l'utiliser, mais c'est parti pour des raisons d'habbit:
Le script utilise xdotool
sudo apt-get install xdotool
Copiez le script dans un fichier vide, enregistrez-le sous run_close.py
Dans la section de tête, définissez l'emplacement de l'écran du bouton d'arrêt dans la fenêtre de fermeture (ma première supposition était juste):
#--- set the location of the close button x, y
q_loc = [1050, 525]
et le temps d'attendre avant l'arrêt sans surveillance:
#--- set the time to wait before shutdown
countdown = 30
Testez-le par la commande:
python3 /path/to/run_close.py
Testez-le avec toutes les options: appuyez sur Enterpour un arrêt immédiat, un arrêt sans surveillance et interrompez la procédure par un mouvement de souris
Si tout fonctionne bien, ajoutez-le à une touche de raccourci: choisissez: Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez la commande:
python3 /path/to/run_close.py
ÉDITER
Ci-dessous une version du script qui ne nécessite aucun paramètre supplémentaire. Il calcule les coordonnées du bouton Quitter, quelle que soit la résolution de l'écran.
La configuration est à peu près la même, mais [3.]
peut être ignorée.
#!/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
Explication
La taille de la fenêtre Session Manager pour fermer le système est toujours centrée et d'une taille fixe (absolue), indépendante de la résolution de l'écran. Par conséquent, la position par rapport au centre de l'écran est un facteur constant.
Il suffit alors de lire la résolution de l'écran et de calculer la position du bouton à partir de là.
La fonction appliquée ( get_qloc()
) calcule la résolution de l' écran de gauche , puisque c'est celle où le dialogue apparaîtra.
Remarque
L'heure, définie dans la ligne, time.sleep(0.4)
est définie pour les systèmes relativement lents, pour vous assurer que la souris est déplacée après l'apparition de la fenêtre d'arrêt. Sur les systèmes plus rapides, il peut être plus court, sur les systèmes plus lents (comme peut-être une machine virtuelle), il peut être nécessaire de définir une durée plus longue.