Come fare per “notificare”, in un nostro demone avviato all’avvio o da uno script in crontab, all’utente il verificarsi di determinati eventi o errori?
Per questo ci può venire in aiuto notify-send 🙂
Questo programma è presente nel pacchetto libnotify-bin, che non è installato di default su Ubuntu, e quindi dobbiamo farlo noi:
sudo apt-get install libnotify-bin
Per le modalità di utilizzo vi consiglio di dare uno sguardo alla manpages:
man notify-send
o meglio ancora all’help online:
notify-send --help
Di seguito vi riporto il codice di uno script di esempio, che ho fatto io, in modo da farvi apprezzare le potenzialità 😉
Il mio script può essere avviato con diversi parametri:
| Parametro | Descrizione |
| -u utente | Notifica solo all’utente selezionato. Se non specificato la notifica viene inviata a tutti gli utenti attualmente attivi con DE GNOME |
| -l [low|normal|critical] | Seleziona il livello di informazione del messaggio, in base a quello impostato, cambia l’icona. Se non specificato il livello sarà low |
| -T utente | Titolo del messaggio |
| -M utente | Testo del messaggio |
| -t utente | Tempo di visualizzazione, in millisecondi, del messaggio (opzionale) |
Di seguito il sorgente dello script:
#! /bin/bash
USERS=""
TITLE=""
MESSAGE=""
IMAGE=""
TIME=""
LEVEL="low"
ICN_NORMAL=/usr/share/icons/Human/22x22/status/important.png
ICN_LOW=/usr/share/icons/Human/22x22/status/info.png
ICN_CRITICAL=/usr/share/icons/Human/22x22/status/error.png
while [ $# -gt 0 ]
do
case $1 in
-l )
LEVEL="${2}"
shift
;;
-u )
USERS=" -u ${2} "
shift
;;
-T )
TITLE="${2}"
shift
;;
-M )
MESSAGE="${2}"
shift
;;
-t )
TIME=" -t ${2}"
shift
;;
esac
shift
done
case $LEVEL in
normal)
ICONA=$ICN_NORMAL
;;
low)
ICONA=$ICN_LOW
;;
critical)
ICONA=$ICN_CRITICAL
;;
*)
LEVEL="normal"
ICONA=$ICN_NORMAL
;;
esac
if [ -e $ICONA ]
then
OICN=" -i ${ICONA} "
else
OICN=""
fi
pgrep ${USERS} gnome-panel > /tmp/panel.pid
while read PID
do
strings /proc/${PID}/environ \
|grep DBUS_SESSION_BUS_ADDRESS > /tmp/env
source /tmp/env
DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS \
notify-send \
$OICN $TIME \
-u $LEVEL \
"${TITLE}" \
"${MESSAGE}"
done < /tmp/panel.pid
rm -f /tmp/panel.pid /tmp/env
Di seguito invece un esempio di notifica utilizzando lo script:

Come potete vedere utilizzo le icone del tema Human di GNOME ma, modificando lo script in maniera adeguata, ci si può mettere qualsiasi immagine 🙂
Spero possa esservi utile 😉
Ciao,
grazie per le informazioni molto utili.
Luca
Grazie sono moltissimo interessato ma, aimé, anche piuttosto niubbo!!!
Posso creare uno script (dove lo devo “mettere” una volta fatto) che mi mostri il conto alla rovescia all’esecuzione di un comando impostato su CRON?
Lo script certo che lo puoi fare (lo puoi mettere dove vuoi, basta specificare il path in crontab, io, ad esempio, nella mia home directory ho una cartella “bin” dove metto gli script) ma non lo vedo molto applicabile, perchè non puoi modificare il testo della notifica quando è già comparso (non so se mi sono spiegato) e verrebbero mostrati N box uno per ogni secondo del il conto alla rovescia.
Grazie per il chiarimento! Mi conviene allora impostare degli avvertimenti a tempi determinati; se quindi il comando “halt” scatta alle 15:00, metterò gli avvertimenti 2 minuti, 1 minuto e poi 30 secondi prima che il comando venga eseguito.
E’ possibile far eseguire allo script (o più di 1) un comando del genere?
Si, è ovviamente un po più complicato ma si può fare, in crontab lo imposti 3-4 minuti prima e con l’aiuto di “sleep” temporeggi la visualizzazione delle notifiche 😉
Grazie ora mi metto all’opera!!!