develia.org
»» i686 slackware tarballs..
»» software projects..
»» and much more..
 NAVIGATION 
 OPTIONS 

 INFO 
*** develia.org ***
di Giacomo Lozito
© 2004-2010

valid xhtml 1.0valid css!
powered by apachepowered by php
valid rss 2.0get firefox!

NO software patents in UE
 DOCUMENTS 
LIRC, controllo remoto infrarossi su Linux (con il Creative live!drive)

1. Introduzione
2. Linux Infrared Remote Control
3. Configurazione e prime prove
4. Assegnare funzioni ai segnali
5. Controllo dei programmi e guida a IRKick


 Introduzione

creative live!drive Questo howto è dedicato principalmente ai possessori di un live!drive della Creative, mi riferisco in particolare a quei modelli (come la sound blaster audigy platinum) dotati di supporto infrarossi e relativo telecomando. Ciònonostante, il quarto e il quinto capitolo sono dedicati a irexec, lircrc, IRKick e alla generica gestione dei programmi con controllo remoto; sono quindi utili a tutti e validi per qualsiasi dispositivo infrarossi gestito mediante LIRC.
Le istruzioni descritte nei primi tre capitoli potrebbero funzionare (ma è solo una mia congettura) anche con gli hub esterni multifunzione che accompagnano i più recenti modelli di sound blaster audigy. Sarei lieto se qualcuno provasse le procedure con uno dei suddetti, per verificarne il corretto funzionamento, e poi mi facesse sapere com'è andata.

Ok, ecco uno scenario reale: abbiamo il nostro bel pannello frontale della scheda audio, con tanto di telecomando e come sistema operativo usiamo Linux. Vorremmo sfruttare questo telecomando, magari per compiti semplici come gestire la riproduzione audio (play,stop,next,previous,seek) o navigare un dvd o per qualsiasi altro compito (esecuzione di un programma, spegnimento del sistema, qualsiasi cosa!).
Intuitivamente, avremo bisogno dei seguenti componenti:
  • driver del kernel per gestire la periferica infrarossi;
  • software che traduca i segnali ricevuti nei comandi desiderati;
  • eventuali plug-in per interagire con i programmi preferiti.

