Tutoriales

Zenity: creación de cuadros de diálogo GUI en scripts Bash

Cuando se trata de secuencias de comandos bash, todas las secuencias de comandos se centran principalmente en la operación de la línea de comandos. Ya sea que necesite información del usuario o ver algunos mensajes, todo se hace a través del terminal. La mayoría de las personas que utilizan scripts con Bash no tienen idea de que existen varias herramientas GUI. En este artículo vamos a hablar sobre una de esas herramientas llamada Cenit – un programa simple que le permite crear cuadros de diálogo gráficos (GTK +) en la línea de comandos y scripts de shell.

Que es zenity

Zenity es una reescritura de gdialog, el puerto GNOME de Dialog que le permite crear una serie de widgets para diversas operaciones donde los usuarios pueden interactuar gráficamente con el script. Los widgets se basan en el kit de herramientas GTK.

Zenity es un programa de código abierto que fue coescrito C. Lenguaje de programación. Es compatible con Linux, BSD y Windows.

Sin más preámbulos, veamos cómo usar Zenity para mostrar cuadros de diálogo gráficos GTK + desde la línea de comandos y los scripts de shell.

Cómo instalar Zenity en Linux

Primero, verifique que Zenity esté instalado y disponible ejecutando los siguientes comandos:

$ which zenity
/usr/bin/zenity
$ zenity --version
3.32.0
$ zenity --about
Sobre Zenity

Si zenity no está instalado en su distribución, dependiendo de la distribución, ejecute los siguientes comandos para instalarlo.

Linux alpino:

$ sudo apk add zenity

Arch Linux:

$ sudo pacman -S zenity

Fedora, RHEL, CentOS, Alma Linux y Rocky Linux:

$ sudo dnf install zenity

Debian, Ubuntu, Linux Mint, sistema operativo Pop:

$ sudo apt install zenity

openSUSE:

$ sudo zypper install zenity

1. Ayuda de Zenity y opciones generales

Cada widget tiene una opción de ayuda asociada que le brinda una variedad de opciones compatibles.

Ejecute el siguiente comando para acceder al área de ayuda.

$ zenity --help

Hay algunas opciones generales que se pueden usar con cualquier widget. Estas no son opciones obligatorias, pero cuando se utilizan, puede cambiar el comportamiento del widget.

Para obtener la lista de opciones generales, ejecute el siguiente comando.

$ zenity --help-general
Opciones generales de Zenity

Veremos cómo funcionan estas opciones en las próximas secciones.

2. Cuadro de diálogo de mensaje

Un cuadro de diálogo de mensaje muestra un cuadro de diálogo de error, advertencia, información y pregunta. Dependiendo de la situación, debe usar el cuadro de diálogo apropiado en el script.

2.1. Cuadro de diálogo de error

Ejecute el siguiente comando para acceder a la lista de opciones admitidas para el cuadro de diálogo de error:

$ zenity --help-error

Utilice el siguiente comando para mostrar el cuadro de diálogo de error en el script. Aquí que --error Bandera crea el cuadro de diálogo de error y --text bandera imprime el mensaje de texto. Puede ver en la imagen que hay un icono de error asociado con el cuadro de diálogo.

zenity --error 
       --title "Error Message" 
       --width 500 
       --height 100 
       --text "Permission denied. Run with sudo or as root user."
Cuadro de diálogo de error
Cuadro de diálogo de error

También puede ver en la imagen de arriba que algunas de las opciones comunes como –width, –height se utilizan para controlar la geometría del cuadro de diálogo. La bandera –title se usa para imprimir la barra de diálogo con el título.

2.2. Cuadro de diálogo de advertencia

Ejecute el siguiente comando para acceder a la lista de opciones admitidas para el cuadro de diálogo de advertencia:

$ zenity --help-warning

Usar --warning Marcar en el script para mostrar el cuadro de advertencia y --text Marcar para mostrar el mensaje de advertencia.

