이것은 비디오를 보는 동안 화면이 꺼지는 것을 방지하기 위해 "마우스 움직임"을 사용하는 스크립트를 만들려는 나의 시도입니다. CPU%가 가장 높은 프로세스의 값을 사용하고 싶은데 top
CPU 사용량이 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 off
X 서버의 화면 보호기도 꺼집니다.
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;