我想在用户变为非活动状态(系统空闲)时运行命令.例如:
echo "You started to be inactive."
此外,当用户再次变为活动状态时(系统不再处于空闲状态):
echo "You started to be active, again."
我需要一个可以执行此操作的shell脚本.这可能没有计时器/间隔吗?也许一些系统事件?
解决方法:
This thread on the ArchLinux forums包含一个简短的C程序,用于查询xscreensaver以获取用户空闲时间的信息,这似乎非常接近您的要求:
#include <X11/extensions/scrnsaver.h>
#include <stdio.h>
int main(void) {
display *dpy = XOpendisplay(NULL);
if (!dpy) {
return(1);
}
XScreenSaverInfo *info = XScreenSaverAlLocinfo();
XScreenSaverQueryInfo(dpy, DefaultRootwindow(dpy), info);
printf("%u\n", info->idle);
return(0);
}
将其保存为getIdle.c并使用
gcc -o getIdle getIdle.c -lXss -lX11
获取可执行文件getIdle.这个程序以毫秒为单位打印“空闲时间”(用户不用鼠标移动/点击,不使用键盘),因此构建在此基础上的bash脚本可以像这样:
#!/bin/bash
idle=false
idleAfter=3000 # consider idle after 3000 ms
while true; do
idleTimeMillis=$(./getIdle)
echo $idleTimeMillis # just for debug purposes.
if [[ $idle = false && $idleTimeMillis -gt $idleAfter ]] ; then
echo "start idle" # or whatever command(s) you want to run...
idle=true
fi
if [[ $idle = true && $idleTimeMillis -lt $idleAfter ]] ; then
echo "end idle" # same here.
idle=false
fi
sleep 1 # polling interval
done
这仍然需要定期轮询,但它可以完成你需要的一切……
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。