কোনও প্রক্রিয়া বা অ্যাপ্লিকেশনটিতে সময়সীমা নির্ধারণ করুন
একটি ছোট ব্যাকগ্রাউন্ড স্ক্রিপ্টের সাহায্যে আপনি কোনও প্রক্রিয়া বা অ্যাপ্লিকেশনটিতে একটি সময়সীমা নির্ধারণ করতে পারেন।
আপনার ব্যবহারকারী যতক্ষণ প্রশাসকের পাসওয়ার্ড জানেন না, ততক্ষণ এটি খুব সহজে ছাড়িয়ে যায় না।
নীচের সমাধান
যেমন একটি ছোট পটভূমি স্ক্রিপ্ট। স্ক্রিপ্টের শিরোনামে সেট করতে এটি প্রতিদিন নির্ধারিত মিনিটের সীমাতে ব্যবহারের সীমাবদ্ধ করে । একবার সেটআপ হয়ে গেলে (যা খুব বেশি কঠিন নয়) এটি খুব সহজভাবে চলে এবং পরে কোনও অতিরিক্ত পদক্ষেপের প্রয়োজন হয় না।
এই পান্ডুলিপি
#!/usr/bin/python3
import subprocess
import os
import sys
import time
#--- set the time limit below (minutes)
minutes = 1
#--- set the process name to limit below
app = "gedit"
uselog = "/opt/limit/uselog"
datefile = "/opt/limit/currdate"
def read(f):
try:
return int(open(f).read().strip())
except FileNotFoundError:
pass
currday1 = read(datefile)
while True:
time.sleep(10)
currday2 = int(time.strftime("%d"))
# check if the day has changed, to reset the used quantum
if currday1 != currday2:
open(datefile, "wt").write(str(currday2))
try:
os.remove(uselog)
except FileNotFoundError:
pass
try:
# if the pid of the targeted process exists, add a "tick" to the used quantum
pid = subprocess.check_output(["pgrep", app]).decode("utf-8").strip()
n = read(uselog)
n = n + 1 if n != None else 0
# when time exceeds the permitted amount, kill the process
if n > minutes*6:
subprocess.Popen(["kill", pid])
open(uselog, "wt").write(str(n))
except subprocess.CalledProcessError:
pass
currday1 = currday2
কিভাবে ব্যবহার করে
- আপনার ডেস্কটপে (বা অন্য কোথাও), নামের একটি ফোল্ডার তৈরি করুন:
limit
- স্ক্রিপ্টটি খালি ফাইলে অনুলিপি করুন, এটি ফোল্ডারের অভ্যন্তরে
limit_use
(কোনও এক্সটেনশন নয়) হিসাবে সংরক্ষণ করুন এবং সম্পাদনযোগ্য করুন
স্ক্রিপ্টের শিরোনামে প্রক্রিয়াটির নাম সীমাবদ্ধ করতে এবং সর্বাধিক অনুমোদিত মিনিটের সংখ্যাটি সম্পাদনা করুন। উদাহরণে:
#--- set the time limit below (minutes)
minutes = 1
#--- set the process name to limit below
app = "gedit"
ডিরেক্টরিতে ফোল্ডারটি অনুলিপি করুন /opt
:
cp -r /path/to/limit /opt
/etc/rc.local
স্ক্রিপ্টটি এটি root
শুরুতে চালানোর জন্য সম্পাদনা করুন:
sudo -i gedit /etc/rc.local
লাইনের ঠিক আগে
exit 0
অন্য লাইন:
/opt/limit/limit_use &
এটাই
যখন কেউ ব্যাকগ্রাউন্ড স্ক্রিপ্টটি হত্যার চেষ্টা করে:
(ক্রিয়াকলাপ অনুমোদিত নয়)
ব্যাখ্যা; কিভাবে এটা কাজ করে
- প্রতি 10 সেকেন্ডে একবার, স্ক্রিপ্টটি লক্ষ্যযুক্ত প্রক্রিয়াটি চলছে কিনা তা দেখায়। যদি তা হয় তবে এটি একটি ফাইলে (
/opt/limit/uselog
) রেকর্ড করার জন্য মোট ব্যবহারের সাথে "একটি" পয়েন্ট যোগ করে । যদি দিনের সীমাবদ্ধতা পৌঁছে যায়, স্ক্রিপ্টটি আর প্রক্রিয়াটি চালানোর অনুমতি দেয় না, এটি উপস্থিত থাকলে হত্যা করে।
- দিন পরিবর্তনে (তারিখটি একটি ফাইলে রেকর্ড করা থাকে, সুতরাং পুনরায় বুট করা সাহায্য করবে না), লগ ফাইলটি মুছে ফেলা হবে, ব্যবহারের সময়কে নতুন পরিমাণে তৈরি করার অনুমতি দেয়।
- যেহেতু স্ক্রিপ্টটি বুট আপ চলমান ,
rc.local
কেবলমাত্র সুডো সুবিধাযুক্ত ব্যবহারকারী (গুলি) থেকে স্ক্রিপ্টটি থামানো যাবে, তারপরেও যদি ব্যবহারকারী প্রক্রিয়াটির নাম জানেন।
স্ক্রিপ্ট বন্ধ করুন
আপনি যদি স্ক্রিপ্টটি থামাতে চান, কমান্ডটি ব্যবহার করুন:
sudo kill "$(pgrep limit_use)"
তবে আবার, আপনার এটি করতে sudo পাসওয়ার্ড প্রয়োজন।
সম্পাদনা
যদিও উপরের স্ক্রিপ্টটি কোনও অ্যাপ্লিকেশনটির ব্যবহার সীমিত করার পক্ষে যুক্তিসঙ্গত সুরক্ষিত উপায় সরবরাহ করতে হবে , যেমনটি @ বাইটকমন্ডার দ্বারা উল্লিখিত হয়েছে, এটি খুব সহজেই না পেরেও ছাড়িয়ে যেতে পারে। নীচের পরিমাপের সাথে সংমিশ্রণটি এটিকে খুব সম্ভবত অসম্ভব করে তুলবে যে যদি না আপনার পুত্র সেটআপটি জানেন এবং লিনাক্স / উবুন্টুতে বেশ অভিজ্ঞ হন is
অতিরিক্ত পরিমাপ
"সাধারণ সমাধান" থেকে কিছুটা দূরে, তবে এখনও সেটআপ করা খুব কঠিন নয় নীচে অতিরিক্ত পরিমাপ। তাহলে আমাদের সন্দেহভাজন অপরাধী খুঁজে বের করতে হবে স্ক্রিপ্ট থেকে বলা হয় /etc/rc.local
, রুট পরিণত পরিচালনা হবে, এবং লাইন অপসারণ /etc/rc.local
, বা স্ক্রিপ্ট বন্ধ করতে এই ভাবে, আমরা পরের সমস্যা তাকে মুখোমুখি করতে সক্ষম হবে: আউট পর্দা ব্ল্যাক্স পর লগ ইন করুন। অতিরিক্তভাবে, সমাধানটি পুনঃসূচনা করার 5 মিনিট পরে পটভূমি স্ক্রিপ্ট চলমান আছে কিনা তা পরীক্ষা করে দেখুন not
অতিরিক্ত পরিমাপই startup- চেক যদি লাইন /opt/limit/limit_use &
উপস্থিত /etc/rc.local
, এবং 5 মিনিট পরে একটি চেক যদি স্ক্রিপ্ট এখনও চালায়। যেহেতু স্ক্রিপ্টটি কোনও (স্টার্টআপ অ্যাপ্লিকেশন থেকে লুকানো) থেকে চালিত হয়েছে /etc/xdg/autostart
তাতে কী হচ্ছে তা সন্ধান করা বেশ কঠিন হবে, যদি না আপনি এটি জানেন কী না। এই দুটি পদক্ষেপের সংমিশ্রণটি আপনার পুত্রের সন্ধানের সম্ভাবনা কমিয়ে দেয় এবং যদি তিনি তা করেন তবে সম্ভবত কিছুই তাকে থামবে না।
কিভাবে বসাব
দুটি সহজ পদক্ষেপ জড়িত:
একটি খালি ফাইলে নীচের কোডটি অনুলিপি করুন, এটি blackout.desktop
আপনার ডেস্কটপের মতো সংরক্ষণ করুন:
[Desktop Entry]
Name=not allowed
Exec=/bin/bash -c "sleep 15 && /usr/local/bin/blackout.py"
Type=Application
Terminal=false
NoDisplay=true
এতে ফাইলটি অনুলিপি করুন /etc/xdg/autostart
:
sudo cp /path/to/blackout.desktop /etc/xdg/autostart
নীচের স্ক্রিপ্টটি একটি খালি ফাইলে অনুলিপি করুন, এটি blackout.py
আপনার ডেস্কটপের মতো সংরক্ষণ করুন, কার্যকর করুন এবং এতে অনুলিপি করুন /usr/local/bin
:
cp /path/to/blackout.py /usr/local/bin
এই পান্ডুলিপি
#!/usr/bin/env python3
import subprocess
import time
def dim_screen():
screen = [
l.split()[0] for l in subprocess.check_output(["xrandr"]).decode("utf-8").splitlines()\
if " connected" in l
]
for scr in screen:
subprocess.Popen(["xrandr", "--output", scr, "--brightness", "0"])
if not "/opt/limit/limit_use &" in open("/etc/rc.local").read():
dim_screen()
time.sleep(300)
try:
pid = subprocess.check_output(["pgrep", "limit_use"]).decode("utf-8").strip()
except subprocess.CalledProcessError:
dim_screen()
ব্যাখ্যা
মধ্যে লঞ্চার /etc/xdg/autostart
সকল ব্যবহারকারীর জন্য একটি অ্যাপ্লিকেশন (এই ক্ষেত্রে অতিরিক্ত নিরাপত্তার আপ check- মধ্যে) শুরু করবে। এই পারে স্থানীয়ভাবে ওভাররাইট, কিন্তু আপনি করতে হবে জানি রান চেক আপ। NoDisplay=true
আমাদের লঞ্চারে লাইনটি স্থাপন করে , এটি স্থানীয়ভাবে উপস্থিত হবে না Startup Applications
, সুতরাং এটি অজানা ছাড়া এটি আবিষ্কার হওয়ার সম্ভাবনা নেই।
তদুপরি, আপনার ছেলের সন্ধানের জন্য কেবল 15 সেকেন্ড সময় রয়েছে (তারপরে পর্দাটি কালো হয়ে গেছে) তাই তিনি গুরুতর সমস্যা হবেন, যদি না তিনি বৌদ্ধ না হন তবে উবুন্টু এবং সৃজনশীল মনের সাথে প্রচুর অভিজ্ঞতা থাকতে পারে।