微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 当系统空闲且何时再次处于活动状态时运行命令

我想在用户变为非活动状态(系统空闲)时运行命令.例如:

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] 举报,一经查实,本站将立刻删除。

相关推荐