[Gulli] lirc - software
Alessandro Guarguaglini
ilguargua@tiscali.it
Dom 9 Ott 2005 20:00:58 CEST
Dopo aver visto cosa usare come hardware, passiamo ora al software, non prima
di colmare una una dimenticanza nella lista dei materiali per l'usbirboy :
1 basetta preforata
1 zoccolo a 20 pin per la cpu
(entrambi necessari)
PREREQUISITI E DIPENDENZE
I sorgenti li trovate ovviamente sul sito del progetto (http://www.lirc.org/),
ma vale la pena di controllare se per la vostra distribuzione esiste gia' il
pacchetto precompilato. In caso affermativo, se usate un ricevitore seriale o
di altro tipo direttamente supportato da lirc, non dovreste avere bisogno
d'altro. Negli altri casi (compreso l'usbirboy) vi servono i sorgenti del
kernel. *ATTENZIONE* a scegliere quelli giusti : devono essere quelli del
kernel che sta usando la vostra distribuzione. Un modo rapido per controllare
se sono gia' installati potrebbe essere questo (che ovviamente non garantisco
funzionare per ogni distribuzione in giro) :
ls -lL /lib/modules/`uname -r`| grep 'build'
l'output dovrebbe essere circa cosi' :
drwxr-xr-x 19 root root 1304 2005-05-04 21:20 build/
Se invece il comando non da nessun output, ci sono dei problemi.
I sorgenti devono inoltre essere configurati con le impostazioni del kernel
in uso. Controllate che nella directory dei sorgenti esista un file chiamato
.config :
ls -l /lib/modules/`uname -r`/build/.config
-rw-r--r-- 1 root root 37875 2005-05-04
21:19 /lib/modules/2.6.10/build/.config
Se invece la risposta e' :
/lib/modules/2.6.10/build/.config : No such file or directory
il kernel non e' configurato. Come procurarsi la configurazione del kernel
corrente e' argomento che ovviamente esula dalla mia competenza, provate
comunque a vedere se esiste il file /proc/config.gz :
ls -l /proc/config.gz
-r--r--r-- 1 root root 8959 2005-10-07 22:29 /proc/config.gz
Se siete cosi' fortunati, decomprimetelo e copiatelo al suo posto :
gunzip -c /proc/config.gz > /lib/modules/`uname -r`/build/.config
Se intendete compilare anche i tools per XWindow , xmode2 e irxevent,
caldamente
consigliati entrambi, vi serviranno anche i file header di X . Installate i
pacchetti X.Org-devel o XFree-devel , a seconda del sottosistema grafico usato
dalla vostra distribuzione.
Ovviamente do' per scontato che abbiate installato tutto il necessario per
compilare (gcc , binutils , etc) . Quasi tutte le distribuzioni includono una
voce a parte nella fase di installazione che installa tutto l'occorrente.
COMPILAZIONE/INSTALLAZIONE
Se decidete di compilare il pacchetto a partire dai sorgenti dovrete usare la
consueta prassi di configure - make - make install . Esiste anche uno scprit
(seput.sh) che aiuta nella scelta del driver appropriato all'hardware
impiegato, e che lancia il 'configure' con i parametri giusti. Altrimenti
lanciate :
./configure --help | less
per avere la lista dei driver disponibili. Esistono anche 2 speciali opzioni
'any' , che compila tutti i driver disponibili e 'none' che non ne compila
nessuno. E' ovviamente consigliabile la lettura della documentazione allegata
al pacchetto, anche perche' non sempre c'e' una chiara corrispondenza tra il
nome del driver e l'hardware impiegato. A titolo d'esempio, il ricevitore
seriale autocostruito usa il driver serial , irda su porta seriale (anche se
integrato) usa il sir , l'usbirboy non ne usa (il driver per la periferica e'
incluso nel pacchetto usbirboy). Potete anche specificare l'indirizzo IO e
l'IRQ della porta seriale che intendete usare, ma questi parametri si possono
anche indicare al caricamento del modulo.
Stabilito quali sono le vostre esigenze, lanciate configure con gli
appropriati parametri. Se il comando non genera errori, in genere dipendenze
mancanti, nel caso controllate quale siano e rimediate, potete lanciare make,
e se la compilazione va a buon fine make install. Se usate l'usbirboy
ricordatevi che dovete compilare anche l'apposito modulo per il kernel. I
sorgenti si trovano qui:
http://sourceforge.net/project/showfiles.php?group_id=102345 , scompattate
il pacchetto e posizionatevi nella directory usbirboykmod. Qui e' sufficente
lanciare make, e se tutto e' ok make install.
Controllate che i devices di lirc siano stati creati :
root@slack:~# ls -l /dev/lir*
crw-rw-rw- 1 root root 61, 0 2004-06-05 17:35 /dev/lirc
srw-rw-rw- 1 root root 0 2005-10-08 14:18 /dev/lircd=
prw-rw-rw- 1 root root 0 2004-06-05 17:35 /dev/lircm|
Per l'usbirboy create manualmente il device con :
mknod /dev/usbirboy c 180 240
n.b.: se usate devfs, oppure il piu' moderno udev probabilmente i device
avranno altri nomi, o nel caso dell'usbirboy non sara' nemmeno necessario
crearlo. Spiacente ma non ho mai usato nessuno dei 2, quindi non so esservi
di aiuto.
Se avete compilato un modulo che usa la porta seriale ( es. serial o sir)
prima di caricare il modulo di lirc dovrete rendergli disponibile la porta
seriale, altrimente occupata dal driver seriale di linux. Lanciate :
setserial /dev/ttySX uart none
sostituendo a X il numero della porta seriale (0 per la COM1, 1 per la 2,
etc).
Generalmente i moderni pc hanno una sola porta seriale, quindi va bene usare
0,ma la cosa cambia se usate ad esempio la porta irda integrata. Se non siete
sicuri di quale sia il numero della porta seriale, andate per tentativi :
lanciate setserial su una porta, provate a caricare il modulo, se il
caricamento non va a buon fine modprobe riporta l'errore :
root@slack:~# modprobe lirc_sir
FATAL: Error inserting lirc_sir (/lib/modules/2.6.10/misc/lirc_sir.ko):
Device or resource busy
Siamo a questo punto pronti per testare il tutto : caricate il modulo del
vostro ricevitore, passando eventulmente i parametri necessari, es. :
modprobe lirc_serial irq=4 io=0x3f8
modprobe usbirboy
Se non ci sono messaggi di errore proviamo la ricezione con mode2 :
root@slack:~# mode2 -d /dev/usbirboy
il parametro -d va usato solo se non si usa il device standard /dev/lirc.
Ora premendo un tasto sul telecomando l'output sara' simile a questo:
pulse 611
space 1395
pulse 605
space 426
pulse 607
space 1393
pulse 611
space 1395
pulse 605
space 1413
pulse 608
space 404
pulse 638
space 380
...
xmode2 mostra la stessa cosa ma in modalita' grafica, in pratica visualizza
il treno di onde quadre generato dal telecomando. Cambiando tasti, sarete in
grado di apprezzare visivamente come cambia il codice generato. Se l'onda
quadra vi pare troppo ravvicinata provate ad usare l'opzione -t 2 (o 1) da
linea di comando.
CONFIGURAZIONE SERVER
Il programma che si occupa della decodifica dei segnali del telecomando si
chiama lircd , che, come ci indica la 'd' finale del nome, e' un daemon, cioe'
un programma che gira in sottofondo, e che non prevede iterazioni con
l'utente.
lircd legge dal device del ricevitore il segnale del telecomando, lo confronta
con quelli archiviati nel file di configurazione e se trova una corrispondenza
scrive sul suo device di output (/dev/lircd , una 'unix socket') il nome del
telecomando e del tasto premuto, cosi' da fornire un'interfaccia semplice ed
uniforme ai vari client che vi si connettono. I client hanno a loro volta un
file di configurazione, che associa ad ogni tasto un comando.
Per prima cosa bisogna ovviamente procedere alla configurazione di lircd. Nel
pacchetto troviamo gia' un considerevole numero di files di configurazione
adatti ad alcuni telecomandi, perlopiu' quelli delle schede video/tv che ne
hanno uno. Altri files si trovano on-line (http://www.lirc.org/remotes) e
coprono una piu' vasta area di telecomandi.
Se non riuscite a reperire un file gia' pronto, ne dovrete creare uno nuovo.
L'operazione in se non e' molto difficile, ma richiede un po' di pazienza.
Talvolta, a secondo del tipo di telecomando, e' necessario effettuare piu'
tentativi prima di riuscire a trovare la configurazione ottimale, l'essenziale
e' non scoraggiarsi subito. Il programma per creare il files di configurazione
si chiama 'irrecord' e va lanciato indicando il device da cui leggere ( se
diverso da /dev/lirc) e il nome del file da creare , es :
irrecord -d /dev/usbirboy myremote.conf
una schermata introduttiva sottilinea l'importanza di questo file per il
sistema lirc, e ci invita in caso di successo nella creazione a condividere
il files con altri. Premendo enter si viene edotti su come funzionera' la fase
di riconoscimento dei codici del nostro telecomando : e' necessario premere
di continuo pulsanti diversi del telecomando, uno alla volta finche' lo sullo
schermo non si siano completate le 2 linee di 80 punti. Premiamo di nuovo
enter per iniziare la registrazione vera e propria :
Press RETURN now to start recording.
................................................................................
Found const length: 113536
Please keep on pressing buttons like described above.
................................................................................
RC-5 remote control found.
Found possible header: 976 797
Found hidden lead pulse: 974
No repeat code found.
Signals are biphase encoded.
Removed header.
Signal length is 13
Now enter the names for the buttons.
In questo caso irrecord ha riconosciuto il tipo di modulazione usato dal
telecomando, cioe' come associare ad ogni treno di onde quadre generato un
numero. Adesso inizia la fase di riconoscimento di ogni tasto :
Please enter the name for the next button (press <ENTER> to finish recording)
power
Now hold down button "power".
Please enter the name for the next button (press <ENTER> to finish recording)
1
Now hold down button "1".
[...]
Terminato di immettere tutti i tasti, premiamo enter senza scrivere nulla. Per
terminare la creazione del file ci e' richiesto di premere ripetutamente un
pulsante (sempre il solito) piu' velocemente possibile ma senza tenerlo sempre
premuto :
Checking for toggle bit.
Please press an arbitrary button repeatedly as fast as possible (don't hold
it down!).
..............................
Toggle bit is 2.
Successfully written config file.
Controlliamo il file appena creato :
root@slack:~# cat myremote.conf
# Please make this file available to others
# by sending it to <lirc@bartelmus.de>
#
# this config file was automatically generated
# using lirc-0.7.1(serial) on Sun Oct 9 15:35:21 2005
#
# contributed by
#
# brand: myremote.conf
# model no. of remote control:
# devices being controlled by this remote:
#
begin remote
name myremote.conf
bits 5
flags RC5|CONST_LENGTH
eps 30
aeps 100
one 953 819
zero 953 819
plead 976
pre_data_bits 8
pre_data 0x80
gap 113536
toggle_bit 2
begin codes
power 0x0C
1 0x01
2 0x02
3 0x03
4 0x04
end codes
end remote
Proviamo adesso se il tutto funziona con lircd :
root@slack:~# lircd -d /dev/usbirboy myremote.conf
root@slack:~# irw
0000000000001002 00 2 myremote.conf
0000000000001001 00 1 myremote.conf
000000000000100c 00 power myremote.conf
000000000000100c 01 power myremote.conf
0000000000001003 00 3 myremote.conf
0000000000001002 00 2 myremote.conf
0000000000001001 00 1 myremote.conf
0000000000001001 01 1 myremote.conf
0000000000001001 02 1 myremote.conf
0000000000001001 03 1 myremote.conf
0000000000001001 04 1 myremote.conf
0000000000001001 05 1 myremote.conf
irw ci mostra l'output dei tasti riconosciuti da lircd. Per ognuno ci viene
mostrato il codice esadecimale, il numero di ripetizioni, il nome assegnato al
tasto ed il nome del telecomado.
E' possibile anche usare piu' telecomdi contemporaneamente, per ognuno dovra'
essere creato un file di configurazione come sopra che poi dovranno essere
uniti in un unico file, es. con il comando 'cat':
cat myremote1.conf myremote2.conf > lircd.conf
CONFIGURAZIONE CLIENTS
I clients sono quei programmi che connettendosi a lircd associano tramite un
file di configurazione i singoli tasti di ogni telecomando ad una determinata
azione. Alcuni sono inclusi nel pacchetto di lirc e consentono di controllare
in modo arbitrario praticamente qualsiasi applicazione, e diversi programmi
per il multimedia ( es. mplayer, xmms, xine, etc) includono la possibilita' di
usare lirc direttamente. Per tutti il file di configurazione di default e'
~/.lircrc . Il formato del file e' questo :
begin
prog = ...
remote = ...
button = ...
repeat = ...
delay = ...
config = ...
mode = ...
flags = ...
end
ripetuto per ogni combinazione tasto/azione.
'prog' e' il programma interessato da questo tasto; in ogni istante possono
esserci piu' programmi in ascolto sulla socket di lircd , ma ogni programma
reagira' solo ai suoi tasti.
'remote' e' il nome del telecomando, come indicato nel file .conf di lircd.
'button' e' il nome assegnato al pulsante del telecomando
'config' e' la stringa che viene passata a 'prog' , che rappresenta quindi
l'azione che verra' intrapresa.
'repeat' indica quante volte deve essere ripetuto il tasto prima che sia
intrapresa l'azione.
Come spesso accade, un'occhiata ai files di esempio (che trovate nella
directory contrib/ del pacchetto) vi chiarira' le idee piu' di ogni altra
spiegazione. I programmi che vi saranno senz'altro piu' utili sono irexec e
irxevent. Sono entrambi daemon (quindi ricordatevi che devono essere in
esecuzione quando intendete usarli), il primo avvia l'applicazione indicata
in 'config' , il secondo invia invece ad un'applicazione attiva sotto X window
l'evento indicati in 'config', che puo' essere un tasto, un click del mouse,
etc.
begin
prog = irexec
remote = myremote.conf
button = power
config = xawtv &
mode = xawtv
flags = once
end
questo ad esempio avviera' xawtv alla pressione del tasto 'power' del
telecomando che avevamo configurato sopra. Ovviamente possiamo lanciare ogni
programma possibile, incluso /sbin/shutdown per spengere il pc , o
lanciare/interrompere la connessione ad internet, tanto per fare qualche
esempio.
begin
prog = irxevent
button = 0
config = Key f xawtv
end
questo invece alla pressione del tasto '0' inviera' il tasto 'f' a xawtv (che
serve per vedere la tv fullscreen).
begin
prog = xmms
remote = SONY
button = PLAY
config = PLAY
end
questa entry e' usata direttamente da xmms (ricordatevi di abilitare il
relativo plugin !)
Se usate prevalentemente l'ambiente grafico KDE ed i suoi applicativi, provate
ad usare irkick , il server lirc di kde. Trattandosi di una applicazione
grafica l'uso e la configurazione dovrebbero essere abbastanza intuitivi.
Altro caso di client che usa un diverso file di configurazione e' lircmd ,
ovvero il mouse daemon, che consente di simulare un mouse tramite il
telecomando.
Il mouse viene simulato tramite il device /dev/lircm , occorre quindi
reindirizzare gli applicativi (es. l'Xserver o gpm) sul quel device tramite i
loro file di configurazione. I protocolli supportati sono MouseSystem, IMPS2 e
Intellimouse. L'ultimo e' preferibile perche' consente l'emulazione dei mouse
con la rotella di scroll. Il file di configurazione di default si trova in
/etc/lircmd.conf , e serve ad indicare in maniera abbastanza intuitiva la
corrispondenza tra tasti del telecomando e movimenti del mouse. Anche qui
un'occhiata agli esempi in dotazione vi dara' senz'altro una mano.
MESSA A PUNTO FINALE
A questo punto, dopo aver visto che tutto funziona come volevamo, pensiamo
agli ultimi dettagli. Perche' il tutto sia funzionante all'avvio del
computer, dovremo lanciare lircd e gli altri eventuali daemon insieme agli
altri script di avvio. Le modalita' cambiano (e molto) da distribuzione a
distribuzione, provate a vedere gli esempio di script d'avvio che trovate
nella directory contrib/ del pacchetto e scegliete quello piu' adatto alla
vostra distro. Se avete installato i pacchetti binari probabilmente non vi
servira' fare altro.
Se usate il driver seriale ricordate il discorso fatto sopra con setserial ,
che dovra ovviamente essere fatto prima di avviare lircd.
Prestate attenzione al fatto che a parte lircd che legge di default la sua
configurazione da /etc/lircd.conf per gli altri daemon la scelta di default
e' $HOME/.lircrc , e che quindi al momento del boot non saranno in grado di
trovarlo. Indicate quindi sempre sulla linea di comando la locazione giusta
del file (es. /home/utente/.lircrc).
Per far si che il giusto modulo del driver venga caricato automaticamente
dobbiamo aggiungere questa riga al file /etc/modprobe.conf :
alias char-major-61 lirc_*driver*
dove *driver* puo' essere sir , serial o quello che usiamo. Al driver seriale
possono anche essere passati parametri, es. :
options lirc_sir irq=4 io=0x3f8 threshold=5
Il modulo dell'usbirboy si dovrebbe caricare da solo, al momento che si
inserisce il dispositivo nella presa USB.
Bene, ora non vi resta altro che godervi Linux con il vostro telecomado
preferito.
Maggiori informazioni sulla lista
Gulli