2cg e il desktop dinamico

E' un pò che leggo in giro tutorial e howto di tutti i generi rivolti al "tweaking" del desktop.
C'è chi lo vuole come quello di MacOSX, chi vuole gli effetti di Aero, chi i cubi rotanti e le finestre "infiammate" di compiz, chi l'integrazione con qualche super servizio di rete sociale (ebbene sì "social network" mi sta antipatico), etc.
Insomma, tutti come se senza orpelli grafici e senza la "guardoneria" altrui la propria scrivania valesse di meno...
Mah...!

Sono abituato ad un desktop nero e ho sempre considerato l'utilizzo di un'immagine di sfondo come una sciccheria modaiola... ma forse non ho proprio capito niente. Forse dovrei avere un "desktop dinamico" anch'io, aprirmi al mondo... anche se non me ne potrebbe fregar di meno di uno sfondo che cambia in funzione del tempo (quello metereologico) o delle quotazioni di borsa che si aggiornano in tempo reale... (avessi un portafoglio azionario magari...).

Il punto è che non uso gnome, nè kde, nè xfce, nè tantomeno effetti di nessun tipo... uhm, duretta lo so ma forse basta un pò di spirito geek. Geek-da-due-soldi però...
Indosso i panni di 2centsgeek (nickname anonimizzante: 2cg) e mi metto subito all'opera!

Il "materiale" che ho a disposizione è scarno: openbox, vim e poco altro. Basterà?
Forse sì ;-)

Quello che potrei fare è inserire sul desktop un terminale trasparente nel quale i dents di identi.ca si aggiornino automaticamente e nel quale io abbia la possibilità di postare i miei messaggi, le mie risposte etc.
Ci sarebbe conky ma non permette di interagire "attivamente", solo "passivamente" e quindi non viene al caso: c'è bisogno di "socializzare" il desktop, perdiana! (bleah!).

Voglio la mia finestra geek sul mondo del microblogging... e l'avrò!

Ravanando il web leggo di un plugin di vim che permette di interfacciarsi col server di identi.ca direttamente "da dentro" l'editor: twitvim. Lo userò per "dialogare" col "mondo".
Come "contenitore", un terminale: aterm. Permette di gestire la (semi)trasparenza, i font fixed ed altre sciccherie.
Infine... openbox! Sarà lui il gran maestro cerimoniere di questo polpettone sociale alla 2cg!

Scaricato il file twitvim-0.5.5.vba (ad oggi la versione più nuova del plugin), procedo ad installarlo:

$ vim twitvim-0.5.5.vba

Si aprirà l'editor e al suo interno:

:source %

Installato il plugin, bisognerà aggiungere le informazioni relative all'autenticazione sul server di identi.ca.

Ponendo il caso che l'username sia "2cg" e la password "pwdidentica", sfrutto il servizio online http://www.opinionatedgeek.com/dotnet/tools/Base64Encode/ per ottenere la stringa codificata che mi servirà per l'autenticazione.
Nel box di testo "Encode input text" inserisco la stringa "2cg:pwdidentica" e clicco il tasto "Encode" (sagace questo 2cg, eh?).
Questa la stringa ricevuta: "MmNnOnB3ZGlkZW50aWNh".

Aggiungo a .vimrc il seguente blocco:

let twitvim_login_b64 = "MmNnOnB3ZGlkZW50aWNh"
let twitvim_api_root = "http://identi.ca/api"
let twitvim_enable_python = 1

" per l'accesso tramite proxy, decommentare le seguenti linee:
" let twitvim_proxy="proxyaddress:port"
" let twitvim_proxy_login_b64="coppia-utente:password-encodata-come-la-precedente"

" settare il browser
let twitvim_browser_cmd = "/usr/bin/firefox"

" dents visualizati (default=20)
let twitvim_count = 50

" mappa il tasto F8 per il refresh della timeline
:nnoremap  :FriendsTwitter

Da questo momento in poi da dentro vim è già possibile interagire con il proprio account identi.ca, ad esempio per mezzo di questi comandi:

  • :PosttoTwitter (prompt del messaggio da inviare a identi.ca)
  • :CPosttoTwitter (posta la linea corrente su identi.ca)
  • :BPosttoTwitter (posta il buffer corrente su identi.ca)
  • Alt-R (avvia un @-reply)
  • Alt-D (invia un messaggio diretto)
  • :FriendsTwitter (visualizza la timeline degli amici)
  • :UserTwitter (visualizza la propria timeline)
  • :RepliesTwitter (visualizza le @-replies)
  • :PublicTwitter (visualizza la timeline pubblica)
  • :DMTwitter (visualizza i messaggi diretti)
  • :Tweetburner (accorcia una URL con Tweetburner e inserisce il link nella posizione del cursore)
  • :ATweetburner (uguale alla precedente ma inserisce il link dopo il cursore)

