edit: mise à jour pour un avertisseur audio 2 minutes avant.
Je viens de faire la même chose sur ma debian mais sous forme de service
Le fichier /etc/init.d/max_temps (le service qui lance le programme)
#! /bin/sh
### BEGIN INIT INFO
# Provides: defaultdaemon
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
case "$1" in
start)
/usr/local/sbin/max_temps & ;;
restart|reload|force-reload)
echo "Error: argument '$1' not supported" >&2
exit 3 ;;
stop)
kill $(ps -e | grep max | cut -c-5 ) #pidof ne me donne pas le numero pid de max_temps?????
;;
*) echo "Usage: $0 start|stop" >&2
exit 3 ;;
esac
récupérez mon fichier militaire.mp3 pour avertir deux minutes avant l'extinction.
http://megamaths.free.fr/militaire.mp3
Placer ce fichier audio dans /opt/
J'utilise mpg321 pour lire ce fichier audio donc installez mpg321 ou alors changez dans le script ci-dessous mpg321 pour un autre lecteur audio.
Le fichier /usr/local/sbin/max_temps (le programme)
#! /bin/sh
USER=flavien
PREFIXE="/etc/max_temps"
FICHIER="${PREFIXE}/max_temps_${USER}_$(date "+%d%m%Y")"
LIMITE="${PREFIXE}/limite"
# création du dossier max_temps s'il n'existe pas
if [ ! -e /etc/max_temps/ ] ; then
mkdir /etc/max_temps/
fi
# durée maximum de connexion autorisée suivant les jours de la semaine.
# Je prère le mettre dans un fichier pour lire la limite avec adesklets
case $(date "+%a") in
lun | Mon | mar | Tue | jeu | Thu | ven | Fri ) echo 35 > $LIMITE ;;
mer | Wed ) echo 60 > $LIMITE ;;
sam | Sat | dim | Sun ) echo 125 > $LIMITE ;;
* ) echo $(date "+%a") > "${PREFIXE}/pasbon ";;
esac
while who >/dev/null
do
while who | grep $USER | grep tty7 >/dev/null
do
sleep 60 #pause de 1mn
# création et initialisation du fichier totalisant la durée de connexion de la journée
if [ ! -e $FICHIER ] ; then
rm -f ${PREFIXE}/max_temps_${USER}*
echo '0' > $FICHIER
else
echo $(($(cat $FICHIER)+1))> $FICHIER # on incrémente la durée d'une unité
fi
# si la limite est atteinte on arrête la machine
if [ "$( cat $FICHIER )" -ge "$(cat $LIMITE)" ] ; then
/sbin/shutdown -h now
fi
# 2 mn avant on prévient de la fin
if [ "$( cat $FICHIER )" -eq "$(($(cat $LIMITE)-2))" ] ; then
mpg321 /opt/militaire.mp3
fi
done
sleep 60 #pause de 60 seconde
done
ensuite créer le service (à changer pour d'autres distributions, moi j'ai une debian)
# update-rc.d -f max_temps defaults 99
# /etc/init.d/max_temps start
Il y a donc un une trompette pour avertir l'extinction dans 2 mn mais pour afficher en permanence le temps de connections qu'il reste j'utilise adesklets (à faire pour autre gdesklets etc...) et le desklets doityourself
dans le fichier ~/.desklets/doityourself-0.4.1/config.txt j'ai mis ceci
id1 = {'rawmode': True, 'script': '/usr/local/bin/temps.sh'}
(ou id0 si vous n'en avez pas d'autre)
et dans le fichier /usr/local/bin/temps.sh
!/bin/sh
PREFIXE="/etc/max_temps/max_temps_flavien"
LIMITE="/etc/max_temps/limite"
# le fichier-compteur du jour qui totalisera la durée d'utilisation effective de l'ordi pour la journée en cours
FICHIER="${PREFIXE}_$(date "+%d%m%Y")"
if test -f $FICHIER
then
TEMPS=`cat $FICHIER`
else
TEMPS=0
fi
echo "Il reste: "$(( $(cat $LIMITE) -$TEMPS ))" mn"
Il sera amélioré pour plusieurs user mais un peu plus tard ou alors par vous.
Effectivement il tourne en permanence et passe son temps en pause.
Vous pouvez bien sur utiliser ce pgm, le modifier etc....
Je regarderai aussi votre solution