프로세스 또는 애플리케이션에 대한 시간 제한 설정
작은 백그라운드 스크립트를 사용하면 프로세스 또는 응용 프로그램에 시간 제한을 설정할 수 있습니다.
사용자가 관리자의 비밀번호를 모르면 너무 쉽게 넘어 가지 않습니다.
아래 솔루션
그런 작은 배경 스크립트입니다. 스크립트 헤드에서 설정하기 위해 하루 사용량 을 정의 된 시간 (분)으로 제한합니다 . 일단 설정하면 (너무 어렵지 않음) 매우 쉽게 실행되며 나중에 추가 조치가 필요하지 않습니다.
스크립트
#!/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는 권한을 가진 유일한 사용자 (들).
스크립트를 중지
스크립트를 중지하려면 다음 명령을 사용하십시오.
sudo kill "$(pgrep limit_use)"
그러나 다시, 그렇게하려면 sudo 비밀번호가 필요합니다.
편집하다
위의 스크립트는 @Bytecommander가 언급했듯이 응용 프로그램의 사용을 제한하는 합리적으로 안전한 방법을 제공해야 하지만 매우 쉽지는 않지만 능가 할 수 있습니다. 아래 측정 값과 함께 사용하면 아들 이 설정을 알고 Linux / Ubuntu에 익숙 하지 않은 경우 이런 일이 발생할 가능성이 거의 없습니다 .
추가 측정
"간단한 솔루션"에서 조금 더 멀었지만 설정하기가 여전히 어렵지 않은 것은 아래 의 추가 조치입니다. 경우 우리의 의심 연체 스크립트가 호출 찾을 것입니다 /etc/rc.local
, 루트되기 위해 관리하고있는 줄을 제거 것 /etc/rc.local
, 또는 방법은, 우리가 다음 문제 그를 대면 할 수있는 스크립트를 중지 할 수있을 것입니다 : 밖으로 화면 흑인 후 또한 솔루션은 다시 시작한 후 5 분 후에 백그라운드 스크립트가 실행 중인지 확인하고 그렇지 않으면 블랙 아웃됩니다.
라인이 경우 추가 조치는 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
모든 사용자를위한 응용 프로그램 (이 경우 추가 보안 검사)을 시작합니다. 이 수 로컬로 덮어,하지만 당신은 할 필요가 알고 실행까지 체크합니다. 라인 NoDisplay=true
을 런처에 넣으면 로컬에 표시되지 않으므로 Startup Applications
존재 여부를 알지 못하면 검색되지 않을 것입니다.
더욱이, 당신의 아들은 15 초 밖에 안 걸리고 (그러면 화면이 어두워집니다), 그는 독창적이지 않고 우분투에 대한 많은 경험과 창의적인 마음을 가지지 않으면 심각한 문제를 겪을 것입니다.