Alcuni shortcut potrebbero non funzionare.
Twitvim, di default ne rimappa alcuni (ad esempio ALT-R ---> <leader>r - il tasto <leader> è di solito \, ovvero backslash).
Alternativamente essi possono essere rimappati all'interno di .vimrc:

map + +
map - -

map t :PosttoTwitter
map m :RepliesTwitter

In questo caso + e - sostituiranno rispettivamente le combinazioni CTRL W + e CTRL W - mentre \t sostituirà il comando :PosttoTwitter.

In questa pagina l'elenco completo di comandi e di shortcut settati da twitvim.

C'è bisogno però che la timeline si aggiorni in automatico... mumble, mumble...

Idea! C'è un parametro semisconosciuto di vim (--servername) che permette di avviare vim in modalità server!
Questa funzionalità non è disponibile in tutte le versioni di vim. Avremo bisogno di:

# apt-get install vim-gnome

Faccio una prova lanciando un server di nome "twitvim":

$ vim --servername twitvim -c FriendsTwitter

ed inviandogli un comando:

$ DISPLAY=:0.0 vim --servername twitvim --remote-send ":RefreshTwitter"

Perfetto, direi: la timeline viene aggiornata correttamente.

Automatizzo il tutto tramite un semplicissimo script:

#!/bin/bash
# script name: /home/2cg/bin/updtwitvim

if  ; then
    DISPLAY=:0.0 /usr/bin/vim --servername twitvim --remote-send ":RefreshTwitter";
fi
exit0

Lo rendo eseguibile:

$ chmod +x /home/2cg/bin/updtwitvim

e faccio in modo che cron lo lanci ogni 5 minuti:

$ crontab -e:

*/5 * * * * /home/2cg/bin/updtwitvim

Non mi rimane che "mettere" il server all'interno di una finestra trasparente e "appiccicare" questa al desktop.

Si è detto di aterm:

# apt-get install aterm

E' necessario "istruire" openbox a "maneggiarlo" in un certo modo.

Aggiungo a $HOME/.config/openbox/rc.xml il blocco:

<application name="stickit">
        <decor>no</decor>
        <focus>no</focus>
        <position>
                <x>5</x>
                <y>5</y>
        </position>
        <layer>below</layer>
        <desktop>all</desktop>
        <maximized>false</maximized>
        <skip_pager>yes</skip_pager>
        <skip_taskbar>yes</skip_taskbar>
</application>

In questo modo tutte le applicazioni di nome (arbitrario) "stickit" non avranno decorazioni nè focus, saranno posizionate secondo i parametri "x" e "y" su tutti i desktop, non verranno massimizzate all'apertura e non saranno nè raggiungibili tramite ALT+TAB, nè visualizzabili nella taskbar!

Per completare l'opera mi affido ad un semplice script ($HOME/bin/atermbg) che lanci aterm dandogli il nome di "stickit" e passandogli certi parametri:

#!/bin/bash
# script name: /home/2cg/bin/atermbg

aterm -tr +sb -bl -fn fixed -fb fixed -name stickit -e vim --servername twitvim -c FriendsTwitter

Dove:

  • -tr: setta la trasparenza
  • +sb: nasconde la barra di scorrimento
  • -bl: elimina i bordi
  • -fn: il nome del font utilizzato
  • -fb: il nome del font per il grassetto
  • -name: il nome dell'istanza di aterm
  • -e: esegue le istruzioni successive, ovvero lancia vim in server mode e aggiorna la timeline amici di identi.ca

Lo script verrà avviato da openbox allo start, inserendo una riga come questa in $HOME/.config/openbox/autostart.sh:

(sleep 3s && /home/2cg/bin/atermbg) &

Logout && login e il risultato non è per niente male...

Adesso posso considerarmi soddisfatto: da buon geek-da-due-soldi ho anch'io il mio desktop dinamico... ;-)

Uhm, ma che me ne faccio adesso? Bah, ci penserò domani...

Happy hacking!