Dialog Cuadros de Dialogo en Linux

Publicado por firecold, Noviembre 25, 2014, 01:28:18 PM

Tema anterior - Siguiente tema

firecold

Buen Dia a todos los amigos que visitan el foro alterserv.com en esta ocasion vengo presentando una herramienta que es bastante util al momento de hacer un poco mas graficos nuestros scripts, ya que la consola puede ser un poco aburrida con sus colores apagados, pero Dialog es una herramienta que nos permite darle vida a nuestros scripts, como tambien se vean muy faciles de entender, para cualquier principiante o novato en el ambito de entornos GNU/Linux, tambien quiero agregar que esta herramienta no es nada nueva y viene en la configuracion de muchos paquetes de cualquier distribucion Linux y normalmente ya viene instalado por defecto, pero por las dudas pueden instarlo de esta manera:

Código (bash) [Seleccionar]
sudo apt-get install dialog pv

    [ul]



    En el caso de PV talvez no este instalado pero les servira para las barras de progreso y algunos otros detalles.

    Es un programa que permite presentar una serie de preguntas o mensajes en pantalla mediante cuadros de diálogos desde la shell.

    Entre ellos estan:
    • lista de selección
    • caja de edición
    • formularios
    • selección de ficheros
    • selección de directorios
    • campos
    • menús
    • cuadro de mensajes
    • campo para contraseña
    • barra de progreso
    • lista de radios
    • cuadro de texto
    • cuadro si/no
    [/ul]

Sería muy potente si se utilizara para la administración de sistemas, es usado también para instalación de distribuciones, configuración de aplicaciones, eso depende de su imaginación y lo que quiera para su sistema. Permite el control de programas en tiempo de ejecución. Para este caso el comando de diálogo ofrece una manera más fácil de dibujar en modo de texto cajas o cuadros con colores. Estos cuadros pueden contener cuadros de texto, cuadros de mensaje o diferentes tipos de menús.

Opciones

Esta herramiente provee una seria de opciones para personalizar y mejorar los cuadros de dialogo, hay muchas opciones usadlas bien.

Citar--ascii-lines
En lugar de dibujar las líneas de gráficos alrededor de las cajas, dibuja con "+" y "-" en el mismo lugar.

--aspect ratio
Esto le da cierto control sobre las dimensiones de la caja cuando se utiliza el tamaño automático (0 para especificar ancho y alto). Representa ancho/alto. El valor predeterminado es de 9, lo que significa 9 caracteres para cada línea de un alto.

--backtitle backtitle
Especifica una cadena backtitle que se mostrará en el telón de fondo, en la parte superior de la pantalla.

--begin y x
Especifica la posición de la esquina superior izquierda de un cuadro de diálogo en la pantalla.

--cancel-label string
Ignora la etiqueta utilizada en "Cancelar" botones.

--clear
Limpia la pantalla, manteniendo sólo el color del fondo de la pantalla. Utilizar esta opción cuando se combinan más de un cuadro de diálogo. Permite borrar el cuadro anterior, de esta forma se trabaja más limpio y organizado.

--defaultno
Hace que el valor predeterminado del cuadro yes/no sea No. Del mismo modo, hacer que el botón por defecto de los cuadros que proporcionan "OK" y "Cancelar" sea Cancel. Si "--nocancel" o "--visit-items" están presente estas opciones se anula este, haciendo que el botón por efecto siempre sea "Sí" (internamente igual que en "Aceptar").

--default-item string
Establece el elemento predeterminado de un cuadro de lista, formulario o el menú. Normalmente, el primer elemento de la caja es el valor predeterminado.

--exit-label string
Reemplaza la etiqueta que se utiliza para los botónes "EXIT".

--extra-button
Muestra un botón adicional, entre "Aceptar" y los botones de "Cancelar".

--extra-label string
Reemplaza la etiqueta que se utiliza para el botón "Extra".

--help-button
Mostrar un botón de ayuda después de los botones "OK" y "Cancelar".

