KDE - Notifica degli aggiornamenti sulla systray: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
mNessun oggetto della modifica
 
(23 versioni intermedie di 2 utenti non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili|Squeeze|Wheezy|Jessie}}
{{Versioni compatibili| Buster}}
 
== Introduzione ==
== Introduzione ==
Scrivo questa breve guida per chi, come me, esegue più volte al giorno il comando:
In questa guida verrà spiegato come ricevere la notifica del numero di pacchetti aggiornabili senza eseguire periodicamente i comandi:
<pre># apt-get update && apt-get dist-upgrade</pre>
<pre># apt-get update && apt-get dist-upgrade</pre>
(o equivalente [[alias]] contenuto nel file <code>.bashrc</code> di root) alla ricerca di aggiornamenti.<br/>
(o equivalente [[alias]] contenuto nel file <code>.bashrc</code> di root) alla ricerca di aggiornamenti.<br/>
Riga 7: Riga 8:


Servono fondamentalmente tre cose:
Servono fondamentalmente tre cose:
* Uno [[script]] che effettua la risincronizzazione dei file contenenti gli indici dei pacchetti;
* Un job di [[Cron]] che effettua la risincronizzazione dei file contenenti gli indici dei pacchetti e il download dei pacchetti coinvolti nell'aggiornamento (ma senza installarli);
* Uno script per notificare nella systray gli aggiornamenti eventualmente trovati;
* Uno [[script]] per notificare nella systray gli aggiornamenti eventualmente trovati;
* Un job di [[Cron]] che lancia lo script di notifica;
* Un job di Cron che lancia lo script di notifica;
 
== Script per l'aggiornamento degli indici dei pacchetti ==
Questo script può essere inserito in <code>/etc/cron.hourly</code> per essere lanciato ogni ora; il suo funzionamento è banale:
 
