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 notifications2 - 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
*************************************************************************
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