GNU/Linux >> Linux Esercitazione >  >> Linux

Come creare finestre di dialogo della GUI negli script Bash con Zenity in Linux e Unix

Quando si tratta di scripting bash, tutti gli script sono principalmente focalizzati sull'operazione da riga di comando. Sia che tu abbia bisogno dell'input dell'utente o che visualizzi alcuni messaggi, tutto viene fatto tramite il terminale. La maggior parte delle persone che scrivono script utilizzando Bash non hanno idea che sia disponibile una serie di strumenti GUI. In questo articolo vedremo uno di questi strumenti chiamato Zenity - un semplice programma che ti consente di creare finestre di dialogo grafiche (GTK+) nella riga di comando e negli script della shell.

Cos'è Zenity?

Zenity è una riscrittura di gdialog, il port di dialog di GNOME che consente di creare un insieme di widget per diverse operazioni in cui gli utenti possono interagire graficamente con lo script. I widget sono basati sul toolkit GTK.

Zenity è un programma open source scritto utilizzando C linguaggio di programmazione. Supporta Linux, BSD e Windows.

Senza ulteriori indugi, vediamo come visualizzare le finestre di dialogo grafiche GTK+ dalla riga di comando e dagli script della shell usando Zenity.

Come installare Zenity in Linux

Innanzitutto, controlla se zenity è installato e disponibile per l'uso eseguendo i seguenti comandi:

$ which zenity
/usr/bin/zenity
$ zenity --version
3.32.0
$ zenity --about

Se zenity non è installato nella tua distribuzione, esegui i seguenti comandi a seconda della tua distribuzione per installarlo.

Linux alpino:

$ sudo apk add zenity

Arch Linux:

$ sudo pacman -S zenity

Fedora, RHEL, CentOS, Alma Linux e Rocky Linux:

$ sudo dnf install zenity

Debian, Ubuntu, Linux Mint, Pop OS:

$ sudo apt install zenity

openSUSE:

$ sudo zypper install zenity

1. Aiuto Zenity e opzioni comuni

Per ogni widget è presente un'opzione di aiuto associata attraverso la quale puoi ottenere una serie di opzioni supportate.

Esegui il comando seguente per accedere alla sezione della guida.

$ zenity --help

Ci sono alcune opzioni comuni che possono essere utilizzate insieme a qualsiasi widget. Queste non sono opzioni obbligatorie, ma se utilizzate ti sfrutteranno per modificare il comportamento del widget.

Per ottenere l'elenco delle opzioni comuni, eseguire il comando seguente.

$ zenity --help-general

Vedremo come funzionano queste opzioni nelle prossime sezioni.

2. Finestra di dialogo del messaggio

Una finestra di dialogo di messaggio visualizzerà una finestra di dialogo di errore, avviso, informazioni e domanda. A seconda della situazione, devi utilizzare la finestra di dialogo appropriata nello script.

2.1. Finestra di dialogo di errore

Per accedere all'elenco delle opzioni supportate per la finestra di dialogo di errore, eseguire il comando seguente:

$ zenity --help-error

Per visualizzare la finestra di dialogo di errore nello script, utilizzare il comando seguente. Qui, il --error flag creerà la finestra di dialogo di errore e --text flag stamperà il messaggio di testo. Puoi vedere dall'immagine che c'è un'icona di errore associata alla finestra di dialogo.

zenity --error \
       --title "Error Message" \
       --width 500 \
       --height 100 \
       --text "Permission denied. Run with sudo or as root user."

Puoi anche vedere dall'immagine sopra, alcune delle opzioni comuni come --width, --height sono usate per controllare la geometria della finestra di dialogo. Il flag --title viene utilizzato per stampare la barra di dialogo con il titolo.

2.2. Finestra di dialogo di avviso

Per accedere all'elenco delle opzioni supportate per la finestra di dialogo di avviso, eseguire il comando seguente:

$ zenity --help-warning

