「マウス移動」を使用して画面が空白になるのを防ぐスクリプトが機能しない

「マウス移動」を使用して画面が空白になるのを防ぐスクリプトが機能しない

これは、ビデオを視聴中に画面が空白になるのを防ぐために「マウスの移動」を使用するスクリプトを作成する試みです。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 のバージョンであり、私が使用しているものです。

#!/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 offX サーバーのスクリーン セーバー機能もオフになります。

xscreensaverこれは、コメントで言及されているでは機能しません。

答え2

いくつか問題があります。まず、top毎回2回の反復が必要になります。私の回答を参照してください。ここバグレポートここ

もう 1 つの問題は、bash は浮動小数点演算を行わないため、CPU 使用率が のような場合6.2、スクリプトが壊れてしまうことです。bash は単純に「複雑な」算術演算用に設計されていません。この問題を回避する 1 つの方法は、チェックをコマンド内に.2移動することです。>5awk

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

関連情報