Bonjour à tous,
J'ai écrit de mon coté 2 petits scripts qui fonctionnent pas trop mal.
Le premier "ctrl-cron.sh" doit être "croné" chaque minute.
#!/bin/bash
# Script inscrit dans crontab / chaque minute
# Ajoute une minute aux temps de connexion user
# Verifie depassement et arrete session si besoin
#
fic=/var/log/Sessions/`date +%y%m%d`
jour=`date +%u`
heure=`date +%H:%M`
# Variables
# Recherche des sessions x en cours ---------------------------
user=`ps -ef | grep "[0-9] x-session-manager" | awk '{print $1'}`
# Extraction du dernier mot de $user (si plusieurs sessions ouvertes)
user=`echo $user | sed s/" "/";"/g`
user=${user##*;}
# Ajout info de connexion pour user en cours
echo `date '+%y-%m-%d-%a %H:%M:%S'` $user >> $fic.`hostname`
#
# Verif autorisation de connexion pour user en cours
calcule.sh $user
# Deconnexion si necessaire
if [ $? -eq 1 ] ; then
pid=`ps -ef | grep $user | grep "[0-9] x-session-manager" | awk '{print $2'}`
kill $pid
fi
Le deuxième "calcule.sh" va calculer si l'utilisateur a dépassé son temps.
#!/bin/bash
# Calcul du temps de connexion d'un utilisateur
# Code retour = 1 si connexion interdite
#
# Variables
user=$1
fic=/var/log/Sessions/`date +%y%m%d`
jour=`date +%u`
heure=`date +%H:%M`
# Fichier contenant les valeurs limite
source j${jour}.conf
stop=0
# Calcul temps de connexion
nbr=`grep $user$ ${fic}.* | wc -l`
# Controle duree connexion et heure
if [ $nbr -ge $temps_maxi ] ; then stop=1 ; fi
if [ $heure \> $heure_maxi ] ; then stop=1 ; fi
if [ $heure \< "07:00" ] ; then stop=1 ; fi
if [ $user = 'maman' -o $user = 'papa' ] ; then stop=0 ; fi
# Deconnexion si necessaire
if [ $stop -eq 1 ] ; then
exit 1
fi
J'ai ensuite créé 7 fichiers de conf (un pour chaque jour). Celui de lundi s'appelle "j1.conf", celui du mardi "j2.conf"...
temps_maxi=150
heure_maxi='22:15'
Et pour finir, modifier le xsession de l'utilisateur comme suit :
#!/bin/bash
/home/bin/Sessions/calcule.sh $USER
if [ $? -eq 0 ] ; then
exec x-session-manager
fi
Le paramétrage n'est pas très élégant, mais c'est efficace. Quand le temps est écoulé, ça ferme la session. Oui, je sais, c'est brutal...
Comme je suis quand même sympa, j'ai fait un autre script qui permet de savoir où en est le compteur.
Attention : l'effet pervers d'un tel système, c'est que l'on commence la soirée par le clavardage, avant que ça coupe, le travail scolaire vient après...