zenity --warning 
       --title "Warning Message" 
       --width 500 
       --height 100 
       --text "Disk space exceeded the threshold limit. Check ASAP."
Cuadro de diálogo de advertencia
Cuadro de diálogo de advertencia

2.3. Acerca del cuadro de diálogo

Para acceder a la lista de opciones admitidas para el cuadro de diálogo Acerca de, ejecute el siguiente comando:

$ zenity --help-info

Usar --info Marcar en el script para mostrar el cuadro de información y --text Marcar para mostrar el mensaje de información.

zenity --info 
       --title "Info Message" 
       --width 500 
       --height 100 
       --text "Installation completed successfully."
Acerca del cuadro de diálogo
Acerca del cuadro de diálogo

2.4. Diálogo de pregunta

Ejecute el siguiente comando para acceder a la lista de opciones admitidas para el cuadro de diálogo de la pregunta:

$ zenity --help-question

El diálogo de pregunta muestra un mensaje junto con un. a sí señor o no Oportunidad. Cuando presionas «Sí señor», el código de retorno es «Cero» y para «No» el código de retorno es «uno». Necesita usar los códigos de salida para escribir más lógica en sus scripts.

zenity --info 
       --title "Info Message" 
       --width 500 
       --height 100 
       --text "Installation completed successfully."
Diálogo de pregunta
Diálogo de pregunta

3. Cuadro de diálogo de entrada de texto

Para acceder a la lista de opciones de diálogo de entrada de texto admitidas, ejecute el siguiente comando:

$ zenity --help-entry

El cuadro de diálogo de ingreso de texto solicita al usuario que ingrese. La bandera --entry para crear un diálogo de entrada. Para mostrar texto en el cuadro de diálogo, utilice el --text Bandera. El valor ingresado en el campo de texto se imprime en el terminal tan pronto como presione OK. Deberá guardar la salida en una variable si desea seguir procesando la entrada del cuadro de texto como lo hice a continuación.

$ USR=$(zenity --entry 
       --width 500 
       --title "check user" 
       --text "Enter the user name"); echo $USR
Cuadro de diálogo de entrada de texto
Cuadro de diálogo de entrada de texto

Si no desea que el texto que escribió sea visible mientras escribe, utilice el --hide-text Bandera.

$ USR=$(zenity --entry 
       --width 500 
       --title "check user" 
       --text "Enter the user name" 
       --hide-text); echo $USR
Ocultar texto de entrada
Ocultar texto de entrada

También puede establecer un valor predeterminado dentro del campo de entrada escribiendo el --entry-text Bandera. Debe eliminar el valor y realizar sus entradas; de lo contrario, el valor existente se utilizará como valor predeterminado.

$ USR=$(zenity --entry 
       --width 500 
       --title "check user" 
       --text "Enter the user name" 
       --entry-text $USER); echo $USR
Valor predeterminado para el texto de entrada
Valor predeterminado para el texto de entrada

4. Cuadro de diálogo «Contraseña»

Ejecute el siguiente comando para acceder a la lista de opciones de diálogo de contraseña admitidas:

$ zenity --help-password

El cuadro de diálogo de contraseña acepta el nombre de usuario y la contraseña con la --username y --password Bandera. La salida se muestra como (Nombre de usuario | Contraseña). Debe asignar la salida del comando a una variable y extraer el nombre de usuario y la contraseña para su posterior procesamiento.

$ zenity --password --username
Caja de diálogo
Cuadro de diálogo de contraseña

5. Cuadro de diálogo de información de texto

Para acceder a la lista de opciones admitidas para el cuadro de diálogo de información de texto, ejecute el siguiente comando:

$ zenity --help-text-info

El cuadro de diálogo de información de texto imprime cualquier texto de un archivo o abre una URL en el cuadro de diálogo. Por ejemplo, para leer un archivo y mostrar el texto, use la bandera --filename. En el siguiente ejemplo, estoy leyendo el /etc/hosts Expediente.

zenity --text-info 
--title "Hostname Information"
--filename "/etc/hosts"
Leer de archivo
Leer de archivo

