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

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Nessun oggetto della modifica
mNessun oggetto della modifica
 
(44 versioni intermedie di 3 utenti non mostrate)
Riga 1: Riga 1:
===Intro===
{{Versioni compatibili| Buster}}
Scrivo questa breve guida per chi, come me, esegue più volte al giorno il comando:
 
<pre>apt-get update && apt-get dist-upgrade</pre>
== Introduzione ==
(o equivalente alias contenuto nel file .bashrc di root) alla ricerca di aggiornamenti.
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>
(o equivalente [[alias]] contenuto nel file <code>.bashrc</code> di root) alla ricerca di aggiornamenti.<br/>
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:
Servono fondamentalmente tre cose:
* Un job di [[Utilizzo del servizio di scheduling Cron|cron]] 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 secondo job di cron che lancia lo script precedente;
* Un job di Cron che lancia lo script di notifica;


===Job di cron per l'aggiornamento degli indici dei pacchetti===
== Cronjob per l'aggiornamento degli indici dei pacchetti e il download ==
Questo primo job di cron può essere inserito in ''/etc/cron.hourly'' per essere lanciato ogni ora; il suo funzionamento è banale:
Con i permessi di [[root]] eseguire il comando:
<pre>
# crontab -e
</pre>
e inserire le seguenti righe:
<pre>
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>
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.


creare, come utente root, un file contenente le seguenti righe:
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.
<pre>#!/bin/sh
apt-get update &>/dev/null</pre>


salvare il file in ''/etc/cron.hourly'' e renderlo eseguibile; se ad esempio lo abbiamo chiamato ''aggiorna'':
== Script di notifica nella systray ==
<pre># chmod +x aggiorna</pre>
Lo script che si occupa di far comparire la notifica nella systray fa uso di [[#Kdialog|Kdialog]].
<pre>#!/bin/bash


Il compito di questo job è soltanto quello di aggiornare la lista degli indici dei pacchetti, senza aggiornare il sistema. L'output e gli eventuali errori del comando vengono soppressi. Per le mie necessità è sufficiente in quanto gli errori sono spesso dovuti all'irraggiungibilità dei repo, cosa in genere risolta in poco tempo.
NUM=$(( $(apt list --upgradable 2>/dev/null | wc -l) - 1 ))
Se si vuol far in modo che lo script venga eseguito ad intervalli diversi dall'ora, è possibile inserire un job nella directory ''/etc/cron.d'' secondo il formato di [[Utilizzo del servizio di scheduling Cron#Crontab_Command_settings|crontab]].


Questa è l'unica parte in cui i comandi vanno dati con i permessi di root; i successivi passi vanno eseguiti attraverso i normali privilegi utente.
sleep 60
 
===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:link kdialog]:
<pre>#!/bin/bash
 
NUM=`aptitude search ~U | wc -l`


if [ $NUM -eq 0 ]; then exit
if [ $NUM -eq 0 ]; then exit
elif [ $NUM -eq 1 ]; then kdialog --display :0 --passivepopup "Trovato un aggiornamento" 600
elif [ $NUM -eq 1 ]; then env DISPLAY=:0 kdialog --passivepopup "È stato trovato un aggiornamento" 600
else kdialog --display :0 --passivepopup "Trovati $NUM aggiornamenti" 600
else env DISPLAY=:0 kdialog --passivepopup "Sono stati trovati $NUM aggiornamenti" 600
fi
fi
exit</pre>
exit</pre>


: '''NUM''' variabile che conterrà il numero di pacchetti aggiornabili;
; <code>'''NUM'''</code>: 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;
; <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.
: '''wc -l''' 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;
: '''--display :0''' parametro che indica a kdialog di utilizzare il nostro server grafico;
; <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>;
: '''--passivepopup''' 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;
: '''600''' 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 (''~/scripts'' 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>


===Job di cron per lanciare lo script di 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:
Il job di <code>Cron</code> per lanciare lo script precedente deve essere specificato nel formato di <code>crontab</code>:
<pre>30 * * * * ~/scripts/notifica >/dev/null 2>&1</pre>
<pre>30 * * * * ~/scripts/notifica >/dev/null 2>&1</pre>
che può essere inserito dopo aver dato il comando:
che può essere inserito dopo aver eseguito il comando:
<pre>$ crontab -e</pre>
<pre>$ crontab -e</pre>
Questo job verrà lanciato ogni 30 minuti. 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>


===Conclusioni===
== Notifica all'avvio di una sessione KDE ==
Da questo momento in poi le notifiche degli aggiornamenti compariranno nella nostra systray.
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 un comando simile a:
<pre>
$ ln -s /percorso/dello/script/script_di_notifica /home/utente/.kde/Autostart/nome_link
</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/>
In particolare, con lo script chiamato <code>notifica</code> contenuto nella sottodirectory <code>scripts/</code> della propria directory home, il comando diventa:
<pre>
$ ln -s ~/scripts/notifica ~/.kde/Autostart/notifica
</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 ==
Da questo momento in poi le notifiche degli aggiornamenti compariranno nella nostra systray.<br/>
Per aggiornare il sistema sarà comunque necessario dare il comando:
Per aggiornare il sistema sarà comunque necessario dare il comando:
<pre># apt-get upgrade</pre>
<pre># apt-get upgrade</pre>


oppure
oppure:
<pre># apt-get dist-upgrade</pre>
<pre># apt-get dist-upgrade</pre>
a seconda delle necessità.
a seconda delle necessità.


===Documentazione===
== Documentazione ==
*[http://techbase.kde.org/Development/Tutorials/Shell_Scripting_with_KDE_Dialogs:link 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&sektion=5&apropos=0&manpath=Debian+5.0+lenny&locale=:link 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/>
----
[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/>
: [[Utente:S3v|S3v]]
 
{{Autori
|Autore=[[Utente:S3v|S3v]]
}}
 
[[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