在linux中检测键盘,鼠标活动

时间:2008-10-21 16:51:04

标签: linux keyboard mouse android-activity

我需要一种方法来检测Linux上的鼠标/键盘活动。类似于任何IM程序的东西。如果没有检测到任何活动,例如5分钟,它会将您的IM状态设置为“我现在不在这里”。

对此有任何帮助表示赞赏。

感谢。

8 个答案:

答案 0 :(得分:30)

或者只需使用命令xprintidle,它返回空闲时间(以毫秒为单位)。

它已经为基于debian的系统打包。 (源代码在原始网站dtek.chalmers.se/~henoch上不再可用,但您可以在packages.ubuntu.com获取

more info on freshmeat.net

答案 1 :(得分:18)

完成解决方案:(将整个代码剪切并粘贴到终端中)

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模块)

答案 2 :(得分:4)

如果有更好的方法,请不要进行轮询。

你没有指定环境,但是既然你提到鼠标,我就会假设现代X11。

xidle使用MIT-SCREEN-SAVER扩展来确定用户是否空闲 - 您可以直接使用xidle,或阅读其源代码以了解如何使用XScreenSaver( 3)你自己。

修改

man 3 XScreenSaver - 只需使用它的空闲报告/通知部分,因为自X11R6起不再有XIDLE个扩展名。

答案 3 :(得分:3)

我的方法是使用ad-hoc perl模块:

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

答案 4 :(得分:2)

尝试在命令行执行who -u -H。它会告诉你谁登录以及他们闲置多久。至少用户登录终端;我认为它在X中根本不起作用。无论如何,通过这些信息,您可以判断谁是空闲的,并采取适当的行动。

如果您在X中,则可以创建一个脚本以作为屏幕保护程序或类似内容运行。

答案 5 :(得分:1)

这是一个使用xprintidle和shell脚本检查用户是否空闲5分钟的示例:

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

xprintidle以毫秒为单位返回时间。

此脚本不进行任何轮询等。如果用户空闲,它只执行一些代码,否则不执行任何操作。

答案 6 :(得分:0)

我编写了wait-while-idle.rb来执行“检测键盘,linux中的鼠标活动”但反过来 - 等到用户回来。

是的,确定 - 这是民意调查,但我怀疑是否有人要求在这里表现。

计划通过它和一些脚本来抓住恶作剧者潜入我的计算机。

答案 7 :(得分:-3)

对于代码的空闲部分,你需要某种计时器,它只能从5分钟(或你喜欢的任何时间范围)倒计时。

每当用户按键或移动鼠标时,您都会重置计时器。

如何收集鼠标点击/移动或按键事件的具体细节将取决于您使用何种语言编写程序。