Lo script per impedire il blanking dello schermo usando "mossa del mouse" non funziona


9

Questo è il mio tentativo di creare uno script che utilizzerà una "mossa del mouse" per impedire la cancellazione dello schermo durante la visione di video. Spero di utilizzare il valore per il processo% CPU più elevato tope se l'utilizzo della CPU supera il 5%, dovrebbe verificarsi uno spostamento del mouse.

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

Sfortunatamente, non funziona. Gli errori sono così:

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

Come posso risolvere questo problema? (Nota che non ho esperienza di scripting.)


Sulla base delle risposte qui, ho messo insieme:

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

Quindi, ho segnalato questo codice ai forum di Ubuntu e Vaphell ci ha lavorato ulteriormente. Di seguito è la versione di Vaphell ed è quello che sto usando:

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

per cominciare, si -gtaspetta operandi interi, non in virgola mobile. e io non sono sicuro perché si sta utilizzando ((... ))e non solo [... ]. o perché stai usando CPU% come trigger ... o anche perché stai estraendo l'utilizzo della CPU% da un programma maledetto come top piuttosto che qualcosa del genereps -heo %C --sort -%cpu | head -1
cas

5
IMO, faresti meglio a scoprire perché il tuo programma di riproduzione video non sta disabilitando lo screensaver e risolvendolo. Quale giocatore usi? (es. totem, vlc, ...) e quale desktop / window-manager (gnome, xfce, lxde, kde, altro) e quale screen saver.
Cas

1
Sì, mi sono imbattuto in problemi di vlc / gnome prima. Iirc, ho finito per usare xsetcome suggerito da Raffaello di seguito.
Cas

4
Forse più che un po 'correlato: xkcd.com/196
DanteTheEgregore,

3
Posso suggerire di installare semplicemente un'applicazione per impedire la cancellazione dello schermo mentre i video sono in esecuzione? Uso la caffeina , che funziona davvero molto bene.
Paddy Landau,

Risposte:


5

Hai un paio di problemi, in primo luogo, avrai bisogno di 2 iterazioni di topogni volta, vedi la mia risposta qui e la segnalazione di bug qui .

L'altro problema è che bash non fa virgola mobile, quindi se l'utilizzo della CPU è simile 6.2, .2si romperà lo script. Bash semplicemente non è progettato per operazioni aritmetiche "complesse". Un modo per aggirare questo sarebbe spostare il >5controllo all'interno del tuo awkcomando:

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

Puoi usare

xset -dpms; xset s off

per evitare che lo schermo diventi nero.

Per abilitare nuovamente questo uso

xset +dpms; xset s on

Quindi -dpmsdisabilita le funzionalità di risparmio energetico, che possono spegnere l'intero monitor e s offdisattivare la funzione di screen saver del server X.

Questo non funziona con il xscreensaver, che è stato menzionato nei commenti.


Non presume che tu stia usando xscreensaver? Funzionerà con qualsiasi salvaschermo? Anche a quelli come DE gnome-screensaver?
terdon

@terdon Per quanto ne so, questo disabilita tutti i tipi di salvaschermi.
Raphael Ahrens,

Voglio qualcosa che non abbia bisogno del mio intervento

@ vasa1 fintanto che funziona per il tuo salvaschermo, non ha bisogno di più interventi del tuo script. Basta eseguire quel comando una volta e lo screensaver è spento.
terdon

2
@ vasa1 potresti usare questo invece di xdotool mousemove 0 100.
Raphael Ahrens,

0

Innanzitutto, devi installare xdotool & rand. Esempio su Ubuntu:

sudo apt install xdotool rand

Quindi eseguire questo one-liner in un terminale (come utente):

eval $(xdotool getdisplaygeometry --shell); while true; do xdotool mousemove `rand -M $WIDTH` `rand -M $HEIGHT` && sleep $((`rand -M 300` + 120)); done;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.