67 votes

Comment limiter le temps d'écran de mes enfants ?

L'accès à notre ordinateur (pas seulement à internet) doit être restreint pour les comptes de mes enfants (7, 8 ans) jusqu'à ce qu'ils soient assez grands pour gérer cela par eux-mêmes. Jusque-là, nous devons être en mesure de définir ce qui suit :

  • les heures de la journée où l'utilisation de l'ordinateur est autorisée (par exemple, de 17h à 21h)
  • les jours de la semaine où l'utilisation de l'ordinateur n'est pas autorisée (par exemple, du lundi au vendredi)
  • la durée autorisée par jour (par exemple, 2 heures)

Dans la version 11.10, tous les outils qui fonctionnaient auparavant ne fonctionnent plus :

  • Timekpr : pour une version > 11.10, n'est plus disponible via le ppa.
  • Timeoutd : alternative en ligne de commande, mais à partir de la version 11.10 supprimé des dépôts.
  • Gnome Nanny : semble très bien mais plante de manière répétée obligeant à redémarrer le serveur X. Nous ne pouvons donc pas utiliser ou recommander ce programme pour le moment.

Y a-t-il d'autres alternatives ?

5voto

NotMe Points 3732

timekpr - Ce programme permet de suivre et de contrôler l'utilisation de l'ordinateur par vos comptes d'utilisateurs. Vous pouvez limiter leur utilisation quotidienne en fonction d'une durée d'accès chronométrée et configurer des périodes de la journée pendant lesquelles ils peuvent ou ne peuvent pas se connecter. Avec cette application, les administrateurs peuvent limiter la durée de connexion du compte ou les heures d'accès au compte. L'application fonctionne comme un contrôle parental du temps et sera utile aux parents qui souhaitent limiter le temps d'accès de leurs enfants.

Even Nedberg a proposé la réponse suivante :
Je viens de commencer la copie pour la version 11.10 pour le PPA. Cela devrait se terminer
dans quelques minutes.

Vous pouvez mettre à jour votre système avec des paquets non pris en charge à partir de ce PPA non fiable en ajoutant ppa:timekpr-maintainers/ppa aux sources logicielles de votre système.

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

Ce paquet est disponible dans :

PROBLÈME :

J'ai signalé le bug ici donc croisons les doigts et attendons....

3voto

Jacob Vlijm Points 78990

Introduction

Nous pouvons vérifier si un utilisateur est connecté avec la commande:

who -u

ce qui nous donne une sortie comme:

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

Dans la sortie, nous obtenons le pid de l'utilisateur ciblé, qui doit être arrêté si le temps dépasse la limite.

La solution

En supposant que votre utilisateur n'a pas de privilèges sudo:

Cette solution est un petit script en arrière-plan. Il limite l'utilisation par jour à un nombre défini de minutes, à définir en tête du script. Une fois configuré (ce qui n'est pas trop difficile), il s'exécute très facilement et aucune action supplémentaire n'est nécessaire par la suite.

Pour éviter toute perte de données non souhaitée de fichiers potentiellement ouverts, 60 secondes avant l'expiration de la limite de temps de l'utilisateur ciblé, un message apparaîtra sur son ou son DISPLAY:

entrer la description de l'image ici

Le script

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

#--- définir la limite de temps ci-dessous (minutes)
minutes = 120
#--- définir le nom d'utilisateur à limiter ci-dessous
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 'Utilisateur "+user+\
      " sera déconnecté dans 60 secondes'"+'"'

currday1 = read(datefile)

while True:
    time.sleep(10)
    currday2 = int(time.strftime("%d"))
    # vérifier si le jour a changé, pour réinitialiser le quantum utilisé
    if currday1 != currday2:
        open(datefile, "wt").write(str(currday2))
        try:
            os.remove(uselog)  
        except FileNotFoundError:
            pass
    # si le pid du processus ciblé existe, ajouter une "coche" au quantum utilisé
    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))
        # lorsque le temps dépasse la quantité autorisée, tuer le processus
        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

