User:Stele

From ArchWiki

Il mediacenter ideale

Il Personale Computer e' ormai diventato un meta-medium, un media che comprende tutti gli altri. La convergenza si e' realizzata da tempo: la musica e' 'liquida', i film vengono ormai largamente condivisi, le macchine fotografiche sono tutte digitali, internet nelle nostre case... Nonostante questo la situazione attuale nelle nostre case e' piu' o meno la stessa di diversi anni fa': spesso il pc vero e proprio e' in un angolo della casa; ci sono 10 telecomandi, istruzioni, garanzie, interfaccie da imparare... registrare una trasmissione televisiva e' una impresa e siamo ancora legati agli orari del flusso televisivo. Comunque e in ogni caso PC camuffati si stanno gradualmente spostando in salotto e buttando fuori la TV tradizionale. Pensiamo alle console giochi, a mysky ai 'mediacenter' che vengono venduti... In questo wiki vedremo come configurare un pc che dovrebbe essere messo in salotto e comunicare in rete con gli altri PC della casa. Riporto le scelte principali per questo Mediacenter divise tra Hardware e Software.

Software

Hardware

  • PC principale: Questo e' il MC vero e propio oltre ad essere un pc normale: puo' essere usato a vari livelli: dalla potenza della linea di comando ai pochi semplici pulsanti di un telecomando passando dalle varie interfaccie grafiche. Un pc con un front end grafico bello e facile da usare. Fa' da server agli altri e contiene tutti i dati e le risorse (vedi sotto) che condivide in rete. Dovrebbe essere il meno ingombrante possibile, silenzioso, avere due HD: uno per il sistema operativo e uno per i dati, quindi molto capiente. Dovrebbe avere uscite hdmi, audio 5.1...
  • Schermo: collegato al pc principale serve come suo schermo per vedere i filmati e godere di un buona e robusta interfaccio grafica. Dovrebbe essere grande e sostituire quello della tv, spesso sara' propio quello della tv. Opzionalmente si potrebbe collegare un secondo monitor per usare il pc come tale.
  • Sintonizzatori tv: quanti ne servono? quanti siamo in famiglia? Quanto viene vista la tv? Almeno uno ma anche due: uno per vedere uno per registrare. Il grande vantaggio di avere il sintonizzatore connesso al pc (non integrato nel monitor come di fatto e' l'attuale tv) e' che puoi registrare e sostituire il videoregistratore. Ma ci sono anche i vantaggi della gestione centralizzata e quindi dell'ottimizzazione delle risorse.
  • Casse 5.1 Importante che nel pc ci sia una scheda audio adeguata per avere un suono corposo e nitido per sfruttare anche gli effetti sonori dei titoli cinematografici.
  • HardDisk: L'ideale sarebbe avere due HD fisici distinti interni: uno per il sistema operativo che una volta configurato e ben ottimizzato dovrebbe essere clonato e backuppato nel secondo disco che contine i dati (Video, Musica, Foto...). Quest'ultimo dovrebbe essere backuppato interamente tramite un sistema a snapshot nel; disco esterno.
  • Rete: tutti i PC dovrebbero essere interconnessi tra loro in rete locale cablata o wireless a seconda di gusti o possibilita' (cavi, switch, routers , access point)
  • PC portatili: Ogni membro della famiglia alla fine dovra' evere il suo Personal Computer e il MC fara' da server che contiene i dati e mette a disposizione le risorse per tutti.
  • Telecomandi: uno a testa che controllano tutto
  • Multifunzione a colori: Collegata in rete e disponibile a tutti i pc (stampa, copia, scanner...)
  • Palmari: collegati ai pc della rete in modo da sincronizzare i dati (agenda, posta, rubrica ecc..)
  • ...

Aspettando la domotica

