Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites". Attention, le forum rencontre actuellement quelques difficultés. En cas d'erreur 502, il ne faut pas re-valider l'envoi d'un message ou l'ouverture d'une discussion, au risque de créer un doublon.

La section divers se réorganise ! De nouvelles sous-sections à venir. (plus d'infos + donner son avis)

#1 Le 06/10/2013, à 17:41

Crestey

[Résolu] Impossible d'afficher un message avec cron

Bonjour à tous,
Je cherche à afficher un message avec cron pour une application.
J'ai trouvé plusieurs fils qui traitent du sujet, mais chez moi ça ne marche pas.
Voici mon cron

* * * * * echo "lalala" >> /home/crestey/cron
* * * * * DISPLAY=:0.0 /usr/bin/notify-send "toto"

La 1ère ligne sert uniquement à m'assurer que cron fonctionne (lalala est bien réjouté 1 fois par minute à la fin du fichier /home/crestey/cron)

La 2ème ligne a été tirée de http://doc.ubuntu-fr.org/cron, donc une source pas trop ésotérique.
Eux ils ont écrit :

0 8 * * * DISPLAY=:0.0 totem "mon_fichier_son.mp3"

Donc c'est bien similaire

Je me suis aussi bien assuré que le display est bien 0.0 avec la commande :

root@crestey-Pegatron:/home/crestey# echo $DISPLAY
:0.0

Mais ça ne marche pas. Une idée ?

A vous lire

Dernière modification par Crestey (Le 08/10/2013, à 11:29)


Merci à tous

Hors ligne

#2 Le 06/10/2013, à 18:18

ssdg

Re : [Résolu] Impossible d'afficher un message avec cron

A moins bien sur que "notify-send" n'utilise pas la propriété DISPLAY mais un autre processus (type pipe nommé).


s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.

Hors ligne

#3 Le 06/10/2013, à 19:35

Crestey

Re : [Résolu] Impossible d'afficher un message avec cron

Merci,
J'ai trouvé la réponse .

Il me manquait  de préciser XAUTHORITY. Le cron suivant fonctionne maintenant et affiche "message direct de cron" toute les minutes.

* * * * * echo "lalala" >> /home/crestey/cron
* * * * * DISPLAY=:0.0 XAUTHORITY=/home/crestey/.Xauthority /usr/bin/notify-send "message direct de cron"
* * * * * sh /home/crestey/essai.sh 

ça affiche aussi avec le script suivant essai.sh lancé par cron aussi dans mon exemple :

#!/bin/sh
export DISPLAY=:0.0
export XAUTHORITY=/home/crestey/.Xauthority
notify-send "message de essai.sh"
echo "tututu" >> /home/crestey/cron2

C'est curieux car il y a plein de fils qui traitent du sujet et où à priori ça marche.
Mais sans parler de XAUTHORITY qui chez moi est indispensable.

Dernière modification par Crestey (Le 06/10/2013, à 19:39)


Merci à tous

Hors ligne

#4 Le 06/10/2013, à 22:09

ssdg

Re : [Résolu] Impossible d'afficher un message avec cron

Si j'ai bien compris, le serveur X est un serveur comme un autre sauf qu'au lieu de mettre à dispo des fichiers (http/ftp) ou une imprimante (cups) mais un écran.
Si j'en crois cette page:
http://www.x.org/wiki/Development/Docum … /Security/
il permet de filtrer l'accès au dit écran par un mécanisme de sécurité. En l’occurrence le Xauthority. (donc un autre utilisateur de ta machine (ici, un double de toi crée par cron) ne pourra pas accéder a ton serveur X sans connaitre le cookie en question.

Je crois que c'est une explication valide. (mais je reconnais que ma dernière théorie était fumeuse)


s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.

Hors ligne

#5 Le 06/10/2013, à 22:49

Crestey

Re : [Résolu] Impossible d'afficher un message avec cron

Cette fois-ci j'ai un truc vraiment bizarre.
dans le but de générer un message sur la session d'un autre utilisateur, j'ai modifié le crontab comme ça :

* * * * * echo "nouveau texte" >> /home/crestey/cron
* * * * * DISPLAY=:0.0 XAUTHORITY=/home/thomas/.Xauthority /usr/bin/notify-send "message direct de cron"

Et en fait l'utilisateur thomas ne voit rien s'afficher quand je me loggue sur son compte.
En plus de ça, cron exécute toujours un autre script que je lui avait programmé il y a 1 heure, et il me le réitère toutes les minutes alors qu'il n'y a plus que ces 2 lignes !!! ???
J'ai essayé service crontab stop
Puis service crontab restart
Mais rien n'y fait, il veut absolument continuer de me lancer ce script toutes les minutes.
Je pourrais effacer le fichier script, ou le renommer mais bon... j'aimerai comprendre ce qui se passe.
Car la première ligne s'exécute bien aussi (celle avec "nouveau texte")

Une idée ?

Dernière modification par Crestey (Le 06/10/2013, à 22:52)


Merci à tous

Hors ligne

#6 Le 06/10/2013, à 23:00

Zakhar

Re : [Résolu] Impossible d'afficher un message avec cron

Pour ton cron toutes les minutes... je te laisse creuser.

Pour ton affichage, héhé, je sais !..

Je me suis fait de façon un peu identique à ce que tu veux faire, un petit système de notification sur mon VPN perso géré par ma Synology. Par exemple, lorsque ma mère se connecte/déconnecte, j'ai une notification qui me dit tout ça.

Dans mon cas, le notify-send est fait par PhP qui tourne sur le user d'Apache, donc www-data.
www-data n'a bien sûr pas les droits de m'afficher une notification... sauf si je les lui donne.

Pour cela un petit coup de

sudo visudo

Et tu rajoutes :

#Allow PhP to notify us
www-data ALL=(ton_user) NOPASSWD: /usr/bin/notify-send
www-data ALL=(ton_user) NOPASSWD: /usr/bin/paplay

(bien sûr tu remplaces ton_user par le user connecté qui doit recevoir la notification)
(Nota: paplay c'est sympa aussi, ça permet d'avoir un petit jingle en plus de la notification pour le cas où tu n'aies pas les yeux sur l'écran !)

Et ensuite, pour notifer ton user tu fais :

sudo -u ton_user /usr/bin/notify-send /path/icon "Titre" "Message"

Ainsi, même un user non-privilégié comme PhP lancé par Apache peut te notifier.

Dans le cas de cron, c'est en principe plus simple puisqu'il est déjà root.
Tu n'as donc probablement pas besoin du visudo pour lui donner des droits en plus, mais simplement de lancer le notify avec le user que tu veux notifier, c'est à dire juste la dernière commande.

Effectivement, il y a le "jeton", mais en lançant ainsi, notify-send se débrouille pour retrouver ce qu'il faut !

Bon courage.

Dernière modification par Zakhar (Le 06/10/2013, à 23:02)


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#7 Le 07/10/2013, à 00:27

Crestey

Re : [Résolu] Impossible d'afficher un message avec cron

Tout d'abord merci de ton aide
J'y arrive pô ! et c'est assez bizarre encore. (pour la bizarrerie de tout à l'heure, seul un reset du PC a tout réglé !).

Mon cron épuré:

* * * * * echo "nouveau texte" >> /home/crestey/cron
* * * * * sh /opt/m

Mon script /opt/m épuré

export DISPLAY=:0.0
export XAUTHORITY=/home/crestey/.Xauthority
sudo -u crestey /usr/bin/notify-send "Coucou"

Donc ça me fait bien l'affichage toute les minutes sur la session crestey de "Coucou"
Je remplace "crestey" par "thomas" dans le fichier /opt/m, Je vais sur la session thomas, et là, rien ne s'affiche.
Je fait un reset du PC. Je me log directement chez thomas, et là, ça s'affiche.
Je me log chez crestey, je rechange thomas pas crestey, et là cette fois, rien ne s'affiche chez crestey.

Conclusion pour que ça marche, il faut que je reset le PC !!??

Si t'as une idée, je suis preneur, et là je vais dormir car je sèche.

Dernière modification par Crestey (Le 07/10/2013, à 00:28)


Merci à tous

Hors ligne

#8 Le 07/10/2013, à 00:53

ssdg

Re : [Résolu] Impossible d'afficher un message avec cron

la valeur de $DISPLAY est là même pour les deux?

indice: c'est déterminé à l'ouverture de la session.


s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.

Hors ligne

#9 Le 07/10/2013, à 06:17

Crestey

Re : [Résolu] Impossible d'afficher un message avec cron

Bien vu ! Non ils sont différents : 0.0 et 1.0 et ça explique tout effectivement.
Maintenant j'ai beau me dire que "s'il n'y a pas de solution, c'est qu'il n'y a pas de problème..." je vois pas trop comment faire.

P.S.
Pour info, ma petite appli est au global un contrôle parental horaire.
Et le besoin est que cron avertisse l'utilisateur lambda qu'il va être déconnecté dans 5 mn.
Tout fonctionne bien sauf ça pour le moment: lambda est déconnecté après 2 heures le week-end et 1 heure en semaine, mais le tout sans avertissement ...*
Je sais que timeoutd fait ça, mais je l'ai essayé et il ne me satisfait pas et ne marche pas bien chez moi.

Je suis preneur si vous avez une piste pour cet affichage de message.

Dernière modification par Crestey (Le 07/10/2013, à 06:20)


Merci à tous

Hors ligne

#10 Le 07/10/2013, à 07:46

ssdg

Re : [Résolu] Impossible d'afficher un message avec cron

J'ai pas testé, mais ne serait-il pas possible d'extraire DISPLAY du texte retourné par la commande "who"?


s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.

Hors ligne

#11 Le 07/10/2013, à 08:08

tiramiseb

Re : [Résolu] Impossible d'afficher un message avec cron

Salut,

Chez moi, notify-send s'en fout de la valeur de DISPLAY ou de XAUTHORITY, ce qui semble logique : ce n'est pas lui qui affiche quelque chose, il envoie juste une info qu'un autre logiciel va afficher.


Crestey, ce qui me laisse perplexe dans tes messages c'est que tu ne dis jamais où ni comment tu configures tes cron.

Cron système (/etc/crontab, /etc/cron.d ...) ?
Cron utilisateur (crontab -e) ? Avec quel utilisateur ?

Dernière modification par tiramiseb (Le 07/10/2013, à 08:11)


Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXe siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

En ligne

#12 Le 07/10/2013, à 08:57

Zakhar

Re : [Résolu] Impossible d'afficher un message avec cron

Crestey a écrit :

Tout d'abord merci de ton aide
J'y arrive pô ! et c'est assez bizarre encore. (pour la bizarrerie de tout à l'heure, seul un reset du PC a tout réglé !).

Mon cron épuré:

* * * * * echo "nouveau texte" >> /home/crestey/cron
* * * * * sh /opt/m

Mon script /opt/m épuré

export DISPLAY=:0.0
export XAUTHORITY=/home/crestey/.Xauthority
sudo -u crestey /usr/bin/notify-send "Coucou"

Donc ça me fait bien l'affichage toute les minutes sur la session crestey de "Coucou"
Je remplace "crestey" par "thomas" dans le fichier /opt/m, Je vais sur la session thomas, et là, rien ne s'affiche.
Je fait un reset du PC. Je me log directement chez thomas, et là, ça s'affiche.
Je me log chez crestey, je rechange thomas pas crestey, et là cette fois, rien ne s'affiche chez crestey.

Conclusion pour que ça marche, il faut que je reset le PC !!??

Si t'as une idée, je suis preneur, et là je vais dormir car je sèche.


J'avoue que je n'ai pas fait l'essai "multi-utilisateur"... parce que ce n'est pas mon 'use-case'. Chez moi, c'est toujours le même utilisateur qui est connecté, et donc tu confirmes que ça fonctionne dans ce cas (du reste même pas besoin d'exporter Xauthority ni Display, il se débrouille tout seul).


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#13 Le 07/10/2013, à 08:57

Crestey

Re : [Résolu] Impossible d'afficher un message avec cron

Oups !
J'utilisais crontab -e et effectivement il faut plutôt un cron système pour ce que je veux faire.

Donc je viens de rajouter la ligne

* * * * * root sh /home/crestey/essai3.sh

dans /etc/crontab
et home/crestey/essai3.sh contient :

#!/bin/sh
export DISPLAY=$DISPLAY
export XAUTHORITY=/home/crestey/.Xauthority
sudo -u crestey notify-send "message de essai.sh"
echo "Test pour vérifier que le cron s'exécute" >> /home/crestey/cron3

et ça ne marche pas
j'ai essayé aussi l'option légère:

#!/bin/sh
notify-send "message de essai.sh"
echo "Test pour vérifier que le cron s'exécute" >> /home/crestey/cron3

ça ne marche pas non plus

Je prend soin de vérifier à chaque fois que le cron s'exécute bien en écrivant dans /home/crestey/cron3
Et d'autre part, quand je lance le script en ligne de commande le message popup s'affiche bien
C'est juste qu'il ne veut pas l'afficher avec cron

Pour

ssdg a écrit :

J'ai pas testé, mais ne serait-il pas possible d'extraire DISPLAY du texte retourné par la commande "who"?

La solution est :

export DISPLAY=$DISPLAY

car ça marche quand on lance le script ci-dessus en ligne de commande.

Dernière modification par Crestey (Le 07/10/2013, à 08:58)


Merci à tous

Hors ligne

#14 Le 07/10/2013, à 09:04

tiramiseb

Re : [Résolu] Impossible d'afficher un message avec cron

export DISPLAY=$DISPLAY

Donc, tu mets la valeur de la variable DISPLAY dans la variable DISPLAY ? Tu n'y vois pas une inutilité ? smile


Ce que je peux te dire, c'est que chez moi la chose suivante exécuté manuellement fonctionne :

sebastien@amaretto:~$ sudo -s
[sudo] password for sebastien: 
root@amaretto:~# export DISPLAY=:0
root@amaretto:~# unset XAUTHORITY
root@amaretto:~# sudo -u sebastien notify-send "Essai"

Déjà, peux-tu tenter la même chose ?

(oui, bon, c'est bizarre parce que ça demande quand même la variable DISPLAY... soit.)


Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXe siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

En ligne

#15 Le 07/10/2013, à 09:05

tiramiseb

Re : [Résolu] Impossible d'afficher un message avec cron

Ce que je peux aussi dire, c'est que la ligne suivante dans /etc/crontab fonctionne :

* * * * * root DISPLAY=:0 sudo -u sebastien notify-send "Essai auto"

Il n'y aurait alors plus qu'à enrober ça d'une boucle for sur les utilisateurs connectés...


Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXe siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

En ligne

#16 Le 07/10/2013, à 09:08

Zakhar

Re : [Résolu] Impossible d'afficher un message avec cron

Chez moi c'est beaucoup plus simple :

$ sudo su
[sudo] password for zakhar: 
root@zakhar-machine:~# sudo -u zakhar notify-send "Coucou" "C'est moi"

Pas besoin de Xauth, ni de Display, et ça fonctionne. tongue

Je suis en 12.04LTS 64bits.

Il est vrai cependant que dans les versions précédentes, sans le DISPLAY, c'est bien plus chatouilleux !

tiramiseb a écrit :

Il n'y aurait alors plus qu'à enrober ça d'une boucle for sur les utilisateurs connectés...

Absolument... et même en simplifiant, sans le DISPLAY qui chez moi ne sert à rien (mais ça doit dépendre aussi Ubuntu/Kubuntu/etc..., version 12.04 ou autre, etc...). wink

Dernière modification par Zakhar (Le 07/10/2013, à 09:11)


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#17 Le 07/10/2013, à 09:12

tiramiseb

Re : [Résolu] Impossible d'afficher un message avec cron

Enfin, ça marche également avec la ligne suivante :

* * * * * root /home/sebastien/test.sh

Et le fichier /home/sebastien/test.sh suivant :

#!/bin/sh

for dest in $(who | awk '{ print $1 ";" $5 }' | grep -v ';$' | sort | uniq)
do
  username=$(echo $dest | cut -d';' -f1)
  display=$(echo $dest | sed 's/^.*(:\(.*\)).*$/:\1/')
  DISPLAY=$display sudo -u $username notify-send "Essai par script"
done

Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXe siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

En ligne

#18 Le 07/10/2013, à 09:13

tiramiseb

Re : [Résolu] Impossible d'afficher un message avec cron

Il est vrai cependant que dans les versions précédentes, sans le DISPLAY, c'est bien plus chatouilleux !

J'ai une 13.04, et sans le DISPLAY c'est chatouilleux smile


Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXe siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

En ligne

#19 Le 07/10/2013, à 09:14

tiramiseb

Re : [Résolu] Impossible d'afficher un message avec cron

Zakhar, tu es un tricheur :

sebastien@amaretto:~$ sudo su
[sudo] password for sebastien: 
root@amaretto:/home/sebastien# echo $DISPLAY
:0

Ta variable DISPLAY est bel et bien configurée.
Essaie ça :

$ sudo su
[sudo] password for zakhar:
root@zakhar-machine:~# unset DISPLAY
root@zakhar-machine:~# sudo -u zakhar notify-send "Coucou" "C'est moi"

big_smile

Dernière modification par tiramiseb (Le 07/10/2013, à 09:15)


Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXe siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

En ligne

#20 Le 07/10/2013, à 09:54

Crestey

Re : [Résolu] Impossible d'afficher un message avec cron

merci tiramiseb j'ai essayé ton script.
Il marche sur la session ou je suis.
Mais il s'arrête d'afficher le message dès que je me connecte sur une autre session.
Et c'est ça en fait que je veux faire : Que cron affiche le message même si je change de session.


Merci à tous

Hors ligne

#21 Le 07/10/2013, à 10:20

tiramiseb

Re : [Résolu] Impossible d'afficher un message avec cron

il s'arrête d'afficher le message dès que je me connecte sur une autre session.

Peux-tu décrire précisément ce que tu fais ?
Et peux-tu essayer, ce faisant, de l'exécuter manuellement en tant que root ?


Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXe siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

En ligne

#22 Le 07/10/2013, à 11:18

Crestey

Re : [Résolu] Impossible d'afficher un message avec cron

tiramiseb a écrit :

Peux-tu décrire précisément ce que tu fais ?

Je suis sur la session "crestey".
Je clique en haut à droite sur le bonhomme, et j'ouvre une session "thomas" (sans fermer crestey).
Et là le message de cron ne s'affiche pas (sur la session thomas).
Ce qui est très bizarre, c'est que si j'ouvre alors un terminal et exécute la commande sudo toute seule (celle qui permet d'afficher ses options), alors ça débloque le processus et le message de cron s'affiche.
Et de là, ça fonctionne en passant d'une session à l'autre.
Si je ferme la session thomas, et la ré-ouvre, ça ne marche plus de nouveau, jusqu'à la prochaine commande sudo lancée sur la session thomas!.
Donc je pense qu'on n'est pas loin.

tiramiseb a écrit :

Et peux-tu essayer, ce faisant, de l'exécuter manuellement en tant que root ?

Je ne sais pas me mettre en tant que root sous thomas ou crestey.
Je sais me mettre en tant que crestey qui a les droit administrateur (sudo crestey), mais c'est tout.
si je fais sudo su sous thomas, ça ne marche pas.
Je suis intéressé... pour savoir.

Dernière modification par Crestey (Le 07/10/2013, à 11:28)


Merci à tous

Hors ligne

#23 Le 07/10/2013, à 12:20

Crestey

Re : [Résolu] Impossible d'afficher un message avec cron

En fait ça merde sur n'importe quelle session si on n'a pas lancer au moins une fois la commande sudo.
ça m'intéresse que tu essaies et que tu me dises si ça fait pareil chez toi.
La procédure est simple :
1) se deconnecter et se reconnecter de sa session
2) Attendre de voir si le script marche avec cron. (normalement non)
3) tapez sudo en ligne de commande
4) Attendre de voir si le script marche avec cron. (normalement oui)