--help-label string
Reemplaza la etiqueta usada por el botón "Help".

--help-status
Si se selecciona el botón de ayuda, escribe la información de la lista de verificación, lista de radios o el formulario después de la información de ayuda "HELP". Esto se puede utilizar para reconstruir el estado de una lista de verificación después de procesar la solicitud de ayuda.

--ignore
Ignora las opciones de diálogo que no reconoce. Entre los más conocidos están "--icon" de todos modos se tienen en cuenta, pero esto es una mejor opción para la compatibilidad con otras implementaciones.

--item-help
Interpreta los datos de las etiquetas para las cajas de lista, y lista de radios agregando una columna que se muestra en la línea inferior de la pantalla, para el elemento seleccionado.

--keep-tite
Normalmente comprueba si se está ejecutando en un xterm, y en ese caso trata de suprimir las cadenas de inicialización que se haría pasar a la pantalla. Use esta opción para permitir el uso de diálogo para las cadenas de inicialización.

--max-input size
Límite de cadenas de entrada con el tamaño dado. Si no se especifica, el límite es de 2048.

--nocancel
Suprimir el botón "Cancel" en la lista de control, caja de texto y los modos de menú de la caja.

--no-label string
Reemplaza la etiqueta usada por el botón "No".

--no-shadow
Suprime las sombras que se dibuja a la derecha e inferior de cada cuadro de diálogo.

--ok-label string
Reemplaza la etiqueta usada por el botón "OK".

--print-size
Imprime el tamaño de cada cuadro de diálogo para la salida del mismo.

--shadow
Dibuja una sombra a la derecha e inferior de cada cuadro de diálogo.

--title title
Especifica el título que se mostrará en la parte superior del cuadro de diálogo.

--yes-label string
Reemplaza la etiqueta usada por el boton "Yes".

--create-rc <file>
Crea un fichero de configuración de ejemplo.

Actualmente estoy usando esta herramienta para poder hacer el script de instalacion un poco mas amigable en la consola, unas imagenes para puedan darse una idea:






En breve estare posteando los ejemplos de como los hice, ya que cada post tiene un limite de palabras que ya casi supere, pero din falta estare publicando, Saludos

firecold

BARRA DE PROGRESO

Bueno empecemos con los ejemplos de como utilizar dialog, pero vamos a empezar con la barra de progreso, que creanme fue muy dificil encontrar documentacion que aun funcionara y tuve que improvisar, pero al final de varios intentos lo logre, en mi caso lo que yo deseaba era una barra de progreso que se incrementara al actualizar el sistema, antes que nada debere explicar algunos parametros que les seran muy utiles y no dejaran usar:

Citar1. dialog --backtitle "Alterserv.com" # Esta linea nos permitira escribir lo entrecomillado en la parte superior derecha de la ventana, como que si fuera un Titulo.

2. dialog --title "Informacion del Sistema" # title nos permitira mostrar lo entrecomillado en la parte superior del cuadro de dialogo, como titulo del cuadro de dialogo.

Estos dos son casi imprecindibles a la hora de mostrar informacion, ahora bien la barra de progreso la obtendremos con la opcion dialog --gauge "Actualizando....." 6 50, esta opcion se declara en dialog y nos pedira ingresar un texto en mi caso Actualizando, como tambien el diametro que tendra el cuadro de dialogo donde sera mostrada en este caso 6 50 que son alto y ancho, pero lastimosamente esto solo nos mostrara la barra de progreso pero no se movera de ningun modo, para eso tendremos que usar esta linea:

Código (bash) [Seleccionar]
(sudo apt-get update && sudo apt-get upgrade -y ) | pv -n 2>&1 | dialog --gauge "Instalando Paquetes....." 6 50



Solo recuerden ejecutarla como root, bueno como podran ver esta la orden de actualizar fuentes y despues paquetes, el cual tiene un prcentaje, para sacar ese porcentaje lo hacer con pv -n que crea una pila numerica que lee dialog y nos permitira que haya cambios en nuestra barra de progreso, Pruebenlo y me avisa, Saludos

