Zenity, Algum guia completo?

Iniciado por JarbasAugusto, 09 de Outubro de 2007, 15:02

tópico anterior - próximo tópico

JarbasAugusto

Alguém sabe de um Guia bem completo sobre o zenity com shell script?

Tenho um código em shell e gostaria de criar uma interface gráfica pra ele, o zenity me parece ser bem a ferramenta pra isso.

O Glade também pode criar para um shell script?

alarcon

Citação de: JarbasAugusto online 09 de Outubro de 2007, 15:02
Alguém sabe de um Guia bem completo sobre o zenity com shell script?

Tenho um código em shell e gostaria de criar uma interface gráfica pra ele, o zenity me parece ser bem a ferramenta pra isso.

O Glade também pode criar para um shell script?

Quanto ao Zenity você pode ver a página de manual dele assim:

man zenity

ou pode procurar via google sobre ele, um exemplo de link:

http://www.gustavoroberto.blog.br/2007/09/21/algumas-coisas-sobre-zenity-parte-i/

JarbasAugusto

Obrigado !!

Estou com uma dúvida no seguinte comando:


Citarhora=$(zenity --scale --title "INICIALIZAÇÃO DO SISTEMA" --text "ESCOLHA A HORA PARA INICIALIZAR O SISTEMA" --min-value=00 --max-value=23 --value=00 --step 1);

Com ele abre uma janela com uma barra para selecionar um valor de 0 a 23..
Seleciono e clico em OK. Até ai tudo certo, ele salva esse valor na variavel $hora.

O problema é quando eu aperto CANCEL, não vai nenhum valor para a variável.
Pois eu quero que quando ele clique em CANCEL seja dado o comando EXIT, assim fechando o script em execução.

Como faço isso? Tento com If?? Mas como comparar se naum há nada no valor de $hora


clcampos


if test "$hora" = ""; then
   exit
fi


Isso ajuda tbem:

$ man sh
Cristiano/Timóteo - MG
.: Como Fazer Perguntas de Forma Inteligente :.                
Com dúvida? pesquise!

JarbasAugusto

tentei isso.. naum deu
consegui com esse codigo abaixo, obrigado:

if [ $? -eq "1" ]; then exit
fi


percebi q qndo clico em Cancel o zenity atribui 1 para $?


alarcon

#5
Citação de: JarbasAugusto online 11 de Outubro de 2007, 12:53
tentei isso.. naum deu
consegui com esse codigo abaixo, obrigado:

if [ $? -eq "1" ]; then exit
fi


percebi q qndo clico em Cancel o zenity atribui 1 para $?



Crie este exemplo aqui de baixo e rode-o para ver o seu funcionamento, tanto escolhendo a opção Ok com um valor, como a opção CANCEL:

#!/bin/bash

if hora=$(zenity --scale --title "INICIALIZAÇÃO DO SISTEMA" --text "ESCOLHA A HORA PARA INICIALIZAR O SISTEMA" --min-value=00 --max-value=23 --value=00 --step 1); then

echo "$hora"

else

echo "você cancelou"

exit 0

fi

JarbasAugusto

obrigado mais uma vez!!!

pra finalizar soh me resta uma dúvida...

montei certinho meu script (./zen.sh), mas ele possui uma opção de ficar executando por tempo indeterminado.
Dae tentei fazer com que umnovo script quando executado matasse o ./zen.sh quando o usuário solicitar. O que está errado??

#!/bin/sh
#### Script Mata Processo
# Acha No. PID do Processo da chave
pid=`ps -ax |grep 'sh /bin/./zen.sh' |grep -v grep | tr -s '''' |
cut -f2 -d' '`
kill $pid
# Adiciona +2 no No. do processo, pois o script abre um processo dos em seguida
let dospid=$pid+2
kill $dospid

alarcon

#7
Citação de: JarbasAugusto online 11 de Outubro de 2007, 14:24
obrigado mais uma vez!!!

pra finalizar soh me resta uma dúvida...

montei certinho meu script (./zen.sh), mas ele possui uma opção de ficar executando por tempo indeterminado.
Dae tentei fazer com que umnovo script quando executado matasse o ./zen.sh quando o usuário solicitar. O que está errado??

#!/bin/sh
#### Script Mata Processo
# Acha No. PID do Processo da chave
pid=`ps -ax |grep 'sh /bin/./zen.sh' |grep -v grep | tr -s '''' |
cut -f2 -d' '`
kill $pid
# Adiciona +2 no No. do processo, pois o script abre um processo dos em seguida
let dospid=$pid+2
kill $dospid


ainda não entendi direito o que você pretende, mas por que você não usa assim:

killall processo

OBS: o killall pode ser usado sempre que você souber qual comando inicializa o programa a ser fechado.

Você não poderia usar o comando until também?

Citaruntil [ $condicao = "xxxxxx " ]; do

killall processo

done

JarbasAugusto

#8
Vou explicar td pra ver se faz sentido neh .. rsrs

Meu script é feito para gravação de video, gerando gravações de meia em meia hora, com inicio marcado pelo usuário. O sistema possui 2 opções:
1) iniciar e ficar gravando por tempo indeterminado
2)Iniciar e gravar durant X horas.

O meu problema é quando o usuário quiser finalizar o programa na opção Indeterminado. Visto que depois de iniciada a gravação, o mesmo ficara em background rodando.

Pensei em montar um outro script que matasse o de gravação caso o usuário queira finalizar.

aí vai o codigo:

