どのウィンドウにフォーカスがあるかに関係なく、UbuntuLinuxでグローバルケプレスをキャプチャする方法を検討していました。そして人々は見るべきいくつかのプログラムを提案しました。しかし、それらはすべて、Ubuntuでは壊れているXLibのRECORDのものを使用しています。Ubuntuですべてのキー押下をキャプチャする他の方法はありますか?HALを使ってみませんか?DBus?
1 に答える
キーボードに対応するデバイスを開き、/dev/input/eventN
そこからキーボードイベントを読み取ることができます。X以外のコンソールからもキーボードイベントを取得できます。これは「evdev」インターフェースです。
Documentation/input/input.txt
カーネルソースから:
デバイスでもブロッキング読み取りと非ブロッキング読み取りを使用でき、読み取りで
select()
は/dev/input/eventX
常に整数の入力イベントを取得します。それらのレイアウトは次のとおりです。
struct input_event {
struct timeval time;
unsigned short type;
unsigned short code;
unsigned int value;
};
time
はタイムスタンプであり、イベントが発生した時刻を返します。タイプは、たとえばEV_REL
、相対的な瞬間、REL_KEY
キーを押したり離したりするためのものです。より多くのタイプがで定義されていinclude/linux/input.h
ます。
code
はイベントコードです。たとえばREL_X
、またはKEY_BACKSPACE
、完全なリストはにありinclude/linux/input.h
ます。
value
is the value the event carries. Either a relative change forEV_REL
, absolute new value forEV_ABS
(joysticks ...), or 0 forEV_KEY
for release, 1 for keypress and 2 for autorepeat.