Tastaturkürzel im virtuellen Terminal

7

Gibt es eine Möglichkeit, Tastaturkürzel in der virtuellen Linux-Konsole zu konfigurieren?

Wenn ich zum Beispiel zu tty1 gehe und dann die Tastenkombination Ctrl+ Alt+ drücke H, möchte ich, dass das Skript /usr/bin/hello.shausgeführt wird.


Im Idealfall ist die Verknüpfung bereits vor dem Anmelden verfügbar (in diesem Fall wird sie mit den von mir angegebenen Berechtigungen eines Benutzers ausgeführt). Es macht mir auch nichts aus, den Kernel zu modifizieren, wenn dies der einzige Weg ist, dies zu erreichen. Es muss auch kein Shell-Skript sein, es kann auch eine normale ELF-Binärdatei oder sogar ein Kernelmodul sein, das Systemaufrufe ausführt.


Beispielanwendungsfälle

  1. Ich bin in der Konsole und surfe mit so etwas im Internet linksund möchte die Bildschirmhelligkeit verringern. Ich drücke Fn+ End, was zufällig die Helligkeitstaste ist und einen einzelnen Schlüsselcode erzeugt, und ein Programm wird ausgeführt, das die Helligkeit reduziert, indem etwas in eine /sysDatei geschrieben wird.
  2. Ich bin in einem Konsolentexteditor und höre Musik im Hintergrund, die von abgespielt wird mpd. Ich drücke die Taste (Wiedergabe / Pause), die wiederum einen einzelnen Schlüsselcode erzeugt, und bewirkt, dass ein Programm ausgeführt wird, das ein Signal sendet, mpdum das aktuelle Lied anzuhalten.

Lösung

Nach der Idee von dirkt habe/dev/input ich zu diesem Zweck evd (event daemon) erstellt. Die Anwendung kann im Hintergrund gestartet werden und übernimmt die Tastatur, wo immer Sie sich befinden, auch vor dem Anmelden und innerhalb von X.

loswerden
quelle
1
readlineMakros sind möglicherweise das, wonach Sie suchen, und sobald sie konfiguriert sind, funktionieren sie überall dort, wo Sie bash (oder eine ähnlich readline-fähige Shell) verwenden, und nicht nur in der Konsole. siehe wiki.archlinux.org/index.php/readline#Macros
quixotic
Möchten Sie, dass das Skript unsichtbar ausgeführt wird oder die Zeile /usr/bin/hello.shin den Tastaturpuffer eingegeben wird, als hätten Sie sie an der Shell-Eingabeaufforderung eingegeben?
Roaima
@roaima, ich möchte, dass das Skript unsichtbar ausgeführt wird, idealerweise sogar vor dem Anmelden (in diesem Fall würde es mit den von mir angegebenen Berechtigungen eines Benutzers ausgeführt). Es macht mir auch nichts aus, den Kernel zu modifizieren, wenn dies der einzige Weg ist, dies zu erreichen. Außerdem muss es kein Shell-Skript sein, es kann auch eine normale ELF-Binärdatei sein.
los
2
@quixotic, leider funktioniert das nur an der Bash-Eingabeaufforderung. Ich mag die Verknüpfung zur Verfügung steht , unabhängig davon , welches Programm ich bin zur Zeit in.
rid
@rid ja, das wäre eine Einschränkung einer readlineLösung. Ich denke, es ist das Nächste, was Sie in bestehenden Implementierungen finden werden. Multitasking-Desktop-ähnliche gettyErsetzungen sind mir nicht bekannt .
Quixotic

Antworten:

3

Teilantwort (weil es nur eine Übersicht und ungetestet ist):

Schreiben Sie einen Dämon, der auf das /dev/inputGerät hört, das Ihrer Haupttastatur entspricht (es gibt Symlinks, sehen Sie sie sich an). Starten Sie diesen Dämon als den von Ihnen angegebenen Benutzer mit einem beliebigen Init-System (systemd, sysv, was auch immer).

Der Dämon verarbeitet Schlüsselereignisse wie in input-events-Codes.h definiert (oder sehen Sie sich den Quellcode von an evtest). Es verfügt über eine Zustandsmaschine, die Ihre gewünschten Tastenfolgen erkennt und jeden von Ihnen angegebenen Prozess erzeugt, wenn eine solche Sequenz abgeschlossen ist.

Dies sollte vor der Anmeldung verfügbar sein und wird immer als derselbe Benutzer ausgeführt, unabhängig davon, bei welchem ​​Benutzer Sie an der virtuellen Konsole angemeldet sind. Es wird auch unter X wieder als derselbe Benutzer ausgeführt.


Alternative, wenn Sie etwas in einer Shell ausführen möchten: Verwenden Sie tmuxoder ein ähnliches Programm, das Schlüsselsequenzen an Aktionen binden kann . Ich nehme an, es sollte auch möglich sein, tmuxeine neue Sitzung automatisch zu starten und eine Verbindung herzustellen, wenn Sie sich an einer virtuellen Konsole anmelden, aber ich habe das nicht untersucht.

Dies funktioniert nicht vor der Anmeldung, sondern auch in grafischen Terminalemulatoren mit Tastaturfokus und führt das Skript als angemeldeter Benutzer aus.

dirkt
quelle