자녀의 컴퓨팅 시간을 어떻게 제한합니까?


60

내 컴퓨터 (인터넷뿐만 아니라)에 대한 액세스는 본인이 직접 관리 할 수있을만큼 나이가 될 때까지 내 자녀 (7, 8)의 계정에 대해 제한되어야합니다. 그때까지 다음을 정의 할 수 있어야합니다.

  • 컴퓨팅에 문제가없는 시간 (예 : 오후 5-9시)
  • 컴퓨팅에 문제가없는 요일 (예 : 월요일부터 금요일까지)
  • 하루에 허용되는 시간 (예 : 2 시간)

11.10에서는 작업을 수행하는 데 사용 된 다음 모든 항목이 더 이상 작동하지 않습니다.

  • Timekpr :> 11.10의 경우 ppa를 통해 더 이상 사용할 수 없습니다.
  • Timeoutd : 명령 줄 대안이지만 11.10 부터는 리포지토리에서 제거되었습니다 .
  • Gnome Nanny : X 서버를 강제로 다시 시작하기 위해 멋지지만 반복적으로 충돌 합니다. 따라서 현재이 프로그램을 사용하거나 권장 할 수 없습니다.

다른 대안이 있습니까?


흠 ...이 작업을 수행하지 않으면 쉘 스크립트 / 크론 작업과 함께 해킹하기가 쉬울 것입니다.
Nathan Osman

11
EEK. 부모님이 이것을 볼 수 없습니다. 그러나 근사한 루트 액세스 권한이 있기 때문에 문제를 해결할 것입니다. : P
jrg

"아직 개발 중"에 관심이 있지만 새로운 질문이 아니라고 생각합니다.
RobotHumans

timekpr 개발자가 개발을 계속할 시간이 있거나 없을 것으로 예상하는 것 외에는 그러한 응용 프로그램이 없습니다. 그러나 내 자신의 경험을 통해 이제 우리가 잘 할 수 있지만 더 잘 할 수 있다는 것을 알고 있지만 똑똑한 아이들과 똑똑한 부모가 필요합니다 .
Takkat

@jrg 또는 그냥 라이브 USB;)
Wilhelm Erasmus

답변:


1

잠금 화면 타이머

systray.gif

타사 응용 프로그램 대신 자신의 화면 잠금 타이머 만들기

이 작업을 수행하는 타사 응용 프로그램이 있지만 직접 만들 수 있습니다. 단계 요약 :

  • gedit스크립트 작성에 사용lock-screen-timer
  • 이 창에서 코드를 복사하여 붙여 넣기 lock-screen-timer
  • 마크 lock-screen-timer실행으로
  • 그것을 테스트하십시오!
  • bash 스크립트를 실행하도록 노틸러스 구성
  • 바탕 화면 바로 가기 링크 만들기
  • 남은 모니터 시간

gedit스크립트 작성에 사용lock-screen-timer

Terminalusing Ctrl+ Alt+를 열고 다음 을 T입력하십시오.

gedit lock-screen-timer

아래 창에서 코드를 복사하여 붙여 넣기 lock-screen-timer

이 화면으로 다시 전환하고 다음 코드를 강조 표시하고 Ctrl+를 눌러 복사하십시오 C.

#!/bin/bash

# NAME: lock-screen-timer
# PATH: $HOME/bin
# DESC: Lock screen in x minutes
# CALL: Place on Desktop or call from Terminal with "lock-screen-timer 99"
# DATE: Created Nov 19, 2016. Last revision Mar 22, 2018.
# UPDT: Updated to support WSL (Windows Subsystem for Linux)
#       Remove hotplugtv. Replace ogg with paplay.

# NOTE: Time defaults to 30 minutes.
#       If previous version is sleeping it is killed.
#       Zenity is used to pop up entry box to get number of minutes.
#       If zenity is closed with X or Cancel, no screen lock timer is launched.
#       Pending lock warning displayed on-screen at set intervals.
#       Write time remaining to ~/.lock-screen-timer-remaining

MINUTES="$1" # Optional parameter 1 when invoked from terminal.

# if no parameters set default MINUTES to 30
if [ $# == 0 ]; then
    MINUTES=30
fi

DEFAULT="$MINUTES" # When looping, minutes count down to zero. Save deafult for subsequent timers.

# Check if lock screen timer already running
pID=$(pgrep -f "${0##*/}") # All PIDs matching lock-screen-timer name
PREVIOUS=$(echo "$pID" | grep -v ^"$$") # Strip out this running copy ($$$)
if [ "$PREVIOUS" != "" ]; then
    kill "$PREVIOUS"
    rm ~/.lock-screen-timer-remaining
    zenity --info --title="Lock screen timer already running" --text="Previous lock screen timer has been terminated."
fi

# Running under WSL (Windows Subsystem for Linux)?
if cat /proc/version | grep Microsoft; then
    WSL_running=true
else
    WSL_running=false
fi


while true ; do # loop until cancel

    # Get number of minutes until lock from user
    MINUTES=$(zenity --entry --title="Lock screen timer" --text="Set number of minutes until lock" --entry-text="$DEFAULT")

    RESULT=$? # Zenity return code
    if [ $RESULT != 0 ]; then
        break ; # break out of timer lock screen loop and end this script.
    fi

    DEFAULT="$MINUTES" # Save deafult for subsequent timers.
    if [[ $MINUTES == 0 ]] || [[ $MINUTES == "" ]]; then
        break ; # zero minutes considered cancel.
    fi

    # Loop for X minutes, testing each minute for alert message.
    (( ++MINUTES )) 
    while (( --MINUTES > 0 )); do
        case $MINUTES in 1|2|3|5|10|15|30|45|60|120|480|960|1920)
            notify-send --urgency=critical --icon=/usr/share/icons/gnome/256x256/status/appointment-soon.png "Locking screen in ""$MINUTES"" minute(s)." ;
            if [[ $WSL_running == true ]]; then  
                powershell.exe -c '(New-Object Media.SoundPlayer "C:\Windows\Media\notify.wav").PlaySync();'
            else
               paplay /usr/share/sounds/freedesktop/stereo/complete.oga ;
            fi
           ;;
        esac;

        # Record number of minutes remaining to file other processes can read.
        echo "$MINUTES Minutes" > ~/.lock-screen-timer-remaining

        sleep 60

    done

    rm ~/.lock-screen-timer-remaining # Remove work file others can see our progress with

    if [[ $WSL_running == true ]]; then  
        # Call lock screen for Windows 10
        rundll32.exe user32.dll,LockWorkStation
    else
        # Call screen saver lock for Ubuntu versions > 14.04.
        dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock
    fi

done # End of while loop getting minutes to next lock screen

exit 0 # Closed dialog box or "Cancel" selected.

