Bir işlem veya uygulama için bir zaman sınırı belirleme
Küçük bir arka plan komut dosyasıyla, bir işlem veya uygulama için bir zaman sınırı belirleyebilirsiniz.
Kullanıcınız yönetici şifresini bilmediği sürece çok kolay aşılmaz.
Aşağıdaki çözüm
Böyle küçük bir arka plan komut dosyasıdır. Komut dosyasının başında ayarlamak için günlük kullanımı belirli bir dakika ile sınırlar. Bir kez (çok zor değil) kurulduktan sonra çok kolay çalışır ve daha sonra herhangi bir ek eyleme gerek yoktur.
Senaryo
#!/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
Nasıl kullanılır
- Masaüstünüzde (veya başka bir yerde) şu adı taşıyan bir klasör oluşturun:
limit
- Komut dosyasını boş bir dosyaya kopyalayın, klasörün içine
limit_use
(uzantı yok) kaydedin ve yürütülebilir yapın
Komut dosyasının başındaki işlem adını sınırlamak ve izin verilen maksimum dakika sayısını düzenleyin. Örnekte:
#--- set the time limit below (minutes)
minutes = 1
#--- set the process name to limit below
app = "gedit"
Klasörü dizine kopyalayın /opt
:
cp -r /path/to/limit /opt
Şimdi /etc/rc.local
, komut dosyasının root
başlangıçta çalışmasını sağlamak için düzenleyin :
sudo -i gedit /etc/rc.local
Çizgiden hemen önce
exit 0
başka bir satır:
/opt/limit/limit_use &
Bu kadar
Birisi arka plan komut dosyasını öldürmeye çalıştığında:
(eyleme izin verilmiyor)
Açıklama; nasıl çalışır
- 10 saniyede bir, komut dosyası, hedeflenen işlemin çalışıp çalışmadığını arar. Öyleyse, bir dosyaya kaydedilecek toplam kullanıma "bir" nokta "ekler (
/opt/limit/uselog
). Günlük sınıra ulaşılırsa, komut dosyası artık işlemin çalışmasına izin vermez ve varsa öldürür.
- Gün değişikliğinde (tarih bir dosyaya kaydedilir, bu nedenle yeniden başlatma yardımcı olmaz), günlük dosyası silinerek yeni bir kullanım süresinin oluşmasına izin verir.
- Komut dosyası önyükleme sırasında çalıştığından,
rc.local
yalnızca sudo ayrıcalıklarına sahip kullanıcı (lar) dan komut dosyası, yalnızca kullanıcı işlem adını biliyorsa bile durdurabilir.
Betiği durdur
Komut dosyasını durdurmak isterseniz, şu komutu kullanın:
sudo kill "$(pgrep limit_use)"
Ama yine de, bunu yapmak için sudo şifresine ihtiyacınız olacak.
DÜZENLE
Komut yukarıdaki gibi @Bytecommander bahsettiği bir uygulamanın kullanımını sınırlayan bir makul güvenli bir yol vermelidir rağmen, olabilir olmasa çok kolay olmak geçmek. Aşağıdaki önlemle kombinasyon, oğlunuz kurulumu bilmedikçe ve Linux / Ubuntu ile oldukça deneyimli değilse, bunun gerçekleşme olasılığını ortadan kaldırır.
Ek önlem
"Basit bir çözümden" biraz daha uzak, ama yine de kurulumu çok zor olmayan aşağıdaki ek önlemdir. Eğer bizim şüphelenilen suçlu komut çağrılır öğrenmek istiyorum /etc/rc.local
, kök olmak, yönetmek ve çizgi ortadan kaldıracaktır /etc/rc.local
, veya yolu, bir sonraki sorun onu karşı karşıya getirebilir o senaryoyu durdurmak mümkün olacaktır: dışarı ekran siyahlar sonra Ayrıca, çözüm, arka plan komut dosyasının yeniden başlatıldıktan sonra 5 dakika sonra çalışıp çalışmadığını kontrol eder, değilse kararır.
Çizgi halinde ekstra önlem bir startup- kontroldür /opt/limit/limit_use &
bulunur /etc/rc.local
, ve komut dosyası hala çalışıyorsa 5 dakika sonra bir çek. Komut dosyası (Başlangıç Uygulamalarından gizlenmiş) başlatıcıdan /etc/xdg/autostart
çalıştığından, nasıl yapıldığını bilmediğiniz sürece ne olduğunu bulmak oldukça zor olacaktır . Bu iki önlemin birleşimi, oğlunuzun öğrenmesini pek mümkün kılmaz ve eğer yaparsa, muhtemelen hiçbir şey onu durduramaz.
Nasıl kurulur
İki basit adım söz konusudur:
Aşağıdaki kodu boş bir dosyaya kopyalayın, blackout.desktop
masaüstünüzdeki gibi kaydedin:
[Desktop Entry]
Name=not allowed
Exec=/bin/bash -c "sleep 15 && /usr/local/bin/blackout.py"
Type=Application
Terminal=false
NoDisplay=true
Dosyayı şuraya kopyalayın /etc/xdg/autostart
:
sudo cp /path/to/blackout.desktop /etc/xdg/autostart
Aşağıdaki komut dosyasını boş bir dosyaya kopyalayın, blackout.py
masaüstünüze kaydedin, yürütülebilir yapın ve kopyalayın /usr/local/bin
:
cp /path/to/blackout.py /usr/local/bin
Senaryo
#!/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()
açıklama
İçindeki başlatıcılar, /etc/xdg/autostart
tüm kullanıcılar için bir uygulama başlatır (bu durumda ekstra güvenlik kontrolü). Bu olabilir lokal üzerine yazılır olabilir, ama bunu yapmak zorunda biliyorum çalışır yukarı çek. Çizgiyi NoDisplay=true
fırlatıcımıza koyarak, yerel olarak görünmeyecektir Startup Applications
, bu yüzden var olduğunu bilmeden keşfedilmesi olası değildir.
Dahası, oğlunuzun bulması için sadece 15 saniyesi vardır (o zaman ekran kararır), bu yüzden cömert değilse, Ubuntu ve yaratıcı bir zihinle ilgili çok fazla deneyimi vardır.