los --checkbox La bandera se puede utilizar para obtener información del usuario. Un buen ejemplo sería «Aceptar acuerdo de licencia». Si no selecciona la casilla de verificación, el botón Aceptar está desactivado.

zenity --text-info 
--title "Hostname Information"
--filename "/etc/hosts"
--checkbox "This is a checkbox"
Uso de casillas de verificación
Uso de casillas de verificación

6. Cuadro de diálogo Calendario

Para acceder a la lista de opciones admitidas para el cuadro de diálogo del calendario, ejecute el siguiente comando:

$ zenity --help-calendar

Aparece un calendario en el cuadro de diálogo del calendario y puede elegir una fecha. Debe guardar la salida en una variable, de lo contrario la fecha seleccionada se imprimirá en el terminal.

zenity --calendar 
       --title="Select a Date" 
       --text="Select Date to pull the employee record."
Caja de diálogo
Cuadro de diálogo Calendario

De forma predeterminada, se selecciona la fecha de hoy, pero también podemos elegir una fecha personalizada usando --day, --month, y --year Banderas.

zenity --calendar 
       --title="Select a Date" 
       --text="Select Date to pull the employee record." 
       --year 2015 
       --month 7 
       --day 15
Fecha personalizada, mes, año
Fecha personalizada, mes, año

El formato de salida estándar es DDMMYY. También es posible crear una salida de fecha personalizada utilizando el --date-format Bandera.

zenity --calendar 
       --title="Select a Date" 
       --text="Select Date to pull the employee record." 
       --date-format %m-%d-%y
Formato de salida personalizado
Formato de salida personalizado

7. Cuadro de diálogo de selección de color

Ejecute el siguiente comando para acceder a la lista de opciones admitidas para el cuadro de diálogo del selector de color:

$ zenity --help-color-selection

El diálogo de selección de color muestra una paleta y le permite elegir un color y la salida será un valor RGB. Usar --color-selection Marcar junto con --show-palette Bandera.

$ COLOR_RGB=$(zenity --color-selection --show-palette)
$ echo $COLOR_RGB
Diálogo de selección de color
Diálogo de selección de color

8. Cuadro de diálogo de selección de archivos

Ejecute el siguiente comando para acceder a la lista de opciones admitidas para el cuadro de diálogo de selección de archivos:

$ zenity --help-file-selection

En el cuadro de diálogo de selección de archivos, puede seleccionar archivos o directorios y la ruta se muestra como salida. La bandera --file-selection debería ser usado. Hay algunas banderas que se pueden utilizar en el cuadro de diálogo de selección de archivos.

  • --filename => Ruta al archivo / directorio estándar
  • --directory => Seleccionar directorios solamente
  • --multiple => Permite seleccionar varios nombres de archivos
  • --save => Establecer en modo económico
zenity --file-selection 
       --title "Select Files" 
       --filename "/home/$USER/" 
       --multiple
Seleccionar archivos
Seleccionar archivos

En el caso de selección múltiple, la ruta del archivo con el "|" Símbolo.

Separador de salida
Separador de salida

Es posible utilizar un separador personalizado con el --separator Bandera. En el siguiente ejemplo estoy usando Colon (:) como separador.

zenity --file-selection 
       --title "Select Files" 
       --filename "/home/$USER/" 
       --multiple 
       --separator :
Separador personalizado
Separador personalizado

9. Cuadro de diálogo Formularios

Ejecute el siguiente comando para acceder a la lista de opciones admitidas para el cuadro de diálogo Formularios:

$ zenity --help-forms

Puede crear formularios en el cuadro de diálogo de formularios. Un buen ejemplo es el formulario de registro de nuevo usuario. Usar --forms Marcar para crear un cuadro de diálogo de formulario. Hay un par de indicadores adicionales que se pueden utilizar junto con el --forms Bandera.

  • --add-entry => Agregue una nueva entrada en el cuadro de diálogo del formulario para que el usuario pueda ingresar la entrada.
  • --text => Texto que se mostrará en el cuadro de diálogo.
  • --add-password => Acepta la contraseña, pero no muestra el valor en la pantalla.
  • --calendar => Abra el calendario y seleccione una fecha.

