Ich möchte erkennen, wenn die Taste XF86Launch1
auf meiner Tastatur mit Python gedrückt wird.
Ich habe einen Headless-Server mit einer Bluetooth-Tastatur. Ich möchte ein Befehlszeilenprogramm immer dann starten, wenn eine bestimmte Multimediataste gedrückt wird.
Im Moment verwende ich:
%Vor%Aber Multimedia-Tasten werden nicht erkannt. Wenn ich sie drücke, wird nichts ausgedruckt.
Gibt es eine Möglichkeit, diese Schlüssel auf einer kopflosen Ubuntu-Box zu erkennen - oder einen besseren Weg, ein Programm auf Tastendruck zu starten?
Anstatt zu versuchen, stdin des tty zu lesen, können Sie das Eingabegerät api von linux benutzen, um sie zu lesen.
Unter Linux werden alle Eingabegeräte als Datei unter /dev/input
angezeigt (z. B. /dev/input/event0
). Wenn ein read()s
aus diesen Dateien stammt, werden strukturierte Daten zurückgegeben, die angeben, wann Tasten gedrückt und losgelassen werden.
In C stellt die Bibliothek libevdev einen Wrapper für diese bereit. In Python könnten Sie die python-evdev-Bibliothek verwenden. Es sollte auch möglich sein, direkt von dem Eingabegerät zu lesen (obwohl Sie möglicherweise die Kerneldokumentation & amp; quelle sorgfältig lesen müssen, um dies richtig zu handhaben).
Ich denke , dass Ihr Problem darin besteht, dass Multimediatasten nicht der Terminaleingabe zugeordnet werden.
Sie können möglicherweise Fortschritte erzielen, indem Sie xev ausführen, um den Schlüssel abzufangen, und xmodmap, um den Schlüssel einer anderen Eingabe zuzuordnen.
Alternativ können Sie etwas wie TKinter verwenden und sehen, ob ein grafisches Programm die Tasten drückt.
%Vor%Eine andere Möglichkeit besteht darin, eine F-Taste anstelle einer Multimediataste zuzuordnen. (d. h. F9)
Edit: Weitere Forschungen dazu führten zu diesen zwei Links:
Zusätzliche Tastaturtasten in der Konsole
Die Konsole selbst unterstützt keine Multimedia-Tasten. Aber es unterstützt benutzerdefinierte F-Tasten. F30-F246 sind immer frei. Anstatt auf XF86Launch1 zu mappen, mappen Sie auf F70. Dann ordnen Sie F70 der Tastatureingabe in Ihrer Tastaturbelegung zu oder verwenden Sie das Python-Skript, das Sie bereits geschrieben haben, um damit umzugehen.
pycopia kann eine Option sein. Ich verwende es mit diesem Bluetooth-Button und es scheint ziemlich gut zu funktionieren. Ich arbeite immer noch daran, es wieder mit der Taste zu verbinden, wenn die Taste in den Ruhezustand geht und dann wieder kommt. Hier ist ein Teil des Skripts, das ich benutze:
keyboard.py:
button.py
%Vor% Dabei ist DEVNAME
der Gerätename in /proc/bus/input/devices
.
Sie können event
im Callback drucken, um herauszufinden, was code
und value
für die Schaltfläche ist, nach der Sie suchen
Tags und Links python keyboard-shortcuts keyboard key-bindings