"마우스 이동"을 사용한 화면 비우기를 방지하는 스크립트가 작동하지 않습니다


9

이것은 "마우스 이동"을 사용하여 비디오를 시청하는 동안 화면 비우기를 방지하는 스크립트를 만들려는 시도입니다. 최고 CPU % 프로세스 값을 사용하고 싶습니다. topCPU 사용량이 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

그런 다음 우분투 포럼 에서이 코드를보고하고 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 %를 트리거로 사용하는지 또는 심지어 왜 당신이 다음과 같은 것이 아니라 top과 같은 curses 프로그램에서 CPU % 이용률을 추출하고 있는지ps -heo %C --sort -%cpu | head -1
cas

5
IMO, 비디오 플레이어 프로그램이 왜 스크린 세이버를 비활성화하지 않는지 알아내는 것이 좋습니다. 어떤 선수를 사용하십니까? (예 : 토템, VLC, ...) 및 데스크탑 / 창 관리자 (그놈, xfce, lxde, kde 등) 및 화면 보호기
cas

1
예, 전에 vlc / gnome 문제가 발생했습니다. iirc, xset아래 Raphael이 제안한대로 사용 했습니다.
cas


3
비디오가 실행되는 동안 화면 비우기를 방지하기 위해 응용 프로그램을 설치하는 것이 좋습니다. 나는 실제로 잘 작동 하는 카페인을 사용 합니다.
Paddy Landau

답변:


5

몇 가지 문제가 있습니다. 먼저 두 번 반복해야 합니다 . 여기에서top 내 대답 과 여기 에서 버그 보고서를 참조하십시오 .

다른 문제는 배시가 CPU 사용량이 같은 것입니다 그렇다면, 부동 소수점하지 않는다는 것입니다 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 내가 아는 한 모든 유형의 화면 보호기를 비활성화합니다.
Raphael Ahrens

내 개입이 필요없는 것을 원합니다

@ vasa1이 스크린 세이버에서 작동하는 한 스크립트보다 더 이상 개입 할 필요가 없습니다. 해당 명령을 한 번만 실행하면 화면 보호기가 꺼집니다.
terdon

2
@ vasa1 대신에 이것을 사용할 수 있습니다 xdotool mousemove 0 100.
Raphael Ahrens

0

먼저 xdotool & rand를 설치해야합니다. 우분투 예제 :

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.