我需要一种方法来检测Linux上的鼠标/键盘活动。类似于任何IM程序的东西。如果没有检测到任何活动,例如5分钟,它会将您的IM状态设置为“我现在不在这里”。
对此有任何帮助表示赞赏。
感谢。
答案 0 :(得分:30)
或者只需使用命令xprintidle
,它返回空闲时间(以毫秒为单位)。
它已经为基于debian的系统打包。 (源代码在原始网站dtek.chalmers.se/~henoch上不再可用,但您可以在packages.ubuntu.com获取
答案 1 :(得分:18)
完成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模块)
答案 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分钟(或你喜欢的任何时间范围)倒计时。
每当用户按键或移动鼠标时,您都会重置计时器。
如何收集鼠标点击/移动或按键事件的具体细节将取决于您使用何种语言编写程序。