creare, come utente root, un file contenente le seguenti righe:
<pre>#!/bin/sh
apt-get update >/dev/null 2>&1</pre>
salvare il file in <code>/etc/cron.hourly</code> e renderlo eseguibile; se ad esempio lo abbiamo chiamato ''aggiorna'':
<pre># chmod +x aggiorna</pre>
:'''Attenzione:''' A causa del namespace dei caratteri ridotto usato dal comando ''run-parts'' (che si occupa, in <code>/etc/crontab</code>, di lanciare gli script), il nome che si può scegliere per gli script inseriti in <code>/etc/cron.hourly</code>, <code>/etc/cron.daily</code>, <code>/etc/cron.weekly</code> e <code>/etc/cron.monthly</code> 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 <code>''apt-get update''</code> 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:
== Cronjob per l'aggiornamento degli indici dei pacchetti e il download ==
Con i permessi di [[root]] eseguire il comando:
<pre>
<pre>
*/20 * * * * /usr/bin/apt-get update >/dev/null 2>&1
# crontab -e
</pre>
</pre>
attraverso il comando:
e inserire le seguenti righe:
<pre># crontab -e</pre>
Il formato da utilizzare è quello di [[Utilizzo del servizio di scheduling Cron#Crontab_Command_settings|crontab]].<br/>
Con la precedente riga si indica a <code>Cron</code> 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 <code>Cron</code> per lanciare il job anche all'avvio del sistema. In questo caso c'è da aggiungere una seconda riga:
<pre>
<pre>
@reboot /usr/bin/apt-get update >/dev/null 2>&1
30 15,18,21 * * * /usr/bin/apt -qq update && /usr/bin/apt -qq -d upgrade
@reboot /usr/bin/apt-get -qq update && /usr/bin/apt-get -qq -d dist-upgrade
</pre>
</pre>
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.
Verrà eseguito al boot della macchina e alle 15,30 - 18,30 - 21,30 l'aggiornamento degli indici dei pacchetti e il download dei pacchetti stessi ma senza installarli. Prestare attenzione all'opzione "-qq" che sopprime i messaggi di [[apt]] e a "upgrade" che può essere sostituito con "dist-upgrade" in base alle proprie esigenze.<br/>
L'opzione "-d" permette il download automatico dei pacchetti in modo tale che questo possa avvenire in background rendendo il successivo aggiornamento del sistema molto più veloce. Rimuovere tale opzione se non si desidera che i pacchetti aggiornabili vengano scaricati, magari perché si vuole soltanto la notifica degli aggiornamenti per poter scegliere successivamente quali installare.<br/>
L'aggiunta della riga che inizia con "@reboot" 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.
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 ==
== Script di notifica nella systray ==
Lo script che si occupa di far comparire la notifica nella systray fa uso di [http://techbase.kde.org/Development/Tutorials/Shell_Scripting_with_KDE_Dialogs Kdialog]:
Lo script che si occupa di far comparire la notifica nella systray fa uso di [[#Kdialog|Kdialog]].
<pre>#!/bin/bash
<pre>#!/bin/bash


NUM=`aptitude search ~U | wc -l`
NUM=$(( $(apt list --upgradable 2>/dev/null | wc -l) - 1 ))
 
sleep 60


if [ $NUM -eq 0 ]; then exit
if [ $NUM -eq 0 ]; then exit
Riga 53: Riga 43:


; <code>'''NUM'''</code>: variabile che conterrà il numero di pacchetti aggiornabili;
; <code>'''NUM'''</code>: variabile che conterrà il numero di pacchetti aggiornabili;
; <code>'''aptitude search ~U'''</code>: fornisce una lista (estratta dalla lista aggiornata ogni ora dal job di cron precedente) dei pacchetti che possono essere aggiornati;
; <code>'''(apt list --upgradable 2>/dev/null | wc -l) - 1'''</code>: fornisce una lista (estratta dalla lista aggiornata ogni ora dal job di Cron precedente) dei pacchetti che possono essere aggiornati. La soppressione dell'output di errore e il decremento di uno del numero di pacchetti si rende necessario in quanto il comando avverte l'utente di possibili problemi nel suo utilizzo all'interno di script.
; <code>'''wc -l'''</code>: prende l'output del comando precedente e ne conta le linee. In pratica conta il numero di pacchetti che possono essere aggiornati;
; <code>sleep 60</code>: attende sessanta secondi in modo da prevenire eventuali problemi in caso di mancato caricamento del vassoio di sistema prima dei comandi successivi;
; <code>'''env DISPLAY=:0 kdialog'''</code>: viene utilizzato il comando <code>env</code> per settare la variabile d'ambiente DISPLAY ed eseguire il comando <code>kdialog</code>;
; <code>'''env DISPLAY=:0 kdialog'''</code>: viene utilizzato il comando <code>env</code> per settare la variabile d'ambiente DISPLAY ed eseguire il comando <code>kdialog</code>;
; <code>'''--passivepopup'''</code>: parametro che indica a Kdialog di mostrare un popup di notifica contenente il testo specificato tra virgolette;
; <code>'''--passivepopup'''</code>: parametro che indica a Kdialog di mostrare un popup di notifica contenente il testo specificato tra virgolette;
; <code>'''600'''</code>: numero che esprime, in secondi, il tempo per cui resta attiva la notifica nella systray;
; <code>'''600'''</code>: 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 (<code>~/scripts</code> ad esempio ) chiamandolo ''notifica'' (o in qualche altro modo) e renderlo eseguibile:
In maniera simile a quanto fatto con lo script precedente, salvare il file in una directory della nostra home (<code>~/scripts</code> ad esempio ) chiamandolo ''notifica'' (o in qualche altro modo) e renderlo eseguibile:
<pre>$ chmod +x ~/scripts/notifica</pre>
<pre>$ chmod +x ~/scripts/notifica</pre>
{{Box|Nota|Nelle versioni di [[APT|apt]] a partire dalla 1.0, attualmente presenti in [[Jessie]], i pacchetti da installare possono essere visualizzati con il comando:<pre>$ apt list --upgradable</pre>Pertanto, per chi non vuole ricorrere ad [[aptitude]], nello script precedente bisogna sostituire la riga:<pre>NUM=`aptitude search ~U | wc -l`</pre>con le righe:<pre>NUM=`apt list --upgradable 2>/dev/null | wc -l`&#10;NUM=$((NUM-1))</pre>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 ==
== Job di Cron per lanciare lo script di notifica ==
Riga 69: Riga 57:
che può essere inserito dopo aver eseguito il comando:
che può essere inserito dopo aver eseguito il comando:
<pre>$ crontab -e</pre>
<pre>$ crontab -e</pre>
Nell'esempio indicato, il job di <code>Cron</code> 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:
Nell'esempio indicato, il job di <code>Cron</code> 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; nell'esempio successivo lo script viene eseguito pochi minuti dopo il job di root definito nel paragrafo "Script per l'aggiornamento degli indici dei pacchetti e il download":
<pre>*/10 * * * * ~/scripts/notifica >/dev/null 2>&1</pre>
<pre>
45 15,18,21 * * * ~/scripts/notifica >/dev/null 2>&1
</pre>


== Notifica all'avvio di una sessione KDE ==
== 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.<br/>
Questo passaggio non è fondamentale ma potrebbe rivelarsi utile per gli utenti che volessero ricevere la notifica di aggiornamenti anche all'avvio della loro sessione di KDE.<br/>
La prima cosa da fare è accertarsi, come spiegato nel primo paragrafo, che <code>Cron</code> esegua l'aggiornamento della lista dei pacchetti all'avvio del sistema; quindi eseguire il comando:
La prima cosa da fare è accertarsi, come spiegato nel primo paragrafo, che <code>Cron</code> esegua l'aggiornamento della lista dei pacchetti all'avvio del sistema; quindi eseguire un comando simile a:
<pre>
<pre>
$ ln -s /percorso/dello/script/script_di_notifica /home/utente/.kde/Autostart/nome_link
$ ln -s /percorso/dello/script/script_di_notifica /home/utente/.kde/Autostart/nome_link
</pre>
</pre>
che creerà, nella cartella <code>Autostart</code>, un link simbolico <code>nome_link</code> allo script di notifica. In questo modo lo script verrà lanciato all'avvio di KDE.<br/>
che creerà, nella cartella <code>Autostart</code>, un link simbolico <code>nome_link</code> allo script di notifica. In questo modo lo script verrà lanciato all'avvio di KDE.<br/>
In particolare, per un utente <code>pippo</code> e con lo script chiamato <code>notifica</code> contenuto in <code>/home/pippo/script/</code>, il comando diventa:
In particolare, con lo script chiamato <code>notifica</code> contenuto nella sottodirectory <code>scripts/</code> della propria directory home, il comando diventa:
<pre>
<pre>
$ ln -s /home/pippo/script/notifica /home/pippo/.kde/Autostart/notifica
$ ln -s ~/scripts/notifica ~/.kde/Autostart/notifica
</pre>
o, più semplicemente:
<pre>
$ ln -s ~/script/notifica ~/.kde/Autostart/notifica
</pre>
</pre>
Si noti che le precedenti operazioni (eseguite tramite comandi in console) possono essere sostituite operando direttamente dalle impostazioni di KDE: è infatti sufficiente inserire lo script desiderato andando in "Impostazioni"->"Avvio e Spegnimento"->"Autostart".
== Kdialog ==
Questo script utilizza ''KDialog'' per permettere che la notifica di eventuali aggiornamenti appaia nel vassoio di sistema. L'eseguibile ''kdialog'' è presente nel pacchetto:
* '''kde-baseapps-bin'''
oppure nel pacchetto:
* '''kdialog'''
nel caso il precedente pacchetto non fosse installato.<br/>
Si veda anche la documentazione<sup>[[#Documentazione|[1]]]</sup> ufficiale.


== Conclusioni ==
== Conclusioni ==
Riga 98: Riga 93:


== Documentazione ==
== Documentazione ==
*[http://techbase.kde.org/Development/Tutorials/Shell_Scripting_with_KDE_Dialogs Kdialog]
[1] [http://techbase.kde.org/Development/Tutorials/Shell_Scripting_with_KDE_Dialogs Kdialog]<br/>
*[http://manpages.debian.net/cgi-bin/man.cgi?query=crontab&apropos=0&sektion=0&manpath=Debian+squeeze&format=html&locale=en man crontab]
[2] [http://manpages.debian.net/cgi-bin/man.cgi?query=crontab&apropos=0&sektion=0&manpath=Debian+squeeze&format=html&locale=en man crontab]<br/>
*[http://manpages.debian.net/cgi-bin/man.cgi?query=cron&apropos=0&sektion=0&manpath=Debian+5.0+lenny&format=html&locale=en man cron]
[3] [http://manpages.debian.net/cgi-bin/man.cgi?query=cron&apropos=0&sektion=0&manpath=Debian+5.0+lenny&format=html&locale=en man cron]<br/>


{{Autori
{{Autori
Riga 106: Riga 101:
}}
}}


[[Categoria:Kde]]
[[Categoria:KDE]]

Versione attuale delle 17:01, 28 set 2019

Debian-swirl.png Versioni Compatibili

Debian 10 "buster"

Introduzione

In questa guida verrà spiegato come ricevere la notifica del numero di pacchetti aggiornabili senza eseguire periodicamente i comandi:

# 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:

  • Un job di Cron che effettua la risincronizzazione dei file contenenti gli indici dei pacchetti e il download dei pacchetti coinvolti nell'aggiornamento (ma senza installarli);
  • Uno script per notificare nella systray gli aggiornamenti eventualmente trovati;
  • Un job di Cron che lancia lo script di notifica;

Cronjob per l'aggiornamento degli indici dei pacchetti e il download

Con i permessi di root eseguire il comando:

# crontab -e

e inserire le seguenti righe:

30 15,18,21 * * * /usr/bin/apt -qq update && /usr/bin/apt -qq -d upgrade
@reboot /usr/bin/apt-get -qq update && /usr/bin/apt-get -qq -d dist-upgrade

Verrà eseguito al boot della macchina e alle 15,30 - 18,30 - 21,30 l'aggiornamento degli indici dei pacchetti e il download dei pacchetti stessi ma senza installarli. Prestare attenzione all'opzione "-qq" che sopprime i messaggi di apt e a "upgrade" che può essere sostituito con "dist-upgrade" in base alle proprie esigenze.
L'opzione "-d" permette il download automatico dei pacchetti in modo tale che questo possa avvenire in background rendendo il successivo aggiornamento del sistema molto più veloce. Rimuovere tale opzione se non si desidera che i pacchetti aggiornabili vengano scaricati, magari perché si vuole soltanto la notifica degli aggiornamenti per poter scegliere successivamente quali installare.
L'aggiunta della riga che inizia con "@reboot" 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=$(( $(apt list --upgradable 2>/dev/null | wc -l) - 1 ))

sleep 60

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;
(apt list --upgradable 2>/dev/null | wc -l) - 1
fornisce una lista (estratta dalla lista aggiornata ogni ora dal job di Cron precedente) dei pacchetti che possono essere aggiornati. La soppressione dell'output di errore e il decremento di uno del numero di pacchetti si rende necessario in quanto il comando avverte l'utente di possibili problemi nel suo utilizzo all'interno di script.
sleep 60
attende sessanta secondi in modo da prevenire eventuali problemi in caso di mancato caricamento del vassoio di sistema prima dei comandi successivi;
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

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; nell'esempio successivo lo script viene eseguito pochi minuti dopo il job di root definito nel paragrafo "Script per l'aggiornamento degli indici dei pacchetti e il download":

45 15,18,21 * * * ~/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 anche 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 un comando simile a:

$ 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, con lo script chiamato notifica contenuto nella sottodirectory scripts/ della propria directory home, il comando diventa:

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

Si noti che le precedenti operazioni (eseguite tramite comandi in console) possono essere sostituite operando direttamente dalle impostazioni di KDE: è infatti sufficiente inserire lo script desiderato andando in "Impostazioni"->"Avvio e Spegnimento"->"Autostart".

Kdialog

Questo script utilizza KDialog per permettere che la notifica di eventuali aggiornamenti appaia nel vassoio di sistema. L'eseguibile kdialog è presente nel pacchetto:

  • kde-baseapps-bin

oppure nel pacchetto:

  • kdialog

nel caso il precedente pacchetto non fosse installato.
Si veda anche la documentazione[1] ufficiale.

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

[1] Kdialog
[2] man crontab
[3] man cron




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

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