Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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.

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...

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

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)

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.

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 ?

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...

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 ?

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 .
Et le même gars dit 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)

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 ?

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 tongue )

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...

Hors ligne