Usa --warning flag nello script per visualizzare la finestra di avviso e --text flag per visualizzare il messaggio di avviso.

zenity --warning \
       --title "Warning Message" \
       --width 500 \
       --height 100 \
       --text "Disk space exceeded the threshold limit. Check ASAP."

2.3. Finestra di dialogo delle informazioni

Per accedere all'elenco delle opzioni supportate per la finestra di dialogo delle informazioni, eseguire il comando seguente:

$ zenity --help-info

Usa --info flag nello script per visualizzare l'infobox e --text flag per visualizzare il messaggio informativo.

zenity --info \
       --title "Info Message" \
       --width 500 \
       --height 100 \
       --text "Installation completed successfully."

2.4. Finestra di dialogo della domanda

Per accedere all'elenco delle opzioni supportate per la finestra di dialogo della domanda, eseguire il comando seguente:

$ zenity --help-question

La finestra di dialogo della domanda visualizzerà un messaggio insieme a un o No opzione. Se premi "Sì" , il codice di ritorno sarà "zero" e per "No" il codice di ritorno sarà "uno" . Devi usare i codici di uscita per scrivere ulteriore logica nei tuoi script.

zenity --info \
       --title "Info Message" \
       --width 500 \
       --height 100 \
       --text "Installation completed successfully."

3. Finestra di dialogo per l'immissione di testo

Per accedere all'elenco delle opzioni supportate per la finestra di dialogo di immissione del testo, eseguire il comando seguente:

$ zenity --help-entry

La finestra di dialogo per l'immissione di testo richiede l'input per l'utente. Il flag --entry da utilizzare per creare una finestra di dialogo di immissione. Per visualizzare del testo nella finestra di dialogo, usa il --text bandiera. Il valore inserito nella casella di testo verrà stampato nel terminale una volta premuto ok. Devi memorizzare l'output in una variabile se desideri elaborare ulteriormente l'input dalla casella di testo come ho fatto di seguito.

$ USR=$(zenity --entry \
       --width 500 \
       --title "check user" \
       --text "Enter the user name"); echo $USR

Se non desideri rendere visibile il testo inserito durante la digitazione, usa il --hide-text bandiera.

$ USR=$(zenity --entry \
       --width 500 \
       --title "check user" \
       --text "Enter the user name" \
       --hide-text); echo $USR

Puoi anche impostare un valore predefinito all'interno della casella di input usando il --entry-text bandiera. Devi rimuovere il valore e fornire il tuo input o il valore esistente verrà preso come predefinito.

$ USR=$(zenity --entry \
       --width 500 \
       --title "check user" \
       --text "Enter the user name" \
       --entry-text $USER); echo $USR

4. Finestra di dialogo della password

Per accedere all'elenco delle opzioni supportate per la finestra di dialogo della password, eseguire il comando seguente:

$ zenity --help-password

La finestra di dialogo della password accetterà nome utente e password utilizzando il --username e --password bandiera. L'output verrà visualizzato come (Nome utente | Password). Devi assegnare l'output del comando a una variabile ed estrarre il nome utente e la password per ulteriori elaborazioni.

$ zenity --password --username

5. Finestra di dialogo delle informazioni di testo

Per accedere all'elenco delle opzioni supportate per la finestra di dialogo delle informazioni di testo, eseguire il comando seguente:

$ zenity --help-text-info

La finestra di dialogo delle informazioni di testo stamperà qualsiasi testo da un file o aprirà un URL nella finestra di dialogo. Ad esempio, per leggere un file e visualizzare il testo usa il flag --filename . Nell'esempio seguente, sto leggendo il /etc/hosts file.

zenity --text-info \
--title "Hostname Information" \
--filename "/etc/hosts"

Il --checkbox flag può essere utilizzato per ottenere input dall'utente. Un buon esempio potrebbe essere "Accettare il contratto di licenza". A meno che non selezioni la casella di controllo, il pulsante ok sarà disabilitato.

