web-dev-qa-db-ja.com

押されたキーボードキーのUSBHIDIDを取得する方法

私がしたいこと:キーを押したときにUSB HID IDを取得します-)私の 本当に人間工学的キーボードができるように ファームウェアを再プログラムする キーボードの。

私はこれがあることを知っています Microsoftからのリスト 多くのUSB HIDIDがあります。

ただし、キーを入力してプログラムに表示するだけで、キーのIDを見つけるのは簡単です。特に、Microsoftのリストにない一部のメディアキーの場合。

そのようなプログラムは存在しますか?コマンドラインプログラムである可能性があります。 Linuxが望ましいですが、Windowsもオプションです。

PS:私は見たことがあります この質問 stackoverflowには興味深い答えがあります。しかし、私のシステム(Fedora 17)で/dev/usb/hiddev0が見つかりません。

更新

この質問 @ Andy Rossからの回答は、キーを押したときに少なくともある程度の出力を得るのに役立ちました。やった

xxd -c 144 /dev/input/by-path/pci-0000:00:1a.0-usb-0:1.1:1.0-event-kbd

しかし、それはまだ実際には読めません。同じキーを押しても、いつも同じとは限りません。

Update2

この質問 では pythonスクリプト がリンクされており、入力デバイスを読み取り、それを出力する必要があります。しかし、仕事中のこのコンピューターでは、このpythonスクリプトを使用してデバイスにアクセスする権限がありません。

2
erik

答えは

su -c "while true; do od --read-bytes=144 --width=144 -x /dev/input/event3 | awk 'NF > 1 { print \$12 }'; done"

説明

ツリーコマンドで私はこれを見つけました

$ tree /dev/input/by-path
/dev/input/by-path/
├── pci-0000:00:1a.0-usb-0:1.1:1.0-event-kbd -> ../event3
├── pci-0000:00:1a.0-usb-0:1.1:1.1-event -> ../event4
├── pci-0000:00:1d.2-usb-0:1:1.0-event-mouse -> ../event2
└── pci-0000:00:1d.2-usb-0:1:1.0-mouse -> ../mouse0

わかりました。/dev/input/event3私のキーボードです。

odコマンドは、8進数およびその他の形式でファイルをダンプします。

  • -xオプションを使用すると、16進数をダンプします。
  • また、--width=144オプションを使用すると、キーを押すたびに1行だけがダンプされます(1行の長さは144バイトです)。
  • オプション--read-bytes=144は、144バイト後にodを終了します。

awkコマンドは、行全体の12番目のフィールドを出力します。それだけで、フィールドの数NFが1より大きい場合、1行おきに改行しているだけです。

全体を巡るwhile trueループは、文字キーを入力すると壊れてしまうためです。これ以上結果は得られず、0000のみが得られます。ただし、odコマンドは144バイト(キーを1回押す)後に読み取りを終了します。その後、再起動します。それには確かにより良い修正がありますが、これは良い回避策です。

出力例(数回押しました Return、 RightCtrl そして Backspace、これと比較すると正しい数値が表示されます Microsoftのドキュメント(PDF) または このテキストファイルのドキュメント

0028
0028
0028
00e4
00e4
00e4
002a
002a
002a
3
erik

Linuxのxevが役に立ちます。

幸運を。

0
loadaverage