обнаружение клавиатуры, активности мыши в linux - PullRequest
26 голосов
/ 21 октября 2008

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

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

Спасибо.

Ответы [ 8 ]

30 голосов
/ 06 сентября 2011

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

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

больше информации на freshmeat.net

18 голосов
/ 16 января 2011

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

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

(основная часть взята из Perl-модуля X11 :: IdleTime)

4 голосов
/ 21 октября 2008

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

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

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

Редактировать

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

3 голосов
/ 12 января 2011

Мой подход - использовать специальный Perl-модуль:

# cpan -i X11::IdleTime; sleep 2; perl -MX11::IdleTime -e 'print GetIdleTime(), $/;'
2 голосов
/ 21 октября 2008

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

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

1 голос
/ 19 июня 2018

Это пример того, как проверить, что пользователь бездействует в течение 5 минут, используя xprintidle и сценарий оболочки:

#!/bin/sh
idletime=$(xprintidle)
threshold=300000 # 5 min = 5 * 60 * 1000 ms
if [ "$idletime" -gt "$threshold" ]; then
  echo "idle"
fi

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

Этот скрипт не выполняет опрос или что-либо подобное. Он только выполняет некоторый код, если пользователь бездействует, и ничего не делает иначе.

0 голосов
/ 08 сентября 2016

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

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

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

0 голосов
/ 21 октября 2008

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...