Ini adalah usaha saya untuk membuat skrip yang akan menggunakan "gerakan mouse" untuk mencegah pengosongan layar saat menonton video. Saya berharap untuk menggunakan nilai untuk proses CPU% tertinggi top
dan jika penggunaan CPU melebihi 5%, perpindahan mouse harus terjadi.
#!/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
Sayangnya, itu tidak berhasil. Kesalahannya seperti ini:
[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 ")
Bagaimana cara saya memperbaikinya? (Harap perhatikan bahwa saya tidak berpengalaman dalam skrip.)
Berdasarkan jawaban di sini, saya mengumpulkan:
#!/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
Kemudian, saya melaporkan kode ini di Forum Ubuntu dan Vaphell mengerjakannya lebih lanjut. Di bawah ini adalah versi Vaphell dan apa yang saya gunakan:
#!/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
mengharapkan operan integer, bukan floating point. dan saya tidak yakin mengapa Anda menggunakan((
...))
bukan hanya[
...]
. atau mengapa Anda menggunakan CPU% sebagai pemicunya ... atau bahkan mengapa Anda mengekstraksi utilisasi CPU% dari program kutukan seperti atas daripada sesuatu sepertips -heo %C --sort -%cpu | head -1
xset
seperti yang disarankan oleh Raphael di bawah ini.Jawaban:
Anda memiliki beberapa masalah, pertama, Anda akan membutuhkan 2 iterasi
top
setiap kali, lihat jawaban saya di sini dan laporan bug di sini .Masalah lainnya adalah bahwa bash tidak melakukan floating point, jadi jika penggunaan CPU Anda adalah sesuatu seperti
6.2
,.2
akan merusak skrip. Bash sama sekali tidak dirancang untuk operasi aritmatika 'kompleks'. Salah satu caranya adalah dengan memindahkan>5
cek di dalamawk
perintah Anda :sumber
Kamu bisa menggunakan
untuk menghentikan layar agar tidak hitam.
Untuk mengaktifkannya lagi gunakan
Jadi
-dpms
menonaktifkan fitur hemat energi daya, yang dapat mematikan seluruh monitor dans off
mematikan fitur screen saver dari X server.Ini tidak bekerja dengan
xscreensaver
, yang disebutkan dalam komentar.sumber
xscreensaver
? Apakah ini akan bekerja dengan screensaver apa saja ? Bahkan yang DE sukagnome-screensaver
?xdotool mousemove 0 100
.Pertama, Anda perlu menginstal xdotool & rand. Contoh di Ubuntu:
Kemudian jalankan one-liner ini di terminal (sebagai pengguna):
sumber