그런 다음 빈 gedit창으로 다시 전환 하고 Ctrl+를 사용하여 코드를 붙여 넣습니다 V. 파일을 저장하고 편집기를 명령 프롬프트로 다시 종료하십시오.

마크 lock-screen-timer실행으로

이제 다음을 입력하여 스크립트를 실행 가능하게 만들어야합니다.

chmod +x lock-screen-timer

그것을 테스트하십시오!

GUI에서 스크립트를 호출하기 전에 터미널에서 스크립트를 호출하여 오류 메시지가 표시되는지 확인할 수 있습니다.

~/lock-screen-timer

몇 분 동안 프롬프트가 표시됩니다.

잠금 화면 타이머

원하는 시간 (분)을 설정하고 확인을 클릭하여 타이머를 시작하십시오. 15, 10, 5, 3, 2 및 1 분이 남은 경우 시스템 사운드가 들리고 화면이 잠길 때 알림 메시지가 나타납니다. 화면이 잠긴 후 화면 잠금을 해제하려면 암호를 입력해야합니다.

bash 스크립트를 실행하도록 노틸러스 구성

노틸러스는 파일 표시 창이거나 데스크탑의 링크 일 때 실행 스크립트를 두 번 클릭하면 어떻게되는지 정의합니다. 일반적인 동작은을 사용하여 스크립트를 편집하는 것 gedit입니다. 이 동작이 실행되도록 변경하려고합니다.

노틸러스를 시작하고를 포함하는 디렉토리로 이동하십시오 lock-screen-timer. 초점을 맞추려면 마우스 왼쪽 버튼을 한 번 클릭하십시오. "파일 편집 ..."메뉴가 나타날 때까지 상단 메뉴 표시 줄 위에 마우스를 올리면 다음을 사용하십시오.

  1. Edit드롭 다운 메뉴를 클릭하십시오
  2. Properties옵션을 클릭하십시오
  3. 클릭 Behavior
  4. 아래의 라디오 옵션 버튼을 확인하십시오 Executable Text Files
  5. 라디오 버튼 확인 Run executable text files when they are opened

바탕 화면 바로 가기 링크 만들기

이전 섹션에서 lock-screen-timer여전히 초점이 있습니다. 그렇지 않은 경우 스크립트를 탐색하고 마우스 왼쪽 버튼을 한 번 클릭하여 초점을 지정하십시오. 그런 다음 사용하십시오.

  • 파일을 마우스 오른쪽 버튼으로 클릭하면 상황에 맞는 메뉴 옵션이 나타납니다.
  • 메뉴에서을 선택하십시오 Make Link.
  • 라는 새로운 아이콘이 나타납니다 Link to lock-screen-timer.
  • 새 아이콘을 마우스 왼쪽 버튼으로 클릭하고 노틸러스에서 데스크탑으로 드래그하십시오.

이제 바탕 화면 바로 가기 링크를 두 번 클릭하면 스크립트가 실행됩니다. 수 분을 얻는 대화 상자가 나타납니다. 두 개의 버튼이 제시 Cancel하고 OK. 를 클릭하여 X창을 닫으면을 선택하는 것과 동일합니다 Cancel.

타이머가 실행되고 다시 두 번 클릭하면 첫 번째 실행 사본이 "killed"됩니다. 이제 새로운 scren lock 카운트 다운을 시작하거나 Cancel카운트 다운 없음을 클릭하십시오 .

시스템 트레이 / 알림 영역에 남은 표시 시간

잠금 화면 타이머가 실행되는 동안 파일에 몇 분이 남았는지 기록합니다 ~/.lock-screen-timer-remaining. watch명령 으로이 파일 을 보거나이 답변의 맨 위에 표시된대로 Ubuntu의 시스템 트레이 / 응용 프로그램 표시기 막대에 파일을 표시 할 수 있습니다 . 알림 영역에 남은 시간을 표시하려면이 Q & A의 지시 사항을 따르십시오. (시스템 표시기에 BASH가 애플리케이션 표시기로 표시 될 수 있습니까? )


38

Ubuntu <= 11.10 사용자는 Ubuntu 사용자> = 11.10에 대한이 가이드를 따릅니다. 맨 아래 페이지 알림을 읽습니다.

예, 모든 프로그램이 오래되었으며 모든 질문에 대한 답변이 여기에 있으며 부모님의 통제하에 잘 보입니다 .....

사용자가 로그 오프하도록 강요하는 것에 대해 이야기 할 때 실제로 말하는 것은 시스템 액세스 또는 서비스 계정에 시간 제한을 구현하는 것입니다. 시간 제한을 구현하는 가장 쉬운 방법은 Linux-PAM 이라는 플러그인 모듈을 사용하는 것 입니다.

PAM (Pluggable Authentication Module) 은 사용자를 인증하는 메커니즘입니다. 특히이 pam_time모듈 을 사용하여 사용자가 서비스에 액세스 할 수있는 시간별 액세스를 제어 할 것입니다.

pam_time모듈을 사용하여 특정 요일 또는 다양한 터미널 라인뿐만 아니라 다양한 시간에 시스템 및 / 또는 특정 응용 프로그램에 대한 액세스 제한을 설정할 수 있습니다. 구성에 따라이 모듈을 사용하여 이름, 시간, 요일, 신청하는 서비스 및 요청하는 터미널을 기반으로 개별 사용자에 대한 액세스를 거부 할 수 있습니다 .

