Вы находитесь на странице: 1из 6

Xdialog, ventanas en scripts | Ubuntu-es

1 de 6

(/)

http://www.ubuntu-es.org/node/71372

Buscar

Sobre Ubuntu (/sobre_ubuntu)

Documentacin (http://doc.ubuntu-es.org)

Blogs (/blog)

Foros (/forum)

Xdialog, ventanas en scripts


Ver (/node/71372)

Comentarios ms valorados (/node/71372/best-comments)

Inicio de sesin

Jue, 29/11/2007 - 23:17


Tutoriales y Trucos (/forum/68)
En este remedo de artculo (por llamarlo de alguna forma) intentar hacer un
esbozo de lo que se puede hacer con la herramienta Xdialog.
A travs de Xdialog se puede conseguir introducir ventanas (o dilogos) en un
shell-script para hacer ms "amigable" la interaccin con el usuario.
En Ubuntu viene instalado por defecto la aplicacin Zenity, que sirve para lo
mismo que Xdialog pero tiene menos opciones, si alguien tiene inters en utilizar
Zenity mejor que lea el artculo de Milmazz Zenity, mejorando la presencia de
tus scripts (http://www.milmazz.com/archivos/2005/04/24/zenity/). Adems
Xdialog es bastante compatible con dialog la aplicacin de dilogos en modo
texto (utiliza las libreras curses para mostrar los dilogos), por lo que un script
con Xdialog se podra adaptar facilmente para tenerlo preparado para ejecutarlo
en modo texto mediante dialog.

(/user/635)
joseluis (/user/635)
0 puntos

Nombre de usuario *

Contrasea *

Crear nueva cuenta (/user/register)


Solicitar una nueva contrasea (/user
/password)

Iniciar sesin

Qu necesitamos para hacer algo con Xdialog?


Conocimientos de shell-scripts
Obviamente tener instalado xdialog (y si no se tiene se soluciona
facilmente con un sudo apt-get install xdialog)
Editor de texto: vi(m), emacs, joe, gedit, kate, scite o el que ms nos guste.
Pero, antes de seguir, quizs sera conveniente responder a la pregunta...
Qu es Xdialog?
Xdialog es una aplicacin que lanza ventanas o dilogos que se pueden incluir
dentro de un shell-script en lugar de los tradicionales comandos para mostrar
informacin (echo) o recoger variables (read).
Es decir si tenemos un script que le pide el nombre al usuario, en lugar de lanzar
el tpico read nombre se podr lanzar Xdialog con los parmetros apropiados
para que nos muestre una ventanita donde podamos escribir el nombre solicitado.
Primeros ejemplos
Vamos a ejecutar ahora unos ejemplos sencillos para ver como se muestran estos
dilogos.
Ejecutar en un terminal lo siguiente:
Xdialog --title "Mi primer Xdialog" --msgbox "Hola mundo" 0 0

Otra forma similar a la anterior pero poniendo duracin al mensaje:


Xdialog --title "Mi primer Xdialog con caducidad" \
--infobox "Hola mundo. \nEste mensaje desaparecer en 5000
milisegundos" 0 0 5000

Si lo que queremos es un poco de interaccin, por ejemplo haciendo una


pregunta que se responda con un "S/No" podemos ejecutar:

05/01/13 10:57

Xdialog, ventanas en scripts | Ubuntu-es

2 de 6

http://www.ubuntu-es.org/node/71372

Xdialog --title "Un Xdialog con pregunta" \


--yesno "Quieres continuar con la charla?" 0 0

Antes de seguir vamos a echar un vistazo a los comandos anteriores


En todos ellos hay un parmetro que se llama --title al que le sigue siempre un
texto entrecomillado.
Como parece lgico suponer mediante ese parmetro fijamos el ttulo de la
ventana que va a mostrar Xdialog
Tambin en todos los comandos que llevamos hasta ahora hay un par de ceros.
Estos nmeros indican el tamao de la ventana que vamos a mostrar, al poner 0
en los dos lo nico que se le dice a Xdialog es que ajuste automticamente el
tamao teniendo en cuenta lo que tiene que mostrar.
El resto de parmetros que le pasamos a Xdialog va en funcin del tipo de
ventana que queremos mostrar:
msgbox -> muestra un mensaje hasta que cerramos la ventana
infobox -> muestra un mensaje hasta que cerramos la ventana o se cumpla
el tiempo mximo que se le ha puesto (en milisegundos). En el ejemplo el
tiempo es el 5000 que aparece al final
yesno -> muestra un mensaje y dos botones, uno para la opcin Yes y otro
para la opcin No, segn pulsemos a un botn o a otro devolver la opcin
elegida.
...
Recoger el resultado de Xdialog
Dependiendo del tipo de ventana podremos encontrar el resultado en la variable
especial $? o bien en la salida estndar de errores.
- Un ejemplo del primer caso:
Xdialog --title "Un Xdialog con pregunta" \
--yesno "Quieres continuar con la charla?" 0 0
resultado=$?

Si resultado contiene un 0 => Ha pulsado el botn SI


Si resultado contiene un 1 => Ha pulsado el botn NO
Si resultado contiene un 255 => Ha pulsado la tecla ESC
- Un ejemplo del segundo caso:
Xdialog --title "Titulo" --combobox "Seleccin de un valor" \
0 0 "Valor 1" "Valor 2" "Valor 3" "Valor 4" "Valor 5" 2>/tmp
/xdialog.tmp
resultado=`cat /tmp/xdialog.tmp`

Es decir redirigimos la salida estndar de errores (stderr) a un fichero y


posteriormente cargamos el fichero en una variable
Opciones de Xdialog
Vamos a ver ahora ms opciones de ejecucin para el Xdialog.
Pedir un campo (el equivalente al read variable):
Xdialog --title "Titulo de la ventana" --inputbox "Introduce tu
nombre" 0 0

Igual que antes pero sin botn de Cancelar:


Xdialog --title "Titulo de la ventana" --no-cancel --inputbox
"Introduce tu nombre" 0 0

O si queremos que aparezca un valor inicial:


Xdialog --title "Titulo de la ventana" --inputbox \
"Introducir el nombre que quieres dar a tu mquina" 0 0
"localhost"

O si queremos ocultar el valor introducido (verificarlo, ver como quitar el check

05/01/13 10:57

Xdialog, ventanas en scripts | Ubuntu-es

3 de 6

http://www.ubuntu-es.org/node/71372

de ocultar tipado)
Xdialog --title "Titulo de la ventana" --password --inputbox
"Introduce tu password" 0 0

Podemos pedir en la misma ventana dos y hasta tres campos sin ms que utilizar
la opcin --2inputsbox o --3inputsbox:
Xdialog --title "Titulo de la ventana" --password --password \
--3inputsbox "Datos del usuario" 0 0 "Usuario" "" \
"Password" "" "Repite la Password" ""

Elegir un valor de un campo seleccionable:


Xdialog --title "Titulo de la ventana" --combobox "Nivel de
estudios" 0 0 \
"Primaria" "Secundaria" "Bachillerato" "Universitario"
"Postgrado"

Elegir un valor de una lista:


Xdialog --title "Titulo de la ventana" --menubox "Nivel de
estudios" 0 0 0 \
"primaria" "Primaria" "secundaria" "Secundaria" \
"bachillerato" "Bachillerato" "universitario"
"Universitario" \
"postgrado" "Postgrado"

El tercer cero se refiere a la altura del men, igualmente poniendo 0 le dejamos a


Xdialog que lo ajuste automticamente.
Elegir un valor de un rango numrico (corriendo una barra horizontal):
Xdialog --title "Titulo de la ventana" --rangebox "Qu nota le
das a esta charla" 0 0 1 10 2

En el ejemplo se muestra una barra en el que el extremo inferior es 1 y el


superior es 10. El valor inicial es 2.
Elegir un valor de un rango numrico (aumentando/disminuyendo los nmeros)
(revisar):
Xdialog --title "Titulo de la ventana" --spinbox "Qu nota le das
a esta charla" 0 0 1 10 2 "Nota"

De forma similar a la opcin inputbox, existen tambin --2rangesbox,


--3rangesbox, --2spinsbox y --3spinsbox.
Mostrar el contenido de un fichero
Xdialog --title "Titulo de la ventana" --textbox ${HOME}/.bashrc 0
0

Editar el contenido de un fichero


Xdialog --title "Titulo de la ventana" --editbox ${HOME}/.bashrc 0
0

En este caso para que se guarden los cambios es preciso "capturarlos" de stderr y
volcarlos en el fichero:
Xdialog --title "Titulo de la ventana" --editbox ${HOME}/.bashrc 0
0 2>/tmp/bashrc
cp /tmp/bashrc ${HOME}/.bashrc

Mostrar un fichero al que estn continuamente aadiendo lneas al final (por


ejemplo un log) al estilo de tail -f:
Xdialog --title "Titulo de la ventana" --tailbox
${HOME}/mifichero.log 0 0

Para probar lo anterior podemos hacer lo siguiente:

05/01/13 10:57

Xdialog, ventanas en scripts | Ubuntu-es

4 de 6

http://www.ubuntu-es.org/node/71372

touch ${HOME}/mifichero.log
Xdialog --title "Titulo de la ventana" --tailbox
${HOME}/mifichero.log 0 0 &
echo "Esta linea debe salir en la ventana del Xdialog" >>
${HOME}/mifichero.log

Hemos lanzado Xdialog en background (el & del final) para poder liberar el
terminal y poder aadir una lnea al fichero mientras la ventana del Xdialog
sigue abierta. Otra opcin hubiera sido lanzar el Xdialog (sin el &) en un
terminal y el echo en otro.
Ver un log de systema:
Xdialog --title "Titulo de la ventana" --logbox /var/log/syslog 0 0

Chequear una opcin (o ms de una) entre varias posibilidades:


Xdialog --title "Titulo de la ventana" --checklist \
"Qu distribuciones de GNU/Linux usas?" 0 0 0 \
"Debian" "Mam Debian" "off" \
"Ubuntu" "Ubuntu por supuesto" "on" \
"Fedora" "Fedora tambin existe" "off" \
"Ninguna" "No uso GNU/Linux" "unavailable"

Devuelve las opciones separadas por el carcter /


Es decir si ha marcado Debian y Ubuntu devolver:
Debian/Ubuntu
Chequear una opcin entre varias:
Xdialog --title "Titulo de la ventana" --radiolist \
"Qu distribuciones de GNU/Linux usas?" 0 0 0 \
"Debian" "Mam Debian" "off" \
"Ubuntu" "Ubuntu por supuesto" "on" \
"Fedora" "Fedora tambin existe" "off" \
"Ninguna" "No uso GNU/Linux" "unavailable"

Seleccionar un fichero
Xdialog --title "Titulo de la ventana" --fselect ${HOME} 0 0

Devuelve el nombre completo (ruta incluida) del fichero seleccionado


Seleccionar un directorio
Xdialog --title "Titulo de la ventana" --dselect ${HOME} 0 0

Mostrar un calendario para marcar un da:


Xdialog --title "Titulo de la ventana" --calendar "Calendario" 0 0
28 11 2007

Selecciona la hora (muestra la hora actual)


Xdialog --title "Titulo" --timebox "Selecciona la hora" 0 0

Elegir varias opciones "moviendo" de una ventana a otra:


Xdialog --title "Titulo de la ventana" --buildlist "Distribuciones
que uso" \
0 0 0 "ubuntu" "Ubuntu" "on" "fedora" "Fedora" "off" \
"debian" "Debian" "on" "mandriva" "Mandriva"
"off"

El resultado lo devuelve de forma similar al checklist, as si ha elegido Fedora y


Mandriva devolver:
fedora/mandriva
Mostrar un rbol
Xdialog --title "Titulo de la ventana" --treeview \
"Distribuciones segn sistema de paquetes" 0 0 0 \
"Deb" "Paquetes deb" "off" 1 \

05/01/13 10:57

Xdialog, ventanas en scripts | Ubuntu-es

5 de 6

http://www.ubuntu-es.org/node/71372

"Debian" "Distribucin Debian" "off" 2 \


"Ubuntu" "Distribucin Ubuntu" "off" 2 \
"Rpm" "Paquetes rpm" "off" 1 \
"Fedora" "Distribucin Fedora" "off" 2 \
"Mandriva" "Distribucin Mandriva" "off" 2

Ejecutando
Xdialog --help

Obtenemos una lista completa de las opciones de Xdialog.


Ejemplo de uso en un shell-script
#!/bin/bashDIR_CONTACTOS=${HOME}/cutre-contactos
DIR_TMP=${DIR_CONTACTOS}/tmp
function nuevoContacto () {
Xdialog --title "Nuevo contacto" --3inputsbox "Nombre del
contacto" 0 0 \
"Nombre corto" "${nb_corto}" "Nombre completo"
"${nb_completo}" \
"Email" "${email}" 2>${HOME}/cutre-contactos
/tmp/nuevo.txt
ret=$?
if [ $ret != 0 ]; then
nuevoContacto
fi
nb_corto=`cat ${DIR_TMP}/nuevo.txt | cut -d "/" -f 1`
nb_completo=`cat ${DIR_TMP}/nuevo.txt | cut -d "/" -f 2`
email=`cat ${DIR_TMP}/nuevo.txt | cut -d "/" -f 3`
if [ "${nb_corto}" = "" -o "${nb_completo}" = "" -o "${email}"
= "" ]; then
nuevoContacto
fi
if [ -d ${DIR_CONTACTOS}/${nb_corto} ]; then
Xdialog --title "Contacto ya existe" --msgbox \
"El contacto ${nb_corto} ya existe" 0 0
return
fi
mkdir ${DIR_CONTACTOS}/${nb_corto}
echo ${nb_completo} > ${DIR_CONTACTOS}/${nb_corto}/nombre
echo ${email} > ${DIR_CONTACTOS}/${nb_corto}/email
}
function borrarContacto() {
Xdialog --title "Borrar contacto" --infobox "No implementado" 0
0 5000
}
function modificarContacto() {
Xdialog --title "Modificar contacto" --infobox "No
implementado" 0 0 5000
}
function buscarContacto() {
Xdialog --title "Buscar contacto" --inputbox "Buscar contacto" \
0 0 "${nb_corto}" 2>${DIR_TMP}/buscar.txt
if [ $? = 0 ]; then
nb_corto=`cat ${DIR_TMP}/buscar.txt`
if [ "${nb_corto}" != "" ]; then
if [ ! -d ${DIR_CONTACTOS}/${nb_corto} ]; then
Xdialog --title "Contacto no existe" --msgbox \
"El contacto ${nb_corto} no existe" 0 0
return
else
nb_completo=`cat ${DIR_CONTACTOS}/${nb_corto}/nombre`
email=`cat ${DIR_CONTACTOS}/${nb_corto}/email`
Xdialog --title "Datos del contacto" --msgbox \
"Contacto: ${nb_corto}\nNombre:
${nb_completo}\nEmail: ${email}\n" 0 0
fi
else
return
fi
fi
}
#Crea en nuestro home los directorios que necesita
mkdir -p ${DIR_TMP} 2>/dev/null
while true ; do
nb_corto=""
nb_completo=""
email=""
Xdialog --title "Cutre-Contactos" --menubox "Accin a realizar" \
0 0 0 "nuevo" "Nuevo Contacto" "borrar" "Borrar

Contacto" \

"modificar" "Modificar Contacto" \


"buscar" "Buscar Contacto" \
"salir" "Salir" 2>${DIR_TMP}/accion.txt

retorno=$?
if [ $retorno != 0 ]; then
exit
fi
accion=`cat ${DIR_TMP}/accion.txt`
case $accion in
nuevo)
nuevoContacto
;;
borrar)
borrarContacto
;;
modificar)
modificarContacto
;;
buscar)
buscarContacto
;;