A continuación se muestra un ejemplo simple de un formulario de registro de usuario que utiliza el cuadro de diálogo de formularios.

zenity --forms 
       --text "Welcome to signup wizard" 
       --add-entry "Enter the first name" 
       --add-entry "Enter the last name" 
       --add-entry "Enter login name" 
       --add-password "Enter password"
Caja de diálogo
Cuadro de diálogo Formularios: inicio de sesión de usuario

El separador estándar para los valores de entrada es "|" Símbolo. También puede utilizar un separador personalizado escribiendo --separator Bandera.

Separador estándar
Separador estándar

10. Cuadro de diálogo de progreso

Para acceder a la lista de opciones admitidas para el cuadro de diálogo de la barra de progreso, ejecute el siguiente comando:

$ zenity --help-progress

Usar --progress Marcar para crear una barra de progreso. Para crear una barra de progreso, debe comprender cómo funciona. Deben proporcionarse dos entradas de su parte.

  1. La línea que contiene solo el número con el echo El comando se considera un porcentaje de progreso.
  2. La línea que comienza con # Símbolo en echo El comando se imprime como un mensaje de progreso.
(
  echo 10
  echo "# Updating repository Index"
  sleep 5

  echo 15
  echo "# Reading input files"
  sleep 5

  echo 70
  echo "# Installing packages..."
  sleep 5

  echo 100
  echo "# Package Installation completed!"
) | zenity --title "Package Installation Progress Bar" --progress --auto-close
Diálogo de la barra de progreso
Diálogo de la barra de progreso

Una vez que se completa la barra de progreso, puede cerrar automáticamente un cuadro de diálogo con la marca –auto-close.

11. Cuadro de diálogo de lista

Para acceder a la lista de opciones admitidas para el cuadro de diálogo de la lista, ejecute el siguiente comando:

$ zenity --help-list

En el cuadro de diálogo de lista puede crear una lista de filas y columnas. Usar --list Marcar para crear un cuadro de diálogo de lista y --column Marcar para agregar columnas.

$ zenity --list 
      --column "Player" 
      --column "Club" 
      --column "Country" 
      Messi PSG Argentina 
      Neymar PSG Brazil 
      Ronaldo Manu Portugal
Cuadro de lista
Cuadro de lista

Eche un vistazo al ejemplo anterior. Uso de --column bandera, creé tres columnas. Después de crear las columnas, puede ingresar el valor en las siguientes filas que se mostrarán para cada fila como lo hice en la imagen de arriba.

Se pueden crear casillas de verificación o botones de opción en la primera columna. Para crear un botón de radio, use --radiolist Marcar y usar para crear una casilla de verificación --checklist Bandera. Al crear una lista de radio, es esencial agregar CIERTO o INCORRECTO Palabras clave como primer valor de su línea. Verdadero habilita la lista de radio o la casilla de verificación, mientras que falso deja la casilla de verificación sin marcar.

zenity --list 
      --checklist 
      --column "checkbox" 
      --column "Player" 
      --column "Club" 
      --column "Country" 
      FALSE Messi PSG Argentina 
      FALSE Neymar PSG Brazil 
      FALSE Ronaldo Manu Portugal
Lista de Verificación
Lista de Verificación

Cuando selecciona la fila y hace clic en Aceptar, el valor se muestra con (|) como separador. De forma predeterminada, solo la primera columna se imprime en el terminal. Para imprimir la línea completa, pase --print-column ALL.

diploma

Hemos llegado al final del artículo. Expliqué brevemente qué es Zenity y qué diferentes widgets se pueden usar. Es posible que no siempre necesite utilidades de GUI. Sin embargo, si necesita widgets gráficos GTK + para scripts bash, Zenity será útil junto con otras herramientas GUI.

Recurso:

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba