headermask image

header image

Aggiungere interfacce grafiche agli script shell #1

Lavorando molto con Linux, si impara che con uno script shell si possono fare cose impensabili. La filosofia di Unix, da cui Linux ha attinto molto, è di fornire tante piccole utility, combinabili per ottenere risultati complessi a piacere.

Esempi ce ne sono tantissimi, piuttosto che presentare il codice di ognuno, basta dire che in un solo comando si possono convertire tutti i file MP3 in un albero di directory in formato OGG, oppure cercare e stampare tutte le immagini PNG su un disco, scalare tutte le immagini e salvarle in un altro formato, rinominare tutti i file in minuscolo, ecc. ecc., tutto con le utility fornite “di serie” in praticamente tutte le distribuzioni Linux.

Quello che manca agli script shell è una interfaccia utente. O meglio, non è che ce ne sia proprio il bisogno, ma in qualche caso, con utenti particolarmente refrattari, o semplicemente per impedire all’utente stesso di fare danni, può essere utile aggiungere un po’ di frivolezza agli austeri script, dotandoli di un minimo di GUI.

Per chi usa GNOME come desktop (funziona anche con KDE, basta avere installate le librerie appropriate), esiste l’utility
Zenity. Il suo funzionamento è molto semplice: in funzione dei parametri sulla riga di comando, Zenity mostra finestre di dialogo di vario tipo, ed all’uscita comunica nei modi consueti delle utility cosa ha scelto o cliccato l’utente.

Vediamo un esempio: una finestra di dialogo con un semplice messaggio generico. Apriamo una finestra terminale e digitiamo il comando:


$ zenity --info --title="Ecco Zenity" --text="Un messaggio informativo qualsiasi"

Apparirà una finestra di dialogo come questa:
Zenity Info
Oppure vogliamo fare una domanda con risposta “OK” o “Annulla”:


$ zenity --question --title='Una domanda da Zenity' --text="Vuoi che ti mostri cosa so fare?"

e la finestra sarà come questa:
Zenity Question
Vediamo di comprenderne il funzionamento. Per decidere cosa deve mostrare, Zenity necessita di un parametro che indica appunto il tipo di dialog, Nei due esempi il parametro è rispettivamente --info e --question. Il parametro --text fornisce il testo del messaggio o della domanda. Il parametro --title è invece il titolo della finestra; può essere specificato in tutti i tipi di finestre di dialogo, tranne nelle icone di notifica, che vedremo poi.

Rimane il problema di capire cosa ha fatto l’utente. Nella finestra di dialogo informativa in effetti ci si aspetta solo che si legga il messaggio e basta, quindi il valore di ritorno sarebbe ininfluente, ma per regola generale se si chiude la finestra di dialogo cliccando sul pulsante “X” nel titolo della finestra, Zenity uscirà con valore di ritorno false che nella programmazione shell è un valore diverso da zero. Se invece si clicca sul pulsante “OK” Zenity ritorna true ossia esattamente zero.

Stessa cosa avviene per la finestra di dialogo con la domanda, solo che anche quando si preme il pulsante “Annulla” Zenity ritorna false. Per controllare il valore di ritorno in Bash si può usare questo metodo:


zenity --question --title='Una domanda da Zenity' --text="Vuoi che ti mostri cosa so fare?"
res=$?

if [ "$res" -ne 0 ]; then
  # hai premuto annulla o hai chiuso la finestra
  # esco dallo script
  exit 1
fi
# hai premuto “ok”
# proseguo con lo script

Il pezzetto di codice mostrato mostra la finestra di dialogo con la domanda, vista prima, attende il ritorno di Zenity e ne prende il codice di uscita ($? viene sostituito con il valore di ritorno dell’ultimo comando eseguito). Se l’utente ha premuto “Annulla” o ha chiuso la finestra esce dallo script.

Prima di chiudere vediamo altre due finestre di dialogo, essenzialmente identiche a quella informativa. La prima è una finestra di avvertimento:


$ zenity --warning --title="Ti avverto..." --text="Troppo tempo è passato dall'ultimo backup"

che produce questo risultato:
Zenity Warning
La seconda è una finestra di errore:


$ zenity --error --title="Ho trovato un errore" --text="Non hai ancora installato Linux. Male."

che mostra questo:
Zenity Error
In pratica cambia soltanto l’icona che accompagna il messaggio.

Una ultima cosa: lo stile e le icone mostrate sono definite dal tema del desktop installato, per cui colori, font e immagini seguono le impostazioni del desktop.

Nel prossimo articolo vedremo altre funzioni di Zenity.

Se ti piace quello che scrivo registrati al feed RSS

One Comment

  1. Davvero interessante, non conoscevo Zenity. Bookmarkato!

    1. Gianni Amato on 5 Febbraio 2008 at 01:50

Post a Comment

Your email is never published nor shared. Required fields are marked *

*
*
  • Licenza

    Creative Commons License
    Questo sito e tutti i suoi contenuti sono pubblicati sotto una Licenza Creative Commons, quando non diversamente specificato.

    Per altri usi, basta contattarmi.

  • Argomenti

  • Archivio mensile

  • Spazio offerto da

  • Alzate d'ingegno

    D: invece di usare il solito software pirata, hai provato OpenOffice?

    R: ho provato più volte a scaricarlo da Emule, ma ha sempre problemi.

  • Amici

  • Buonumore

  • Da leggere

  • Sicurezza e computer

  • Adesivi