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.

#1 Le 07/09/2012, à 14:14

Detah-Pixel

pas d'affichage des fenêtres avec cron

Bonjour,
Je me permet de vous écrire car, dans le but d'un script d'affichage du niveau de la batterie j'utilise le code suivant:

  
  1 #!/bin/bash
  2 complet=`info.sh|grep 'Battery'|cut -d , -f 3|sed 's/ //g'|sed 's/remaining//g'`
  3 hour=`info.sh|grep 'Battery'|cut -d , -f 3|sed 's/ //g'|sed 's/remaining//g'|cut     -d : -f 1`
  4 min=`info.sh|grep 'Battery'|cut -d , -f 3|sed 's/ //g'|sed 's/remaining//g'|cut     -d : -f 2`
  5 date >> /media/DATA/Données\ de\ Laurent/Documents/crontab/sensors/battery.log
  6 echo $complet >> /media/DATA/Données\ de\ Laurent/Documents/crontab/sensors/battery.log
  7 echo "" >> /media/DATA/Données\ de\ Laurent/Documents/crontab/sensors/battery.log
  8 if [ $hour = 00 ] && [ $min -le 50 ]
  9 then
 10         zenity --info --title="Niveau de batterie" --text="Il reste moins de 50     minutes de batterie"
 11 fi
 12 if [ $hour = 00 ] && [ $min = 20 ]
 13 then
 14         zenity --info --title="Niveau de batterie" --text="Il reste 20 minutes d    e batterie"
 15 fi
 16 
 17 if [ $hour = 00 ] && [ $min = 30 ]
 18 then
 19         zenity --info --title="Niveau de batterie" --text="Il reste 30 minutes d    e batterie"
 20 fi
 21 if [ $hour = 01 ] && [ $min = 00 ]
 22 then
 23         zenity --info --title="Niveau de batterie" --text="Il reste une heure de     batterie"
 24 fi
 25 
 26 if [ $hour = 02 ] && [ $min = 00 ]
 27 then
 28         zenity --info --title="Niveau de batterie" --text="Il reste 2 heures de     batterie"
 29 fi
 30 
 31 if [ $hour = 03 ] && [ $min = 00 ]
"battery.sh" [lecture-seule] 39L, 1432C                           1,1          Haut

La commande info.sh est une code home made qui me donne quelques informations dont la batterie et j'extrais ces informations avec sed, cut, ...
dans les lignes 2,3 et 4. Ce script exécuté dans la console fonctionne parfaitement et m'ouvre en effet (quand la nécessité s'en fait ressentir) des fenêtres l'indiquant le temps restant de batterie.
Le problème est que ce script, je demande au crontab de l'exécuter tout les quarts d'heure et, dans ce cas là, aucune fenêtre ne s'ouvre.
Hors, le sript s'effectue car je le vois dans le fichier de log que je remplis en ligne 6 et 7.
Pouvez-vous m'aider ?

Death-Pixel

edit modo : titre plus explicite

Dernière modification par nesthib (Le 08/09/2012, à 06:28)


Death-Pixel

Never let your motivation burnout.

Hors ligne

#2 Le 07/09/2012, à 14:23

Kooothor

Re : pas d'affichage des fenêtres avec cron

Plop,

C'est pas une histoire de droits ?
Ton crontab, c'est ton user ou root qui le lance ?

Hors ligne

#3 Le 07/09/2012, à 14:29

Detah-Pixel

Re : pas d'affichage des fenêtres avec cron

J'avoue que je ne sais pas cela. Je pense que c'est mon user. Cependant, ce script ne demande aucun droit particulier et est placé dans /bin ainsi que info.sh. Tout le monde peut donc l'exécuter non ?


Death-Pixel

Never let your motivation burnout.

Hors ligne

#4 Le 07/09/2012, à 15:31

Kooothor

Re : pas d'affichage des fenêtres avec cron

Hors ligne

#5 Le 07/09/2012, à 15:36

Detah-Pixel

Re : pas d'affichage des fenêtres avec cron

Au risque de paraître ennuyant, que veux tu dire par non ?
Je sais et j'ai la preuve que la commande s'exécute.
Le problème est que je ne vois aucune fenêtre alors qu'il devrait y en avoir une. Pourquoi ?
Je ne comprends pas le rapport avec les droits d'administration...
Merci beaucoup.


Death-Pixel

Never let your motivation burnout.

Hors ligne

#6 Le 07/09/2012, à 15:47

Kooothor

Re : pas d'affichage des fenêtres avec cron

En gros, tout ce que est en dehors de /home/user ne peut pas être écrit par un utilisateur, seul root peut modifier les fichiers dans /bin (vraiment grosso merdo hein).
Après, selon les permissions, un utilisateur peut lire/exécuter un truc dans /bin (et heureusement).

Essaie de lancer ton cron avec root :

$ sudo su 
# crontab -e

N'oublie pas de placer ton script dans un répertoire accessible uniquement par root (car c'est une faille de sécurité de runner par root un script modifiable par non-root). Pas forcément grave sur un desktop mais autant prendre de bonnes habitudes big_smile

Aussi, évite de mettre tes programmes/script dans /bin. Je sais que GNU/Linux n'est pas aussi propre qu'un BSD mais c'est pas une raison pour continuer à le bordeliser ^^

Tu peux mettre ça dans ~/.bin ou /opt.
Perso j'ai un ~/.scripts...

Hors ligne

#7 Le 08/09/2012, à 06:27

nesthib

Re : pas d'affichage des fenêtres avec cron

J'ai l'impression d'avoir répondu plusieurs fois à ce problème cette semaine… et je viens de vérifier, la réponse est dans la doc de cron.
Il faut simplement préciser où se fait l'affichage en ajoutant DISPLAY=:0.0 dans le crontab.

NB. une petite remarque, tu utilises beaucoup de pipes pour pas grand chose… il y a moyen d'optimiser ton code au lieu de balancer une sortie de sed dans un autre sed… par ailleurs, puisque la source d'origine est un script maison, ne peux-tu pas faire en sorte d'afficher des données propres dès le début ? Et en une seule fois ? parce que là tu le lances 3 fois pour rien.
Ensuite tu fais un test pour 50/30/20 minutes alors qu'il te suffit d'afficher la valeur $min. Dernière chose, évite la syntaxe `…` qui est obsolète en bash, utilise à la place $(…).


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#8 Le 11/09/2012, à 15:37

Detah-Pixel

Re : pas d'affichage des fenêtres avec cron

Merci beaucoup Nesthib big_smile


Death-Pixel

Never let your motivation burnout.

Hors ligne