Como usar widgets gráficos em scripts de bash com zenidade

Como usar widgets gráficos em scripts de bash com zenidade

Zenidade é um utilitário muito útil que vamos criar interfaces gráficas de usuário para nossos scripts de shell. Vários widgets existem e podem ser usados ​​invocando o programa com as respectivas opções. Os widgets são baseados no Gtk Kit de ferramentas e retorne o resultado da interação do usuário na saída padrão ou como um código de retorno.

Neste tutorial, você aprenderá:

  • Quais são as opções gerais de zenidade
  • Quais são alguns dos widgets disponíveis mais úteis e como usá -los



Requisitos de software e convenções usadas

Requisitos de software e convenções de linha de comando Linux
Categoria Requisitos, convenções ou versão de software usada
Sistema Independente da distribuição
Programas O utilitário de zenidade
Outro Familiaridade com o shell (Bash neste caso) e conceitos como Sub -Shell e Códigos de Saída
Convenções # - requer que os comandos Linux sejam executados com privilégios root diretamente como usuário root ou por uso de sudo comando
$ - Requer que os comandos do Linux sejam executados como um usuário não privilegiado regular

Instalação

O Zenidade O pacote está incluído nos repositórios de todas as principais distribuições Linux, e já pode ser instalado se você estiver usando o GNOMO Ambiente da área de trabalho. Para instalá -lo, podemos usar nosso gerenciador de pacote de distribuição favorito, em Fedora, Por exemplo, podemos usar DNF:

$ sudo dnf install zenity


Ao usar distribuições baseadas em Debian e Debian como o Ubuntu, podemos usar o comando apt-get:

$ sudo apt-get install zenity

A zenidade já está incluída no Archlinux extra repositório, portanto, podemos instalá -lo via Pacman:

$ sudo pacman -s zenidade

Opções genéricas

Antes de começarmos a ver alguns dos widgets mais úteis fornecidos por Zenidade, Devemos mencionar algumas das opções genéricas disponíveis que podemos usar para alterar o comportamento do programa.

Nós os chamamos de genérico porque eles podem ser aplicados independentemente do widget escolhido: --título, --Viúva-icon, --largura, --altura e --tempo esgotado.

Primeiro de tudo, temos o --título Opção: Podemos usá -lo para especificar um título para a janela de diálogo. Da mesma forma, o --Window-icon Opção Vamos especificar um ícone que será usado como ícone para a janela e será visível, por exemplo, na barra de tarefas. Para exibir um ícone no widget, em vez disso, podemos usar o --Ícone-nome opção e forneça um dos nomes de ícones permitidos (aqui está a lista completa) como argumento. Para usar os ícones de estoque fornecidos no erro, informações, perguntas ou diálogos de aviso, por exemplo, podemos especificar respectivamente: Error de diálogo, diálogo-info, Perição de diálogo ou Dialog-Warning.

O --largura e --altura As opções são bastante auto-explicativas: eles nos permitem definir a geometria de nossa janela de diálogo.

Finalmente, usando o --tempo esgotado opção, podemos definir um tempo limite em segundos para o diálogo: após a quantidade especificada de tempo, ele será fechado automaticamente.



Os widgets disponíveis

Existem vários widgets que podemos usar graças à zenidade: cada um deles tem um propósito específico. Vamos ver alguns deles.

O widget do calendário

O widget do calendário exibirá um calendário e deixará o usuário escolher uma data, selecionando o mês, dia e ano. Os valores selecionados serão retornados no saída padrão. Para lançar o calendário do widget, tudo o que precisamos ser invocar a zenidade, com o --calendário opção:

$ zenity -Calendário

Podemos usar uma série de opções para ajustar o comportamento do widget, por exemplo, usando --dia, --mês, --ano e fornecendo um Int Como valor, podemos definir, respectivamente, o dia, mês e ano padrão que serão exibidos no widget. Para especificar um formato específico no qual a data selecionada deve ser retornada, podemos usar o --data opção e especifique o padrão no strftime estilo.



O widget do calendário

O widget de entrada

O widget de entrada é realmente útil quando precisamos pedir algum texto ao usuário. Digamos, por exemplo, precisamos pedir ao usuário que insira seu nome; Podemos executar o seguinte comando:

$ Zenity --Entry -Título "Solicitação de nome" -Text "Por favor, digite seu nome:"


Aqui usamos o --título e --texto de entrada Opções para personalizar, respectivamente, o título e o rótulo que para o widget. Depois de executar o comando acima, o widget aparecerá:



O widget de entrada

O texto inserido pelo usuário retornará na saída padrão.

Widget de seleção de arquivos

O widget de seleção de arquivos Vamos exibir uma boa interface gráfica para permitir que o usuário selecione um ou mais arquivos. Assim como fizemos nos exemplos anteriores, podemos usar uma série de opções para modificar o comportamento e a aparência do diálogo. Um dos mais importantes é --nome do arquivo que pode ser usado para definir o arquivo/diretório que será selecionado por padrão. Aqui está uma rápida visão geral das opções e das funcionalidades que eles fornecem:

Opções de widget de seleção de arquivos de zenidade
Opção Função
-nome do arquivo Defina o diretório/arquivo padrão que será selecionado no widget
-múltiplo Ative a capacidade de selecionar vários arquivos de uma só vez
-filtro de arquivo Especifique um filtro para nomes de arquivos
-diretório Restringir a seleção aos diretórios
-salvar Execute o widget no modo "salvar".
-Confirmar-overwrite Peça ao usuário confirmar ao substituir um arquivo existente
-separador Especifique um separador que será usado para separar caminhos quando vários arquivos
são selecionados

Vamos ver um exemplo do uso do widget. Digamos que queremos deixar o usuário selecionar vários arquivos e queremos o conteúdo do usuário $ Home diretório a ser exibido no widget quando ele é aberto. Tudo o que precisamos fazer é executar o seguinte comando:

$ Zenity-File-Selection-Multiple-Filenome "$ home/"

Você pode notar que fornecemos uma trilha / Para o caminho: dessa forma, o conteúdo do diretório é exibido, em vez do próprio diretório. Aqui está o nosso widget:



O widget de seleção de arquivos

Depois de clicar no botão "OK", o caminho absoluto dos arquivos selecionados será retornado na saída padrão, separada por um caractere, que é padrão |:

/home/egdoc/downloads/a.txt |/home/egdoc/downloads/b.TXT

Podemos mudar facilmente o separador, fornecendo o personagem que queremos usar como argumento da opção -separator.

Se abrirmos o diálogo em Salvar modo, O usuário será solicitado a fornecer o nome do arquivo que ele deseja salvar. Se o arquivo existir e nós fornecemos o --Confirmar-overwrite Opção, ele será solicitado a confirmar que deseja substituí -lo:

$ Zenity-File-Selection-Save-Confirm-overwrite-Filenome "$ home/"

O caminho escolhido será devolvido à saída padrão e estaremos livres para usá -lo em nosso script.

O widget de progresso

Outro widget interessante é o progresso: podemos lançá -lo usando a zenidade com o --progresso opção. Podemos usá -lo, por exemplo, para mostrar o progresso das operações de longa execução. Aqui estão algumas das opções mais úteis que podemos usar com o widget:

Opção Função
-percentagem Define o valor percentual inicial da barra de progresso
-Close automático Feche automaticamente o diálogo quando o progresso for concluído
-Auto-matar Mate o processo pai se o diálogo for fechado com o cancelamento
botão
-sem cancelamento Não exiba o botão de cancelamento

Aqui está um exemplo de como podemos usar o widget dentro de um script bash:



#!/BIN/BASH # # Script fictício para demonstrar o widget de progresso da Zenidade! (eco 25 echo "# configurando…" Sleep 2 echo 30 echo "# Lendo arquivos…" Sleep 2 echo 70 echo "# Criando conteúdo ..." Sono 1 echo 100 echo "# feito!") | Zenidade-Título" Barra de Progresso Exemplo "--progress --auto-Kill
cópia de

O script acima não executa nenhuma operação, mas é útil entender como o widget funciona. Há duas coisas principais que devem ser notadas no código: antes de tudo, os comandos a serem executados são envolvidos entre parênteses, portanto são executados em um subshell: Isso é necessário para o widget funcionar corretamente; Segundo, quando ecoarmos uma linha começando com um número, isso será interpretado como a porcentagem da barra de progresso.

Da mesma maneira, quando ecoamos uma linha que começa com o # personagem, ele será usado como o texto a ser exibido no widget. Aqui está um pequeno vídeo do script em ação:

Informações, widgets de aviso e erro

Para exibir informações, aviso ou mensagens de erro, podemos usar a zenidade com o --informações, --aviso e --erro opções, respectivamente. Nesse caso, usamos o --texto opção para especificar a mensagem. Aqui está um exemplo de notificação:

$ zenity - -info - -width = 400 - -Hight = 200 --text "Esta é uma notificação!"



O widget de notificação

Usar o widget de aviso, é igualmente fácil:

$ Zenity -Warning -Width = 400 -Hight = 200 -Text "Este é um aviso!"



O widget de aviso

Esta é, em vez disso, é um exemplo de mensagem de erro:

$ zenity --error -lar!"



O widget de erro

O widget de pergunta