Comment utiliser

  1. Sur votre bureau (ou ailleurs), créez un dossier nommé: limite

  2. Copiez le script dans un fichier vide, enregistrez-le sous le nom de limit_use (sans extension) à l'intérieur du dossier et rendez-le exécutable

  3. Modifiez dans l'en-tête du script le nom d'utilisateur à limiter, et le nombre maximum de minutes autorisées. Dans l'exemple:

    #--- définir la limite de temps ci-dessous (minutes)
    minutes = 1
    #--- définir le nom d'utilisateur à limiter ci-dessous
    user = "jacob"
  4. Copiez le dossier dans le répertoire /opt:

    cp -r /chemin/vers/limite /opt
  5. Modifiez maintenant /etc/rc.local pour exécuter le script en tant que root au démarrage:

    sudo -i gedit /etc/rc.local

    Juste avant la ligne

    exit 0

    une autre ligne:

    /opt/limit/limit_use &

Explication; comment ça marche

  • Une fois toutes les 10 secondes, le script vérifie si l'utilisateur ciblé est connecté. Si c'est le cas, il "ajoute" un "point" à une utilisation totale, à enregistrer dans un fichier (/opt/limit/uselog). Si la limite quotidienne est atteinte, le script n'autorise plus l'utilisateur à se connecter, tue son processus s'il existe.
  • Sur le changement de jour (la date est enregistrée dans un fichier, donc le redémarrage ne sera d'aucune aide), le fichier journal est supprimé, permettant à une nouvelle quantité de temps d'utilisation de s'accumuler.
  • Étant donné que le script s'exécute au démarrage, à partir de rc.local, seuls les utilisateurs avec des privilèges sudo peuvent arrêter le script, et encore moins s'ils connaissent le nom du processus.

Arrêter le script

Si vous souhaitez arrêter le script, utilisez la commande:

sudo kill "$(pgrep limit_use)"

Mais vous aurez besoin du mot de passe sudo pour le faire.

2voto

Csaba Points 21

J'ai essayé timekpr mais je n'ai pas réussi à le faire fonctionner. J'ai donc créé une variante qui fonctionne sur mon Ubuntu. Voici ce qu'il faut faire pour cette variante :

  1. Ajoutez une limite de temps dans le fichier /var/lib/timelimit/user_to_be_limited.limit avec seulement les droits root. par exemple 1800 pour 1800 secondes (30 minutes) de limite quotidienne.

  2. Créez /usr/local/bin/timelimit.sh avec les droits root avec ce qui suit :

    #!/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" "Il vous reste 60 secondes!"
                    sleep 60
                    pkill -u $userName
                fi
            fi
        done
    done
  3. Ajoutez à /etc/rc.local :

    sudo /usr/local/bin/timelimit.sh &
  4. Redémarrez Ubuntu

2voto

J'ai simplement rendu une réponse disponible facilement. Le code est expliqué dans le fil de discussion http://forums.linuxmint.com/viewtopic.php?f=213&t=77687. En bref : une limite configurée en minutes par jour, une tâche cron toutes les minutes, un message à l'utilisateur pour le tenir informé et une déconnexion forcée.

Pour télécharger et installer cela, ouvrez un Terminal et exécutez les commandes ci-dessous :

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

Le mot de passe de l'administrateur sera demandé pendant le processus d'installation (pour installer la tâche cron, copier le script, ...). À partir de là, vous serez guidé pour tout. Il y a aussi un ./uninstall.sh au même endroit au cas où. Il est conçu pour fonctionner avec toutes les distributions basées sur Ubuntu (Mint, etc... probablement aussi toutes les versions de debian). Si un problème survient, veuillez me le faire savoir, y compris la version du système et l'environnement graphique dans les commentaires :

uname -a
echo $XDG_CURRENT_DESKTOP

Thomas Baeckeroot

2voto

WinEunuuchs2Unix Points 91128

Minuterie pour écran de verrouillage

systray.gif

Créez votre propre minuteur de verrouillage d'écran au lieu d'utiliser des applications tierces.

Bien qu'il existe des applications tierces pour ce faire, vous pouvez créer la vôtre. Résumé des étapes :

  • Utilice gedit pour créer script lock-screen-timer
  • Copiez et collez le code de cette fenêtre dans lock-screen-timer
  • Mark lock-screen-timer comme un exécutable
  • Testez-le !
  • Configurer Nautilus pour exécuter les scripts de bash
  • Créer un lien vers le raccourci du bureau
  • Contrôle du temps restant

Utilice gedit pour créer script lock-screen-timer

Ouvrez le Terminal en utilisant Ctrl + Alt + T et le type :

gedit lock-screen-timer

Copiez et collez le code de la fenêtre ci-dessous dans lock-screen-timer

Retournez à cet écran et copiez le code suivant en le mettant en surbrillance et en appuyant sur la touche 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 Nov 13, 2021.

# UPDT: Updated to support WSL (Windows Subsystem for Linux)
#       Remove hotplugtv. Replace ogg with paplay.
#       May 30 2018 - Cohesion with multi-timer. New sysmonitor indicator style.
#       Nov 13 2021 - Wrap long lines with \ continuation. Shorten comments.

# 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 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 "Lock screen in: $MINUTES Minutes" > ~/.lock-screen-timer-remaining

        sleep 60

    done

    rm ~/.lock-screen-timer-remaining # Remove countdown work file

    if [[ $WSL_running == true ]]; then  
        # Call lock screen for Windows 10
        rundll32.exe user32.dll,LockWorkStation
    else
        # Call screen saver lock for Unbuntu 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.

Puis basculer à nouveau vers le vide gedit et coller le code en utilisant Ctrl + V . Enregistrez le fichier et quittez l'éditeur pour revenir à l'invite de commande.

Mark lock-screen-timer comme un exécutable

Maintenant, nous devons rendre le script exécutable en tapant :

chmod +x lock-screen-timer

Testez-le !

Avant d'appeler le script depuis l'interface graphique, nous allons l'appeler depuis le terminal afin de voir si des messages d'erreur s'affichent :

~/lock-screen-timer

Vous êtes invité à indiquer le nombre de minutes :

Lock Screen Timer

Réglez le nombre de minutes souhaité et cliquez sur OK pour lancer le minuteur. Lorsqu'il reste 15, 10, 5, 3, 2 et 1 minute(s), le système émet un son et une bulle de message apparaît pour indiquer que l'écran sera verrouillé. Une fois l'écran verrouillé, vous devez entrer votre mot de passe pour déverrouiller l'écran.

Configurer Nautilus pour exécuter les scripts de bash

Nautilus définit ce qui se passe lorsque nous double-cliquons sur un exécutable script lorsque c'est la fenêtre d'affichage des fichiers ou un lien sur le bureau. Le comportement normal est d'éditer le script à l'aide de gedit . Nous voulons changer ce comportement de façon à ce qu'il soit exécuté.

Lancez Nautilus et naviguez dans le répertoire contenant lock-screen-timer . Cliquez une fois avec le bouton gauche de la souris pour lui donner le focus. Passez la souris sur la barre de menu supérieure jusqu'à ce que le menu "File Edit..." apparaisse, utilisez :

  1. Cliquez sur Edit menu déroulant
  2. Cliquez sur Properties option
  3. Cliquez sur Behavior onglet
  4. Observez les boutons d'option radio sous Executable Text Files
  5. Cocher le bouton radio Run executable text files when they are opened

Créer un lien vers le raccourci du bureau

De la section précédente lock-screen-timer a encore de la concentration. Sinon, naviguez jusqu'au script et faites un clic gauche dessus une fois pour lui donner le focus. Puis utilisez :

  • Faites un clic droit sur le fichier et les options du menu contextuel apparaissent.
  • Dans le menu, sélectionnez Make Link .
  • Une nouvelle icône apparaît, appelée Link to lock-screen-timer .
  • Faites un clic gauche sur la nouvelle icône et faites-la glisser de Nautilus vers votre bureau.

Vous pouvez maintenant double-cliquer sur le lien du raccourci du bureau et le script est exécuté. Une boîte de dialogue apparaît pour obtenir le nombre de minutes. Deux boutons sont présentés Cancel y OK . Si vous cliquez sur le bouton X pour fermer la fenêtre, c'est la même chose que de sélectionner Cancel .

Une fois que la minuterie est en marche et que vous double-cliquez à nouveau dessus, la première copie en marche est "tuée". Vous pouvez maintenant lancer un nouveau compte à rebours pour le verrouillage des scren ou cliquer sur Cancel pour aucun compte à rebours.

Afficher le temps restant dans la barre d'état système / zone de notification

Pendant que le minuteur de l'écran de verrouillage fonctionne, il enregistre le nombre de minutes restantes dans le fichier. ~/.lock-screen-timer-remaining . Vous pouvez consulter ce fichier avec la fonction watch ou l'afficher dans la barre d'état système / barre d'indicateurs d'applications d'Ubuntu, comme indiqué en haut de cette réponse. Pour afficher le temps restant dans la zone de notification, suivez les instructions de cette question-réponse : BASH peut-il s'afficher dans la barre d'état système comme indicateur d'application ? .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X