स्क्रिप्ट "माउस चाल" का उपयोग करते हुए स्क्रीन ब्लैंकिंग को रोकने के लिए काम नहीं करता है


9

यह एक स्क्रिप्ट बनाने की मेरी कोशिश है जो वीडियो देखते समय स्क्रीन ब्लैंकिंग को रोकने के लिए "माउस मूव" का उपयोग करेगी। मैं उच्चतम 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

फिर, मैंने उबंटू फ़ोरम में इस कोड को रिपोर्ट किया और वापेल ने इस पर आगे काम किया। नीचे 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

शुरू करने के लिए, -gtपूर्णांक बिंदुओं की अपेक्षा करता है, फ़्लोटिंग पॉइंट नहीं। और मुझे यकीन है कि तुम क्यों प्रयोग कर रहे हैं नहीं कर रहा हूँ ((... ))बल्कि सिर्फ तुलना में [... ]। या आप ट्रिगर के रूप में CPU% का उपयोग क्यों कर रहे हैं ... या यहां तक ​​कि आप किसी शाप कार्यक्रम से CPU% का उपयोग शीर्ष पर क्यों कर रहे हैं जैसे कुछ के बजाय शीर्ष परps -heo %C --sort -%cpu | head -1
cas

5
IMO, आपको यह पता लगाना बेहतर होगा कि आपका वीडियो प्लेयर प्रोग्राम स्क्रीनसेवर को अक्षम क्यों नहीं कर रहा है और इसे ठीक कर रहा है। आप किस खिलाड़ी का उपयोग करते हैं? (जैसे कुलदेवता, vlc, ...) और क्या डेस्कटॉप / विंडो-मैनेजर (सूक्ति, xfce, lxde, kde, अन्य) और कौन सा स्क्रीन-सेवर।
कैस

1
हाँ, मैं पहले vlc / सूक्ति मुद्दों में चला गया। iirc, मैंने xsetराफेल द्वारा सुझाए अनुसार उपयोग करना समाप्त कर दिया।
कैस

4
शायद थोड़ा अधिक संबंधित: xkcd.com/196
DanteTheEgregore

3
क्या मेरा सुझाव है कि आप केवल वीडियो-स्क्रीनिंग को रोकने के लिए एक एप्लिकेशन इंस्टॉल करें जबकि वीडियो चल रहे हैं? मैं कैफीन का उपयोग करता हूं , जो वास्तव में बहुत अच्छी तरह से काम करता है।
धान लैंडौ

जवाबों:


5

आपके पास कुछ मुद्दे हैं, सबसे पहले, आपको topहर बार 2 पुनरावृत्तियों की आवश्यकता होगी , मेरा उत्तर यहां देखें और बग रिपोर्ट यहां देखें

दूसरी समस्या यह है कि बैश फ्लोटिंग पॉइंट नहीं करते हैं, इसलिए यदि आपका सीपीयू उपयोग कुछ ऐसा है 6.2, .2तो स्क्रिप्ट को तोड़ देगा। बैश बस 'जटिल' अंकगणितीय संचालन के लिए डिज़ाइन नहीं किया गया है। इसका एक तरीका यह होगा कि आप >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

9

आप उपयोग कर सकते हैं

xset -dpms; xset s off

स्क्रीन को काला होने से रोकने के लिए।

इसे फिर से सक्षम करने के लिए

xset +dpms; xset s on

तो -dpmsबिजली ऊर्जा की बचत सुविधाओं को निष्क्रिय कर देता है, जो पूरे मॉनिटर को बंद कर सकता है और s offएक्स सर्वर की स्क्रीन सेवर सुविधा को बंद कर सकता है।

यह काम नहीं करता है xscreensaver, जिसका उल्लेख टिप्पणियों में किया गया था।


क्या यह नहीं लगता कि आप उपयोग कर रहे हैं xscreensaver? क्या यह किसी भी स्क्रीनसेवर के साथ काम करेगा ? यहां तक ​​कि डे पसंद हैं gnome-screensaver?
terdon

@terdon जहाँ तक मुझे पता है कि यह सभी प्रकार के स्क्रीनसेवर को निष्क्रिय करता है।
राफेल अहरेंस

मैं कुछ ऐसा चाहता हूं जिसे मेरे हस्तक्षेप की आवश्यकता नहीं है

@ vasa1 जब तक यह आपके स्क्रीनसेवर के लिए काम करता है, इसे आपकी स्क्रिप्ट से अधिक हस्तक्षेप की आवश्यकता नहीं है। आप बस उस कमांड को एक बार चलाएं और स्क्रीनसेवर बंद है।
टेराडो

2
@ vasa1 आप इसके बजाय इसका उपयोग कर सकते हैं xdotool mousemove 0 100
राफेल अहरेंस

0

सबसे पहले, आपको xdotool और रैंड स्थापित करने की आवश्यकता है। उबंटू पर उदाहरण:

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;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.