De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Julio Cezar Neves
Data de Publicação: 07 de abril de 2020
Ainda temos vagas com desconto para a próxima turma do curso Programação Shell Linux, com o Prof. Julio Neves.
Vou dar uma explicação rapidinha sobre a sintaxe do notify-send
, que caso não
esteja instalado no seu computador, você pode fazê-lo com a seguinte linha
(para Debian e seus correlatos):
$ sudo apt-get install libnotify-bin
Bem a sintaxe é a seguinte:
notify-send [OPCOES...][TEXTO]
Um exemplo bem bobo passando somente o título TITULO
:
$ notify-send "Alô Mundo"
Fazendo isso aparecerá no canto superior esquerdo da tela a seguinte figura:
Mas poderíamos também preencher o TEXTO
:
$ notify-send "Alô Mundo" "Cheguei e trouxe o notify"
Podemos também colocar um ícone:
$ notify-send "Alô Mundo" "Cheguei e trouxe o notify" \ -i gtk-dialog-info
Para ver a relação dos principais ícones (especiais para o notify-send
) faça:
$ ls /usr/share/notify-osd/icons/Humanity/scalable/status/ $ ls /usr/share/notify-osd/icons/hicolor/scalable/status/
Também podemos usar o notify-send
para criar um script para ser um disparador
de jobs em background que manda um aviso em seu término. Veja como:
$ cat dispara_job.sh
#!/bin/bash
# Avisa o término de um job, usando notification-send .
# Esse script deverá ser executado em background
eval "$1"
notify-send -i terminal "Acabou" "\nFim do job $1"
Para testá-lo use algo como:
$ dispara_job.sh 'time find / > /dev/null 2>&1' &
Assim você lerá em background (&
) o nome de todos os arquivos de seu computador
mandando a saída primária (stdout) para o buraco negro (> /dev/null
) e a
saída de erros (stderr) também (2>&1
). Ele também funciona em foreground,
mas aí não te traria vantagem alguma, pois seu terminal ficaria preso até
que ele terminasse.
Se quiser, ainda é possível temporizar o tempo de exibição, com a opção -t N
(onde N
é em milisegundos)
$ notify-send "Alô Mundo" "Cheguei e trouxe o notify" \ -i gtk-dialog-info -t 10000
Ainda existem outras opções que não exploraremos, evitando que este artigo se torne muito extenso. Abaixo uma tabela com o resumo dessas opções, que espero que você se aprofunde, já que este utilitário é muito útil, podendo inclusive passar avisos sobre eventos tais como alterações no volume, chegada de e-mail, instant messages, eventos de rede, ... Você encontrará todos os detalhes aqui.
Opções | Ações |
---|---|
-u NIVEL |
Especifica o nível de urgência (low, normal, critical) |
-c TIPO[,TIPO...] |
Especifica a categoria da notificação |
-h TIPO:NOME:VALOR |
Especifica base de dados extra para passar. Os tipos válidos são int , double , string e bytes |
$ cat notify1.sh
#!/bin/bash
# Executa um comando dando a resposta num
#+ balão do tipo notify-send. Ideal para
#+ usar com +F2, sem abrir um terminal
#+ Thanks Karthik
Saida=$(eval "$*" 2>/dev/null) || {
zenity --error --text \"Comando \"$*\" errado\"
exit 1
}
notify-send -t $((1000+300*$(echo -n $Saida |\
wc -w))) -u low -i gtk-dialog-info "$*" "$Saida"
Se você não quiser abrir um terminal para executar um comando, basta você
usar este programa. Como fazê-lo? É simples: após colocar este script
no seu diretório home
, pressione <ALT>+F2
que aparecerá a caixa
"Executar aplicativo". Nesta caixa digite o nome do script (no caso
notify1.sh
) seguido do comando que você deseja executar e que terá sua saída
apresentada em um menu pop-up gerado pelo notify-send
.
Repare que foi feito um algebrismo para se dilatar o tempo de exibição de
acordo com a quantidade de palavras em $Saída
(1 segundo inicial, acrescido
de 0,3 de segundo por palavra). Vejamos sua utilização para o comando who -b
que informa a data e hora do último boot.
A imagem não é bem esta que mostrei, pois o <ALT>+F2
bloqueia a tela, não
permitindo sequer que se faça uma cópia da janela por ele criada.
Vamos ver um programa para verificar a carga da bateria de seu notebook.
$ cat notify2.sh
#!/bin/bash
# Para pegar a carga da bateria
Carga=$(acpi -b | sed 's/.* //;s/%//')
# Criando o índice do ícone já que o nome do
#+ ícone é no formato notification-battery-xxx
#+ e xxx deve ser 000, 020, 040, 060, 080,
#+ ou 100, dependendo da carga da bateria
Nivel=$(case $Carga in
([01][0-9]) echo 000;;
([23][0-9]) echo 020;;
([45][0-9]) echo 040;;
([67][0-9]) echo 060;;
([89][0-9]) echo 080;;
(*) echo 100;;
esac)
notify-send -i notification-battery-$Nivel "Bateria" \
"\nO nível de carga da bateria está em $Carga%"
Com o mesmo acpi, podemos obter informações sobre o estado físico da bateria do seu notebook, isto é quanto de carga ela ainda suporta. Veja essa linha de comandos:
$ acpi -i | sed -r 's/(.*)/"\1"/' | xargs notify-send -i /usr/share/icons/Mint-X/devices/48/battery.svg
Foi assim que descobri que a vida útil da bateria do meu notebook já tinha diminuído 29%, já que ela só está aceitando 71% da carga.
Veja o que acontece quando e executamos somente a primeira parte do comando:
$ acpi -i | sed -r 's/(.*)/"\1"/'
"Battery 0: Full, 100%"
"Battery 0: design capacity 5880 mAh, last full capacity 4200 mAh=71%"
E desta forma podemos ver que o sed
foi utilizado para colocar as aspas
nas duas linhas de texto, para que elas agissem como os 2 parâmetros que o
notify-send
precisa.
Veja como é a saída do acpi -b
, que é quem me informa a carga reminiscente na bateria:
$ acpi -b
Battery 0: Unknown, 98%
O sed
foi usado para limpar essa saída, deixando somente o 98.
Experimente fazer um script para pegar a temperatura de seu notebook. Para fazer isso, use o seguinte comando:
$ acpi -t
Thermal 0: ok, 29.8 degrees C
Thermal 1: ok, 46.0 degrees C
MUITO IMPORTANTE: Este artigo foi escrito usando Debian e Linuxmint, mas os ícones variam muito de uma distro para outra e até de uma versão para a outra da mesma distro. Assin sendo, pode ser (e é provável) que alguns destes ícones não apareçam para você. A melhor forma de localizá-los é usando um find
, procurando uma palavra chave a partir de /usr/share/icons
ou a partir dos diretórios que abordei ao longo do texto deste artigo. Por exemplo, para procurar ícones de touchpad
faça:
$ find /usr/share/icons -name "*touchpad*"
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários