Impostare lo stato ed il messaggio di stato di Pidgin con uno script

15 11 2008

Questo post è più un appunto che un vero HOWTO. Con lo script di cui presento il codice è possibile ottenere degli aggiornamenti mirati del messaggio di stato (e dello stato stesso) in occasione di eventi prestabiliti, ad esempio la riproduzione di un file multimediale. Per accostarvi allo scenario potete pensarlo come una versione un po’ più rozza dei plugin che, in altri programmi di messaggistica istantanea, prelevano il titolo della canzone in riproduzione da un player.

L’utilizzo di uno script esterno permette ad applicazioni che non dispongono naturalmente di una tale capacità (come il mio attuale player audio, Audacious) di cambiare il messaggio di stato di Pidgin.

Perchè tutto funzioni correttamente, è necessario che DBUS sia attivato e supportato dalla vostra copia di Pidgin. Ecco il sorgente dello script:

#!/bin/bash
APPNAME=$(basename $0)
PARAMETERS="$2 $3 $4 $5 $6 $7 $8 $9"

GREP=$(which grep)
AWK=$(which awk)
SED=$(which sed)
ECHO=$(which echo)
PURPLE_REMOTE=$(which purple-remote)
PURPLE_SEND=$(which purple-send)
PS=$(which ps)
CAT=$(which cat)
RM=$(which rm)

CURRENT_STATUS=$($PURPLE_REMOTE getstatus)
TEMPFILE_STATUS_MESSAGE=$HOME/$APPNAME.dbus-$($PS ax | $GREP -m1 "dbus-daemon" | $AWK '{ print $1 }').status-message
TEMPFILE_STATUS=$HOME/$APPNAME.dbus-$($PS ax | $GREP -m1 "dbus-daemon" | $AWK '{ print $1}').status

case "$1" in

"--backup-status" )
	if [ -f $TEMPFILE_STATUS ]; then
		$RM $TEMPFILE_STATUS
	fi
	$ECHO $CURRENT_STATUS >> $TEMPFILE_STATUS
	;;

"--backup-status-message" )
	if [ -f $TEMPFILE_STATUS_MESSAGE ]; then
		$RM $TEMPFILE_STATUS_MESSAGE
	fi
	CURRENT_STATUS_ID=$($PURPLE_SEND PurpleSavedstatusGetCurrent | $GREP int32 | $AWK '{ print $2 }')
	CURRENT_STATUS_MESSAGE=$($PURPLE_SEND PurpleSavedstatusGetMessage int32:$CURRENT_STATUS_ID | $GREP string | $SED -e "s/string//g" -e "s/\"//g" -e "s/    //g")
	$ECHO $CURRENT_STATUS_MESSAGE >> $TEMPFILE_STATUS_MESSAGE
	;;

"--set-status" )
	$PURPLE_REMOTE setstatus?status="$2"
	;;

"--set-status-message" )
	$PURPLE_REMOTE setstatus?status=$CURRENT_STATUS\&message="$PARAMETERS"
	;;

"--safe-set-status" )
	if [ ! -f $TEMPFILE_STATUS ]; then
		$0 --backup-status
	fi
	$0 --set-status $2
	;;

"--safe-set-status-message" )
	if [ ! -f $TEMPFILE_STATUS_MESSAGE ]; then
		$0 --backup-status-message
	fi
	$0 --set-status-message $PARAMETERS
	;;

"--clear-status" )
	$0 --set-status ""
	;;

"--clear-status-message" )
	$0 --set-status-message ""
	;;

"--restore-status" )
	OLD_STATUS=$($CAT $TEMPFILE_STATUS)
	$0 --set-status "$OLD_STATUS"
	if [ -f $TEMPFILE_STATUS ]; then
		$RM $TEMPFILE_STATUS
	fi
	;;

"--restore-status-message" )
	OLD_STATUS_MESSAGE=$($CAT $TEMPFILE_STATUS_MESSAGE)
	$0 --set-status-message "$OLD_STATUS_MESSAGE"
	if [ -f $TEMPFILE_STATUS_MESSAGE ]; then
		$RM $TEMPFILE_STATUS_MESSAGE
	fi
	;;

