Обнаружение клавиатуры, активность мыши в Linux
Мне нужен способ обнаружения активности мыши/клавиатуры в Linux. Что-то похожее на то, что сделает любая программа IM. Если активность не обнаружена, скажем, 5 минут, она установит статус вашего IM "Я здесь не сейчас".
Любая помощь в этом приветствуется.
Спасибо.
Ответы
Ответ 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", но наоборот - подождите, пока пользователь вернется.
Да, конечно - это опрос, но я сомневаюсь, что кто-то требует производительности здесь.
Планируйте поймать шутников, подкрадывающихся на моем компьютере, с помощью небольшого скрипта.