这是我尝试制作一个脚本,该脚本将使用“鼠标移动”来防止在观看视频时出现屏幕空白。我希望使用最高 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
Run Code Online (Sandbox Code Playgroud)
不幸的是,它不起作用。错误是这样的:
[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 ")
Run Code Online (Sandbox Code Playgroud)
我该如何解决?(请注意,我没有编写脚本的经验。)
根据这里的答案,我汇总了:
#!/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
Run Code Online (Sandbox Code Playgroud)
然后,我在 Ubuntu 论坛上报告了这段代码,Vapell进一步研究了它。以下是 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
Run Code Online (Sandbox Code Playgroud)
您可以使用
xset -dpms; xset s off
Run Code Online (Sandbox Code Playgroud)
阻止屏幕变黑。
要再次启用此功能,请使用
xset +dpms; xset s on
Run Code Online (Sandbox Code Playgroud)
所以-dpms禁用电源节能功能,可以关闭整个显示器并s off关闭X服务器的屏幕保护功能。
这不适xscreensaver用于评论中提到的 。
你有几个问题,第一,你将需要2次迭代的top每一次,看到我的答案在这里和bug报告在这里。
另一个问题是 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
Run Code Online (Sandbox Code Playgroud)