Un box di notifica GNOME per demoni


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😉

6 thoughts on “Un box di notifica GNOME per demoni

  1. Alessandro Fama ha detto:

    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?

  2. 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.

  3. Alessandro Fama ha detto:

    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?

  4. 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😉

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...