Uinput - события мыши не работали

Я обнаружил проблему при эмуляции событий мыши с помощью файлов событий устройства uinput.

Я мог бы написать событие в формате структуры struct input_event для событий клавиатуры / мыши, но только ключевые события работали нормально, а события мыши не работали

Я включил все биты, необходимые для ввода

UI_SET_EVBIT - EV_KEY (keyboard/mouse), EV_REP (Repeating events), EV_SYN (Sync report events), EV_REL (Mouse)

UI_SET_RELBIT - REL_X, REL_Y (Mouse)

UI_SET_KEYBIT - All the keys in keyboard, BTN_MOUSE, BTN_LEFT, BTN_RIGHT, BTN_MIDDLE

Я запустил события с кодом ниже

gettimeofday(&ev.time,0);
ev.type = EV_KEY;
ev.code = BTN_LEFT;
ev.value = <MOUSE PRESS/RELEASE>; // tbhis wil lbe either 0 or 1
if(write(uinputfd, &ev, sizeof(ev)) < 0)
{
    return false;
}

// Then send the X
gettimeofday(&ev.time,0);
ev.type = EV_REL;
ev.code = REL_X;
ev.value = x;
if(write(uinputfd, &ev, sizeof(ev)) < 0)
{
    return false;
}

// Then send the Y
gettimeofday(&ev.time,0);
ev.type = EV_REL;
ev.code = REL_Y;
ev.value = y;
if(write(uinputfd, &ev, sizeof(ev)) < 0)
{
    return false;
}

// Finally send the SYN
gettimeofday(&ev.time,0);
ev.type = EV_SYN;
ev.code = SYN_REPORT;
ev.value = 0;
if(write(uinputfd, &ev, sizeof(ev)) < 0)
{
    return false;
}

Кроме того, я мог читать / распечатывать события клавиатуры / мыши из соответствующих входных файлов устройства ввода.

Кто-нибудь знает, почему не работают только события мыши?

1 ответ

У меня нет ответа почему, но я заметил, что мне пришлось разделять абсолютные и относительные ключи на отдельные устройства. Я надеялся, что у кого-то есть ответ, как объединить их в одно устройство.

Edit1: ключевые и относительные события могут быть на одном устройстве. Если вам по-прежнему нужна помощь, я бы предложил опубликовать код, используемый для настройки struct uinput_user_devи писать SET_EVBIT а также SET_RELBIT, Отправка событий выглядит нормально, так что это, вероятно, инициализация или закрытие.

Другие вопросы по тегам