「マウス移動」を使用した画面の非表示を防止するスクリプトが機能しない


9

これは、動画を見ているときに画面が空白にならないようにする「マウスの動き」を使用するスクリプトを作成する私の試みです。で最も高い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

まず、-gt浮動小数点ではなく整数のオペランドが必要です。あなたが使用している理由と私はわからない((... ))というだけよりも[... ]。または、なぜCPU%をトリガーとして使用しているのか...あるいは、なぜかというよりも、cursプログラムからCPU%使用率をtopなどのcursesプログラムから抽出しているのですps -heo %C --sort -%cpu | head -1
cas

5
IMO、ビデオプレーヤープログラムがスクリーンセーバーを無効にしていないことをなぜ修正していないのかを調べた方がいいでしょう。どちらのプレイヤーを使っていますか?(例:トーテム、vlc、...)、どのデスクトップ/ウィンドウマネージャー(gnome、xfce、lxde、kde、その他)とどのスクリーンセーバー。
cas

1
ええ、前にvlc / gnomeの問題に遭遇したことがあります。iirc、私は最終的にxsetRaphaelの提案に従って使用しました。
cas

4
おそらく少し関連しているだけです:xkcd.com/196
DanteTheEgregore

3
ビデオの実行中に画面が消えないようにするためのアプリケーションをインストールすることをお勧めしますか?私はカフェインを使用しています。
Paddy Landau

回答:


5

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

もう1つの問題は、bashが浮動小数点を実行しないことです。そのため、CPU使用率がのようなもの6.2である.2場合、スクリプトが壊れます。Bashは単に「複雑な」算術演算用に設計されていません。これを回避する1つの方法は>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

9

使用できます

xset -dpms; xset s off

画面が黒くならないようにします。

これを再度有効にするには、

xset +dpms; xset s on

したがって-dpms、省電力機能を無効にします。これにより、モニター全体s offがオフになり、Xサーバーのスクリーンセーバー機能がオフになります。

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


それはあなたが使用していると仮定していませんxscreensaverか?スクリーンセーバーで動作しますか?DEでも好きgnome-screensaverですか?
terdon

@terdon私が知る限り、これはすべてのタイプのスクリーンセーバーを無効にします。
Raphael Ahrens

私の介入を必要としない何かが欲しい

@ vasa1これがスクリーンセーバーで機能する限り、スクリプト以外の介入は必要ありません。このコマンドを1回実行するだけで、スクリーンセーバーはオフになります。
terdon

2
@ vasa1の代わりにこれを使用できますxdotool mousemove 0 100
Raphael Ahrens 2013

0

まず、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;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.