使用「滑鼠移動」防止螢幕消隱的腳本不起作用

使用「滑鼠移動」防止螢幕消隱的腳本不起作用

這是我嘗試製作一個腳本,該腳本將使用“滑鼠移動”來防止觀看影片時螢幕空白。我希望使用最高 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;

相關內容