“Fare taşıma” kullanarak ekran kararmasını önleyen komut dosyası çalışmıyor


9

Bu, videoları izlerken ekranın kararmasını önlemek için bir "fare hareketi" kullanacak bir senaryo yapma girişimim. En yüksek CPU% işleminin değerini kullanmayı umuyorum topve CPU kullanımı% 5'i aşarsa, bir fare hareketi gerçekleşmelidir.

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

Ne yazık ki, çalışmıyor. Hatalar şöyle:

[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 ")

Bunu nasıl düzeltirim? (Lütfen komut dosyalarında deneyimli olmadığımı unutmayın.)


Buradaki cevaplara dayanarak bir araya getirdim:

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

Sonra, Ubuntu Forumlarında bu kodu bildirdim ve Vaphell üzerinde daha fazla çalıştı. Aşağıda Vaphell sürümü ve ne kullanıyorum:

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

başlangıç ​​olarak, -gtkayan nokta değil, tamsayı işlenenleri bekler. kullandığınız niçin ve emin değilim ((... ))yerine sadece daha [... ]. veya neden% CPU'yu tetikleyici olarak kullanıyorsunuz ... ya da neden CPU% kullanımını neden böyle bir şey yerine bir curses programından ps -heo %C --sort -%cpu | head -1
çıkarıyorsunuz

5
IMO, video oynatıcı programınızın neden ekran koruyucuyu devre dışı bırakmadığını ve bunu düzeltmediğini öğrenmeniz daha iyi olur. Hangi oyuncuyu kullanıyorsun? (ör. totem, vlc, ...) ve hangi masaüstü / pencere yöneticisi (gnome, xfce, lxde, kde, diğer) ve hangi ekran koruyucu.
cas

1
evet, daha önce vlc / gnome sorunları ile karşılaştım. iirc, xsetRaphael tarafından önerilen şekilde kullanarak sona erdi .
cas

4
Belki biraz daha ilgili: xkcd.com/196
DanteTheEgregore

3
Videolar çalışırken ekran karartmayı önlemek için bir uygulama yüklemenizi önerebilir miyim? Gerçekten çok iyi çalışan Kafein kullanıyorum .
Paddy Landau

Yanıtlar:


5

Birkaç sorununuz var, önce topher seferinde 2 yinelemeye ihtiyacınız olacak , cevabımı buradan ve hata raporunu buradan görebilirsiniz .

Başka bir sorun bash CPU kullanımı gibi bir şey eğer öyleyse, kayan nokta yapmaz ki 6.2, .2senaryoyu kıracak. Bash 'karmaşık' aritmetik işlemler için tasarlanmamıştır. Bunun bir yolu, >5kontrolü awkkomutunuzun içine taşımak olabilir :

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

Kullanabilirsiniz

xset -dpms; xset s off

ekranın kararmasını durdurmak için.

Bunu tekrar etkinleştirmek için şunu kullanın:

xset +dpms; xset s on

Böylece -dpms, tüm monitörü s offkapatabilecek ve X sunucusunun ekran koruyucu özelliğini kapatabilecek güç enerji tasarrufu özelliklerini devre dışı bırakır .

Bu xscreensaver, yorumlarda bahsedilen ile çalışmaz .


Bu kullandığınızı varsaymıyor xscreensavermu? Herhangi bir ekran koruyucu ile çalışır mı? DE olanlar bile gnome-screensaver?
terdon

@terdon Bildiğim kadarıyla bu, her türlü ekran koruyucuyu devre dışı bırakır.
Raphael Ahrens

Müdahalem gerekmeyen bir şey istiyorum

@ vasa1, ekran koruyucunuz için çalıştığı sürece, komut dosyanızdan daha fazla müdahaleye gerek yoktur. Bu komutu bir kez çalıştırırsınız ve ekran koruyucu kapalıdır.
terdon

2
@ vasa1 yerine bunu kullanabilirsiniz xdotool mousemove 0 100.
Raphael Ahrens

0

İlk olarak, xdotool & rand'ı kurmanız gerekir. Ubuntu Örneği:

sudo apt install xdotool rand

Ardından bu tek astarı bir terminalde (kullanıcı olarak) çalıştırın:

eval $(xdotool getdisplaygeometry --shell); while true; do xdotool mousemove `rand -M $WIDTH` `rand -M $HEIGHT` && sleep $((`rand -M 300` + 120)); done;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.