domenica 31 ottobre 2010

Conky! Ci sono Aggiornamenti?

Sì, a L4N ci piace Conky - già affrontato da Doc precedentemente - e ci piace poiché per i netbook è più che ideale, risorse contenute e piena personalizzazione. Ottimo direi ;). Oggi vorrei farvi vedere uno script che ho sul netbook per avere la notifica degli aggiornamenti tramite, appunto, Conky.


Come funziona

Dunque, la dinamica è semplice, da una parte sarà necessario configurare il sistema per fare in modo che aggiorni la lista di pacchetti ogni tot tempo. Per fare questo metteremo in cron uno script che faccia aggiornare la lista ogni mmm... mettiamo un'ora. Dopodiché ci vorrà uno script in pearl per conky che indichi il numero di aggiornamenti. Per ultimo impostare la riga sul conkyrc. Semplice.

Cron

Dovreste avere il pacchetto cron installato, in teoria, è difficile che non lo sia.
Creiamo un file di testo e lo chiamiamo aggiornamenti.sh dopodiché immettiamo questo contenuto:

Per Archlinux

#!/bin/bash
pacman -Sy

Per Debian

#!/bin/bash
aptitude update
salvate e con i permessi di admin spostate il file dentro a /etc/cron.hourly
se il file è nella home potete usare il comando:
(sudo) mv ~/aggiornamenti.sh /etc/cron.hourly/

Script in pearl

La procedura, è la seguente: creiamo un'altro file e lo chiamiamo ad esempio: agg-conky, conterrà questo:
Nota: Se preferite che lo script sia in Bash potete provare quello fatto da Valantin, che approfitto per ringraziare. Il seguente è invece fatto in perl, le procedure, comunque sia, sono le stesse.

Per Archlinux

#!/usr/bin/perl
use strict;
use warnings;
my $n = (`pacman -Qu | wc -l`);
chomp ($n);
if ($n == 0)
{
print "Aggiornato"
}
else
{
print "$n Disponibili"
}

Per Debian

#!/usr/bin/perl
use strict;
use warnings;
my $n = (`aptitude search "~U" | wc -l`);
chomp ($n);
if ($n == 0)
{
print "Aggiornato"
}
else
{
print "$n Disponibili"
}

Una volta fatto lo salvate e lo mettete in una directory. Io ho scelto /.conky-scripts dentro la home.
Dateli i permessi di esecuzione facendo tasto destro col mouse, nelle proprietà del file.

Conky

Ecco il codice da mettere nel vostro conkyrc. Nel mio caso ho preferito che mettesse in moto lo script in pearl ogni mezzora, ma potete decidere voi. (i parametri in rosso potete deciderli voi)
${voffset -1}${font Trebuchet MS:size=10}Pacman/Aptitude/ecc:${font} ${font Trebuchet MS:size=7}${execi 1800 perl ~/.conky-scripts/agg-conky}${font}
Quel simboletto di pillola, a fianco pacman, che vedete nell'immagine è la lettera "g" del font WC Sold Out E Bta. Se volete impostarlo anche voi, scaricate il font, mettetelo dentro la cartella /.fonts nella vostra home e poi aggiungete il carattere al conky, dovrebbe venire una cosa del genere:
${voffset -4}${font WC Sold Out E Bta:size=9}g${font} ${voffset -1}${font Trebuchet MS:size=10}Pacman:${font} ${font Trebuchet MS:size=7}${execi 1800 perl ~/.conky-scripts/agg-conky}${font}
Avete fatto.

Ovviamente aspetto il vostro feedback per dirmi come si fa con Fedora, Opensuse e/o chi più ne ha più ne metta.

Fonti ringraziamenti:
Forum di Archlinux
El blog de Cruz

