Automatize Suas Pausas: Um Script para Gestão de Tempo, Bem-estar e Segurança
A Jornada de um Script: Fazendo Pausas e Aumentando a Produtividade com Bloqueio de Sessão Automatizado
No mundo digital de hoje, é fácil ficar preso no nosso trabalho e passar horas grudado nas nossas telas. Mas o tempo prolongado em frente à tela pode levar à fadiga, cansaço visual e até mesmo esgotamento. Fazer pausas regulares é essencial para o nosso bem-estar e produtividade.
Meu objetivo era criar um script que não apenas bloqueasse minha sessão Linux após um período de inatividade, mas também servisse como um lembrete gentil para me afastar do computador e fazer uma pausa, adoptando hábitos de trabalho saudáveis. Eu queria uma ferramenta que me ajudasse a gerenciar meu tempo de exposição ao monitor.
Neste post, compartilharei a evolução deste script, desde sua iteração inicial como um simples bloqueador de sessão até uma ferramenta mais sofisticada que incorpora avisos ao usuário e timeouts automáticos. Exploraremos os desafios enfrentados, as soluções implementadas e os insights valiosos obtidos ao longo do caminho no qual em muitos momentos não estive só, pois contei com o suporte do Gemini, o modelo de IA avançado do Google.
Junte-se a mim enquanto mergulhamos no mundo da programação de scripts Linux e descobrimos como aproveitar o poder da automação para segurança e produtividade.
Versão 1: O Script Básico
Nossa jornada começa com a versão mais fundamental do script. Em sua essência, o objetivo era simples: bloquear a tela após um período de tempo predeterminado. Esta iteração inicial serviu como base para a construção de recursos mais sofisticados.
Aqui está o código para a Versão 1:
#!/bin/bash
sleep 1800 # Sleep for 30 minutes (1800 seconds)
loginctl lock-session # Lock the session
#!/bin/bash
Esta linha especifica que o script deve ser executado usando o shell Bash.sleep 1800
Este comando pausa a execução do script por 1800 segundos (30 minutos). Isso define a duração do seu intervalo de trabalho antes que a sessão seja bloqueada, solicitando que você faça uma pausa.loginctl lock-session
Este comando, fornecido pela utilidadeloginctl
, é responsável por bloquear a sessão do usuário atual.
Limitações:
Embora funcional, esta versão básica tinha uma desvantagem significativa: faltava qualquer mecanismo de aviso. A sessão era bloqueada abruptamente após 30 minutos, potencialmente interrompendo seu fluxo de trabalho ou fazendo com que você perdesse trabalho não salvo. Isso destacou a necessidade de uma abordagem mais amigável ao usuário.
Versão 2: Adicionando um Aviso ao Usuário
Para lidar com a brusquidão da Versão 1, foi decidido introduzir um aviso ao usuário antes de bloquear a sessão. Isso lhe daria tempo suficiente para salvar seu trabalho e se preparar para uma pausa
O comando zenity
uma ferramenta útil para criar diálogos GUI simples em scripts shell, veio em socorro. Aqui está o código atualizado:
#!/bin/bash
sleep 1500 # Sleep for 25 minutes (1500 seconds)
# Display a warning popup
DISPLAY=:0 zenity --warning \
--title="Break Time Reminder" \
--text="Your session will be locked in 5 minutes. Time for a break!"
sleep 300 # Sleep for another 5 minutes (300 seconds)
loginctl lock-session # Lock the session
sleep 1500
Reduzido o tempo inicial de espera para 25 minutos para acomodar o período de aviso de 5 minutos.DISPLAY=:0 zenity ...
Esta linha usazenity
para exibir uma caixa de diálogo de aviso.DISPLAY=:0
garante que o pop-up apareça no display X atual.--warning
especifica o tipo de diálogo (uma caixa de aviso).--title
define o título da janela de diálogo.--text
fornece a mensagem a ser exibida na caixa de diálogo.
sleep 300
Após exibir o aviso, o script pausa por mais 5 minutos antes de bloquear a sessão.
Desafio:
Embora o pop-up de aviso fosse um passo na direção certa, surgiu um novo desafio: zenity por padrão, pausava a execução do script até que o usuário interagisse com a caixa de diálogo (clicando em "OK"). Isso significava que, se você não clicasse em "OK", o script ficaria travado e não prosseguiria para bloquear a sessão.
Isso nos levou a explorar maneiras de executar o aviso em segundo plano, sem interromper o fluxo do script.
Versão 3: Executando o Aviso em Segundo Plano
Para superar o desafio do zenity pausar o script, precisava-se de uma maneira de exibir o aviso sem bloquear a execução do script. A solução foi surpreendentemente simples: executar o comando zenity em segundo plano.
Aqui está o código modificado:
#!/bin/bash
sleep 1500 # Sleep for 25 minutes (1500 seconds)
# Display a warning popup in the background
DISPLAY=:0 zenity --warning \
--title="Break Time Reminder" \
--text="Your session will be locked in 5 minutes. Time for a break!" & # Run in background
sleep 300 # Sleep for another 5 minutes (300 seconds)
loginctl lock-session # Lock the session
- O caractere ampersand
&
no final da linha de comando zenity instrui o shell a executar este comando em segundo plano. Isso permite que o script continue a ser executado mesmo que você não tenha interagido com o pop-up.
Novo Desafio:
Embora executar o aviso em segundo plano resolvesse o problema de pausa, introduziu um novo desafio: o próprio script não terminava após bloquear a sessão. Ele continuaria sendo executado em segundo plano indefinidamente. Precisávamos de uma maneira de garantir que o script saísse de forma limpa após cumprir seu propósito.
Versão 4: Garantindo o Encerramento Limpo
Para resolver o problema do script não terminar, precisava-se de uma maneira de encerrar explicitamente sua execução após bloquear a sessão. Também queríamos garantir que o processo zenity, em execução em segundo plano, não fosse afetado, mesmo que o script terminasse.
Aqui está o código melhorado:
#!/bin/bash
sleep 1500 # Sleep for 25 minutes (1500 seconds)
# Display a warning popup in the background
DISPLAY=:0 nohup zenity --warning \
--title="Break Time Reminder" \
--text="Your session will be locked in 5 minutes. Time for a break!" & # Run in background
sleep 300 # Sleep for another 5 minutes (300 seconds)
loginctl lock-session # Lock the session
exit 0 # Terminate the script
nohup
Este comando, abreviação de "no hangup" (sem desligamento), garante que o processozenity
seja completamente desanexado do script e continue a ser executado mesmo que o script termine. Isso é crucial porque agora estamos encerrando o script explicitamente.exit 0
Esta linha encerra explicitamente o script após bloquear a sessão. O0
indica execução bem-sucedida.
Com essas adições, o script agora funciona conforme pretendido: ele exibe o aviso, aguarda a duração especificada, bloqueia a sessão e, em seguida, encerra a si mesmo de forma limpa.
Versão 5: Fechamento Automático do Aviso
Embora a Versão 4 tenha resolvido o encerramento do script, foi detetado um pequeno problema: se você não descartasse o pop-up de aviso do Zenity clicando em "OK", ele persistiria mesmo após o bloqueio da sessão. Isso poderia ser um pequeno incômodo, especialmente se você estivesse longe do computador por um longo período.
Para proporcionar uma experiência de usuário mais suave, foi adicionado um recurso de timeout ao pop-up de aviso, garantindo que ele se feche automaticamente após um determinado período.
Aqui está a versão que implementou o fechamento automático do aviso:
#!/bin/bash
sleep 1500 # Sleep for 25 minutes (1500 seconds)
# Display a warning popup in the background with a timeout
DISPLAY=:0 nohup zenity --warning \
--timeout=120 \
--title="Break Time Reminder" \
--text="Your session will be locked in 5 minutes. Time for a break!" & # Run in background
sleep 300 # Sleep for another 5 minutes (300 seconds)
loginctl lock-session # Lock the session
exit 0 # Terminate the script
--timeout=120
Esta opção diz ao Zenity para fechar automaticamente a caixa de diálogo de aviso após 120 segundos (2 minutos). Você pode ajustar este valor de acordo com sua preferência.
Com este toque final, o script agora oferece uma experiência perfeita e amigável ao usuário, garantindo que o pop-up de aviso não permaneça por muito tempo.
Nós agora cobrimos todas as iterações do script! Aqui está a versão final:
1 #!/bin/bash 2 3 # "loginctl lock-session": This command can be userd on distributions with systemd to lock the session. 4 5 # Set the amount of time to sleep before locking the session (in seconds) 6 sleep_time=1800 # 30 minutes 7 8 # Set the amount of warning time before locking the session (in seconds) 9 warning_time=300 # 5 minutes 10 11 # Calculate the time to sleep before the warning 12 sleep_time_warning=$((sleep_time - warning_time)) 13 14 # Sleep until it's time to warn the user 15 sleep $sleep_time_warning 16 17 # Display a popup warning to the user 18 DISPLAY=:0 nohup zenity --warning \ 19 --timeout=120 \ 20 --title="Session Lock Warning" \ 21 --text="Your session will be locked in 5 minutes. Please save your work." & 22 23 # Sleep for the remaining warning time 24 sleep $warning_time 25 26 # Disconnect 27 nmcli connection down "Wired connection 1" 28 29 # Lock the session 30 loginctl lock-session 31 exit 0
Para usar este script:
- Salve-o como um arquivo
.sh
por exemplo,lock_session.sh
. - Torne-o executável:
chmod +x lock_session.sh
. - Execute-o:
./lock_session.sh
.
Este script agora exibirá um pop-up de aviso 5 minutos antes de bloquear a sessão, dando ao usuário tempo para salvar seu trabalho.
Conclusão
Nossa jornada para criar um script para bloqueio de sessão automatizado no Linux tem sido um testemunho do poder do desenvolvimento iterativo e do valioso papel que a IA pode desempenhar no processo de codificação. De um script básico que simplesmente bloqueava a sessão a uma versão mais refinada que incorpora avisos ao usuário, execução em segundo plano, encerramento limpo e timeouts automáticos, vimos como cada iteração nos aproximou de uma solução verdadeiramente amigável e eficaz.
Este esforço colaborativo com o Gemini Pro, a IA avançada do Google, me ajudou a criar uma ferramenta que promove hábitos de trabalho saudáveis e gerenciamento de tempo, não descuidando a segurança ao automatizar o bloqueio de sessão. Ao me solicitar a fazer pausas regulares, este script se tornou um recurso inestimável no meu fluxo de trabalho diário.
Encorajo você a experimentar este script e adaptá-lo às suas próprias necessidades. Experimente diferentes tempos de espera e durações de aviso para encontrar o equilíbrio perfeito para o seu estilo de trabalho. Lembre-se, a chave é encontrar um ritmo que o mantenha produtivo, ao mesmo tempo em que prioriza seu bem-estar.
Este projeto reforçou minha crença de que o futuro da codificação reside na sinergia entre a criatividade humana e a assistência da IA. Ao combinar nossos pontos fortes, podemos desbloquear novas possibilidades e criar soluções inovadoras e práticas.
Obrigado por se juntar a mim nesta aventura de codificação. Espero que você a tenha achado informativa e inspiradora.
Comentários
Enviar um comentário