Quella sopra riportata non e' fantascienza ma l'oggi. Anche da un punto di vista economico se facciamo il conto di quanto viene speso oggi dalle famiglie per esaurire le esigenze mediatiche coperte dallo scenario sopra riportato vedremo che non si parla di una spesa maggiore ma forse diversa. Questo video (anche se condivido poco l'hardware scelto e immagino anche le scelte sul sw siano diverse) rende l'idea di un MC con xbmc configurato in modo abbastanza completo. Mentre in questo video vediamo la flessibilita' grafica dello strumento.

Un'altro media che e' vicino se non gia' inglobato nel PC e' il telefono: le videochiamate e skype nonsono fantascienza e social network, chat, sms e dispositivi mobili sono ormai delle alternative usate quotidianamente. La domotica sembra lontana anche se far controllare al pc il termostato del riscaldamento e le luci di casa e' molto vicino e alla portata dello scenario sopra descritto.

Questi processi non si stravolgono dall'oggi al domani ma e' una evoluzione gia' in divenire. Quella presentata e' una delle visioni di prospettiva che guidano un percorso graduale, fatto di tappe, acquisti, tentativi riusciti o meno...

Uno dei problemi piu' grossi per gli utenti Linux e' il supporto HW... ma la forza piu' grossa e' la collaborazione, la condivisone degli sforzi il mettere d'accordo e armonizzare piu' visioni... la comunita'. Questo wiki cerca di andare in questa direzione.

Una tv minimalista

Nella configurazione del MC partiamo dalle basi e affrontiamo subito l'attuale regina nei salotti delle nostre case: la TV. Basta poco per riuscire a ottenere facilmente dal nostro PC quello che abbiamo oggi da una TV. In seguito daremo l'esempio del sintonizzatore Hauppauge WinTV MiniStick HD ma, a parte le piccole differenze specifiche, il wiki vale anche per altri sintonizzatori.

Il firmware

Come ben indicato in questo articolo scrichiamo e installiamo il firmware

cd /lib/firmware
sudo wget http://steventoth.net/linux/sms1xxx/sms1xxx-hcw-55xxx-dvbt-02.fw

anche se forse questo passaggio con le nuove versioni di linux-firmware non e' necessario. Il sintonizzatore dovrebbe essere visibile dal kernel. Verifichiamo:

lsusb
Bus 002 Device 002: ID 2040:c000 Hauppauge Windham

Bene, ora dobbiamo sintonizzare i canali.

Sintonizzazione dei canali

Per sintonizzare i canali ci sono almeno due metodi: Il primo usa una utility scan contenuta in linuxtv-dvb-apps:

sudo pacman -S linuxtv-dvb-apps

che prende come input una lista di 'trasmettitori'. Una base la troviamo qui:

ls cd /usr/share/dvb/dvb-t/it-*

queste liste costituiscono una buona base di partenza che sarebbe comunque bene integrare cercando in internet gli eventuali aggiornamenti. Poi procediamo alla sintonizzazione ad es.

scan /usr/share/dvb/dvb-t/it-firenze > channels.conf

chiaramente bisogna sostituite il nome della citta' dell'esempio sopra riportato con quella a noi piu' vicina. La lista dei canali che il sintonizzatore trova viene salvata nel file channels.conf che contiene righe di questo genere:

ITALIA 1:826000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_AUTO:QAM_64:TRANSMISSION_MODE_8K:GUAR_INTERVAL_1_32:HIERARCHY ...

dove la prima parte fino ai due punti contiene il nome del canale che possiamo cambiare. Possiamo per comodita' togliere spazi e maiuscole

italia1:826000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_AUTO:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_32:HIERARCHY ...

e commentare con # i canali che non ci interessano. Un'altro modo piu' semplice e' usare w_scan

yaourt -S w_scan
w_scan -X -P -t 2 -E 0 -c IT > channels.conf

Anche in questo caso possiamo semplificare i nomi dei canali trovati. Ora possiamo finalmente iniziare a vedere la tv.

Xine e mplayer

Due programmi molto minimalisti che fanno tra le altre cose anche questo sono mplayer e xine

sudo pacman -S mplayer xine-ui

copiamo i canali sintonizzati e personalizzati. Nel caso di mplayer

cp channels.conf .mplayer/channels.conf

oppure per xine

cp channels.conf .xine/channels.conf

facciamo partire mplayer con

mplayer dvb://

che partira' sul primo canale della lista. Oppure partiamo da un canale specifico. In questo caso ci tornera' utile la semplificazione fatta prima sulla lista dei canali

mplayer dvb://italia1

scorriamo tra i canali con i tasti 'k' e 'v'. Per farlo partire direttamento in full screen:

mplayer -fs dvb://italia1

Con xine purtroppo il full screen:

xine -f dvb://

sembra funzionare solo parzialmente nel senso che mi rimangono sopra i pannelli di gnome (nel caso di utilizzo di questo DE). In compenso con xine si cambia canale con la lista canali scritta in sovraimpressione, con i tasti freccia su e giu del keypad e tra un canale e l'altro non si vede lo sfondo scrivania come in mplayer ma si freeza l'immagine tv rendendo molto piu' piacevole lo zapping. Con il tasto F1 viene inoltre registrato il programma live 'on the fly' sull'hd senza interrompere la visione. Per vedere la lista completa delle scorciatoie da tastiera possibili possiamo lanciare il seguente comando:

xine --keymap > xinekeymap.

Sempre nello stile minimalista possiamo utilizzare un semplice script come PVR (videregistratore).

Un pvr molto kiss

Per programmare semplici registrazioni di trasmisioni tv in digitale terrestre con Linux non servono programmi complicati. XBMC e' un sw mediacenter, molto ben fatto e completo che vedremo in seguito ma non ha la possibilita' di registrare direttamente le trasmissioni TV. Si appoggia a tvheadend che registra tramite le guide elettroniche dei programmi (EPG) che in Italia sono poco affidabili. Abbiamo la possibilità di programmare ed effettuare le registrazioni con gli strumenti di base previsti in tutte le distribuzioni: uno script bash e la programmazione su crontab. Abbiamo inoltre bisogno di un sintonizzatore tv configurato e del programma mencoder

yaourt -S mencoder

Dobbiamo poi effettuare la sintonizzazione dei canali per mplayer per avere una tv minimalista funzionante con i canali definiti in .mplayer/channels.conf magari con nomi in minuscolo e senza spazio per semplicità come abbiamo visto sopra. Salviamo infine questo script in un posto sicuro e per praticità e pulizia facciamo un collegamento a /usr/bin.

sudo ln -s /percorso/allo/script /usr/bin/registra

La compressione 'on the fly' viene fatta da questo comando

 mencoder -o nome_file.avi -ovc xvid -xvidencopts bitrate=800 -oac mp3lame -lameopts cbr:br=128 dvb://

è migliorabile qualitativamente aumentando il bitrate. Possiamo anche registrare lo streaming senza comprimerlo. Dopo averlo controllato se non ci serve lo buttiamo altrimenti facciamo i tagli con projectx e comprimiamo con HandBrake come suggerito molto bene sempre ed esaustivamente in questo sito. Sembra lungo ma con la versione interfaccia a linea di comando

sudo pacman -S handbrake-cli

e l'utlizzo di questo script alla fine si tratta di operazioni manuali di pochi secondi e pochi minuti di elaborazione. Contrariamente a mencoder handBrake sfrutta ad esempio i processori dual core. Rimane solo da programmare le registrazioni. Possiamo controllare guida tv da internet in siti come questo e poi programmare la registrazione su crontab che potrebbe presentarsi in modo simile:

$crontab -e
#PVR KISS==================================
# Feriali alle 10.40
40 10 * * 1-5 registra k2 60 Mr_Bean
# Feriali alle 16.55
55 16 * * 1-5 registra k2 35 Mr_Bean

# Esclusa domenica alle 20.20
20 20 * * 1-6 registra boing 35 Scooby-Doo-New

# I Sabati alle 19
00 19 * * 6 registra italia1 35 Scooby-Doo

# Sabato e Domenica alle 8.30
30 08 * * 6-7 registra gulp 25 Geronimo
# Sabato e Domenica alle 14.05
05 14 * * 6-7 registra gulp 25 I Flintstones

# Le Domeniche alle 10.25
25 10 * * 7 registra boing 45 Scooby-Doo-Speciale
#====================================================

Viene prima indicato l'orario in cui parte la registrazione, i giorni in cui effettuarla, il comando con cui e' stato fatto il collegamento allo script (in questo caso 'registra'), il canale da registrare, la durata della registrazione ed opzionalmente il nome del programma e se lo vogliamo compattare o meno. Per cambiare editor di crontab al posto di vi aggiungere

export VISUAL="/usr/bin/nano in ~/.bashrc

Possono essere utili ( anche perche' scritte in modo sintetico) queste indicazioni su wikipedia per personalizzare crontab. Si tratta di un sistema molto semplice di registrazione. Se le necessita' crescono (ad es. la gestione dei conflitti tra le programmazioni o la presenza di piu' sintonizzatori) dobbiamo chiaramente rivolgerci a strumenti piu' adeguati come MythTV o vdr.

La TV e' il primo passo verso la convergenza dei media che oggi e' una realta' con i mediacenter. Possiamo quindi gestire TV, MUSICA, VIDEO e FOTO in modo semplice piacevole e integrato con i mille vantaggi che questa integrazione comporta. Il MediaCenter di cui parliamo in questo wiki e' xbmc. Un blog ricco completo di suggerimenti preziosi su questo tema e' il sito di telperion http://telperion.wordpress.com/ che andrebbe visitato.

Un mediacenter accattivante

Nel pc si realizza oggi e nelle nostre case la convergenza dei media che ha enormi vantaggi e pressoche nessun svantaggio. Il sw mediacenter gioca un ruolo fondamentale nel rendere accessibile a tutti questa vera e propia rivoluzione. Un MC deve essere infatti semplice, bello e facile da usare e configurare. Ci sono molti sw mc per Linux. Il primo e forse il piu' importante o comunque un riferimento ineludibile del settore e' Mythtv. Freevo e' un MC minimalista da tenere sotto osservazione. Moovida e' un'altro mc interessante. Per questo wiki vedremo nel dettaglio xbmc

pacman -S xbmc

Tramite questo comando installiamo subito le varie dipendenze necessarie come ad esempio mesa-demos che contiene glxinfo che serve all'avvio di xbmc. In alcuni casi, se abbiamo problemi verifichiamo la presenza di xorg-utils come segnalato in questo thread, che contiene xdpyinfo usato da xbmc per verificare la profondita' di colore sempre all'avvio.

Xbmc si presenta subito bene con la sua accattivante grafica in trasparenze, sfumature dissolvenze.. ma sono necessari due o tre passaggi per rendere il tutto ancora meglio: le prime configurazioni

Prime configurazioni

  • Selezionare la lingua italiana: Sistema - Aspetto - Internazionale
  • Scegliere la città più vicina per le previsioni: Sistema -Meteo
  • Usare un buon scraper che tiri giù poster e fanart dei nostri film: Sistema - Add-ons - Scarica add-ons - XBMC.org Add-ons - Scraper Film - IMDb
  • Per rendere predefinito lo scarper appena scelto: Sistema - Video - Scraper - Scraper predefinito per i film
  • Indicare dove prendere la musica: Muscia - Aggiungi sorgente
  • Indicare dove prendere i video e scaricare i poster e fanart da web: Video - Aggiungi sorgente (percorso) - Questa directory contiene (Film) - Avvia la scansione automatica - Impostazioni - Generale - Preferred Title Language from (Italy)
  • ...

Se non si definisce il contenuto al momento della creazione della sorgente può essere sempre fatto in un secondo momento con il tasto destro del mouse e poi 'Imposta il contenuto'.

Organizzare i media

Molto importante e' l'organizzazione dei media. Possiamo ad esempio dividere i video in 3 sorgenti che corrispondono a 3 cartelle del filesystem:

  • ANIMAZIONE: cartella con i film di animazione in files .avi
  • FILM: cartella con i film normali in files.avi
  • SERIE: cartella contenente le sottocartelle: una per serie tv (es. Batman, Mr Bean, Pimpa. Hazard, cavalieri dello zodiaco...)

Per le foto un criterio potrebbe essere la divisione in anni e poi in mesi. Per la musica: una cartella per autore e le sottocartelle per gli album che conterranno i file mpr con i singoli brani. In ogni caso, qualsiasi criterio venga scelto e' bene utilizzarne uno e tenere i 'media' ordinati e archiviati in modo coerente. Per consentire la consultazione a tutti, anche a chi non sa' leggere (i piu' piccoli ad esempio) e renderla comunque più piacevole per tutti, possiamo cliccare con il tasto destro sui sorgenti video poi su 'seleziona icona' e selezionare una icona che appare sulla destra al posto di quelle anonime (e poco significative) di xbmc. Per consentire allo scraper di scaricare poster e copertine corretti sono molto importanti i nomi da assegnare ai film, agli album musicali ecc... Possiamo seguire ad esempio questo criterio:

  1. Il titolo del film in italiano.avi
  2. Il titolo del film in italiano (2010).avi
  3. The original title (2010)

Se con il titolo italiano lo scraper non riesce a trovare e quindi scaricare la corrispettiva fanart mettiamo anche l'anno di uscita del film tra parentesi e se ancora non basta il titolo in lingua originale con la data tra parentesi. Dopo aver spento con il tasto 's' o tasto 'fine' dalla home e riavviato, lo scraper iniziera' a scaricare. Se i file sono orinati e ben titolati rimarremo sorpresi della accuratezza dello scraper. In ogni caso possiamo poi intervenire sul singolo film (o album o ...) con il tasto destro sul film - informazioni film (o tasto 'i')- Ricarica. Questi aspetti sembrano dei dettagli ma in realta' le fanart riescono a rendere fruibile in modo piacevole dei media che la digitalizzazione, in mezzo agli innumerevoli e indiscutibili vantaggi, a purtroppo smaterializzato e reso piu' astratti, poco godibili altrimenti.

Le viste del tema 'Confluence' (la skin predefinita di xbmc nella versione attuale) sono tutte molto ben curate, per sceglierle basta usare il tasto freccia su oppure sinistro a seconda della vista attuale mentre si naviga nella sorgente. Possiamo usare viste diverse a seconda del tipo di sorgenti:

  • Video: possiamo disattivare la modalità archivio e segliere tra POSTER e FANART ma anche LISTA. Per le serie possiamo mettere ICONE LARGHE.
  • Musica: mettiamo modo archivio - Vista: lista

Le viste dipendono molto dalla skin. Selezioniamo skin alternative che verranno automaticamente scaricate ed installate. Proviamole e cambiamole di tanto in tanto per variare un pochino. Tutte le info, i poster, le fanart scaricate ecc.. sono nella home sotto .xbmc/userdata. Qui c'è anche il file per cambiare le rss news che scorrono in home page: Per mettere le rss dell'ultimora di adnkronos ad esempio http://rss.adnkronos.com/RSS_Ultimora.xml basta cambiare l'indirizzo per personalizzare:

$ cat .xbmc/userdata/RssFeeds.xml 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rssfeeds>
  <set id="1">
    <feed updateinterval="30">http://rss.adnkronos.com/RSS_Ultimora.xml</feed>
  </set>
</rssfeeds>

Dall'ultima versione la fonte rss può essere cambiata direttamente da interfaccia grafica 'Sistema - Programmi - rss editor'

La tv

Per avere integrato nel mediacenter la TV c'è un ottimo backend facile da configurare e da gestire. Visitiamo e seguiamo le precise istruzione dell'ottimo post sull'argomento che è fatto molto bene e spiega tutti passaggi. Vediamo solo qualche considerazione: Per installarlo basta:

yaourt -S hts-tvheadend-svn

Per lanciarlo

sudo /etc/rc.d/tvheadend start

e per averlo in automatico all'avvio nella solita mitica lista dei demoni in /etc/rc.conf

DAEMONS=(syslog-ng network netfs crond lircd tvheadend)

Purtroppo il sintonizzatore rimane sempre occupato, anche quando non vediamo la tv o registriamo qualcosa. Per registrare tvheadend usa solo epg o xmltv che in Italia non e' molto affidabile ma per questo problema possiamo usare il pvr kiss sopra descritto.

In alternativa a tvheadend possiamo usare la tv minimalista descritta sopra che è molto semplice anche se non è integrata. Bisogna configurare bene i tasti del telecomando in modo che sia facilmente e direttamente accessibile, propio come la 'vecchia tv normale' ed e' propio quello che vedremo subito.

Usare qualsiasi telecomando...

Oggi un TV senza telecomando non è una tv. Il telecomando è fondamentale in un MC, rende il MediaCenter veramente completo e degno di tale nome. Vediamo come si configura il telecomando con Linux e vedremo come fare ad utilizzare un qualsiasi telecomando universale per fare quasi tutto. Gli esempi sono fatti con il ricevitore e telecomando inclusi nel sintonizzatore tv Hauppauge WinTV MiniStick HD ma i metodi esposti potranno essere utili per la configurazione di tutti telecomandi con lirc in generale. Questa sezione potrebbe essere considerata una integrazione al wiki di lirc.

Riconoscimento del ricevitore IR

Prima di comprare l'hw per Linux è importante verificarne il supporto e la compatibilità. Dopo aver trovato una recensione su LinuxMagazine con il telecomando sul sito lirc e addirittura il file di configurazione si potrebbe pensare di essere ragionevolmente sicuri del supporto Linux della Hauppauge WinTV MiniStick HD. Accertiamoci che il dispositivo si visto dal kernel

$lsusb
Bus 002 Device 002: ID 2040:c000 Hauppauge Windham

Si potrebbe pensare che basti configurare lirc ma una cosa è il sintonizzatore, un'altra è il ricevitore IR. Con la versione 2.26.35 il kernel non sapeva che in quel dispositivo c'era un ricevitore IR.

$cat /proc/bus/input/devices

Il comando non restituisce nessun output. Con questa patch che possiamo applicare al kernel con le istruzioni di questo wiki e di questo post. Applicando la patch vediamo il ricevitore:

$cat /proc/bus/input/devices
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="SMS IR w/kbd type 0"
P: Phys=SMS IR w/kbd type 0
S: Sysfs=/devices/pci0000:00/0000:00:1d.7/usb2/2-3/input/input9
U: Uniq=
H: Handlers=event9
B: EV=3
B: KEY=1 0 0 0 0

ma niente di più. Una prova per capire se arrivano segnali ce la può dare evtest:

$yaourt -S evtest
$sudo evtest /dev/input/event8
Supported events:
 Event type 0 (Sync)
 Event type 1 (Key)
 Event code 256 (Btn0)
Testing ... (interrupt to exit)

niente output. Possiamo applicare questa patch di Richard Zidlicky (il vero autore di questa sezione del wiki a parte gli errori) che, sebbene considerata 'superata', funziona!

$cat /proc/bus/input/devices
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="SMS IR w/kbd type 1"
P: Phys=SMS IR w/kbd type 1
S: Sysfs=/devices/pci0000:00/0000:00:1d.7/usb2/2-1/input/input8
U: Uniq=
H: Handlers=kbd event8
B: EV=3
B: KEY=100fc312 214a80200000000 0 18000 41a800004801 9e168000000000 10000ffc
$sudo evtest /dev/input/event8
Input driver version is 1.0.0
Input device ID: bus 0x0 vendor 0x0 product 0x0 version 0x0
Input device name: "SMS IR w/kbd type 1"
Supported events:
 Event type 0 (Sync)
 Event type 1 (Key)
 Event code 2 (1)
 Event code 3 (2)
 Event code 4 (3) 
(...)

  Event code 403 (ChannelDown)
  Event code 412 (Previous)
Testing ... (interrupt to exit)
Event: time 1289424399.849151, type 1 (Key), code 108 (Down), value 1
Event: time 1289424399.849161, type 1 (Key), code 108 (Down), value 0
Event: time 1289424399.849164, -------------- Report Sync ------------
^[[BEvent: time 1289424400.493828, type 1 (Key), code 106 (Right), value 1
Event: time 1289424400.493841, type 1 (Key), code 106 (Right), value 0
Event: time 1289424400.493846, -------------- Report Sync ------------
^[[CEvent: time 1289424405.057377, type 1 (Key), code 67 (F9), value 1
Event: time 1289424405.057387, type 1 (Key), code 67 (F9), value 0
Event: time 1289424405.057390, -------------- Report Sync ------------
^[[20~Event: time 1289424406.991615, type 1 (Key), code 119 (Pause), value 1
Event: time 1289424406.991624, type 1 (Key), code 119 (Pause), value 0
Event: time 1289424406.991626, -------------- Report Sync ------------
Event: time 1289424407.785255, type 1 (Key), code 4 (3), value 1
Event: time 1289424407.785264, type 1 (Key), code 4 (3), value 0
Event: time 1289424407.785266, -------------- Report Sync ------------
3Event: time 1289424408.430413, type 1 (Key), code 3 (2), value 1
Event: time 1289424408.430423, type 1 (Key), code 3 (2), value 0
Event: time 1289424408.430425, -------------- Report Sync ------------ 

Il telecomando viene visto come una tastiera: se apriamo un terminale, un editor... premendo il bottone '1' appare '1' con 'ok' va a capo, con i tasti freccia.... Inoltre cambiando i tasti nella patch (es. KEY_EXIT con KEY_ESC ) applicando la patch e ricompilando ottieniamo il risultato. In questo modo dobbiamo tuttavia armonizzare le scorciatoie da tastiera delle varie applicazioni tra loro, tenere conto di quelle del DE, evitare i conflitti e comunque arrivare ad un compromesso. Servirebbe un livello di astrazione che intermedi come lirc.

Configurare lirc

Con la versione del kernel 2.6.36 è stato migliorato il framework IR e integrata la patch per il sintonizzatore sopra mezionato: possiamo quindi vedere un output da evtest

$ cat /proc/bus/input/devices
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="SMS IR (Hauppauge WinTV MiniStick)"
P: Phys=usb-0000:00:1d.7-1/ir0
S: Sysfs=/devices/pci0000:00/0000:00:1d.7/usb2/2-1/rc/rc0/input9
U: Uniq=
H: Handlers=kbd event9
B: EV=100013
B: KEY=100fc312 214a80200000000 0 18000 41a800004801 9e168000000000 10000ffc
B: MSC=10
$sudo evtest /dev/input/event9
Input driver version is 1.0.0
Input device ID: bus 0x0 vendor 0x0 product 0x0 version 0x0
Input device name: "SMS IR (Hauppauge WinTV MiniStick)"
- Nascondi testo citato -
Supported events:
 Event type 0 (Sync)
 Event type 1 (Key)
   Event code 2 (1)
   Event code 3 (2)
 (...)

  Event code 403 (ChannelDown)
  Event code 412 (Previous)
Event type 4 (Misc)
  Event code 4 (ScanCode)
Event type 20 (Repeat)
Testing ... (interrupt to exit)

(pressing some buttons) here is the output:

Event: time 1289420546.702777, type 4 (Misc), code 4 (ScanCode), value 1d03
Event: time 1289420546.702800, type 4 (Misc), code 4 (ScanCode), value 1d03
Event: time 1289420547.595533, type 4 (Misc), code 4 (ScanCode), value 1d02
Event: time 1289420548.339661, type 4 (Misc), code 4 (ScanCode), value 1d01
Event: time 1289420548.339682, type 4 (Misc), code 4 (ScanCode), value 1d01
Event: time 1289420549.232201, type 4 (Misc), code 4 (ScanCode), value 1d04
Event: time 1289420549.232223, type 4 (Misc), code 4 (ScanCode), value 1d04
Event: time 1289420549.877058, type 4 (Misc), code 4 (ScanCode), value 1d05
Event: time 1289420549.877078, type 4 (Misc), code 4 (ScanCode), value 1d05
Event: time 1289420550.472351, type 4 (Misc), code 4 (ScanCode), value 1d06
Event: time 1289420550.472371, type 4 (Misc), code 4 (ScanCode), value 1d06
Event: time 1289420551.017837, type 4 (Misc), code 4 (ScanCode), value 1d20
Event: time 1289420551.017860, type 4 (Misc), code 4 (ScanCode), value 1d20
Event: time 1289420552.803610, type 4 (Misc), code 4 (ScanCode), value 1d34
Event: time 1289420552.803632, type 4 (Misc), code 4 (ScanCode), value 1d34
Event: time 1289420553.398718, type 4 (Misc), code 4 (ScanCode), value 1d32 

Installiamo lirc che al momento è alla versione 0.9.0.pre1-3

# pacman -S lirc lirc-utils

Per farlo partire all'avvio mettiamolo tra i DAEMONS in /etc/rc.conf. eg:

DAEMONS=(syslog-ng network netfs crond lircd)

Non dovrebbe essere necessario mettere niente nei moduli perche nella nuova versione sono già nel kernel.

Molti dispositivi possono lavorare con lirc sia usando /dev/input che /dev/lirc0 La scelta viene definita nel file /etc/conf.d/lircd.conf

Il driver /dev/lirc0

Nel caso di LIRC0 il file di configurazione appare cosi'

$ cat /etc/conf.d/lircd.conf 
#
# Parameters for lirc daemon
#
LIRC_DEVICE="/dev/lirc0"
LIRC_DRIVER="default"
LIRC_EXTRAOPTS=""
LIRC_CONFIGFILE="/etc/lircd.conf"

In questo caso e' utile e prezioso il file di configurazione scaricato dal sito lirc che dobbiamo mettere in /etc/lircd.conf Se non abbiamo trovato in internet il file di configurazione, o abbiamo acquistato un telecomando universale qualsiasi, possiamo produrre il file tramite irrecord:

sudo irrecord -d /dev/lirc0 /etc/lircd.conf

Seguiamo la procedura e alla fine verifichiamo il risultato

nano /etc/lircd.conf

Vediamo la corrispondenza valori tasti: con il driver /dev/lirc0 lircd prende un input di basso livello dal ricevitore, guarda nel lircd.conf

bits           13
flags RC5|CONST_LENGTH

decodifica l'input in accordo con il protocollo RC5 del telecomando che produce qualcosa come il codice 0x1741, guarda oltre sempre in /etc/lircd.conf e assegna l'evento KEY_1 a quel numero. Rispetto all'altro metodo si risparmia un livello di decodifica, in pratica tuttavia non c'e' gran differenza perche' la corrispondenza in lircd.conf.devinput e' molto diretta. Riavviamo e assicuriamoci che ci sia il demone e il dispositivo:

$ ls /dev/lirc*
/dev/lirc0  /dev/lircd

Vediamo adesso l'altro metodo: /dev/input

Il driver /dev/input

Nel caso del driver INPUT il file /etc/cond.d/lircd.conf appare cosi'

$ cat /etc/conf.d/lircd.conf 
#
# Parameters for lirc daemon
#
LIRC_DEVICE="/dev/input/by-path/pci-0000:00:1d.7-event-ir"
LIRC_DRIVER="devinput"
LIRC_EXTRAOPTS=""
LIRC_CONFIGFILE="/etc/lircd.conf" 

dove il LIRC_DEVICE và preso scegliendolo tra quelli definiti con il percorso per evitare che vari:

ls /dev/input/by-path/*

Manca l'abbinamento con il tasto: la keytable che mappa valori a tasti. La corrispondenza non viene interamente fatta nel file /etc/lircd.conf che deve essere invece preso da qui

sudo cp /usr/share/lirc-remotes/devinput/lircd.conf.devinput /etc/lircd.conf

Con il sistema /dev/input la corrispondenza valori tasti viene fatta in 2 livelli. La decodifica RC5 e' fatta nel driver del kernel, e rende ad es 0x1d01 mappato come KEY_1 in input device. Lircd prende KEY_1 guarda in /etc/lircd.conf il valore KEY_1 and returns KEY_1 (ma potrebbe essere configurato per es. in "Channel1" o altro) La corrispondenza della keytable nel kernel può essere caricata in due modi:

  • Applicando una patch al kernel. Nel caso della Hauppauge WinTV MiniStick HD usiamo questa patch per la versione 2.6.36 del kernel (sarà presto inserita ufficialmente nel kernel).
  • Tramite ir-keycode contenuto nel pacchetto v4l-utils
$sudo pacman -S v4l-utils
$ ir-keytable
Found /sys/class/rc/rc0/ (/dev/input/event9) with:
    Driver smsmdtv, table rc-rc5-hauppauge-new
    Supported protocols: NEC RC-5 RC-6 JVC SONY LIRC     Enabled protocols: NEC RC-5 RC-6 JVC SONY LIRC

ha trovato il ricevitore e ci dice che usa la table rc-rc5-hauppauge-new che però non contiene i valori del telecomando altrimenti sarebbero apparsi su evtest sopra. Ce ne accertiamo leggendo (-r) la tabella:

sudo ir-keytable -r
scancode 0x1e21 = KEY_CHANNELDOWN (0x193)
scancode 0x1e22 = KEY_CHANNEL (0x16b)
scancode 0x1e24 = KEY_PREVIOUSSONG (0xa5)
scancode 0x1e25 = KEY_ENTER (0x1c)
scancode 0x1e26 = KEY_SLEEP (0x8e)
scancode 0x1e29 = KEY_BLUE (0x191)
scancode 0x1e2e = KEY_GREEN (0x18f)
scancode 0x1e30 = KEY_PAUSE (0x77)
scancode 0x1e32 = KEY_REWIND (0xa8)
scancode 0x1e34 = KEY_FASTFORWARD (0xd0)
scancode 0x1e35 = KEY_PLAY (0xcf)
scancode 0x1e36 = KEY_STOP (0x80)
scancode 0x1e37 = KEY_RECORD (0xa7)
scancode 0x1e38 = KEY_YELLOW (0x190)
scancode 0x1e3b = KEY_SELECT (0x161)
scancode 0x1e3c = KEY_ZOOM (0x174)
scancode 0x1e3d = KEY_POWER (0x74)
Enabled protocols: NEC RC-5 RC-6 JVC SONY LIRC 

vediamo che i valori (0x1e35 0x1e36 ...) abbinati ai tasti (KEY_PLAY KEY_STOP ...) non sono quelli del nostro telecomando visti con evtest sopra (1d30 1d36 ...). A parte lo 0x vediamo che quelli nella tabella sono tutti del tipo 1exx mentre quelli del telcomando sono 1dxx Salviamo la tabella attuale in un file:

sudo ir-keytable -r > tabella_originale

Modifichiamolo aggiungendo i valori presi da evtest e abbiniamoli ai tasti corrispondenti. I valori tra parentesi possono essere omessi. Per essere successivamente riconosciuti i tasti devono esser tra quelli presenti nella lista che otteniamo con questo comando:

irrecord --list-namespace

Per il telecomando della hauppauge il risultato è qui. Andiamo a scrivere (-w) la tabella modificata:

ir-keytable --write=/percorso/tabella/modificata

proviamo subito il risultato con evtest:

$ sudo evtest /dev/input/event9
(...)
Event: time 1291327675.258200, type 4 (Misc), code 4 (ScanCode), value 1d3d
Event: time 1291327675.258219, type 1 (Key), code 116 (Power), value 1
Event: time 1291327675.258222, -------------- Report Sync ------------
Event: time 1291327675.258267, type 4 (Misc), code 4 (ScanCode), value 1d3d
Event: time 1291327675.506847, type 1 (Key), code 116 (Power), value 0
Event: time 1291327675.506852, -------------- Report Sync ------------
Event: time 1291327677.738160, type 4 (Misc), code 4 (ScanCode), value 1d3b
Event: time 1291327677.738175, type 1 (Key), code 354 (Goto), value 1
Event: time 1291327677.738179, -------------- Report Sync ------------
Event: time 1291327677.987007, type 1 (Key), code 354 (Goto), value 0
Event: time 1291327677.987017, -------------- Report Sync ------------
Event: time 1291327678.779761, type 4 (Misc), code 4 (ScanCode), value 1d1c
Event: time 1291327678.779778, type 1 (Key), code 377 (TV), value 1
Event: time 1291327678.779781, -------------- Report Sync ------------
Event: time 1291327679.027004, type 1 (Key), code 377 (TV), value 0
Event: time 1291327679.027014, -------------- Report Sync ------------
Event: time 1291327683.789267, type 4 (Misc), code 4 (ScanCode), value 1d24
Event: time 1291327683.789281, type 1 (Key), code 405 (Last), value 1
Event: time 1291327683.789285, -------------- Report Sync ------------
Event: time 1291327683.789324, type 4 (Misc), code 4 (ScanCode), value 1d24
Event: time 1291327684.037014, type 1 (Key), code 405 (Last), value 0
Event: time 1291327684.037024, -------------- Report Sync ------------
Event: time 1291327684.930302, type 4 (Misc), code 4 (ScanCode), value 1d1e
Event: time 1291327684.930317, type 1 (Key), code 407 (Next), value 1
Event: time 1291327684.930320, -------------- Report Sync ------------
Event: time 1291327685.180341, type 1 (Key), code 407 (Next), value 0
Event: time 1291327685.180352, -------------- Report Sync ------------

Abbiamo ora l'abbinamento valore '1d3d' tasto 'Power'. La cosa importante è che questo può essere fatto con qualsiasi telecomando. Io ne ho configurato uno universale. Ricordiamoci di mettere il keytable modificato in una posizione sicura e di aggiungere il comando

ir-keytable --write=/percorso/tabella/modificata

in /etc/rc.local per fare in modo che ad ogni avvio il kernel possa modificare automaticamente la keytable.

IRW ed eccezione in HAL

In entrambi i casi (/dev/lirc0 oppure /dev/input) questo dovrebbe essere l'output in irw (con il demone lircd in ascolto):

$ irw
0000000080010067 00 KEY_UP devinput
000000008001006c 00 KEY_DOWN devinput
0000000080010160 00 KEY_OK devinput
0000000080010080 00 KEY_STOP devinput
0000000080010077 00 KEY_PAUSE devinput
00000000800100cf 00 KEY_PLAY devinput
0000000080010002 00 KEY_1 devinput
00000000800100a8 00 KEY_REWIND devinput
00000000800100d0 00 KEY_FASTFORWARD devinput
0000000080010192 00 KEY_CHANNELUP devinput

Se ci accorgiamo aprendo un terminale e premendo i tasti numerici che questi compaiono o che i tasti del volume e del mute vengono subito interpretati da x che alza, abbassa e muta, dobbiamo fermare hal come indicato in questo avviso. Prima qualche info. Troviamo il dispositivo preso da hal:

$lshal
(...)
udi = '/org/freedesktop/Hal/devices/usb_device_2040_c000_4033519634_logicaldev_input'
  info.addons.singleton = {'hald-addon-input'} (string list)
  info.capabilities = {'input', 'input.keyboard', 'input.keys', 'button'} (string list)
  info.category = 'input'  (string)
  info.parent = '/org/freedesktop/Hal/devices/usb_device_2040_c000_4033519634'  (string)
  info.product = 'SMS IR (Hauppauge WinTV MiniStick)'  (string)
  info.subsystem = 'input'  (string)
  info.udi = '/org/freedesktop/Hal/devices/usb_device_2040_c000_4033519634_logicaldev_input'       (string)
  input.device = '/dev/input/event9'  (string)
  input.originating_device = '/org/freedesktop/Hal/devices/usb_device_2040_c000_4033519634'  (string)
  input.product = 'SMS IR (Hauppauge WinTV MiniStick)'  (string)
  input.x11_driver = 'evdev'  (string)
  input.xkb.layout = 'it'  (string)
  input.xkb.model = 'evdev'  (string)
  input.xkb.rules = 'base'  (string)
  input.xkb.variant =   (string)
  linux.device_file = '/dev/input/event9'  (string)
  linux.hotplug_type = 2  (0x2)  (int)
  linux.subsystem = 'input'  (string)
  linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1d.7/usb2/2-1/rc/rc0/input9/event9'  (string)

bisogna mettere una regola ad hal in modo che cerchi nel campo info.product la stringa 'SMS IR' e blocchi il controllo di quel dispositivo

sudo nano /usr/share/hal/fdi/preprobe/20thirdparty/lirc.fdi

con queste queste righe

<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
<device>
 <match key="info.product" contains_ncase="SMS IR">
    <merge key="info.ignore" type="bool">true</merge>
 </match>
</device>
</deviceinfo>

I telecomandi universali

Possiamo acquistare un telecomando universale e configurarlo con lirc tramite il driver /dev/input in modo da avere comodamente due o piu' telecomandi con lo stesso ricevitore. Con evtest catturiamo i codici e costruiamo la tabella che viene caricata con ir-keycode ad ogni avvio. Se assegnamo lo stesso nome ai bottoni faremo in modo che i telecomandi facciano le stesse cose. I telecomandi universali per adattarsi ai vari dispositivi sono configurati per essere settati su diversi gruppi divisi per marca. Si tratta di una lista di decine e decine di insiemi possibili. Ad esempio questo è il modello H-1080E marca CHUNGHOP: delle varie combinazioni moltissime NON fanno funzionare tutti i tasti, ce ne possiamo accorgere facilmente perchè quando un tasto non funziona il led rosso è fisso acceso mentre quando invia il codice lampeggia. La Philips 245 e' una combinazione che li fa' funzionare tutti ma verificando l'output su irw ci accorgiamo che i valori del tasto menu e freccia sono identici: l'usabilità del telecomando viene irrimediabilmente compromessa. La combinazione Hitachi 382 consente di far funzionare quasi tutti i tasti in modo univoco e saprattutto non esclude i più importanti: questa la ir-keytable. Con il telecomando della hauppauge condivide 35 tasti e in questo universale ne abbiamo qualcuno in più. La situazione migliore e' quella di avere pochi tasti ben configurati. Possiamo usare qualsiasi telecomando ma teniamo molto d'occhio l'usabilità e se vogliamo qualcosa di pronto subito il telecomando di Windows MediaCenter è largamente supportato da Linux, facile da capire e ben fatto.

Ora viene la parte finale: la configurazione del comportamento delle singole applicazioni che interagiscono con lirc.

... per fare qualsiasi cosa

Abbiamo visto come fare a configurare qualsiasi telecomando... ora vedremo come fare qualsiasi cosa con questo telecomando. Nell'ottica del mediacenter come unica fonte di intrattenimento in casa da fare usare a tutti si tratta di una questione molto importante.

Configuriamo le applicazioni xine e xbmc

Ci eravamo lasciati con l'output di irw

$ irw
0000000080010067 00 KEY_UP devinput
000000008001006c 00 KEY_DOWN devinput

Se non ottieniamo questo output torniamo indietro alla configurazione di lirc, se invece fila tutto liscio possimao configurare le applicazioni in modo da definire il comportamento di ogni singolo tasto in ogni applicazione. Vediamo adesoo xine e xbmc. Per la TV minimalista con xine vista precedentemente iniziamo a creare lircrc nella nostra home con questo comando

xine --keymap=lirc>.lircrc

che ci fornisce una lista di possibili azioni da far compiere alla pressine di un tasto del telecomando con xine. Basta sostituire 'remote = xxxxx' con 'remote = devinput' (o il nome che compare in irw) e definire il comportamento dei tasti sostituendo 'button = xxxxx' con 'button = KEY_VOLUMEUP' alla funzione che vogliamo assegnare. Per esempio la funzione per alzare il volume da cosi

# increment audio volume
begin
    remote = xxxxx
    button = xxxxx
    prog   = xine
    repeat = 0
    config = Volume+
end

nel nostro caso diventa cosi

# increment audio volume
begin
    remote = devinput
    button = KEY_VOLUMEUP
    prog   = xine
    repeat = 0
    config = Volume+
end

Possiamo togliere molte funzioni in quanto utilizzando xine per la tv abbiamo bisogno solo di pochi tasti. Il controllo remoto di Xbmc, contrariamente alle convenzioni usate da quasi tutte le applicazioni (come xine), non viene fatto in .lircrc ma dal file .xbmc/userdata/Lircmap.xml che va creato copiando da /usr/share/xbmc/system/Lircmap.xml uno dei telecomandi già preconfigurati e che quindi dovrebbero funzionare 'out of the box' con xbmc. Tra i telecomandi preconfigurati ce ne è uno che si chiama propio 'devinput' ma che deve essere ritoccato per funzionare nel nostro caso. Xbmc considera entrambi i files, quello locale e quello generale, e se i nomi dei telecomandi coincidono come nel nostro caso sovrascrive le impostazioni che trova su /usr/share/xbmc/system/Lircmap.xml con quelle locali in .xbmc/userdata/Lircmap.xml che hanno la precedenza. Rispetto a quelle generali facciamo solo pochi cambiamenti: mettiamo un nome unico altrimenti con gli alternativi xbmc non si avvia:

$cat .xbmc/userdata/Lirmap.xml
<remote device="devinput">

Per chi non usa il driver /dev/input basta prendere il nome del telecomando preso da irw e cambiare il valore tra i tags (che sono le azioni triggerate) con i nomi dei bottoni sempre presi da irw. Nel nostro caso aggiungiamo alcuni bottoni che nell'originale era definiti con nomi diversi sempre assegnando le solite funzioni:

<select>KEY_OK</select>
<start>KEY_GOTO</start>
<skipplus>KEY_NEXT</skipplus>
<skipminus>KEY_LAST</skipminus>

'Disattiviamo' il pulsante KEY_TV che ci serve per lanciare xine assegnando ad una funzione che non c'è cambiando l'originale:

<mytv>KEY_TV</mytv>

con il modificato

<NOmytv>KEY_TV</NOmytv>

che assegna il pulsante KEY_TV ad una non esistente funzione 'NOmytv'. Infine aggiungiamo due pulsanti che prima non c'erano cercando le funzioni in /usr/share/xbmc/system/keymaps/remote.xml (oppure in /opt/xbmc/system/keymaps/remote.xml a seconda delle versioni).

<info>KEY_PREVIOUS</info>
<menu>KEY_MENU</menu>

Comunque non tutte servono e sarebbe meglio non appesantire troppo con molte funzioni privilegiando l'usabilità. Motivo per cui non ci addentreremo in configurazioni spinte. Un dettaglio cambiamolo: mentre vediamo un film se premiamo back (o exit) la funzione contestuale invece di tonare indietro nei menu manda un 'piccolo passo indietro' nel film, funzione già egregiamente coperta da molti altri pulsanti (Left, rewind e last). Cambiamo in questo modo:

$ cat .xbmc/userdata/keymaps/remote.xml 
<keymap>
<FullscreenVideo>
    <remote>
      <back>Stop</back>
    </remote>
  </FullscreenVideo>
</keymap>

viene in questo modo sovrascitta l'impostazione 'SmallStepBack' presente in /usr/share/xbmc/system/keymaps/remote.xml con 'Stop' in .xbmc/userdata/keymaps/remote.xml Abbiamo visto xine e xbmc ma ogni applicazione compatibile con lirc ha le sue funzioni e il suo modo per assegnarle ai tasti, di solito tramite lircrc. Ci sono poi due strumenti importanti che ci mette a disposizione lirc: irxevent e irexec.

irxevent per registrare 'on the fly' la tv digitale con xine

Nelle funzioni che abbiamo visto sopra di xine c'è quella di 'record' che tuttavia si limita a salvare una screenshot e non salva lo streaming. Per questo c'è il tasto F1 che possiamo associare a xine tramite irxevent che è un programma da lanciare in background come utente in quanto prende come configurazione il file .lircrc della home e quando vien invocato si limita a passare l'evento definito alla applicazione definita. Se usiamo gnome lo possiamo far partire in automatico da Sistema - Preferenze - Applicazioni di avvio ma probabilmente anche su /etc/rclocal cambiando utente o forzando il percorso del file di configurazione. Nel nostro caso il pulsante su .lircrc viene definito cosi

begin
        remote = devinput
        prog = irxevent
        button = KEY_RECORD
        repeat = 0
        config = Key F1 xine
end

Premendo il tasto record sul telecomando irxevent passa all'applicazione xine l'evento di pressione del tasto F1 come se fossimo sulla tastiera e quindi xine registra lo streaming nella nostra home e quando lo ripremiamo stoppiamo la registrazione. Su xbmc non accade niente perchè xine non gira. Dovremmo assegnare un'altro tasto al record di xbmc ma anche questo si limita ad uno screenshot.

irexec per avviare e spengere una applicazione con un singolo bottone

Se dobbiamo alzarci e usare il mouse per far partire xbmc o xine crolla tutto il progetto. Per fortuna ci viene in aiuto irexec che come irxevent è una applicazione in background (da mettere in avvio automatico) che si limita a lanciare altre applicazioni o scripts.

begin
        remote = devinput
        prog = irexec
        button = KEY_POWER
        repeat = o
        config = xbmc
end

In questo modo il pulsante power richiama irexec che lancia xbmc. In Lircmap.xml abbiamo definito power in questo modo

<power>KEY_POWER</power>

Quindi mentre ci gustiamo xbmc se premiamo il tasto power xbmc si spenge ma irexec lo riapre. Potremmo utilizzare due pulsanti diversi, uno per accendere e uno per spengere ma sarebbe brutto e poco usabile. In questo thread troviamo una soluzione intelligente:

$cat .lircrc
begin
        remote = devinput
        prog = irexec
        button = KEY_POWER
        repeat = 0
        config = /media/dati/stele/popo
end
(...)
$ cat /media/dati/popo 
#!/bin/sh 
pkill irexec; 
xbmc && irexec -d;
$cat .xbmc/userdata/Lircmap.xml
(...)
<power>KEY_POWER</power>
(...)

In pratica irexec lancia lo script 'popo' che uccide il processo irexec e lancia xbmc e solo quando questo si spenge (tramite il pulsante power definito in Lircmap.xml) riavvia irexec come demone pronto a rilanciare lo script appena premuto il power di nuovo. Co basta solo generalizzare per sfruttare il solito script anche per xine

$ cat /media/dati/popo 
#!/bin/sh 
pkill irexec; 
if [ "$1" = "xbmc" ]
then
$1 && irexec -d;
else
$1 -f dvb:// && irexec -d;
fi

e dare il nome dell'applicazione da lanciare come argomento dello script popo

$cat .lircrc
begin
        remote = devinput
        prog = irexec
        button = KEY_POWER
        repeat = 0
        config = /media/dati/stele/popo xbmc
end
begin
        remote = devinput
        prog = irexec
        button = KEY_TV
        repeat = 0
        config = /media/dati/stele/popo xine
end

Qui abbiamo i files .lircrc e Lircmap.xml completi. Con il tasto TV accendiamo e spengiamo la tv e con il tasto power xbmc. Abbiamo inoltre imparato due strumenti (irxevent e irexec) che potenzialmente ci consentono di configurare davvero di tutto!

Il backup perfetto

Quando il pc di casa inizia ad essere utilizzato massicciamente e quasi esclusivamente come mediacenter o comunque per la gestione per i propi dati come le foto ecc... e' fondamentale provvedere ad un sistema di backup. Considero questo articolo una raro esempio di chiarezza e competenza, precisione e accuratezza. Complimenti a Saverio Bolognani e al suo articolo: http://www.dei.unipd.it/~sbologna/backupinlinux3.html 'Il backup perfetto'.

In estrema sintesi riporto i punti principali e i passaggi per la nostra amata arch. Il backup perfetto deve essere:

  • Completamente automatico
  • Prevedere la separazione fisica dei supporti
  • Consentire un recupero semplice dei file

Per ottenere questi risultati ci avvaleremo delle caratteristiche del filesystem e di due potenti programmi: rsync e rsnapshot come spiegato nei dettagli molto bene nell'articolo.

sudo pacman -S rsync rsnapshot

Aggiungiamo poi un pacchetto necessario per evitare un errore che invaliderebbe tutto: perl-lchown preparato per noi dall'ottimo Giovanni

yaourt -S perl-lchown

Siamo pronti per personalizzare l'unico file di configurazione /etc/rsnapshot.conf partendo da dove vogliamo che vengano salvati i backup. Cito dall'articolo:

# Tutti gli snapshot vengono salvati in questa cartella.
snapshot_root /media/LACIE_ext3/
# Se no_create_root è settato a 1, rsnapshot non creerà
# automaticamente la cartella snapshot_root. Ciò è particolarmente
# utile per fare backup su supporti rimovibili, come hard disk USB o
# FireWire.
no_create_root 1

Poi definiamo, sempre nello stesso file piu' in basso gli intervalli in cui viene effettuato il backup ovvero la struttura dei backup nel tempo. Nel mio caso e diversamente dall'articolo preferisco conservare 7 immagini quotidiane e 4 settimanali

Backup intervals
# I nomi degli intervalli (weekly = settimanale, monthly = mensile, ...)
# sono solo nomi e non hanno nessun effetto sulla reale lunghezza
# dell'intervallo. I numeri impostano il numero di snapshot da
# conservare per ogni intervallo (weekly.0, weekly.1, ...).
# La lunghezza dell'intervallo viene impostato dall'intervallo temporale
# tra due esecuzioni di rsnapshot <nome intervallo>, generalmente
# tramite cron. Sentitevi liberi di adattare i nomi degli intervalli, e di
# conseguenza il file /etc/cron.d/rsnapshot secondo le vostre
# esigenze. L'unica vincolo è che gli intervalli devono essere elencati
# in ordine ascendente.
interval daily   7
interval weekly 4

Dobbiamo poi specificare di quali cartelle vogliamo fare il backup (nel mio caso la directory /media/dati che e' una intera partizione dedicata). Il secondo argomento di ogni riga specifica sotto quale cartella vanno salvate le copie sul supporto di backup. Attenzione alle barre (/) alla fine dei percorsi!

# LOCALHOST
backup /media/dati/ localhost/

A me interessa escludere la cartella new e i files/cartelle nascosti (che iniziano con il punto) in cui metto la roba scaricata da eMule e che non mi interessa backuppare. Quindi aggiungo le seguenti righe:

exclude .*
exclude new

Siamo arrivati al momento della pianificazione del backup. Diversamente all'articolo ho preferito modificare lo script e crearne uno personalizzato che ho chiamato backup_script che faccio lanciare con i privilegi di utente root dal mio crontab ad ogni ora

$crontab -e
# Tutti i giorni al 3 minuto di ogni ora verifica backup
3 * * * * sudo /percorso/al/backup_script

Lo script usa due file che che vanno creati la prima volta

touch /percorso/al/backup_timestamp_quotidiano /percorso/al/backup_timestamp_settimanale

Chiaramente i percorsi sono personali. In realta' sono files vuoti e servono esclusivamente per schedulare i backup. Lo script infatti ogni ora verifica quanto tempo e' passato dall'ultimo backup quotidiano e se sono passate oltre 24 ore lo effettua. Allo stesso modo se sono passati piu' di 7 giorni dall'ultimo backup settimanale lo effettua. In caso contrario si limita a scrivere nel file di log la data. Fatto. Tutto automatico. Tarmite il fidato conky mi piace tenere d'occhio il file log per verificare che sia tutto ok ma non devo fare niente e sono tranquillo che ho tutti i miei file al sicuro e facilmente accessibili in ogni momento.