Linux Scripts · 6 min read · Jan 22, 2026

Adicionando uma GUI Simples a Scripts de Shell Linux com kdialog

Scripts de shell são coisas incrivelmente úteis. Eles permitem que você faça algo tão básico quanto criar um comando fácil para substituir um mais difícil com muitas opções, até agrupar muitos comandos complexos para serem executados a partir de um cron job. Eles são ótimos porque você pode rapidamente executá-los em seu terminal favorito, mas em alguns casos, eles exigem que você se lembre de combinações específicas de opções. Se você se encontrar nessa situação, pode adicionar alguns diálogos GUI simples para ajudá-lo a acelerar sua tarefa.

Para aproveitar este tutorial, você precisará do seguinte:

  • Acesso a um shell semelhante ao Unix (este é escrito com bash em mente).
  • macOS e sistemas operacionais *nix (como Linux) devem vir com isso ou algo semelhante.
  • No Windows, você pode instalar o ambiente CygWin, ou nas versões mais recentes do Windows 10 usar o “Subsistema Windows para Linux”
  • As bibliotecas básicas para o ambiente de desktop KDE. Você não precisa de tudo, especialmente se já tiver outro DE instalado.

Instalar o kdialog deve ser necessário apenas se você começou com um ambiente de desktop diferente do KDE, e não tem outros aplicativos KDE em sua máquina. Ele faz parte do pacote kde-baseapps-bin no Ubuntu, o que significa que está instalado por padrão no Kubuntu. Em outros derivados, você pode instalá-lo com o seguinte comando no terminal:

Instalando kdialog a partir do terminal.

sudo apt-get install kde-baseapps-bin

Isso provavelmente resultará em uma instalação considerável, já que outras bibliotecas e pacotes KDE serão instalados junto com ele. Mas, ei, espaço em disco é barato, certo?

Como os scripts são (em geral) supostos a fazer coisas automaticamente, só precisaremos mostrar este diálogo nas seguintes situações:

  • Se precisarmos capturar algum tipo de entrada do usuário, ou;
  • Se quisermos mostrar ao usuário algum tipo de feedback de maneira notável (ou seja, não apenas algum texto jogado na linha de comando).

Vamos pegar o exemplo de usar um comando para [fazer backup do seu site Drupal usando drush]. Claro, como você é um empreendedor da Internet em ascensão, você não tem apenas um site Drupal—? você tem três. Você preferiria não ter que executar comandos separados quando quiser fazer backup de todos os seus sites, mas ao mesmo tempo não quer ter que lembrar um caminho longo se quiser tirar uma cópia de apenas um. Podemos usar alguns diálogos para nos ajudar:

  • Apresentar ao usuário uma lista de sites que podemos fazer backup, e pedir que ele faça uma escolha, e;
  • Mostrar ao usuário uma mensagem confirmando o resultado, seja um sucesso ou uma falha.

kDialog funciona chamando-o na linha de comando junto com um tipo de diálogo, quaisquer parâmetros que esse tipo possa exigir e quaisquer outras opções, como um título de diálogo.

Há uma boa variedade de tipos de diálogo para escolher, dependendo de suas necessidades, conforme segue:

Tipos de kDialog

Tipo de DiálogoImagem de ExemploDescrição
Caixas de Mensagem de InformaçãoExibe uma caixa com um botão “OK” para fechar, fornecendo uma mensagem de texto e um ícone de informação, aviso ou erro “não crítico”.
Pop-up PassivoIsso exibe uma mensagem que desaparecerá dentro de alguns segundos, ou seja, não requer que o usuário a feche ou a descarte.
Caixa de Mensagem Sim/NãoComo as “Caixas de Mensagem de Informação”, isso exibe um diálogo com um ícone de informação/aviso/erro que também fornecerá a seleção do usuário de “Sim” ou “Não”.
Caixas de Diálogo de EntradaIsso fornece uma única caixa na qual o usuário pode digitar algum texto.
Caixas de Exibição de ArquivoIsso exibirá o conteúdo de um arquivo (texto simples) dentro de uma caixa de diálogo.
Caixas de Diálogo de Menu e SeleçãoIsso fornece um diálogo com uma lista de itens, permitindo que o usuário faça uma ou mais seleções: - Os Diálogos de Menu e Radiolist permitem a seleção de uma opção. - O Diálogo de Checklist permite a seleção de uma, múltiplas ou todas as opções. - O Diálogo de Combobox permite a seleção de uma opção usando um menu suspenso.
Caixas de Diálogo de Seleção de ArquivoO usuário pode selecionar parte do sistema de arquivos, incluindo: - Selecionar arquivos existentes, com a capacidade de filtrar por nome ou tipo de arquivo - Inserir um novo nome de um novo arquivo a ser salvo/atualizado - Diretórios
Diálogos de ProgressoO usuário pode combinar kDialog com o comando dcop para criar um diálogo que atualiza o usuário sobre o progresso de uma operação.

