Präsentiere: input-event-daemon v0.1.3

  • Guten Abend allerseits,

    hiermit möchte ich meine aktuelle Zeitverschwendung der Epoche auch abschliessen. Wer sich ein bisschen mit Linux beschäftigt, der weiss, dass Sondertasten (z.B. Lautstärketasten auf Laptops) zur Zeit in der Regel nur von der Desktop-Umgebung behandelt werden.

    Will man seine Lautstärketasten auch in der Konsole ohne X11 benutzen, dann ist die Alternative dazu ist dann meistens nur acpid (den ich nicht mag und der nur acpi-events kann) oder hal-basierte Lösungen wie halevt (hal mag ich nicht und es stirbt eh bald aus).

    Also hab ich aus der Not eine Tugend gemacht und mir selber ein 1000-Zeiler in C geschrieben, der das auf das Linux-Input-Subsystem horcht und da Befehle bei bestimmten Tastendrücken ausführt.

    "Screenshot":

    Ob ihr damit nur die Lautstärketasten auf amixer mappt oder beim einstecken der Kopfhörer automatisch den MP3-Player startet ist euch überlassen. Das Tool hört auf Tastendrücke (Keyboard- und Maustasten, teilweise auch Joystick-Tasten, je nach Treiber) und Switches (Killswitches, Notebook-Lids und Kopfhörerbuchsen, je nach Treiber). Das Tool ist relativ flexibel, mit dem Parameter --monitor könnt ihr mal horchen was so alles für Input-Events genereriert werden und danach eine Config schreiben.

    Ja, schaut auch die Dokumentation an, an dieser Stelle noch meinen Dank an Griggi und oreissigs fürs Korrekturlesen.

    Achja, Linux 2.6 (vermutlich sogar ab 2.6.16 oder so) ist zwingend nötig. Auch müssen die Kernel-Header installiert sein (linux-api-headers bei Arch Linux, linux-kernel-headers bei Debian/Ubuntu).

    Manpage der Version 0.1.0 als HTML:
    input-event-daemon-0.1.0.html (17,84 KB)

    Quellcode & mehr: gandro's input-event-daemon at master - GitHub
    Download: http://github.com/gandro/input-event-daemon/tarball/v0.1.3

    Einmal editiert, zuletzt von gandro (20. März 2010 um 13:47)

  • Kann es btw sein, dass der daemon etwas langsamer auf z.B. Keyevents reagiert, als wenn ichs über X11/einen Windowmanager mach? Hab das Gefühl, als sei es etwas langsamer. (nur minimal, aber spürbar)

  • Keine Ahnung ob das langsamer als X11 ist. Falls ja fallen mir nur drei Theorien ein, denn ich fange die Events direkt vom Kernel ab, genau wie es auch Xorg tut.

    a) Läuft der Tastaturdaemon von X11 mit einer höheren Priorität.

    b) Ist mein Daemon recht langsam beim auffinden des passenden Events (lässt sich ggf. noch verbessern), dann dürfte er im Monitoring-Mode aber nicht langsamer sein als X11, weil da wird kein Event gesucht, sondern nur ausgegeben.

    c) Wartet mein Daemon anders als die meisten X11-Programme auf ein Release. Der Event wird erst getriggert, wenn ihr die Taste wieder loslässt, nicht wenn ihr sie drückt.

    Bezüglich Amilayout: Mein Daemon kümmert sich gar nicht um um irgendwelche Tastaturlayouts, sondern gibt exakt das aus, was hardwaremässig von der Tastatur kommt, ohne jegliches Mapping, und das ist wohl auch bei deutschen Tastaturen auf der Y-Taste dann wohl doch der Z-Keycode.

  • Zitat von gandro

    Keine Ahnung ob das langsamer als X11 ist. Falls ja fallen mir nur drei Theorien ein, denn ich fange die Events direkt vom Kernel ab, genau wie es auch Xorg tut.

    a) Läuft der Tastaturdaemon von X11 mit einer höheren Priorität.

    b) Ist mein Daemon recht langsam beim auffinden des passenden Events (lässt sich ggf. noch verbessern), dann dürfte er im Monitoring-Mode aber nicht langsamer sein als X11, weil da wird kein Event gesucht, sondern nur ausgegeben.

    c) Wartet mein Daemon anders als die meisten X11-Programme auf ein Release. Der Event wird erst getriggert, wenn ihr die Taste wieder loslässt, nicht wenn ihr sie drückt.

    Bezüglich Amilayout: Mein Daemon kümmert sich gar nicht um um irgendwelche Tastaturlayouts, sondern gibt exakt das aus, was hardwaremässig von der Tastatur kommt, ohne jegliches Mapping, und das ist wohl auch bei deutschen Tastaturen auf der Y-Taste dann wohl doch der Z-Keycode.

    Mh gut möglich, dass es mir deshalb gefühlt etwas langsamer vorkommt.

  • Je nach dem kann ich eine Funktion einbauen, die auch bereits beim Drücken ein Event auslöst. Aber Standardmässig möchte ich das nicht haben, nur schon weil die meisten Tastaturen ja anfangen den Tastendruck zu wiederholen und dass dann auch mehrere Events auslöst.

  • Version 0.1.3 ist draussen (und im AUR).

    Einzelne Tasten werden jetzt bereits beim Drücken getriggert. Damit sollten einzelne Tastendrücke gleichzeitig oder sogar vor X11 erwischt werden (meine Lautstärkeanzeige unter XFCE ist jetzt synchron, vorher hinkte sie nach, das ist auch der Hauptgrund warum ich das Verhalten geändert habe).

    Tastenkombinationen werden nach wie vor erst beim loslassen getriggert (d.h. bei CTRL+ALT+D wird zuerst CTRL alleine getriggert und als nächstes dann die ganze Tastenkombo (ALT und D werden nie separat getriggert)).

    Zudem wird der RESET-Befehl im [Idle] Abschnitt jetzt immer ausgeführt, falls nach min. 750ms Leerlauf eine Taste gedrückt wird (und nicht mehr wie vorher erst wenn min. ein Event getriggert wurde).

  • Beitrag von xchrissix95 (20. März 2010 um 16:44)

    Dieser Beitrag wurde gelöscht, Informationen über den Löschvorgang sind nicht verfügbar.
  • Zitat von YAL

    BTW: Hat wer ne Idee, wie ich jack sensing zum laufen bekomm?


    Auf meinem ThinkPad macht das Input-Event direkt der ALSA-Treiber (snd-hda-intel), und der kann das wohl auch nicht auf jeder Hardware.

  • Was leider ein bisschen stört finde ich, ist, dass wenn z.B. eine Konsole oder sonst ein Textfeld den Focus hat die Tasten da natürlich mit "reinprinten".
    Also wenn ich halt z.B. nen Shortcut "META+M" hab und ein Texteingabefeld den Focus hat, steht da danach halt M drin.
    Bzw könnts generell für die Shortcuts ein Problem sein, dass die anderen Anwendungen die Keyevents auch noch nichtbekommen.

    Wärs möglich, dass man die Keyevents nach dem parsen etc irgendwie verwirft, dass die nicht noch von was anderem interpretiert werden können?

  • Also du sprichst nicht vom Monitoring-Mode, sondern davon, dass ein Event nur von input-event-daemon geparst werden sollte und der dass dann blockiert..?

    Müsst ich schauen ob das machbar ist. Ich bezweifle es, weil ievd die Events auch nicht zwingend als erster Kriegt (sondern "gleichzeitig" mit XOrg und so).

    Man kann zwar Tasten vorher remappen, aber bei Tastenkombinationen sieht das anders aus. Aber ich schau nachher mal.

  • Zitat von gandro

    Also du sprichst nicht vom Monitoring-Mode, sondern davon, dass ein Event nur von input-event-daemon geparst werden sollte und der dass dann blockiert..?

    Jupp, genau. Hab mich vielleicht etwas umständlich ausgedrückt.

    Ist halt wirklich etwas nachteilig, wenn ich einen Shortcut ausführ und der Output der Tasten noch irgendwie landet. (Finde ich).

    Bei X11-WM-Shortcuts landet der Output ja auch nicht mehr irgendwo. (Ich weiß, der Vergleich hinkt etwas, weil X halt X ist und nicht ievd, aber...joar : )

  • Ich hab mich noch ein bisschen mit der Sache beschäftigt.

    evdev, der Teil das Linux-Input-Subsystemes den ich verwende bietet keine Möglichkeit einzelne Events zu stoppen. Alles was ich kann ist das gesamte Gerät zu blockieren, dass nur noch ich es haben darf.

    Die einzige Möglichkeit wäre es also ein Gerät zu blockieren und eine zweite Tastatur zu emulieren, welche alle nicht behandelten Tastendrücke ausgibt, nur müsste dann input-event-daemon jeweils immer vor Xorg gestartet werden (falls Xorg mit einer solchen Handhabe überhaupt klarkommt) und sonderlich elegant oder resourcenschondend ist es auch nicht.

    Nachtrag: Im übrigen bin ich nicht der einzige der sich da etwas mehr Flexibilität wünschte.[1] Aber bisher ist da afaik nichts passiert.

    [1] http://lkml.org/lkml/2007/6/9/59

    Einmal editiert, zuletzt von gandro (27. März 2010 um 16:31)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!