를 사용할 때는 파일 pam_time에서 각 줄 (또는 규칙)의 구문을 /etc/security/time.conf줄 바꿈으로 종료해야합니다 . 파운드 기호 [#]로 각 줄에 주석을 달 수 있으며 시스템은 줄 바꿈까지 해당 텍스트를 무시합니다.

규칙 구문은 다음과 같습니다.

서비스; ttys; 사용자; 시간

The first field   services  is a logic list of PAM service names.
The second field  tty  is a logic list of terminal names.
The third field  users  is a logic list of users or a netgroup of users.
The fourth field  times  indicates the applicable times.

다음은 일반적인 규칙 세트의 예입니다.

login ; * ; !bobby ; MoTuWeThFr0800-2000
login ; * ; !root ; !Al0000-2400
http ; * ; !bobby ; MoTuWeThFr0800-2000
http ; * ; !root; !Al0000-2400

이 규칙은 사용자 bobby가 0800에서 2000 사이에 로그온하는 것을 제한하고이 시간 동안 인터넷 액세스도 제한합니다. Root는 언제든지 로그온 할 수 있으며 인터넷을 항상 탐색 할 수 있습니다.

참고 : 시스템은 이러한 규칙의 오류를 syslog (3)로 기록합니다.


Ubuntu Linux를 사용하면 한 명 이상의 사용자가 시스템에 연결되지 않도록 컴퓨터 시간 제한을 지정할 수 있습니다. 예를 들어 시간 제한을 사용하면 자녀를위한 컴퓨터 액세스를 제한하거나 (자식 보호자 통제) 특정 시간 동안 서버에 대한 연결을 보호 할 수 있습니다.

수동 구성

당신이 무엇을 할 것인지 이해

이 자습서에서는 PAM (Pluggable Authentication Modules, English Pluggable Authentication Modules)을 사용합니다. 연결시 사용자 인증을 제어 할 수 있습니다. 그런 다음 보안 구성 파일을 사용하여 허용되는 로그온 시간을 정의합니다. 이러한 조작은 모든 버전의 Ubuntu에서 수행 할 수 있으며 간단한 텍스트 편집기 (vim, emacs, nano, gedit, kate) 만 필요합니다. PAM 모듈을 통한 제한 시간 활성화

먼저, /etc/pam.d/구성 가능한 모든 서비스가있는 곳으로 이동하십시오 .

$ Ls /etc/pam.d/
atd common-account common-session gdm login ppp sudo
chfn common-auth cron gdm-autologin Other samba
chsh common-cupsys gnome-screensaver password passwd su

컴퓨터 연결을 차단하려면 gdm 서비스를 변경해야합니다. gdm 파일을 편집하고 파일 끝에 다음 코드 줄을 추가하십시오.

account required pam_time.so

GDM은 로그인 화면 배포판 Ubuntu, Edubuntu 및 Xubuntu입니다. KDE를 사용하는 Kubuntu의 경우 kdm 서비스가 호출되며 이것이 열리는 파일이됩니다. 그리고 PAM을 구성했습니다! 이를 통해이 서비스에서 시간을 제어 할 수 있습니다.

서버가있는 경우 GUI가 없을 수 있습니다. 이 경우 GDM / KDM이 설치되지 않아 연결이 차단되지 않습니다. TTY에 대한 연결을 방지하려면 동일한 파일의 로그인을 수정하고 이전에 승인 된 것과 동일한 코드 줄을 추가해야합니다. 이 조치는 GUI를 설치하고 로그인 화면 및 터미널에 대한 액세스를 차단하려는 사용자에게도 적용됩니다.

액세스 시간 구성

PAM 서비스가 활성화되었으므로 액세스 시간 만 구성하면됩니다. 을 엽니 다 /etc/security. 여러 구성 파일을 사용할 수 있습니다.

$ Ls /etc/security/
access.conf namespace.conf pam_env.conf
group.conf namespace.init time.conf
limits.conf opasswd time.conf.bak

파일을 편집하십시오 time.conf. 몇 가지 설명과 예 ​​(영어)를 소개합니다. 액세스 일정을 설정하려면 다음과 같은 코드 줄을 복사하여 붙여 넣습니다 (항상 파일 끝에서).

*;*;user;scheduler

사용자 필드 대신 차단하려는 로그인 계정을 입력하십시오.

여러 사용자를 차단하려면 로그인을 | 운영자. 예를 들어 Patrick, John 및 Emily의 계정을 고정하려면 다음과 같이하십시오.

*;*;Patrick|jean|emilie;scheduler

단점으로, 특히 한 명을 제외한 모든 사용자의 시스템 액세스를 차단하려면! 관련자가 전에. 예를 들어, 컴퓨터 액세스를 원하는 경우 Nicolas 및 Xavier를 제외한 모든 사용자가 거부합니다.

Nicolas *;*;!|xavier;scheduler

이제 필드 영역으로 전환합니다. 이 필드에서는 요일과 시간을 선택할 수 있으며 연결이 가능합니다. 먼저 다음 약어를 사용하여 요일을 지정해야합니다.

Mo : Monday     Fr : Friday     Wd : Sa/Su
Tu : Tuesday    Sa : Saturday   wk : Mo/Tu/We/Th/Fr
We : Wenesday   Su : Sunday
Th : Thursday   Al : All Days

Wk와 Wd가 오도하는 약어를 혼동하지 않도록주의하십시오! 특히 인터넷에서 제대로 식별되지 않은 경우 : 충돌 정보를 쉽게 찾을 수 있습니다!

그런 다음 마감일을 지정합니다. 24 자리 형식으로 4 자리 숫자로 구성해야합니다. 예를 들어 오후 3시 17 분에서 오후 6시 34 분으로 제한하려면 1517-1834로 작성하십시오. Marie가 화요일 오후 3시 17 분에서 오후 6시 34 분까지만 연결할 수 있도록 결과를 얻습니다.

*;*;marie;Tu1517-1834

이 시간 이외의 연결은 금지됩니다. 사용자는 연산자 | 과! 여러 번 표시합니다 (!는 표시된 시간을 제외한 모든 로그온 시간이 허용됨을 나타냅니다).

코드 줄의 시작 부분에있는 두 개의 별표 (와일드 카드)는 각각 tty 서비스 필드입니다. 시스템에 대한 모든 액세스를 차단하려는 경우 차단할 서비스 또는 tty를 지정할 필요가 없습니다. 그러나 특정 서비스를 사용하지 않으려면 다음 예제로 지정하십시오.

login;tty1|tty4|tty5;marie;!Wd0000-2400

따라서 사용자 결혼은 주말 동안 TTY, 4 및 5에 연결할 수 없습니다.

제한 일정의 일부 예

mathilde는 매일 오후 1시 20 분부터 오후 3시 20 분까지 그리고 오후 4 시부 터 8시 30 분까지 연결할 수 있습니다 :

*;*;mathilde;Al1320-1520|Al1600-2030

Stone, Frank 및 Florian은 주중에는 오후 2 시부 터 오후 6시 45 분까지, 주말에는 오후 2 시부 터 10시 15 분까지 연결할 수 있습니다.

*;*;Stone|franck|florian;Wk1400-1845|Wd1400-2215

올리브는 절대로 연결할 수 없습니다. jessica는 수요일 오후 1 시부 터 오후 4 시까 지 로그온 할 수 있습니다.

*;*;olivier;!Al0000-2400
*;*;jessica;We1300-1600

각 사용자에 대해 두 개의 서로 다른 시간 동안 2 개의 다른 회선

세션이 만료되면 (사용자가 이미 연결되어있는 시간을 초과 함) PAM이 사용자에게 도달 할 수 있습니다. mathilde는 허용 된 시간 동안 연결되지만이 시간을 초과하는 것은 무료입니다! 이를 위해 새로운 프로그램 인‘cron’을 사용합니다. 이 응용 프로그램은 일정한 간격으로 명령을 실행합니다. 이 경우 세션이 만료 될 때 사용자의 연결을 끊기 위해 'skill-KILL-u'명령을 사용합니다. 취급은 매우 간단합니다. ʻ / etc / crontab´ 파일을 간단히 편집하십시오. 그런 다음 다음 코드 줄을 추가하십시오.

Minute Hour Day * * (s) root skill -KILL -u User

이전과 마찬가지로 분 필드 일정과 시간을 바꾸십시오. 그런 다음 금지 된 요일 (들)로 요일을 채우거나 간단히 요일을 나타내는 별표 (*)를 입력하십시오. 마지막으로, 로그인 계정이 사용하는 필드가 차단되도록 변경하십시오.

일과 같은 방식으로 눈에 띄지 않습니다 cron! 이 프로그램과 함께 사용되는 약어 목록은 다음과 같습니다.

mon : monday    fri : friday
tue : tuesday   sat : saturday
wed : wednesady sun : sunday
thu : thursday   *  : all hours

cron작업의 일부 예 (이전 섹션의 시간 예)

jessica는 수요일 오후 1 시부 터 오후 4 시까 지 로그온 할 수 있습니다.

-> 연결 끊기 : 화요일 오후 4시

00 16 * root * wed skill -KILL -u jessica

mathilde는 매일 오후 1시 20 분부터 오후 3시 20 분까지 그리고 오후 4 시부 터 오후 8시 30 분까지 연결할 수 있습니다.

-> 연결 해제 : 매일 오후 8시 30 분부터 오후 3시 20 분 (ET).

20 15 * * * root skill -KILL -u mathilde
30 20 * * * root skill -KILL -u mathilde

Stone, Frank 및 Florian은 주중에는 오후 2 시부 터 오후 6시 45 분까지, 주말에는 오후 2 시부 터 10시 15 분까지 연결할 수 있습니다.

-> 연결 끊기 (1) : 월요일, 화요일, 수요일, 목요일 및 금요일 18:45에. -> 연결 끊기 (2) : 토요일과 일요일 오후 10시 15 분

45 18    * * mon,tue,wed,thu,fri   root    skill -KILL -u stone && skill -KILL -u franck && skill -KILL -u florian
15 22    * * sat,sun               root    skill -KILL -u stone && skill -KILL -u franck && skill -KILL -u florian

skill-KILL-u 명령은 TTY뿐만 아니라 GUI에서 사용자를 연결 해제합니다. 서버 관리자에게 완벽하게 사용할 수 있습니다. 그러나이 명령은 즉시 적용되며 예고없이 연결이 끊어집니다. 따라서 해당 컴퓨터 또는 네트워크의이 장치 사용자가 설치되지 않도록하는 것이 좋습니다!

기간 이 끝나기 몇 분 전에 wall명령이 실행되어 모든 사용자의 터미널에 표시되는 사용자를 방지 할 수 있습니다.cron

40 18 * * Mon,Tue,wed,thu,fri root echo "end of session in 5 minutes" | wall

wall 명령 대신 GUI 사용자를 사용할 수 없도록 libnotify-binnotify-send 패키지에 있습니다. X 설치

40 18 * * Mon,Tue,wed,thu,fri stone DISPLAY=:0 notify-send "end of session in 5 minutes"

우분투 11.10 사용자

나는 Pam에 문제가있는 사용자를 보았고 그것에 대해 많은 버그를 보았으므로 그 이유는 무엇입니까 ??? 너무 간단 우분투 11.10 넣은 사람은 아니다 지원 GDM은 새로운 디스플레이 관리자는 문제는이 지침 가게 후속 더 이상되는 lightGDM이된다 account required pam_time.so내가 생각하는가에 /etc/pam.d/lightdm/etc/pam.d/lightdm-autologin하지만 버그 방법은 ???

따라서이 LightGdm 로그 파일 2 개를 확인할 수 있습니다.

  • /var/log/lightdm/lightdm.log
  • /var/log/lightdm/x-0.log

또는 디버그 모드에서 LightGdm을 실행하십시오.

LightDM-디버그

또는 버그를보고 :

우분투 버그 lightdm

나는 버그가 여기에 있다고보고 하므로 손가락을 교차시키고 기다립니다 ....


3
이것은-와우- 위대하다 -나는 감동한다! Esp. 우리가 경고없이 아이들을 쫓아 내기를 원하지 않기 때문에 알림 비트는 마음에 드는 부분입니다. 나 같은 악한 아빠조차도 너무 악할 것입니다.)
Takkat

