3

どのウィンドウにフォーカスがあるかに関係なく、UbuntuLinuxでグローバルケプレスをキャプチャする方法を検討していました。そして人々は見るべきいくつかのプログラムを提案しました。しかし、それらはすべて、Ubuntuでは壊れているXLibのRECORDのものを使用しています。Ubuntuですべてのキー押下をキャプチャする他の方法はありますか?HALを使ってみませんか?DBus?

4

1 に答える 1

3

キーボードに対応するデバイスを開き、/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 for EV_REL, absolute new value for EV_ABS (joysticks ...), or 0 for EV_KEY for release, 1 for keypress and 2 for autorepeat.

于 2009-12-15T10:59:00.757 に答える