Apresentando o Yad - "zenity melhorado"

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.

[ Hits: 71.037 ]

Por: Raimundo Alves Portela em 04/06/2011 | Blog: http://portelanet.com


Exemplos 2



Exemplo com yad --list

yad --list:

Mostra um diálogo do tipo lista de seleção.

Exemplo:

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

show_list() {

ESCOLHIDO=$( \
   yad --list \
   --title="Detalhes sobre Personalidades" \
   --column="ID":NUM \
   --column="PERSONALIDADE":TEXT \
   --column="FOTO":IMG \
   --print-column=1 \
   --hide-column=1 \
      --width="300" \
      --height="400" \
      --button="Sair":1 \
      --button="Ver detalhes":0 \
   1 "rai3mb :-)" "myAvatar.png" \
   2 "Linus Torvalds" "linus.png" \
   3 "Richard Stallman" "stallman.png" \
   4 "Mad Dog" "maddog.png" \
)

# 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
Linux: Apresentando o Yad - 'zenity melhorado'
Após selecionar uma personalidade:
Linux: Apresentando o Yad - 'zenity melhorado'

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

Linux: Apresentando o Yad - 'zenity melhorado'
Após clicar, abre um Gnome-terminal e pede a senha pra depois atualizar:
Linux: Apresentando o Yad - 'zenity melhorado'

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:

chmod +x progress.sh

Execute:

./progress.sh
Linux: Apresentando o Yad - 'zenity melhorado'
Página anterior     Próxima página

Páginas do artigo
   1. Apresentando o Yad
   2. Exemplos 1
   3. Exemplos 2
   4. Conclusão
Outros artigos deste autor

Mostrando dicas ao iniciar o terminal

Otimizando o uso do seu disco rígido usando a mesma /home para várias distribuições

StarDict - software de tradução de ótima qualidade!

Consultas SQL pelo Terminal no Postgres, Mysql, SQL Server, etc

Explorando a entrada de dados com READ em Bash Shell

Leitura recomendada

Monitorando servidores pelo celular

Receba seu IP externo via e-mail ou ensine o bash a ler e enviar e-mails

Monitoramento de pops para provedores

O comando tput

Script de firewall completíssimo

  
Comentários
[1] Comentário enviado por bolche em 04/06/2011 - 03:59h

Uau, bem legal essa ferramenta. Agora é esperar que entre no repositório da maioria das distros...

[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.

Abraços

[3] Comentário enviado por nickmarinho em 04/06/2011 - 11:19h

Você não tem noção de como isso vai me ajudar com uns SH que construi pra conversão de audio e video que criei uns anos atrás.
Muito bom mesmo.

Parabéns pela dica.
Abraços

www.lucianomarinho.com.br
www.racaboxer.com.br

[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:

http://code.google.com/p/yad/wiki/USBStartupDisk

[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.

Abraços

[7] Comentário enviado por removido em 04/06/2011 - 23:09h

Que aplicativo polivalente. Muito interessante.
Gostei. Torço para que cresça e torne-se padrão em muitas distribuições.

Parabéns pelo artigo e divulgação deste ótimo aplicativo.

[8] Comentário enviado por removido em 05/06/2011 - 20:12h

Excelente artigo, gostaria de saber se existe uma forma de construir janela com menu flutuante no YAD ?

[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.

[10] Comentário enviado por rai3mb em 05/06/2011 - 20:39h

@master_foca

Dar pra usar uma lista (drop-down) e ficaria como um menu suspenso....é uma ideia, vai depender mesmo da sua necessidade.

[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


teria idéia de como fazê-lo?

[12] Comentário enviado por rai3mb em 06/06/2011 - 01:20h

@piu

Veja se ajuda: (coloquei uma função para chamar a barra de progresso e rodar em paralelo com sua conversão)


#!/bin/bash
#Aviso:
#Este script foi escrito e desenvolvido por Piu, e tem como base converter videos avi para o formato de Ipod Touch.

barra_progresso () {
tail -f $0 | yad --title='Convertendo arquivo' --text="$@" --progress --width='300' --pulsate --auto-close --auto-kill --no-buttons
}

for arq in *.avi ; do
barra_progresso "Convertendo arquivo..." & 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}"
killall tail
done

[13] Comentário enviado por dimasdaros em 06/06/2011 - 08:08h

Opa, vai ser muito útil cara, não tens idéia o quanto =D
veio na hora certa

vlw aew cara
vlw mesmo

[14] Comentário enviado por celosop em 09/06/2011 - 10:36h

caramba, muito bom, já estou divulgando pra meus amigos que trabalham com shell!!
parabéns!

[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.

Abraços

[16] Comentário enviado por removido em 30/12/2011 - 23:45h

Ótimo trabalho!

grande Yad, instalado no Debian Squeeze assim:

$ wget http://yad.googlecode.com/files/yad-0.16.3.tar.xz
$ tar -Jxvf yad-0.16.3.tar.xz
$ cd yad-0.16.3/
$ ./configure --prefix=/usr --sysconfdir=/etc
$ sudo checkinstall -D --install=no --pkgarch=all
$ sudo dpkg -i yad_0.16.3-1_all.deb

fui!

[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

[19] Comentário enviado por Armlook em 13/03/2016 - 14:13h


Realmente magnífico.

[20] Comentário enviado por Minions em 26/04/2023 - 16:56h


Esse tipo de caixa de yad só aceita um tipo de comando?

yad --form --width=250 --text="Choose a browser to launch:" \
--field="Chromium":fbtn "chromium" \
--field="Firefox":fbtn "firefox ; xterm -e ls -l /tmp; sleep 50" \
--field="Dillo":fbtn "dillo" \
--button=gtk-cancel:1


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts