Script para escurecer a tela após x segundos
O script abaixo irá escurecer a tela após um número arbitrário de segundos se o computador estiver ocioso (sem entrada de mouse ou teclado)
O script
#!/usr/bin/env python3
import subprocess
import time
import sys
# read arguments from the run command: idel time (in seconds
dimtime = int(sys.argv[1])*1000
# brightness when dimmed (between 0 and 1)
dimmed = sys.argv[2]
def get(cmd):
# just a helper function
return subprocess.check_output(cmd).decode("utf-8").strip()
# get the connected screens
screens = [l.split()[0] for l in get("xrandr").splitlines()
if " connected" in l]
# initial state (idle time > set time
check1 = False
while True:
time.sleep(2)
# get the current idle time (millisecond)
t = int(get("xprintidle"))
# see if idle time exceeds set time (True/False)
check2 = t > dimtime
# compare with last state
if check2 != check1:
# if state chenges, define new brightness...
newset = dimmed if check2 else "1"
# ...and set it
for scr in screens:
subprocess.Popen([
"xrandr", "--output", scr, "--brightness", newset
])
# set current state as initial one for the next loop cycle
check1 = check2
Como usar
-
O script precisa de
xprintidle
:sudo apt install xprintidle
- Copie o script em um arquivo vazio, salve-o como
dimscreens.py
-
Teste- execute-o a partir de um terminal, com o tempo ocioso e o brilho desejado (dim estado) como argumentos:
python3 /path/to/dimscreens.py 20 0.6
em que o script escurece a tela após 20 segundos para 60% de brilho.
-
Se tudo funcionar bem, adicione a Startup Applications: Dash > Aplicativos de inicialização > Adicione o comando:
/bin/bash -c "sleep 10 && python3 /path/to/dimscreens.py 20 0.6"
Explicação
Uma maneira fácil de definir o brilho da tela para sua finalidade é (por exemplo, 50%):
xrandr --output <screenname> --brightness 0.5
O script usa xprintidle para periodicamente obter o tempo ocioso atual, comparando-o com o último ciclo:
while True:
time.sleep(2)
t = int(get("xprintidle"))/1000
check2 = t > dimtime
Se o tempo exceder o tempo definido ou , o script entrará em ação:
if check2 != check1:
newset = dimmed if check2 else "1"
for scr in screens:
subprocess.Popen([
"xrandr", "--output", scr, "--brightness", newset
])
... define o brilho para 1 (= 100%) ou o brilho-brilho definido.
Uma explicação mais detalhada sobre o código está no script.
Nota
Como está, o script escurece todas as telas. Se você precisa definir apenas uma tela, tudo é possível.