[Contrôle Parental] limiter la durée d'utilisation d'internet

Ce qui ne concerne ni le forum ni des problèmes
bruno50
newbie
Messages : 6
Inscription : sam. 09 sept. 2017, 17:52

[Contrôle Parental] limiter la durée d'utilisation d'internet

Message par bruno50 » mar. 17 juil. 2018, 11:23

Les enfants sont très accrocs au jeux sur internet et doivent apprendre à gérer les priorités.
En limitant la durée d'utilisation d'internet la priorité aux recherches pour les devoirs s'inscrit dans une durée limitée.
Ce programme est lancé à chaque session et scrute toutes les 10 secondes l'utilisation de Firefox.
Si Firefox est activé, incrémentation d'un compteur.
5 mn avant durée limite, une notification visuelle et sonore est activée.
Lorsque la durée limite est atteinte, fermeture de Firefox et arrêt de la connexion internet par systemctl stop NetworkManager (ou wicd selon le gestionnaire de connexion installé)
Ce programme est très simple et efficace (fonctionne dans l'état), le problème étant que le reboot ou la fermeture et réouverture de la session relance la connexion internet, mais tant que l'utilisateur ne le sait pas...
Toutes les idées d'amélioration sont les bienvenues.
Prérequis :
1 - installer libnotify pour avoir les notifications
2 - ouverture de session de l'utilisateur (Luc) par son mot de passe.
3 - Firefox comme navigateur (ou remplacez Firefox par le navigateur internet utilisé)
4 - création de ces fichiers en root.
***************************************************************************
Créer un fichier son.mp3 de quelques secondes (star wars pour Luc) dans le répertoire /usr/local/share/deconnecte/son.mp3 qui sera activé en même temps qu'une notification.
installer le paquet sox pour avoir la commande play.
***************************************************************************
Créer le fichier usr/local/bin/stopinternet :

Code : Tout sélectionner

#!/bin/bash
##
#vérification du lancement de firefox et boucle en attente de firefox
#arrêt de networkmanager au bout de 30 mn (1800 sec / 10 = compteur à 180)
 
aa="0"
while [ "$aa" != "5400" ] ## Boucle 10 sec pour faire 5400 tests max, soit 540min (9h)
do
	## Si non connecté, 10s d'attente et relance le test
	ps -u $USER | grep firefox >/dev/null

	if [ $? == "0" ]; then
	{
		sleep 10
		((aa++))
#	printf $aa
		if [ "$aa" == "150" ]; then # alerte 5 minutes avant (25x60/10)
			{
			/usr/local/share/deconnecte/son.mp3
			sudo -u $USER DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send "Coucou $USER" "encore 5 minutes d'inernet" --icon=dialog-error			
			}
			fi
		if [ "$aa" == "180" ]; then # Ferme firefox et arrête NetworkManager au bout de 30 mn (30x60/10)
			{
			numpid=$(ps -u luc | grep firefox | awk ' {print $1}')
#			echo $numpid
			kill $numpid			
			systemctl stop NetworkManager
			}
			fi
	}
	else
	{
		sleep 10
#		printf "NC"
	}
	fi	
done
if [ "$aa" != "5400" ]; then
	{
echo $aa
	}
fi
exit 0
Vous pouvez modifier la durée qui reste la même tous les jours en modifiant les valeurs du compteur (
*************************************************************************
le fichier stopinternet est lancé à chaque session par le timer qui lance le service qui lance le programme :

Créer le fichier /etc/systemd/system/stopinternet.service

Code : Tout sélectionner

[Unit]
Description=arrete firefox au bour de 30 mn du lundi au vendredi
[Service]
ExecStart=/bin/bash /usr/local/bin/stopinternet
User=root
Type=oneshot
**************************************************************************
Créer le fichier /etc/systemd/system/stopinternet.timer
[Unit]
Description=chaque jour au début de la session
[Timer]
#After=logind.target
#After=network.target
# Time to wait after booting before we run first time
Unit=stopinternet.service
#du lundi au vendredi a partir de 16h50
OnCalendar=Mon,Tue,Wed,Thu,Fri *-*-* 16:50:00
Persistent=true
[Install]
#WantedBy=multi-user.target
WantedBy=timers.target
[/code]
Nota : le week-end pas de restriction, ce sont les parents qui supervisent vous pouvez appliquer les mêmes restriction le week-end en modifiant la ligne OnCalendar comme cela :

Code : Tout sélectionner

OnCalendar=*-*-* 16:50:00
N'oubliez pas d'installer les add-on Firefox uBlock origin pour ne pas se laisser envahir par les pubs et surtout Enforce Safe search qui bloque les contenus X et autres sur google, yahoo, bing etc...

Répondre