"마우스 이동"을 사용하여 화면 공백을 방지하는 스크립트가 작동하지 않습니다.

"마우스 이동"을 사용하여 화면 공백을 방지하는 스크립트가 작동하지 않습니다.

이것은 비디오를 시청하는 동안 화면 공백을 방지하기 위해 "마우스 이동"을 사용하는 스크립트를 만들려는 시도입니다. 가장 높은 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

그런 다음 이 코드를 Ubuntu 포럼에 보고했고바펠추가로 작업했습니다. 아래는 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

답변1

당신이 사용할 수있는

xset -dpms; xset s off

화면이 검게 변하는 것을 막으려면

이것을 다시 활성화하려면 다음을 사용하십시오.

xset +dpms; xset s on

따라서 -dpms전체 모니터를 끌 수 있는 절전 기능을 비활성화하고 s offX 서버의 화면 보호기 기능을 비활성화합니다.

xscreensaver댓글에서 언급한 에서는 작동하지 않습니다 .

답변2

몇 가지 문제가 있습니다. 먼저 top매번 2번의 반복이 필요합니다. 내 답변을 참조하세요.여기그리고 버그 리포트여기.

또 다른 문제는 bash가 부동 소수점을 수행하지 않는다는 것입니다. 따라서 CPU 사용량이 와 같으면 스크립트가 중단됩니다 6.2. .2Bash는 단순히 '복잡한' 산술 연산을 위해 설계되지 않았습니다. 이를 해결하는 한 가지 방법은 명령 >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

답변3

먼저 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;

관련 정보