#!/bin/sh -x
entrada(){
hora=$(zenity --scale --title "INICIALIZAÇÃO DO SISTEMA" --text "ESCOLHA A HORA PARA INICIALIZAR O SISTEMA" --min-value=00 --max-value=23 --value=00 --step 1);
if [ $? -eq "1" ]; then exit 0
fi

min=$(zenity  --list  --title "MINUTO" --text "ESCOLHA O MINUTO" --radiolist  --column "Escolha" --column "Minuto" TRUE 00 FALSE 30 );
if [ $? -eq "1" ]; then clear; exit 0
fi

user_ini="$hora:$min"

}

inicio(){
atual="` date +%R`"
if [ "$user_ini" = "$atual" ];
then
sleep 2
gravacao
else
sleep 30
inicio

fi
}

gravacao() { #rotina "principal" aqui que será executada a gravação no mp4live
duracao=$(($duracao+0))
while [ $duracao != 0 -o $teste -eq "0" ]; do
data="`date +%Y_%m_%d_%H_%M`"
        sed -i "s|^recordFile=.*|"recordFile=/usr/local/movies/$data".mp4|" /home/jarbas/.mp4live_d/Streams/Teste
sudo mp4live --automatic
killall mp4live
duracao=$(($duracao-1))   

done
zenity --info --text "OBRIGADO POR UTILIZAR O SIVIRES"
exit
}


zenity --info --title "SIVIRES" --text "Bem-Vindo ao SiViRes - Sistema de Vigilância Remota via Streaming"
zenity --question --text "Deseja que o sistema fique ativo indefinidamente?";
teste=$?
if [ $teste -eq "1" ];
then
duracao=$(zenity --scale --title "INICIALIZAÇÃO DO SISTEMA" --text "POR QUANTAS HORAS O SISTEMA FICARÁ ATIVO" --min-value=1 --max-value=100 --value=1 --step 1);
if [ $? -eq "1" ]; then clear; exit
fi
duracao=$(($duracao+$duracao));
fi

entrada
inicio




alarcon

#9
bem aí é uma coisa mais complexa, escrevi algo aqui que não sei se funciona, mas dá uma idéia do que você precisa tentar.

#!/bin/sh -x
entrada(){
hora=$(zenity --scale --title "INICIALIZAÇÃO DO SISTEMA" --text "ESCOLHA A HORA PARA INICIALIZAR O SISTEMA" --min-value=00 --max-value=23 --value=00 --step 1);
if [ $? -eq "1" ]; then exit 0
fi

min=$(zenity  --list  --title "MINUTO" --text "ESCOLHA O MINUTO" --radiolist  --column "Escolha" --column "Minuto" TRUE 00 FALSE 30 );
if [ $? -eq "1" ]; then clear; exit 0
fi

user_ini="$hora:$min"

}

inicio(){
atual="` date +%R`"
if [ "$user_ini" = "$atual" ];
then
sleep 2
gravacao
else
sleep 30
inicio

fi
}

gravacao() { #rotina "principal" aqui que será executada a gravação no mp4live
duracao=$(($duracao+0))
while [ $duracao != 0 -o $teste -eq "0" ]; do
sed -i "s|^recordFile=.*|"recordFile=/usr/local/movies/$data".mp4|" /home/jarbas/.mp4live_d/Streams/Teste
sudo mp4live --automatic
killall mp4live
duracao=$(($duracao-1))   

done
zenity --info --text "OBRIGADO POR UTILIZAR O SIVIRES"
exit
}


zenity --info --title "SIVIRES" --text "Bem-Vindo ao SiViRes - Sistema de Vigilância Remota via Streaming"
zenity --question --text "Deseja que o sistema fique ativo indefinidamente?";
teste=$?
if [ $teste -eq "1" ];
then
duracao=$(zenity --scale --title "INICIALIZAÇÃO DO SISTEMA" --text "POR QUANTAS HORAS O SISTEMA FICARÁ ATIVO" --min-value=1 --max-value=100 --value=1 --step 1);
if [ $? -eq "1" ]; then clear; exit
fi
duracao=$(($duracao+$duracao));
fi



zen_start()
{
entrada
        inicio
}

zen_stop()
{
echo "encerrar execução do zen.sh"
killall zen.sh
}

zen_restart()
{
zen_stop
sleep 1
zen_start
}



case "$1" in
'start')
zen_start
;;
'stop')
zen_stop
;;
'restart')
zen_restart
;;
*)
echo "usage $0 start|stop|restart"
esac


para parar você digitaria no terminal o nome do script mais a palavra stop. Modifique algo que julgar necessário ou tudo  ;D.

O que quis mostrar é que dentro do seu próprio script você pode adicionar algo que pare com a execução ao invés de escrever outro script.

algo que funcionasse asim:

zen start para executar

e

zen stop para parar de executar.

JarbasAugusto

mais uma vez obrigado brother.. ajudou muito mesmo!


transportar esse codigo em shell para C++, no Glade, será muito trabalhoso?

me empolguei com as dialogs do zenity, vou ver se passo pra algo mais elaborado.

alarcon

#11
Citação de: JarbasAugusto online 11 de Outubro de 2007, 17:20
mais uma vez obrigado brother.. ajudou muito mesmo!


transportar esse codigo em shell para C++, no Glade, será muito trabalhoso?

me empolguei com as dialogs do zenity, vou ver se passo pra algo mais elaborado.

Quer dizer que o que imaginei acima resolveu, ou melhor, funciona do jeito que está?

Com relação ao C++ não posso opinar por que na verdade, sobre programação, sei pouco ( pascal, basic, lisp ou melhor autolisp, fortran só um pouquinho, há muito tempo atrás que usei e já não lembro mais), no momento só algumas coisas em shell script mesmo.