mas ejemplos en: http://bash.cyberciti.biz/guide/A_progress_bar_(gauge_box)

firecold

INFOBOX

Las infobox se declaran en dialog, siempre requiriendo un texto, como podran entender las infobox solo dan infomacion, no hay que hacer una afirmacion o negacion, aunque se puede dar un pausa y continuar presionando alguna tecla: ejemplos:

Código (bash) [Seleccionar]
dialog --backtitle "Alterserv.com" --title "Informacion" --infobox "Instalacion de Raptor \
Presione un tecla para continuar...." 4 65 ; read



En esta ocasion es un cuadro de dialogo de informacion o infobox, pero en esta ocasion no continuara hasta que preciones una tecla.

Código (bash) [Seleccionar]
dialog --backtitle "Alterserv.com" --title "Informacion" --infobox "Instalacion de Raptor \
Bienvenido al programa de Instalacion" 4 65




En cambio este solo te da informacion asi no mas y claro los procesos que esten atras no se vizualizaran.

Espero que les sirva, Saludos

firecold

MENU

El menu de Dialog es muy bonito por no decir otra cosa y lo mejor de este que no hay opcion equivocada, ya que las opciones estan bien definidas. Teniendo este formato --menu " Titulo del Menu" 15 55 4 \ los numeros son ancho alto y espacio para las opciones, en este tengo tres opciones. Ejemplo:

Código (bash) [Seleccionar]
INPUT=/tmp/menu.sh.$$
dialog --backtitle "Alterserv.com" --title "Menu"  --menu "Selecione la opcion requerida: " 15 55 4 \
  1 "Actualizar Sistema"\
  2 "Instalar Raptor 1.05b"\
  3 "Informacion del Sistema" \
  4 "Salir" 2>"${INPUT}"
menuitem=$(<"${INPUT}")
case $menuitem in
 1) echo 1;;
 2) echo 2;;
 3) echo 3;;
 4) clear; exit 0;;
esac



Bueno empecemos de arriba hacia abajo, la primera linea creamos un archivo de texto donde se almacenara la opcion a elegir que luego utilizaremos, la segunda linea comensamos con dialog y sus dos opciones backtitle y title que explique anteriormente, como tambien -- menu que te pide un texto para empezar el menu y sus dimensiones alto ancho y cantidad de opciones, en las lineas 3 4 5 6, estan numeradas las opciones agregandoles texto para relatarlas, en la linea 6 se agrega un comando para almacenar la opcion elegida, en la linea 7 leemos la opcion para compararla con case, el cual nos permitira crear una funcion por cada opcion, creo que esta es unas de las mejores opciones, espero les sriva.

mas ejemplo: http://bash.cyberciti.biz/guide/A_menu_box.

firecold

LISTAS DE RADIO

En la practica es muy similar al menu, el detalle es que cuando describes cada opcion le agregas un on u off, para activar y desactivar dicha opcion, desde mi punto de vista las coloca todas en off, para que todas las opciones esten de-seleccionadas y solo elegir la que quieres, para elegir la opcion tendras que presionar la tecla de espacio y Aceptar, ejemplo:

Código (bash) [Seleccionar]
INPUT=/tmp/menu.sh.$$
dialog --backtitle "Alterserv.com" --title "Menu"  --radiolist "Selecione la opcion requerida: " 15 55 4 \
  1 "Actualizar Sistema" off \
  2 "Instalar Raptor 1.05b" off \
  3 "Informacion del Sistema" off \
  4 "Salir" off 2>"${INPUT}"
menuitem=$(<"${INPUT}")
case $menuitem in
 1) echo "1";;
 2) echo "2";;
 3) echo "3";;
 4) clear; exit 0;;
esac


No explicare mayor cosa ya que lo explique en menu y como dije no cambia mucho.

