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.652 ]

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


Exemplos 1



Exemplo com yad --entry

yad --entry:

Diálogo de entrada de texto, onde podemos fazer entrada de dados, modificando a forma como essa entrada será feita, podendo ser do tipo senha(password), texto e número.

#!/bin/bash
# yad com --entry
# recebe valores e armazena em variáveis
NOME=$(\
        yad --entry \
        --entry-label="Nome" \
        --entry-text="seu nome aqui" \
        --completion \
        --editable \
                --title="USO DO YAD COM --entry" \
                --width="300" \
)

SENHA=$(\
        yad --entry \
        --entry-label="Senha" \
        --entry-text="123456" \
        --completion \
        --editable \
        --hide-text \#senha – esconde o texto digitado apresentando apenas um “.” ponto
                --title="USO DO YAD COM --entry" \
                --width="300" \
)

yad --title="YAD COM --entry" \
        --text="Nome: $NOME, Senha: $SENHA" \
                --width="300" \
                --height="100"
                
#.EOF

Salve com o nome de entry.sh, dê permissão de execução:

chmod +x entry.sh

Execute:

./entry.sh

Exemplo com yad --icons

yad --icons:

Diálogo que mostra uma caixa com os ícones de atalho (formato .desktop).

Exemplo:

#!/bin/bash
# yad com icons
# mostra os ícones das aplicações instaladas no seu sistema
# você pode abrir uma aplicação clicando no ícone correspondente
yad --icons \
        --read-dir="/usr/share/applications" \
                --width="600" \
                --height="500"
#.EOF

Salve com o nome de icons.sh, dê permissão de execução:

chmod +x icons.sh

Execute:

./icons.sh

Após clicar duas vezes em um ícone ele abre aplicação correspondente:

Exemplo com yad --file

yad --file:

Dialogo que permite selecionar um arquivo/diretório, retornando o caminho do mesmo.

Exemplo:

#!/bin/bash
# yas com file
# permite selecionar um arquivo/diretório através de caixa de diálogo
# retorna o caminho do arquivo/diretório, deixando a nós o critério de fazer
# o que quiser com ele, nesse caso só vou mostrar o tamanho
ARQUIVO=$(\
        yad --file \
                --directory \
                --title="Selecione um diretório para ver seu tamanho" \
                --width="500" \
                --height="300" \
)

TAMANHO=$(du -sh $ARQUIVO | cut -d"/" -f 1)

yad --title="Tamanho do diretório" \
        --text="Tamanho do diretório $ARQUIVO = $TAMANHO" \
                --width="400" \
                --height="100" \
                --button=gtk-ok:0

# a opcao button=gtk-ok:0 - mostra apenas o botao de ok no dialog
# e seu código de retorno é 0 (zero)
#.EOF

Salve com o nome de "file.sh", dê permissão de execução:

chmod +x file.sh

Execute:

./file.sh
Após selecionar o diretório ele mostra o tamanho do mesmo:

Exemplo com yad --font

yad --font:

Mostra um diálogo para seleção de fontes.

Exemplo: (detalhe o manual não mostra que podemos colocar o tamanho da fonte depois do nome, descobrir testando mesmo).

#!/bin/bash
# yad com font
# mostra um diálogo de seleção de fonte
# retorna o nome da fonte selecionada e tamanho selecionado, gravando num html
RESULTADO=$(\
        yad --font \
        --fontname="Ubuntu",14 \
        --preview="Texto para exemplo do uso de fonte yad é 10 :-) " \
                --title="Selecione uma fonte" \
)
# usa expressão regular para pegar apenas o  texto
FONTE=$(echo $RESULTADO | grep -o '[[:alpha:]]*')
# usa expressão regular para pegar apenas o tamanho da fonte, 2 digitos
TAMANHO=$(echo $RESULTADO | egrep -o '[0-9]{2}')

# grava o resultado num arquivo html para fazer um teste um pouco útil :-)
echo "texto com a fonte $FONTE e TAMANHO $TAMANHO " > arq_teste.htm

# abre o firefox para fazer um teste
firefox file://$PWD/arq_teste.htm

#.EOF

Salve com o nome de "font.sh", dê permissão de execução:

chmod +x font.sh

Execute:

./font.sh

Após selecionar a fonte e tamanho, abre um página do Firefox com o resultado:

Exemplo com yad --form

yad --form;

