Cuando se trata de secuencias de comandos bash, todas las secuencias de comandos se centran principalmente en la operación de línea de comandos. Ya sea que necesite información del usuario o mostrar algunos mensajes, todo se hace a través de la terminal. La mayoría de las personas que escriben scripts usando Bash no tienen idea de que hay un conjunto de herramientas GUI disponibles. En este artículo, veremos una de esas herramientas llamada Zenity. - un programa simple que le permite crear cuadros de diálogo gráficos (GTK+) en scripts de línea de comandos y shell.
¿Qué es Zenity?
Zenity es una reescritura de gdialog, el puerto de diálogo de GNOME que le permite crear un conjunto de widgets para diferentes operaciones donde los usuarios pueden interactuar con el script gráficamente. Los widgets se basan en el kit de herramientas GTK.
Zenity es un programa de código abierto escrito con C lenguaje de programación. Es compatible con Linux, BSD y Windows.
Sin más preámbulos, veamos cómo mostrar cuadros de diálogo gráficos de GTK+ desde la línea de comandos y scripts de shell usando Zenity.
Cómo instalar Zenity en Linux
Primero, verifique si zenity está instalado y disponible para usar ejecutando los siguientes comandos:
$ which zenity /usr/bin/zenity
$ zenity --version 3.32.0
$ zenity --about
Si zenity no está instalado en su distribución, ejecute los siguientes comandos según su distribución para instalarlo.
Linux alpino:
$ sudo apk add zenity
Arco Linux:
$ sudo pacman -S zenity
Fedora, RHEL, CentOS, Alma Linux y Rocky Linux:
$ sudo dnf install zenity
Debian, Ubuntu, Linux Mint, Pop OS:
$ sudo apt install zenity
$ sudo zypper install zenity
1. Ayuda de Zenity y opciones comunes
Para cada widget, hay una opción de ayuda asociada a través de la cual puede obtener un conjunto de opciones compatibles.
Ejecute el siguiente comando para acceder a la sección de ayuda.
$ zenity --help
Hay algunas opciones comunes que se pueden usar junto con cualquier widget. Estas no son opciones obligatorias, pero si se usan, lo aprovecharán para modificar el comportamiento del widget.
Para obtener la lista de opciones comunes, ejecute el siguiente comando.
$ zenity --help-general
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 mostrará 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
Para acceder a la lista de opciones admitidas para el cuadro de diálogo de error, ejecute el siguiente comando:
$ zenity --help-error
Para mostrar el cuadro de diálogo de error en la secuencia de comandos, use el siguiente comando. Aquí, el --error
flag creará el cuadro de diálogo de error y --text
flag imprimirá 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."
También puede ver en la imagen de arriba, algunas de las opciones comunes como --width, --height se usan para controlar la geometría del cuadro de diálogo. La marca --title se usa para imprimir la barra de diálogo con el título.
2.2. Cuadro de diálogo de advertencia
Para acceder a la lista de opciones admitidas para el cuadro de diálogo de advertencia, ejecute el siguiente comando:
$ zenity --help-warning
Usa --warning
marca en el script para mostrar el cuadro de advertencia y --text
bandera para mostrar el mensaje de advertencia.
zenity --warning \ --title "Warning Message" \ --width 500 \ --height 100 \ --text "Disk space exceeded the threshold limit. Check ASAP."
2.3. Cuadro de diálogo de información
Para acceder a la lista de opciones admitidas para el cuadro de diálogo de información, ejecute el siguiente comando:
$ zenity --help-info
Usar --info
bandera en el script para mostrar el cuadro de información y --text
bandera para mostrar el mensaje de información.
zenity --info \ --title "Info Message" \ --width 500 \ --height 100 \ --text "Installation completed successfully."
2.4. Cuadro de diálogo de preguntas
Para acceder a la lista de opciones admitidas para el cuadro de diálogo de preguntas, ejecute el siguiente comando:
$ zenity --help-question
El cuadro de diálogo de la pregunta mostrará un mensaje junto con un Sí. o No opción. Si presiona "Sí" , el código de retorno será "cero" y para "No" el código de retorno será "uno" . Tienes que usar los códigos de salida para escribir más lógica en tus scripts.
zenity --info \ --title "Info Message" \ --width 500 \ --height 100 \ --text "Installation completed successfully."
3. Cuadro de diálogo de entrada de texto
Para acceder a la lista de opciones admitidas para el cuadro de diálogo de entrada de texto, ejecute el siguiente comando:
$ zenity --help-entry
El cuadro de diálogo de entrada de texto solicita la entrada para el usuario. La bandera --entry
que se utilizará para crear un cuadro de diálogo de entrada. Para mostrar algo de texto en el cuadro de diálogo, use el --text
bandera. El valor ingresado en el cuadro de texto se imprimirá en la terminal una vez que presione ok. Debe almacenar la salida en una variable si desea seguir procesando la entrada desde el cuadro de texto como hice a continuación.
$ USR=$(zenity --entry \ --width 500 \ --title "check user" \ --text "Enter the user name"); echo $USR
Si no desea que el texto de entrada sea visible al escribir, use --hide-text
bandera.
$ USR=$(zenity --entry \ --width 500 \ --title "check user" \ --text "Enter the user name" \ --hide-text); echo $USR
También puede establecer un valor predeterminado dentro del cuadro de entrada usando --entry-text
bandera. Debe eliminar el valor y proporcionar su entrada o el valor existente se tomará como predeterminado.
$ USR=$(zenity --entry \ --width 500 \ --title "check user" \ --text "Enter the user name" \ --entry-text $USER); echo $USR
4. Cuadro de diálogo de contraseña
Para acceder a la lista de opciones admitidas para el cuadro de diálogo de contraseña, ejecute el siguiente comando:
$ zenity --help-password
El cuadro de diálogo de contraseña aceptará el nombre de usuario y la contraseña utilizando --username
y --password
bandera. La salida se mostrará 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
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 imprimirá cualquier texto de un archivo o abrirá una URL en el cuadro de diálogo. Por ejemplo, para leer un archivo y mostrar el texto, use la marca --filename
. En el siguiente ejemplo, estoy leyendo /etc/hosts
archivo.
zenity --text-info \
--title "Hostname Information" \
--filename "/etc/hosts"
El --checkbox
bandera se puede utilizar para obtener información del usuario. Un buen ejemplo sería "Aceptar acuerdo de licencia". A menos que seleccione la casilla de verificación, el botón Aceptar estará deshabilitado.
zenity --text-info \
--title "Hostname Information" \
--filename "/etc/hosts" \
--checkbox "This is a checkbox"
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
El cuadro de diálogo del calendario mostrará un calendario y le permitirá elegir una fecha. Debe almacenar 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."
De forma predeterminada, se selecciona la fecha de hoy, pero también podemos seleccionar 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
El formato de salida predeterminado será DD\MM\YY
. También es posible crear una salida de fecha personalizada usando --date-format
bandera.
zenity --calendar \ --title="Select a Date" \ --text="Select Date to pull the employee record." \ --date-format %m-%d-%y
7. Cuadro de diálogo de selección de color
Para acceder a la lista de opciones admitidas para el cuadro de diálogo de selección de color, ejecute el siguiente comando:
$ zenity --help-color-selection
El cuadro de diálogo de selección de color mostrará una paleta y le permitirá elegir un color y la salida será un valor RGB. Utilice --color-selection
bandera junto con --show-palette
bandera.
$ COLOR_RGB=$(zenity --color-selection --show-palette) $ echo $COLOR_RGB
8. Cuadro de diálogo de selección de archivos
Para acceder a la lista de opciones admitidas para el cuadro de diálogo de selección de archivos, ejecute el siguiente comando:
$ zenity --help-file-selection
El cuadro de diálogo de selección de archivos le permitirá seleccionar archivos o directorios y la ruta se muestra como salida. La bandera --file-selection
debería ser usado. Hay un par de indicadores que se pueden usar en el cuadro de diálogo de selección de archivos.
--filename
=> Ruta al archivo/directorio predeterminado--directory
=> Solo directorios para ser seleccionados--multiple
=> Permite elegir varios nombres de archivo--save
=> Establecer en modo de ahorro
zenity --file-selection \ --title "Select Files" \ --filename "/home/${USER}/" \ --multiple
En caso de selecciones múltiples, la ruta del archivo se separará usando el "|"
símbolo.
Es posible establecer un separador personalizado usando --separator
bandera. En el siguiente ejemplo, estoy usando dos puntos (:
) como separador.
zenity --file-selection \ --title "Select Files" \ --filename "/home/${USER}/" \ --multiple \ --separator :
9. Cuadro de diálogo de formularios
Para acceder a la lista de opciones admitidas para el cuadro de diálogo de formularios, ejecute el siguiente comando:
$ zenity --help-forms
El cuadro de diálogo de formularios le permite crear formularios. Un buen ejemplo es el formulario de registro de nuevos usuarios. Usar --forms
marca para crear un cuadro de diálogo de formulario. Hay algunas banderas adicionales que se pueden usar junto con --forms
bandera.
--add-entry
=> Agregue una nueva entrada en el cuadro de diálogo del formulario para que el usuario ingrese 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 elija una fecha de él.
A continuación se muestra un ejemplo simple de un formulario de registro de usuario utilizando 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"
El separador predeterminado para los valores de entrada es "|"
símbolo. También puede personalizar el separador usando --separator
bandera.
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
Usa --progress
bandera para crear una barra de progreso. Para crear una barra de progreso, debe comprender cómo funciona. Se deben proporcionar dos entradas de su parte.
- La línea que contiene solo el número con el
echo
comando se considerará como el porcentaje del progreso. - La línea que comienza con
#
símbolo en elecho
El comando se imprimirá como el 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
Una vez que se completa la barra de progreso, puede hacer que un cuadro de diálogo se cierre automáticamente usando el indicador --auto-close.
11. Cuadro de diálogo Lista
Para acceder a la lista de opciones admitidas para el cuadro de diálogo de lista, ejecute el siguiente comando:
$ zenity --help-list
El cuadro de diálogo de lista le permite crear una lista de filas y columnas. Usa --list
bandera para crear cuadro de diálogo de lista y --column
bandera para agregar columnas.
$ zenity --list \ --column "Player" \ --column "Club" \ --column "Country" \ Messi PSG Argentina \ Neymar PSG Brazil \ Ronaldo Manu Portugal
Echa un vistazo al ejemplo anterior. Usando la --column
bandera, he creado tres columnas. Después de crear las columnas, puede ingresar el valor en las siguientes líneas que se mostrarán para cada fila como lo hice en la imagen de arriba.
En la primera columna, se pueden crear casillas de verificación o botones de opción. Para crear un botón de radio, use --radiolist
marca y para crear una casilla de verificación, use --checklist
bandera. Al crear una lista de radio, es obligatorio agregar TRUE o FALSO palabras clave como el primer valor de su fila. True seleccionará la lista de radio o la casilla de verificación, mientras que false dejará la casilla sin seleccionar.
zenity --list \ --checklist \ --column "checkbox" \ --column "Player" \ --column "Club" \ --column "Country" \ FALSE Messi PSG Argentina \ FALSE Neymar PSG Brazil \ FALSE Ronaldo Manu Portugal
Cuando seleccione la fila y haga clic en Aceptar, el valor se imprimirá en el terminal con (|
) como separador. De forma predeterminada, solo la primera columna se imprime en el terminal. Para imprimir la fila completa, pase --print-column ALL
.
Conclusión
Hemos llegado al final del artículo. He explicado brevemente qué es zenity y los diferentes widgets disponibles para usar. Es posible que no necesite utilidades GUI todo el tiempo. Sin embargo, cuando necesite widgets gráficos GTK+ en secuencias de comandos de bash, Zenity será útil entre otras herramientas GUI.