Olhando as opções acima, duas delas se destacam como tendo potencial:

  • O “Diálogo de Checklist” nos permitirá selecionar um, ou todos, os nossos sites para fazer backup.
  • A “Caixa de Mensagem de Informação” pode ser usada para exibir se cada um deles teve sucesso ou falhou.

Dadas essas opções, podemos imaginar nosso script parecendo algo assim:

SITE1 está localizado AQUI (faça esses caminhos completos, não caminhos relativos)
SITE2 está localizado ALI
SITE3 está localizado EM OUTRO LUGAR

display a kDialog com SITE1, SITE2 e SITE3 como opções
    e me diga qual(is) o usuário escolheu

para cada um que o usuário escolheu:
    execute +drush ard+ nesse site, e
    registre se foi bem-sucedido ou não.

display outro +kDialog+ com cada um desses resultados.

Com isso em mente, vamos mergulhar.

A primeira coisa que devemos fazer é montar o comando drush que queremos aplicar a cada site quando ele for selecionado. Suponha que todos os sites estejam no mesmo host da web em diretórios diferentes, mas queremos armazenar os backups em um diretório comum “backup”. Podemos usar o seguinte:

cd SITE
drush ard --destination=/home/user/backup/SITENAME.tar.gz

Então, usando seu conhecimento sobre definição de variáveis e loops for, podemos fazer este script da seguinte forma:

#! /bin/bash

// Nota: crie variáveis para armazenar os caminhos de todos os sites
PERSONALSITE='/home/www/mypersonalsite/'
BUSINESSSITE='/home/www/mybusinesssite/'
HOBBYSITE='/home/www/myhobbysite/'

// Nota: crie uma variável para armazenar o caminho do destino
DESTINATION='/home/user/backup'

// Nota: exiba um diálogo perguntando ao usuário quais sites deseja fazer backup
CHOICES=$(kdialog --checklist "Selecione os sites para backup:" 1 "Site pessoal" off 2 "Site de negócios" off 3 "Site de hobby" off)

// Nota: registre uma mensagem de sucesso/falha para cada uma das escolhas retornadas do diálogo
for each in $CHOICES
do
    case {
        1)
            cd $PERSONALSITE
            drush ard --destination=$DESTINATION/mypersonalsite.tar.gz
            if [$?=="0"]
            then
                RESULTS += "Backup do site pessoal: Sucedido\n"
            else
                RESULTS += "Backup do site pessoal: Falhou\n"
            fi
        2)
            cd $BUSINESSSITE
            drush ard --destination=$DESTINATION/mybusinesssite.tar.gz
            if [$?=="0"]
            then
                RESULTS += "Backup do site de negócios: Sucedido\n"
            else
                RESULTS += "Backup do site de negócios: Falhou\n"
            fi
        3)
            cd $HOBBYSITE
            drush ard --destination=$DESTINATION/myhobbysite.tar.gz
            if [$?=="0"]
            then
                RESULTS += "Backup do site de hobby: Sucedido\n"
            else
                RESULTS += "Backup do site de hobby: Falhou\n"
            fi
    esac

// NOTA: exiba um diálogo com os resultados de todas as operações de backup.
kdialog --msgbox $RESULTS

Se salvarmos isso e fizermos como descrito no primeiro artigo da série Bash, poderemos executá-lo com um único comando, obter um diálogo fácil de usar para escolher nosso site e, em seguida, ver uma janela agradável relatando como tudo ocorreu.

Embora este script possa certamente ser otimizado de algumas maneiras, ele demonstra como você pode usar kdialog para coletar algumas entradas do usuário e exibir alguns resultados executando um único programa dentro do seu script.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.