Imposta limiti di tempo per applicazioni specifiche (come i giochi)


8

Vorrei fissare limiti di tempo per alcune applicazioni specifiche (come i giochi) su Ubuntu. Esistono diverse applicazioni Windows che possono eseguire questa operazione, incluso HomeGuard Program Blocker, che può limitare l'utilizzo di determinate applicazioni a determinate ore del giorno o limitare l'uso delle applicazioni a determinati periodi di tempo. Esiste un software simile per Ubuntu?


Esiste un programma chiamato Parental Control per Ubuntu, ma non so se sia possibile bloccare tutte le applicazioni.
Anderson Green,

Finora, questa è l'unica discussione rilevante che ho trovato sui forum di Ubuntu: ubuntuforums.org/showthread.php?t=977836 Qualcuno ha menzionato applicazioni chiamate "Cyborg" e "Cybercafe", e sto ancora cercando di trovare loro.
Anderson Green,

C'è anche un programma chiamato timekpr, ma non so se sia in grado di bloccare l'accesso ad applicazioni specifiche.
Anderson Green,

Se ho intenzione di sviluppare un'applicazione che faccia questo, allora dovrò trovare un modo per rilevare i processi in esecuzione: cyberciti.biz/faq/show-all-running-processes-in-linux
Anderson Green

È anche possibile limitare l'accesso alle applicazioni tramite la riga di comando: queste informazioni possono essere utili anche per gli sviluppatori. askubuntu.com/questions/8149/…
Anderson Green

Risposte:


6

Ho appena realizzato la seguente sceneggiatura per questo scopo. L'ho chiamato 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

Non dimenticare di renderlo eseguibile:

chmod +x timelimit

Sintassi:

timelimit APP_NAME

Importante:

  • È possibile testare questo script nel terminale, ma dovrebbe essere eseguito all'avvio del sistema. Per farlo funzionare all'avvio, vedi Come eseguire gli script all'avvio?
  • Questo script dovrebbe essere riavviato a mezzanotte se non spegni il computer di notte. Per fare ciò puoi aggiungere un cron job come:

    00 00 * * * kill `pgrep -x timelimit` && timelimit APP_NAME
    

    Ulteriori informazioni su: https://help.ubuntu.com/community/CronHowto


Wauw! Bello! Il riavvio del computer ignorerebbe il limite di tempo? In tal caso, sarebbe possibile rendere persistente il timelimit (ad esempio in un file di sola lettura)?
don.joey,

@Privato Puoi provarlo. Il limite di tempo è memorizzato in un file, quindi sì, il computer ignora il limite di tempo al riavvio.
Radu Rădeanu,

Penso che questo potrebbe essere impacchettato e diventare parte dei repository. Belle abilità di bash! Grazie e sono felice di offrirti questa generosità.
don.joey,

È bello che dia una piccola finestra di messaggio Ubuntu per dire che il tempo di giocare con un gioco è finito per un giorno, ma quel messaggio continua a essere visualizzato ... per ore :)
don.joey

@Privato Con quale app l'hai testata? Quell'app vorrebbe probabilmente aprirsi ancora e ancora.
Radu Rădeanu,

0

Limitare per ogni lancio
Semplice e facilmente hackerabile. Ma usarlo per controllarti
timeout 15 totem uscirà dal programma dopo 15 sec. Ma può essere lanciato di nuovo. Modifica e aggiungi timeout <sec>al exec campo del file '.desktop' delle app

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.