Para fazer uma pergunta ao usuário e obter sua resposta, podemos usar o pergunta widget, invocando a zenidade com o --pergunta opção. Especificamos a pergunta usando o --texto opção e definir os rótulos dos botões 'ok' e 'cancelar', usando respectivamente o --OK-Label e --Cancelar label opções. Aqui está um exemplo:

$ zenity --question -text "Você tem certeza de que deseja sair?"-Não-Wrap --k-Label" Sim "-Cadel-Label" Não "



O widget de pergunta



Nesse caso, também usamos o --sem embrulhar opção, para evitar embrulho de texto no widget. O resultado da escolha do usuário não será exibido na saída padrão; Em vez disso, o comando definirá seu Código de saída Consequentemente, então ele retornará 0 Se o usuário clicar no botão 'OK' e 1 Se ele clicar no 'cancelar' ou fechar a janela (isso pode parecer contra-intuitivo, mas lembre-se do que um código de saída de 0 significa que um comando foi executado com sucesso no shell).

O widget de senha

Este é o widget que devemos usar quando queremos que o usuário insira uma senha ou qualquer informação confidencial: o texto que ele entra é mascarado por balas:



O widget de senha

Enquanto o texto inserido no usuário é mascarado, o valor retornado pelo widget será claramente visível na saída padrão.

O widget de seleção de cores

Este é outro widget agradável. Ao usá -lo, podemos fazer o usuário escolher uma cor de uma paleta. Para executá -lo, usamos a zenidade com o --Seleção de cores opção. Podemos especificar a cor inicialmente selecionada usando --cor e forneça a cor como argumento. Aqui está um exemplo:



O widget de seleção de cores

Opcionalmente, podemos exibir a paleta de cores, com o --Paleta de show opção:

$ zenity-cor-seleção-cor de cor-show-palette



A paleta de widgets de seleção de cores

A cor selecionada pelo usuário será devolvida em rgb notação na saída padrão. Por exemplo, ao selecionar a cor vermelha, o seguinte será devolvido:

RGB (255,0,0)

O widget da lista

O próximo widget que vamos dar uma olhada, é o widget da lista. Com ele, é possível criar um diálogo de várias colunas e, opcionalmente. Para fazer a zenidade exibir esse tipo de diálogo, usamos o --lista opção e definir as colunas e seu conteúdo; Se omitirmos, o comando falhará:

$ zenity -Lista sem títulos de coluna especificados para diálogo de lista.
cópia de

Para definir um cabeçalho de coluna, usamos o --coluna opção e forneça uma string como argumento. Repitamos o comando para cada coluna que queremos criar:

$ Zenity -List -Seleção da coluna -Distribuição da coluna

Com o comando acima, criamos duas colunas, com os cabeçalhos "seleção" e "distribuição". Agora vamos fornecer ao usuário uma série de fileiras, cada uma delas representando uma distribuição Linux. Na primeira coluna de cada linha, colocaremos uma caixa de seleção para permitir que o usuário selecione a entrada correspondente:



$ Zenity -List -Seleção da coluna -Distribuição da coluna Falsa Debian True Fedora -Radiolista

Cada string que fornecemos após a definição de colunas estão associados às colunas, dependendo de sua ordem de aparência. Como você pode ver, criamos duas linhas. Na primeira coluna de cada linha, fornecemos um valor: usamos FALSO para que a caixa de seleção ou botão de rádio correspondente não seja selecionado quando o widget é exibido e verdadeiro Para definir a entrada como sinalizada por padrão. Aqui está o widget gerado:



O widget da lista

Quando clicamos no botão "OK" e executamos nossa seleção, o valor associado à linha será relatado na saída padrão. Se quisermos deixar o usuário selecionar várias linhas, podemos usar o --lista de controle Opção: o | O caractere será usado para separar os valores selecionados.

Conclusões

Neste tutorial, aprendemos a saber Zenidade, Um utilitário que nos permite usar diálogos gráficos em nossos scripts de shell. Vimos quais são as opções genéricas que podemos usar com todos os widgets, como --largura e --altura, e aprendemos a usar alguns dos widgets mais úteis que podemos gerar com o programa. Para aprender mais sobre Zenidade você pode consultar sua manpra!

Tutoriais do Linux relacionados:

  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Mastering Bash Script Loops
  • Coisas para instalar no Ubuntu 20.04
  • Loops aninhados em scripts de basquete
  • Mint 20: Melhor que o Ubuntu e o Microsoft Windows?
  • Manipulando a entrada do usuário em scripts bash
  • Coisas para fazer depois de instalar o Ubuntu 20.04 fossa focal linux
  • Tutorial de depuração do GDB para iniciantes
  • Arquivos de configuração do Linux: os 30 primeiros mais importantes
  • Sistema Linux Hung? Como escapar para a linha de comando e…