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

Code : Tout sélectionner

notify-send "$titre" "$corps" --icon=$icone -t 10000 
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 :

Code : Tout sélectionner

cat surveil.sh
:ugeek: ;)

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 ? :l
Je déplace dans general ;)

Re: pb affichage message shell

Posté : ven. 10 mai 2019 11:21
par zeb
Oups, dans terminal plutôt :mrgreen:

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