Hallo zusammen,
ich stelle hier mal meinen Keyboard-Proxy rein
Ich sehe das weder als Release noch als fertig an, sondern eher für die Todesmutigen unter Euch die sowas auch brauchen können und mal einen Blick drauf werfen möchten.
Wofür ist das gut?
Der Keyboard-Proxy hängt sich, wie der Name schon sagt, zwischen Keyboard und VDR.
Hatte der VDR vorher direkt am /dev/tty1 gelauscht tut das nun diese Programm und gibt die gedrückten Tasten an ein PseudoTTY in /dev/pts/ weiter.
Zusätzlich kann dadurch bei einer bestimmten Tastenfolge eine Aktion ausgelöst werden.
Der Zweck der Übung war es, die Maschine noch bedienen zu können selbst wenn der VDR selbst nicht mehr reagieren sollte.
So ist es nun mit diesem Beispiel so gelöst, das die Kombinationen:
Powerknopf die Maschine herunterfährt (OK nix tolles, war vorher schon so )
Power -> Power das CD-ROM öffnet
Power -> OK den VDR-Prozess beendet
Power -> Down die Maschine sofort herunterfährt (ohne ACPI Wakeup Änderung)
Mehr Kombinationen sind natürlich denkbar
Was brauche ich
ACPI Events
Perl
Wie installiere ich das
Das angehängte Skript irgendwo hinspeichern und dann per inittab oder runvdr starten.
z.B:
Wenn das Skript läuft, erzeugt es zwei Dateien:
und
In keyboard_proxy.pid steht (natürlich) die PID des Prozesses und kann so scriptgesteuert gekillt oder anderweitig mit Signalen versorgt werden (dazu später mehr).
In vdr_pts steht das PseudoTTY von dem der VDR seine Tastatureingabe entgegennehmen kann.
Automatisch kann der VDR mit dieser Information zB so gestartet werden:
Man beachte die Backticks! Also nach links geneigte Anführungszeichen!
Ausserdem muss sichergestellt werden, dass der VDR mit den ACPI-Signalen des Powerknopfes versorgt wird.
Für das Eventhandling gibt es wahrscheinlich bei jeder Distri ein Shellskript, bei (meiner) Gentoo ist das /etc/acpi/default.sh
Die sieht so aus:
#!/bin/sh
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/sys-power/acpid/files/acpid-1.0.4-default.sh,v 1.1 2005/03/15 19:15:53 ciaranm Exp $
# Default acpi script that takes an entry for all actions
set $*
group=${1/\/*/}
action=${1/*\//}
case "$group" in
button)
case "$action" in
power)
kill -10 `cat /var/run/keyboard_proxy.pid`
# /sbin/init 0
;;
*) logger "ACPI action $action is not defined"
;;
esac
;;
*)
logger "ACPI group $group / action $action is not defined"
;;
esac
Alles anzeigen
Wichtig ist dass bei power ein "kill -10 `cat /var/run/keyboard_proxy.pid`" steht. Auch hier bitte wieder die Backticks beachten.
"-10" ist übrigens Signal USR1
Wahrscheinlich müssen im Array %KEYDEFINITIONEN noch die Zeichenfolgen angepasst werden - die sind da so, wie meine Scan- auf Keycodes gemappt sind (wie im Wiki beschrieben).
Die notierten Hex-Folgen sind die einzelnen Tasten, jede Taste wird auch nach /tmp/keylog geschrieben, wer also eigene Tasten anlernen will kann hier reinschauen und die Zeichenfolge anpassen/erweitern.
Es werden zwingend 6 Zeichen für die Erkennung vorausgesetzt, aber nachdem da mit regulären Ausdrücken gearbeitet wird kann für "beliebig" ein Punkt eingesetzt werden, siehe OK-Taste!
Also schaut mal bitte, ob Ihr damit was anfangen kann, ob es funktioniert wie gewünscht, ob Fehler drin sind, ob Ihr was vermisst, usw!
Gruss
Thomas
P.S.:
Vielen Dank an LordJaxom und Gonz für Inspiration und Hilfe