To jest moja próba stworzenia skryptu, który użyje „ruchu myszy”, aby zapobiec wygaszaniu ekranu podczas oglądania filmów. Mam nadzieję, że użyję wartości najwyższego procesora w%, top
a jeśli użycie procesora przekroczy 5%, powinien nastąpić ruch myszy.
#!/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
Niestety nie działa. Błędy są następujące:
[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 ")
Jak to naprawić? (Uwaga: nie mam doświadczenia w pisaniu skryptów).
Na podstawie odpowiedzi tutaj zestawiłem:
#!/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
Następnie zgłosiłem ten kod na forach Ubuntu i Vaphell dalej nad nim pracował. Poniżej znajduje się wersja Vaphell i używam jej:
#!/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
oczekuje operandów całkowitoliczbowych, a nie zmiennoprzecinkowych. I nie jestem pewien, dlaczego używasz((
...))
a nie tylko[
...]
. lub dlaczego używasz CPU% jako wyzwalacza ... lub nawet dlaczego wyodrębniasz wykorzystanie CPU% z programu przekleństw, takiego jak top, a nie coś w stylups -heo %C --sort -%cpu | head -1
xset
jak sugeruje Raphael poniżej.Odpowiedzi:
Masz kilka problemów, po pierwsze, będziesz potrzebować 2 iteracji za
top
każdym razem, zobacz moją odpowiedź tutaj i raport o błędzie tutaj .Innym problemem jest to, że bash nie robi liczb zmiennoprzecinkowych, więc jeśli użycie procesora jest podobne
6.2
,.2
spowoduje to uszkodzenie skryptu. Bash po prostu nie jest przeznaczony do „złożonych” operacji arytmetycznych. Jednym ze sposobów może być przesunięcie>5
czeku wewnątrzawk
polecenia:źródło
Możesz użyć
aby zatrzymać przyciemnianie ekranu.
Aby włączyć to ponownie, użyj
-dpms
Wyłącza więc funkcje oszczędzania energii, które mogą wyłączyć cały monitor is off
wyłączyć funkcję wygaszacza ekranu serwera X.To nie działa z
xscreensaver
, o którym wspomniano w komentarzach.źródło
xscreensaver
? Czy będzie działać z dowolnym wygaszaczem ekranu? Nawet DE takie jakgnome-screensaver
?xdotool mousemove 0 100
.Najpierw musisz zainstalować xdotool & rand. Przykład na Ubuntu:
Następnie uruchom ten jeden wiersz w terminalu (jako użytkownik):
źródło