No es literalmente lo que solicitó, pero al menos una solución (efectiva) comparable sería colocar el script a continuación bajo una tecla de acceso directo.
Que hace
Cuando se usa la tecla de acceso directo:
Luego:
- Si el usuario presiona Enter, el sistema se apaga
- Si el usuario no hace nada, el sistema espera 30 segundos (o cualquier otro período de tiempo que desee configurar) y se apaga.
- Si el usuario mueve el mouse durante los 30 segundos, el procedimiento se detiene
La secuencia de comandos
#!/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
Cómo utilizar
Estoy bastante seguro de que sabes cómo usarlo, pero aquí vamos por razones habituales:
El script usa xdotool
sudo apt-get install xdotool
Copie el script en un archivo vacío, guárdelo como run_close.py
En la sección de cabecera, configure la ubicación de la pantalla del botón de apagado en la ventana de cierre (mi primera suposición fue correcta):
#--- set the location of the close button x, y
q_loc = [1050, 525]
y el tiempo de espera antes del apagado desatendido:
#--- set the time to wait before shutdown
countdown = 30
Pruébalo con el comando:
python3 /path/to/run_close.py
Pruébelo con todas las opciones: presionar Enterpara apagado inmediato, apagado desatendido y romper el procedimiento con el mouse
Si todo funciona bien, agréguelo a una tecla de acceso directo: elija: Configuración del sistema> "Teclado"> "Accesos directos"> "Accesos directos personalizados". Haga clic en "+" y agregue el comando:
python3 /path/to/run_close.py
EDITAR
Debajo de una versión del script que no necesita ninguna configuración adicional. Calcula las coordenadas del botón Salir, sin importar cuál sea la resolución de la pantalla.
La configuración es prácticamente la misma, pero [3.]
se puede omitir.
#!/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
Explicación
El tamaño de la ventana del Administrador de sesión para cerrar el sistema siempre está centrado y tiene un tamaño fijo (absoluto), independiente de la resolución de la pantalla. Por lo tanto, la posición relativa al centro de la pantalla es un factor constante.
Todo lo que necesitamos hacer es leer la resolución de la pantalla y calcular la posición del botón desde allí.
La función aplicada ( get_qloc()
) calcula la resolución de la pantalla izquierda , ya que es donde aparecerá el diálogo.
Nota
El tiempo, establecido en la línea, time.sleep(0.4)
está configurado para sistemas relativamente lentos, para asegurarse de que el mouse se mueva después de que aparezca la ventana de apagado. En sistemas más rápidos, puede ser más corto, en sistemas más lentos (como posiblemente una VM) puede ser necesario configurarlo por más tiempo.