Résolu le 12-05-19 pb affichage message shell

Questions concernant les lignes de commandes
Répondre
olivierlamidesarbres
Messages : 3
Enregistré le : ven. 10 mai 2019 06:02

pb affichage message shell

Message 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
Modifié en dernier par arghlub le ven. 10 mai 2019 11:13, modifié 1 fois.
Raison : ajout de balises </code> à la ligne de script
Portable Acer Aspire, Linux Mint 19.1 Tessa, acer-Aspire-V3, kernel 4.15.0-142-generic x86_64, CPU Intel Core i5-3230M, cg Intel 3rd Gen Core processor graphics, mémoire 4 Go

Avatar du membre
arghlub
Administrateur du site
Messages : 10421
Enregistré le : dim. 21 mai 2017 08:19
Localisation : Provence
Contact :

Re: pb affichage message shell

Message 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: ;)
Tour1 (custom)CM MSI Z270 M3 | CPU Intel I7-7700K | CG Nvidia GTX 1080 | RAM 16Go | tripleBoot : Debian 11 | MXlinux 21 | LMint 19.3 | XFCE
Tour2 (custom)CM Gigabyte | CPU AMD Athlon 5200+ | CG Nvidia GTX 560 | RAM 6Go | FreeBSD 12.1 XFCE
Portable1 MSI GF75 Thin 9SC | CPU Intel I7-9750H | CG Nvidia GTX 1650 | RAM 32Go | dualBoot : LMint 20.2 | MXlinux 21 | XFCE
Portable2 MacBook Air A1466 (2015) | CPU Intel I5-5250U | CG Intel HD Graphics 6000 | RAM 8Go | dualBoot : macOS Sierra | MXlinux 21 XFCE
─────( pour une informatique libre ! -membre en stand-by de l' April.org────────────────

zeb
Messages : 16473
Enregistré le : ven. 19 juin 2015 22:13
Localisation : plus ici

Re: pb affichage message shell

Message 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 ;)

zeb
Messages : 16473
Enregistré le : ven. 19 juin 2015 22:13
Localisation : plus ici

Re: pb affichage message shell

Message par zeb »

Oups, dans terminal plutôt :mrgreen:

Avatar du membre
cyrille
Administrateur du site
Messages : 12285
Enregistré le : mar. 19 sept. 2017 08:49
Localisation : Nowhere
Contact :

Re: pb affichage message shell

Message par cyrille »

Mais lorsqu'il est exécuté automatiquement, le script fonctionne mais n'envoie plus de message.
Tu utilises un cron ?
Attention, ce doit être un soucis d'utilisateur alors.

Code : Tout sélectionner

export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$(id -u)/bus"
devrait t'aiguiller

Jette un oeil là
viewtopic.php?f=19&t=11346&p=132634&hil ... er#p132634
https://cbiot.fr/dokuwiki/doku.php?id=s ... rwallpaper

Mais faudrait voir le script
?séuqartéd sel ruoP / sécnoféd sel ruoP / sreiruréB sel ruoP / ?étéicos elleuQ

https://crust.ovh

olivierlamidesarbres
Messages : 3
Enregistré le : ven. 10 mai 2019 06:02

Re: pb affichage message shell

Message 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
Portable Acer Aspire, Linux Mint 19.1 Tessa, acer-Aspire-V3, kernel 4.15.0-142-generic x86_64, CPU Intel Core i5-3230M, cg Intel 3rd Gen Core processor graphics, mémoire 4 Go

Répondre