Linux als SOHO-Server

für Linux- und Windows-Clients
http://linux.eusterholz.dyndns.org

Kapitel:

Home
Debian Installation
Debian Etc.
Internet-Zugang
Telnet
FTP
r-Utilities
SSH
Printing
NTP
Nameserver
NFS/NIS/Automount
Samba (SMB-Server)
Apache (WEB-Server)
Modem / ISDN
Backup
Etc.


LIRC

Wake-On-LAN ] Power Off ] XDMCP-Zugang ] VNC ] Sun-Java ] Ajaxterm ] Scann-Server ] webCDwriter ] Relaiskarte (parallel) ] Relaiskarte (seriell) ] UPS ] [ LIRC ] Clonezilla ] Subversion ] SMS unter Linux ]


Gerade heutzutage in der multimedialen Zeit, wo es auch unter Linux genügende Applikationen hierfür gibt, ist es vielleicht interessant mit einer Fernbedienung einen Linux-Rechner zu steuern. Auf der vorliegenden Seite wird gezeigt wie mit einer handelsüblichen Infrarot-Fernbedienung, z.B. die vom Fernseher, ein Linux-Systems gesteuert werden kann. Dabei kommt das Projekt 'LIRC'  (Linux Infrared Remote Control) zum Einsatz. 'LIRC' umfasst einen kompletten Satz von Programmen/Tools, inklusiv der Treiber um Infrarot-Signale empfangen und senden zu können. Auf der vorliegenden Seite wird nur auf das Empfangen und Auswerten von IR-Signalen eingegangen.

LIRC-Hardware

Als Hardware (Empfänger/Sender) werden von 'LIRC' verschiedene Typen (Hersteller), mit unterschiedlichen Schnittstellen unterstützt. Eine Liste von fertigen IR-Geräten ist auf der Homepage von 'LIRC' zu finden. Auch ist auf der 'LIRC'-Homepage die Rede von 'home-brew-hardware', dabei handelt es sich um Hardware, die selbst aufgebaut (zusammen gelötet) wurde. Entsprechende Vorschläge sind ebenfalls auf der Homepage zu finden.

Es ist relativ einfach, selber einen passenden Empfänger mit ein paar Bauteilen zu bauen. Hier ein Beispiel:

  

Auf dem linken Bild ist die Schaltung eines IR-Empfängers abgebildet. Primäres Bauteil ist der Empfänger (IC1) selbst (TSOP 1738, von der Fa.: 'Vishay' ), der von Haus aus ein serielles Signal liefert. Der Empfänger muss noch für die serielle Schnittstelle des PCs adaptiert werden. Die Adaption besteht dabei nur aus einen Spannungsregler (IC2), einer Diode (D1), einen Kondensator (C1) und einen Widerstand (R1).
Mit etwas Geschick lassen sich die Bauteile für IR-Empfänger problemlos in einem seriellen Stecker einbauen (rechtes Bild).

Installation von LIRC

Für 'LIRC' sind unter Debian mittels 'apt-get install' folgende Pakete zu installieren: 'lirc', 'lirc-modules-source' und falls eine 'X'-Oberfläche vorhanden ist kann auch 'x-lirc' installiert werden. Der schwierigste Teil bei der Installation von 'LIRC' ist das Erzeugen der relevanten Kernel-Module für den IR-Empfänger, die aus den 'lirc-modules-source' erstellt werden. Zur Erstellung der Module sollten auch die passenden Kernel-Quellen installiert sein.