I primi due requisiti su Linux sono soddisfatti da LIRC (Linux Infrared Remote Control), un ottimo pacchetto software comprendente tutto il necessario per allestire, testare e gestire i dispositivi infrarossi. Il terzo requisito dipende essenzialmente dalle operazioni che intendiamo effettuare (e dall'eventuale programma con cui vogliamo interagire).


 Linux Infrared Remote Control

LIRC dispone di un'ampia documentazione, che tratta anche la sua compilazione ed installazione. Inoltre la selezione del driver da compilare è effettuabile anche tramite un apposito script, setup.sh (dialog-based). Insomma, mettere su LIRC è piuttosto semplice.
Nel nostro caso specifico (live!drive) siamo ulteriormente facilitati dal fatto che non è necessario compilare un modulo per il kernel. Infatti il livedrive è controllabile mediante il driver alsa emu10k1 (snd-emu10k1) di cui con ogni probabilità già disponiamo, avendo come scheda audio una sound blaster live/audigy. Il supporto infrarossi in snd-emu10k1 è attivabile fornendo un opportuno parametro al caricamento del modulo. Per rendere questa procedura automatica, su /etc/modprobe.conf aggiungeremo la riga seguente:

options snd-emu10k1 enable_ir=1

Nel caso in cui avessimo già impostato qualche opzione particolare per il modulo snd-emu10k1, aggiungeremo enable_ir=1 alle opzioni già presenti. A questo punto possiamo concentrarci sulla compilazione di LIRC. Segue la configurazione:

./configure --prefix=/usr --sysconfdir=/etc --disable-static --with-driver=livedrive_midi --with-major=61 --with-port=none --with-irq=none --with-x

Alcune di queste opzioni possono naturalmente essere modificate in base alle proprie esigenze (per esempio --with-x andrà omessa qualora non si desideri compilare i programmi per X Window). Come si può notare, non specifichiamo la locazione dei sorgenti del kernel nè dei moduli, perchè in ogni caso con il driver prescelto (livedrive_midi) non sarà necessario compilare alcun modulo aggiuntivo. A configurazione ultimata, procediamo come di consueto con make e make install. Durante l'installazione verranno anche creati, a meno che non siano già presenti, i due file speciali (un socket e una fifo) necessari per il funzionamento di LIRC, ovverosia /dev/lircd e /dev/lircm.

Per gli appassionati di Slackware Linux è disponibile, nella sezione miscellanea di develia.org, un tarball precompilato di LIRC con driver livedrive_midi, che provvede anche a creare i due file speciali nel caso in cui non siano presenti; il massimo della comodità! Per tutti gli altri (e per coloro che volessero fare da sè, magari per scegliere diverse opzioni di configure) resta sempre valida la strada della compilazione, come indicato sopra.


 Configurazione e prime prove

In primo luogo, se si desidera sfruttare l'infrarossi come semplice utente e non soltanto da root, dobbiamo modificare di conseguenza i permessi di /dev/lircd. E' possibile per esempio creare un gruppo "infrared", impostarlo come proprietario di /dev/lircd, impostare come 660 i permessi del file (read/write per proprietario e gruppo) e aggiungere gli utenti desiderati al gruppo . In alternativa si può semplicemente impostare a 666 i permessi del file (read/write per tutti).
Ricapitolando, abbiamo attivato il supporto infrarossi sul driver snd-emu10k1 e abbiamo installato il pacchetto LIRC, che comprende lircd (il demone in grado di gestire i segnali infrarossi) e vari altri programmi. Inutile dire comunque che lircd è il programma più importante, ed il nostro prossimo passo consiste nel configurarlo in modo che interpreti correttamente i segnali ricevuti tramite il telecomando in nostro possesso.

Il file di configurazione di lircd è /etc/lircd.conf. In generale la conoscenza della sua sintassi non è fondamentale, nondimeno i più curiosi potranno comprenderne i vari parametri leggendo questa guida alla sintassi del file. Ciò che è importante sapere è che un file di configurazione ad-hoc è fondamentale per il corretto funzionamento del dispositivo infrarossi.
Il lircd.conf ideale può essere ricavato in vari modi. Con un pò di fortuna, il file corretto potrebbe già essere installato assieme a lircd e agli altri programmi. In generale, è disponibile una grandissima quantità di file di configurazione per i dispositivi di controllo remoto supportati. Dall'elenco completo spostiamoci nella directory creative e recuperiamo il file di configurazione relativo al telecomando in nostro possesso (nel mio caso RM-900 ma al momento in cui scrivo ci sono anche file di configurazione per RM-1000 e RM-1500). Recuperate dunque il file con lo stesso nome del vostro telecomando e ponetelo come nuovo /etc/lircd.conf. E' possibile usare anche più di un dispositivo di controllo remoto, semplicemente concatenando i relativi file di configurazione in un unico lircd.conf.

Se non riuscissimo a recuperare un file di configurazione per il nostro telecomando, sarà necessario generarne uno. Questa operazione può essere effettuata con il programma irrecord (facente parte anch'esso del pacchetto LIRC), per maggiori informazioni è naturalmente disponibile la sua man page.

Posto di avere un /etc/lircd.conf che sembri fare al caso nostro, non ci resta che fare alcune prove e collaudare il tutto. Allo scopo prima di tutto dovremo lanciare il demone lircd, cosa che faremo passandogli opportuni parametri:

/usr/sbin/lircd -H livedrive_midi -d /dev/snd/midiC0D1

I parametri sono abbastanza autoesplicativi: il primo definisce il driver da usare (livedrive_midi) e il secondo definisce il device da cui lircd riceverà i segnali infrarossi. Ho potuto recuperare l'importante informazione circa il device da utilizzare grazie al contributo di un utente sulla pagina di alsa emu10k1.
Dopo aver lanciato il demone lircd, possiamo provare il corretto funzionamento del nostro telecomando grazie ad un comodo programma di test, irw. Questo programma non fa altro che stampare sullo standard output i dati ricevuti da un qualsiasi unix domain socket. Potremmo specificare esplicitamente il socket come parametro ma nel nostro caso lo avvieremo tranquillamente senza parametri, dato che il socket di default è ovviamente /dev/lircd.

Dunque lanciamo irw e impugniamo fiduciosi il telecomando, provando a premere qualche tasto. Se tutto è stato fatto correttamente, dovremmo vedere su schermo informazioni sul tasto che premiamo. Congratulazioni, avete un dispositivo infrarossi funzionante su Linux!


 Assegnare funzioni ai segnali

A questo punto, per illustrare come si possano associare le più disparate funzioni ai tasti del nostro telecomando, dobbiamo esaminare un altro file di configurazione ovverosia lircrc. Il suddetto file può essere collocato con influenza system-wide (/etc/lircrc) o collocato nella propria home (~/.lircrc) e quindi personalizzabile da ciascun utente. Il system-wide verrà letto nel caso in cui non sia disponibile quello per-user. La sintassi di lircrc è ampiamente descritta nell'apposita documentazione sul sito di LIRC. Alla suddetta vi rimando per i dettagli.
Vediamo invece come assegnare ai tasti del nostro telecomando l'esecuzione dei programmi; naturalmente questi ultimi dovranno essere avviati in qualche modo. Ad occuparsi di questo è irexec, un altro dei programmi disponibili nel pacchetto LIRC. Il programma irexec può essere avviato come demone (ossia in background) semplicemente passandogli l'opzione --daemon, questa possibilità tornerà utile nel caso in cui si voglia effettuare la sua esecuzione nell'ambito di un init script (un pò come per lircd). Al momento dell'avvio, irexec provvede a leggere il file di configurazione ~/.lircrc se questo è disponibile. Per maggiori informazioni, vi rimando alla man page del programma.
Prima di lanciare irexec, inseriamo le righe opportune in lircrc.

begin
  prog = irexec
  button = left
  config = gimp&
end
begin
  prog = irexec
  button = right
  config = abiword&
end
begin
  prog = irexec
  button = stop
  config = shutdown -h now &
end

Dopodichè lanciamo irexec in modo che possa leggere le nostre modifiche. Le righe appena visionate sono abbastanza autoesplicative. Il programma (prog) che gestirà l'evento è irexec; poi viene indicato con button il pulsante che fa scattare l'evento (i nomi dei pulsanti sono quelli specificati in lircd.conf); infine config contiene la stringa che verrà passata al programma indicato in prog. In questo caso i tre pulsanti left, right, stop del telecomando sono stati associati all'avvio di gimp, di abiword e allo spegnimento del sistema (posto che l'utente abbia i privilegi necessari per tale operazione). Vediamo adesso un esempio più complesso.

begin
  prog = irexec
  button = start
  config = xmms&
  mode = xmms
  flags = once
end

Per quanto abbiamo visto prima, siamo in grado di dire che irexec avvierà xmms con queste righe. La novità principale è rappresentata dal parametro mode. Il parametro mode ordina al programma di gestire i successivi segnali inviati dal telecomando in un contesto speciale (di solito nell'ambito di un programma che vogliamo gestire con controllo remoto, per esempio un lettore multimediale). Il parametro flags permette di specificare varie opzioni particolari. Per maggiori informazioni a riguardo, vi rimando alla documentazione ufficiale.
In termini molto semplici, la pressione del tasto start sul proprio telecomando fa sì che venga avviato il programma xmms e inoltre fa si che si passi nella modalità specificata (mode xmms), che ovviamente deve essere descritta in lircrc:

begin xmms
  begin
    prog = xmms
    button = play
    config = PLAY
  end
  begin
    prog = xmms
    button = slow
    config = PAUSE
  end
  begin
    prog = xmms
    button = start
    config = QUIT
    flags = mode
  end
end xmms

Come si può vedere, le direttive seguite successivamente all'entrata nella modalità xmms sono quelle di riproduzione (con il tasto play) o di pausa nella riproduzione (associata al tasto slow) e così via (nell'esempio ho inserito soltanto tre voci).
In particolare, si noti che è stato ridefinito il tasto start all'interno della modalità xmms. Trovandoci in questa modalità, la pressione del tasto start, anzichè avviare di nuovo xmms come indicato nella configurazione generale, manderà la stringa QUIT al programma xmms (terminandolo). Questo comporterà anche l'uscita dalla modalità xmms (grazie all'impostazione della flag mode) e quindi con la successiva pressione del tasto start sarà possibile avviare nuovamente di nuovo xmms. Semplice ed efficace.

Adesso sappiamo come eseguire programmi (o compiti di vario genere, come lo shutdown, il reboot o l'avvio di una connessione ad internet) tramite irexec, specificando le righe opportune in lircrc. In generale l'uso del parametro mode non è necessario, a meno di non voler poi dare funzioni diverse ai tasti già assegnati, nello specifico contesto di un programma (esattamente quel che abbiamo visto nell'esempio precedente).

Una domanda intelligente che ci si può porre a questo punto è: con quale criterio si scelgono le stringhe da mandare al programma xmms (PLAY, PAUSE, QUIT, ecc.) per poterlo controllare a distanza? Queste stringhe sono documentate? Xmms dispone sempre di queste stringhe?
La risposta è molto semplice: xmms non dispone di supporto infrarossi "nativo", ma è un plugin, xmms-lirc, a rendere possibile il suo controllo tramite le suddette stringhe. E queste sono documentate nel pacchetto di xmms-lirc. A titolo informativo, vi aggiungo che non è necessario avviare irexec per il controllo remoto di un programma con supporto LIRC (come xmms con xmms-lirc), una volta che questo programma sia già avviato. Diventa invece necessario irexec per lanciarlo tramite controllo remoto.
In generale, per poter controllare un programma, occorre che questo disponga di supporto (nativo o plugin) per la ricezione di stringhe di LIRC oppure che questo sia controllabile tramite un'interfaccia per comandi esterni (per esempio DCOP per i programmi di KDE), che sfrutteremo con irexec. Vedremo questo secondo caso all'inizio del prossimo capitolo.


 Controllo dei programmi e guida a IRKick

Supponiamo di avere un lettore multimediale foo di cui vogliamo controllare le funzioni. Il nostro lettore foo non dispone di supporto LIRC, però accetta per la singola istanza generiche istruzioni direttamente da riga di comando, del tipo foo --play oppure foo --stop. In questo caso, tramite irexec, siamo in grado di inviare i suddetti comandi (come se volessimo lanciare il programma) e pilotarlo in remoto, anche se il programma non dispone di supporto LIRC.

Le possibilità diventano molto più numerose per quei programmi che dispongono di interfacce accessibili all'esterno, come DCOP per i programmi di KDE. DCOP è un sistema di comunicazione tra processi; non approfondirò molto l'argomento, dato che esula dagli scopi di questa guida. Tuttavia anche senza conoscere a fondo DCOP, è possibile sfruttarlo per controllare esternamente le funzioni di un programma. Su GNOME l'analogo per la comunicazione tra processi dovrebbe essere CORBA/ORBit ma onestamente ho pochissima esperienza a riguardo.
Dunque, la stragrande maggioranza dei programmi di KDE dispone di comunicazione via DCOP. Prendiamo come esempio kmail, il programma di posta elettronica di KDE. Supponiamo di voler assegnare ad un tasto del nostro telecomando la funzione di controllo delle caselle di posta.
Per conoscere le funzioni cui possiamo accedere tramite DCOP, ci torna utile il programma KDCOP. Questo ci permette di navigare tra le funzioni disponibili nei programmi aperti. Quindi lanciamo kmail e in KDCOP potremo vedere tutte le operazioni accessibili esternamente. In particolare c'è kmail.KMailIface.checkMail(), che è proprio quella di controllo delle caselle di posta.
Da console, per effettuare questa operazione, scriveremmo:

dcop kmail KMailIface checkMail

Dunque, in lircrc, tutto ciò che dobbiamo fare è inserire una voce come questa:

begin
  prog = irexec
  button = down
  config = dcop kmail KMailIface checkMail &
end

Con lo stesso principio possiamo controllare praticamente tutti i programmi di KDE. Lanciarli con irexec ed eseguire azioni all'interno del programma usando sempre irexec per effettuare comandi dcop.

Il sistema che abbiamo visto dipende da irexec e, per quanto versatile e quasi sempre adottabile, non è il più comodo che KDE ci mette a disposizione. Su KDE infatti esiste un programma denominato IRKick, che in pratica fa quel che abbiamo imparato a fare con lircrc e irexec. Risultando però decisamente comodo. IRKick è il server LIRC di KDE, funziona in connubio con lircd e non necessita di lircrc e irexec.
Una volta avviato, la sua icona si posiziona nel tray di KDE. Cliccandoci, possiamo passare alla configurazione (molto semplice e intuitiva). In breve, nella finestra troviamo un elenco a sinistra dedicato ai dispositivi di controllo remoto in nostro possesso, che possiamo aggiungere e configurare con l'apposito tasto Add. Possiamo anche impostare modalità particolari, un pò come i mode che abbiamo visto per lircrc. Sulla destra troviamo l'elenco delle operazioni associate ai tasti, per ciascun controllo remoto (e per ciascuna modalità). Con la semplice pressione di Add potremo aggiungere una nuova associazione tasto-operazione. L'operazione potrà essere tanto l'avvio di un programma quanto il suo controllo remoto (play, pause, stop e quant'altro). In particolare il suo controllo remoto potrà avvenire sia in modo generico tramite DCOP (un pò come abbiamo già visto prima) che tramite opportune estensioni messe a disposizione dal programma (un pò come abbiamo visto per xmms-lirc).
Queste estensioni generalmente sono disponibili per i programmi legati alla multimedialità (dopotutto, sono quelli che solitamente ha più senso gestire con un telecomando). Per esempio kaffeine, amarok e noatun le possiedono. Ma anche lo stesso konqueror ne è provvisto. E' possibile visionare l'elenco dei programmi installati che dispongono di estensioni proprie attraverso la tab loaded extensions di IRKick.

irkick

Questa immagine di esempio mostra una configurazione di IRKick. Ai tasti del telecomando RM-900 è stato associato il controllo della riproduzione con amarok (tramite le estensioni che il programma mette a disposizione) e il controllo della posta con kmail (tramite DCOP).
Come ho già indicato in precedenza, è probabile che esista qualcosa di analogo per GNOME. In generale, le possibilità di configurazione e di utilizzo dei dispositivi infrarossi su Linux sono veramente tante, grazie all'ottimo LIRC e a tutti i programmi che lo accompagnano.


Questo HOWTO è stato realizzato da Giacomo Lozito, il maintainer di develia.org, con passione e pazienza.
Se qualcuno trovasse l'howto particolarmente utile (magari per un sito dedicato a infrared e wireless su Linux) è libero di pubblicarlo sul proprio sito, a patto però che lasci immutati qesti crediti (link a develia.org incluso) e che abbia la gentilezza di farmelo sapere via email.
Tutti i marchi, nomi di aziende e i prodotti indicati e/o raffigurati nell'howto (come il Creative live!drive e la sound blaster audigy) appartengono ai loro legittimi proprietari.