"মাউস মুভ" ব্যবহার করে পর্দা ফাঁকা রোধে স্ক্রিপ্ট কাজ করে না


9

এটি এমন একটি স্ক্রিপ্ট তৈরি করার আমার প্রচেষ্টা যা ভিডিওগুলি দেখার সময় স্ক্রীন ফাঁকা রোধ করতে "মাউস মুভ" ব্যবহার করবে। আমি সর্বাধিক সিপিইউ% প্রসেসের মানটি ব্যবহার করার আশা করছি topএবং যদি সিপিইউ ব্যবহার 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

তারপরে, আমি এই কোডটি উবুন্টু ফোরামগুলিতে জানিয়েছি এবং ভ্যাফেল এটিতে আরও কাজ করেছে। নীচে ভ্যাফেলের সংস্করণ রয়েছে এবং এটি আমি ব্যবহার করছি:

#!/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- র% ব্যবহার আহরণ করছিps -heo %C --sort -%cpu | head -1
CA গুলির

5
আইএমও, আপনার ভিডিও প্লেয়ার প্রোগ্রাম কেন স্ক্রিনসেভারটি অক্ষম করছে না এবং তা স্থির করে তা খুঁজে বের করা ভাল। আপনি কোন খেলোয়াড় ব্যবহার করেন? (যেমন টোটেম, ভিএলসি, ...) এবং কী ডেস্কটপ / উইন্ডো-ম্যানেজার (জিনোম, এক্সএফসি, এলএক্সডি, কেডি, অন্যান্য) এবং কোন স্ক্রিন-সেভার।
ক্যাস

1
হ্যাঁ, আমি আগে ভিএলসি / জিনোম ইস্যুগুলিতে চলে এসেছি। আমি, xsetনীচে রাফেল পরামর্শ মত ব্যবহার করে শেষ ।
ক্যাস

4
সম্ভবত কিছুটা সম্পর্কিত সম্পর্কিত: xkcd.com/196
দান্তেএগ্রিগোর

3
আমি কী সুপারিশ করতে পারি যে ভিডিও চলমান অবস্থায় আপনি কেবল স্ক্রীন-ফাঁকা রোধ করতে কোনও অ্যাপ্লিকেশন ইনস্টল করবেন? আমি ক্যাফিন ব্যবহার করি , যা সত্যই খুব ভাল কাজ করে।
ধানের ল্যান্ডাউ

উত্তর:


5

আপনি বিষয় একটি দম্পতি, প্রথম, আপনি 2 পুনরাবৃত্তিও করতে হবে আছে top, প্রতিটি সময় আমার উত্তর দেখুন এখানে এবং বাগ রিপোর্ট এখানে

অন্যান্য সমস্যা হল ব্যাশ তাই যদি আপনার CPU ব্যবহারের মত কিছু ফ্লোটিং পয়েন্ট করে না, হয় 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 যতদূর আমি জানি এটি সমস্ত ধরণের স্ক্রিনসেভারকে অক্ষম করে।
রাফেল অ্যারেনস

আমি এমন কিছু চাই যা আমার হস্তক্ষেপের প্রয়োজন না

@ 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;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.