Transforma muy fácilmente tu script bash en una GUI con Zenity (Pagina 1) / Scripts y programación / Foro Wifi-libre.com

El libre pensamiento para un internet libre

No estas registrado.     

Anuncio

Wifi-highpower.es es distribuidor oficial de Alfa Network

#1 02-12-2016 01:24:41

kcdtv
Administrator

Registrado: 14-11-2014
Mensajes: 2,838

Transforma muy fácilmente tu script bash en una GUI con Zenity

Zenity: Una herramienta para lanzar cajas de diálogos GTK desde la consola o con unos scripts bash

zenity_11.jpg

Con este tema no pretendo hacer un manual sobre Zenity,
  Solo quiero mostrar lo muy fácil que es  hacer una GUI (Interfaz gráfica) para unos scripts bash de consola.
Lo haré con Zenity porque esta instalado por defecto en kali-Ubuntu.
     Existen otras soluciones.
  Si por ejemplo usamos una distribución con entrono gráfico KDE hay Kdialogs.
Podemos usar una aplicación escrita con Kdialog en GNOME o XFCE pero requiere instalar Kdialog y sus dependecias.
Zenity tira de GTK (Kit de desarrolló gráfico GImp) como lo hacen los Escritorios XFCE o GNOME
  Esto hace que la integración es automática: Nuestra GUI pilla las fuentes, los iconos, los colores desde el tema y el set de icono que tenemos habilitado.
  Se adapta automáticamente a la configuración de nuestro Escritorio.

  El punto el mas destacable ha mi gusto es... ¡Qué fácil es Zenity!
Consultando la ayuda en consola y probando un poco en consola en consola nos podemos apañar solo.
  En kali, Liux MInt y ubuntu viene de serie ya que algunas aplicaciones del sistema lo usan.
  Si no lo tienes instalado

sudo apt-get install zenity

   
 
  Primero, echemos un ojo a la ayuda, es muy importante:

zenity_1.jpg

  Con estas 16 opciones podemos hacer cosas muy interesantes....
  Miramos más de cerca las opciones de "advertencia" (warning)
   Un script siempre debe llevar un mensaje de error: Por ejemplo si el usuario entra 4 cuando hay tres opciones propuestas del 1 a 3
 

zenity --help-warning

zenity_2.jpg

  Lo bueno es que todo esta en Español y muy simple. cool
Redactamos un mensaje de error Zenity en nuestra consola bash y miramos que pasa:

zenity --warning --text="¡bSSID no conforme!"

zenity_3.jpg

  La consola se queda en espera a que el usuario haga clic en la advertencia con su mensaje de error

  Ya que estamos miremos como haríamos para pedir a un usuario que entre un bSSID.
  Lo que necesitamos es lo más básico: Hacer una pregunta y tener un campo para que el usuario responda.

zenity --entry  --text="Entrar el bSSID del AP"

zenity_5.jpg

 
  Veamos ahora como aplicar esto concretamente con el generador de PIN para Huawei HG532c
Centremos nos en la estructura del script...

  1. Recoge el bSSID (zenity --form)

  2. Efectúa una comprobación sobre la validez del BSSID (si el  bSSID no es valido pondremos una advertencia con zenity --warning)

  3. Aplica los algoritmos para generar el PIN (esto se hace "en interno")

  4. Devuelve el resultado (podemos usar zenity --info) o hacer lo en la consola "madre"

  Para el primer paso tenemos el dialogo preparado:

zenity --entry  --text="Entrar el bSSID del AP"

  ¿Cómo hacer para que se guarde el resultado en una variable llamada BSSID?
Es lo que hace el script con una orden read que recoge stdin (lo que entra el usario)
  Es muy simple: declaramos la variable y la definimos con nuestro dialogo "entry".

BSSID=$( zenity --entry  --text="Entrar el bSSID del AP" )

zenity_6.jpg

  Una vez el valor entrado y validado volvemos a la consola y verificamos que la variable BSSID este bien declarada

zenity_7.jpg

  Paso dos: la advertencia BSSID
Pongo aquí el inicio del script HG532cPIN :

read -r -ep  "Insert bSSID and press [Enter]: " BSSID  
while ! (echo "$BSSID" | tr a-f A-F | egrep -q "^([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}$") # Loop to check the conformity of the the entered bSSID 
  do             
    echo -e " \e[1m\e[31mSyntax error\e[0m : Nonconforming mac address"   # test error
    echo -e "                                  
\e[36mPlease enter a valid bSSID (12 hexadecimal digits)
example: 34:6B:D3:01:23:45
\e[0m"
    read -r -ep   "Insert bSSID and press [Enter]: " BSSID  
done                                              

  La primera linea es para definir la variable BSSID y esto lo hacemos ahora con zenity.
Cada vez que empleamos una orden read (lee la entrada para poblar la variable BSSID)  la podemos reemplazar por una  variable que declara una --entry de zenity
  Luego, segunda linea, se abre un bucle while.
  Su condición es "mac no valida" (gracias a antares_145 por el estatuto comando sed)
  Hasta que la mac no tenga 12 caracteres hexadecimales no se saldrá del bucle.
Se pondrá la advertencia (en lugar de las lineas con "echo") y volveremos a preguntar por el bSSID (la orden read que cambiamos por la variable bSSID que acabamos de redactar)

zenity_8.jpg

 

  ¿Probamos con las dos nuevas lineas?
Ejecuto el script y entro los datos en mi GUI:

zenity_9.jpg

Le doy a [enter] y obtengo el resultado en consola

zenity_10.jpg

Notéis que hay una advertencia "Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged"
  Nada grave, se debe a unos cambios en GTK y afecta a la versión inestable que uso, se arreglara un día de estos ( Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.).

  Zenity ha sido pensado para administradores y desarrolladores que quieren hacer algo rápido
   Cómo veis no hay nada más fácil que un poco de zenity para hacer en tres lineas una GUI
Se pueden hacer muchas más cosas con listas interactivas, hacer notificaciones en la barra de herramienta con un balón etc...
   Si queremos hacer una GUI super guapa o algo que salga de los esquemas habituales de un script interactivo está claro que con menos de 20 ordenes disponibles estamos un poco limitado.
  Para hacer algo sencillo... ¡No hay nada más practico!   

Desconectado

Anuncio

Wifi-libre.com: El libre pensamiento para un internet libre / Regístrese ahora

#2 02-12-2016 11:25:21

Koala
Very Important Usuario

Registrado: 11-09-2016
Mensajes: 282

Re: Transforma muy fácilmente tu script bash en una GUI con Zenity

Parece muy facil de usar lo, puede dar idea eso cool

Desconectado

Anuncio

Wifi-libre.com: El libre pensamiento para un internet libre / Regístrese ahora

Pie de página

Información del usuario

Ultimo usuario registrado: joseluisnez
Usuarios registrados conectados: 0
Invitados conectados: 9

Estadisticas de los foros

Número total de usuarios registrados: 527
Número total de temas: 798
Número total de mensajes: 6,239

Máx. usuarios conectados: 61 el 28-03-2017 00:04:22