불행하게도 lightdm이는 (작동하지 않을 것 같다 bugs.launchpad.net/lightdm/+bug/880313 ).
Takkat

와우, 그것은 훌륭하고 긴 설명입니다 ..
Mahmudin Ashar

openSUSE 11.4의 경우는 Ubuntu 11.10과 정확히 같습니다.
굽타

11

TimeKpr

필요한 모든 것이 있다고 생각합니다. 사용자 당 일일 액세스 시간 제한, 구성을위한 쉬운 GUI, 하루 동안 우회 할 수있는 선호도, "보상 시간"추가, 사용자의 남은 시간 알림 등

프로젝트 페이지는 여기에 있습니다 . 또한 소프트웨어 소스에 추가 할 수있는 우분투 용 PPA도 있습니다 deb http://ppa.launchpad.net/timekpr-maintainers/ppa/ubuntu lucid main. Software Center 또는 CLI를 통해 설치하십시오 sudo apt-get install timekpr.


TimeKpr이 개별 응용 프로그램 (예 : 게임)에 대한 시간 제한을 설정할 수 있습니까?
Anderson Green

8

타임 크 프르

11.10에서 LightDM을 실행하여 다음 줄을 추가하여 사용자에 대한 제한을 설정하는 데 사용할 수 있습니다. /etc/pam.d/lightdm

account required pam_time.so

버그 # 835310 이 수정 될 때까지 사용자 전환을 가능하게 하기 위해 libpam-smbpass 를 제거해야 할 수도 있습니다 .

응용 프로그램 창에 정의 된 모든 제한 사항은 timekpr GUI에 정의 된대로 작동합니다.

Unity에 timekpr-client 아이콘을 표시하려면 Unity 패널 설정에서 화이트리스트 를 작성하고 다음 줄에 다음 'timekpr'을 추가해야합니다 .Unity/etc/xdg/autostart/timekpr-client.desktop

OnlyShowIn=GNOME;XFCE;KDE;Unity;

허용 된 시간의 카운트 다운을 시작하기 위해 timekpr 데몬을 시작해야 할 수도 있습니다.

/etc/init.d/timekpr start

14.04의 경우 :

timekpr의 최신 릴리스 / 포크로 우분투 14.04 출판되었다 Eduards Bezverhijs 자신에 ppa:mjasnik/ppa.


훌륭하지만 나는 일시적인 해결책이라고 생각합니다 ... 가능한 오류에 대해 다른 컴퓨터와 공유하기 위해 timepkr과 samba를 동시에 사용하고 있기 때문에 (ClaudeD (claude-d)가 작성한 것을 참조하십시오) ....
hhlp

