32

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

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

谢谢。

4

7 回答 7

36

或者简单地使用xprintidle以毫秒为单位返回空闲时间的命令。

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

有关freshmeat.net 的更多信息

于 2011-09-06T17:51:50.407 回答
21

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

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

于 2011-01-15T22:07:52.360 回答
3

当有更好的方法可用时不要轮询。

您没有指定环境,但由于您提到鼠标,我将假设现代 X11。

xidle使用 MIT-SCREEN-SAVER 扩展来判断用户是否空闲——你可以xidle直接使用,或者阅读它的源代码来学习如何自己使用 XScreenSaver(3)。

编辑

man 3 XScreenSaverXIDLE-- 只需使用它的空闲报告/通知部分,因为自 X11R6以来没有更多的扩展。

于 2008-10-21T18:53:00.813 回答
3

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

# cpan -i X11::IdleTime; sleep 2; perl -MX11::IdleTime -e 'print GetIdleTime(), $/;'
于 2011-01-12T17:23:53.173 回答
2

尝试who -u -H在命令行执行。它会告诉您谁已登录以及他们空闲了多长时间。至少有用户登录到一个终端;我认为它在 X 中根本不起作用。无论如何,通过这些信息,您可以判断谁处于空闲状态并采取适当的措施。

如果你在 X 中,你可以创建一个脚本来作为屏幕保护程序或类似的东西运行。

于 2008-10-21T16:54:21.020 回答
2

这是一个如何使用xprintidleshell 脚本检查用户是否空闲 5 分钟的示例:

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

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

该脚本不进行任何轮询或类似操作。它仅在用户空闲时执行一些代码,否则不执行任何操作。

于 2018-06-19T01:22:37.877 回答
0

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

是的,当然——这是轮询,但我怀疑这里是否有人需要性能。

计划用它和一些脚本来抓住恶作剧者偷偷溜进我的电脑。

于 2016-09-08T11:03:57.560 回答