我需要一种方法来检测 Linux 上的鼠标/键盘活动。类似于任何 IM 程序所做的事情。如果在 5 分钟内未检测到任何活动,它会将您的 IM 状态设置为“我现在不在这里”。
对此的任何帮助表示赞赏。
谢谢。
我需要一种方法来检测 Linux 上的鼠标/键盘活动。类似于任何 IM 程序所做的事情。如果在 5 分钟内未检测到任何活动,它会将您的 IM 状态设置为“我现在不在这里”。
对此的任何帮助表示赞赏。
谢谢。
或者简单地使用xprintidle
以毫秒为单位返回空闲时间的命令。
它已被打包用于基于 debian 的系统。(源代码在原始站点 dtek.chalmers.se/~henoch 上不再可用,但您可以在packages.ubuntu.com获得)
完整的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 模块)
当有更好的方法可用时不要轮询。
您没有指定环境,但由于您提到鼠标,我将假设现代 X11。
xidle使用 MIT-SCREEN-SAVER 扩展来判断用户是否空闲——你可以xidle
直接使用,或者阅读它的源代码来学习如何自己使用 XScreenSaver(3)。
man 3 XScreenSaver
XIDLE
-- 只需使用它的空闲报告/通知部分,因为自 X11R6以来没有更多的扩展。
我的方法是使用 ad-hoc perl 模块:
# cpan -i X11::IdleTime; sleep 2; perl -MX11::IdleTime -e 'print GetIdleTime(), $/;'
尝试who -u -H
在命令行执行。它会告诉您谁已登录以及他们空闲了多长时间。至少有用户登录到一个终端;我认为它在 X 中根本不起作用。无论如何,通过这些信息,您可以判断谁处于空闲状态并采取适当的措施。
如果你在 X 中,你可以创建一个脚本来作为屏幕保护程序或类似的东西运行。
这是一个如何使用xprintidle
shell 脚本检查用户是否空闲 5 分钟的示例:
#!/bin/sh
idletime=$(xprintidle)
threshold=300000 # 5 min = 5 * 60 * 1000 ms
if [ "$idletime" -gt "$threshold" ]; then
echo "idle"
fi
xprintidle
以毫秒为单位返回时间。
该脚本不进行任何轮询或类似操作。它仅在用户空闲时执行一些代码,否则不执行任何操作。
我编写了wait-while-idle.rb,它执行“检测 linux 中的键盘、鼠标活动”,但反过来——等到用户回来。
是的,当然——这是轮询,但我怀疑这里是否有人需要性能。
计划用它和一些脚本来抓住恶作剧者偷偷溜进我的电脑。