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: 3,278

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-highpower.es es distribuidor oficial de Alfa Network

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

Koala
Very Important Usuario

Registrado: 11-09-2016
Mensajes: 415

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

#3 24-09-2017 02:38:57

tornado76
Usuario

Registrado: 18-12-2016
Mensajes: 6

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

Para evitar el mensaje de advertencia:

kcdtv escribió:

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

Desde la consola y en este caso con el editor nano:
$nano ~/.bashrc
Y añadiendo esta linea:

alias zenity="zenity 2>/dev/null"

En mi caso lo tengo así:

# "Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged."
alias nemo="nemo 2>/dev/null"
alias zenity="zenity 2>/dev/null"

Ultima edición por tornado76 (24-09-2017 02:49:44)

Desconectado

#4 25-09-2017 10:33:38

kcdtv
Administrator

Registrado: 14-11-2014
Mensajes: 3,278

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

¡Buen truco!  smile

Desconectado

#5 25-09-2017 20:20:00

dynyly
Usuario

Registrado: 19-04-2015
Mensajes: 292

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

salu2
pues a mi nada y que llevo tiempo queriendo quitar el mensaje de gtk
ya lo tenia asi

echo -ne "Zenity....."
	if ! hash zenity 2>/dev/null; then

y lo de alias no me funciona que suerte teneis

alias -h
bash: alias: -h: opción inválida
alias: uso: alias [-p] [nombre[=valor] ... ]
alias -p zenity="zenity 2>/dev/null"
wifislax64 ~ # alias
alias cp='cp -b'
alias cpan2tgz='cpan2tgz --build-tag wifislax'
alias d='dir'
alias dir='/bin/ls $LS_OPTIONS --format=vertical'
alias gem2tgz='TAG=wifislax gem2tgz'
alias grep='grep --color=auto'
alias ll='ls -l'
alias ls='ls --color=auto'
alias mc='. /usr/share/mc/bin/mc-wrapper.sh'
alias sbopkg='TAG=slackbuilds sbopkg'
alias slapt-src='TAG=slackbuilds slapt-src'
alias v='vdir'
alias vdir='/bin/ls $LS_OPTIONS --format=long'

Desconectado

#6 26-09-2017 08:53:47

kcdtv
Administrator

Registrado: 14-11-2014
Mensajes: 3,278

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

Te falta ejecutar bashrc; mira este tema: Crear sus propias ordenes con los aliases

Desconectado

Anuncio

Wifi-highpower.es es distribuidor oficial de Alfa Network

Temas similares

Tema Respuestas Vistas Ultimo mensaje
8 338 Ayer 20:45:28 por kobol
Rompiendo WPA2 ? (KRACK) por markspitz15
1 155 Ayer 19:19:20 por kcdtv
1 19 Ayer 18:37:37 por kcdtv
4 3515 Ayer 17:24:29 por Flashed
Pegado:
Pegado:: Script multiuso wifi para Kali y otras distros por v1s1t0r  [ 1 2 3 8 ]
194 6839 Ayer 10:51:27 por v1s1t0r

Pie de página

Información del usuario

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

Estadisticas de los foros

Número total de usuarios registrados: 714
Número total de temas: 874
Número total de mensajes: 7,434

Máx. usuarios conectados: 69 el 15-10-2017 09:23:21