Tập lệnh để ngăn chặn việc xóa màn hình bằng cách sử dụng chuột di chuyển


9

Đây là nỗ lực của tôi để tạo một tập lệnh sẽ sử dụng "di chuyển chuột" để ngăn việc xóa màn hình trong khi xem video. Tôi hy vọng sẽ sử dụng giá trị cho quá trình% CPU cao nhất topvà nếu mức sử dụng CPU vượt quá 5%, việc di chuyển chuột sẽ xảy ra.

#!/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

Thật không may, nó không hoạt động. Các lỗi là như thế này:

[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 ")

Làm thế nào để tôi sửa lỗi này? (Xin lưu ý rằng tôi không có kinh nghiệm về kịch bản.)


Dựa trên các câu trả lời ở đây, tôi kết hợp lại với nhau:

#!/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

Sau đó, tôi đã báo cáo mã này tại Diễn đàn Ubuntu và Vaphell đã làm việc với nó hơn nữa. Dưới đây là phiên bản của Vaphell và là những gì tôi đang sử dụng:

#!/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

để bắt đầu, -gtmong đợi toán hạng nguyên, không phải dấu phẩy động. và tôi không chắc chắn lý do tại sao bạn đang sử dụng ((... ))thay vì chỉ [... ]. hoặc tại sao bạn sử dụng CPU% làm trình kích hoạt ... hoặc thậm chí tại sao bạn trích xuất mức sử dụng CPU% từ một chương trình nguyền rủa như trên thay vì một cái gì đó nhưps -heo %C --sort -%cpu | head -1
cas

5
IMO, bạn nên tìm hiểu lý do tại sao chương trình trình phát video của bạn không vô hiệu hóa trình bảo vệ màn hình và khắc phục điều đó. Bạn sử dụng cầu thủ nào? (ví dụ: totem, vlc, ...) và những gì trình quản lý máy tính để bàn / cửa sổ (gnome, xfce, lxde, kde, khác) và trình bảo vệ màn hình nào.
cas

1
vâng, tôi đã gặp vấn đề vlc / gnome trước đây. iirc, tôi đã kết thúc bằng cách sử dụng xsettheo đề xuất của Raphael bên dưới.
cas

4
Có lẽ nhiều hơn một chút liên quan: xkcd.com/196
DanteTheEgregore

3
Tôi có thể đề nghị bạn chỉ cần cài đặt một ứng dụng để ngăn chặn màn hình trong khi video đang chạy không? Tôi sử dụng Caffeine , hoạt động thực sự rất tốt.
Paddy Landau

Câu trả lời:


5

Bạn có một vài vấn đề, đầu tiên, bạn sẽ cần 2 lần lặp topmỗi lần, xem câu trả lời của tôi ở đây và báo cáo lỗi ở đây .

Vấn đề khác là bash không thực hiện dấu phẩy động, vì vậy nếu việc sử dụng CPU của bạn là như thế 6.2, thì .2sẽ phá vỡ tập lệnh. Bash đơn giản là không được thiết kế cho các hoạt động số học 'phức tạp'. Một cách xung quanh điều này sẽ là di chuyển >5kiểm tra bên trong awklệnh của bạn :

#!/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

9

Bạn có thể dùng

xset -dpms; xset s off

để ngăn màn hình chuyển sang màu đen.

Để cho phép điều này một lần nữa sử dụng

xset +dpms; xset s on

Vì vậy, -dpmsvô hiệu hóa các tính năng tiết kiệm năng lượng, có thể tắt toàn bộ màn hình và s offtắt tính năng bảo vệ màn hình của máy chủ X.

Điều này không làm việc với xscreensaver, đã được đề cập trong các ý kiến.


Điều đó không cho rằng bạn đang sử dụng xscreensaver? Nó sẽ hoạt động với bất kỳ trình bảo vệ màn hình? Ngay cả những người DE thích gnome-screensaver?
terdon

@terdon Theo tôi biết điều này vô hiệu hóa tất cả các loại trình bảo vệ màn hình.
Raphael Ahren

Tôi muốn một cái gì đó không cần sự can thiệp của tôi

@ vasa1 miễn là điều này hoạt động cho trình bảo vệ màn hình của bạn, nó không cần can thiệp nhiều hơn tập lệnh của bạn. Bạn chỉ cần chạy lệnh đó một lần và trình bảo vệ màn hình tắt.
terdon

2
@ vasa1 bạn có thể sử dụng cái này thay vì xdotool mousemove 0 100.
Raphael AhDR

0

Đầu tiên, bạn cần cài đặt xdotool & rand. Ví dụ trên Ubuntu:

sudo apt install xdotool rand

Sau đó chạy lớp lót này trong một thiết bị đầu cuối (với tư cách là người dùng):

eval $(xdotool getdisplaygeometry --shell); while true; do xdotool mousemove `rand -M $WIDTH` `rand -M $HEIGHT` && sleep $((`rand -M 300` + 120)); done;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.