Multimedia Schlüssel in Python (Linux)

8

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?

    
Terence Eden 20.02.2016, 16:54
quelle

4 Antworten

2

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).

    
Cody Schafer 21.02.2016 07:15
quelle
1

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

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.

    
Steve Kallestad 21.02.2016 00:28
quelle
1

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:

%Vor%

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

    
Joe 14.07.2016 19:42
quelle
-2

Versuchen Sie, xinput test <id> stdout in einer Schleife zu lesen und die benötigten Ereignisse abzufangen.

Hier ist ein Beispiel in Bash:

%Vor%     
anon123qw 20.02.2016 22:07
quelle