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

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

이것은 비디오를 보는 동안 화면이 꺼지는 것을 방지하기 위해 "마우스 움직임"을 사용하는 스크립트를 만들려는 나의 시도입니다. 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 포럼에 이 코드를 보고했습니다.와펠이에 대해 추가 연구가 수행되었습니다. 제가 사용하고 있는 Vapell 버전은 다음과 같습니다.

#!/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스크립트 .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

답변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;

관련 정보