11 commenti:

  1. Consiglio: sostituisci /home/vostro-nome-utente/ con il solito ~. Diviene tutto più semplice!

    RispondiElimina
  2. si potrebbe benissimo fare in bash senza scomodare l'interprete perl :P
    se vi serve ve lo posto

    RispondiElimina
  3. @Doc:
    Prima di farlo ho provato se conky prendeva il ~, e funziona! Grazie mile, appena modificato. In effetti si risparmia la solita magagna "vostro-nome-utente" ;)

    @Valantin:
    Posta pure! che se non è un casino posso vedere di integrarlo o fare riferimento al commento dentro la guida ;)

    quello che non ho capito è se cambia qualcosa se sia in bash che in perl. Conviene uno al posto dell'altro o è uguale?

    RispondiElimina
  4. @Santiago
    Perché? Dubitavi della bontà del mio suggerimento?

    Presumo che il consiglio di Valantin sia motivato dal fatto che il bash è più leggero del perl.

    RispondiElimina
  5. bhè il bash è un linguaggio semplice e diciamo che si è più leggero dell'interprete perl, anche se per una cosa così non è che ci voglia poi tanto impegno sia in uno che nell'altro :P

    ora non sono su linux e non posso provare cmq

    #!/bin/bash
    UPDATE = `aptitude search "~U" | wc -l`
    if [ UPDATE -eq 0 ] ; then
    echo "Aggiornato"
    elif [ UPDATE -eq 1 ] ; then
    echo "Un Aggiornamento"
    elif [ UPDATE -gt 1 ] ; then
    echo "$UPDATE Aggiornamenti"
    else
    echo "ERRORE"
    fi

    non lo ho provato, ma dovrebbe andare.

    RispondiElimina
  6. @Doc, no non dubitavo! mi sono chiesto come mai non è venuto in mente anche a me? e per non accettare il fatto di non essere stato brillante, mi sono risposto che l'avevo provato ma non funzionava con conky, dopodiché sicuramente me ne ero scordato :D

    Invece non l'avevo provato, non mi era neanche venuto in mente, e funziona alla grande. Quindi grazie :)

    @Valantin, quando avrò un po' di tempo libero lo proverò, nel frattempo segnalo la cosa con un link al tuo commento ;)

    RispondiElimina
  7. @Valantin:
    ho provato quello in bash ma sembra che ci sia un'errore, non so perché ogni tanto la stringa di pacman mi compare vuota O.o Tu per caso l'hai provato?

    RispondiElimina
  8. no mi spiace non l'ho provato, ma mi sembra strano, a meno di qualche errore nei confronti negli if (che ogni volta mi scordo i nomi e devo andarli a cercare) nn penso ci siano errori, lo usavo sul mio sistema e andava a dovere. ora non sò con arch se ci sia qualcosa da sistemare....
    prova a mettere un print al posto di echo e vedi come và....
    se puoi spiegarmi meglio cosa accade e in che circostanze sarebbe meglio, visto che il mio script è lo stesso in perl solo che ho aggiunto il controllo se ci sono errori (cioè non viene riportato alcun numero perchè magari aptitude non esiste o non sò)

    RispondiElimina
  9. #!/bin/bash
    UPDATE=`aptitude search "~U" | wc -l`
    if [ $((UPDATE)) -eq '0' ] ; then
    echo "Aggiornato"
    elif [ $((UPDATE)) -eq 1 ] ; then
    echo "Un Aggiornamento"
    elif [ $((UPDATE)) -gt 1 ] ; then
    echo "$UPDATE Aggiornamenti"
    else
    echo "ERRORE"
    fi

    questo funziona sicuramente su debian, appena testato :P

    per il tuo problema mi è appena venuto in mente che potrebbe essere un problema di più chiamate a pacman contemporaneamente, una dallo script e una per controllare la lista dei pacchetti e quindi ti dà problemi

    RispondiElimina
  10. "per il tuo problema mi è appena venuto in mente che potrebbe essere un problema di più chiamate a pacman contemporaneamente, una dallo script e una per controllare la lista dei pacchetti e quindi ti dà problemi"

    si si l'ho pensato ieri sera e credo che il problema sia proprio questo, il fatto è che non saprei come risolverlo, forse con un "sleep X" per ritardare uno dei due comandi... a questo punto il tuo script va bene, è la guida che manca di una parte.

    RispondiElimina

Chiunque può commentare. Anzi, siete altamente incoraggiati a commentare

Se avete una miglioria o qualche consiglio che pensiate migliori la guida sarete i benvenuti. Vi sarà riconosciuto onore e verrete citati in modo doveroso. Non esitate a comunicarci dubbi e/o critiche. Le migliori guide sono quelle che si fanno insieme, ed è questo lo spirito che vogliamo mantenere.

NOTA BENE: Se avete critiche riguardo alla gestione di questo blog potete inviarle al nostro indirizzo: netbookteam [at] gmail [dot] com. Chiediamo quindi di farle in modo privato, per non generare confusione nelle discussioni tecniche che si trovano qui nei commenti. Grazie.