Nesse artigo vou mostrar uma maravilhosa ferramenta para GUI (Interface Gráfica com o Usuário), que acabou de sair do forno, o Yad, um fork do zenity que vem com diversas melhorias, dentre elas a possibilidade de fazer formulários, melhorando a interação do usuário com nossos scripts em shell.
Fiz um pequeno exemplo que usa uma lista com uma coluna do tipo texto e outra do tipo imagem
#!/bin/bash # yas com list # Permite ao escolher uma pernonalista na lista e ver detalhes sobre ela na internet :-) # Tem uma coluna com o nome e outra com a imagem da personalidade, se alguem # copiar esse script, vai aparecer os nomes, mas não as imagens :-), pois elas no meu # disco, é apenas um exemplo
# ver se o usuário clicou em 'sair' or no 'x' da janela
ACAO="$?"
test "$ACAO" -eq "1" || test "$ACAO" -eq "252"
if [ "$?" -eq "0" ]; then
exit
fi
#captura apenas o numero da opcao selecionada
ESCOLHIDO=$(echo $ESCOLHIDO | egrep -o '^[0-9]')
# de acordo com a opcao selecionada, abre o firefox com detalhes da personalidade
case "$ESCOLHIDO" in
1)
firefox http://www.vivaolinux.com.br/perfil/verPerfil.php?login=rai3mb
show_list
;;
2)
firefox http://pt.wikipedia.org/wiki/Linus_Torvalds
show_list
;;
3)
firefox http://pt.wikipedia.org/wiki/Stallman
show_list
;;
4)
firefox http://pt.wikipedia.org/wiki/Jon_Hall
show_list
;;
*)
yad --image="face-angry" \
--title="Alerta" \
--text "Você não selecionou uma personalidade!" \
--button="Voltar e Selecionar"
show_list
;;
esac
}
show_list
#.EOF
Salve com o nome de list.sh, dê permissão de execução:
chmod +x list.sh
Execute:
./list.sh
Após selecionar uma personalidade:
Exemplo com yad --notification
yad --notification:
Mostra um ícone na área de notificação do sistema, podemos colocar um texto a ser mostrado quando o mouse estiver em cima dele, e uma ação para executar ao clicar.
Exemplo:
#!/bin/bash # yad com --notification # mostra uma notificação no painel, na área de notificação # neste exemplo verifico a hora e uma tarefa associada a mesma
HORA=$(date +%H)
if [ "$HORA" -lt 06 ]; then
FAIXA="1"
else
if [ "$HORA" -lt 12 ]; then
FAIXA="2"
else
if [ "$HORA" -lt 18 ]; then
FAIXA="3"
else
if [ "$HORA" -le 24 ]; then
FAIXA="4"
fi
fi
fi
fi
case "$FAIXA" in
1)
MSG="Bom sonhos...."
;;
2)
MSG="Bom dia \o/"
;;
3)
MSG="Boa tarde"
;;
4)
MSG="Aproveite o fim do dia"
;;
esac
yad --notification \
--image="appointment-soon" \
--text "$MSG - clique para atualizar o sistema" \
--command "gnome-terminal --command='sudo apt-get upgrade'"
#.EOF
Salve com o nome de "notification.sh", dê permissão de execução:
chmod +x notification.sh
Execute:
./notification.sh
Após clicar, abre um Gnome-terminal e pede a senha pra depois atualizar:
Exemplo com yad --progress
yad --progress:
Mostra um diálogo de progresso.
#!/bin/bash # yad com --progress # mostra uma barra de progresso para determinada ação, sendo que ler linha a linha # dar entrada padrão # neste exemplo busco arquivos .png na basta /home do usuário
find $HOME -name '*.png' | \
yad --progress \
--title "Progresso da busca" \
--width="300" \
--progress-text="Buscando imagens PNG" \
--pulsate \
--auto-close \
--auto-kill # mata o processo anterior caso usuario clique em cancelar
#.EOF
Salve com o nome de "progress.sh", dê permissão de execução:
[2] Comentário enviado por removido em 04/06/2011 - 10:20h
ótimo artigo!
já conhecia o yad, mas não tive tempo de fuçar nele. Esses exemplos do artigo me motivou a estudar a fundo esse programa!
No SlackBuilds.com tem uma versão antiga do yad, acredito que nos repositórios de outras distros também tenha uma versão do programa. Estou com a versão 0.12.0 aqui.
Essa opção de formulários era o que faltava para scripts bash. Se não me engano, o uníco programa que permitia construír formulários em bash, era o falecido kommander.
[4] Comentário enviado por rai3mb em 04/06/2011 - 13:18h
Pessoal no site do projeto tem um código maravilhoso para aprender, o código do USBStartupDisk, para criar um disco USB (Pendrive) a partir de uma imagem ISO, muito bacana:
[5] Comentário enviado por danniel-lara em 04/06/2011 - 22:09h
Parabéns pelo artigo
estava fazendo um script de backup com zenity mas tinha algumas limitações
mas agora com o yad meu script de backup vai ser concluído
[6] Comentário enviado por rai3mb em 04/06/2011 - 22:13h
Obrigado,
a intenção é essa, ajudar e divulgar a ferramenta.
Gostei muito e quero vê-la evoluir, e quem sabe já virar como padrão em algumas distribuições.
[9] Comentário enviado por rai3mb em 05/06/2011 - 20:37h
@master_foca
Ainda não :-), seria um passo mais evolutivo, veja que houve uma boa evolução em relação ao zenity.
É para uso com scripts em SHELL, geralmente usados para automatizar tarefas sem IHC (interação humano com computador).
Agora dar pra fazer muita coisa interessante com SHELL + ZENITY, SHELL + YAD, e SHELL com outras ferramentas, inclusive integrando com interfaces de outras linguagens, como o JAVA, criando os tais "menus flutuantes"só que vai ficar mais pesado e dependente da JVM, e é preciso avaliar a necessidade prática disso.
[11] Comentário enviado por removido em 06/06/2011 - 00:18h
Muito bom.
Agora só preciso de ajuda, para adaptar o diálogo de progresso num script que fiz:
[piu@sayumin ~]$ cat /usr/bin/converter_ipod
#!/bin/bash
#Aviso:
#Este script foi escrito e desenvolvido por Piu, e tem como base converter videos avi para o formato de Ipod Touch.
for arq in *.avi ; do mencoder "$arq" -oac copy -aid 1 -ovc lavc -ffourcc XVID -vf scale=960:640 -lavcopts vcodec=mpeg4:trell:mbd=2:sc_threshold=1000000000:cgop:vbitrate=6000:aspect=16/9 -o "${arq/.avi/.divx}"; done && /usr/bin/mp4
[15] Comentário enviado por rai3mb em 10/06/2011 - 00:53h
Pessoal, estou muito feliz com essa ferramente, estou quase conseguindo convencer minha empresa a usar um Programa Usando SHELL+YAD, está ficando muito legal, espero poder continuar contribuindo com as ideias que estamos colocando no projeto.
[17] Comentário enviado por natalia.belarte em 14/08/2015 - 09:32h
Bom dia,
é possivel criar uma mendagem de alerta ao usuario com " nao esqueça de fazer o seu backup diario " no cron, ou seja o cron consegue executar este aplicativo que abre uma mensagem grafica?
[18] Comentário enviado por removido em 07/09/2015 - 14:51h
[17] Comentário enviado por natalia.belarte em 14/08/2015 - 09:32h
Bom dia,
é possivel criar uma mendagem de alerta ao usuario com " nao esqueça de fazer o seu backup diario " no cron, ou seja o cron consegue executar este aplicativo que abre uma mensagem grafica?
Crie um script com a mensagem e depois indique para o cron executar o script, exemplo:
echo yad --title="Aviso" --text="Hora do backup :)"' > aviso.sh