KDE - Notifica degli aggiornamenti sulla systray

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Edit-clear-history.png Attenzione. Questa guida è da considerarsi abbandonata, per via del tempo trascorso dall'ultima verifica.

Potrà essere resa obsoleta, previa segnalazione sul forum, se nessuno si propone per l'adozione.


Debian-swirl.png Versioni Compatibili

Debian 6 "squeeze"
Debian 7 "wheezy"
Debian 8 "jessie"

Introduzione

Scrivo questa breve guida per chi, come me, esegue più volte al giorno il comando:

# apt-get update && apt-get dist-upgrade

(o equivalente alias contenuto nel file .bashrc di root) alla ricerca di aggiornamenti.
Dopo aver seguito i successivi tre semplici passi, la notifica della presenza di aggiornamenti dei nostri pacchetti sarà visualizzabile direttamente sulla systray, restandoci per un tempo impostabile a piacimento.

Servono fondamentalmente tre cose:

  • Uno script che effettua la risincronizzazione dei file contenenti gli indici dei pacchetti;
  • Uno script per notificare nella systray gli aggiornamenti eventualmente trovati;
  • Un job di Cron che lancia lo script di notifica;

Script per l'aggiornamento degli indici dei pacchetti

Questo script può essere inserito in /etc/cron.hourly per essere lanciato ogni ora; il suo funzionamento è banale:

creare, come utente root, un file contenente le seguenti righe:

#!/bin/sh
apt-get update >/dev/null 2>&1

salvare il file in /etc/cron.hourly e renderlo eseguibile; se ad esempio lo abbiamo chiamato aggiorna:

# chmod +x aggiorna
Attenzione: A causa del namespace dei caratteri ridotto usato dal comando run-parts (che si occupa, in /etc/crontab, di lanciare gli script), il nome che si può scegliere per gli script inseriti in /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly e /etc/cron.monthly può contenere solo caratteri che siano lettere maiuscole, lettere minuscole, numeri, trattini( - ) o underscore ( _ ), pena il fallimento del lancio degli script stessi.

Il compito di questo script è soltanto quello di aggiornare la lista degli indici dei pacchetti, senza aggiornare il sistema. L'output e gli eventuali errori del comando apt-get update vengono soppressi. Per le mie necessità è sufficiente in quanto gli errori sono spesso dovuti all'irraggiungibilità dei repository, cosa in genere risolta in poco tempo.

Se si vuol far in modo che lo script venga eseguito ad intervalli diversi dall'ora, è possibile inserire la seguente riga:

*/20 * * * * /usr/bin/apt-get update >/dev/null 2>&1

attraverso il comando:

# crontab -e

Il formato da utilizzare è quello di crontab.
Con la precedente riga si indica a Cron di lanciare il job ogni ora quando i minuti sono 20 o multipli di 20 (ad esempio: 15.20, 15.40, 16.00, 16.20 etc.)

È possibile istruire Cron per lanciare il job anche all'avvio del sistema. In questo caso c'è da aggiungere una seconda riga:

@reboot /usr/bin/apt-get update >/dev/null 2>&1

Questa modifica si dimostrerà molto utile, come si vedrà più avanti, nel caso si decidesse di volere la notifica degli aggiornamenti anche all'avvio di una sessione di KDE.

Questa è l'unica parte della guida in cui i comandi vanno dati con i permessi di root; i successivi passi vanno eseguiti attraverso i normali privilegi utente.

Script di notifica nella systray

Lo script che si occupa di far comparire la notifica nella systray fa uso di Kdialog:

#!/bin/bash

NUM=`aptitude search ~U | wc -l`

if [ $NUM -eq 0 ]; then exit
elif [ $NUM -eq 1 ]; then env DISPLAY=:0 kdialog --passivepopup "È stato trovato un aggiornamento" 600
else env DISPLAY=:0 kdialog --passivepopup "Sono stati trovati $NUM aggiornamenti" 600
fi
exit
NUM
variabile che conterrà il numero di pacchetti aggiornabili;
aptitude search ~U
fornisce una lista (estratta dalla lista aggiornata ogni ora dal job di cron precedente) dei pacchetti che possono essere aggiornati;
wc -l
prende l'output del comando precedente e ne conta le linee. In pratica conta il numero di pacchetti che possono essere aggiornati;
env DISPLAY=:0 kdialog
viene utilizzato il comando env per settare la variabile d'ambiente DISPLAY ed eseguire il comando kdialog;
--passivepopup
parametro che indica a Kdialog di mostrare un popup di notifica contenente il testo specificato tra virgolette;
600
numero che esprime, in secondi, il tempo per cui resta attiva la notifica nella systray;

In maniera simile a quanto fatto con lo script precedente, salvare il file in una directory della nostra home (~/scripts ad esempio ) chiamandolo notifica (o in qualche altro modo) e renderlo eseguibile:

$ chmod +x ~/scripts/notifica
Info.png Nota
Nelle versioni di apt a partire dalla 1.0, attualmente presenti in Jessie, i pacchetti da installare possono essere visualizzati con il comando:
$ apt list --upgradable
Pertanto, per chi non vuole ricorrere ad aptitude, nello script precedente bisogna sostituire la riga:
NUM=`aptitude search ~U | wc -l`
con le righe:
NUM=`apt list --upgradable 2>/dev/null | wc -l`
NUM=$((NUM-1))
La soppressione dell'output di errore e il decremento di uno del numero di pacchetti si rende necessario in quanto il comando, da poco introdotto, avverte l'utente di possibili problemi nel suo utilizzo all'interno di script.


Job di Cron per lanciare lo script di notifica

Il job di Cron per lanciare lo script precedente deve essere specificato nel formato di crontab:

30 * * * * ~/scripts/notifica >/dev/null 2>&1

che può essere inserito dopo aver eseguito il comando:

$ crontab -e

Nell'esempio indicato, il job di Cron verrà lanciato ogni ora e quando i minuti valgono 30 (01.30, 02.30, 03.30 e così via). L'intervallo di tempo è liberamente modificabile; ad esempio, se si vuol lanciare il job ogni 10 min:

*/10 * * * * ~/scripts/notifica >/dev/null 2>&1

Notifica all'avvio di una sessione KDE

Questo passaggio non è fondamentale ma potrebbe rivelarsi utile per gli utenti che volessero ricevere la notifica di aggiornamenti all'avvio della loro sessione di KDE.
La prima cosa da fare è accertarsi, come spiegato nel primo paragrafo, che Cron esegua l'aggiornamento della lista dei pacchetti all'avvio del sistema; quindi eseguire il comando:

$ ln -s /percorso/dello/script/script_di_notifica /home/utente/.kde/Autostart/nome_link

che creerà, nella cartella Autostart, un link simbolico nome_link allo script di notifica. In questo modo lo script verrà lanciato all'avvio di KDE.
In particolare, per un utente pippo e con lo script chiamato notifica contenuto in /home/pippo/script/, il comando diventa:

$ ln -s /home/pippo/script/notifica /home/pippo/.kde/Autostart/notifica

o, più semplicemente:

$ ln -s ~/script/notifica ~/.kde/Autostart/notifica

Conclusioni

Da questo momento in poi le notifiche degli aggiornamenti compariranno nella nostra systray.
Per aggiornare il sistema sarà comunque necessario dare il comando:

# apt-get upgrade

oppure:

# apt-get dist-upgrade

a seconda delle necessità.

Documentazione




Guida scritta da: S3v Swirl-auth20.png Debianized 20%
Estesa da:
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized