[Contrôle parental] limiter la durée d'accès au PC(Résolu)

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

[Contrôle parental] limiter la durée d'accès au PC(Résolu)

Message par bruno50 »

Une astuce pour limiter la durée d'utilisation du PC d'un utilisateur (luc) remplacez luc par le nom de l'utilisateur
une notification 10 mn avant coupure et une seconde notification 5 mn avant coupure (visuelle + sonore)
Prérequis :
1 - installer libnotify pour avoir lrs notification
2 - ouverture de session de l'utilisateur (Luc) par son mot de passe.
3 - 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.
***************************************************************************
Erratum : ce n'est pas dans access.conf mais dans time.conf
Dans /etc/security/time.conf ajouter :

Code : Tout sélectionner

#root autorisé à se connecter sans restrictions
*;*;root;Al0000-2400
# luc autorisé à se connecter de 16H45 à 18H40 pendant les jours de semaine, et de 14H00 à 18H40 pendant le week-end (+10mn avant coupure)
*;*;luc;Wk1645-1840|Wd1400-1840
***************************************************************************
Dans /etc/pam.d/lxdm (lxdm ou gdm, kdm, lightdm selon votre gestionnaire de connexion) ajouter :

Code : Tout sélectionner

account required pam_time.so
***************************************************************************
Créer le fichier usr/local/bin/deconnecte :

Code : Tout sélectionner

sess=$(loginctl session-status | awk 'NR == 1 {print $1}')
#echo $sess
#echo $USER
sudo -u $USER DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send -t 15000 "Attention $USER" "Arrêt de l'ordinateur dans 10 minutes"
play /usr/local/share/deconnecte/son.mp3
sleep 5m
sudo -u $USER DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send -t 10000 "Attention $USER" "Arrêt de l'ordinateur dans 5 minutes"  --icon=dialog-error
play /usr/local/share/deconnecte/son.mp3
sleep 5m
#sudo -u $USER DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send -t 10000 "Attention $USER" "Maintenant on coupe"  --icon=dialog-error
systemctl kill-session $sess
sleep 15
systemctl poweroff
erratum ligne 10 " au lieu de ' devant Attention
si vous ne voulez pas de fichier son, commentez les lignes

Code : Tout sélectionner

play /usr/local/share/deconnecte/son.mp3
en ajoutant un # au début
***************************************************************************
Créer le fichier etc/systemd/system/deconnecte.timer :

Code : Tout sélectionner

[Unit]
Description=chaque jour à la fin de session

[Timer]
#After=logind.target
# tous les jours à 18h35 notifie 10mn puis 5mn et déconnecte à 18h45
OnCalendar=*-*-* 18:35:00
#OnCalendar=Sat,Sun *-*-* 12:12:00
#Persistent=true
Unit=deconnecte.service

[Install]
WantedBy=multi-user.target
*****************************************************************************
créer le fichier /etc/systemd/system/deconnecte.service

Code : Tout sélectionner

[Unit]
Description=prévient puis ferme la session et poweroff

[Service]
Type=oneshot
ExecStart=/bin/bash /usr/local/bin/deconnecte
User=root
activer les services :

Code : Tout sélectionner

systemctl enable deconnecte deconnecte.timer
systemctl start deconnecte.timer
deconnecte.service est appelé par déconnecte.timer

*****************************************************************************
Déroulement du programme :
- la session est autorisée par /etc/security/access.conf jusqu'à 18h40, au delà il ne pourra plus se connecter via le gestionnaire de session (lxdm, gdm,kdm...)
- le timer etc/systemd/system/deconnecte.timer est lancé automatiquement à l'ouverture de la session
- le timer lance le programme /etc/systemd/system/deconnecte.service à 18h35 et dure 10 mn avant de couper l'ordinateur (18h45) qui doit être supérieur à l'autorisation d'ouverture de session (18h40).
Dernière modification par bruno50 le jeu. 05 juil. 2018, 16:59, modifié 12 fois.
Avatar de l’utilisateur
waitnsea
Maître du Kyudo
Messages : 2114
Inscription : jeu. 15 mars 2012, 05:08

