Здравствуйте!
Модифицирую сейчас свой кастомный переключатель клавиатуры (мне нужен переключатель, умещий обрабатывать отжатие клавиш, ни один из существующих этого не умеет). В данный момент он работает путем отслеживания потока данных, взятого из /dev/input/event0.
Однако, читать из файла устройства может только root, поэтому приходится изголяться, чтобы запустить демон от обычного пользователя так, чтобы он взял настройки из домашней директории пользователя, и при этом получил доступ к файлу устройства клавиатуры.
Мне тут на лоре говорят, что это не тру, и советуют отслеживать поток действий клавиатуры через функции X11.
Я нашел туториал: http://www.xmission.com/~georgeps/documentation/tutorials/Xlib_Beginner.html и пытаюсь сделать по нему.
Пробный код такой:
Display *dis;
Window win;
dis = XOpenDisplay(NULL);
win = XCreateSimpleWindow(dis, RootWindow(dis, 0), 1, 1, 500, 500,
0, BlackPixel (dis, 0), BlackPixel(dis, 0));
XMapWindow(dis, win);
XFlush(dis);
XSelectInput (dis, win, ExposureMask | KeyPressMask | ButtonPressMask);
// Цикл опроса
while(true)
{
XEvent xevent;
XNextEvent(dis, &xevent);
printf("Get next event, type: %d\n", xevent.type);
}
Да, этот код видит события нажатия и отжатия обычных клавиш и клавиш-модификаторов. Проблема в том, что в программу попадают только те события, которые относятся к созданному окну.
А мне нужно получать весь поток клавиатурных событий, независимо от окна. Да и вообще окно мне даже ненужно.
Вопрос: как получить весь поток клавиатурных событий в X11?