Bei der Installation vom Pakets 'lirc' sind einige Fragen zu beantworten, hier der Dialog am Beispiel des oben aufgeführten IR-Empfängers, angeschlossen an der ersten seriellen Schnittstelle:

  • Sollen die 'LIRC'-Gerätedateien wenn nicht vorhanden erstellt werden: <Ja>
  • Please select a driver, that supports your hardware:                             <1 Home-brew (16x50 UART compartible serial port>
  • Choose a COM-port:                                                                          <1 COM1 (0x3f8, 4)>
  • Driver specific Options:                                                                        <2 Software generated carrier>

Der Dialog kann auch nach der Installation mit 'dpkg-reconfigure lirc' erneut durchlaufen werden.

Bei der Installation von 'lirc-modules-source' müssen via Dialog weitere Fragen beantwortet werden:

  • Should I try to automagically select support for your hardware?            <Nein>
  • Select a drivers to build:                                                                       <serial>
  • Danach wird kurz erklärt, was zu tun ist um die Kernel-Module zu generieren:
  • Should I try to automatically build the modules?                                     <Nein>

Auch der Dialog  für die Kernel-Module kann später mit: 'dpkg-reconfigure lirc-modules-source' erneut durchlaufen werden.

Nun kann, wie oben im Screenshoot beschrieben, versucht werden die Kernel-Module zu generieren:

cd /usr/src/
tar -xzf lirc-modules.tar.gz
cd modules/lirc
debian/rules binary-modules KSRC=/usr/src/kernel-source-2.6.8
cd /usr/src/
dpkg -i lirc-modules-2.6.8-686_0.7.1pre2-2+Custom.1.00_i386.deb

Nach der Generierung sollten ein fertiges Debian-Paket im Verzeichnis '/usr/src/' vorliegen, welches mit 'dpkg -i ...' installiert werden kann.

Danach kann händisch versucht werden die Kernel-Module zu laden:

modprobe lirc_dev
modprobe lirc_serial

Sollte das Laden des 'lirc_serial' scheitern, z.B. mit der Meldung: 'Device or resource busy', liegt das daran, dass die Unterstützung für die serielle Schnittstelle fest in den Kernel reinkompiliert wurde und aktiviert ist. In diesem Fall hilft ein:

setserial /dev/ttyS0 uart none

Beim Aufruf von 'setserial' ist das 'Device' entsprechen der Schnittstelle anzugeben. Soll der serielle Treiber bei jeden Systemstart deaktiviert bleiben, so kann dieses mit 'dpkg-reconfigure setserial' festgelegt werden, im folgenden Dialog ist dann der Punkt 'manual' anzuwählen. Weiterhin ist in der Datei: '/var/lib/setserial/autoserial.conf' dieses für die relevante Schnittstelle einzutragen bzw. abzuändern:

/var/lib/setserial/autoserial.conf

#
###AUTOSAVE###
#
###AUTOSAVE-ONCE###
###AUTOSAVE###
#
# If you want to configure this file by hand, use
# dpkg --configure setserial
# and change the configuration mode of the file to MANUAL. If you do not do this# this file may be overwritten automa
# package.
#
#/dev/ttyS0 uart 16550A port 0x03f8 irq 4 baud_base 115200 spd_normal skip_test
/dev/ttyS0 uart none

Damit bei jeden Systemstart die 'LIRC'-Module automatisch mitgeladen werden, ist nachzuprüfen ob dieses in der Datei: '/etc/lirc.hardware.conf' eingetragen ist:

/etc/lirc/hardware.conf

# /etc/lirc/hardware.conf
#
# Arguments which will be used when launching lircd
LIRCD_ARGS=""

#Don't start lircmd even if there seems to be a good config file
#START_LIRCMD=false

#Try to load appropriate kernel modules
LOAD_MODULES=true

# Run "lircd --driver=help" for a list of supported drivers.
DRIVER="default"
# If DEVICE is set to /dev/lirc and devfs is in use /dev/lirc/0 will be
# automatically used instead
DEVICE="/dev/lirc"
MODULES="lirc_dev lirc_serial"

# Default configuration files for your hardware if any
LIRCD_CONF=""
LIRCMD_CONF=""

Es sollte 'LOAD_Modules=true' eingestellt sein (gelbe Markierung). Unter 'MODULE=' sind die benötigten Module für den jeweiligen IR-Empfänger aufzuführen. Die Datei wird beim Start von '/etc/init.d/lirc' ausgewertet. Änderungen in der Datei 'hardware.conf' können auch mit: 'dpkg-reconfigure lirc' erfolgen.

Ein erster Test, ob der Empfänger arbeitet und ob die Konfiguration stimmt, kann mit dem zu 'LIRC' gehörenden Tool 'mode2' erfolgen. Das Tool 'mode2'  zeigt die Impuls-/Pausen-Länge des Infrarot-Signals an, hierzu eine Beispielausgabe:

debian:~# mode2
space 11620655
pulse 948
space 851
...

Alternativ kann, falls man sich auf einen X-Windows-System befindet, 'xmode2' zur Überprüfung genutzt werden. 'xmode2' stellt die Impuls-/Pausen-Länge des IR-Signals von der Fernbedienung in einen separaten Fenster in graphischer Form da.

Konfiguration des LIRC-Dämons

Nachdem sichergestellt ist, das die Treiber korrekt installiert sind und arbeiten, kann als nächstes eine 'LIRC'-Konfigurationsdatei 'lircd.conf' passend zur Fernbedienung im Verzeichnis '/etc/lirc/' hinterlegt werden. Dabei kann zunächst geprüft werden, ob es für die Fernbedienung schon eine fertige Konfigurationsdatei gibt, falls dieses zutrifft, kann diese unter den Namen '/etc/lirc/lircd.conf' hinterlegt werden. Soll eine unbekannte Fernbedienung bekannt gemacht werden, so kann diese mit dem Lernprogramm 'irrecord' geschehen. 'irrecord' ist auf der Konsole aufzurufen, als Parameter ist der Name der Datei mitzugeben, in der die Konfiguration gesichert werden soll, z.B.:

irrecord ~/my_remote-control.conf

Nach dem Start fordert das Programm auf, Tasten auf der Fernbedienung zu betätigen. Wenn das klappt, startet der Lernmodus, in dem jeder Taste einen Namen zugeordnet wird und dieser anschließend mit der Fernbedienung bestätigt werden muss um so die Zuordnung zu bekommen. Zum Abschluss müssen noch einige Tasten schnell betätigen werden, damit sich 'LIRC' auf die Wiederholrate der Fernbedienung einstellen kann. Hier ein Beispiel einer solchen aufgezeichneten Konfigurationsdatei:

~/my_remote-control.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.1pre2(any) on Mon Jan 15 17:01:04 2007
#
# contributed by
#
# brand: /root/my_remote-control.conf
# model no. of remote control:
# devices being controlled by this remote:
#

begin remote

  name /root/my_remote-control.conf
  bits           3
  flags SPACE_ENC|CONST_LENGTH
  eps           30
  aeps         100

  one           39  7541
  zero          39  5014
  ptrail        39
  pre_data_bits  8
  pre_data      0xBA
  gap         121283
  toggle_bit     2


      begin codes
          red                       0x1
          green                     0x2
          yellow                    0x3
          blue                      0x4
      end codes

end remote

In der abgebildeten Konfigurationsdatei sind nur vier Buttons berücksichtigt, siehe gelbe Markierung ('red', 'green', 'yellow' und 'blue').

Nach Abschluss der Lernphase ist die erstellte Datei unter den Namen 'lircd.conf' in das Verzeichnis '/etc/lirc/' zu kopieren:

cp ~/my_remote-control.conf /etc/lirc/lircd.conf

Anschließend ist der 'LIRC'-Dämon erneut zu starten:

/etc/init.d/lirc restart

Mit dem zum 'LIRC' gehörenden Programm 'irw' kann die Funktionalität der Erkennung nachgewiesen werden. Wenn alles gut geht, dann schreibt 'irw' bei jedem Tastendruck auf die IR-Fernbedienung den dazugehörigen Code raus, der bei der Taste mit 'irrecord' zugewiesen wurde. Hierzu eine Beispielausgabe:

debian:~# irw
00000000000005d1 00 red /root/my_remote-control.conf
00000000000005d1 01 red /root/my_remote-control.conf
00000000000005d2 00 green /root/my_remote-control.conf
00000000000005d3 00 yellow /root/my_remote-control.conf
00000000000005d3 01 yellow /root/my_remote-control.conf
00000000000005d4 00 blue /root/my_remote-control.conf
...

Anwendungsorientierte Konfiguration

Um mit dem IR-Empfänger inklusiver Kernel-Module auch Anwendungen steuern zu können, muss weiter konfiguriert werden. Dabei kann man grob zwischen zwei Arten der Applikations-Steuerung unterscheiden. Zum einen kann mittels eines bestimmter Tasten Ereignisse eine bestimmte Aktion direkt ausgelöst werden ('lircrc'). Weiterhin kann auch, sofern eine X-Oberfläche vorhanden ist, die Maus-Funktionalität nachgebildet werden ('lircmd'). Im folgenden werden kurz beide Arten vorgestellt.

lircrc

Um mit der Fernbedienung auf Tastendruck Applikationen steuern zu können ist eine Konfigurationsdatei 'lircrc' zu erstellen. Die Konfigurationsdatei 'lircrc' kann als benutzergültige Datei im 'home'-Verzeichnis ('~/.lircrc') oder als systemweite Konfigurationsdatei unter '/etc/lirc/lircrc') erstellt werden. Falls keine '~/.lircrc' vorhanden ist, wird die systemweite Konfigurationsdatei benutzt. Die Konfiguration innerhalb der Datei ist relativ einfach und leicht zu durchschauen, da es nur wenige Schlüsselworte gibt. Hier ein triviales Beispiel zu Konfiguration:

