Conectando-se a algo?
O desafio é que qualquer que seja o hook existente em qualquer tela em branco ou em suspensão, o comando ou script relacionado que você deseja executar antes sempre será executado muito tarde, já que seria chamado após o sinal possível.
A solução
Como sempre, isso não significa que ficamos sem opções. Se desabilitarmos a tela em branco padrão / suspend -options, e substituí-la pelo nosso script de segundo plano, podemos incluir o comando que você deseja executar antes da mudança de estado no procedimento.
Como funciona
No script abaixo, você pode definir o tempo ocioso após o qual a tela deve ficar em branco e quando o sistema deve entrar em suspensão. Você também pode definir o comando para executar antes suspender.
O script
#!/usr/bin/env python3
import subprocess
import time
# set times for blank screen and suspend (in that order)
times = [300, 1200]
pre_command = "touch banana.txt"
# don't change anything below, *unless* changes for other distros
last_t = times[-1]
commands = ["xset dpms force off", "sudo xfce4-session-logout --suspend"]
restore = "xset dpms force on"
def gettime():
return int(int(subprocess.check_output(
"xprintidle"
).decode("utf-8").strip())/1000)
def run_command(cmd):
# made it like this, so user can conveniently set commands
subprocess.call(["/bin/bash", "-c", cmd])
def change(set_t, t1, t2):
if all([t1 <= set_t, t2 > set_t]):
if set_t == last_t:
run_command(pre_command)
run_command(commands[times.index(set_t)])
elif all([t2 < set_t, t1 >= set_t]):
run_command(restore)
return True
t1 = gettime()
while True:
time.sleep(2)
t2 = gettime()
for t in times:
if change(t, t1, t2):
break
t1 = t2
Como configurar
-
O script precisa de xprintidle :
sudo apt-get xprintidle
-
Copie o script acima em um arquivo vazio, salve-o como
my_suspend.py
-
Agora, precisamos garantir que o script possa colocar o computador em suspensão: adicione uma linha ao arquivo
sudoers
:-
Executar a partir de um terminal:
sudo visudo
-
Adicione a linha:
ALL All=NOPASSWD: /usr/bin/xfce4-session-logout*
para o arquivo.
-
-
Na seção head do script, defina o tempo após o qual você deseja colocar a tela em branco (em segundos), a hora em que deseja que o computador alterne para suspender e o comando que você deseja executar antes de suspender:
# set times for blank screen and suspend (in that order) times = [300, 1200] pre_command = "touch banana.txt"
No exemplo acima, a tela em branco após 5 minutos, o sistema suspende após 20 minutos. Obviamente, você quer substituir o
pre_command
N.B. veja as citações em torno do comando! Se o seu comando também incluir aspas misturadas, por favor mencione.
-
Teste- execute o script a partir de um terminal com o comando:
python3 /path/to/my_suspend.py
Se tudo funcionar bem, adicione o script a Startup Applications (Session e Startup > Application Autostart (guia) > Adicionar)
Nota
O script foi escrito para o Xubuntu, mas apenas na linha:
commands = ["xset dpms force off", "sudo xfce4-session-logout --suspend"]
O comando:
"sudo xfce4-session-logout --suspend"
é específico do Xubunt. O roteiro, portanto, pode ser facilmente adaptado a outras distros.