Zenity: Construindo Diálogos GTK+ em Shell Scripts
Zenity é uma ferramenta que permite criar caixas de diálogo gráficas no Linux usando a linha de comando. Ele usa GTK+, um kit de ferramentas para criação de interfaces gráficas de usuário (GUIs), facilitando a adição de elementos visuais aos seus scripts.
O Zenity pode ser extremamente útil para scripts de shell, pois fornece uma maneira simples de interagir com os usuários por meio de caixas de diálogo como caixas de informações, seletores de arquivos, barras de progresso e muito mais.
Neste artigo, vamos nos aprofundar em como o Zenity funciona, os tipos de caixas de diálogo que ele pode criar e como usá-lo de forma eficaz em seus scripts de shell.
Por que usar o Zenity?
Ao escrever scripts de shell, a interação do usuário geralmente é feita por meio de entrada/saída de texto no terminal. No entanto, há cenários em que você pode querer fornecer uma experiência mais amigável, especialmente quando o script é destinado a pessoas que talvez não se sintam confortáveis com comandos de terminal.
O Zenity ajuda a resolver esse problema permitindo criar caixas de diálogo gráficas fáceis de entender e usar.
Instalando Zenity no Linux
A maioria das distribuições Linux modernas vem com o Zenity pré-instalado e você pode verificar se o Zenity está disponível em seu sistema digitando o seguinte comando em seu terminal:
zenity --version
4.0.1
Se o Zenity estiver instalado, este comando exibirá o número da versão. Se não estiver instalado, você pode instalá-lo usando seu gerenciador de pacotes.
sudo apt install zenity [On Debian, Ubuntu and Mint]
sudo yum install zenity [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo emerge -a sys-apps/zenity [On Gentoo Linux]
sudo apk add zenity [On Alpine Linux]
sudo pacman -S zenity [On Arch Linux]
sudo zypper install zenity [On OpenSUSE]
sudo pkg install zenity [On FreeBSD]
Uso básico do Zenity no Linux
Zenity é muito simples de usar, pois opera invocando diferentes tipos de caixas de diálogo a partir da linha de comando usando várias opções. Cada opção corresponde a um tipo específico de caixa de diálogo.
Exemplo 1: Exibindo uma caixa de diálogo de informações
Um dos usos mais simples do Zenity é mostrar uma caixa de diálogo de informações.
zenity --info --text="This is an information dialog"
Exemplo 2: Exibindo uma caixa de diálogo de aviso
Você também pode mostrar uma caixa de diálogo de aviso usando o seguinte comando:
zenity --warning --text="This is a warning message"
Exemplo 3: Exibindo a caixa de diálogo de perguntas
Uma caixa de diálogo de perguntas pode ser usada para fazer ao usuário uma pergunta sim/não. O resultado é retornado como um código de saída.
if zenity --question --text="Do you want to continue?"; then
echo "User selected Yes"
else
echo "User selected No"
fi
Exemplo 4: Exibindo a caixa de diálogo de seleção de arquivos
Zenity também pode ser usado para abrir uma caixa de diálogo de seleção de arquivos, permitindo aos usuários escolher um arquivo em seu sistema:
FILE=$(zenity --file-selection --title="Choose a file")
echo "You selected: $FILE"
Exemplo 5: Exibindo a caixa de diálogo de entrada de texto
Você pode criar uma caixa de diálogo que solicita ao usuário que insira algum texto, o que pode ser útil para obter a entrada do usuário.
USER_INPUT=$(zenity --entry --title="Input required" --text="Enter your name:")
echo "You entered: $USER_INPUT"
Exemplo 6: Exibindo a caixa de diálogo de senha
Se quiser solicitar uma senha ao usuário, você pode usar a caixa de diálogo de senha, mas a entrada ficará oculta:
PASSWORD=$(zenity --password --title="Enter your password")
echo "Password entered: $PASSWORD"
Exemplo 7: Exibindo a caixa de diálogo da barra de progresso
Zenity pode exibir uma barra de progresso, o que é útil quando você deseja indicar que uma tarefa está em andamento.
(
for i in {1..100}; do
echo $i
sleep 0.1
done
) | zenity --progress --title="Task in progress" --text="Please wait..." --percentage=0
Exemplo 8: Exibindo caixa de diálogo de erro
Você pode mostrar uma caixa de diálogo de erro quando algo der errado no seu script:
zenity --error --text="An error occurred!"
Exemplo 9: Exibindo caixa de diálogo de lista
Zenity pode exibir uma lista de opções para o usuário escolher:
zenity --list --title="Choose an option" --column="Options" "Option 1" "Option 2" "Option 3"
Usando Zenity em Shell Scripts
O Zenity pode ser perfeitamente integrado a scripts de shell para criar uma experiência mais amigável.
Aqui está um exemplo completo de um script simples que usa vários diálogos do Zenity.
#!/bin/bash
Welcome message
zenity --info --text="Welcome to the user setup script"
Ask for user's name
USER_NAME=$(zenity --entry --title="User Information" --text="Please enter your name:")
Ask for confirmation
if zenity --question --text="Is your name $USER_NAME?"; then
zenity --info --text="Thank you, $USER_NAME"
else
zenity --error --text="Name mismatch. Exiting script."
exit 1
fi
File selection
FILE=$(zenity --file-selection --title="Select a file to process")
zenity --info --text="You selected: $FILE"
Display progress
(
for i in {1..100}; do
echo $i
sleep 0.1
done
) | zenity --progress --title="Processing file" --text="Please wait while we process the file..." --percentage=0
zenity --info --text="Process complete!"
Este script começa dando as boas-vindas ao usuário, depois perguntando seu nome, confirmando o nome, pedindo que selecione um arquivo e mostrando uma barra de progresso enquanto o arquivo é processado. Ele demonstra como o Zenity pode ser usado para adicionar uma interface gráfica a um script que, de outra forma, seria baseado em texto.
Tratamento de erros no Zenity
Zenity retorna códigos de saída diferentes com base nas ações do usuário. Compreender esses códigos ajuda a lidar adequadamente com erros ou cancelamentos de usuários em seus scripts.
- Código de saída 0: o usuário clicou em “OK” ou selecionou uma opção.
- Código de saída 1: o usuário clicou em “Cancelar” ou fechou a caixa de diálogo.
- Código de saída -1: Ocorreu algum erro.
Você pode usar estes códigos de saída para lidar com diferentes respostas do usuário:
if zenity --question --text="Do you want to proceed?"; then
echo "Proceeding..."
else
echo "Action canceled by the user."
exit 1
fi
Conclusão
Zenity é uma ferramenta incrivelmente útil para criar caixas de diálogo gráficas em scripts de shell. Esteja você criando seletores de arquivos simples, caixas de diálogo de perguntas interativas ou barras de progresso, o Zenity pode aprimorar seus scripts fornecendo uma interface amigável.
Ao usar o Zenity, você pode tornar seus aplicativos de linha de comando e scripts de shell mais acessíveis para usuários não técnicos.