LINUX.ORG.RU

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

wfrr ★★☆
()

epoll_wait() (на дескрипторе /dev/input/event0 и /dev/input/event1) с таймаутом на определенное количество времени

rei3er
()

int main() {
    int error;
    struct epoll_event event;
    int efd = epoll_create(1);
    int fd = open("/dev/input/event1", O_RDONLY);
    event.events = EPOLLIN | EPOLLET;
    epoll_ctl(efd, EPOLL_CTL_ADD, fd, &event);
    for (;;) {
        if ((error = epoll_wait(efd, &event, 1, 10000)) < 1) {
	    if (!errno) goto exit;
	    return 4;
	}
	if (!error) {
exit:
	    puts("Keyboard is not active last 10 seconds");
	    break;
	}
	puts("Some key pressed");
    }
    return 0;
}

rei3er
()
Ответ на: комментарий от rei3er

>> epoll_wait() (на дескрипторе /dev/input/event0 и /dev/input/event1) с таймаутом на определенное количество времени

/dev/input/event0 и /dev/input/event1 - это не обязательно мышь и клавиатура. И даже если это мышь и клавиатура, то не обязательно что во время бездействия пользователя с этих девайсов не будут приходить данные.

Deleted
()
Ответ на: комментарий от Deleted

> /dev/input/event0 и /dev/input/event1 - это не обязательно мышь и 
> клавиатура.

естественно, кто ж спорит, тут важен принцип, что где-то в /dev/input лежит то, что надо

> то не обязательно что во время бездействия пользователя с этих 
> девайсов не будут приходить данные.

поясни, что может приходить от контроллера клавиатуры (кроме скан-кодов)

rei3er
()
Ответ на: комментарий от rei3er

Перепробовал все что находилось в /dev/input Сообщения от мыши отслеживаются от от клавиатуры нет. Есть ли еще какой то способ? И с иксами не сильно хочется связываться.

drulovich
() автор топика

Без иксов - только с рутовыми привелегиями, поскольку нехорошо палить клаву/мышь в обход систем авторизации.
А в иксах есть XGrabKey, XGrabButon, а также расширение XScrnSaver, которое используется следующим образом:

if (XScreenSaverQueryExtension(display, &event_base, &error_base))
{
	if (mit_info == NULL)
		mit_info = XScreenSaverAllocInfo();
	XScreenSaverQueryInfo(display, RootWindow(display, 0), mit_info);
	idle_time = (mit_info->idle) / 1000;
}

ShprotX
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.