/etc/lirc/lircrc bzw. ~/.lircrc

begin
        button = red
        prog = irexec
        config = echo "Hello world!"
end

begin
        button = green
        prog = irexec
        config = firefox &
end

begin
        button = yellow
        prog = irxevent
        config = Key F11 CurrentWindow
end

begin
        button = blue
        prog = irexec
        config = killall firefox-bin
end

Aufgabe der Konfigurationsdatei ist es, bei einem Tastendruck auf der Fernbedienung, unter Hinzunahme eines Programms, eine bestimmet Aktion auszuführen. Dabei ist jeder Taste ein eigener Block zuzuordnen.
Im ersten Block, wenn die Taste 'red' betätigt wird, soll mittels des Programms 'irexec' ein 'Hello wordl!' ausgegeben werden. Im zweiten Block soll mit der Taste 'green', der Browser 'firefox' gestartet werden. Im dritten Block kann mit der Taste 'yellow' und dem Programm 'irxevent', die Funktionstaste 'F11' nachgebildet werden, welches beim Firefox-Browser den Vollbild-Mode entspricht. Mit der Taste 'blue' wird der Browser wieder beendet.
In diesem Beispiel werden zur Steuerung die zu 'LIRC' gehörende Hilfsprogramme 'irexec' und 'irxevent' genutzt. Grob erklärt wird mit 'irexex' ein Kommando abgegeben und mit 'irxevent' das Betätigen einer Taste (oder Hot-Key) simuliert. Die genauen Tasten-Name bei 'irxevent' für komplexeren Tasten wie z.B.: 'F11' oder 'Strg-C' kann in der Datei '/usr/share/doc/lirc/irxevent.keys' nachgeschlagen werden.

