Page 1 sur 1
pb affichage message shell
Posté : ven. 10 mai 2019 11:01
par olivierlamidesarbres
Bonjour
Je précise que je suis débutant et que je suis sous Linux Mint 19.1 Cinnamon
Un ami m'a installé un script shell qui controle le temps de connexion des enfants.
Lorsqu'ils sont connectés (en environnement graphique) le script est exécuté toutes les 2 minutes grâce à crontab.
Quand je lance le script pour le tester avec sh surveil.sh, il fonctionne bien et affiche comme prévu des messages à l'écran avec la commande
Mais lorsqu'il est exécuté automatiquement, le script fonctionne mais n'envoie plus de message.
Je ne trouve pas de solution. Quelqu’un a déjà rencontré ce problème ?
Merci
Re: pb affichage message shell
Posté : ven. 10 mai 2019 11:11
par arghlub
Salut olivier,
Donne-nous le code entier du script Shell.
Poste
(entre balises </code>) le retour de cette commande :

Re: pb affichage message shell
Posté : ven. 10 mai 2019 11:14
par zeb
Bonjour,
olivierlamidesarbres a écrit : ven. 10 mai 2019 11:01
Je précise que je suis débutant et que je suis sous Linux Mint 19.1 Cinnamon
Alors pourquoi avoir posté dans LMDE ?
Je déplace dans general

Re: pb affichage message shell
Posté : ven. 10 mai 2019 11:21
par zeb
Oups, dans terminal plutôt

Re: pb affichage message shell
Posté : dim. 12 mai 2019 13:07
par olivierlamidesarbres
Merci, ça fonctionne avec ta commande !
Voici le shell
Code : Tout sélectionner
bin/sh
# Surveillance du temps de connexion des enfants
# Vincent MAGNIN, 1er juin 2014, mis à jour le 26/06/2014
# 1 période = 2 minutes, peut être réglée en utilisant dans un terminal : crontab -e
# pour espeak :
export DISPLAY=:0
# pour que notify-send affiche à l'écran
export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u)/bus"
### Nombre max de périodes de DEUX minutes autorisées :###
j_sem=$(date +%a)
if [ $j_sem = "dim." ] || [ $j_sem = "sam." ] ; then
limite=30 ### =60 minutes d'ordi par jour le week-end
else
limite=20 ### =40 minutes la semaine
tps_lim_1=10 ### =20 min de jeux particulièrement surveillés (durée faible)
tps_lim_2=15 ### =30 min d'une autre activité surveillée (durée plus grande)
fi
#----------------------------
# Déclaration des fonctions :
#----------------------------
# Cette fonction affiche un message grâce au système de notification
# et le prononce à haute voix grâce au synthétiseur vocal espeak
avertir ()
{
local titre="$1"
local corps="$2"
local icone=$3
notify-send "$titre" "$corps" --icon=$icone -t 10000
espeak "$titre$corps" -v french -s 120 -p 80 ### s 80 lent et 200 rapide, p 20 grave et 100 aigu
sleep 1
}
# Cette fonction surveille et limite la durée d'utilisation d'un processus
# Un fichier log est généré avec l'heure inscrite toutes les 2 minutes
surveiller ()
{
local processus=$1
local limite=$2
local en_cours
local periodes_processus
local fichier
# en_cours=$(ps --no-headers -C $processus)
en_cours=$(ps -u ulysse | grep $processus)
if [ "$en_cours" != "" ]; then
fichier=$repertoire$jour$processus".log"
echo $(date +%X) >> $fichier
periodes_processus=$(wc -l < $fichier)
if [ $periodes_processus -gt $limite ] ; then
avertir "C'est terminé de jouer à "$processus" Je l'arrête !"
killall $processus
elif [ $periodes_processus -eq $limite ] ; then
avertir "Tu as passé trop de temps sur "$processus", plus qu'une minute ! Il faut arrêter !"
fi
fi
}
#---------------------
# Programme principal
#---------------------
# On détermine le nom du fichier log pour aujourd'hui :
repertoire="/home/ulysse/.parents/"
jour=$(date --rfc-3339=date)
fichier=$repertoire$jour".log"
w | grep ulysse > /dev/null
if [ $? = 0 ]; then
heure=$(date +%H)
minute=$(date +%M)
mois=$(date +%m)
jour=$(date +%d)
# controle de la plage horaire
if [ $heure -ge 19 ] ; then ### pas d'ordi après 19h00
avertir "Il est "$(date +%R)" c'est l'heure de manger puis d'aller dormir" " " face-angel
avertir "Je te souhaite une très bonne nuit, Ulysse" " " face-angel
sleep 4
sudo shutdown -h now
fi
if [ $heure -lt 8 ] ; then ### pas d'ordi avant 8h00
avertir "A "$(date +%R)" il est préférable de dormir" " " face-angel
sleep 4
sudo shutdown -h now
fi
# Lors de la première connexion de la journée (pas de fichier log) :
if [ ! -f $fichier ] ; then
avertir "Bonjour Ulysse !" "Tu n'as que $(($limite*2)) minutes d'ordinateur le $(date)" face-angel
fi
# Evénements particuliers à signaler :
if [ $mois -eq 02 ] && [ $jour -eq 25 ] && [ $minute -lt 3 ] ; then ### minute<3 prononce 2 fois en début d'heure
avertir "bon anniversaire ulysse a "$(date +%R) ### $(date +%R) = hh:mm
fi
if [ $mois -eq 12 ] && [ $minute -lt 3 ] ; then
if [ $jour -eq 24 ] || [ $jour -eq 25 ] ; then
avertir "je te souhaite de bonnes vacances. joyeux noël "
fi
fi
if [ $mois -eq 01 ] && [ $jour -eq 01 ] && [ $minute -lt 3 ] ; then
avertir "bonne année Ulysse a "$(date +%R)
fi
# Ecrit l heure dans un fichier nommé d après la date du jour :
echo $(date +%X) >> $fichier
# Compte le nombre de lignes de ce fichier :
periodes=$(wc -l < $fichier)
# Au redémarrage pour désactiver cette commande : sudo shutdown -c puis déconnexion de la session ???
if [ $periodes -eq $(($limite-2)) ] ; then
avertir "Tu as fait beaucoup beaucoup beaucoup d'ordinateur aujourd'hui Ulysse" " " face-angry
avertir "L'ordinateur s'arrête dans 5 minutes !" " " face-angry
elif [ $periodes -eq $limite ] ; then
avertir "Attention Ulysse, l'ordinateur s'arrête dans 50 secondes"
# Il faut laisser le temps (1 minute) à l administrateur de désactiver le script si jamais la session enfants s'ouvre automatiquement
killall "firefox"
elif [ $periodes -ge $(($limite+1)) ] ; then
avertir "L'ordinateur va VRAIMENT s'éteindre dans 2 secondes"
sleep 4
sudo shutdown -h now
fi
# Liste des processus à surveiller particulierement
for p in "supertux2"; do
surveiller $p $tps_lim_1
done
surveiller "activité no2" $tps_lim_2
fi
exit 0