Bash-Script

使用“滑鼠移動”防止螢幕空白的腳本不起作用

  • April 11, 2018

這是我嘗試製作一個腳本,該腳本將使用“滑鼠移動”來防止在觀看影片時出現螢幕空白。我希望使用最高 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 論壇上報告了這段程式碼,Vaphell進一步研究了它。以下是 Vaphell 的版本,也是我正在使用的版本:

#!/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

您有幾個問題,首先,您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

您可以使用

xset -dpms; xset s off

阻止螢幕變黑。

要再次啟用此功能,請使用

xset +dpms; xset s on

所以-dpms禁用了省電功能,可以關閉整個顯示器並s off關閉X伺服器的螢幕保護功能。

這不適xscreensaver用於評論中提到的 。

引用自:https://unix.stackexchange.com/questions/91249