Tasten mit Funktionen belegen
Archivierte Anleitung
Dieser Artikel wurde archiviert. Das bedeutet, dass er nicht mehr auf Richtigkeit überprüft oder anderweitig gepflegt wird. Der Inhalt wurde für keine aktuell unterstützte Ubuntu-Version getestet. Wenn du Gründe für eine Wiederherstellung siehst, melde dich bitte in der Diskussion zum Artikel. Bis dahin bleibt die Seite für weitere Änderungen gesperrt.
Artikel für fortgeschrittene Anwender
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Den Tasten auf der Fernbedienung müssen die gewünschten Funktionen zugeordnet werden. Der LIRC-Daemon (lircd) dekodiert zwar die gesendeten Signale, ist aber selbst nicht in der Lage, Befehle auszuführen. Dafür bringt das lirc-Paket ein eigenes Programm mit - irexec. Andere nützliche Programme 🇬🇧 sind u.a. irxevent und xte, die im Folgenden vorgestellt werden. Gemeinsam haben diese Programme, dass sie eine .lircrc-Datei benötigen. Empfehlenswert ist es, die letztlich genutzten Programme im Autostart[4] einzutragen.
Voraussetzung ist natürlich eine funktionsfähige LIRC-Installation; ggf. muss das Paket
liblircclient0 (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install liblircclient0
Oder mit apturl installieren, Link: apt://liblircclient0
installiert sein [1], um bestimmte Programme mit LIRC-Support steuern zu können.
.lircrc¶
.lircrc ist die LIRC-Datei, in der die Anweisungen gespeichert werden, mit denen über die Tasten der Fernbedienung Programme gesteuert und Befehle ausgeführt werden. Prinzipiell sind alle Befehle, die auch in einem Terminal ausgeführt werden können, über LIRC und .lircrc "ferngesteuert" ausführbar.
.lircrc ist standardmäßig als versteckte Datei im Homeverzeichnis des Benutzers abgelegt (dort wird bei Ausführung von LIRC zunächst danach gesucht); damit sie von allen Benutzern verwendete werden kann, muss sie mit Root-Rechten als /etc/lircrc, ggf. auch als /etc/lirc/lircrc, abgelegt werden. Zum Steuern der Programme lassen sich verschiedene Wege wählen, hauptsächlich diese:
irexec ist ein LIRC-Programm, das Befehle ausführen kann;
liblirc_client ist eine Bibliothek, auf die Programme mit "integrierter" LIRC-Unterstützung zurückgreifen; z.B. verwendet VLC diese Bibliothek; außerdem muss oft ein Plugin installiert/aktiviert oder der LIRC-Support in den Einstellungen der Programme ermöglicht werden.
Syntax¶
Die .lircrc-Datei ist eine Textdatei, die in jedem Texteditor[3] erstell- und bearbeitbar ist. Der LIRC-daemon lircd liest bei jeder Betätigung einer Taste die Datei von oben nach unten aus, alle "Treffer" werden der Reihe nach ausgeführt - das ist zum Verständnis einiger Funktionen (z.B. mode oder flags) wichtig. Die Anweisungen in der Datei sind in Blöcken zusammengefasst, die jeweils mit einem begin
eingeleitet und mit end
abgeschlossen werden müssen, ansonsten ist eine Ausführung nicht möglich:
1 2 3 4 5 | begin prog = irexec button = OK config = echo "So funktioniert die .lircrc" end |
Diese kurze .lircrc würde, bei entsprechender Belegung der Taste, So funktioniert die .lircrc
im Terminal ausgeben; irexec
zu Testzwecken dafür im Vordergrund, also ohne -d
laufen lassen. Es lassen sich natürlich wesentlich komplexere Nutzungen realisieren.
Neustart¶
Veränderungen an der .lircrc werden erst nach einem Neustart des Lirc-Daemons wirksam, der erfolgt im Terminal mit dem Befehl
sudo systemctl restart lirc.service
Ansonsten wird zunächst mit den alten Einstellungen weitergearbeitet.
Bestandteile der .lircrc | |
Zeile | Erklärung |
prog | Das Programm, an das sich der Befehl richtet, z.B. irexec . |
remote | Der Name, den die Fernbedienung in der lircd.conf bekommen hat. |
button | Der Name, den die Taste in der lircd.conf bekommen hat. |
repeat | Anweisung, wie mit wiederholten Impulsen umgegangen werden soll. |
delay | Anweisung, nach wie vielen Impulsen ein Befehl umgesetzt werden soll. |
config | Der Befehl, den das Programm ausführen soll. |
mode | Schaltet in einen Programm-Modus, es werden die Befehle für diesen Modus ausgeführt. |
flags | Spezielle Anweisungen ausführen. |
include | Externe Dateien mit Anweisungen einbinden. |
lircrcd | Verschiedene Programm-Modi synchronisieren. |
Kurz gesagt: Welches Programm (prog
) soll was tun (config, mode, flags
), wenn welche Taste der Fernbedienung (remote, button
) wie lange (repeat, delay
) betätigt wird.
prog¶
Hierüber wird das Programm angesteuert, das per Fernbedienung Anweisungen erhalten soll. Dabei ist irexec das LIRC-eigene Programm, über das sich alle Befehle, die auch in einem Terminal verwendet werden können, ausführen lassen. Außerdem lassen sich alle Programme mit eigener LIRC-Unterstützung angeben. Sonderfall sind etliche KDE-Programme, die über irexec und D-Bus-Befehle gesteuert werden (z.B. Kaffeine, Amarok).
remote¶
Diese Angabe ist nur nötig, wenn mehrere Fernbedienungen verwendet werden sollen; der Standardwert ist der Platzhalter "*", der aber nicht explizit angegeben werden muss. Der Name der Fernbedienung findet sich im Normalfall in der verwendeten lircd.conf. Mehr zum Sonderfall mit mehreren Fernbedienungen auf lirc.org 🇬🇧.
button¶
Der Name der Taste, die verwendet werden soll. Dabei muss der Name so geschrieben werden, wie er in der lircd.conf-Datei verzeichnet ist, allerdings unterscheidet lircd nicht zwischen Groß- und Kleinschreibung. Im Zweifelsfall kann über das Programm irw 🇬🇧 der jeweils verwendete Tastenname aufgerufen werden. Es lassen sich auch Tastensequenzen festlegen, in dem mehrere button
-Zeilen hintereinander verwendet werden (sinnvoll, wenn z.B. ein versehentliches Ausführen eines potentiell "gefährlichen" Befehls - shutdown o.ä. - verhindert werden soll). Tastensequenzen verwenden so lange die zu Anfang genutzte Fernbedienung bis explizit eine andere angegeben wird; die remote
-Anweisung muss daher immer vor den button
-Anweisungen stehen. Tastensequenzen funktionieren ggf. auch dann, wenn den Tasten noch anderen Funktionen zugeordnet sind; es werden allerdings sofort auch diese Funktionen ausgeführt; die zweite/letzte Taste sollte dann aber auch (wenn nicht z.B. der Modus gewechselt wurde) zum Ausführen der "gesicherten" Anweisung führen. Eine flags = quit
-Anweisung zwischen zwei button
-Zeilen bleibt dabei interessanterweise wirkungslos; nach dem letzten button
gesetzt funktioniert sie aber normal. In Sequenzen kann auch die selbe Taste mehrfach verwendet werden.
repeat¶
Diese Anweisung legt fest, was bei anhaltendem Druck auf eine Taste geschieht. Der Standard-Wert (der auch ohne Angabe verwendet wird) ist 0
; er führt dazu, dass wiederholte Impulse ignoriert werden. Andere Werte (positve Ganzzahl n
) führen dazu, dass die Anweisung in config
jedes n
-te Mal des Tastendruckes ausgeführt wird, nicht aber wie oft; das ist abhängig von der Länge des Tastendrucks! Wenn eine Dauerfunktion (wie z.B. für die Lautstärkeregelung) gewünscht wird, kann mit einer repeat
-Anweisung festgelegt werden, wie schnell die Änderung vonstatten gehen soll. Ein Dauerdruck erzeugt im Normalfall eine ständige Wiederholung des Impulses, diese wird dann jedes festgelegt Mal ausgeführt. Falls trotz einer solchen Angabe keine Wiederholung des Befehls ausgeführt wird, liegt eventuell ein Problem in der Konfiguration der verwendeten lircd.conf und dem verwendeten toggle_bit_mask
bzw. pre_data
-Wert vor.
delay¶
Hier lässt sich, ebenfalls durch eine positive Ganzzahl n
, festlegen, wie viele Impulse ignoriert werden, bis die in der repeat
-Anweisung festgelegte Konfiguration ausgeführt wird. Standard ist ebenfalls 0
, damit ist diese Funktion zunächst ausgeschaltet. Sinnvoll ist die Verwendung z.B. dann, wenn bei schneller Wiederhol-Rate der Fernbedienung (der gap
-Wert in der lircd.conf steht für die Zeitspanne zwischen den Impulsen in msec) mehrfaches Senden und Ausführen von Befehlen verhindert werden soll. Die Verwendung ohne einen repeat
-Wert führt dazu, dass der Befehl erst verzögert, aber dann auch nur einmal, ausgeführt wird (repeat = 0
und delay = 0
-Angaben sind allerdings überflüssig, weil Standard...).
config¶
Hier steht der eigentliche Befehl, der von dem mit prog
angesteuerten Programm ausgeführt werden soll. Es lassen sich (für irexec) in einer Zeile beliebig viele Befehle hintereinander aufreihen (getrennt durch die Zeichenfolge &&
), die auf den einen Tastendruck hin ausgeführt werden sollen. Programme mit LIRC-Support lassen das allerdings nicht unbedingt zu (so z.B. VLC). Zwei (oder mehrere) hintereinander folgende config
-Zeilen werden im Wechsel ausgeführt, sodass beim ersten Druck die erste, beim erneutem Druck dann die zweite config
-Zeile (etc.) abgearbeitet wird; so lassen sich z.B. Play/Plause-Wechsel-Funktionen erstellen, falls sie in einem Programm nicht vorgesehen sind.
irexec kann jeden Befehl ausführen, der auch im Terminal verwendbar ist; damit lassen sich alle Programme, Skripte, oder Befehle - auch mit ggf. gewünschten Parametern - starten; z.B. kann so einem Musik-Player gleich die abzuspielende Playlist mit auf den Weg gegeben werden.
Um Zeichenfolgen zu übergeben, die nicht ohne weiteres darstellbar sind, lassen sich alle in C üblichen "escape"-Sequenzen ( wie \n
= line-feed, \r
=
⏎ , \t
=
Tab ⇆ , \e
=
Esc , \<n>
= ASCII-Code in oktaler Darstellung, \x<n>
= ASCII-code in hexadezimaler Darstellung, \\
= backslash) verwenden. Auch die
Strg -Taste lässt sich so darstellen : \C
steht z.B. für
Strg +
C .
Welche Befehle für Programme mit LIRC-Support verwendet werden können, lässt sich meist in der Programmdokumentation in Erfahrung bringen oder wird in den FAQs der jeweiligen Web-Seite der Programme erklärt. Hilfreich kann auch eine Websuche nach dem gewünschten Programm und lircrc
sein.
Damit Programme mit integrierter LIRC-Unterstützung, die mit einem irexec-Befehl gestartet werden, die Verwendung der Fernbedienung für andere Anwendungen nicht blockieren, sollte ans Ende der programmaufrufenden config
-Zeile ein &
-Zeichen gestellt werden (z.B. config = rhythmbox &
). Wenn es fehlt, werden die Befehle für weitere Anwendungen solange nicht ausgeführt, wie das aktuell gesteuerte Programm läuft; diese Anweisungen werden zunächst gespeichert und dann erst nach Abschluss des laufenden Programms ausgeführt - was zu unbeabsichtigten Folgen führen kann. Wer z.B. wiederholt die Taste zum Starten eines Programms gedrückt hatte, sieht sich später mit immer neuem Starten dieses Programms konfrontiert, so oft, wie die Taste zuvor - vermeintlich wirkungslos - gedrückt worden war...
mode¶
Hiermit lassen sich Befehle für ein Programm oder eine Funktion zusammenfassen. Ein "Modus" wird zunächst mit einer Taste gestartet (z.B. zusammen mit dem Startaufruf eines Programms; der Wechsel in den Modus erfolgt sofort); die Konfigurationsblöcke für diesen Modus werden mit begin <Modename>
und end <Modename>
eingeschlossen. Damit lassen sich die Steuerbefehle für verschiedene Programme trennen und die selben Tasten in verschiedenen Programmen für unterschiedliche Funktionen verwenden, ohne dass sie sich "ins Gehege kommen". Innerhalb eines mode
-Blocks lassen sich keine weiteren mode
-Blöcke verschachteln; diese müssen immer außerhalb definiert werden.
Da LIRC die .lircrc grundsätzlich bei jedem Tastendruck von oben nach unten ausliest, kann es mit Modi u.U. zu ungewolltem Ausführen von Befehlen kommen. Die mode
-Anweisungsblöcke werden zusätzlich dann verwendet, wenn der entsprechende Modus gestartet wurde; allerdings schließt die Verwendung einer Taste in einem Modus nicht aus, dass auch ein Befehl dieser Taste außerhalb eines Modus ausgeführt wird. Wer also z.B. die "OK"-Taste mit einer Funktion (ohne Modus) belegt hat, und die "OK"-Taste auch in einem Modus verwendet, wird feststellen, dass beide Funktionen ausgeführt werden, wenn die Taste innerhalb des Modus gedrückt wird. Die Reihenfolge ist dabei abhängig von der Position der Konfigurationsblöcke in der .lircrc. Abhilfe kann das quit-Flag schaffen; außerdem sollte man ggf. die mode
-Blöcke an den Anfang der .lircrc stellen, vor die "allgemeinen" Anweisungen und vor jene, die den jeweiligen Modus aufrufen (mehr dazu siehe Die Relevanz der Reihenfolge).
Programme mit integriertem LIRC-Support lassen sich, wenn sie innerhalb einer mode
-Funktion gesteuert werden sollen, anscheinend nur mit einem Modus verwenden, der den Namen des betreffenden Programms hat; sie lassen sich in anderen Modi nicht aufrufen, sondern suchen "ihren" Modus. (Wer z.B. einen mode = music
erstellt und darin versucht, prog = rhythmbox
-Befehle aufzurufen, dürfte keinen Erfolg haben, der Modus muss anscheinend mode = rhythmbox
heißen).
Außerdem lesen Programme mit LIRC-Support beim Start die .lircrc aus und starten dann automatisch in dem Modus mit dem Namen der Anwendung, wenn dieser vorhanden ist. Ein explizites Starten des Modus ist nicht nötig, die Programme können so mit der Fernbedienung gesteuert werden wie es im Modus festgelegt ist. Das kann allerdings bei Start mehrerer Programme dazu führen, dass die Modi nicht mehr sauber getrennt werden und alle Programme gleichzeitig auf denselben Tastendruck reagieren. Eigentlich soll lircrcd das wohl verhindern; falls das nicht funktioniert, kann das Problem umgangen werden, in dem die Programme immer nur per Fernbedienung mit dem entsprechenden Modus-Eintrag gestartet werden.
Die mode
-Funktion lässt sich auch ohne andere Anweisungen verwenden; so kann z.B. innerhalb eines Modus mit einem Tastendruck direkt in einen anderen Modus umgeschaltet werden; das kann sinnvoll sein, wenn zwischen zwei laufenden Anwendungen direkt umgeschaltet, oder eine Anwendung gesteuert werden soll, die zunächst nicht über die Fernbedienung gestartet wurde, deren Modus aber an den Startaufruf gekoppelt war.
Aus der offiziellen LIRC-Dokumentation 🇬🇧 noch folgendes Zitat:
Caveat: In order to avoid many identical entries all actions that modify the mode a program currently is in are independent of the prog token.
Übersetzung: "Achtung: Um eine Vielzahl gleichlautender Einträge zu vermeiden, sind alle Aktionen, die den Modus eines Programmes, in dem es sich gerade befindet, modifizieren, unabhängig von der "prog
"-Anweisung."
Theoretisch soll das wohl bedeuten, dass, wenn für ein Programm der Modus geändert wird, im neuen mode
-Block auf die prog
-Anweisung verzichtet werden kann. In der Praxis aber lassen sich ggf. Programme mit LIRC-Support sowieso nur in dem Modus mit dem eigenen Namen steuern... Im Zweifelsfall daher weiterhin eine prog
-Anweisung verwenden.
flags¶
Unter "flags" werden spezielle Steueranweisungen verstanden, die sich im Zusammenhang mit bestimmten anderen Anweisungen verwenden lassen. Sie werden mit
"flags = <Name des flags>
" aufgerufen.
Verwendbare "flags" | |
Name | Funktion |
once | Nur zusammen mit einer mode -Anweisung verwendbar; bewirkt, dass der dazugehörige config -Befehl nur das erste Mal, wenn der Modus aufgerufen wird, an die entsprechende Anwendung übergeben wird - oder erst dann wieder, nachdem der Modus explizit verlassen wurde. Nutzungsmöglichkeit: Mit einem bestimmten Modus-Aufruf gleichzeitig ein Programm zu starten. |
quit | ⚓︎Normalerweise werden bei einem Tastendruck alle Anweisungs-Blöcke daraufhin überprüft, ob sie ausgeführt werden müssen. Mit diesem "flag" lässt sich das Ausführen weiterer Befehle, die mit der Taste verbunden sind, sofort unterbinden. Verwendung: sinnvoll, wenn nur die Funktion einer Taste innerhalb eines Modus ausgeführt werden soll, und nicht die außerhalb des Modus (dabei Reihenfolge der betroffenen Blöcke/Modi innerhalb der .lircrc beachten!). Wenn z.B. mit einer Taste ein Modus-Wechsel erfolgt, wird dieser sofort ausgeführt; ohne das quit -Flag würden dann auch weitere "Treffer", die nach dieser Anweisung in der .lircrc stehen, direkt ausgeführt. |
mode | Nur innerhalb eines Modus verwendbar; führt dazu, dass der aktuelle Modus verlassen wird. Dabei wird nicht in einen eventuell zuvor verwendeten Modus zurückgeschaltet, sondern es werden alle Modi beendet! Ggf. statt dessen mode = <Modename des letzten Modus> zum Wiederaufruf verwenden. |
startup_mode | Lässt ein Programm unmittelbar den Modus verwenden, der in einer nachfolgenden mode -Anweisung spezifiziert ist. |
toggle_reset | Verwendbar, wenn mehrere config - Zeilen in einem Block benutzt werden. Im Normalfall "merkt" lircd sich, welche config -Zeile ausgeführt wurde, und ruft bei weiterem Tastendruck die nächste Zeile auf. toggle-reset führt dazu, dass , wenn zwischenzeitlich (eine) andere Taste(n) verwendet wurde(n), bei erneutem Aufruf wieder der Befehl der ersten Zeile ausgeführt wird. |
include¶
Die .lircrc-Datei kann, um bei umfangreicheren Vorhaben mit mehreren zu steuernden Programmen/Funktionen die Übersicht zu behalten, unterteilt werden; die einzelnen Dateien können dann mit include /Pfad/zur/Datei
aufgerufen werden. includes
werden dabei in der Reihenfolge genauso verarbeitet, wie andere Anweisungen: Trifft LIRC auf einen include
-Befehl, wird zunächst die angegebene Datei (von oben nach unten) ausgelesen, um dann in der eigentlichen .lircrc weiter fortzufahren. So lassen sich Funktionen, die in allen Programmen zur Verfügung stehen sollen (z.B. Lautstärkeregelung), in einer Datei zusammenfassen, und die Steuerbefehle für die einzelnen Programme jeweils in einer entsprechend benannten Datei ablegen. Sie können dann gemeinsam, z.B. in einem Modus-Eintrag, aufgerufen werden:
1 2 3 4 5 6 7 8 9 10 | ... begin rhythmbox include ~.lirc/volume include ~.lirc/rhythmbox end rhythmbox begin vlc include ~.lirc/volume include ~.lirc/vlc end vlc |
lircrcd¶
Weiteres Zitat aus der offiziellen Dokumentation:
If you start a LIRC client program, it reads your ~/.lircrc and reacts only on prog= entries which point to itself. All programs should give you the possibility to use an alternative config file. If you have included more than one program in your .lircrc, then start all these programs, they react only to their according entries in .lircrc. This also leads to a disadvantage of the mode concept. If you don't start all client programs at a time the mode they have to maintain may differ between applications. Also key sequences might not be recognized equally because all programs then don't have the same starting point. In order to solve this problem there is the new lircrcd program since version 0.8.0. lircrcd's purpose is to synchronise all clients and maintain the current mode. In order to use the lircrcd feature you have to explicitly enable it by adding the following line at the beginning of the file:
#! lircrcd
Übersetzt:
"Wenn ein Programm mit LIRC-Support gestartet wird, liest es die ~/.lircrc-Datei aus und reagiert nur auf prog =
-Einträge, die auf eben dieses verweisen. Alle Programme sollten die Möglichkeit bieten, eine alternative Konfigurations-Datei zu verwenden. Wenn in eine .lircrc-Datei mehr als ein Programm aufgenommen wurde, und dann all diese Programme starten, reagieren sie nur auf ihre entsprechenden .lircrc-Einträge. Das zeigt auch einen Nachteil des Modus-Konzeptes auf. Wenn nicht alle Programme mit LIRC-Unterstützung gleichzeitig starten, kann der Modus, den sie verwalten müssen, zwischen Anwendungen differieren. Auch könnten Tasten-Sequenzen nicht als gleiche/entsprechend erkannt werden, denn dann haben nicht alle Programme den selben Startzeitpunkt. Um dieses Problem zu lösen, existiert seit Version 0.8.0 das neue Programm lircrcd. Aufgabe von lircrcd ist es, alle Programme mit LIRC-Support zu synchronisieren, und den derzeitigen Modus zu verwalten. Um diese Funktion nutzen zu können, muss sie explizit durch Aufnahme der Zeile #! lircrcd
am Anfang der .lircrc ermöglicht werden."
Christoph Bartelmus (der LIRC-Entwickler) erläutert diesen Passus folgendermaßen:
[Verwendung der .lircrc] ohne lircrcd:
Jedes Programm hat jeweils eine Variable, die heißt: modeDa die Programme in der Regel nicht gleichzeitig gestartet werden, kann es leicht vorkommen, dass sich mode von Programm A und mode von Programm B voneinander unterscheiden. Das Verhalten ist dann nicht leicht nachvollziehbar.
Mit lircrcd:
Es gibt nur noch eine Variable mode, die von lircrcd verwaltet wird und alle Programme fragen bei lircrcd nach, wie der Inhalt von mode ist. Also sind alle im gleichen Modus, unabhängig davon wann sie gestartet wurden.
Bei der Verwendung ohne lircrcd "suchen" die Programme mit LIRC-Support ohne explizite Modus-Angabe (also wenn sie von "außerhalb" gestartet wurden) nach Einträgen in der .lircrc, aber auch in den Modus-Blöcken! Das kann dazu führen, dass bei mehreren so gestarteten Programmen ohne mode
-Angabe nicht eindeutig ist, welcher Befehl ausgeführt werden soll. Ggf. werden bei Tastenbelegung für mehrere Programme die Anweisungen gleichzeitig ausgeführt, z.T. aber wird nicht unbedingt nach Reihenfolge abgearbeitet; das Verhalten wird damit unberechenbar. lircrcd soll diese "Modi" der Programme synchronisieren. Mit der Verwendung von lircrcd scheinen "außerhalb" gestartete Programme ohne Modusangabe allerdings nur auf der "Grundebene" der .lircrc nach entsprechenden prog
-Anweisungen zu suchen. Wenn sich dort aber keine finden lassen, weil sie alle im entsprechenden mode
-Block stehen, funktionieren die Tasten ohne einen expliziten Wechsel in den entsprechenden Modus nicht. Ggf. kann dann eine prog
-Anweisung außerhalb des mode
-Blocks mit einem entsprechendem Moduswechsel das Programm "auf die richtige Spur" setzen.
Die Verwendung dieser Funktion mit Rhythmbox (und auch Totem) ist dabei anscheinend fehlerhaft; prog
-Anweisungen werden mit der Verwendung von #! lircrcd
ggf. nicht ausgelesen/ausgeführt (siehe auch hier im Forum). Abhilfe schafft es wohl nur, auf lircrcd zu verzichten, und alle Programme immer mit einer entsprechenden mode
-Anweisung mit der Fernbedienung zu starten. Dann kommt es nicht zu Problemen mit unklaren Modi (siehe Beispiele).
Die Relevanz der Reihenfolge¶
lircd liest die .lircrc bei jedem empfangenen Impuls von oben nach unten aus. Anweisungen in mode
-Blöcken werden bei aufgerufenem Modus zusätzlich zu den "Grundbefehlen" berücksichtigt. Das hat entscheidende Auswirkungen für die Funktion der .lircrc, kann aber auch gezielt eingesetzt werden.
Zunächst ein kurzes Beispiel, bei dem das Vertauschen von Blöcken zu völlig unterschiedlichen Ergebnissen führt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | begin order begin button = OK prog = irexec config = echo "Dieses wird zuletzt ausgegeben" end end order begin button = OK prog = irexec config = echo "Dieses wird zuerst ausgegeben" mode = order flags = quit end |
Als Ergebnis wird beim ersten Tastendruck Dieses wird zuerst ausgegeben
erscheinen, beim zweiten ist der Modus gewechselt, und auch die Anweisung im order
-Block erscheint. Sie steht vor der zweiten Block, also werden beide Anweisungen so ausgegeben:
Dieses wird zuletzt ausgegeben Dieses wird zuerst ausgegeben
und ebenfalls für jeden weiteren Tastendruck. Das quit
-Flag hat keinen Einfluss, da keine weitere Anweisung folgt.
Werden die Blöcke vertauscht
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | begin button = OK prog = irexec config = echo "Dieses wird zuerst ausgegeben" mode = order flags = quit end begin order begin button = OK prog = irexec config = echo "Dieses wird zuletzt ausgegeben" end end order |
führt dies beim ersten Tastendruck ebenfalls zu
Dieses wird zuerst ausgegeben
Allerdings wird es auch bei jedem weiteren Druck ausgegeben. Es erfolgt zwar eine Wechsel in den order
-Modus, allerdings verhindert das quit
-Flag die Ausführung der zweiten Funktion. Ohne quit
-Flag würde beim zweiten (und jedem weiteren Tastendruck)
Dieses wird zuerst ausgegeben Dieses wird zuletzt ausgegeben
erscheinen. Mit quit
-Flag im order
-Block würde ab dem zweiten Druck nur noch
Dieses wird zuerst ausgegeben
produziert; die Ausgabe der anderen Anweisung würde unterbunden.
Daher sollte man, wenn man tatsächlich die Möglichkeit haben möchte, alle Tasten - ohne Ausführung weiterer Befehle - in allen Modi zu verwenden,
die
mode
-Blöcke vor die anderen Anweisungen stellenin den Anweisungen der
mode
-Blöcke ggf. einquit
-Flag setzen.
Allerdings kann man die Reihenfolge des Abarbeitens der .lircrc-Blöcke auch gezielt verwenden: Wer z.B. in mehreren Programm-Modi Tasten mit der selben Funktion belegen möchte (Start eines anderen Programms, Lautstärkeregelung etc.), kann für diese Befehle einen eigenen "Steuer"-Modus erstellen. Dieser muss dann in der .lircrc nach den Programm-Modi stehen; die in den Programm-Modi verwendete Taste braucht nur noch die Anweisung mode = steuermodus
, womit sofort in diesen Modus gewechselt wird. Ohne quit
-Flag im Programm-Modus wird dann die Anweisung umgehend im neuen Modus ausgeführt; mit einem weiteren Modus-Wechsel/flags = mode
in dieser Anweisung sind ganze "Befehlsketten" realisierbar (siehe auch Beispiele).
Spezielle Programme für die .lircrc¶
irexec¶
irexec 🇬🇧 ist im lirc-Paket enthalten. irexec sendet beliebige Befehle auf der Kommandozeilen-Ebene und ermöglicht es so, alle Programme oder Befehle zu starten und zu steuern, soweit diese auch in einem Terminal bedienbar sind. Dabei greift es auf .lircrc im Homeverzeichnis zurück. Damit die Befehle umgesetzt werden, muss irexec (zunächst im Terminal) als normaler Benutzer gestartet werden:
irexec -d
Um den Befehl nicht nach jedem Systemstart manuell aufrufen zu müssen sollte die ~/.profile die folgende Zeile enthalten:
/usr/bin/irexec -d
Möchte man das zentral für jedem Systembenutzer konfigurieren, so kann der Aufruf auch in /etc/profile hinzugefügt werden.
irexec als Debugging-Werkzeug¶
Um zu überprüfen, ob die .lircrc-Datei formal funktionsfähig ist, kann irexec verwendet werden. Im Terminal nicht als Hintergrund-Prozess gestartet (ohne die Option -d
), liest irexec die Datei aus und meldet Syntaxfehler, wenn die Konfiguration fehlerhaft ist, also z.B. end
-Einträge fehlen, oder Modi formal falsch gesetzt sind. Inwieweit allerdings "semantische" Fehler vorliegen, lässt sich so nicht feststellen. Unerwartete Ergebnisse treten - verständlicherweise - z.B. dann auf, wenn in einem Modus versehentlich die selbe Taste für verschiedene Funktionen verwendet werden soll (das ist natürlich möglich und manchmal auch sinvoll).
irxevent¶
irxevent befindet sich im Paket
lirc-x (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install lirc-x
Oder mit apturl installieren, Link: apt://lirc-x
irxevent 🇬🇧 ist in der Lage, einzelne Tasten oder Tastenkombinationen auf dem Keyboard an bestimmte Anwendungen zu schicken. Zappte man bisher z.B. mit den Pfeiltasten auf der Tastatur durch seine Senderliste, kann das nun auch per Fernbedienung erledigt werden. Die Syntax in .lircrc unter config
ist dabei: Key
(d.h. es folgt eine Taste) <Name der Taste>
(beschrieben unter /usr/share/doc/lirc/irxevent.keys) <Name des Programms>
, als Beispiel config = Key alt-ctrl-t x-session-manager
. Bei entsprechender Tastenkombination lässt sich so zum Beispiel der Zoom von Compiz ausführen. Genauere Informationen finden sich in der manpage des Programms. Damit die Befehle umgesetzt werden können, muss irxevent (zunächst im Terminal) als normaler Benutzer gestartet werden:
irxevent -d
Auch hier gilt: Um es dann dauerhaft nutzen zu können, empfiehlt es sich, es schon beim Systemstart, z.B. durch Eintrag in die rc.local, aufzurufen.
xte¶
Manchmal kennt man den genauen Namen eines Programms, das aufgerufen wird, wenn man die Tastenkombination XY drückt, gar nicht. Oder man möchte die Zifferntasten in allen Anwendungen so nutzen wie den Numblock der Tastatur. Abhilfe schafft dabei das Programm xte. Mit ihm lassen sich vom Terminal aus alle Tasten des Keyboards simulieren, sodass für den Rechner kein Unterschied zwischen einem "echten" Tastendruck und dem Befehl von xte erkennbar ist. xte befindet sich im Paket
xautomation (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install xautomation
Oder mit apturl installieren, Link: apt://xautomation
Um das Programm in Verbindung mit LIRC nutzen zu können, wird es in .lircrc mittels irexec gestartet. Die relevante Zeile sieht dabei folgendermaßen aus: config = xte 'key 1'
, oder für eine Tastenkombination: config = xte 'keydown Alt_L' 'keydown 2' 'keyup Alt_L' 'keyup 2'
. Die Namen der Tasten sind in der manpage des Programms beschrieben.
Automatisches Erstellen einer .lircrc¶
Um automatisch eine .lircrc-Datei zu erstellen, kann das Programm mythbuntu-lirc-generator verwendet werden (gleichnamiges Paket (universe) installieren). Es generiert mit den Angaben aus der lircd.conf eine Steuerungsdatei, die bei Bedarf weiter ausgebaut werden kann. Dabei werden Konfigurationen für die Programme MythTV, Elisa, MPlayer, Totem, VLC und XINE erstellt. Es wird eine kurze .lircrc erstellt, mit include
-Befehlen werden die Konfigurationen für die einzelnen Programme aus dem angelegten Ordner ~/.lirc aufgerufen (die automatisch erstellten repeat = 0
und delay = 0
-Anweisungen sind so allerdings überflüssig).
Basisdateien¶
.lircrc
1 2 3 4 5 6 7 8 9 10 | #Custom lircrc generated via mythbuntu-lirc-generator #All application specific lircrc files are within ~/.lirc include ~/.lirc/mythtv include ~/.lirc/mplayer include ~/.lirc/xine include ~/.lirc/vlc include ~/.lirc/xmame include ~/.lirc/xmess include ~/.lirc/totem include ~/.lirc/elisa |
~/.lirc/totem
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | # LIRCRC Auto Generated by Mythbuntu Lirc Generator # Author(s): Mario Limonciello, Nick Fox # Created for use with Mythbuntu begin remote = Terratec_Cinergy_HT_PCI_ prog = totem button = INFO config = show_playing repeat = 0 delay = 0 end begin remote = Terratec_Cinergy_HT_PCI_ prog = totem button = Play config = play_pause repeat = 0 delay = 0 end begin remote = Terratec_Cinergy_HT_PCI_ prog = totem button = PAUSE config = pause repeat = 0 delay = 0 end begin remote = Terratec_Cinergy_HT_PCI_ prog = totem button = Mute config = mute repeat = 0 delay = 0 end begin remote = Terratec_Cinergy_HT_PCI_ prog = totem button = Vol- config = volume_down repeat = 0 delay = 0 end begin remote = Terratec_Cinergy_HT_PCI_ prog = totem button = Up config = up repeat = 0 delay = 0 end begin remote = Terratec_Cinergy_HT_PCI_ prog = totem button = Vol+ config = volume_up repeat = 0 delay = 0 end begin remote = Terratec_Cinergy_HT_PCI_ prog = totem button = Down config = down repeat = 0 delay = 0 end begin remote = Terratec_Cinergy_HT_PCI_ prog = totem button = Right config = right repeat = 0 delay = 0 end begin remote = Terratec_Cinergy_HT_PCI_ prog = totem button = FF config = seek_forward repeat = 0 delay = 0 end begin remote = Terratec_Cinergy_HT_PCI_ prog = totem button = DVD config = play_dvd repeat = 0 delay = 0 end begin remote = Terratec_Cinergy_HT_PCI_ prog = totem button = Left config = left repeat = 0 delay = 0 end |
Beispiele¶
Als Veranschaulichung einiger Möglichkeiten eine kommentierte .lircrc, über die die Programme VLC und Rhythmbox gesteuert werden können. Ebenfalls ist die Mausbedienung per Fernbedienung vorgesehen, außerdem ist das Herunterfahren des Rechners möglich (funktioniert so allerdings nur unter GNOME). Die echo
-Anweisungen in den config
-Zeilen sind optional, sie geben die jeweils ausgeführte Aktion im Terminal wieder. So kann kontrolliert werden, ob die mode
-Wechsel wie gewünscht vonstatten gehen (Voraussetzung: irexec wird nicht als daemon ausgeführt). Der Wechsel der Arbeitsflächen mit xte funktioniert natürlich nur, wenn die entsprechende Tastenkombinationen entsprechend eingestellt sind (siehe dazu auch im Forum).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | # Programm-Modi, Befehle werden per "include" aus einzelnen Dateien ausgelesen: begin rhythmbox include ~/.lirc/rhythmbox include ~/.lirc/maus end rhythmbox begin kaffeine include ~/.lirc/kaffeine end kaffeine begin vlc include ~/.lirc/vlc include ~/.lirc/maus end vlc begin maus include ~/.lirc/maus end maus begin shut # "Sicherheitstaste" um aus versehentlich aufgerufenem Herunterfahr-Modus zurückzukommen: begin button = BACK prog = irexec config = echo "mode normal aus shut" mode = normal end # Tasten-Sequenz zum tatsächlichen Herunterfahren: begin prog = irexec button = DELETE button = POWER config = gnome-power-cmd.sh shutdown end end shut # Befehle des Normal-Modus: begin normal # Starttasten für die Programme; gleichzeitig wird in den entsprechenden Modus gewechselt und auf eine andere Arbeitsfläche geschaltet: begin prog = irexec button = TV config = echo "mode kaffeine aus startup" && xte 'keydown Control_L' 'keydown Shift_L' 'keydown 4' 'keyup Control_L' 'keyup Shift_L' 'keyup 4' && kaffeine & mode = kaffeine end # VLC wird hier gleich als DVB-T-Player mit entsprechender channels.conf gestartet: begin prog = irexec button = VIDEO config = echo "mode vlc aus startup" && xte 'keydown Control_L' 'keydown Shift_L' 'keydown 2' 'keyup Control_L' 'keyup Shift_L' 'keyup 2' && vlc /pfad/zur/channels.conf & mode = vlc end begin prog = irexec button = DVD config = echo "mode rhythmbox aus startup" && xte 'keydown Control_L' 'keydown Shift_L' 'keydown 3' 'keyup Control_L' 'keyup Shift_L' 'keyup 3' && rhythmbox & mode = rhythmbox end # Tasten zum Wechseln des Modus: begin button = TEXT prog = irexec config = echo "mode maus aus mode normal" mode = maus end begin button = POWER prog = irexec config = echo "mode shut aus mode normal" mode = shut end # Aufruf von laufenden Programmen mit Wechsel auf entsprechend Arbeitsfläche (wird auch aus den einzelnen Modi heraus verwendet): begin button = GREEN prog = irexec config = echo "mode vlc aus mode normal"&& xte 'keydown Control_L' 'keydown Shift_L' 'keydown 2' 'keyup Control_L' 'keyup Shift_L' 'keyup 2' mode = vlc end begin button = RED prog = irexec config = echo "mode kaffeine aus mode normal" && xte 'keydown Control_L' 'keydown Shift_L' 'keydown 4' 'keyup Control_L' 'keyup Shift_L' 'keyup 4' && dcop kaffeine KaffeineIface pause mode = kaffeine end begin button = YELLOW prog = irexec config = echo "mode rhythmbox aus startup" && xte 'keydown Control_L' 'keydown Shift_L' 'keydown 3' 'keyup Control_L' 'keyup Shift_L' 'keyup 3' && rhythmbox-client --no-start --play & mode = rhythmbox end end normal # Inbetriebnahme der Fernbedienung mit der BACK-Taste: begin button = BACK prog = irexec config = echo "mode normal start" mode = normal end |
Dazu die entsprechende ~/.lirc/vlc für ein Programm mit LIRC-Support:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 | ## VLC ## begin prog = vlc button = PLAY config = key-play end begin prog = vlc button = PAUSE config = key-play-pause end begin prog = vlc button = STOP config = key-stop end begin prog = vlc button = MUTE config = key-vol-mute end begin prog = vlc button = VOLUMEDOWN config = key-vol-down repeat = 2 delay = 10 end begin prog = vlc button = VOLUMEUP config = key-vol-up repeat = 2 delay = 10 end begin prog = vlc button = CHANNELUP config = key-next end begin prog = vlc button = CHANNELDOWN config = key-prev end begin prog = vlc button = PIC config = key-fullscreen end begin prog = vlc button = REWIND config = key-slower end begin prog = vlc button = FORWARD config = key-faster end # Navigation im DVD-Menü begin prog = vlc button = LEFT config = key-nav-left end begin prog = vlc button = DOWN config = key-nav-down end begin prog = vlc button = UP config = key-nav-up end begin prog = vlc button = RIGHT config = key-nav-right end begin prog = vlc button = OK config = key-nav-activate end begin prog = vlc button = DVDMENU config = key-disc-menu end # Beenden des Programm, Rückkehr zu mode normal und Arbeitsfläche 1: begin button = HOME prog = irexec config = echo "mode normal aus vlc quit" && xte 'keydown Control_L' 'keydown Shift_L' 'keydown 1' 'keyup Control_L' 'keyup Shift_L' 'keyup 1' end # Hier ist die HOME-Taste bewusst mit einem zweiten Befehl belegt, da es sich um verschiedene Programme handelt, die gleichzeitig bedient werden (irecex und VLC): begin prog = vlc button = HOME config = key-quit mode = normal end # Rückkehr zu mode normal, um z.B. ein weiteres Progamm per Fernbedienung starten zu können; VLC wird stummgeschaltet; gleichzeitig Wechsel auf Arbeitsfläche 1: begin prog = vlc button = BACK config = key-vol-mute end begin button = BACK prog = irexec config = echo "mode normal aus vlc" && xte 'keydown Control_L' 'keydown Shift_L' 'keydown 1' 'keyup Control_L' 'keyup Shift_L' 'keyup 1' mode = normal end # Tasten, um zu bereits laufenden Anwendungen zu wechseln (über mode normal); VLC wird stummgeschaltet, die laufende Anwendung mit Sound/Forsetzung fortgeführt: begin prog = vlc button = RED config = key-vol-mute mode = normal end begin prog = vlc button = BLUE config = key-vol-mute mode = normal end begin prog = vlc button = YELLOW config = key-vol-mute mode = normal end # Lautstärke für VLC einschalten, wenn aus anderen Anwendungen in den VLC-Modus gewechselt wird (Taste länger drücken): begin prog = vlc button = GREEN config = key-vol-mute repeat = 1 delay = 5 end # Tasten, um andere Anwendungen zu starten; VLC wird stummgeschaltet, Aufruf über mode normal: begin prog = vlc button = TV config = key-vol-mute mode = normal end begin prog = vlc button = MUSIC config = key-vol-mute mode = normal end begin prog = vlc button = DVD config = key-vol-mute mode = normal end |
Hinweis:
Unter KDE4 ist eine Steurung so nicht mehr möglich. Die Steuerung erfolgt mit D-Bus-Aufrufe, siehe Kaffeine - Fernbedienung. Die Grundfunktionen lassen sich bei laufendem Kaffeine-Programm mit
qdbus org.kde.kaffeine /Player
ausgeben.
Programme beenden¶
Um Programme zu bedienen, die keinen "eigenen" Befehl zum Beenden haben, kann folgendes Skript von bulderbacke per Tastendruck gestartet werden:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #!/bin/bash # von http://xbmc.org/forum/showthread.php?s=a6f0736b696c88149143ce0077b2a448&t=30230 export USER=<dein_User> export LOG=/tmp/irscript-<zu steuerndes Programm>_restart.log # Test to see if <zu steuerndes Programm> is still running if [ -n "$(pidof <zu steuerndes Programm>)" ] ; then # Send gentle kill signal killall <zu steuerndes Programm> echo `date` "Killed <zu steuerndes Programm>! (soft)" >> $LOG # takes a second or two to die with the soft kill sleep 2 # still running? Send hard kill signal if [ -n "$(pidof <zu steuerndes Programm>)" ] ; then # If it's still around, kill it -9 killall -9 <zu steuerndes Programm> ; echo `date` "Killed <zu steuerndes Programm>! (hard)" >> $LOG fi else echo `date` "Starting <zu steuerndes Programm>" >> $LOG <zu steuerndes Programm> --lirc --fullscreen; fi & |
Skript herunterladen und ausführbar machen, <zu steuerndes Programm>
durch den gewünschten Programmnamen ersetzen und unter einem aussagekräftigen Namen abspeichern (z.B. als start-stop-<zu steuerndes Programm>.sh). Das Skript versucht zunächst, das Programm "einfach" zu beenden und überprüft dann, ob es geklappt hat. Wenn nicht, kommt ein "härterer" killall
-Befehl zum Einsatz. Wenn es zuvor nicht lief, wird das Programm gestartet - wenn möglich mit LIRC-Support und im Fullscreen-Modus. Da ganze wird dann noch in einem Log (/tmp/irscript-<zu steuerndes Programm>_restart.log) mitgeschnitten.
Eine Anweisung in der .lircrc zum Aufruf könnte so aussehen:
1 2 3 4 5 | begin prog = irexec button = HOME config = /Pfad/zum/Script/start-stop-<zu steuerndes Programm>.sh end |
Maus per Fernbedienung steuern¶
Mit xte ist es sehr einfach, auch die Maus-Funktionen per Fernbedienung zu steuern; hier eine .lircrc-Beispielkonfiguration, in der der Ziffernblock der Fernbedienung zur Navigation verwendet wird, die wird mit 5, die mit 0 "geklickt".
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | #Maussteuerung per xte begin prog = irexec button = 2 config = xte 'mousermove 0 -15' repeat = 1 end begin prog = irexec button = 3 config = xte 'mousermove 15 -15' repeat = 1 end begin prog = irexec button = 1 config = xte 'mousermove -15 -15' repeat = 1 end begin prog = irexec button = 8 config = xte 'mousermove 0 15' repeat = 1 end begin prog = irexec button = 7 config = xte 'mousermove -15 15' repeat = 1 end begin prog = irexec button = 9 config = xte 'mousermove 15 15' repeat = 1 end begin prog = irexec button = 4 config = xte 'mousermove -15 0' repeat = 1 end begin prog = irexec button = 6 config = xte 'mousermove 15 0' repeat = 1 end begin prog = irexec button = 5 config = xte 'mouseclick 1' end begin prog = irexec button = 0 config = xte 'mouseclick 2' end |
Links¶