Bash-Script
使用“滑鼠移動”防止螢幕空白的腳本不起作用
這是我嘗試製作一個腳本,該腳本將使用“滑鼠移動”來防止在觀看影片時出現螢幕空白。我希望使用最高 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
用於評論中提到的 。