7

당신이 뭔가 중간에있는 경우 자동 로그 오프는 매우 실망입니다. 폭력적이고 잔인하고 무례합니다. 그리고 당신이 몇 살인지는 중요하지 않습니다. 컴퓨터에 중독되었을 때 한 가지 일이며 제출 버튼을 클릭하거나 문서를 저장하기 전에 시간을 추적하고 5 초 동안 쫓겨날 때 매우 다릅니다. 자동 키커 대신 자동 알림을 사용하는 것이 좋습니다. 그러면 자녀들이 서로를 존중하고 서로 컴퓨터를 기꺼이 사용할 수있게됩니다.

더 가벼운 대안도 있습니다. 각 어린이가 컴퓨터를 사용하는 데 소요되는 시간을 추적하여 수집 된 데이터를 모두 볼 수 있도록하십시오. 이 믿을 수 없을만큼 간단한 것 (인터넷 대역폭에 적용됨)은 성인으로 가득 찬 사무실에서 네트워크 관리자가되었을 때 목숨을 구했습니다. 각 컴퓨터의 대역폭 사용량 (방문자 수, 방문한 사이트 목록과 같은 정보를 익명화하지 않음)에 대한 공개 통계는 상황을 "나-악한 탐욕스러운 관리자-악의적 인 악용 사용자"에서 "사람, 나보다 5 배 더 많이 다운로드했는데, 나쁘다! " "죄송합니다. 실제로 다운로드했습니다. 점심 시간 동안 많은 YouTube를 보았습니다. 더 이상이 속도로하지 않을 것입니다."-대립 시나리오에서 제외되었습니다.


6

나는이 문제도 가지고 있었다. 사용 시간과 총계를 정의 할 수있는 kidtimer 스크립트를 작성했습니다. 프로젝트는 Github에서 다음 위치에 있습니다.

