Uma aplicação completa provavelmente seria um pouco exagerada; um pequeno script de fundo está fazendo o trabalho.
O script abaixo irá, em um loop, fazer exatamente como você menciona: ele mantém a tela "normal" por um tempo arbitrário (em minutos, você pode usar floats para acertar os minutos parcialmente) e escurece a tela (s ) ou vira de cabeça para baixo, à sua escolha :), para o "breaktime".
ou:
Oscript
#!/usr/bin/env python3
import subprocess
import sys
import time
awaketime = int(float(sys.argv[1])*60)
sleeptime = int(float(sys.argv[2])*60)
def take_a_break():
get = subprocess.check_output(["xrandr"]).decode("utf-8").split()
screens = [get[i-1] for i in range(len(get)) if get[i] == "connected"]
for scr in screens:
# uncomment either one of the commands below [1]
# darken the screen, or...
subprocess.call(["xrandr", "--output", scr, "--brightness", "0"])
# turn it upside down :)
# subprocess.call(["xrandr", "--output", scr, "--rotate", "inverted"])
time.sleep(sleeptime)
for scr in screens:
# back to "normal"
subprocess.call(["xrandr", "--output", scr, "--brightness", "1"])
subprocess.call(["xrandr", "--output", scr, "--rotate", "normal"])
while True:
time.sleep(awaketime)
take_a_break()
Como usar
- Copie o script em um arquivo vazio, salve-o como
takeabreak.py
- À sua escolha, descomente a linha 15 ou 17 (você pode pular esta etapa se quiser apenas escurecer a tela), conforme indicado no script.
-
Teste- execute o script a partir de um terminal pelo comando:
python3 /path/to/takeabreak.py <uptime> <breaktime>
por exemplo:
python3 /path/to/takeabreak.py 25 5
para fazer uma pausa de 5 minutos depois de trabalhar a cada 25 minutos
-
Se ele fizer o que você deseja, adicione-o aos aplicativos de inicialização: Dash > Aplicativos de inicialização > Adicione o comando:
/bin/bash -c "sleep 15 && python3 /path/to/takeabreak.py 25 5"
EDITAR
Claro, você pode "vestir" o roteiro com qualquer coisa que possa imaginar. A primeira coisa que vem à minha mente é uma pequena mensagem, notificando que a ruptura está próxima ...
Ocódigo
#!/usr/bin/env python3
import subprocess
import sys
import time
awaketime = int(float(sys.argv[1])*60)
sleeptime = int(float(sys.argv[2])*60)
message = "Break in 15 seconds"
def take_a_break():
get = subprocess.check_output(["xrandr"]).decode("utf-8").split()
screens = [get[i-1] for i in range(len(get)) if get[i] == "connected"]
for scr in screens:
# uncomment either one of the commands below [1]
# darken the screen, or...
subprocess.call(["xrandr", "--output", scr, "--brightness", "0"])
# turn it upside down :)
# subprocess.call(["xrandr", "--output", scr, "--rotate", "inverted"])
time.sleep(sleeptime)
for scr in screens:
# back to "normal"
subprocess.call(["xrandr", "--output", scr, "--brightness", "1"])
subprocess.call(["xrandr", "--output", scr, "--rotate", "normal"])
while True:
time.sleep(awaketime-15)
subprocess.Popen(["notify-send", message])
time.sleep(15)
take_a_break()
EDIT 2
Elementos básicos da GUI para Unity
Como discutido nos comentários, abaixo de uma versão (configuração) com uma funcionalidade básica da GUI, para alternar o script e alterar as configurações de tempo de atividade / tempo de interrupção. Se você seguir as instruções, a configuração é bastante simples:)
Ingredientes:
Doisscripts(maisabaixo):
takeabrake_run
qualéoscriptreal,substituindoo(s)script(s)acima,
e
takeabreak_gui
queé,comoesperado,oscriptparagerenciarasconfigurações(detempo)eparamanipularoscript.
umarquivo
.desktop
:[Desktop Entry] Type=Application Name=Take a Break Exec=takeabreak_gui toggle Icon=/path/to/takeabreak.png Actions=Toggle script;Change time settings; [Desktop Action Change time settings] Name=Change time settings Exec=takeabreak_gui timeset OnlyShowIn=Unity; [Desktop Action Toggle script] Name=Toggle script Exec=takeabreak_gui toggle OnlyShowIn=Unity;
-
e um ícone:
(cliquecomobotãodireitodomouseem>salveaimagemcomotakeabreak.png)
Comoconfigurar
- Crie,seaindanãoexistir,odiretório
~/bin
- Façalogout/inouexecute
source~/.profile
para"ativar" a presença de~/bin
em$PATH
-
Copie os dois scripts abaixo em dois arquivos vazios, nomeie-os (exatamente)
takeabreak_gui
e
takeabreak_run
(sem extensões!) e salve-as em
~/bin
- Torne os dois scripts executáveis (!)
- Copie o ícone (
right-click > save image as
) para o seu computador. Nomeie-o (exatamente) comotakeabreak.png
-
Copie o arquivo
.desktop
em um arquivo vazio. Edite a linha:Icon=/path/to/takeabreak.png
e substitua o caminho para o ícone pelo caminho real.
É isso aí!
Os scripts:
-
takeabreak_run
#!/usr/bin/env python3 import subprocess import sys import time awaketime = int(float(sys.argv[1])*60) sleeptime = int(float(sys.argv[2])*60) message = "Break in 15 seconds" def take_a_break(): get = subprocess.check_output(["xrandr"]).decode("utf-8").split() screens = [get[i-1] for i in range(len(get)) if get[i] == "connected"] for scr in screens: # uncomment either one of the commands below [1] # darken the screen, or... subprocess.call(["xrandr", "--output", scr, "--brightness", "0"]) # turn it upside down :) # subprocess.call(["xrandr", "--output", scr, "--rotate", "inverted"]); time.sleep(0.2) time.sleep(sleeptime) for scr in screens: # back to "normal" subprocess.call(["xrandr", "--output", scr, "--brightness", "1"]); time.sleep(0.2) subprocess.call(["xrandr", "--output", scr, "--rotate", "normal"]); time.sleep(0.2) while True: time.sleep(awaketime-15) subprocess.Popen(["notify-send", message]) time.sleep(15) take_a_break()
-
takeabreak_gui
#!/usr/bin/env python3 import os import subprocess import sys # define the settings file's location setting = os.environ["HOME"]+"/"+".time_setting" # default values (if no settinghs were made) default_up = "25" default_break = "5" arg = sys.argv[1] def check_running(): # function to check if the script runs try: return subprocess.check_output(["pgrep", "-f", "takeabreak_run"]).decode("utf-8").strip() except subprocess.CalledProcessError: return False def start(uptime, breaktime): # function to start the script with arguments print(uptime, breaktime) subprocess.Popen(["takeabreak_run", uptime, breaktime]) def kill(pid): # function to stop the script subprocess.Popen(["kill", pid]) def message(msg): # function to send a notification subprocess.Popen(["notify-send", msg]) if arg == "toggle": # the section below handles toggling the script pid = check_running() if pid != False: kill(pid) message("Take a break stopped...") else: try: # if settings file exist: message, displaying set time time_set = open(setting).read().strip().split() uptime = time_set[0]; breaktime = time_set[1] except FileNotFoundError: # if no settings were made: use defaults uptime = default_up; breaktime = default_break message("Take a break started ("+uptime+"/"+breaktime+")") start(uptime, breaktime) if arg == "timeset": # the section below handle creating the settings file and/or setting the time command = 'zenity --entry --title="Edit time settings" --text="Enter uptime & breaktime:" --entry-text "'+\ default_up+' '+default_break+'"' try: t_set = subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8").split() try: if len([int(n) for n in t_set]) != 2: msg = 'zenity --warning --text="Please enter both (and only) up- and breaktime."' else: msg = 'zenity --info --title="New setings" --text="Timesettings succsfully changed."' open(setting, "wt").write((" ").join(t_set)) pid = check_running() # if script runs, restart with new values if pid != False: kill(pid) start(t_set[0], t_set[1]) message("Take a break restarted "+("/").join(t_set)) except ValueError: msg = 'zenity --warning --text="Please only enter integers."' subprocess.Popen(["/bin/bash", "-c", msg]) except subprocess.CalledProcessError: pass
Editar configurações de hora
A "GUI" básica deve funcionar sem muita explicação. Para editar as configurações de horário, adicione o lançador ao Iniciador Unity (arraste o arquivo .desktop
pelo Iniciador Unity ou bloqueie "Fazer um intervalo" ao Iniciador), clique com o botão direito no lançador e escolha "Alterar configurações de horário":
Posteriormente,insirao"uptime" (minutos) e "breaktime" (minutos), separados por um espaço. O script tem precauções internas para entrada incorreta:)
Se as configurações de horário forem alteradas enquanto o script é executado, ele será reiniciado automaticamente com as configurações alteradas:
FINALMENTE
Porenquanto,provavelmenteaúltimaedição:oprojetoestáagorano
sudo add-apt-repository ppa:vlijm/takeabreak
sudo apt-get update
sudo apt-get install takeabreak
Sinta-se à vontade para enviar bugs, etc. aqui , ou comentar aqui . Obrigado a orschiro pela boa pergunta e Rinzwind pelo encorajamento!
segundos restantes (usando a opção countdown)