*)
	$ECHO "$APPNAME: Wraps itself around the Pidgin command line utilities to (re)set, backup and restore"
	$ECHO "the status message."
	$ECHO ""
	$ECHO "Hacked together by Emanuele Cipolla <bugs @emanuelecipolla.net>, 2008."
	$ECHO "This script is released into the public domain."
	$ECHO ""
	$ECHO "WARNING: You _have to_ use a single option per run, no verification or simultaneous execution"
	$ECHO "is made."
	$ECHO ""
	$ECHO "SYNOPSIS: $APPNAME [--backup-status]"
	$ECHO "[--backup-status-message]"
	$ECHO "[--set-status] [[status]]"
	$ECHO "[--set-status-message] [[message]] [[...]]"
	$ECHO "[--clear-status]"
	$ECHO "[--clear-status-message]"
	$ECHO "[--restore-status]"
	$ECHO "[--restore-status-message]"
	$ECHO ""
	$ECHO "--backup-status                 Backups the current status to $TEMPFILE_STATUS."
	$ECHO "--backup-status-message         Backups the current status message to $TEMPFILE_STATUS_MESSAGE."
	$ECHO "--set-status                    Sets the status."
	$ECHO "--set-status-message            Sets the status message."
	$ECHO "--safe-set-status               Sets the status after backing up the old one."
	$ECHO "--safe-set-status-message       Sets the status message after backing up the old one."
	$ECHO "--clear-status                  Resets status to \"Online\"."
	$ECHO "--clear-status-message          Sets a blank status message."
	$ECHO "--restore-status		Restores back the status from $TEMPFILE_STATUS."
	$ECHO "--restore-status-message        Restores back the status message from $TEMPFILE_STATUS_MESSAGE."
	;;
esac

Ecco, invece, come si presenta Audacious dopo essere stato configurato per l’utilizzo dello script, in seguito all’attivazione del plugin Song Change:

Lo screenshot è stato ritagliato, ma il comportamento dell'applicazione è quello

Lo screenshot è stato ritagliato

Enjoy.





Avviare rtorrent al boot su FreeBSD

26 08 2008

rtorrent è un client BitTorrent con interfaccia testuale molto leggero che può essere lanciato in background con l’ausilio di screen o dtach. Persino la wiki ufficiale del progetto suggerisce esplicitamente come si possa avviare il programma automaticamente al boot su un sistema GNU/Linux.

Sia rtorrent che screen/dtach funzionano perfettamente anche su FreeBSD: manca però un script di init funzionante.

Quel che segue è un tentativo in tal senso che dovrebbe soddisfare le esigenze di un buon numero di utenti; le differenze rispetto ai suoi omologhi per GNU/Linux riguardano principalmente i parametri di lancio: ritengo che uno script di init non debba essere un secondo file di configurazione, che, nella fattispecie, è .rtorrent.rc.

Segue il contenuto dello script. Per utilizzarlo, piazzatelo in /usr/local/etc/rc.d/rtorrent e dategli i permessi di esecuzione con chmod +x /usr/local/etc/rc.d/rtorrent.

#!/bin/sh
#
# rtorrent RCng startup script
# by Emanuele Cipolla (mail at emanuelecipolla dot net)
# Shamelessly ripped off the aMule startup script by Gabriele Cecchetti (amule.org forum)
# 

# PROVIDE: rtorrent
# REQUIRE: NETWORKING SERVERS
# BEFORE: DAEMON
# KEYWORD: shutdown

#
# Add the following lines to /etc/rc.conf to enable rtorrent at startup
# rtorrent (bool): Set to "NO" by default.
#                Set it to "YES" to enable rtorrent
# rtorrent_user (str): Set to user running rtorrent
#                    (default 'rtorrent')
# rtorrent_home (str): Set to home directory of user running rtorrent
#                    (default /home/${rtorrent_user})

. /etc/rc.subr

name="rtorrent"
rcvar=`set_rcvar`

load_rc_config $name

[ -z "$rtorrent_enable" ] && rtorrent_enable="NO"
[ -z "$rtorrent_user" ] && rtorrent_user="rtorrent"
[ -z "$rtorrent_home" ] && rtorrent_home="/home/${rtorrent_user}"

required_dirs=${rtorrent_home}
required_files="${rtorrent_home}/.rtorrent.rc"

start_cmd="${name}_start"
stop_cmd="${name}_stop"

rtorrent_start()
{
        if [ ! -f /var/run/${name}.run ]
        then
      cd ${rtorrent_home}
       su ${rtorrent_user} -c "/usr/local/bin/screen -dmS rtorrent_init /usr/local/bin/rtorrent"
      touch /var/run/${name}.run
          echo "Started ${name}."
          echo `date` : "Started ${name}." >> /var/log/${name}.log
        else
          echo "${name} seems to be already running -- remove /var/run/${name}.run manually if needed."
        fi
}

rtorrent_stop()
{
        if [ -f /var/run/${name}.run ]
        then
          killall -INT $(echo -n 'ps aux | grep rtorrent | grep -v rtorrent_init') 2>>/var/log/${name}.log >>/var/log/${name}.log
          rm -f /var/run/${name}.run
          echo "Stopped ${name}."
          echo `date` : "Stopped ${name}." >> /var/log/${name}.log
        else
          echo "${name} doesn't seem to be running -- create /var/run/${name}.run if needed."
        fi
}

run_rc_command "$1"




Firewall humour

20 08 2008

Stavo cercando un articolo da affiancare alla pagina dell’handbook di FreeBSD riguardante la configurazione di IPFW. Non ho trovato nulla di lontanamente paragonabile, ma questa pagina merita una menzione per il suo punto n° 4:

4. Create & install a warning banner. Use vi to replace your /etc/motd file with the following text (or some other equivalent legal disclaimer). Make sure that you add a line that says ‘update_motd=”NO”‘ at the end of your /etc/rc.conf file when you’re done…otherwise your changes will be overwritten each time the system reboots.

* * * * * * * * * * * * W A R N I N G * * * * * * * * * * * * *
THIS SYSTEM IS RESTRICTED TO AUTHORIZED USERS FOR AUTHORIZED USE
ONLY. UNAUTHORIZED ACCESS IS STRICTLY PROHIBITED AND MAY BE
PUNISHABLE UNDER THE COMPUTER FRAUD AND ABUSE ACT OF 1986 OR
OTHER APPLICABLE LAWS. IF NOT AUTHORIZED TO ACCESS THIS SYSTEM,
DISCONNECT NOW. BY CONTINUING, YOU CONSENT TO YOUR KEYSTROKES
AND DATA CONTENT BEING MONITORED. ALL PERSONS ARE HEREBY
NOTIFIED THAT THE USE OF THIS SYSTEM CONSTITUTES CONSENT TO
MONITORING AND AUDITING.
* * * * * * * * * * * * W A R N I N G * * * * * * * * * * * * *

LOL. Fa quasi più ridere del metatag GENERATOR della pagina stessa (andate a vedere).





The Pirate Bay e i “fascisti”

12 08 2008

Il navigatore medio italico è per ora preoccupato (a torto, vista la natura decentralizzata della rete Internet - ma a quale utente importa saperlo, no?) delle restrizioni d’accesso che l’autorità giudiziaria ha instaurato nei confronti di The Pirate Bay, che si autodefinisce “il più vasto tracker BitTorrent al mondo”.

Chiaramente, la reazione dei gestori è stata, comprensibilmente, stizzita:

Siamo abbastanza abituati a stati fascisti che impediscono la libertà di parola. Molte piccole nazioni governate da dittatori decidono di bloccare il nostro sito perchè possiamo dare una mano a diffondere delle informazioni che potrebbero danneggiare quei dittatori.

Stavolta tocca all’Italia. Gli Italiani soffrono per una situazione molto seria dal momento che un organismo simile all’IFPI1 è stato costituito durante gli anni del fascismo, ed ora un fascista è al potere in quello stato, Silvio Berlusconi. Berlusconi è anche il personaggio più potente nell’ambito dei media italiani, dal momento che possiede molte ditte che sono in competizione con The Pirate Bay e vuole restare in questa condizione di predominio - così uno dei suoi sottoposti, Giancarlo Mancusi, ha ordinato la chiusura del nostro nome di dominio e del nostro indirizzo IP in Italia per rendere più difficile contrastare l’impero di Berlusconi. [...]

Il testo in corsivo è stato aggiunto da me per migliorare la resa in Italiano.

Tralasciando subito la constatazione, ai limiti del delirio, secondo cui The Pirate Bay sarebbe un rivale delle ditte di Berlusconi - sarebbe come ammettere che l’attività del tracker ha scopo di lucro: decisamente una posizione che io non sosterrei in tribunale -, e pur essendo totalmente d’accordo  sul fatto che l’attuale governo, come del resto quelli di mezza Europa e degli Stati Uniti, siano retti dagli eredi dei fascisti - pur preferendo a questo il più “civile” termine di conservatori, con il ribrezzo della buonanima di Montanelli -, apprendo che The Pirate Bay non è del tutto estranea a questo tipo di frequentazioni “esecrabili”2:

Dopo aver visto questo filmato, la frase “Siamo abbastanza abituati a stati fascisti” mi risuona molto… sinistra3.


1Si riferiscono alla S.I.A.E.

2Potete trovare qualche informazione su Sverigedemokraterna in inglese qui. Se e quando avrò del tempo, potrei tradurre la voce su Carl Lundström e sul partito per Wikipedia Italia; modificherò i riferimenti finali dell’articolo.

3Gioco di parole non cercato, ma con un minimo d’effetto distopico che non manca d’intrigarmi.





Risolvere il problema dell’audio gracchiante nelle applicazioni che usano la libreria SDL se PulseAudio è in esecuzione (su Fedora)

30 07 2008

Il problema, in realtà, non è specifico di Fedora, ma l’ho visto accadere su un bel po’ di distribuzioni orientate al pubblico consumer. La soluzione che propongo è applicata a Fedora perchè questa è la distribuzione che ho sottomano al momento, ma - come sempre per quel che riguarda i miei articoli - il principio generale che vi sta dietro non è da essa dipendente.

Il concetto è sempre lo stesso: di default, e per compatibilità con le vecchie versioni di SDL, il driver (sarebbe più corretto dire, in questo caso, la libreria a collegamento dinamico) utilizzato per la riproduzione è quello adatto al funzionamento con EsounD. PulseAudio, essendo stato progettato come il sostituto di EsounD per il desktop environment GNOME, mantiene un livello di compatibilità con quest’ultimo per permettere il funzionamento di applicazioni legacy. Purtroppo, almeno per quanto ho potuto vedere, la sua interazione con le applicazioni che usano SDL è buona sino ad un certo punto.

La buona notizia in questo quadro abbastanza grigio è che le versioni più recenti della libreria SDL supportano direttamente PulseAudio, senza bisogno di passare per l’emulazione EsounD. La notizia un po’ meno buona è che molte distribuzioni mainstream, nelle loro ultime release, non sempre se ne sono accorte.

Il caso che considero è quello di Fedora 9 - per quel che può importare, su architettura x86_64: per poter utilizzare appieno il supporto audio di prboom e DOSBox ho dovuto effettuare le poche operazioni che seguono:

  1. Aprire una finestra di terminale.
  2. Digitare
    sudo nano /etc/profile.d/SDL_pulseaudio_hack.sh
  3. Modificare
    export SDL_AUDIODRIVER=esd

    in

    export SDL_AUDIODRIVER=pulse

    quindi salvare.

  4. Digitare
    sudo nano /etc/profile.d/SDL_pulseaudio_hack.csh
  5. Modificare
    setenv SDL_AUDIODRIVER esd

    in

    setenv SDL_AUDIODRIVER=pulse
  6. Chiudere il terminale, effettuare il logout, e quindi nuovamente il login.

Tutto è poi andato a posto.





Aggiornare i pacchetti vulnerabili di FreeBSD con un piccolo trucco

30 06 2008

Non è niente di che, in realtà; volevo trovare il modo di aggiornare automaticamente tutti i pacchetti che portaudit(1) classifica come vulnerabili, insieme a loro eventuali dipendenze. Questo script sembra assolvere lo scopo: se c’è un modo migliore, fatemelo sapere.

#!/usr/local/bin/bash

# psupgrade: Aggiorna i port rilevati come insicuri da portaudit(1)
# utilizzando portmanager(1).

me=$(basename $0)

awk=$(which awk)
echo=$(which echo)
grep=$(which grep)
pkg_info=$(which pkg_info)
portaudit=$(which portaudit)
portmanager=$(which portmanager)
uniq=$(which uniq)

function perror()
{
        $echo $1 >>/dev/stderr
}

for tool in $awk $echo $grep $pkg_info $portaudit $portmanager $uniq; do
        if [ ! $tool ]; then
                perror "$me: Non è possibile eseguire $me, dal momento che manca uno dei seguenti tool:"
                perror "awk\n\grep\npkg_info\nportaudit\nportmanager\nuniq\n\n".
                perror "Assicuratevi che siano installati in una directory del PATH di sistema prima di rieseguire lo script."
                exit 1
        fi
done

echo "$me: Rilevo quali pacchetti necessitano di un aggiornamento..."
packages=$($portaudit -a | $awk '/Affected package:/ {print $3}' | $uniq -)

if [ ! $packages ]; then
        perror "$me: Sembra che non ci siano pacchetti da aggiornare."
        exit 2
fi

