Não literalmente o que você pediu, mas pelo menos uma solução (efetivamente) comparável seria colocar o script abaixo em uma tecla de atalho.
O que faz
Quando a tecla de atalho é usada:
Então:
- Se o usuário pressionar Enter, o sistema será encerrado
- Se o usuário não fizer nada, o sistema aguardará 30 segundos (ou qualquer outro período de tempo que você deseja definir) e será encerrado.
- Se o usuário mover o mouse durante os 30 segundos, o procedimento será interrompido
O 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
Como usar
Tenho certeza que você sabe como usá-lo, mas aqui vamos por razões de habbit:
O script usa xdotool
sudo apt-get install xdotool
Copie o script em um arquivo vazio, salve-o como run_close.py
Na seção principal, defina a localização da tela do botão desligar na janela próxima (minha primeira hipótese foi correta):
#--- set the location of the close button x, y
q_loc = [1050, 525]
e o tempo de espera antes do desligamento automático:
#--- set the time to wait before shutdown
countdown = 30
Execute-o de teste pelo comando:
python3 /path/to/run_close.py
Teste-o com todas as opções: pressionando Enterpara desligar imediatamente, desligar sem supervisão e interromper o procedimento movendo o mouse
Se tudo funcionar bem, adicione-o a uma tecla de atalho: escolha: Configurações do sistema> "Teclado"> "Atalhos"> "Atalhos personalizados". Clique no "+" e adicione o comando:
python3 /path/to/run_close.py
EDITAR
Abaixo de uma versão do script que não precisa de nenhuma configuração adicional. Ele calcula as coordenadas do botão sair, independentemente da resolução da tela.
A configuração é praticamente a mesma, mas [3.]
pode ser ignorada.
#!/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
Explicação
O tamanho da janela do Session Manager para fechar o sistema sempre está centralizado e tem um tamanho fixo (absoluto), independente da resolução da tela. Portanto, a posição relativa ao centro da tela é um fator constante.
Tudo o que precisamos fazer é ler a resolução da tela e calcular a posição do botão a partir daí.
A função aplicada ( get_qloc()
) calcula a resolução da tela esquerda , pois é nesse local que o diálogo aparecerá.
Nota
O tempo definido na linha time.sleep(0.4)
é definido para sistemas relativamente lentos, para garantir que o mouse seja movido após a janela de desligamento aparecer. Em sistemas mais rápidos, pode ser mais curto; em sistemas mais lentos (como possivelmente uma VM), pode ser necessário definir mais.