Сценарій для запобігання затуманення екрана за допомогою "переміщення миші" не працює


9

Це моя спроба зробити сценарій, який використовує "переміщення миші", щоб запобігти затуханню екрана під час перегляду відео. Я сподіваюся використати значення для найвищого відсотка процесора у процесі, topі якщо використання процесора перевищує 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 в якості тригера ... або навіть чому ви витягуєте CPU% використання з програми прокльонів, як топ, а не щось на кшталтps -heo %C --sort -%cpu | head -1
cas

5
IMO, вам краще дізнатися, чому програма вашого відеоплеєра не вимикає заставку і виправити це. Якого гравця ви використовуєте? (наприклад, totem, vlc, ...) і який робочий стіл / вікно-менеджер (gnome, xfce, lxde, kde, інше) та які заставки.
cas

1
так, я раніше стикався з проблемами vlc / gnome. iirc, я закінчив використовувати, xsetяк запропонував Рафаель нижче.
cas

4
Можливо, більше, ніж трохи пов’язаного: xkcd.com/196
DanteTheEgregore

3
Можна запропонувати вам просто встановити програму, щоб запобігти затуманенню екрана під час запуску відео? Я використовую кофеїн , який справді дуже добре працює.
Падді Ландау

Відповіді:


5

У вас є кілька питань, по-перше, вам знадобиться 2 повторення topкожного разу, дивіться мою відповідь тут і повідомлення про помилку тут .

Інша проблема полягає в тому, що bash не працює з плаваючою точкою, тому, якщо використання вашого процесора щось подібне 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

9

Можна використовувати

xset -dpms; xset s off

щоб запобігти чорному екрану.

Щоб увімкнути це знову, використовуйте

xset +dpms; xset s on

Таким чином, -dpmsвимикаються функції енергозбереження, які можуть вимкнути весь монітор та s offвимкнути функцію заставки X сервера.

Це не працює з тим xscreensaver, про що згадувалося в коментарях.


Хіба це не передбачає, що ви використовуєте xscreensaver? Чи буде це працювати з будь-якою заставкою? Навіть такі, як DE gnome-screensaver?
terdon

@terdon Наскільки я знаю, це вимикає всі типи заставки.
Рафаель Аренс

Я хочу те, що не потребує мого втручання

@ vasa1, якщо це працює для вашої заставки, воно не потребує більше втручання, ніж ваш сценарій. Ви просто запускаєте цю команду один раз, і заставка вимкнена.
terdon

2
@ vasa1 ви можете використовувати це замість xdotool mousemove 0 100.
Рафаель Аренс

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;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.