Re: [Contrôle parental] [limiter la durée d'accès au PC]

Message par waitnsea »

Bonjour,
Tout ça semble très bien, une fois toutes les éventuelles remarques prises en compte, tu devrais faire une page Wiki. :bravo:

Edit: aur/timekpr à voir aussi
Avatar de l’utilisateur
karhu
Maître du Kyudo
Messages : 1194
Inscription : lun. 27 sept. 2010, 14:32
Localisation : Ile de France

Re: [Contrôle parental] [limiter la durée d'accès au PC]

Message par karhu »

bruno50 a écrit : Une astuce pour limiter la durée d'utilisation du PC d'un utilisateur (luc) remplacez luc par le nom de l'utilisateur
Pourquoi ne pas utiliser les variables d'environnement $USER ou $LOGNAME pour standardiser les scripts bash ? :?:
+1 pour le wiki. :mrgreen:
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
Avatar de l’utilisateur
papajoke
Elfe
Messages : 773
Inscription : sam. 30 août 2014, 19:54

Re: [Contrôle parental] [limiter la durée d'accès au PC]

Message par papajoke »

bonjour et bienvenue @bruno50,
karhu a écrit : dim. 24 juin 2018, 12:13 Pourquoi ne pas utiliser les variables d'environnement $USER ou $LOGNAME pour standardiser les scripts bash ? :?:
le timer est exécuté par systemd en root ;) il est possible de déplacer l'unité dans le home de l'utilisateur mais il y alors risque qu'il la supprime :!:

(non testé)
Il est possible de passer un paramètre à l'unité, du type deconnecte@.timer et deconnecte@.service,
passer le paramètre (login)

Code : Tout sélectionner

[Unit]
Description=prévient %i puis ferme la session et poweroff
[Service]
Type=oneshot
ExecStart=/usr/local/bin/deconnecte %i
User=%i

Code : Tout sélectionner

[Timer]
Unit=deconnecte@%i.service
dans bin/deconnecte
récupérer $1(login) et ? retrouver son id pour changer (si il faut path=/run/user/1000/bus)
Mais puisque l'on change User dans l'unit, je suppose que l'appel à notify-send est alors beaucoup simplifié

fermer la session avant le poweroff ? je ne suis pas sûr de l’intérêt ?

A voir si l'utilisateur ne peut pas tuer le processus si on passe User=%i ??

ps: mettre des mp3 dans bin ...
Arch stable - Kde 5 / zsh - btrfs/mbr - Intel Core i3 - 6Go RAM - GeForce 405 video-nouveau
Avatar de l’utilisateur
karhu
Maître du Kyudo
Messages : 1194
Inscription : lun. 27 sept. 2010, 14:32
Localisation : Ile de France

Re: [Contrôle parental] [limiter la durée d'accès au PC]

Message par karhu »

L'exécution est bien faite en root, mais root n'a pas ouvert de session !
Utilisateur normal :

Code : Tout sélectionner

karhu > loginctl 
   SESSION        UID USER             SEAT             TTY             
        c1       1000 karhu            seat0                            

1 sessions listed.
En tant que root :

Code : Tout sélectionner

root@galion # loginctl
   SESSION        UID USER             SEAT             TTY             
        c1       1000 karhu           seat0   

1 sessions listed.
Même résultat.
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
Avatar de l’utilisateur
papajoke
Elfe
Messages : 773
Inscription : sam. 30 août 2014, 19:54

Re: [Contrôle parental] [limiter la durée d'accès au PC]

Message par papajoke »

oui mais ici tu obtiens que la liste des sessions
Rien ne nous dit qu'il y a toujours qu'un seul utilisateur dans tous les cas (pour un wiki) c'est donc une solution qui ne pourrait fonctionner que dans 99% des cas - autant chercher une solution qui réponde à 100%

Si le frère et la sœur partagent la même machine, a qui vas tu envoyer le message ?
avec ma solution tu as juste 2 même timers à enable

MAIS bon, rien n’empêche l'utilisateur de redémarrer sa machine donc ce timer à un intérêt très relatif ... juste une petite piqûre de rappel. Il faudrait aussi bloquer le login entre 17h00 et 14h00 pour qu'il soit complet (par exemple, ne pas utiliser de timer mais un service qui ne soit pas "oneshot" comme ici ?).

---
Il doit déjà exister de bonnes solutions open source, pas sûr de l’intérêt de créer une nouvelle solution bricolée.
Arch stable - Kde 5 / zsh - btrfs/mbr - Intel Core i3 - 6Go RAM - GeForce 405 video-nouveau
Avatar de l’utilisateur
karhu
Maître du Kyudo
Messages : 1194
Inscription : lun. 27 sept. 2010, 14:32
Localisation : Ile de France

Re: [Contrôle parental] [limiter la durée d'accès au PC]

Message par karhu »

Avec une connexion réseau :

Code : Tout sélectionner

karhu > loginctl 
   SESSION        UID USER             SEAT             TTY             
        c1       1000 karhu            seat0                            
        c2       1001 test                                              

2 sessions listed.
En fait la solution proposée par @bruno50 est très bien si elle ne vise qu'une personne et ce, dans un cadre familiale. Ce que je pense d'après le titre. D'ailleurs ce serait bien de le mettre en conformité avec les règles du forum, merci @bruno50.
Dès qu'il y a la possibilité d'avoir plus d'une session en même temps sur un même PC, la simplicité s'en va. Il faut commencer à tester qui a droit à quoi. :mrgreen: , et au lieu d'un arrêt machine une simple déconnexion pour LE/LES innauthorisé(s) afin de ne pas faire râler LE/LES authorisé(s).
Bien sûr il faut suivre le conseil de @papajoke de définir une plage authorisée.
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
Avatar de l’utilisateur
Xorg
Maître du Kyudo
Messages : 1933
Inscription : dim. 22 janv. 2012, 19:25
Localisation : Entre le clavier et la chaise.

Re: [Contrôle parental] [limiter la durée d'accès au PC]

Message par Xorg »

Désolé, je vais faire le type chiant. Cependant, ce sont des détails qui n'affectent pas le fonctionnement du script.
bruno50 a écrit : sam. 23 juin 2018, 16:06Créer un fichier son.mp3 dans le répertoire /usr/local/bin
Les répertoires bin sont dans le PATH, et donc ils sont censés contenir des fichiers binaires exécutables. Ce n'est pas la place d'un fichier audio. Un sous-répertoire dans le /usr/local/share me semble plus judicieux.
bruno50 a écrit : sam. 23 juin 2018, 16:06ne pas oublier de mettre les fichiers /usr/local/bin en permission "autoriser l’exécution comme programme"
chmod +x /usr/local/bin/deconnecte, donc.
bruno50 a écrit : sam. 23 juin 2018, 16:06

Code : Tout sélectionner

[Unit]
Description=prévient puis ferme la session et poweroff

[Service]
Type=oneshot
ExecStart=/bin/bash /usr/local/bin/deconnecte
User=root
Soit tu mets /bin/bash comme interpréteur et ça fonctionnera même si le fichier n'est pas exécutable, soit tu mets ExecStart=/usr/local/bin/deconnecte et tu rends le fichier exécutable, mais faire les deux, c'est redondant.
Tu as mis un shebang en haut de ton script (#!/bin/bash), donc tu peux effectivement rendre ton script exécutable.

EDIT : Je viens de voir que ça a déjà été (partiellement) dit par papajoke.
Arch Linux x86_64 - Sway
AMD Ryzen 5 3600X - 32 Go de DDR4 - SSD NVMe 1 To + SSD SATA 250 Go - Sapphire NITRO+ Radeon RX 580
Image AUR___Image Wiki___Image GitHub
bruno50
newbie
Messages : 6
Inscription : sam. 09 sept. 2017, 17:52

Re: [Contrôle parental] [limiter la durée d'accès au PC]

Message par bruno50 »

Merci au modérateur pour la mise en forme, désolé je suis nouveau, je n'ai pas pris le temps de lire les règles du forum. Merci pour votre indulgence.
Merci à tous les lecteurs pour leurs remarques qui me permettent d'améliorer cette astuce.
J'ai mis en service cette astuce car auparavant j'ai beaucoup cherché une solution toute faite. Cette astuce est à destination d'un utilisateur unique et tous les parents savent ce que c'est d'appeler leur enfant à l'heure du dîner...
La coupure du PC n’empêche pas le redémarrage mais l'utilisateur ne peux plus se loger car l'accès est verrouillé par /etc/security/access.conf, il se trouve donc devant l'écran de connexion LXDM.
Le matériel : PC avec Archlinux x86_64 LXDM et Mate, un seul utilisateur : Luc
Fermer la session avant le poweroff permet peut-être au système de stocker un document libreoffice en cours pour pouvoir le récupérer à la session suivante, ça me paraissait plus propre (mais je n'en suis pas sûr).
j'avais également installé l'add-on procon-latte pour Firefox qui permettait de limiter l'accès qu'aux sites validés par l'administrateur, mais depuis Firefox Quantum, cet add-on n'est plus pris en compte.
J'ai également fait une autre astuce pour limiter la durée de connexion à internet de Luc (1/2 h par session) car cela limite le temps passé sur les jeux et l'oblige à gérer ses priorités, je vais vous la soumettre dans un prochain post.
Et avec vos remarques, votre aide et vos encouragements, je ferai une page wiki.
bruno50
newbie
Messages : 6
Inscription : sam. 09 sept. 2017, 17:52

Re: [Contrôle parental] [limiter la durée d'accès au PC]

Message par bruno50 »

papajoke a écrit : dim. 24 juin 2018, 16:11 MAIS bon, rien n’empêche l'utilisateur de redémarrer sa machine donc ce timer à un intérêt très relatif ... juste une petite piqûre de rappel. Il faudrait aussi bloquer le login entre 17h00 et 14h00 pour qu'il soit complet (par exemple, ne pas utiliser de timer mais un service qui ne soit pas "oneshot" comme ici ?).
l'utilisateur peux redémarrer sa machine mais il n'aura pas l'autorisation de se connecter en dehors de la plage allouée dans /etc/security/time.conf :
*;*;luc;Wk1645-1840|Wd1400-1840
Dernière modification par bruno50 le jeu. 05 juil. 2018, 16:12, modifié 1 fois.
bruno50
newbie
Messages : 6
Inscription : sam. 09 sept. 2017, 17:52

Re: [Contrôle parental] [limiter la durée d'accès au PC]

Message par bruno50 »

Oups !
j'ai oublié qu'il fallait ajouter dans /etc/pam.d/lxdm (lxdm ou gdm, kdm, lightdm selon votre gestionnaire de connexion)

Code : Tout sélectionner

account required pam_time.so
Avatar de l’utilisateur
papajoke
Elfe
Messages : 773
Inscription : sam. 30 août 2014, 19:54

Re: [Contrôle parental] [limiter la durée d'accès au PC]

Message par papajoke »

Arch stable - Kde 5 / zsh - btrfs/mbr - Intel Core i3 - 6Go RAM - GeForce 405 video-nouveau
bruno50
newbie
Messages : 6
Inscription : sam. 09 sept. 2017, 17:52

Re: [Contrôle parental] [limiter la durée d'accès au PC]

Message par bruno50 »

karhu a écrit : dim. 24 juin 2018, 17:06 En fait la solution proposée par @bruno50 est très bien si elle ne vise qu'une personne et ce, dans un cadre familiale. Ce que je pense d'après le titre. D'ailleurs ce serait bien de le mettre en conformité avec les règles du forum, merci @bruno50.
Dès qu'il y a la possibilité d'avoir plus d'une session en même temps sur un même PC, la simplicité s'en va. Il faut commencer à tester qui a droit à quoi. :mrgreen: , et au lieu d'un arrêt machine une simple déconnexion pour LE/LES innauthorisé(s) afin de ne pas faire râler LE/LES authorisé(s).
Bien sûr il faut suivre le conseil de @papajoke de définir une plage authorisée.
Le but de cette astuce est d'arrêter de hurler "à table", et d'empêcher l'ado de se connecter en dehors des plages autorisées, je vais cependant regarder l'incidence si deux utilisateurs.
Ma sœur n'avait d'autre recours que de couper le disjoncteur principal de la maison pour se faire obéir, c'était pas sympa...pour le PC.
Avatar de l’utilisateur
karhu
Maître du Kyudo
Messages : 1194
Inscription : lun. 27 sept. 2010, 14:32
Localisation : Ile de France

Re: [Contrôle parental] [limiter la durée d'accès au PC]

Message par karhu »

J'avais bien compris le but premier de la démarche, j'ai juste regardé par simple curiosité la généralisation du processus.
Je reconnais que de nos jours il y a plutôt un PC par personne utilisatrice, qu'un terminal pour une connexion par le réseau. :lol:
En fait tu gards le principe d'Arch Linux (KISS), et tu fais simple, juste pour un cas.
Il sera toujours temps d'améliorer cette astuce lorsque le cas se présentera de devoir l'employer pour plusieurs utilisateurs.
Pour le titre : [Contrôle parental ] limiter la durée d'accès au PC
La modification est à faire dans le premier post, de même que lorsqu'il sera terminé tu rajoutera à la fin du titre : (Résolu). Du moins j'espère. :P
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
Répondre