Tetapkan batas waktu pada suatu proses atau aplikasi
Dengan skrip latar belakang kecil, Anda dapat menetapkan batas waktu pada suatu proses atau aplikasi.
Selama pengguna Anda tidak mengetahui kata sandi administrator , itu tidak terlampau mudah.
Solusinya di bawah ini
Apakah skrip latar belakang kecil. Ini membatasi penggunaan per hari untuk jumlah menit yang ditentukan, untuk ditetapkan di kepala skrip. Setelah diatur (yang tidak terlalu sulit) itu berjalan sangat mudah, dan tidak ada tindakan tambahan yang diperlukan setelah itu.
Naskah
#!/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
Cara Penggunaan
- Di desktop Anda (atau di mana pun), buat folder dengan nama:
limit
- Salin skrip ke file kosong, simpan sebagai
limit_use
(tidak ada ekstensi) di dalam folder dan membuatnya dapat dieksekusi
Edit di kepala skrip nama proses untuk dibatasi, dan jumlah menit maksimum yang diizinkan. Dalam contoh:
#--- set the time limit below (minutes)
minutes = 1
#--- set the process name to limit below
app = "gedit"
Salin folder ke direktori /opt
:
cp -r /path/to/limit /opt
Sekarang edit /etc/rc.local
untuk membuat skrip menjalankannya seperti root
pada saat startup:
sudo -i gedit /etc/rc.local
Tepat sebelum garis
exit 0
baris lain:
/opt/limit/limit_use &
Itu dia
Ketika seseorang mencoba membunuh skrip latar belakang:
(tindakan tidak diizinkan)
Penjelasan; bagaimana itu bekerja
- Sekali per 10 detik, skrip terlihat jika proses yang ditargetkan berjalan. Jika demikian, itu "menambahkan" satu "titik" ke total penggunaan, untuk direkam dalam file (
/opt/limit/uselog
). Jika batas harian tercapai, skrip tidak lagi memungkinkan proses untuk berjalan, mematikannya jika ada.
- Pada perubahan hari (tanggal dicatat dalam file, jadi reboot tidak akan membantu), file log dihapus, memungkinkan jumlah waktu penggunaan yang baru untuk membangun.
- Karena skrip berjalan saat boot , dari
rc.local
hanya pengguna yang memiliki hak sudo dapat menghentikan skrip, bahkan hanya jika pengguna mengetahui nama proses.
Hentikan skripnya
Jika Anda ingin menghentikan skrip, gunakan perintah:
sudo kill "$(pgrep limit_use)"
Tetapi sekali lagi, Anda memerlukan kata sandi sudo untuk melakukannya.
EDIT
Meskipun skrip di atas harus menyediakan cara yang cukup aman untuk membatasi penggunaan aplikasi, seperti yang disebutkan oleh @Bytecommander, itu bisa dilampaui, meskipun tidak terlalu mudah. Kombinasi dengan ukuran di bawah ini akan membuatnya sangat tidak mungkin bahwa ini akan terjadi, kecuali anak Anda mengetahui pengaturannya, dan cukup berpengalaman dengan Linux / Ubuntu.
Ukuran tambahan
Sedikit lebih jauh dari "solusi sederhana", tetapi masih tidak terlalu sulit untuk diatur adalah langkah tambahan di bawah ini. Jika tersangka kenakalan kami akan mengetahui skrip dipanggil /etc/rc.local
, akan berhasil menjadi root, dan menghapus baris /etc/rc.local
, atau akan dapat menghentikan skrip seperti itu, kita dapat menghadapinya dengan masalah berikutnya: layar mati setelah log in. Selain itu, solusinya memeriksa apakah skrip latar belakang berjalan setelah 5 menit setelah restart, pingsan jika tidak.
Ukuran ekstra adalah pemeriksaan startup-jika garis /opt/limit/limit_use &
hadir /etc/rc.local
, dan cek setelah 5 menit jika skrip masih berjalan. Karena skrip dijalankan dari peluncur (tersembunyi dari Aplikasi Startup) di /etc/xdg/autostart
dalamnya akan sangat sulit untuk mengetahui apa yang terjadi, kecuali jika Anda tahu cara melakukannya. Kombinasi dari kedua langkah ini membuat anak Anda tidak mungkin mengetahuinya, dan jika dia melakukannya, mungkin tidak ada yang akan menghentikannya.
Cara mengatur
Dua langkah sederhana terlibat:
Salin kode di bawah ini ke file kosong, simpan seperti blackout.desktop
di desktop Anda:
[Desktop Entry]
Name=not allowed
Exec=/bin/bash -c "sleep 15 && /usr/local/bin/blackout.py"
Type=Application
Terminal=false
NoDisplay=true
Salin file ke /etc/xdg/autostart
:
sudo cp /path/to/blackout.desktop /etc/xdg/autostart
Salin skrip di bawah ini ke file kosong, simpan sebagai blackout.py
di desktop Anda, buat itu dapat dieksekusi dan salin ke /usr/local/bin
:
cp /path/to/blackout.py /usr/local/bin
Naskah
#!/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()
Penjelasan
Peluncur di /etc/xdg/autostart
akan meluncurkan aplikasi (dalam hal ini pemeriksaan keamanan tambahan) untuk semua pengguna. Ini bisa ditimpa secara lokal, tetapi Anda harus tahu proses pemeriksaan berjalan. Dengan menempatkan garis NoDisplay=true
ke peluncur kami, itu tidak akan muncul secara lokal Startup Applications
, jadi tanpa mengetahuinya, itu tidak mungkin ditemukan.
Selain itu, putra Anda hanya memiliki waktu 15 detik untuk mengetahuinya (kemudian layarnya gelap) sehingga ia akan memiliki masalah serius, kecuali ia jenius, memiliki banyak pengalaman dengan Ubuntu dan pikiran kreatif.