zenity --text-info \
--title "Hostname Information" \
--filename "/etc/hosts" \
--checkbox "This is a checkbox"

6. Finestra di dialogo Calendario

Per accedere all'elenco delle opzioni supportate per la finestra di dialogo del calendario, eseguire il comando seguente:

$ zenity --help-calendar

La finestra di dialogo del calendario visualizzerà un calendario e ti consentirà di scegliere una data. Devi memorizzare l'output in una variabile, altrimenti la data selezionata verrà stampata nel terminale.

zenity --calendar \
       --title="Select a Date" \
       --text="Select Date to pull the employee record."

Per impostazione predefinita, è selezionata la data odierna, ma possiamo anche selezionare una data personalizzata utilizzando --day , --month e --year bandiere.

zenity --calendar \
       --title="Select a Date" \
       --text="Select Date to pull the employee record." \
       --year 2015 \
       --month 7 \
       --day 15

Il formato di output predefinito sarà DD\MM\YY . È anche possibile creare un output di data personalizzato utilizzando il --date-format bandiera.

zenity --calendar \
       --title="Select a Date" \
       --text="Select Date to pull the employee record." \
       --date-format %m-%d-%y

7. Finestra di dialogo per la selezione del colore

Per accedere all'elenco delle opzioni supportate per la finestra di dialogo di selezione del colore, eseguire il comando seguente:

$ zenity --help-color-selection

La finestra di dialogo di selezione del colore visualizzerà una tavolozza e ti consentirà di scegliere un colore e l'output sarà un valore RGB. Usa --color-selection flag insieme a --show-palette bandiera.

$ COLOR_RGB=$(zenity --color-selection --show-palette)
$ echo $COLOR_RGB

8. Finestra di dialogo per la selezione dei file

Per accedere all'elenco delle opzioni supportate per la finestra di dialogo di selezione dei file, eseguire il comando seguente:

$ zenity --help-file-selection

La finestra di dialogo per la selezione dei file ti consentirà di selezionare file o directory e il percorso viene visualizzato come output. Il flag --file-selection dovrebbe essere usato. Ci sono un paio di flag che possono essere usati nella finestra di selezione dei file.

  • --filename => Percorso del file/directory predefinito
  • --directory => Solo le directory da selezionare
  • --multiple => Consente di scegliere più nomi di file
  • --save => Imposta in modalità di salvataggio
zenity --file-selection \
       --title "Select Files" \
       --filename "/home/${USER}/" \
       --multiple

In caso di selezioni multiple, il percorso del file verrà separato utilizzando il "|" simbolo.

È possibile impostare un separatore personalizzato utilizzando il --separator bandiera. Nell'esempio seguente, sto usando due punti (: ) come separatore.

zenity --file-selection \
       --title "Select Files" \
       --filename "/home/${USER}/" \
       --multiple \
       --separator :

9. Finestra di dialogo Moduli

Per accedere all'elenco delle opzioni supportate per la finestra di dialogo dei moduli, eseguire il comando seguente:

$ zenity --help-forms

La finestra di dialogo dei moduli consente di creare moduli. Un buon esempio è il nuovo modulo di registrazione utente. Usa --forms flag per creare la finestra di dialogo del modulo. Ci sono alcuni flag aggiuntivi che possono essere usati insieme ai --forms bandiera.

  • --add-entry => Aggiungi una nuova voce nella finestra di dialogo del modulo per consentire all'utente di inserire l'input.
  • --text => Testo da visualizzare nella finestra di dialogo.
  • --add-password => Accetta la password ma non visualizzerà il valore sullo schermo.
  • --calendar => Apri il calendario e scegli una data da esso.

Di seguito è riportato un semplice esempio di un modulo di registrazione utente che utilizza la finestra di dialogo dei moduli.

zenity --forms \
       --text "Welcome to signup wizard" \
       --add-entry "Enter the first name" \
       --add-entry "Enter the last name" \
       --add-entry "Enter login name" \
       --add-password "Enter password"

