Подтвердить что ты не робот

Обнаружение клавиатуры, активность мыши в Linux

Мне нужен способ обнаружения активности мыши/клавиатуры в Linux. Что-то похожее на то, что сделает любая программа IM. Если активность не обнаружена, скажем, 5 минут, она установит статус вашего IM "Я здесь не сейчас".

Любая помощь в этом приветствуется.

Спасибо.

4b9b3361

Ответ 1

Или просто используйте команду xprintidle, которая возвращает время простоя в миллисекундах.

Он был упакован для систем на основе debian. (источник больше не доступен на исходном сайте dtek.chalmers.se/~henoch, но вы можете получить его на packages.ubuntu.com)

дополнительная информация о freshmeat.net

Ответ 2

Завершить c решение: (вырезать и вставить весь код в терминал)

cat>/tmp/idletime.c<<EOF
#include <time.h>
#include <stdio.h>
#include <unistd.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/extensions/scrnsaver.h>

int GetIdleTime () {
        time_t idle_time;
        static XScreenSaverInfo *mit_info;
        Display *display;
        int screen;
        mit_info = XScreenSaverAllocInfo();
        if((display=XOpenDisplay(NULL)) == NULL) { return(-1); }
        screen = DefaultScreen(display);
        XScreenSaverQueryInfo(display, RootWindow(display,screen), mit_info);
        idle_time = (mit_info->idle) / 1000;
        XFree(mit_info);
        XCloseDisplay(display); 
        return idle_time;
}

int main() {
        printf("%d\n", GetIdleTime());
        return 0;
}
EOF

gcc -Wall /tmp/idletime.c -o /tmp/idletime -L/usr/X11R6/lib/ -lX11 -lXext -lXss 
DISPLAY=:0 /tmp/idletime

(основная часть идет от модуля X11:: IdleTime perl)

Ответ 3

Не проводите опрос, когда есть лучшие доступные методы.

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

xidle использует расширение MIT-SCREEN-SAVER, чтобы определить, является ли пользователь простоя или нет - вы можете использовать xidle непосредственно или прочитайте его исходный код, чтобы узнать, как использовать XScreenSaver (3) самостоятельно.

Изменить

man 3 XScreenSaver - просто используйте части отчета о его отсутствии/уведомлении, поскольку расширение xidle больше, поскольку X11R6.

Ответ 4

попробуйте выполнить команду who -u -H в командной строке. Он скажет вам, кто вошел в систему и как долго они простаивают. По крайней мере, пользователи вошли в терминал; Я не думаю, что это вообще работает в X. Во всяком случае, с этой информацией вы можете сказать, кто простаивает или нет, и предпринимать действия соответствующим образом.

Если вы находитесь в X, вы можете создать script для запуска в качестве экранной заставки или что-то в этом роде.

Ответ 5

Мой aproach должен использовать ad-hoc perl-модуль:

# cpan -i X11::IdleTime; sleep 2; perl -MX11::IdleTime -e 'print GetIdleTime(), $/;'

Ответ 6

Для незанятого раздела вашего кода вам понадобится какой-то таймер, который просто отсчитывает от 5 минут (или любого временного интервала, который вам нравится).

Всякий раз, когда пользователь нажимает клавишу или перемещает мышь, вы reset таймер.

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

Ответ 7

Я написал wait-while-idle.rb, который выполняет "обнаружение клавиатуры, активность мыши в Linux", но наоборот - подождите, пока пользователь вернется.

Да, конечно - это опрос, но я сомневаюсь, что кто-то требует производительности здесь.

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