Cómo usar widgets gráficos en scripts bash con zenity

Cómo usar widgets gráficos en scripts bash con zenity

Zenity es una utilidad muy útil que nos permite crear interfaces de usuario gráficas para nuestros scripts de shell. Existen varios widgets y se pueden usar invocando el programa con las opciones respectivas. Los widgets se basan en el Gtk Toolkit, y devuelve el resultado de la interacción del usuario en la salida estándar o como un código de retorno.

En este tutorial aprenderás:

  • ¿Cuáles son las opciones generales de Zenity?
  • ¿Cuáles son algunos de los widgets disponibles más útiles y cómo usarlos?



Requisitos y convenciones de software utilizados

Requisitos de software y convenciones de línea de comandos de Linux
Categoría Requisitos, convenciones o versión de software utilizada
Sistema Independiente de la distribución
Software La utilidad Zenity
Otro Familiaridad con el shell (bash en este caso) y conceptos como los códigos de subshell y de salida
Convenciones # - requiere que los comandos de Linux dados se ejecuten con privilegios raíz directamente como un usuario raíz o mediante el uso de sudo dominio
ps - Requiere que los comandos de Linux dados se ejecuten como un usuario regular no privilegiado

Instalación

El zenidad El paquete está incluido en los repositorios de todas las principales distribuciones de Linux, y puede estar instalado si está utilizando el GNOMO entorno de escritorio. Para instalarlo podemos usar nuestro administrador de paquetes de distribución favorito, en Fedora, Por ejemplo, podemos usar DNF:

$ sudo dnf instalación zenity


Cuando usamos distribuciones basadas en Debian y Debian como Ubuntu, podemos usar el comando apt-get:

$ sudo apt-get instalación zenity

Zenity ya está incluido en el Archlinux extra repositorio, por lo tanto, podemos instalarlo a través de Pacman:

$ sudo Pacman -S Zenity

Opciones genéricas

Antes de comenzar a ver algunos de los widgets más útiles proporcionados por zenidad, Debemos mencionar algunas de las opciones genéricas disponibles que podemos usar para cambiar el comportamiento del programa.

Los llamamos genéricos porque se pueden aplicar independientemente del widget elegido: --título, --viuda, --ancho, --altura y --se acabó el tiempo.

En primer lugar, tenemos el --título Opción: podemos usarlo para especificar un título para la ventana de diálogo. Del mismo modo, el --ventana Opción Especifiquemos un icono que se utilizará como icono para la ventana, y será visible, por ejemplo, en la barra de tareas. Para mostrar un icono en el widget, en su lugar, podemos usar el --nombre icónico opción y proporcionar uno de los nombres de iconos permitidos (aquí está la lista completa) como argumento. Para usar los iconos de stock proporcionados en los diálogos de error, información, pregunta o advertencia, por ejemplo, podemos especificar respectivamente: decretador de diálogo, info de diálogo, cuestión de diálogo o advertencia de diálogo.

El --ancho y --altura Las opciones se explican por sí mismas: nos permiten definir la geometría de nuestra ventana de diálogo.

Finalmente, usando el --se acabó el tiempo Opción Podemos establecer un tiempo de espera en segundos para el diálogo: después de la cantidad de tiempo especificada, se cerrará automáticamente.



Los widgets disponibles

Hay varios widget que podemos usar gracias a la zenity: cada uno de ellos tiene un propósito específico. Veamos algunos de ellos.

El widget del calendario

El widget del calendario mostrará un calendario y dejará que el usuario elija una fecha, seleccionando el mes, el día y el año. Los valores seleccionados se devolverán en el salida estándar. Para lanzar el calendario de widgets, todo lo que tenemos que invocar Zenity, con el --calendario opción:

$ Zenity - -Calendar

Podemos usar una serie de opciones para ajustar el comportamiento del widget, por ejemplo, usando --día, --mes, --año y proporcionar un EN T Como valor, podemos establecer, respectivamente, el día, mes y año predeterminados que se mostrarán en el widget. Para especificar un formato específico en el que se debe devolver la fecha seleccionada, podemos usar el --fecha opción y especifique el patrón en el Strftime estilo.



El widget del calendario

El widget de entrada

El widget de entrada es realmente útil cuando necesitamos pedirle al usuario algún texto. Digamos, por ejemplo, debemos pedirle al usuario que ingrese su nombre; Podemos ejecutar el siguiente comando:

$ Zenity --Entry -TITLE "Solicitud de nombre" - -Text "Ingrese su nombre:"


Aquí usamos el --título y --texto de entrada Opciones para personalizar, respectivamente, el título y la etiqueta que para el widget. Una vez que ejecutemos el comando anterior, aparecerá el widget:



El widget de entrada

El texto ingresado por el usuario se devolverá en la salida estándar.

Widget de selección de archivos

