Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Zenity: gli script bash diventano grafici

Con Zenity possiamo corredare i nostri script di shell con finestre di dialogo grafiche. Un tutorial passo per passo su come utilzzarlo
Con Zenity possiamo corredare i nostri script di shell con finestre di dialogo grafiche. Un tutorial passo per passo su come utilzzarlo
Link copiato negli appunti

Quando pensiamo ad uno script di shell, la nostra immaginazione ci porta subito ad uno schermo nero, qualche parola in bianco o in verde, ed un cursore lampeggiante: nessuna finestra, nessun pulsante, ma solo testo.

Zenity è un programma open source rivolto a tutti coloro che utilizzano GNOME come desktop environment, che ha lo scopo di creare, utilizzando semplici comandi di shell, finestre di dialogo, liste, notifiche e altro. Certo, non possiamo aspettarci miracolo, ma senza dubbio renderemo gli script molto più user-friendly con pochi semplici accorgimenti.

Nelle ultime distribuzioni di Ubuntu lo trovate già installato; se però non lo avete a disposizione, possiamo sempre utilizzare il classico apt:

# apt-get install zenity

Una volta installato, iniziamo ad occuparci delle nostre interfacce grafiche.

Finestre di dialogo: messaggi

Ci sono tre tipi di finestre di dialogo base che Zenity ci mette a disposizione: info, error e warning. Vediamo la sintassi per utilizzarle:

$ zenity --info --title="html.it" --text="Questa è un messaggio di informazione"

Questa semplice riga di comando include un titolo, definito dall'opzione --title, ed un testo, definito da --text. L'opzione --info specifica, invece, che si tratta di un messaggio di informazione. Il risultato ottenuto dalla riga precedente è mostrato in figura 1:

Figura 1: Zenity Info Message
Zenity Info Message

Analogamente all'info message appena visto, utilizzando le opzioni --error e --warning al posto di --info, si ottengono rispettivamente messaggi di errore e di attenzione (figure 2 e 3):

Figura 2: Zenity Error Message
Zenity Error Message
Figura 3: Zenity Warning Message
Zenity Warning Message

Per tutte le finestre appena viste, e per tutte quelle che vedremo, è possibile settare alcuni importanti parametri, specificando le seguenti opzioni:

  • --title=TITLE: imposta il titolo della finestra di dialogo.
  • --text=TESTO: imposta il testo della finestra di dialogo.
  • --width=WIDTH: spefica la larghezza della finestra.
  • --height=HEIGHT: specifica l'altezza della finestra.
  • --timeout=TIMEOUT: imposta un tempo dopo il quale, se l'utente non fa nulla, la finestra viene chiusa.

Vediamo un esempio che crea un messaggio di warning in una finestra di 400x400 pixel, che viene chiusa dopo 20 secondi di inattività:

zenity --warning --title="html.it" --text="Questa è un messaggio di attenzione" --width=400 --height=400 --timeout=20

Notifiche: un'alternativa ai messaggi

Oltre alle finestre, Zenity consente l'utilizzo di notifiche, che appaiono direttamente accanto al pannello (in alto a destra, per intenderci). Per utilizzare questa utility, è necessario utilizzare qualche piccolo stratagemma, poiché questa volta il campo --text non ci viene in aiuto (e l'opzione --help di Zenity fornisce più dubbi che chiarimenti.).

Consideriamo il seguente comando:

$ echo 'message:Errore!' | zenity --notification --listen --window-icon="error"

  • --window-icon consente di impostare l'icona della notifica. I valori ammessi sono info, error e warning. Se non specificato nulla, il valore di default è warning.
  • --listen è utilizzato per consentire a zenity di ricevere il messaggio passato via pipe da echo.
  • Il testo della notifica va preceduto da "message:", come nell'esempio.
Figura 4: Notifiche con zenity
Notifiche con zenity

Finestre di dialogo: domande e... risposte