Nach Abspeichern der 'lircrc'-Datei sollten die benutzten Programme 'irexec' und 'irxevent' am besten im Hintergrund laufen, dazu kann folgendes eingegeben werden:

/usr/bin/irexec &
/usr/bin/irxevent &

Sofern 'irxevent' genutzt wird, muss noch das Paket 'lirc-x' auf dem System installiert sein.

Weitere detaillierte Informationen bezüglich 'lircrc', 'irexec' und 'irxevent' können in der Dokumentation oder den Manualseiten nachgelesen werden.

lircmd

Einen anderen Ansatz als Kommandos auszuführen oder Tasten auf der Tastatur zu simulieren verfolgt 'lircmd' ('LIRC'-Mouse-Daemon). Das Programm bietet die Möglichkeit die Bewegungen oder Tasten der Maus zu emulieren. Auch der Maus-Dämon benötigt eine Konfigurationsdatei, die im Verzeichnis '/etc/lirc/' als Datei 'lircmd.conf' vorliegen sollte. Auch die Konfiguration von 'lircmd.conf' ist recht simpel, hierzu wieder ein Beispiel:

/etc/lirc/lircmd.conf

#
# lircmd config file
#

# protocol to use
PROTOCOL IMPS/2

# ACCELERATOR start max multiplier
ACCELERATOR 1 30 1

MOVE_N        * mouse-up
MOVE_NE       * mouse-up_right
MOVE_E        * mouse-right
MOVE_SE       * mouse-down_right
MOVE_S        * mouse-down
MOVE_SW       * mouse-down_left
MOVE_W        * mouse-left
MOVE_NW       * mouse-up_left