El widget de selección de archivos nos permite mostrar una buena interfaz gráfica para permitir que el usuario seleccione uno o más archivos. Tal como lo hicimos en los ejemplos anteriores, podemos usar una serie de opciones para modificar el comportamiento y la apariencia del diálogo. Uno de los más importantes es --Nombre del archivo que se puede usar para establecer el archivo/directorio que se seleccionará de forma predeterminada. Aquí hay una visión general rápida de las opciones y las funcionalidades que proporcionan:

Opciones de widget de selección de archivos de Zenity
Opción Función
-Nombre del archivo Establezca el directorio/archivo predeterminado que se seleccionará en el widget
-múltiple Habilite la capacidad de seleccionar varios archivos a la vez
-filtro de archivo Especificar un filtro para los nombres de archivo
-directorio Restringir la selección a directorios
-ahorrar Ejecute el widget en modo "Guardar".
-confirmar sobreescritura Solicite al usuario confirmación al sobrescribir un archivo existente
-separador Especifique un separador que se usará para separar rutas cuando múltiples archivos
están seleccionados

Veamos un ejemplo del uso del widget. Digamos que queremos dejar que el usuario seleccione múltiples archivos, y queremos el contenido del usuario $ Inicio directorio que se mostrará en el widget cuando se abre. Todo lo que tenemos que hacer es ejecutar el siguiente comando:

$ Zenity--file-selección --multiple--filename "$ home/"

Puedes notar que proporcionamos un / A la ruta: de esta manera se muestra el contenido del directorio, en lugar del directorio mismo. Aquí está nuestro widget:



El widget de selección de archivos

Una vez que hagamos clic en el botón "Aceptar", la ruta absoluta de los archivos seleccionados se devolverá en la salida estándar, separada por un personaje, que es predeterminado es |:

/Home/Egdoc/Downloads/A.txt |/home/egdoc/downloads/b.TXT

Podemos cambiar fácilmente el separador, proporcionando el personaje que queremos usar como argumento de la opción -Separador.

Si abrimos el diálogo en modo Asalvo, Se le pedirá al usuario que proporcione el nombre del archivo que desea guardar. Si el archivo existe y proporcionamos el --confirmar sobreescritura Opción, se le pedirá que confirme que quiere sobrescribirlo:

$ Zenity--file-selección --save--confirm-overwrite--filename "$ home/"

La ruta elegida se devolverá a la salida estándar, y seremos libres de usarla en nuestro script.

El widget de progreso

Otro widget interesante es el progreso: podemos lanzarlo usando invocando Zenity con el --progreso opción. Podemos usarlo, por ejemplo, para mostrar el progreso de las operaciones de larga ejecución. Estas son algunas de las opciones más útiles que podemos usar con el widget:

Opción Función
-porcentaje Establece el valor porcentual inicial de la barra de progreso
-auto cerrado Cierre automáticamente el diálogo cuando se complete el progreso
-matar automáticamente Mata el proceso de los padres si el diálogo está cerrado con la cancelación
botón
-no cancel No muestre el botón Cancelar

Aquí hay un ejemplo de cómo podemos usar el widget dentro de un script bash:



#!/bin/bash # # script ficmy para demostrar el widget de progreso de zenity! (echo 25 echo "# Configuración ..." Sleep 2 Echo 30 Echo "# Lectura de archivos ..." Sleep 2 Echo 70 Echo "# Creación de contenido ..." Sleep 1 Echo 100 Echo "# Hecho!") | Zenity-TITLE" Ejemplo de barra de progreso "--Progress --Auto-Kill
Copiar

El script anterior en realidad no realiza ninguna operación, pero es útil comprender cómo funciona el widget. Hay dos cosas principales que deben notarse en el código: en primer lugar, los comandos que se ejecutarán se envuelven entre paréntesis, por lo tanto, se ejecutan en un subshell: Esto es necesario para que el widget funcione correctamente; En segundo lugar, cuando hacemos eco de una línea que comienza con un número, esto se interpretará como el porcentaje de la barra de progreso.

De la misma manera, cuando hacemos eco de una línea que comienza con el # carácter, se utilizará como el texto que se mostrará en el widget. Aquí hay un video corto del script en acción:

Información, advertencia y widgets de error

Para mostrar información, advertencia o mensajes de error, podemos usar Zenity con el --información, --advertencia y --error opciones, respectivamente. En este caso usamos el --texto opción para especificar el mensaje. Aquí hay un ejemplo de una notificación:

$ Zenity - -Info --Width = 400 - -HEight = 200 - -Text "Esta es una notificación!"



El widget de notificación

Usar el widget de advertencia es igual de fácil:

$ Zenity - -Warning --Width = 400 - -HEight = 200 -Text "Esta es una advertencia!"



El widget de advertencia

Esto, en cambio, es un ejemplo de un mensaje de error:

$ Zenity --Error --Width = 400 - -HEight = 200 - -Text "Este es un error!"



El widget de error

El widget de la pregunta

Para hacerle una pregunta al usuario y obtener su respuesta, podemos usar el pregunta widget, invocar zenity con el --pregunta opción. Especificamos la pregunta utilizando el --texto opción, y defina las etiquetas de los botones 'OK' y 'Cancelar', utilizando respectivamente el --etiqueta ok y --cancelar la etiqueta opción. Aquí hay un ejemplo:

$ Zenity --Question - -Text? "¿Estás seguro de que quieres dejar de fumar??"--no-wrap --ok-label" sí "--cancel-label" no "



El widget de la pregunta



En este caso, también usamos el --sin envasado opción, para evitar el envoltorio de texto en el widget. El resultado de la elección del usuario no se mostrará en la salida estándar; En cambio, el comando establecerá su código de salida En consecuencia, para que regrese 0 Si el usuario hace clic en el botón 'Aceptar' y 1 Si hace clic en el 'cancelar' uno o cierra la ventana (esto puede parecer contradictorio, pero recuerde que un código de salida de 0 significa que un comando se ejecutó con éxito en el shell).

El widget de contraseña

Este es el widget que debemos usar cuando queremos que el usuario ingrese una contraseña o cualquier información confidencial: el texto que entra está enmascarado por balas:



El widget de contraseña

Mientras que el texto ingresado desde el usuario está enmascarado, el valor devuelto por el widget será claramente visible en la salida estándar.

El widget de selección de color

Este es otro bonito widget. Al usarlo, podemos hacer que el usuario elija un color de una paleta. Para ejecutarlo, usamos Zenity con el --selección de color opción. Podemos especificar el color inicialmente seleccionado utilizando --color y proporcionar el color como argumento. Aquí hay un ejemplo:



El widget de selección de color

Opcionalmente, podemos mostrar la paleta de colores, con el --show-paleta opción:

$ Zenity-Color-selección-color rojo-Palette show



La paleta de widgets de selección de color

El color seleccionado por el usuario se devolverá en RGB notación en la salida estándar. Por ejemplo, al seleccionar el color rojo, se devolverá el siguiente:

RGB (255,0,0)

El widget de la lista

El siguiente widget veremos, es el widget de la lista. Con él, es posible crear un diálogo de múltiples columnas, y opcionalmente permite que el usuario seleccione una o múltiples opciones a través de casillas de verificación o botones de radio. Para hacer que Zenity muestre este tipo de diálogo, usamos el --lista opción y defina las columnas y sus contenidos; Si los omitimos, el comando fallará:

$ Zenity -Lista de títulos de columna especificados para el cuadro de diálogo Lista.
Copiar

Para definir un encabezado de columna usamos el --columna opción y proporcionar una cadena como argumento. Repetimos el comando para cada columna que queremos crear:

$ Zenity --lista -Selección de columna -Distribución de columna

Con el comando anterior creamos dos columnas, con los encabezados "Selección" y "Distribución". Ahora proporcionaremos al usuario una serie de filas, cada uno de ellos que representa una distribución de Linux. En la primera columna de cada fila colocaremos una casilla de verificación para permitir que el usuario seleccione la entrada correspondiente:



$ Zenity --lista -Selección de columna -Distribución de columna Falso Debian True Fedora -Radiolist

Cada cadena que proporcionamos después de que la definición de columnas esté asociada con las columnas, dependiendo de su orden de apariencia. Como puede ver, creamos dos filas. En la primera columna de cada fila proporcionamos un valor: usamos FALSO para que la casilla de verificación o el botón de radio correspondiente no se seleccionen cuando se muestra el widget, y VERDADERO Para establecer la entrada como se marcó de forma predeterminada. Aquí está el widget generado:



El widget de la lista

Cuando hacemos clic en el botón "Aceptar" y realizamos nuestra selección, el valor asociado con la fila se informará en la salida estándar. Si queremos dejar que el usuario seleccione varias filas, podemos usar el --Lista de Verificación Opción: el | El carácter se utilizará para separar los valores seleccionados.

Conclusiones

En este tutorial aprendimos a saber zenidad, Una utilidad que nos permite usar diálogos gráficos en nuestros scripts de shell. Vimos cuáles son las opciones genéricas que podemos usar con todos los widgets, como --ancho y --altura, y aprendimos a usar algunos de los widgets más útiles que podemos generar con el programa. Para aprender más sobre zenidad puedes consultar su manzana!

Tutoriales de Linux relacionados:

  • Una introducción a la automatización, herramientas y técnicas de Linux
  • Mastering Bash Script Loops
  • Cosas para instalar en Ubuntu 20.04
  • Bucles anidados en guiones Bash
  • Mint 20: Mejor que Ubuntu y Microsoft Windows?
  • Manejo de la entrada del usuario en scripts bash
  • Cosas que hacer después de instalar Ubuntu 20.04 fossa focal Linux
  • Tutorial de depuración de GDB para principiantes
  • Archivos de configuración de Linux: los 30 principales más importantes
  • Sistema colgado de Linux? Cómo escapar a la línea de comando y ..