An meinem Computer sind zwei USB-Tastaturen angeschlossen. Kann man, anstatt beide einfach dieselbe Taste drücken zu lassen, eine zweite Tastatur so einrichten, dass sie Befehle ausführt, anstatt Buchstaben einzugeben? Und wenn das nicht möglich ist, kann man sie dann so einrichten, dass sie zumindest in einer anderen Sprache wie zum Beispiel Russisch tippt?
Antwort1
Dies ist meine dritte Antwort, bei der ich eine Empfehlung aussprechen kann actkbd
... :)
Wenn Sie also alle Tasten der zweiten Tastatur zum Ausführen von Befehlen und nicht zum Eingeben von Buchstaben konfigurieren möchten, können Sie actkbd
... :) verwenden.
Nach der Installation actkbd
müssen wir herausfinden, welche Gerätedatei zum Empfangen von Ereignissen von unserer Tastatur verwendet wird:
pbm@tauri ~ $ cat /proc/bus/input/devices
[cut]
I: Bus=0003 Vendor=046d Product=c31c Version=0110
N: Name="Logitech USB Keyboard"
P: Phys=usb-0000:00:1a.0-1.1/input0
S: Sysfs=/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1/1-1.1:1.0/input/input7
U: Uniq=
H: Handlers=sysrq kbd event5
B: PROP=0
B: EV=120013
B: KEY=1000000000007 ff9f207ac14057ff febeffdfffefffff fffffffffffffffe
B: MSC=10
B: LED=1f
I: Bus=0003 Vendor=046d Product=c31c Version=0110
N: Name="Logitech USB Keyboard"
P: Phys=usb-0000:00:1a.0-1.1/input1
S: Sysfs=/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1/1-1.1:1.1/input/input8
U: Uniq=
H: Handlers=kbd event6
B: PROP=0
B: EV=1b
B: KEY=2010000 397ad801d001 1e000000000000 0
B: ABS=100000000
B: MSC=10
[cut]
In dieser Liste sollten Sie Ihre Tastatur finden und deren Handler überprüfen. Verwenden Sie diese Option, sudo actkbd -s -d /dev/input/HANDLER_NAME
um zu überprüfen, ob dieser Handler Ereignisse sendet. Wenn Sie diesen Befehl ausführen und eine Taste auf der Tastatur drücken (suchen Sie nach Tasten, die Sie an Befehle binden möchten), sollten Sie etwa Folgendes erhalten:
pbm@tauri ~ $ sudo actkbd -s -d /dev/input/event5
Keys: 57
Keys: 35
Wenn Sie Schlüsselcodes haben, könnten wir actkbd
eine Konfigurationsdatei erstellen:
pbm@tauri ~ $ sudo nano /etc/actkbd.conf
30:::sudo -u pbm DISPLAY=:0 amarok
//30 is keycode for letter a
Wenn Sie die Datei speichern, sollten wir testen, ob die Konfiguration funktioniert:
pbm@tauri ~ $ sudo actkbd -d /dev/input/event5 -D
Wenn Sie die Taste drücken, die Sie in Ihrer Konfigurationsdatei haben, wird der Befehl aus der letzten Spalte der Konfigurationsdatei gestartet.
Ich glaube, es gibt eine Möglichkeit, das Senden von Schlüsseln an Anwendungen zu deaktivieren, aber ich konnte sie nicht finden - schauen Sie nachREADME-Datei.
Anstatt zu versuchen, es zu deaktivieren, actkbd
könnten Sie Ihre Tastatur in X ausschalten.
pbm@tauri ~ $ xinput list
[cut]
↳ Logitech USB Keyboard id=12 [slave keyboard (3)]
↳ Logitech USB Keyboard id=11 [slave keyboard (3)]
pbm@tauri ~ $ xinput set-prop 11 "Device Enabled" 0
pbm@tauri ~ $ xinput set-prop 12 "Device Enabled" 0
Es sollte funktionieren... :) Weitere Informationen finden actkbd
Sie unterdiese Antwort.
Mithilfe actkbd
(und wahrscheinlich einiger Skripte) können Sie Ihre Tastatur auch so konfigurieren, dass sie vom Befehlsmodus in den Eingabemodus mit russischen Buchstaben wechselt. Lesen Sie dazu Ulrich Schwarz's
die Antwort.
Antwort2
tut mir leid, dass ich diesen Thread wieder hochhole, aber nur damit Sie wissen, dass es eine Alternative zu actkbd gibt, die in Python geschrieben isthttps://github.com/robinuniverse/Keebiedie dasselbe tun, meiner Meinung nach aber fortgeschrittener sind, etwas einfacher zu verwenden sind und mehr als eine Makrotastatur unterstützen.
Sie können hier meine Konfiguration sehen, um sich einen Eindruck zu verschaffen:https://github.com/mirsella/dotfiles/tree/master/.config/keebie keebiecloseprocess ist nicht im Projekt enthalten, ich habe es geschrieben.
Antwort3
Ich habe ein kleines Programm in C geschrieben, das genau das kann. Ich habe es 'on the fly' geschrieben, also ist es nicht sehr gut, aber es funktioniert. Sie können es bekommenHier.
Antwort4
Das hat bei mir funktioniert:
#!/bin/bash
# 15 is the id of the floating (ie disabled) usb keyboard
# xinput --float 15
xinput --test 15 \
| grep --line-buffered "key press"| while read line; do
echo "$line"
if [ "$line" = "key press 38" ]; then
echo "yay"
# do something when 'a' is pressed
fi