Crear tu propio instalador gráfico usando Bash y Zenity en Ubuntu

Zenity, Zen Dialogs, es un software que permite generar diálogos simples empleando la biblioteca de GTK a manera de wrapper e ideado como sustituto de gdialog para GNOME2 y dialog en consola; siendo muy simple de usar si se tienen conocimientos básicos de programación.

Por su parte, Bash es un intérprete de órdenes que generalmente se ejecuta en una ventana de Terminal,  donde el usuario escribe órdenes en modo texto.Este se usa por defecto en los ordenadores linux y su terminal, y es muy útil si se es fan de la consola.

Para instalar Zenity escribimos la siguien linea de comandos en una ventana terminal:

sudo apt-get install zenity

Una vez instalado, podemos hacer la siguiente prueba directamente en la ventana terminal:

zenity --question --text "¿Quieres saber mas?"

para verificar la versión que usamos es (directamente en la ventana terminal):

zenity --about

 

Un ejemplo más elaborado del primero sería (directamente en la ventana terminal):

zenity --question \
       --title="https://victorsosa.com" \
       --width=350 \
       --text="¿Quieres saber más?"
ans=$?
if [ $ans -eq 0 ]
then
    echo "Si quieres saber más"
else
    echo "No quieres saber más"
fi

 

¿Cómo hacer mi Script de instalación?

Una vez que ya tenemos Zenity instalado, podemos crear nuestro propio Script de instalación con algunas opciones básicas del lenguaje (directamente en la ventana terminal):

ask=$(zenity --list --checklist --title='Options' --width=580 --height=600 --text='Selecciona el sofware a instalar' --column='Install' --column='Software' --column='Descripción' TRUE gparted  'Utilidad para particionar discos')

instalar=""
  if [ "$ask" != "" ] ; then

     instalar="sudo apt install $ask"
  fi
  
$instalar



Como puedes observar en el ejemplo anterior, el cuadro de dialogo nos esta preguntando si queremos instalar la aplicación GPARTED, y de ser así lo haría ejecutando una orden en la linea de comandos.

Observa tambien que estamos usando opciónes que son personalizables y que tanto los parámetros –title como –width son totalmente opcionales. Sin embargo, he preferido incluirlos en este primer ejemplo, para que veas como utilizarlos.

Ahopra bien, en caso de querer hacer una lista más extensa, esto se vería de la siguiente forma

ask=$(zenity --list --checklist --title='Options' --width=580 --height=600 --text='Selecciona el sofware a instalar' --column='Install' --column='Software' --column='Descripción' TRUE chrome-gnome-shell 'Complemento que permite la instalacion de extensiones' FALSE file-roller 'Gestor de archivos comprimidos para Gnome' FALSE rar 'Utilidad de compresión' TRUE unrar 'Utilidad de compresión' TRUE gnome-calendar 'Calendario de Gnome' TRUE vlc 'Visor de archivos multimedia' )

instalar=""
  if [ "$ask" != "" ] ; then

newask=${ask//|/" "}
     instalar="sudo apt install $newask"
  fi
  
$instalar

Observando el último ejemplo, es posible ver que que también podemos definir si las casillas están seleccionadas o no por defecto (TRUE o FALSE en la linea de comando)

¿Qué sigue?

Lo que sigue es guardar nuestro script en un archivo para poder ejecutarlo
a continuación te dejo mi script que uso en algunas ocasiones ya con algunas opciones ya incluidas.

#!/usr/bin/env bash

ask=$(zenity --list --checklist --title='Options' --width=580 --height=600 --text='Selecciona el sofware a instalar' --column='Install' --column='Software' --column='Descripción' TRUE chrome-gnome-shell 'Complemento que permite la instalacion de extensiones' TRUE nautilus-share 'Habilitar compartir con Windows' TRUE file-roller 'Gestor de archivos comprimidos para Gnome' TRUE rar 'Utilidad de compresión' TRUE unrar 'Utilidad de compresión' TRUE unrar-free 'Utilidad de compresión' TRUE zip 'Utilidad de compresión' TRUE unzip 'Utilidad de compresión' TRUE unace 'Utilidad de compresión' TRUE unace-nonfree 'Utilidad de compresión' TRUE bzip2 'Utilidad de compresión' TRUE lzop 'Utilidad de compresión' TRUE p7zip-full 'Utilidad de compresión' TRUE p7zip-rar 'Utilidad de compresión' TRUE gzip 'Utilidad de compresión' TRUE lzip 'Utilidad de compresión' TRUE gnome-calendar 'Calendario de Gnome' TRUE vlc 'Visor Multimedia' TRUE font-manager 'Gestor de tipografías' TRUE eog 'Visor de archivos PDF' TRUE kaffeine 'Visor multimedia' TRUE gparted  'Utilidad para particionar discos' TRUE menulibre 'Permite editar el menu de Gnome' TRUE gnome-calculator 'Calculadora de Gnome' TRUE gnome-contacts 'Gestor de contactos de Gnome' TRUE gnome-weather 'El clima' TRUE ubuntu-restricted-extras 'Extras de Ubuntu' TRUE inkscape 'Editor de vectoriales' TRUE gimp 'Editor de imágenes' TRUE simplescreenrecorder 'Grabador de pantalla' TRUE synaptic 'Gestor de paquetes' TRUE flatpak 'Gestión de paquetes' TRUE snapd 'Gestión de paquetes' TRUE gdebi 'Gestión de paquetes' TRUE mixxx 'Tornamesa de DJ' TRUE breeze-cursor-theme 'Tema de cursores' TRUE breeze-gtk-theme 'Tema de Gnome' TRUE breeze-icon-theme 'Tema de iconos' TRUE arc-theme 'Tema de gnome')

instalar=""
  if [ "$ask" != "" ] ; then

newask=${ask//|/" "}
     instalar="sudo apt install $newask"
  fi
  
$instalar


Copia este contenido y pegalo en un archivo nuevo de texto (no olvide que la linea ” #!/usr/bin/env bash ”  debe ir al principio)
Puedes abrir tu gestor de texto favorito (nano, vim, gtedit, kate) , pegar el contenido y guardarlo como install.sh

Para ejecutarlo, hay que darle permisos.

El chmod +x se puede usar para agregar privilegios de ejecución al usuario propietario actual del archivo especificado.

chmod +x install.sh

 

Ahora lo ejecutamos poniendo un punto y un slash (seguidos), y seguido a esto el nombre del script:

./install.sh

 

Si quieres saber más acerca de como usar zenity, te recomiendo veas el manual del proyecto.