특정 응용 프로그램 (예 : 게임)에 대한 시간 제한 설정


8

우분투에서 일부 특정 응용 프로그램 (예 : 게임)에 대한 시간 제한을 설정하고 싶습니다. 특정 응용 프로그램의 사용을 특정 시간으로 제한하거나 응용 프로그램 사용을 특정 기간으로 제한 할 수있는 HomeGuard Program Blocker를 포함하여이를 수행 할 수있는 다양한 Windows 응용 프로그램이 있습니다. 우분투와 비슷한 소프트웨어가 있습니까?


Ubuntu의 자녀 보호라는 프로그램이 있지만 모든 응용 프로그램을 차단할 수 있는지 여부는 알 수 없습니다.
Anderson Green

지금까지 이것은 우분투 포럼에서 찾은 유일한 관련 토론입니다. ubuntuforums.org/showthread.php?t=977836 누군가 "Cyborg"및 "Cybercafe"라는 애플리케이션을 언급했지만 여전히 찾고 있습니다. 그들.
Anderson Green

timekpr이라는 프로그램도 있지만 특정 응용 프로그램에 대한 액세스를 차단할 수 있는지 모르겠습니다.
Anderson Green

이 작업을 수행하는 응용 프로그램을 개발하려면 실행중인 프로세스를 감지하는 방법을 찾아야합니다. cyberciti.biz/faq/show-all-running-processes-in-linux
Anderson Green

명령 줄을 통해 응용 프로그램에 대한 액세스를 제한 할 수도 있습니다.이 정보는 개발자에게도 유용 할 수 있습니다. askubuntu.com/questions/8149/…
Anderson Green

답변:


6

이 목적을 위해 다음 스크립트를 만들었습니다. 나는 그것을 명명했다 timelimit:

#!/bin/bash

#timelimit - Set daily time limits for specific applications

#Licensed under the standard MIT license:
#Copyright 2013 Radu Rădeanu (https://askubuntu.com/users/147044/).
#Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
#The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE

if [ $# -ne 1 ];then
    echo "Usage: `basename $0` APP_NAME"
    exit 1
fi

export DISPLAY=:0

app_name=$@
time_to_play_daily="2:30:00"  # channge as you wish; the format is: H[:M[:S]]
file="$HOME/.count_time_$app_name"

if [ -a $file ]; then
    if [ "$(head -1 $file)" != "$(date +%D)" ]; then
        echo $(date +%D) > $file
        echo $time_to_play_daily >> $file
    fi
else 
    touch $file
    echo $(date +%D) >> $file
    echo $time_to_play_daily >> $file
fi

time_to_play_left=$(sed -n '2p' $file)

sec_left=$(echo $time_to_play_left | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }')

function countdown
{
    sec_left=$(echo $time_to_play_left | awk -F: '{ print ($1 * 3600) + ($2 * 60) + $3 }')
    local start=$(date +%s)
    local end=$((start + sec_left))
    local cur=$start

    while [[ $cur -lt $end ]]; do
        pid=$(pgrep -x $app_name)
        if [ "$pid" != "" ]; then
            cur=$(date +%s)
            sec_left=$((end-cur))
            time_to_play_left="$((sec_left/3600)):$(((sec_left/60)%60)):$((sec_left%60))"
            sed -i "2s/.*/$time_to_play_left/" $file
            # next line is useful only when you test from terminal
            printf "\rTime left to play with %s: %02d:%02d:%02d" $app_name $((sec_left/3600)) $(((sec_left/60)%60)) $((sec_left%60))
            sleep 1
        else
            break
        fi
    done
}

while : ; do
    pid=$(pgrep -x $app_name)
    sleep 1
    if [ "$pid" != "" ]; then
        if [ $sec_left -gt 0 ]; then
            notify-send -i $app_name "Time left to play with $app_name for today: $time_to_play_left"
        else
            notify-send -i "error" "Your time to play with $app_name has finished for today!"
        fi
        countdown $time_to_play_left
        pid=$(pgrep -x $app_name)
        if [ "$pid" != "" ]; then kill $pid; fi
    fi
done

실행 파일로 만드는 것을 잊지 마십시오 :

chmod +x timelimit

통사론:

시간 제한 APP_NAME

중대한:

  • 터미널에서이 스크립트를 테스트 할 수 있지만 시스템 시작시 실행해야합니다. 시작시 실행되도록하려면 시작시 스크립트를 실행하는 방법을 참조하십시오 .
  • 밤에 컴퓨터를 끄지 않으면 자정에이 스크립트를 다시 시작해야합니다. 이를 위해 다음과 같은 크론 작업을 추가 할 수 있습니다.

    00 00 * * *`pgrep -x timelimit` && timelimit APP_NAME 종료
    

    https://help.ubuntu.com/community/CronHowto 에 대한 추가 정보


와우! 좋은! 컴퓨터를 재부팅하면 시간 제한이 무시됩니까? 그렇다면 시간 제한을 영구적으로 만들 수 있습니까 (예 : 읽기 전용 파일에서)?
don.joey

@Private 테스트 할 수 있습니다. 시간 제한은 파일에 저장되므로 컴퓨터는 재부팅 할 때 시간 제한을 무시합니다.
Radu Rădeanu

나는 이것이 패키지로 만들어져 저장소의 일부가 될 수 있다고 생각합니다. 아름다운 배쉬 스킬! 감사합니다. 나는 당신에게이 현상금을 제공하게되어 기쁩니다.
don.joey

그것은 게임을 함께 플레이하는 시간이 하루 이상이라고 말할 수있는 작은 우분투 메시지 상자를 제공한다는 좋은,하지만 메시지는 :) 시간 동안 ... 표시되고 계속해서
don.joey

@Private 어떤 앱으로 테스트 했습니까? 이 앱은 아마도 계속해서 열려고 할 것입니다.
Radu Rădeanu

0

각 실행에 대해 제한
간단하고 쉽게 해킹 할 수 있습니다. 그러나
timeout 15 totem 15 초 후에는 프로그램을 종료 할 수 있습니다. 그러나 다시 시작할 수 있습니다. timeout <sec>앱 '.desktop'파일 exec 필드 편집 및 추가

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