Uma das novidades que mais gostei: FORMULÁRIOS, não dava pra fazer isso no Zenity, e limitava as entradas do usuário tendo que aprensetar várias telas para coletar dados, o que não é muito prático.

Exemplo:

#!/bin/bash
# yad com FORMULARIOS, que bacana, tem algumas novidades aprecie com calma
HOJE=$(date +%d/%m/%Y)
touch $HOME/cad_usuario.txt

VAR_FORM=$( \
   yad --form \
        --title="CADASTRO DE USUÁRIOS" \
        --width=400 \
        --height=400 \
        --image="accessories-text-editor" \
      --field="Cadastrando em":RO "$HOJE" \
        --field="Nome:" "" \
      --field="Sexo":CB Masculino!Feminino \
      --field="Login:" "$USER" \
      --field="Senha:":H "123456"\
        --field="Ler livro sobre:":RO "" \
      --field="Programação":CHK FALSE \
      --field="Redes":CHK FALSE \
      --field="Linux":CHK TRUE \
      --field="Quantos Filhos:":NUM 0!0..10!1 \
        --field="Foto:":FL "$HOME/Pictures" \
      --field="Salvar dados em:":DIR "$HOME" \
      --field="Cor preferida:":CLR "#00DDDD" \
)

DATA=$(echo "$VAR_FORM" | cut -d"|" -f 1)
NOME=$(echo "$VAR_FORM" | cut -d"|" -f 2)
SEXO=$(echo "$VAR_FORM" | cut -d"|" -f 3)
LOGIN=$(echo "$VAR_FORM" | cut -d"|" -f 4)
SENHA=$(echo "$VAR_FORM" | cut -d"|" -f 5)
#notem que pulei o campo 6, pois o mesmo nao retorna valor útil para nós
LIVRO_PROGRAMACAO=$(echo "$VAR_FORM" | cut -d"|" -f 7)
LIVRO_REDES=$(echo "$VAR_FORM" | cut -d"|" -f 8)
LIVRO_LINUX=$(echo "$VAR_FORM" | cut -d"|" -f 9)
QTD_FILHOS=$(echo "$VAR_FORM" | cut -d"|" -f 10)
FOTO=$(echo "$VAR_FORM" | cut -d"|" -f 11)
SALVAR_EM=$(echo "$VAR_FORM" | cut -d"|" -f 12)
COR=$(echo "$VAR_FORM" | cut -d"|" -f 13)
# repare que o campo $QTD_FILHOS retorna um valor no formato 0.000000
# vc pode usar uma expressão regular, ou o cut, para capturar apenas os digitos antes do .
QTD_FILHOS=$(echo $QTD_FILHOS | cut -d"." -f 1)

#apenas vou mostrar os campos e valores de retorno em um html
DADOS_USUARIO="<table border=1><br/>
         <tr><th>CAMPO</th><th>VALOR</th></tr>
         <tr><td>DATA</td><td>$DATA</td></tr>
         <tr><td>NOME</td><td>$NOME</td></tr>
         <tr><td>SEXO</td><td>$SEXO</td></tr>
         <tr><td>LOGIN</td><td>$LOGIN</td></tr>
         <tr><td colspan=2 align=center>LIVROS</td></tr>
         <tr><td>PROGRAMACAO</td><td>$LIVRO_PROGRAMACAO</td></tr>
         <tr><td>REDES</td><td>$LIVRO_REDES</td></tr>
         <tr><td>LINUX</td><td>$LIVRO_LINUX</td></tr>
         <tr><td>QTD_FILHOS</td><td>$QTD_FILHOS</td></tr>
         <tr><td>FOTO</td><td><img src='$FOTO' /></td></tr>
         <tr><td>DIRETORIO</td><td>$SALVAR_EM</td></tr>
         <tr><td>COR</td><td bgcolor='$COR'></td></tr>
      </table>"

echo $DADOS_USUARIO > cad_usuario.htm

firefox cad_usuario.htm

#.EOF

Salve com o nome de form.sh, der permissão de execução:

chmod +x form.sh

Execute:

./form.sh
Após preencher o formulário:
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

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

Aplicativos para gerenciar a Área de Transferência (Clipboard)

Explorando a entrada de dados com READ em Bash Shell

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!

Leitura recomendada

Monitorando servidores pelo celular

Ubuntu 14.04 no AD com CiD

Script GitPratico para criar repositórios remotos sem logar no GitHub

Relatório do sistema (Shel Script + PHP)

Blacklist - O que é? Como consultar o IP? Como automatizar?

  
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