설치 및 사용 방법입니다.

  1. 코드를 복사하여라는 파일에 붙여 넣습니다 kidtimer.install.

    #!/bin/bash
    # Restrict kids computer access to specific hours and total time.
    # By: Michael Groves - grover66_at_gmail_dot_com
    
    #variables
    basedir="/usr/local/kidtimer"
    configdir="/etc/kidtimer"
    Cdate=`/bin/date | awk '{ print $2" "$3 }'`
    TUI=0
    HOUR=`/bin/date +%H`
    DOW=`/bin/date +%u`
    WEEKEND="no"
    [ "$DOW" == "6" ] && WEEKEND="yes"
    [ "$DOW" == "7" ] && WEEKEND="yes"
    
    #arguments
    [ $# -eq 0 ] && TUI=1
    [ $# -eq 1 ] && COMMAND=$1
    [ $# -eq 2 ] && COMMAND=$1 && KID=$2
    [ $# -eq 3 ] && COMMAND=$1 && KID=$2 && Time=$3
    
    ################# Subroutines ##################
    ################################################
    
    go_check_install () {
    if [ ! -e $basedir ]; then
        go_initialize
    fi
    }
    
    
    go_initialize () {
    /bin/mkdir -p $basedir/time
    /bin/mkdir -p $basedir/schedule
    /bin/cp $0 /usr/local/bin/kidtimer && chmod +x /usr/local/bin/kidtimer
    echo "0 * * * *     root    /usr/local/bin/kidtimer hourly" > /etc/cron.d/kidtimer
    echo "0 0 * * *     root    /usr/local/bin/kidtimer daily" >> /etc/cron.d/kidtimer
    echo "* * * * *     root    /usr/local/bin/kidtimer check" >> /etc/cron.d/kidtimer
    echo "@reboot       root    /usr/local/bin/kidtimer daily" >> /etc/cron.d/kidtimer
    echo "@reboot       root    /usr/local/bin/kidtimer hourly" >> /etc/cron.d/kidtimer
    /bin/mkdir $configdir
    /usr/bin/touch $configdir/kid.list
    go_create_message_files
    echo "Kidtimer is now installed. Run /usr/local/bin/kidtimer to configure."
    }
    
    
    go_create_message_files () {
    cat << EOF > $basedir/send5.sh
    #!/bin/bash
    Name=\$1
    /bin/su -s /bin/bash -c 'DISPLAY=:0 /usr/bin/notify-send -i \
        /usr/share/pixmaps/gnome-set-time.png "ALERT" \
        "You will be logged out in 5 minutes."' \$Name
    EOF
    chmod +x $basedir/send5.sh
    cat << EOF > $basedir/send4.sh
    #!/bin/bash
    Name=\$1
    /bin/su -s /bin/bash -c 'DISPLAY=:0 /usr/bin/notify-send -i \
            /usr/share/pixmaps/gnome-set-time.png "ALERT" \
            "You will be logged out in 4 minutes."' \$Name
    EOF
    chmod +x $basedir/send4.sh
    cat << EOF > $basedir/send3.sh
    #!/bin/bash
    Name=\$1
    /bin/su -s /bin/bash -c 'DISPLAY=:0 /usr/bin/notify-send -i \
            /usr/share/pixmaps/gnome-set-time.png "ALERT" \
            "You will be logged out in 3 minutes."' \$Name
    EOF
    chmod +x $basedir/send3.sh
    cat << EOF > $basedir/send2.sh
    #!/bin/bash
    Name=$1
    /bin/su -s /bin/bash -c 'DISPLAY=:0 /usr/bin/notify-send -i \
            /usr/share/pixmaps/gnome-set-time.png "ALERT" \
            "You will be logged out in 2 minutes."' \$Name
    EOF
    chmod +x $basedir/send2.sh
    cat << EOF > $basedir/send1.sh
    #!/bin/bash
    Name=\$1
    /bin/su -s /bin/bash -c 'DISPLAY=:0 /usr/bin/notify-send -i \
            /usr/share/pixmaps/gnome-set-time.png "ALERT" \
            "You will be logged out in 1 minute."' \$Name
    EOF
    chmod +x $basedir/send1.sh
    cat << EOF > $basedir/logout.sh
    #!/bin/bash
    Name=\$1
    /usr/bin/pkill -KILL -u \$Name
    rm -rf /tmp/kidtimer.shutdown.\$Name
    EOF
    chmod +x $basedir/logout.sh
    cat << EOF > $basedir/schedule/blank
    #hour weekday weekend (y/n)
    00 n n
    01 n n
    02 n n
    03 n n
    04 n n
    05 n n
    06 n n
    07 n n
    08 y y
    09 y y
    10 y y
    11 y y
    12 y y
    13 y y
    14 y y
    15 y y
    16 y y
    17 y y
    18 y y
    19 y y
    20 n n
    21 n n
    22 n n
    23 n n
    #minutes weekday weekend
    MAX 120 240
    EOF
    }
    
    
    go_check () {
    for I in `cat $configdir/kid.list`; do
            /usr/bin/users | grep -q $I
            if [ $? -eq 0 ]; then
                    if [ -e $basedir/time/$I.ttl ]; then
                            C=`cat $basedir/time/$I.ttl`
                            C=$((C + 1))
                            echo $C > $basedir/time/$I.ttl
                    else
                            echo 1 > $basedir/time/$I.ttl
                            C=1
                    fi
            else
            go_clean_jobs $I
            exit 0
        fi
            # check total time.
            W="no"
            [ $DOW -eq 6 ] && W="yes"
            [ $DOW -eq 7 ] && W="yes"
            [ "$W" == "no" ] && TIME_LIMIT=`cat $basedir/schedule/$I | grep ^MAX | awk '{ print $2 }'`
            [ "$W" == "yes" ] && TIME_LIMIT=`cat $basedir/schedule/$I | grep ^MAX | awk '{ print $3 }'`
            if [ $C -ge $TIME_LIMIT ]; then
                    if [ ! -e /tmp/kidtimer.shutdown.$I ]; then
                            /usr/bin/passwd $I -l
                            go_logout $I
                    fi
            fi
    done
    }
    
    
    go_clean_jobs () {
    K=$1
    for I in `/usr/bin/atq | awk '{ print $1 }' | sort`; do
        /usr/bin/at -c $I | grep kidtimer | grep -q $K
        [ $? -eq 0 ] && /usr/bin/at -d $I
    done
    [ -e /tmp/kidtimer.shutdown.$K ] && rm -rf /tmp/kidtimer.shutdown.$K
    }
    
    
    go_daily () {
    for I in `cat $configdir/kid.list`; do
        ls -l $basedir/time/$I.ttl | grep -q "$Cdate"
        if [ ! $? -eq 0 ]; then
            echo "0" > $basedir/time/$I.ttl
        fi
    done
    }
    
    
    go_hourly () {
    if [ -s $configdir/kid.list ]; then
        for I in `cat $configdir/kid.list`; do
            if [ -e $basedir/schedule/$I ]; then
                [ "$WEEKEND" == "no" ] && TL=`cat $basedir/schedule/$I | grep ^MAX | awk '{ print $2 }'`
                [ "$WEEKEND" == "yes" ] && TL=`cat $basedir/schedule/$I | grep ^MAX | awk '{ print $3 }'`
                [ -e $basedir/time/$I.ttl ] && C=`cat $basedir/time/$I.ttl`
                [ $C -ge $TL ] && /usr/bin/passwd $I -l && exit 0
                [ "$WEEKEND" == "no" ] && R=`grep ^$HOUR $basedir/schedule/$I | awk '{ print $2 }'`
                [ "$WEEKEND" == "yes" ] && R=`grep ^$HOUR $basedir/schedule/$I | awk '{ print $3 }'`
                if [ "$R" == "y" ]; then
                    /usr/bin/passwd $I -u
                else
                    /usr/bin/passwd $I -l
                    /usr/bin/users | grep -q $I && /usr/local/bin/kidtimer shutdown $I
                fi
            fi
        done
    fi
    }
    
    
    go_logout () {
    K=$1
    echo "$basedir/send5.sh $K" | at now + 1 minutes
    echo "$basedir/send4.sh $K" | at now + 2 minutes
    echo "$basedir/send3.sh $K" | at now + 3 minutes
    echo "$basedir/send2.sh $K" | at now + 4 minutes
    echo "$basedir/send1.sh $K" | at now + 5 minutes
    echo "$basedir/logout.sh $K" | at now + 6 minutes
    touch /tmp/kidtimer.shutdown.$K
    }
    
    
    go_addtime () {
    U=$KID
    A=$Time
    if [ "$KID" == "reset" ]; then
        echo "0" > $basedir/time/$U.ttl
        echo "Done."
        exit 0
    elif [ "$KID" == "" ]; then
        echo "Error."
        echo "Syntax: addtime <user> <minutes|reset>"
        exit 1
    else    
        C=`cat $basedir/time/$KID.ttl`
        C=$((C - Time))
        echo $C > $basedir/time/$KID.ttl
        echo "New total minutes is "$C"."
        echo "Done."
    fi
    
    /usr/bin/passwd $KID -u
    }
    
    
    go_tui () {
    go_command_list
    echo -n "Choose: "; read -e X
    case "$X" in
    1) go_setup_user
            ;;
    2) go_modify_user
            ;;
    3) go_remove_user
            ;;
    4) go_list_users
        ;;
    5) exit 0
            ;;
    esac
    go_tui
    }
    
    
    go_command_list () {
    echo
    echo "1) Setup user limits."
    echo "2) Modify user limits."
    echo "3) Remove user limits."
    echo "4) List configured users."
    echo "5) Quit."
    echo
    }
    
    
    go_list_users () {
    echo
    echo "Users configured for kidtimer:"
    if [ -s $configdir/kid.list ]; then
        cat $configdir/kid.list
    else
        echo "No configured users."
    fi
    }
    
    go_setup_user () {
    echo
    echo -n "Username: "; read -e U
    /usr/bin/id $U > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        /bin/cp $basedir/schedule/blank $basedir/schedule/$U
        echo "0" > $basedir/time/$U.ttl
        echo $U >> $configdir/kid.list
        echo "Done."
        echo
        echo -n "Modify limits now ?(y/n): "; read -e M
        if [ "$M" == "y" ]; then
            if [ -e /usr/bin/nano ]; then
                        /usr/bin/nano $basedir/schedule/$U
                        echo "Done."
                else
                        /usr/bin/vi $basedir/schedule/$U
                        echo "Done."
                fi
        fi
    else
        echo "Error. User does not exist. Please create user using the useradd command first."
    fi
    }
    
    
    go_modify_user () {
    echo
    echo -n "Username: "; read -e U
    grep -q ^$U $configdir/kid.list
    if [ $? -eq 0 ]; then
        if [ -e /usr/bin/nano ]; then
            /usr/bin/nano $basedir/schedule/$U
            echo "Done."
        else
            /usr/bin/vi $basedir/schedule/$U
            echo "Done."
        fi
    else
        echo "Error. User not setup. Please setup user first."
    fi
    }
    
    
    go_remove_user () {
    echo
    echo -n "Username: "; read -e U
    grep -q ^$U $configdir/kid.list
    if [ $? -eq 0 ]; then
        grep -v ^$U $configdir/kid.list > /tmp/kidtimer.tmp
        cat /tmp/kidtimer.tmp > $configdir/kid.list
        echo "Done."
    else
        echo "Error. User is not setup."
    fi
    }
    
    
    go_help () {
    echo
    echo "Commands:"
    echo "--------------------------------------------------------------------------------"
    echo "addtime <user> <minutes> ... Increases allowed time for the day."
    echo "logout <user>            ... Starts logout sequence for user."
    echo "hourly                   ... Enables/disables user access based on the schedule."
    echo "daily                    ... Resets time for the new day."
    echo "help                     ... This list."
    echo "--------------------------------------------------------------------------------"
    }
    
    ###################### Code ####################
    ################################################
    
    go_check_install
    [ $TUI -eq 1 ] && go_tui
    
    case "$COMMAND" in
    addtime) go_addtime
        ;;
    logout) go_logout $KID
        ;;
    initialize) go_initialize
        ;;
    hourly) go_hourly
        ;;
    daily) go_daily
        ;;
    check)  go_check
        ;;
    -h) go_help
        ;;
    help) go_help
        ;;
    esac
    exit 0
    
  2. 그것을 실행하십시오 :

    sudo ./kidtimer.install
  3. 그것을 실행 :

    sudo kidtimer
  4. 기존 사용자 계정을 설정하십시오.

  5. 끝난.

