私のコンピューターには 2 つの USB キーボードが接続されています。両方で同じキーを入力するのではなく、2 つ目のキーボードを文字を入力する代わりにコマンドを実行するように設定することは可能ですか? また、それが不可能な場合は、少なくともロシア語などの別の言語を入力するように設定することはできますか?
答え1
これは私がお勧めできる3番目の回答ですactkbd
... :)
したがって、2 番目のキーボードのすべてのキーを、文字を入力するのではなくコマンドを実行するように構成する場合は、次のように使用できますactkbd
... :)
インストール後、actkbd
キーボードからイベントを受信するために使用されるデバイス ファイルを見つける必要があります。
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]
このリストでキーボードを見つけて、そのハンドラーをチェックしてください。sudo actkbd -s -d /dev/input/HANDLER_NAME
そのハンドラーがイベントを送信するかどうかを確認するために使用します。このコマンドを実行し、キーボードのキーを押すと (コマンドにバインドするキーを確認してください)、次のような結果が表示されます。
pbm@tauri ~ $ sudo actkbd -s -d /dev/input/event5
Keys: 57
Keys: 35
キーコードをお持ちの場合は、actkbd
設定ファイルを作成できます:
pbm@tauri ~ $ sudo nano /etc/actkbd.conf
30:::sudo -u pbm DISPLAY=:0 amarok
//30 is keycode for letter a
ファイルを保存したら、構成が機能するかどうかをテストする必要があります。
pbm@tauri ~ $ sudo actkbd -d /dev/input/event5 -D
設定ファイルにあるキーを押すと、設定ファイルの最後の列のコマンドが開始されます。
アプリケーションへのキーの送信を無効にする方法があると思うのですが、見つけることができませんでした。READMEファイル。
無効にしようとする代わりに、actkbd
X でキーボードをオフにすることができます。
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
うまくいくはずです... :) 詳細については、actkbd
こちらをご覧くださいこの答え。
actkbd
(おそらくいくつかのスクリプトを使用して)キーボードを構成して、コマンド モードからロシア語文字の入力モードにモードを変更することもできます。これについては、Ulrich Schwarz's
回答をお読みください。
答え2
このスレッドを再度取り上げるのは申し訳ないのですが、ご参考までに、Pythonで書かれたactkbdの代替品があります。https://github.com/robinuniverse/キービー同じ機能を持ちますが、より高度な機能だと思います。少し使いやすく、複数のマクロ キーボードをサポートしています。
私の設定をここで確認して、アイデアを得てください:https://github.com/mirsella/dotfiles/tree/master/.config/keebie keebiecloseprocess はプロジェクトに含まれていませんが、私が作成しました。
答え3
私はCでそれを実行する小さなプログラムを書きました。その場で書いたので、あまり良くはありませんが、動作します。ここ。
答え4
これは私にとってはうまくいきました:
#!/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