使用“鼠标移动”防止屏幕消隐的脚本不起作用

使用“鼠标移动”防止屏幕消隐的脚本不起作用

这是我尝试制作一个脚本,该脚本将使用“鼠标移动”来防止观看视频时屏幕空白。我希望使用最高 CPU% 进程的值top,如果 CPU 使用率超过 5%,则应该发生鼠标移动。

#!/usr/bin/env bash

sleep_period=60s 

while true; do
  if (( $(top -bn 1 | sed -nrs '8p' | awk '{ print $9 }') -gt 5 )); then 
    while (( $(top -bn 1 | sed -nrs '8p' | awk '{ print $9 }') -gt 5 )); do
      xdotool mousemove 0 100
      xdotool mousemove 0 50
      sleep ${sleep_period}
    done
  else
    sleep ${sleep_period}
  fi
done

不幸的是,它不起作用。错误是这样的:

[07:20 PM] /bin $ noo.sh
/home/vasa1/bin/noo.sh: line 6: ((: 0.0 -gt 5 : syntax error: invalid arithmetic operator (error token is ".0 -gt 5 ")
/home/vasa1/bin/noo.sh: line 6: ((: 6.4 -gt 5 : syntax error: invalid arithmetic operator (error token is ".4 -gt 5 ")

我该如何解决? (请注意,我没有脚本编写经验。)


根据这里的答案,我整理了:

#!/usr/bin/env bash

sleep_period=5m 

while true; do
  if [[ $(top -bn 1 | sed -nrs '8p' | awk '{ print int($9) }') -gt 8 ]]; then 
    while [[ $(top -bn 1 | sed -nrs '8p' | awk '{ print int($9) }') -gt 8 ]]; do
      xset -dpms; xset s off
      xset +dpms; xset s on
      sleep ${sleep_period}
    done
  else
    sleep ${sleep_period}
  fi
done

然后,我在 Ubuntu 论坛上报告了这段代码,瓦佩尔对此进行了进一步的研究。以下是 Vapell 的版本,也是我正在使用的版本:

#!/usr/bin/env bash

sleep_period=5m 

while true; do
  if top -bn 1 | awk 'NR==8 { exit !($9>8); }'; then
    xset -dpms; xset s off
    xset +dpms; xset s on
  fi
  sleep ${sleep_period}
done

答案1

您可以使用

xset -dpms; xset s off

阻止屏幕变黑。

要再次启用此功能,请使用

xset +dpms; xset s on

因此-dpms禁用电源节能功能,可以关闭整个显示器并s off关闭X服务器的屏幕保护功能。

这不适用于xscreensaver评论中提到的 。

答案2

你有几个问题,首先,你top每次都需要 2 次迭代,请参阅我的答案这里和错误报告这里

另一个问题是 bash 不执行浮点运算,因此如果您的 CPU 使用率类似于6.2.2则会破坏脚本。 Bash 根本就不是为“复杂”算术运算而设计的。解决这个问题的一种方法是将>5检查移到命令中awk

#!/usr/bin/env bash

sleep_period=60s 

while true; do
    until top -bn 2 -d 0.01 | sed -nrs '8p' | awk '{if($9>5){exit 1}else{exit 0}}'; do
      xdotool mousemove 0 100
      xdotool mousemove 0 50
      sleep ${sleep_period}
    done
   sleep ${sleep_period}
done

答案3

首先,您需要安装 xdotool 和 rand。 Ubuntu 上的示例:

sudo apt install xdotool rand

然后在终端中运行这一行(作为用户):

eval $(xdotool getdisplaygeometry --shell); while true; do xdotool mousemove `rand -M $WIDTH` `rand -M $HEIGHT` && sleep $((`rand -M 300` + 120)); done;

相关内容