você está aqui: Home  → Arquivo de Mensagens

Xdialog, Kdialog e at - Não esqueça de tirar o bolo do forno!

Colaboração: César A. K. Grossmann

Data de Publicação: 24 de janeiro de 2008

Quem já não ouviu esta frase fatídica da esposa ou da mãe que estava saindo para ir ao cabeleireiro? Até hoje me dá arrepios os bolos queimados que já tive de comer... É só a patroa dizer "não esquece de apagar o forno daqui a 20 minutos" para que eu fique sem sossego por 20 intermináveis minutos. O pior é que quando faltam dois minutos você sempre encontra algo que te prende a atenção e faz você esquecer do mundo pelos próximos 30 minutos, que é o tempo que leva para a fumaça do bolo queimado alcançar os teus receptores olfativos - quem tem pode usar aqueles reloginhos de cozinha, com formato de ovo ou coisa parecida, que fazem contagem regressiva de até uma hora, mas e quem não tem? E com remédio é pior, a história de que tem que lembrar a patroa de dar para o filhinho um remédio às 18h é sempre um motivo de reavaliação do casamento. Ou pior, quando às 14h te avisam que às 17h a sogra vai chegar na rodoviária e você tem que estar lá esperando a doce mãe da mãe dos teus filhos...

Mas o Linux pode te ajudar neste caso. Já que você está mesmo no computador, então seja inteligente, e coloque o computador para te auxiliar - mostre a ele que o carbono ainda manda!

Xdialog/Kdialog

O primeiro desafio é como mostrar uma caixa de diálogo no ambiente gráfico. Os programadores hardcore devem já estar imaginando as milhares de linhas de programa, ou mesmo o script Tcl/Tk para isto, mas não vamos tão longe. O programa XDialog e sua contraparte KDE, o KDialog, permitem que um script de linha de comando exiba caixas de diálogos no ambiente gráfico. Vamos utilizar o `kdialog` com a opção `--msgbox "texto"` que apresenta uma mensagem e um botão de 'OK'. Para o caso em questão, o aviso para tirar o bolo do forno pode ser colocada assim:

  kdialog --msgbox 'O bolo tá queimando!!!'

At/Atq/Atqrm

O `at` será o nosso programa para agendamento do aviso. Ele recebe o comando a ser executado a partir da entrada padrão, ou então ele o lê de um arquivo. Vamos utilizá-lo assim:

  $ echo comando | at horario

Ele responde com uma mensagem no estilo abaixo:

  job 6 at 2008-01-23 14:32

O número 6 é o número do nosso job, e o comando `atq` vai mostrar uma lista de tarefas agendadas. Se a mulher desistir do cabeleireiro e resolver ela mesma ficar de plantão, use o comando `atqrm 6` para apagar o "job" 6. Mas quem for apressadinho e tentar logo fazer um

  $ echo kdialog --msgbox 'O bolo tá queimando!!!' | at now+20minutes

vai se dar mal. Não há nenhum erro no comando, e o comando `atq` vai mostrar que há realmente uma tarefa agendada para dali a 20 minutos. O problema é que o `kdialog` utiliza a variável ambiente `$DISPLAY` para saber em que tela ele deve apresentar a sua mensagem, mas o comando `at` não preserva esta variável. Em outras palavras, o `kdialog` fica sem saber para onde mandar a caixa de mensagem. Resolvemos isto com um pequeno truque, a definição de variável de ambiente em linha de comando:

  $ echo DISPLAY=$DISPLAY kdialog --msgbox 'O bolo tá queimando!!!' | \
  at now+20minutes

Podemos agendar alguma coisa para as 18hs com o comando abaixo:

  $ echo DISPLAY=$DISPLAY kdialog --msgbox 'Hora do remédio!' | \
  at 18:00

Mais opções de horários você pode descobrir com o `man at`. Mas eu ainda não experimentei agendar algo para daqui a três dias, às 16hs...

Bom, é isto. Desde que o computador esteja ligado e você esteja logado, jog^Htrabalhando, a caixa de diálogo irá aparecer na tela e você será lembrado a tempo de salvar a paz doméstica. Um sistema completinho de alarme pode ser feito usando bash script ou Tcl/Tk, mas deixo isto como desafio para quem gosta de brincar de scripts. Se o bolo ficar bom, não esqueça de mandar um pedaço para mim.



Veja a relação completa dos artigos de César A. K. Grossmann

 

 

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script