Page 1 sur 1
[RÉSOLU] Affichage de notification
Publié : jeu. 27 déc. 2012, 11:13
par Ennoia
Bonjour à tous,
et joyeuses fêtes !
J'aimerais que mon système me fasse des notifications ; j'ai donc écrit le petit script que voilà :
Code : Tout sélectionner
#!/bin/bash
export DISPLAY=:0.0
VAR=`find /etc/ -name *pacnew`
if [ -z $VAR ]
then
echo "Rien à faire"
exit 0
else
notify-send -t 100000 -i /usr/share/icons/gnome-colors-common/scalable/categories/applications-development.svg "Maintenance" "Veuillez fusionnez les fichiers suivants :\n$VAR"
fi
et je l'ai placé dans /etc/cron.daily
Il fonctionne parfaitement avec un sudo et pas du tout avec un su ; il doit donc me manquer quelque chose (une variable d'environnement ou la détection de l'utilisateur en cours sans doute)
Re: Affichage de notification
Publié : jeu. 27 déc. 2012, 11:59
par le Manchot Masqué
Tu as effectivement oublié la variable PATH dans ton script : s'il ne charge pas de variables d'environnement, il ne trouvera pas les programmes !
On peut retrouver les répertoire nécessaires via la commande
which :
Normalement, le
echo est celui du BASH, et non
/bin/echo, ce qui explique pourquoi on peut squizzer le répertoire
/bin dans un script uniquement composé de commandes
echo...
Sinon je n'ai pas Unity sous la main pour trouver
notify -send, mais observe la sortie de
which notify-send, puis au début de ton script, tu rajoutes :
Une astuce que Bernard m'avait fait découvrir : tu peux aussi placer la variable PATH directement dans le crontab, ce qui est très pratique pour simplifier les appels...
Re: Affichage de notification
Publié : jeu. 27 déc. 2012, 13:44
par Ennoia
Salut,
le Manchot Masqué a écrit :Tu as effectivement oublié la variable PATH dans ton script : s'il ne charge pas de variables d'environnement, il ne trouvera pas les programmes !
C'est sans doute une bonne précaution, mais ça ne resoud pas mon problème.
A vrai dire je pense que j'ai mal exprimé mon problème. Si je rajoute un
set -x pour debugger le script et que je l’exécute avec un su, il s’exécuter correctement
mais la notification n’apparaît pas !
le Manchot Masqué a écrit :Sinon je n'ai pas Unity sous la main pour trouver notify -send
Rien à voir avec Unity et même pas installé par défaut sur Ubuntu. Le paquet Ubuntu se nomme
libnotify-bin et permet de se faire des petites notifications dans des bulles (comme pour le volume par exemple).
Re: Affichage de notification
Publié : jeu. 27 déc. 2012, 20:40
par le Manchot Masqué
J'avais pas bien capté, désolé...
C'est bien un simple problème de droits sur le serveur X - par défaut root n'a pas le droit de lancer des affichages sur les clients connectés (il ne faut jamais faire confiance, même aux administrateurs !).
Ça explique pourquoi ça marche en sudo, mais pas en su... On peut aussi aller taper dans les cookies de xauth et ajouter le cookie de l'utilisateur à la liste xauth de root, mais c'est beaucoup plus violent comme méthode, et clairement réservé à d'autres usages.
Ma proposition ci-dessous envoie le message à tous les usagers sous mate-session, mais si tu veux envoyer à tous les clients connectés sous d'autres gestionnaires de fenêtres, il te faudra logiquement retrouver la liste de ces gestionnaires et faire une boucle supplémentaire.
Code : Tout sélectionner
#!/bin/bash
PATH=/bin:/usr/bin
pids=$(pgrep mate-session)
for pid in $pids; do
USER=$(grep -z USER /proc/$pid/environ | sed -e 's/USER=//')
DISPLAY=$(grep -z DISPLAY /proc/$pid/environ | sed -e 's/DISPLAY=//')
sudo -u $USER DISPLAY=$DISPLAY notify-send -t 5000 -i /usr/share/icons/gnome-colors-common/scalable/categories/applications-development.svg "Maintenance" "Message pour tous les usagers qui utilisent mate-session"
done
Re: Affichage de notification
Publié : ven. 28 déc. 2012, 14:29
par Ennoia
Salut,
Oh oui, super !
Entre temps j'ai moi aussi (re)trouvé une solution (que j'utilisais il y a 7 ou 8 ans : ça laisse le temps d'oublier) :
lancé en automatique à la connexion de ma session.
Mais c'est sans doute moins prudent que ta solution.