LISTAS DE SELECCION

A difrerencia de listas de radio y el Menu, este nos permite elegir varias opciones al mismo tiempo, en este caso tendremos que usar un IF para ejecutar las demas opciones, en este caso no se podra utilizar un case o en todo caso si se puede pero serian varios case, aunque igual tendrias que usar varios IF, para ejecutar las opciones o menos que lo utilicemos para guardar aficciones por ejemplo, a continuacion un ejemplo:

Código (bash) [Seleccionar]
INPUT=/tmp/menu.sh.$$
dialog --backtitle "Alterserv.com" --title "Menu"  --checklist "Selecione la opcion requerida: " 15 55 4 \
  1 "Actualizar Sistema" off \
  2 "Instalar Raptor 1.05b" off \
  3 "Informacion del Sistema" off \
  4 "Salir" off 2>"${INPUT}"
menuitem=$(<"${INPUT}")


Como dije para la ejecucion tendran que usar IF, pero lastimosamente no lo he usado todavia, pero como dije es muy simiar a menu y listas de radio, Saludos

mas ejemplos en: http://www.aboutlinux.info/2005/10/make-your-bash-scripts-user-friendly.html.

07350286


firecold

Cita de: 07350286 en Noviembre 25, 2014, 07:19:14 PM
Muy bueno amigo Firecold

Gracias amigo, como dije me iba a poner al dia en mis vacaciones y estoy tratando de cumplir, dandole bastante amor a este foro, Saludos

firecold

CUADROS DE TEXTO

La funcion basica de este es mostrar un archivo de texto, muy bueno para mostrar licencias o especificaciones o agradecimientos o lo que tengan en mente, lo mas importante es que este tiene que apuntar a un archivo de texto que exista, como tambien la altura y el ancho. Ejemplo:

Código (bash) [Seleccionar]
dialog --title "Cuadro de Texto" --textbox /home/servidor/prueba.sh 22 70



ENTRADA DE TEXTO

Código (bash) [Seleccionar]
TEXTO="/tmp/texto.txt"
dialog --title "Entrada de Texto" --backtitle "Alterserv.com" \
--inputbox "Ingresa tu nombre: " 8 60 2>"${TEXTO}"
sel=$?
nombre=`cat /tmp/texto.txt`
case $sel in
 0) dialog --backtitle "Alterserv.com" --title "Informacion" --msgbox "Bienvenido $nombre" 7 70;;
 1) clear; exit 0;;
esac
rm -f /tmp/texto.txt




Este nos permite ingresar texto y como ven el texto se almacena en una variable y se puede hacer uso despues, Saludos

mas ejemplos en: http://bash.cyberciti.biz/guide/An_input_dialog_box.

freedarwuin

Amigo fire me puedes decir cuales repositorio estan buenos los de venezuela estan lentos gracias
>Si te gusta dale LIKE<

Entre las redes cableadas y las que no, el Mikrotik, ThunderCache y Tp-Link no hay nada Oculto... Para todo lo demás solo hay que "Guglear".
Mikrotik, Raptor, Ubiquiti, Tplink.
Prestamos Soporte en cuanto a Redes se refiere a Empresas, Wisp y hogares!!!
www.mikronet.com.ve

firecold

Cita de: freedarwuin en Noviembre 25, 2014, 08:01:59 PM
Amigo fire me puedes decir cuales repositorio estan buenos los de venezuela estan lentos gracias

Fijise amigo freedarwuin, que no uso repositorios de ese lado del continente, yo normalmente uso el de Guatemala o el de Mexico, pero creo que estos no seran muy viables para usted, Saludos

freedarwuin

Gracias amigo fire yo usaba mexico gracias
>Si te gusta dale LIKE<

Entre las redes cableadas y las que no, el Mikrotik, ThunderCache y Tp-Link no hay nada Oculto... Para todo lo demás solo hay que "Guglear".
Mikrotik, Raptor, Ubiquiti, Tplink.
Prestamos Soporte en cuanto a Redes se refiere a Empresas, Wisp y hogares!!!
www.mikronet.com.ve