Merci à tous

Hors ligne

#24 Le 07/10/2013, à 12:41

tiramiseb

Re : [Résolu] Impossible d'afficher un message avec cron

En fait ça merde sur n'importe quelle session si on n'a pas lancer au moins une fois la commande sudo.

Ça c'est bizarre. Peut-être lié au Xauthority. Essaie d'ajouter le XAUTHORITY comme tu l'as fait plus haut dans ce script...

Genre :

DISPLAY=$display XAUTHORITY=/home/$username/.Xauthority sudo -u $username notify-send "Essai par script"

ça m'intéresse que tu essaies

Désolé, j'ai pas mal de fenêtres ouvertes pour mon boulot, je n'ai pas envie de tout fermer smile


Sébastien Maccagnoni-Munch - administrateur Linux depuis le XXe siècle
Consultant informatique indépendant - http://www.smm-informatique.fr
Geek et tout plein d'autres choses - http://www.tiramiseb.fr

En ligne

#25 Le 07/10/2013, à 13:17

Zakhar

Re : [Résolu] Impossible d'afficher un message avec cron

tiramiseb a écrit :

Ta variable DISPLAY est bel et bien configurée.
Essaie ça :

$ sudo su
[sudo] password for zakhar:
root@zakhar-machine:~# unset DISPLAY
root@zakhar-machine:~# sudo -u zakhar notify-send "Coucou" "C'est moi"

big_smile

Tout à fait, ça ne fonctionne pas !..

Mais bon, je n'ai rien fait de particulier pour qu'elle soit configurée. A croire qu'en 12.04 c'est configuré "par défaut".

Cependant tu as raison, un "bon" script devrait vérifier si la variable est déjà configurée ou pas. Si elle l'est, on ne touche pas, sinon on règle la variable comme il faut !


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

Haut de page ↑