#26 Le 07/10/2013, à 14:21
- tiramiseb
Re : [Résolu] Impossible d'afficher un message avec cron
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".
Quand tu es dans une interface graphique et que tu lances un terminal, la variable DISPLAY est configurée.
Quand tu utilises sudo, la variable DISPLAY est conservée.
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#27 Le 07/10/2013, à 14:44
- Crestey
Re : [Résolu] Impossible d'afficher un message avec cron
J'ai un peu avancé.
J'ai ajouté un fichier log pour comprendre ce qui se passe :
#! /bin/bash
echo "hors boucle" >> /home/thomas/log
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/')
echo "dans boucle" >> /home/thomas/log
echo $username$display >> /home/thomas/log
DISPLAY=$display sudo -u $username /usr/bin/notify-send $username$display
done
En fait quand on ouvre une session en qu'on attend sans rien faire, le script ne rentre pas dans la boucle for. (le fichier log ne contient que "hors boucle")
Quand ça marche, le fichier log contient ça (rattage sur le premier coup pour cet exemple):
hors boucle
hors boucle
dans boucle
crestey:0.0
hors boucle
dans boucle
crestey:0.0
Dernière modification par Crestey (Le 07/10/2013, à 14:45)
Merci à tous.
Sous Ubuntu/XFCE depuis 2013. Ça fonctionne vraiment très bien.
Hors ligne
#28 Le 07/10/2013, à 15:04
- Watael
Re : [Résolu] Impossible d'afficher un message avec cron
salut,
while read username display
do
echo "fais ce que tu veux avec $username et $display"
done < <(w -sh | awk '!($1 in a){a[$1]=$3}END{for(ud in a)print ud,a[ud]}')
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#29 Le 07/10/2013, à 15:14
- Crestey
Re : [Résolu] Impossible d'afficher un message avec cron
Bonjour Wateal et merci
Je viens d'essayer ton script lancé par cron.
ça ne marche pas chez moi.
Merci à tous.
Sous Ubuntu/XFCE depuis 2013. Ça fonctionne vraiment très bien.
Hors ligne
#30 Le 07/10/2013, à 20:23
- Watael
Re : [Résolu] Impossible d'afficher un message avec cron
ça ne marche pas
hmm! C'est intéressant. Vous pouvez nous en dire plus ?
XD
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#31 Le 07/10/2013, à 22:22
- Crestey
Re : [Résolu] Impossible d'afficher un message avec cron
Oui.
Le script que vous donnez fonctionne quand on le lance depuis un terminal.
ça donne ça:
crestey@crestey-Pegatron:~$ ./Watael
fais ce que tu veux avec thomas et 8:58m
fais ce que tu veux avec crestey et 8:58m
crestey@crestey-Pegatron:~$
Le besoin de ce fil est d'afficher une fenêtre popup par cron (dans notre exemple une fois par minute) comme ça (ici le message est "crestey0.0" en haut à droite), dans la session courante, et il faut en + que la cette fenêtre continue de s'afficher 1 fois par minute quand on va sur la session d'un autre utilisateur, ce que arrivons presque à faire. Presque en effet, car quand on va sur une autre session, bizarrement le message commence à s'afficher (1 x par minute) que dès lors qu'on a ouvert un terminal dans cette nouvelle session au moins une fois !!!
C'est très reproductible. (mais y a pas besoin de lancer une commande sudo comme je l'ai dit précédemment. L'ouverture du terminal suffit).
Dernière modification par Crestey (Le 07/10/2013, à 22:31)
Merci à tous.
Sous Ubuntu/XFCE depuis 2013. Ça fonctionne vraiment très bien.
Hors ligne
#32 Le 07/10/2013, à 23:56
- Crestey
Re : [Résolu] Impossible d'afficher un message avec cron
Le diagnostique est là :
root@crestey-Pegatron:/home/crestey# cat ewho
crestey tty1 2013-10-07 22:48
crestey tty7 2013-10-07 14:38
thomas tty8 2013-10-07 23:06
crestey pts/2 2013-10-07 14:38 (:0.0)
crestey pts/4 2013-10-07 21:54 (:0.0)
root@crestey-Pegatron:/home/crestey# cat ewho
crestey tty1 2013-10-07 22:48
crestey tty7 2013-10-07 14:38
thomas tty8 2013-10-07 23:52
crestey pts/2 2013-10-07 14:38 (:0.0)
crestey pts/4 2013-10-07 21:54 (:0.0)
thomas pts/6 2013-10-07 23:42 (:1.0)
root@crestey-Pegatron:/home/crestey#
Le premier cat ewho donne le contenu de who juste avant que j'ouvre un terminal dans la nouvelle session : on voit la nouvelle session thomas ouverte mais sans (:1.0).
Le second cat ewho donne le contenu de who juste après avoir ouvert un terminal. Cette fois il y a bien un thomas avec (:1.0); Donc cette fois le message s'affiche.
Pour une raison que j'ignore, tant que je n'ouvre pas de terminal sur la nouvelle session thomas, il n'y a pas dans who de ligne avec (:x.x).
Donc le problème est analysé, mais pas résolu.
Une idée ?
Merci à tous.
Sous Ubuntu/XFCE depuis 2013. Ça fonctionne vraiment très bien.
Hors ligne
#33 Le 08/10/2013, à 07:24
- tiramiseb
Re : [Résolu] Impossible d'afficher un message avec cron
Pour une raison que j'ignore, tant que je n'ouvre pas de terminal sur la nouvelle session thomas, il n'y a pas dans who de ligne avec (:x.x).
Fais le même essai avec la commande "w" qu'évoque Watael au lieu de "who", pour voir si le résultat serait différent.
Sinon il y a probablement d'autres manières de trouver l'information en question, peut-être moins simplement mais ça ne semble pas être impossible. Je pense par exemple aux processus "X" en cours de fonctionnement (auquel cas il faudra faire un lien entre tel serveur X et tel utilisateur, ce qui peut se faire avec la ligne « thomas tty8 » qui n'a pas de display ; je pense également à d'éventuels logs...
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#34 Le 08/10/2013, à 07:33
- Crestey
Re : [Résolu] Impossible d'afficher un message avec cron
C'est pareil.
En fait pour mettre en évidence l'étrangeté, c'est très simple.
1) Se connecter sur une session (qui n'était pas déjà ouverte).
2) Ctrl Alt F1
3) who (ou bien w) on voit alors qu'il n'y a pas de ligne avec (0:0)
4) Ctr Alt F7
5) Ouvrir un terminal
6) Ctrl Alt F1
6) who (ou bien w) on voit alors qu'il y a la ligne avec (0:0) pour la session ouverte
et dès lors, elle reste tout le temps, à moins de se déconnecter/reconnecter sur la session
Merci à tous.
Sous Ubuntu/XFCE depuis 2013. Ça fonctionne vraiment très bien.
Hors ligne
#35 Le 08/10/2013, à 08:27
- tiramiseb
Re : [Résolu] Impossible d'afficher un message avec cron
Il faut donc trouver une information d'où tirer le numéro de display.
A/ J'ai une seule certitude, mais elle serait plus complexe à mettre en œuvre
1/ lorsqu'un serveur X se lance, on voit le numéro de display et le tty associé dans ps :
sebastien@amaretto:~$ pgrep -lf X
1381 /usr/bin/X :0 -background none -verbose -auth /run/gdm/auth-for-gdm-xSOK2c/database -nolisten tcp vt7
:0 => le DISPLAY, bien sûr
vt7 => correspond à tty7
Et avec "who", même sans ouvrir de terminal, tu nous as montré :
thomas tty8 2013-10-07 23:06
Donc on a le lien tty/display grâce à pgrep et tty/user grâce à who, on peut s'en sortir.
B/ Je vois également une seconde approche, plus empirique, moins stricte mais qui pourrait t'aller
Sous Linux, très couramment (99 fois sur 100) le DISPLAY :0 est sur tty7, le DISPLAY :1 sur tty8, etc.
Si tu n'as qu'un seul écran, que tu ne fais pas de connexion distante (genre x2go, etc), que tu n'as pas modifié la configuration des tty de ton ordinateur, alors tu peux éventuellement faire le raccourci suivant :
- tty7 => :0
- tty8 => :1
- etc
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#36 Le 08/10/2013, à 08:31
- tiramiseb
Re : [Résolu] Impossible d'afficher un message avec cron
Tu peux par exemple t'inspirer de ça (oui c'est plutôt crado, oui c'est limité à 4 displays, oui si un utilisateur est nommé "tty7toto" ça déconnerait, mais dans un cas plutôt "normal" ça marcherait) :
DISPLAY0=$(who | grep tty7 | cut -f1 -d' ')
DISPLAY1=$(who | grep tty8 | cut -f1 -d' ')
DISPLAY2=$(who | grep tty9 | cut -f1 -d' ')
DISPLAY3=$(who | grep tty10 | cut -f1 -d' ')
if [ -n "$DISPLAY0" ]
then
echo "$DISPLAY0 est sur :0"
fi
if [ -n "$DISPLAY1" ]
then
echo "$DISPLAY1 est sur :1"
fi
if [ -n "$DISPLAY2" ]
then
echo "$DISPLAY2 est sur :2"
fi
if [ -n "$DISPLAY3" ]
then
echo "$DISPLAY3 est sur :3"
fi
Dernière modification par tiramiseb (Le 08/10/2013, à 08:32)
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#37 Le 08/10/2013, à 10:30
- Postmortem
Re : [Résolu] Impossible d'afficher un message avec cron
Salut,
Petite suggestion mais ne serait-ce pas un truc dans ce genre que vous recherchez (voir ici) :
for pid in $pids; do
# find DBUS session bus for this session
DBUS_SESSION_BUS_ADDRESS=`grep -z DBUS_SESSION_BUS_ADDRESS \
/proc/$pid/environ | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//'`
# use it
DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS \
notify-send -u low -t $timeout "$title" "$text"
done
C'est ce genre de code qui permet de faire afficher une notification à un script appelé par UDEV.
Je ne peux pas tester en ce moment, mais je pense qu'avec un peu d'adaptation (et avec la commande qui sort les bons pids à mettre dans la variable $pids), cela pourrait être une piste.
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#38 Le 08/10/2013, à 10:48
- tiramiseb
Re : [Résolu] Impossible d'afficher un message avec cron
Postmortem : cela nécessite que DBus soit utilisé pour les notificatinos, je ne sais pas si c'est systématique.
Peut-être que ça marche. Mais ça m'a l'air de reposer sur des technologies qui doivent être présentes et utilisées : si c'est le cas chez Crestey, ça peut être une solution.
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#39 Le 08/10/2013, à 11:04
- Crestey
Re : [Résolu] Impossible d'afficher un message avec cron
Bonjour Postmortem,
J'étais déjà bien largué, mais alors là, je touche le fond avec ton code.
Je suis incompétent pour adapter ça.
A tout hasard, j'ai essayé ça
#! /bin/bash
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=:0 sudo -u $username /usr/bin/notify-send $dest
DISPLAY=:1 sudo -u $username /usr/bin/notify-send $dest
DISPLAY=:2 sudo -u $username /usr/bin/notify-send $dest
DISPLAY=:3 sudo -u $username /usr/bin/notify-send $dest
DISPLAY=:4 sudo -u $username /usr/bin/notify-send $dest
# DISPLAY=:display sudo -u $username /usr/bin/notify-send $dest
done
mais ça ne marche pas non plus quand on vient juste de se connecter sur une session car apparemment la variable DISPLAY n'est pas initialisée.
Je suis preneur pour une "adaptation".
Je rappelle le problème qui est finalement très simple dans l'énoncé :
Faire afficher un message régulièrement par cron dans une fenêtre popup sur n'importe quelle session.
ça devrait quand même être faisable.
Dernière modification par Crestey (Le 08/10/2013, à 11:06)
Merci à tous.
Sous Ubuntu/XFCE depuis 2013. Ça fonctionne vraiment très bien.
Hors ligne
#40 Le 08/10/2013, à 11:11
- tiramiseb
Re : [Résolu] Impossible d'afficher un message avec cron
mais ça ne marche pas non plus quand on vient juste de se connecter sur une session car apparemment la variable DISPLAY n'est pas initialisée.
Je ne comprends pas ton « apparemment la variable DISPLAY n'est pas initialisée »...
La variable "DISPLAY", c'est toi qui l’initialise à la valeur que tu veux avec ton "DISPLAY=xxxxxx".
Sinon, as-tu lu mon message #36 et essayé ce que j'y propose ?
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#41 Le 08/10/2013, à 11:32
- Crestey
Re : [Résolu] Impossible d'afficher un message avec cron
Effectivement je ne suis pas clair. C'est bien moi qui initialise la variable DISPLAY.
Mais quand j'ouvre une session, il y a quelque chose qui n'est pas initialisé et qui empèche l'utilisation de cette variable.
Ce "quelque chose" s'initialise dès que j'ouvre un terminal (programme gnome-terminal) sans lancer aucune commande dedans.
En ensuite, cette variable DISPLAY devient utilisable.
Car comme tu le vois, même en donnant à DISPLAY toutes valeurs en 0 et 4, et le popup ne vient pas à l'ouverture de session.
Dès que j'ouvre un terminal, et le popup apparait toutes les minutes.
Merci à tous.
Sous Ubuntu/XFCE depuis 2013. Ça fonctionne vraiment très bien.
Hors ligne
#42 Le 08/10/2013, à 11:38
- tiramiseb
Re : [Résolu] Impossible d'afficher un message avec cron
"DISPLAY", c'est juste pour dire au programme sur quelle session graphique s'afficher. Dès qu'une session est ouverte, elle a un numéro de display : celui qu'on voit dans le retour de "pgrep" que j'ai donné plus haut.
Le comportement que tu décris me semble très étrange : ça voudrait dire que tu ne peux lancer aucun logiciel graphique tant que tu n'as pas lancé un terminal...
Il doit y avoir un effet de bord, une coïncidence, quelque chose...
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#43 Le 08/10/2013, à 11:44
- Crestey
Re : [Résolu] Impossible d'afficher un message avec cron
Pardon, j'ai encore dit une connerie.
le problème était qu'on ne rentre pas dans la boucle dans ton script (comme dit plus haut) car il n'y a aucune ligne dans who avec (x.x)
Si j'évite la boucle comme ça, ça marche:
#! /bin/bash
DISPLAY=:0 sudo -u thomas /usr/bin/notify-send "bonjour"
DISPLAY=:1 sudo -u thomas /usr/bin/notify-send "bonjour"
DISPLAY=:2 sudo -u thomas /usr/bin/notify-send "bonjour"
DISPLAY=:3 sudo -u thomas /usr/bin/notify-send "bonjour"
DISPLAY=:4 sudo -u thomas /usr/bin/notify-send "bonjour"
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=:0 sudo -u $username /usr/bin/notify-send $dest
done
Une solution (pas propre non plus) serait de faire une boucle sur tous les utilisateurs et pour chaque utilisateur une boucle sur DISPLAY de 0 à 4.
Dernière modification par Crestey (Le 08/10/2013, à 11:45)
Merci à tous.
Sous Ubuntu/XFCE depuis 2013. Ça fonctionne vraiment très bien.
Hors ligne
#44 Le 08/10/2013, à 11:53
- tiramiseb
Re : [Résolu] Impossible d'afficher un message avec cron
As-tu lu la proposition que j'ai faite au message #36 ?
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#45 Le 08/10/2013, à 12:01
- Crestey
Re : [Résolu] Impossible d'afficher un message avec cron
Oui oui je l'ai lu, pardon. c'est pareil effectivement.
D'autre linuxien dévrivent exactement la même chose là.
Et le même gars dit là que ça ne le fait plus chez lui suite d'après lui à une mise à jour d'ubuntu.
Merci à tous.
Sous Ubuntu/XFCE depuis 2013. Ça fonctionne vraiment très bien.
Hors ligne
#46 Le 08/10/2013, à 12:06
- tiramiseb
Re : [Résolu] Impossible d'afficher un message avec cron
Tu es sur quelle version ?
Si le gars dit qu'à partir de 12.04 il a bien ce qu'il faut... la 12.04 étant la plus ancienne version encore supportée sur le bureau... ça devrait marcher chez toi.
Dernière modification par tiramiseb (Le 08/10/2013, à 12:07)
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#47 Le 08/10/2013, à 12:10
- Crestey
Re : [Résolu] Impossible d'afficher un message avec cron
Je suis sur 12.04
Merci à tous.
Sous Ubuntu/XFCE depuis 2013. Ça fonctionne vraiment très bien.
Hors ligne
#48 Le 08/10/2013, à 12:15
- tiramiseb
Re : [Résolu] Impossible d'afficher un message avec cron
Donc chez toi ça ne se comporte pas comme le dit ce gars ?
Et ma proposition en #36 ne fonctionne pas ?
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#49 Le 08/10/2013, à 12:23
- Crestey
Re : [Résolu] Impossible d'afficher un message avec cron
36 marche nickel (pardon pour le nom du script )
root@crestey-Pegatron:/home/crestey# ./crado
crestey est sur :0
thomas est sur :1
root@crestey-Pegatron:/home/crestey#
Dernière modification par Crestey (Le 08/10/2013, à 12:23)
Merci à tous.
Sous Ubuntu/XFCE depuis 2013. Ça fonctionne vraiment très bien.
Hors ligne
#50 Le 08/10/2013, à 12:25
- tiramiseb
Re : [Résolu] Impossible d'afficher un message avec cron
Ben voilà.
Plus qu'à l'adapter à ton notify-send...
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne