Cómo usar widgets gráficos en scripts bash con zenity
- 3338
- 1067
- Carmen Casillas
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
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 dominiops - 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:
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 ..
- « Cómo extender el administrador de archivos de Gnome Nautilus con scripts personalizados
- Introducción a las vistas de SQL de la base de datos MySQL/mariadb »