web-dev-qa-db-ja.com

Linuxキーボードイベントキャプチャ/ dev / inputX

キーボードイベントをキャプチャしようとしていました。例えばキーロガーをゼロからドリルダウンしたい。 2時間の戦いの後、私は以下を見つけました

neel@pc1$ ls -l /dev/input/by-id
lrwxrwxrwx 1 root root 9 2010-05-05 21:33 usb-Plus_More_Enterprise_LTD._USB-compliant_keyboard-event-kbd -> ../event1
lrwxrwxrwx 1 root root 9 2010-05-05 21:33 usb-Plus_More_Enterprise_LTD._USB-compliant_keyboard-event-mouse -> ../event2
lrwxrwxrwx 1 root root 9 2010-05-05 21:33 usb-Plus_More_Enterprise_LTD._USB-compliant_keyboard-mouse -> ../mouse1

しかし、私がしようとしたとき

neel@pc1$ Sudo cat /dev/input/usb-Plus_More_Enterprise_LTD._USB-compliant_keyboard-event-kbd

何も出力されませんでした

もう少し検索した後、私はおそらくXorgの何かがそれをブロックしていると考えています。

だからこれ以上の情報??そして言うの終わりにどうすればそのファイルから入力を読み取ることができますか?またはキーボードイベントをキャプチャする他の方法はありますか?

14
Neel Basu

こんにちは、

私は最近、同様のことを達成しようと試みていました。

Logkeysプロジェクトを見てください。

http://code.google.com/p/logkeys/

ソースコードをダウンロードしてlogkeys.ccファイルを確認すると、キーボードで使用されている/ dev/input/eventを自動検出する方法が1つ見つかります。これにより、現在どのプログラムにフォーカスがあるかに関係なく、キーボードから生のスキャンコードを読み取ることができます。 logkeysプログラムは、スキャンコードを文字に変換する方法やその他の便利なトリックも示します。

お役に立てれば、

マーカス。

14
msvilans

/ proc/bus/input/devicesファイルで単純なgrep操作を実行すると、マシンに接続されているすべてのキーボードが生成されます。

 grep -E  'Handlers|EV=' /proc/bus/input/devices | \
 grep -B1 'EV=120013' | \
 grep -Eo 'event[0-9]+'

どこ EV=120013は、デバイスがサポートするイベントのビットマスクです。説明したとおり ここ

これは logkeys での実装方法です

13
JacobP

間違ったデバイスを読んでいます。すべての/ dev/input/event *を試すか、/ var/log/Xorg.0.logでキーボードに使用されているデバイスを探します。

10
Florian Diesch

私はevtestアプリケーションを使用することをお勧めします。これはすべての入力デバイスをリストし、それらのイベントを監視できるようにします。

9
madhat1