Oltre ai messaggi appena visti, Zenity offre molte altre utili possibilità di interazione con l'utente. Capita spesso che, in un'applicazione, è necessario richiedere all'utente se si vuole fare o meno una determinata azione. Proprio per questa esigenza esistono le "questions", ovvero le finestre di domanda, grazie alle quali possiamo chiedere all'utente una conferma. In sostanza, otterremo una finestra di dialogo simile a questa:

Figura 4: Zenity Question
Zenity Question

Per ottenere questo risultato, è sufficiente ancora una volta un semplice comando:

$ zenity --question --title="html.it" --text="Vuoi proseguire?" --ok-label="Certo che si" --cancel-label="Assolutamente no"

Con le opzioni --ok-label e --cancel-lable è possibile modificare il contenuto dei pulsanti di conferma a nostro piacimento. Per noi italiani, GNOME imposta di default OK e Annulla.

Mentre negli esempi precedenti, il valore di ritorno del messaggio è pressoché irrilevante, qui abbiamo la necessità di ottenere la risposta dell'utente per poi utilizzarla. Il codice seguente mostra, con un esempio, come fare.

zenity --question --title="html.it" --text="Vuoi proseguire?" --ok-label="Certo che si" --cancel-label="Assolutamente no"

Il risultato verrà salvato in una variabile chiamata $?

if [ "$?" -ne 0 ]
then
        echo "Alla prossima"
else
        echo "Proseguo il programma"
fi

In generale, Zenity imposta sempre la variabile $? a 0 se l'utente scegli l'opzione Ok, e a 1 se viene scelta l'opzione Annulla.

Questa utility può essere interessante anche quando si vogliono ottenere delle stringhe digitate dall'utente. L'esempio classico è la richiesta di username e password. Per fare ciò, utilizziamo l'opzione --entry.

$ zenity --entry --title="Richiesta username" --text="Inserisci il nome utente:" --entry-text="Testo di default"

Il comando visto crea una casella di testo contenente la stringa "Testo di default", che l'utente può modificare. È possibile anche nascondere il testo all'utente, come si fa per le password, aggiungendo l'opzione (senza parametri) --hide-text.

Il risultato di questo comando è esattamente la stringa inserita dall'utente nel caso in cui egli preme Ok (e la variabile $? viene impostata a 0); altrimenti, verrà semplicemente impostata ad 1 la variabile $?

Figura 4: Zenity Entry
Zenity Entry

Altri comandi

Le funzionalità che ci offre Zenity non sono ancora finite. Oltre alla possibilità di utilizzare messaggi di avviso ed errore, finestre di dialogo e notifiche, vi sono ancora altre funzionalità utilissime, che elenchiamo qui per brevità (anche perché, compresi gli esempi precedenti, non sarà difficile imparare ad usare queste altre funzioni):

  • --file-selection: apre una finestra di ricerca (il classico tasto "sfoglia"). È possibile impostare la directory o il file di partenza tramite l'opzione --filename; se non specificato nulla, viene utilizzata la working directory.
  • --scale: consente di selezionare un valore intero in un intervallo, attraverso un cursore. Sono settabili i valori minimo e massimo, e il passo. Per maggiore dettagli, basta dare un'occhiata all'output di zenity --help-scale.
  • --list: utile se si vuole visualizzare una lista. Anche in questo caso, maggiori dettagli sulle opzioni possono essere consultati in zenity --help-list.
  • --progress: consente l'utilizzo di una progress bar riferita all'avanzamento di alcuni comandi (come per esempio la copia o la rimozione di file). Dettagli in zenity --help-progress.
  • --calendar: utile come finestra di selezione di una data. La data selezionata viene ritornata direttamente.

Adesso che avete visto come utilizzare Zenity, siete pronti a sperimentare qualche semplice interfaccia grafica, per rendere un po' più amichevole agli utenti meno esperti l'utilizzo dei vostri script di shell.

Ti consigliamo anche