05/01/13 10:57

Xdialog, ventanas en scripts | Ubuntu-es

6 de 6

*)
;;
esac

http://www.ubuntu-es.org/node/71372

exit 1

done

Referencias
Documentacin de Xdialog (http://xdialog.free.fr/doc/index.html)
Extraido de aqu (http://zenon.wordpress.com/2007/11/27/xdialog-ventanasen-scripts/).

Inicie sesin (/user/login?destination=node/71372%23comment-form) o regstrese (/user/register?destination=node


/71372%23comment-form) para comentar

Contacto (/contacto)

Normas de los foros (/forum/normas)

Identi.ca (http://identi.ca/ubuntues)

Historia (/historia)

Normas de los blogs (/blog/normas)

Twitter (http://twitter.com/#!/ubuntu_es)

Legal (/legal)
Licencia de contenidos (/licenciacontenido)

Facebook (https://www.facebook.com
/pages/Ubuntu-es/221373207876947)
Google+ (https://plus.google.com
/101790443404001019295)

Los contenidos de esta web estn bajo


una licencia
(http://creativecommons.org
/policies#license) Creative Commons
(http://creativecommons.org/licenses
/by/3.0/es/deed.es) si no se indica lo
contrario

(http://creativecommons.org/licenses
/by/3.0/es/deed.es)

(http://www.ubuntu-es.org/)

(http://www.aditel.org/)

(http://www.drupal.org/)

05/01/13 10:57

Вам также может понравиться