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.sh
ausgefü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
- Ich bin in der Konsole und surfe mit so etwas im Internet
links
und 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/sys
Datei geschrieben wird. - 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,mpd
um 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.
quelle
readline
Makros 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/usr/bin/hello.sh
in den Tastaturpuffer eingegeben wird, als hätten Sie sie an der Shell-Eingabeaufforderung eingegeben?readline
Lösung. Ich denke, es ist das Nächste, was Sie in bestehenden Implementierungen finden werden. Multitasking-Desktop-ähnlichegetty
Ersetzungen sind mir nicht bekannt .Antworten:
Teilantwort (weil es nur eine Übersicht und ungetestet ist):
Schreiben Sie einen Dämon, der auf das
/dev/input
Gerä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
tmux
oder ein ähnliches Programm, das Schlüsselsequenzen an Aktionen binden kann . Ich nehme an, es sollte auch möglich sein,tmux
eine 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.
quelle