echo "$me: Riferisco i pacchetti ai port d'origine..."
ports=$($pkg_info -o $packages | $awk '/Origin:/ {getline; print}' | $uniq -)

if [ ! $ports ]; then
        perror "$me: Si sono verificati degli errori nel reperire i port da aggiornare."
        exit 3
fi

echo "$me: Lancio $portmanager..."
$portmanager $ports -y




Sitemap XML per i siti ospitati su WordPress.com

17 06 2008

Da ieri abbiamo questa funzionalità. Sono molto contento; mi permetto solo una piccola segnalazione:

La cosa divertente è che non dovete informarne nessuno, perchè lo faremo noi per voi automaticamente.

Ma se volete dirlo a qualcuno (ad esempio Google Strumenti per i Webmaster), la sitemap si trova nella sua posizione standard:

http://[nomeblog].wordpress.com/sitemap.xml

Se poi avete comprato un nome di dominio di secondo livello, potrete accedervi anche tramite quest’ultimo, come nel mio caso.

[via WordPress.com Blog]





Brevi note sui problemi che si potrebero incontrare installando Debian GNU/Linux su un sistema Sun Ultra 5

21 04 2008

Mi appunto alcune soluzioni che ho trovato a dei problemi che mi sono capitati installando Debian GNU/Linux etch sul mio recente acquisto. Non si tratta di metodi rigorosi: YMMV.

Installazione di una scheda di espansione USB

Con la configurazione di default, quello che si ottiene è solo una serie infinita di lock, a meno di non essere un fortunato possessore di alcune schede testate da Sun stessa (la situazione non cambia con i vari BSD, oltre che con lo stesso Solaris).

Per noi, la soluzione è (o meglio, nel mio caso è stata) semplice: aggiornare il kernel dalla v2.6.18 fornita all’ultima disponibile. Per semplicità (come ho fatto io), è sufficiente prelevare i sorgenti e la patch degli sviluppatori dal repository di sid (al momento è disponibile la release 2.6.24), e creare un pacchetto con dpkg-buildpackage. Se tutto va bene, al riavvio i problemi (uno su tutti, il crash repentino non appena si prova a effettuare il mount di un dispositivo di memoria di massa) dovrebbero essere risolti. Potrebbero, però, insorgerne degli altri: testerò per un po’ il tutto, e poi vi saprò dire.

Completamente falso. L’unica speranza è costituita da questa tabella.

Interfacce di rete multiple

Ho scoperto che le macchine Sun, per impostazione predefinita, rispettano la specifica Ethernet assegnando a tutte le interfacce di un sistema lo stesso MAC. Questo comportamento può essere problematico se la rete è mista (ci sono anche PC). La soluzione è assegnare un altro MAC (di fantasia) alle altre schede: io sono riuscito a farlo solo via software (con ifconfig [interfaccia] hw ether aa:bb:cc:dd:ee:ff), e non tramite PROM (con setenv local-mac-address? true) come avrebbe dovuto essere.

Inoltre, dopo l’aggiornamento del kernel, udev ha combinato un casino ridenominando le interfacce, sospetto anche a causa del MAC condiviso; io ho risolto cambiando fisicamente l’interfaccia che collegavo al mio router, voi potreste avere più problemi (se, ad esempio, volete usare il sistema come switch).





C’è un nuovo membro nella famiglia

19 04 2008

È una Sun Ultra 5 che ho acquistato da Paolo Gatti. Ho aggiunto una scheda di espansione USB 2.0 PCI perchè ho voluto collegare alcune periferiche, e mi è andata bene. Di seguito dmesg (sto usando anche qui Debian etch).

Leggi il seguito di questo post »





Dell’Utri è un genio incompreso 2

11 04 2008

Mi sono occupato del tipo in questione qualche giorno fa. Ma quante gliene capitano:

REGGIO CALABRIA - E’ Marcello Dell’Utri il parlamentare coinvolto nell’inchiesta sull’intervento della ‘ndrangheta sul voto degli italiani all’estero: “Non ho ricevuto alcun avviso di garanzia” ha detto all’Ansa. Dell’inchiesta “ho letto sui giornali”.

Poi ha spiegato: “Non conosco personalmente Aldo Micchichè ma l’ho sentito per telefono” e l’ho messo in contatto con Barbara Contini perché “lui si è offerto di occuparsi dei voti degli italiani all’estero”. Barbara Contini è l’ex governatore di Nassiriya, candidata per il Pdl al Senato in Campania.

[via la Repubblica.it]

Forse ora lo si capisce un po’ meglio. LOL.