एक प्रक्रिया या आवेदन पर एक समय-सीमा निर्धारित करें
एक छोटी पृष्ठभूमि स्क्रिप्ट के साथ, आप एक प्रक्रिया या अनुप्रयोग पर एक समय-सीमा निर्धारित कर सकते हैं।
जब तक आपके उपयोगकर्ता को व्यवस्थापक का पासवर्ड नहीं पता होता है , तब तक इसे आसानी से पार नहीं किया जाता है।
नीचे दिया गया उपाय
इतनी छोटी पृष्ठभूमि की पटकथा है। यह स्क्रिप्ट के प्रमुख में सेट करने के लिए प्रति दिन उपयोग को परिभाषित संख्या तक सीमित करता है । एक बार सेट अप (जो बहुत मुश्किल नहीं है) यह बहुत आसान है, और बाद में कोई अतिरिक्त कार्रवाई की आवश्यकता नहीं है।
लिपी
#!/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 पासवर्ड की आवश्यकता होगी।
संपादित करें
यद्यपि उपरोक्त स्क्रिप्ट को किसी अनुप्रयोग के उपयोग को सीमित करने का एक सुरक्षित तरीका प्रदान करना चाहिए, जैसा कि @Bytecommander द्वारा बताया गया है, इसे पार किया जा सकता है, हालांकि बहुत आसानी से नहीं। नीचे दिए गए माप के साथ संयोजन यह बहुत संभावना नहीं बनाएगा कि यह तब तक होगा, जब तक कि आपके बेटे को सेटअप का पता न चले, और लिनक्स / उबंटू के साथ काफी अनुभवी है।
अतिरिक्त उपाय
एक "सरल समाधान" से थोड़ा आगे, लेकिन अभी भी स्थापित करने के लिए बहुत मुश्किल नहीं है नीचे अतिरिक्त उपाय है। अगर हमारे संदिग्ध अपराधी को यह पता चलेगा कि स्क्रिप्ट को कहा जाता है /etc/rc.local
, तो रूट बनने का प्रबंधन करेगा, और लाइन को अंदर हटा देगा /etc/rc.local
, या इस तरह से स्क्रिप्ट को रोकने में सक्षम होगा, हम उसे अगली समस्या से सामना कर सकते हैं: स्क्रीन के बाद ब्लैक आउट लॉग इन करें। इसके अतिरिक्त, समाधान की जाँच करता है कि पृष्ठभूमि स्क्रिप्ट फिर से शुरू होने के 5 मिनट बाद चल रही है, यदि नहीं तो बाहर ब्लैकिंग।
अतिरिक्त माप एक स्टार्टअप है - चेक करें कि क्या लाइन /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
सभी उपयोगकर्ताओं के लिए लांचर एक एप्लिकेशन लॉन्च करेंगे (इस मामले में अतिरिक्त सुरक्षा जांच)। यह स्थानीय रूप से अधिलेखित किया जा सकता है, लेकिन आपको चेक अप रन को जानना होगा। NoDisplay=true
हमारे लॉन्चर में लाइन डालने से , यह स्थानीय रूप से दिखाई नहीं देगा Startup Applications
, इसलिए यह जाने बिना कि यह मौजूद होने की संभावना नहीं है।
इसके अलावा, आपके बेटे के पास यह पता लगाने के लिए केवल 15 सेकंड हैं (तब स्क्रीन को ब्लैक आउट किया जाता है), इसलिए उसे एक गंभीर समस्या होगी, जब तक कि वह एक जीनियस न हो, उसे उबंटू और रचनात्मक दिमाग के साथ बहुत अनुभव है।