도와주기 위해:

sudo kidtimer help

사용자 계정에 시간 추가 (당일 만) :

sudo kidtimer addtime user minutes

풍모:

  • 자녀가 하루 중 특정 시간에 주중과 주말에 모두 컴퓨터에 액세스하도록 허용하십시오.
  • 주중과 주말 모두 최대 시간을 설정하십시오.

키 파일 :

/etc/kidtimer/kid.list
/etc/cron.d/kidtimer
/usr/local/kidtimer/schedule/<user>
/usr/local/kidtimer/time/<user>.ttl
/usr/local/bin/kidtimer

크론 잡 :

  • 매 분마다 사용자가 로그인했는지 확인하십시오. 그렇다면 전체 시간을 늘리십시오. 최대 시간에 도달하면 계정을 비활성화하고 로그 오프 시퀀스를 시작하십시오 (총 5 분).
  • 사용자가 로그인 할 수 있는지 매시간 확인하십시오. 그렇다면 계정을 활성화하십시오.
  • 자정에 시간을 재설정하십시오.

노트 :

응용 프로그램이 notify-send사용자 시간을 알리는 데 사용 합니다. 시간이 소진되면 모든 사용자 프로세스가 종료되므로 사용자를 준비하십시오.


5

timekpr- 이 프로그램은 사용자 계정의 컴퓨터 사용을 추적하고 제어합니다. 시간별 액세스 시간을 기준으로 일일 사용량을 제한하고 로그인 할 수 있거나 로그인 할 수없는 시간을 구성 할 수 있습니다.이 응용 프로그램을 사용하여 관리자는 계정 로그인 시간 또는 계정 액세스 시간을 제한 할 수 있습니다. 이 응용 프로그램은 부모의 시간 제어로 작동하며 자녀의 액세스 시간을 제한하려는 부모에게 유용합니다.

Even Nedberg proposed the following answer:
Just started copying into the 11.10 version for the PPA. Should finish
in a few minutes.

ppa:timekpr-maintainers/ppa시스템의 소프트웨어 소스 에 추가하여이 신뢰할 수없는 PPA에서 지원되지 않는 패키지로 시스템을 업데이트 할 수 있습니다 .

deb http://ppa.launchpad.net/timekpr-maintainers/ppa/ubuntu oneiric main 
deb-src http://ppa.launchpad.net/timekpr-maintainers/ppa/ubuntu oneiric main 

이 패키지는 다음에서 사용 가능합니다.

문제 :

나는 버그가 여기에 있다고보고 하므로 손가락을 교차시키고 기다립니다 ....


오 좋은 소식입니다. 우리는 여기서 timekpr 을 사용 했습니다 . 그것이 작동하기를 바랍니다-그것은 여전히 ​​내 11.10 상자에 설치되어 있고 잘 실행되지만 내 아이의 계정을 잠그지 않습니다.
Takkat

그리고 14.04 동안 작동합니까?
rogerdpack

3

소개

다음 명령으로 사용자가 로그인했는지 확인할 수 있습니다.

who -u

이것은 다음과 같은 출력을 제공합니다.

$ who -u
jacob    :0           2016-03-17 20:48   ?          2557 (:0)
newuser  :1           2016-03-17 20:50   ?          4466 (:1)

출력에서 우리는 대상 사용자의 pid를 얻습니다. 시간이 한계를 초과하면 중지해야합니다.

해결책

사용자에게 sudo권한 이 없다고 가정합니다 .

이 솔루션은 작은 배경 스크립트입니다. 스크립트 헤드에서 설정하기 위해 하루 사용량을 정의 된 시간 (분)으로 제한합니다. 일단 설정하면 (너무 어렵지 않음) 매우 쉽게 실행되며 나중에 추가 조치가 필요하지 않습니다.

대상 사용자의 시간 제한이 만료 되기 60 초 전에 열려있는 파일의 원치 않는 데이터 손실을 방지하기 위해 다음 과 같은 메시지가 나타납니다 DISPLAY.

여기에 이미지 설명을 입력하십시오

스크립트

#!/usr/bin/python3
import subprocess
import os
import sys
import time


#--- set the time limit below (minutes)
minutes = 120
#--- set the user name to limit below
user = "newuser"

uselog = "/opt/limit/uselog"
datefile = "/opt/limit/currdate"

def read(f):
    try:
        return int(open(f).read().strip())
    except FileNotFoundError:
        pass

def message(disp, user):
    return "DISPLAY="+disp+" su - "+user+" -c "+'"'+\
      "notify-send 'User "+user+\
      " will be logged off in 60 seconds'"+'"'


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
    # if the pid of the targeted process exists, add a "tick" to the used quantum
    check = subprocess.check_output(["who", "-u"]).decode("utf-8")
    pid = [l.split() for l in check.splitlines() if user in l]
    if pid:
        n = read(uselog)
        n = n + 1 if n != None else 0
        open(uselog, "wt").write(str(n))
        # when time exceeds the permitted amount, kill the process
        if n > minutes*6:
            disp = [d for d in [d[1] for d in pid] if all([":" in d, not "." in d])][0]
            subprocess.Popen(["/bin/bash", "-c", message(disp, user)])
            time.sleep(60)
            pids = [p[-2] for p in pid]
            for p in pids:
                subprocess.Popen(["kill", p])  

    currday1 = currday2

사용하는 방법

  1. 데스크탑 (또는 다른 곳)에 다음과 같은 이름의 폴더를 작성하십시오. limit
  2. 빈 파일로 스크립트를 복사로 저장 limit_use(확장자) 폴더 안에 그리고 그것을 실행하기
  3. 스크립트 머리글에서 사용자 이름을 제한하고 허용되는 최대 시간 (분)을 편집하십시오. 예제에서 :

    #--- set the time limit below (minutes)
    minutes = 1
    #--- set the user name to limit below
    user = "jacob"
    
  4. 폴더를 디렉토리에 복사하십시오 /opt.

    cp -r /path/to/limit /opt
  5. 이제 /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 비밀번호가 필요합니다.


