Posted tagged ‘GNU/Linux’

Zenity — Diálogos desde la Shell

septiembre 27, 2008

Zenity nos permitirá crear ventanas gráficas desde la línea de comandos, cosa bastante útil o por lo menos atractiva a la hora de crearnos nuestros propios scripts.

Por ejemplo, el siguiente comando:

zenity --info --text="Esta es una pantalla de información"

Sacaría la siguiente pantalla:

Guapo ¿verdad?, sobre todo teniendo en cuenta que esto ha sido generado con tan solo una línea. Zenity nos permite crear distintos tipos de dialogos y para cada uno de ellas tenemos distintos tipos de parámetros.

Parámetros globales

Estos parámetros se pueden establecer a cualquier tipo de ventana.

  • title: Título del diálogo
  • window-icon: Icono del diálogo
  • width: Ancho del diálogo
  • heigth: Alto de la ventana

Dialogos y parámetros específicos

  • Calendar: Muestra un calendario
    • text: Texto del dialogo
    • day: Día
    • month: Mes
    • year: Año
    • date-format: Formato para la fecha devuelta
    zenity --calendar --title="Calendario"
    --window-icon="/usr/share/pixmaps/apple-red.png"
    --text="Esto es un diálogo de un calendario"
    --day=17 --month=9 --year=2008

    En caso de aceptar, el comando anterior nos devolvería: 17/09/08 que es el patrón (date-format) por defecto. Si por el contrario se cancela, no se devolvería nada.

  • Entry: Ventana de entrada de texto, ideal cuando se realizan preguntas al usuario.
    • text: Etiqueta de texto a mostrar.
    • entry-text: Valor introducido por defecto en la caja de texto.
    • hide-text: Si el texto a introducir por el usuario se quiere ocultar como si se tratase de una password.
    zenity --entry --title="Entrada de texto"
    --window-icon="/usr/share/pixmaps/apple-red.png"
    --text="¿Cual es tu nombre?" --entry-text="Nombre por defecto"

    De la misma forma esto nos devolverá el texto introducido si se pulsa en aceptar y nada si se hace sobre cancelar.

  • File Selection: Típica ventana de selección de archivo.
    • filename: Establece el nombre del archivo
    • multiple: Permite la selección multiple de archivos o directorio en el dialogo
    • directory: Activa la selección única de directorio
    • save: Activa el modo de guardar
    • separator: Especifica el caracter separador cuando se devulven varios archivos
    • confirm-overwrite: Confirma la selección del archivo si este ya existe.
  • Error Info y Warning: Ventana de error, información o advertencia.
    • text: Texto
    • no-wrap: Invalida la selección de texto.
    zenity --error --title="Error" --text="Error inesperado"
  • List: Una lista o tabla.
    • text: Texto del dialogo
    • column: Nombre de la columna
    • checklist: Hace que la primera columna sea de checklists
    • radiolist: Hace que la primera columna sea de radiobuttons
    • separator: Establece el separador de los campos cuando son devueltos.
    • multiple: Permite la selección multiple de opciones.
    • editable: Permite editar las opciones
    • print-column: Establece la columna a devolver. P.e: “1”, “2” , “ALL”.
    • hide-column: Número de la  columna a ocultar.
    zenity --list --title="Seleccione la opción" --radiolist --column=""
    --column="Opción" --column="ID" "" "Opción 1" "1" "" "Opción 2" "2"
    --print-column="3" --hide-column="3"

    Este ejemplo devuelve el ID de la columna o nada si se pulsa en cancelar.

  • Notification: Icono de notificación.
    • text: Texto de la notificación.
    • listen: A la escucha de comandos en stdin.
  • Progress: Ventana de progreso.
    • text: Texto a mostrar en el dialogo
    • percentage: Porcentaje inicial
    • auto-close: Cerrar al terminar
    • auto-kill: Matar al proceso padre si se cierra el dialogo
    • pulsate: Pues eso que “pulsa” la barra de progreso

    Normalmente este dialogo se utiliza pasandole por pipelines otro comando que es el que realiza la acción. Por ejemplo:

    cp -rv /home/usuario1/* /home/usuario2/ | zenity --progress --text="Copiando la HOME"
    --auto-close --auto-kill --pulsate
  • Question: Ventana de pregunta si/n.
    • text: Texto
    • no-wrap: Invalida la selección de texto.
    zenity --question --text="¿Quieres jugar a un juego?"

    En este caso, si el usuario presiona Si la variable del sistema $? pasará a valer 0 mientras que si presiona en No pasará a valer 1.

  • Text Info: Ventana de informacion de texto
    • filename: Archivo de texto que se cargará en el dialogo
    • editable: Permite la modificación del texto.

Hay muchos mas ejemplos en las páginas del manual de zenity, pero para sacarle el máximo rendimiento a este comando os sugiero que os leáis el manual oficial, en el cual además de profundizar más en los temas aquí tratados dan trucos y consejos sobre la utilización de las distintas ventanas.

Anuncios

Ejecutar máquinas virtuales sin iniciar sesión en Ubuntu

septiembre 27, 2008

Hace un par de días un amigo me comentó como hacer para ejecutar una máquina virtual creada con VirtualBox sin necesidad de iniciar sesión en nuestro sistema Ubuntu (u otro cualquiera derivado de Debian). Esto me pareció bastante útil ya que por desgracia en la Universidad me hacen depender todavía de aplicaciones que solo están disponibles para sistemas Windows y no pueden correr con WIne y en diversas ocasiones tengo que enceder el portatil tan solo para usar la susodicha máquina virtual.

Para llevar esto a cabo solo hay que seguir estos sencillos tres pasos:

Creación de archivo .desktop en /usr/share/xsessions

Tal y como indica el título tenemos que crear un archivo con el nombre que queramos y con extensión .desktop con la siguiente estructura:

[Desktop Entry]
Encoding=UTF-8
Name=Nombre que aparecerá en sesion p.e Windows XP (máquina virtual)
Exec=(Ruta y) Nombre del script que ejecuta la maquina virtual p.e mvwinxp
Type=Application

Una vez tenemos el archivo creado, le asignamos permisos de lectura:

$ sudo chmod +r /usr/share/winxp.desktop

y pasamos al siguiente paso.

Creación del script

En el apartado anterior creamos el .desktop y en él establecimos en el campo exec el nombre de un script, pues bien ese es el script que debemos de crear ahora. Yo los suelo meter en /usr/bin/ pero puedes ponerlo en otro sitio siempre y cuando en el .desktop anterior establezcas la ruta completa.

El contenido del script debe ser el siguiente:

#!/bin/bash
VBoxSDL -vm "Nombre maquina virtual" -fullscreen
exit $?

Finalmente establecemos permisos de lectura y escritura:

$ sudo chmod +rx /usr/bin/mvwinxp

Prueba

Este es el paso más importante, y consiste en probar que no os la he metido doblada y esto funciona de verdad xD

Para ellos primero cerramos la sesión actual. Una vez en el GDM pinchamos en el botón de Opciones y en Inicio de Sesión. Entonces veremos como tenemos una entrada nueva que se corresponde al campo Name del archivo .desktop. Si la seleccionamos y seguidamente tecleamos nuestro nombre de usuario y contraseña veremos como comienza a arrancar nuestra máquina virtual.

Una  vez la apaguemos volveremos al GDM.