GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo crear cuadros de diálogo GUI en Bash Scripts con Zenity en Linux y Unix

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

abrir SUSE:

$ 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 . 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.

  1. La línea que contiene solo el número con el echo comando se considerará como el porcentaje del progreso.
  2. La línea que comienza con # símbolo en el echo 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.


Linux
  1. Cómo crear una copia de seguridad con el comando tar en Linux

  2. Agregar una GUI simple a los scripts de shell de Linux con kdialog

  3. Cómo crear scripts Bash usando variables externas y scripts incrustados

  4. Cómo instalar Linux KVM y crear una VM invitada con ejemplos

  5. Cómo crear y lanzar contenedores LXC Linux con comandos LXC

Cómo crear un grupo de volúmenes en Linux con LVM

Cómo crear documentos con scripts Bash

Cómo usar el comando echo en Bash Scripts en Linux

Cómo crear y usar un archivo de intercambio en Linux

Cómo crear una base de datos y agregar una colección con MongoDB GUI Compass

Cómo ejecutar aplicaciones GUI de Linux en Windows 10 con WSL y WSLg