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: 61.789 ]

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

Linux: Apresentando o Yad - 'zenity melhorado'
Linux: Apresentando o Yad - 'zenity melhorado'
Linux: Apresentando o Yad - 'zenity melhorado'

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

Linux: Apresentando o Yad - 'zenity melhorado'
Após clicar duas vezes em um ícone ele abre aplicação correspondente:
Linux: Apresentando o Yad - 'zenity melhorado'

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
Linux: Apresentando o Yad - 'zenity melhorado'
Após selecionar o diretório ele mostra o tamanho do mesmo:
Linux: Apresentando o Yad - 'zenity melhorado'

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

Linux: Apresentando o Yad - 'zenity melhorado'
Após selecionar a fonte e tamanho, abre um página do Firefox com o resultado:
Linux: Apresentando o Yad - 'zenity melhorado'

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
Linux: Apresentando o Yad - 'zenity melhorado'
Após preencher o formulário:
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

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

Yad 0.16 - Eu quero sempre mais de ti

Enviar e-mail pelo terminal com mutt

Mostrando dicas ao iniciar o terminal

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

Leitura recomendada

ShellBot - Crie Bots para Telegram em Shell Script

Relatório de conexão Wi-Fi com dados de usuários conectados nos POPs

pam_mount e CiD - Gerenciamento centralizado dos mapeamentos de unidades de rede no Ubuntu

Como programar backup com rsync e cron de maneira rápida e simples

Brincando com pseudoterminais e redirecionamentos

  
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 ru4n 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 izaias 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:

[[email protected] ~]$ 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="[email protected]" --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.


Contribuir com comentário