Repository 32bit  Forum
Repository 64bit  Wiki

Lirc il demone del telecomando: differenze tra le versioni

Da Slacky.eu.
(Automatizzare l'avvio del demone)
Riga 1: Riga 1:
[[Category:Periferiche]]
[[Category:Periferiche]]
 
WORK IN PROGRESS
 
== Introduzione ==
== Introduzione ==

Versione delle 11:30, 25 set 2006


Indice

Introduzione

Lirc è un servizio (demone) che consente di gestire un telecomando ad infrarossi come periferica di input di una linux box.

Questo può lavorare sia con telecomandi che dialogano con un'apposita scheda PCI o con i telecomandi integrati nelle schede tv.

Nel seguito farò riferimento a questo secondo caso ed in particolar modo alla scheda tv della KWorld (che possiedo).

Installazione

Prima di procedere alla compilazione dei binari occorre procedere con il setup dell'applicazione.

Questo avviene eseguendo semplicemente lo script ./setup.sh, contenuto nei sorgenti di lirc, da una shell:

ale@darkstar:~$ tar xvfz lirc.0.7.0.tar.gz
...
ale@darkstar:~$ cd lirc-0.7.0
ale@darkstar:~$ ./setup.sh

Seleziono il driver della scheda del telecomando (nel mio caso la scheda TV KWolrd) ed esco dal setup selezionando la voce Save Configuration & run configure.

Se dall'elenco non è disponibile la propria scheda le cose si complicano e quindi è conveniente fare riferimento alla documentazione ufficiale sul lirc presente nei sorgenti o sul sito.

Per completare l'installazione è sufficiente eseguire i consueti comandi make e make install, quest'ultimo da root:

ale@darkstar:~$ make
ale@darkstar:~$ su -c "make install" 

L'installazione provvederà a copiare tutti i moduli ed i binari nelle loro usuali destinazioni.

I device necessari saranno creati nella directory /dev.

Configurazione

Impostazione del device

Se si utilizza devfs o sysfs verrà creato il device /dev/lirc. Questo però scomparirà presto al riavvio della macchina. In questo caso sarà il modulo LIRC del kernel a generare /dev/lirc ad ogni avvio.

Purtroppo il nodo creato dal kernel, in questo caso, non sarà visisbile come /dev/lirc ma potrà essere posizionato in un punto diverso del filesystem /dev. Sarà importante verificare dove sia questo èunto per configurare correttamente il demone lirc.

Se si utilizza sysfs con gli udev risulta conveniente utilzzare il file lirc.rules, reperibile nella cartella contrib del pacchetto sorgente, copiandolo in /etc/udev/rules.d.

Il cuore del lirc è lircd, il LIRC System daemon, che si incarica di decodificare tutti i segnali ricevuti dal telecomando. Il pacchetto LIRC fornisce un secondo demone: lircmd. Esso dipende da lircd e si incarica di traslare le azioni effettuate sul telecomando in movimenti del mouse. Come tutti i demoni, lircd e lircmd possono essere avviati all'avvio del sistema.

Se li si vuole eseguire automaticamente all'avvio è sufficiente aggiungere uno script si init al proprio sistema. Sempre nella directory contrib sono disponibili alcuni script per le distribuzioni principali. Si ricordi di non compilare lirc con l'opzione disable demonize se lo si vuole usare come demone.

Procediamo allora impostando il caricamento del modulo lirc del kernel all'avvio del sistema. Per ottenere questo risultato accodiamo le seguenti riche al file /etc/rc.d/rc.modules:

root@darkstar:~# vi /etc/rc.d/rc.modules
...
#Moduli per il caricamento del demone lirc
/sbin/modprobe lirc_dev
/sbin/modprobe lirc_gpio

Ora occorre impostare correttamnete il modo in cui verrà attivato il device nel filesystem /dev. Di default il demone lircd cerca il device in /dev/lircd quindi imposteremo l'hotplug in modo da crearlo nel punto di default. Per fare ciò editiamo il file /etc/udev/rules.d/lirc.rules modificandolo come segue:

root@darkstar:~# vi /etc/udev/rules.d/lirc.rules
...
KERNEL="lirc0",         NAME="lirc"
KERNEL="lirc[1-9]*",    NAME="lircd/%n"

In questo modo diciamo al kernel di creare il device 0 di lirc come /dev/lirc e gli eventuali altri come /dev/lircd/lircX dove X è il numero del device. Ora dobbiamo specificarne i permessi accodando al file /etc/udev/permissions.d/lirc.permissions le seguenti righe:

root@darkstar:~# vi /etc/udev/permissions.d/lirc.permissions
...
lirc:root:root:666
lircd/*:root:root:666

Riavviando la macchina il device sarà creato correttamente.

Test di funzionamento

Per testare il corretto funzionamento del demone lircd si può provare ad avviarlo non in baclground in una shell ed usare l'applicazione irw in una seconda shell per testare il funzionamento del telecomando.

Shell 1:

/usr/local/sbin/lircd --nodaemon
lircd 0.7.0: lircd(kworld) ready
lircd 0.7.0: accepted new client on /dev/lircd
lircd 0.7.0: removed client

Shell 2:

irw
0000000061d67887 00 power kworld-878
0000000061d67887 01 power kworld-878
0000000061d67887 02 power kworld-878
0000000061d67887 03 power kworld-878
0000000061d67887 00 tv/mf kworld-878
0000000061d67887 01 tv/mf kworld-878
0000000061d67887 02 tv/mf kworld-878
0000000061d67887 03 tv/mf kworld-878

Se l'output che si ottiene è analogo a quello appena proposto il telecomando funziona correttamente.

Automatizzare l'avvio del demone

Per automatizzare l'esecuzione del demone alla'avvio della macchina si può introdurre il seguente script salvandolo come /etc/rc.d/rc.lirc:

#!/bin/sh

##########################################################################
# lirc: This is an init script for Slackware 10.2 distribution.
# Author: Alessandro Celli
# description: lirc is a Linux Infrared Remote Control system.
# Changelog:
# 31/12/2005 Script creation.
##########################################################################

# ---- MODIFICABILI ------------------------------------------
DAEMON_PATH="/usr/local/sbin"
COMMAND_PATH="/usr/local/bin"
PID_FILE="/var/run/lircd.pid"

#---- /MODIFICABILI ------------------------------------------
[ -f "$DAEMON_PATH/lircd" ] || exit 0
[ -f "$DAEMON_PATH/lircmd" ] || exit 0
PATH=/usr/local/sbin:/usr/local/bin:$PATH
# See how we were called.

case "$1" in
   start)
      if [ -e $PID_FILE ]
      then
         PID="`cat $PID_FILE`"
         echo -n "Linux Infrared Remote Control is already up as process $PID"
         exit 2
      else
         echo -n "Starting Linux Infrared Remote Control - "
         $DAEMON_PATH/lircd
         # Disattivo il demone del mouse
         # $DEAMON_PATH/lircmd
         echo "PID: `cat $PID_FILE`"
         exit 0
      fi
   ;;
   stop)
      echo -n "Shutting down Infrared Remote Control - "
      if [ -e $PID_FILE ]
      then
         PID="`cat $PID_FILE`"
         kill -9 $PID
         echo "Kill $PID done."
         exit 0
      else
         echo "lircd is not up"
         exit 1
      fi
   ;;
   status)
      if [ -e $PID_FILE ]
      then
         PID="`cat $PID_FILE`"
         echo "Linux Infrared Control is up as process $PID"
         exit 0
      else
         echo "Linux Infrared Control is down"
         exit 1
      fi
   ;;
   *)
      echo "Usage: lirc {start|stop|status}"
      exit 1
   ;;
esac
exit 0

Questo dovrà essere richiamato dallo script /etc/rc.d/rc.local:

...
if [ -x /etc/rc.d/rc.lirc]; then
   . /etc/rc.d/rc.lirc start
fi

Autore: Alessandro Celli

Strumenti personali
Namespace

Varianti