firecold

Cita de: freedarwuin en Noviembre 26, 2014, 08:15:35 PM
Gracias amigo fire yo usaba mexico gracias

Tambien el que es muy bueno es el brazil, pero solo de dia en las noches hay mucho lag, Saludos

firecold

Gracias a todos los los que se han pasado por este tema y lo han leido, yo se que en algun momento les podra venir bien esta informacion, por lo demas el motivo de seguir publicando en el mismo tema es porque he estado experimentando con dialog y aunque como he dicho es muy viejito dicho programa sigue siendo muy funcional, y aunque tiene sus detalles estoy seguro que los sacara de apuros, ahora bien a lo que iba, como podran ver dialog nos permite crear ventanas de dialogo en la terminal, pero muchas veces tendremos la necesidad de concatenar varias ventanas para poder terminar el trabajo y no dificultarnos tanto las cosas, en este caso esta intentando crear un progressbar, pero resulta que a veces se dan errores y no se pueden vizualizar, ahora bien podria haber hecho un log para poder hacer esto, pero con fines de aprender me puse a la tarea de averiguar si se podia, pero en fin fue una odisea ya que si bien el programa es algo viejito hay documentacion algo como el programa y tampoco es muy descriptiva que digamos, pues en fin en man de dialog estaba respuesta:

Citar1. --begin x y, es muy util ya que te permite por coordenadas puedes colocar el dialogo, asignando un espacio definido al dialogo.

2. --and-widget le dice a dialog que puede ser usado como un cuadro de dialogo mas dentro de la ejecucion.


Con estas dos opciones tanto ubicaremos las ventanas que vayan emergiendo, ya que muchas veces algunas tiene mas prioridad que otras, pero en algunos casos se podran ejecutar al mismo tiempo, aunque mucho cuidado con las redirecciones, a veces se torna un poco complicado, aunque debo decir que soy bastante novato en la programacion, como tambien en bash, pero en fin este fue el resultado:

Código (bash) [Seleccionar]
(sudo apt-get update && sudo apt-get upgrade -y) | pv -n 2>&1 >out | dialog --backtitle "Alterserv.com" --no-shadow --no-kill --title "Instalando" --begin 7 10 --tailboxbg out 20 100 --and-widget --begin 30 20 --gauge "Instalando Paquetes....." 6 80
rm out


encerrando entre parentesis las sentencias de actualizacion me es mas facil crear una sola redireccion o tuberias, como dije tambien al principio de este tema pv, es muy importante para las tuberias, creando dos salidas una hacia el --tailboxbg, que funciona como un tail -f y --gauge siendo el progressbar, pruebenlo y me avisan dejo una imagen:


firecold

Una forma mas resumida o pequeña de usar una opcion Menu en Dialog, aqui el ejemplo que estoy usando para actualizar el script de Lvm2:

Código (bash) [Seleccionar]
menuitem=$(dialog --backtitle "Alterserv.com" --stdout --title "Menu" --menu "Elegir opcion requerida: " 15 80 8 \
    1 "Instalar Lvm2" \
    2 "Identificacion y Creacion de Particion Lvm2"\
    3 "Crear Grupos y Volumenes para Lvm2" \
    4 "Creacion y Elecion de Carpeta a Montar Particion" \
    5 "Sumar un HDD a Lvm2 - Sub-Menu"" \
    6 "Eliminar Particion LVm2" \
    7 "Salir" )
case $menuitem in
  1) opcion1; Menu;;
  2) opcion2; Menu;;
  3) opcion3; Menu;;
  4) opcion4; Menu;;
  5) opcion5; Menu;;
  6) submenu;; 
  7) clear; exit 0;;
esac




No es la imagen del ejemplo, pero funciona tal cual, lo publico, ya que despues no me recuerdo de como lo hice, jajajaja, Saludos