Quitter le forum et retourner au site

[RÉSOLU] Affichage de notification

Venez nous en parler, c'est ici que l'on vous conseillera !
Avatar de l’utilisateur
Ennoia
Messages : 138
Inscription : jeu. 29 mai 2008, 13:09
Distribution : ArchLinux
Niveau : Indépendance et débugage
Localisation : Oberentzen

[RÉSOLU] Affichage de notification

Message 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)
Avatar de l’utilisateur
le Manchot Masqué
Administrateur du site
Messages : 725
Inscription : lun. 26 mai 2008, 21:05
Distribution : Debian, Ubuntu
Niveau : Moitié plein !
Localisation : Guebwiller

Re: Affichage de notification

Message 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 :

Code : Tout sélectionner

# which find
/usr/bin/find
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 :

Code : Tout sélectionner

PATH=/bin:/usr/bin:/usr/local/bin
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...
Avatar de l’utilisateur
Ennoia
Messages : 138
Inscription : jeu. 29 mai 2008, 13:09
Distribution : ArchLinux
Niveau : Indépendance et débugage
Localisation : Oberentzen

Re: Affichage de notification

Message 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).
Avatar de l’utilisateur
le Manchot Masqué
Administrateur du site
Messages : 725
Inscription : lun. 26 mai 2008, 21:05
Distribution : Debian, Ubuntu
Niveau : Moitié plein !
Localisation : Guebwiller

Re: Affichage de notification

Message 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
Avatar de l’utilisateur
Ennoia
Messages : 138
Inscription : jeu. 29 mai 2008, 13:09
Distribution : ArchLinux
Niveau : Indépendance et débugage
Localisation : Oberentzen

Re: Affichage de notification

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

Code : Tout sélectionner

xhost +local:
lancé en automatique à la connexion de ma session.
Mais c'est sans doute moins prudent que ta solution.
Répondre