Linux - Есть ли способ получить глобальные KeyPress без записи xlib? (DBus / HAL / и т.д.?) - PullRequest
1 голос
/ 15 декабря 2009

Я смотрел, как захватить глобальные кепрессы в Ubuntu Linux независимо от того, какое окно имеет фокус И люди предложили посмотреть некоторые программы. Но все они используют функцию записи в XLib, которая нарушена в Ubuntu . Есть ли какой-нибудь другой способ перехватить все нажатия клавиш в Ubuntu? Как насчет использования HAL? DBus

1 Ответ

2 голосов
/ 15 декабря 2009

Вы можете открыть устройство /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 - значение события несет. Либо относительное изменение для EV_REL, абсолютно новое значение для EV_ABS (джойстики ...) или 0 для EV_KEY для релиз, 1 для нажатия клавиш и 2 для повтор.

...