2

시도 timekpr했지만 작동하지 않았습니다. 그런 다음 내 우분투에서 작동하는 변형을 만들었습니다. 이것이이 변형에 필요한 것입니다 :

  1. /var/lib/timelimit/user_to_be_limited.limit루트 권한 만 있는 파일에 시간 제한을 추가하십시오 . 예 : 1800 초 (30 분) 일일 한도 동안 1800

  2. 다음을 사용 /usr/local/bin/timelimit.sh하여 루트 권한으로 작성하십시오 .

    #!/bin/bash
    
    pollTime=30
    export DISPLAY=:0
    
    while(true); do
        sleep $pollTime
        usersLogedIn=$( users|sed -e 's/\s\+/\n/g'|sort|uniq )
        for userName in $usersLogedIn; do
            if [[ -e "/var/lib/timelimit/$userName.limit" ]]
            then
                if [[ ! -e "/var/lib/timelimit/$userName.time" || `( stat -c '%z'  /var/lib/timelimit/$userName.time|cut -c9,10 )` != `date +%d` ]]
                then 
                    echo $pollTime > /var/lib/timelimit/$userName.time
                else
                    timeUsed=$(( `cat /var/lib/timelimit/$userName.time` + $pollTime ))
                    echo $timeUsed > /var/lib/timelimit/$userName.time
                fi
                if [[ `cat /var/lib/timelimit/$userName.time` -gt `cat /var/lib/timelimit/$userName.limit` ]]
                then
                    export XAUTHORITY=/home/$userName/.Xauthority
                    notify-send --icon=gtk-dialog-warning --urgency=critical -t 30000 "$userName" "You have 60 seconds left!"
                    sleep 60
                    pkill -u $userName
                fi
            fi
        done
    done
  3. 추가 /etc/rc.local:

    sudo /usr/local/bin/timelimit.sh &
  4. 우분투 다시 시작


2

방금 쉽게 답변을 받았습니다. 코드는 스레드 http://forums.linuxmint.com/viewtopic.php?f=213&t=77687에 설명되어 있습니다. 한마디로 : 하루에 분 단위로 구성된 제한, 매 분마다 cron 작업, 사용자에게 알려주는 메시지 및 강제 로그 오프.

이것을 다운로드하여 설치하려면 터미널을 열고 아래 명령을 실행하십시오.

cd /tmp/
git clone https://github.com/Thomas-Baeckeroot/ParentalControl.git
cd ParentalControl/
./install.sh

설치 과정에서 cron 작업을 설치하고 스크립트를 복사하기 위해 관리자 비밀번호가 요청됩니다. 거기에서 당신은 모두를 위해 안내 될 것입니다. 만일을 대비하여 같은 장소에 ./uninstall.sh도 있습니다. 그것은 모든 우분투 기반 배포판 (민트 등 ... 아마 모든 데비안에서도)과 함께 작동하도록 빌드되었습니다. 문제가 발생하면 의견에 시스템 버전 및 그래픽 환경을 포함하여 알려주십시오.

uname -a
echo $XDG_CURRENT_DESKTOP

토마스 베이커 루


1

LittleBrotherLinux 컴퓨터에서 재생 시간을 모니터링 할 수있는 새로운 버전의 베타 버전을 출시했습니다 . 테스트 사용자는 데비안 패키지를 사용해 볼 수 있습니다. 다운로드 및 사용 방법에 대한 지침은 https://github.com/marcus67/little_brother 에서 찾을 수 있습니다 . 그래도 설치는 다소 거칠 수 있습니다. 애플리케이션의 기능은 다음과 같습니다.

  • 여러 사용자를 모니터링 할 수 있습니다.
  • 각 사용자는 허용 된 재생 시간을 정의하는 특정 규칙 집합을 가질 수 있습니다.
  • 규칙은 요일 및 / 또는 휴가 일정과 같은 "컨텍스트"에 적용 할 수 있습니다 (현재 독일 일정 만 지원됨).
  • 재생 시간은 시간 창 (시작부터 끝까지)으로 제한 될 수 있습니다.
  • 하루 최대 재생 시간을 정의 할 수 있습니다.
  • 사용자는 특정 최대 세션 시간 후에 휴식을 취할 수 있습니다.
  • 사용자는 활동 후 최소 휴식 시간을 기다려야 할 수 있습니다.
  • 다수의 Linux 클라이언트 호스트를 모니터링 할 수 있습니다 (현재 사용자는 모든 시스템에서 동일한 로그인을 요구합니다).
  • 모든 사용자의 활동 내역이있는 마스터 호스트가 있습니다. 이 마스터 호스트는 규칙 세트를 확인하고 필요한 경우 클라이언트 호스트가 프로세스를 종료하도록 프롬프트합니다.
  • 마스터 호스트는 구성된 히스토리 길이 (예 : 7 일) 동안 사용자 활동을 볼 수있는 간단한 웹 인터페이스와 향후 구성된 날짜 수에 대한 규칙 예외를 동적으로 정의하는 관리 페이지를 제공합니다.
  • 웹 응용 프로그램은 프록시 뒤에서 실행될 수 있으므로 더 많은 재생 시간을 구걸하는 젊은 사용자의 전화를받은 후 원격 관리를 허용하여 원격 관리가 가능합니다.
  • 응용 프로그램은 국제 언어를 지원합니다. 현재 영어와 독일어 번역이 제공됩니다. 사용자는 다른 언어로 번역 할 수 있습니다.
  • 응용 프로그램은 음성 생성을 사용하여 사용자에게 임박한 강제 로그 아웃을 알려줍니다. 또한이 음성 메시지는 국제화되어 있습니다.
  • Linux 호스트에 소요 된 시간 외에도 응용 프로그램은 스마트 폰 또는 테이블과 같은 다른 장치의 활동 시간을 모니터링 할 수 있습니다. 대부분의 최신 운영 체제는 장치를 사용하지 않는 동안 일종의 절전 모드로 설정한다는 사실을 이용합니다. 이런 식으로 네트워크 응답 (핑)은 해당 장치의 활동을 결정하는 데 사용될 수 있습니다. Linux 호스트와 달리 응용 프로그램은 활동을 종료 할 수 없습니다. 그러나 재생 시간이 전체 재생 시간에 추가되므로 허용 된 시간과 Linux 호스트의 중단 시간 규칙에 영향을 미칩니다.

일부 스크린 샷 :

상태 페이지 관리 페이지

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.