BUTTON1_CLICK * mouse-button_left
BUTTON3_CLICK * mouse-button_right

Zunächst ist der Maus-Typ mit 'PROTOCOL' festzulegen, mögliche Werte sind hier: 'MouseSystems', 'IntelliMouse' und 'IMPS/2'.
Mit 'ACCELERATOR' werden die Beschleunigungswerte festgelegt.
Im nächsten Block sind die Bewegungsrichtungen (entsprechend der Himmelsrichtungen) der Maus mit 'MOVE...' ('N'=Nord, 'E'=Ost, 'S'=Süd und 'W'=West) zu definieren, auch können die Zwischenrichtungen definiert werden. Hinter der Richtung kann die Fernbedienung benannt werde ('*' = alle) und danach die entsprechende Taste auf der Fernbedienung, der Name der Taste welcher in der 'lircd.conf' festgelegt wurde.
Für die Tasten auf der Maus, Schlüsselwort 'BUTTON...', gilt das gleiche wie für die Bewegungsrichtungen.

Weiterhin ist noch die 'X11'-Konfigurationsdatei zu erweitern. Für einen 'X11'-Server der Version '4.x', hier unkommentiert die notwendigen Änderungen:

Auszug aus /etc/X11/xorg.conf

...

Section "ServerLayout"
        ...
        InputDevice "LIRC-Mouse"
        ...
EndSection

...

Section "InputDevice"
        Identifier "LIRC-Mouse"
        Driver "mouse"
        Option "Device" "/dev/lircm"
        Option "Protocol" "IMPS/2"
        Option "SendCoreEvents"
        Option "Buttons" "5"
        Option "ZAxisMapping" "4 5"
EndSection

...#

In der Sektion 'ServerLayout' ist eine Zeile für das 'inputDevice "LIRC-Mouse"' einzufügen und es ist dann eine neue Sektion 'InputDevice' zu erstellen. Wichtig vor allem ist, die Angabe des korrekten Maus-Treibers.

Damit nun alles funktioniert muss der 'X11'-Server neu gestartet werden, z.B. durch 'restart' des Systems.

Auch ist dafür Sorge zu tragen, dass der Mouse-Dämon läuft, z.B. durch:

/usr/sbin/lircmd /etc/lirc/lircmd.conf &

kann dieser im Hintergrund auf der Kommandozeile gestartet werden. Danach sollte sich der Mauszeiger unter 'X11' mit der Fernbedienung steuern lassen.

Anmerkungen

Auch das Senden von IR-Signalen ist mit 'LIRC' und entsprechender Hardware möglich, eine Beschreibung hierzu ist auf der Homepage von 'LIRC' zu finden.

Weiterhin kann auch das Maus-Interface für die Konsole 'gpm', mittels 'LIRC' gesteuert werden, auch hier ist die Vorgehensweise auf der Homepage beschrieben.

Zu beachten ist auch, dass bei jedem Kernel-Update die 'LIRC'-Module neu generiert werden müssen.

Sollte sich 'irrecord' mit der Meldung: 'Something went wrong' beschweren und keine Konfigurationsdatei generieren, so kann noch als zusätzlichen Parameter '--force' beim Aufruf mit angeben werden um ein Konfigurationsdatei im 'RAWMODE' zu erhalten.

Weitere Infos

Homepage: LIRC www.lirc.org
Homepage: The Infrared Data Association http://www.irda.org/
Liste der von LIRC unterstützten Geräte http://www.lirc.org/html/table.html
Liste der von LIRC unterstützten IR-Fernbedienungen http://lirc.sourceforge.net/remotes/
Alles über Infrarotports, IrDA und Infrarot http://www.infrarotport.de/index.html

Home ] Nach oben ] Wake-On-LAN ] Power Off ] XDMCP-Zugang ] VNC ] Sun-Java ] Ajaxterm ] Scann-Server ] webCDwriter ] Relaiskarte (parallel) ] Relaiskarte (seriell) ] UPS ] [ LIRC ] Clonezilla ] Subversion ] SMS unter Linux ]

letzte Änderung: 01. Januar 2014

 

Copyright © 2004 Norbert Eusterholz