
이것은 비디오를 시청하는 동안 화면 공백을 방지하기 위해 "마우스 이동"을 사용하는 스크립트를 만들려는 시도입니다. 가장 높은 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 포럼에 보고했고바펠추가로 작업했습니다. 아래는 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 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;