Il separatore predefinito per i valori di input è "|" simbolo. Puoi anche personalizzare il separatore usando --separator bandiera.

10. Finestra di dialogo Avanzamento

Per accedere all'elenco delle opzioni supportate per la finestra di dialogo della barra di avanzamento, eseguire il comando seguente:

$ zenity --help-progress

Usa --progress flag per creare una barra di avanzamento. Per creare una barra di avanzamento, devi capire come funziona. Dovrebbero essere forniti due input dalla tua parte.

  1. La riga che contiene solo il numero con l'echo il comando verrà considerato come la percentuale di avanzamento.
  2. La riga che inizia con # simbolo nel echo il comando verrà stampato come messaggio di avanzamento.
(
  echo 10
  echo "# Updating repository Index"
  sleep 5

  echo 15
  echo "# Reading input files"
  sleep 5

  echo 70
  echo "# Installing packages..."
  sleep 5

  echo 100
  echo "# Package Installation completed!"
) | zenity --title "Package Installation Progress Bar" --progress --auto-close

Una volta completata la barra di avanzamento, puoi creare una finestra di dialogo per la chiusura automatica utilizzando --auto-close flag.

11. Finestra di dialogo Elenco

Per accedere all'elenco delle opzioni supportate per la finestra di dialogo dell'elenco, eseguire il comando seguente:

$ zenity --help-list

La finestra di dialogo elenco consente di creare un elenco di righe e colonne. Usa --list flag per creare una finestra di dialogo elenco e --column flag per aggiungere colonne.

$ zenity --list \
      --column "Player" \
      --column "Club" \
      --column "Country" \
      Messi PSG Argentina \
      Neymar PSG Brazil \
      Ronaldo Manu Portugal

Dai un'occhiata all'esempio sopra. Usando la --column flag, ho creato tre colonne. Dopo aver creato le colonne, puoi inserire il valore nelle righe successive che verrà visualizzato per ogni riga come ho fatto nell'immagine sopra.

Nella prima colonna è possibile creare checkbox o pulsanti di opzione. Per creare un pulsante di opzione, usa --radiolist contrassegnare e per creare una casella di controllo, utilizzare --checklist bandiera. Quando si crea un elenco radio, è obbligatorio aggiungere TRUE o FALSO parole chiave come primo valore per la tua riga. True selezionerà la radiolist o la casella di controllo mentre false lascerà la casella deselezionata.

zenity --list \
      --checklist \
      --column "checkbox" \
      --column "Player" \
      --column "Club" \
      --column "Country" \
      FALSE Messi PSG Argentina \
      FALSE Neymar PSG Brazil \
      FALSE Ronaldo Manu Portugal

Quando si seleziona la riga e si fa clic su OK, il valore verrà stampato sul terminale con (| ) come separatore. Per impostazione predefinita, sul terminale viene stampata solo la prima colonna. Per stampare l'intera riga, passa --print-column ALL .

Conclusione

Siamo giunti alla fine dell'articolo. Ho spiegato brevemente cos'è zenity e i diversi widget disponibili per essere utilizzati. Potrebbero non essere sempre necessarie le utilità della GUI. Tuttavia, quando hai bisogno di widget grafici GTK+ nello scripting bash, Zenity tornerà utile tra gli altri strumenti della GUI.


Linux
  1. Come creare backup con il comando tar in Linux

  2. Aggiunta di una semplice GUI agli script della shell di Linux con kdialog

  3. Come creare script Bash utilizzando variabili esterne e script incorporati

  4. Come installare KVM Linux e creare VM guest con esempi

  5. Come creare e avviare container LXC Linux con i comandi LXC

Come creare un gruppo di volumi in Linux con LVM

Come creare documenti con gli script Bash

Come utilizzare il comando echo negli script Bash in Linux

Come creare e utilizzare file di scambio su Linux

Come creare un database e aggiungere una raccolta con MongoDB GUI Compass

Come eseguire app della GUI Linux su Windows 10 con WSL e WSLg