[cron / bash /zenity ] Problème non-résolu (résolu)

Applications, problèmes de configuration réseau
sylvain
Hankyu
Messages : 28
Inscription : mar. 03 mars 2009, 19:38

[cron / bash /zenity ] Problème non-résolu (résolu)

Message par sylvain »

Bonjour !
Tout d'abord, je voudrais dire que j'ai consulté les derniers sujets concernant cron dans ce forum ( http://forums.archlinux.fr/topic7969.html par exemple). J'ai aussi pas mal fait de recherches sur Internet et trouvé ce page :
http://askubuntu.com/questions/23009/re ... s-not-work qui liste un bon nombre de problème potentiels lors de la mise en place de scripts à exécutions régulières.

Pourtant, mon script bash utilisant zenity pour afficher un message sur le niveau de la batterie de mon portable (la batterie est chargée / la batterie est déchargée) ne s'affiche pas à l'écran, et le messge de log de crontab me semble un peu bizarre.

Allons-y !

Le script bash (nécessite bash zenity et apci) :

Code : Tout sélectionner

#!/bin/bash
#
# This script is meant to warn you when the battery level is low 
# or when it's fully charged

RESTE=`acpi -b | awk -F"," '{print $2}'`
BRANCHEE=`acpi -a | gawk -F":" '{print $2}'`
export DISPLAY=:0.0

    if [[ $BRANCHEE == " off-line" && $RESTE == " 10%" || $RESTE == " 9%" || $RESTE == " 8%" || $RESTE == " 7%" || $RESTE == " 6%" || $RESTE == " 5%" || $RESTE == " 4%" || $RESTE == " 3%" ]]
		then zenity --warning --display=:0.0 --text "ATTENTION, la batterie est déchargée (-10%)."
    fi
    
    if [[ $BRANCHEE == " on-line" && $RESTE == " 95%" || $RESTE == " 96%" || $RESTE == " 97%" || $RESTE == " 98%" || $RESTE == " 99%" || $RESTE == " 100%" ]]
        then zenity --warning --display=:0.O --text " La batterie est pleine ; vous pouvez débrancher"
    fi
Ce script marche, dans les conditions requises, depuis une fenêtre Xterm et depuis dmenu.

Ici, il me faut dire que j'utilise i3 (http://i3wm.org/), que je n'ai pas de "dock flashy" ou autre barre des tâches, et que l'utilisation de i3status ou concky (ou autre) ne m'est d'aucune utilité : en effet, ces jouets utiles sont cachés losrque j'ouvre une fenêtre pour bosser. Il me faut donc un système "intrusif", une fenêtre chiante en plein milieu de l'écran, pour me signaler que la batterie est chargée et que je peux débrancher l'alimentation ; et qu'il me reste peu de réserve quand l'alimentation est débranchée. Sinon, c'est la cata, expérimentée bien des fois...

Continuons avec le crontab :

Code : Tout sélectionner

*/5 * * * * /bin/bash -c "/usr/bin/battery"
Je tiens cette "syntaxe" de la page citée plus haut : chemins absolus, pas d'extension en "sh", guillemets, etc. mais ça n'a rien changé.

Ensuite, le

Code : Tout sélectionner

.bashrc

Code : Tout sélectionner

xhost local:sylvain > /dev/null
Je ne sais plus où j'ai trouvé ça, mais ce n'est pas, il me semble, la commande recommandée sur ce forum.
De fait, je n'ai plus de message d'erreur concernant l'affichage. En fait je ne comprends pas l'erreur signalée dans le log de crontab :

Code : Tout sélectionner

Sep  1 14:25:01 localhost /USR/SBIN/CROND[7913]: (sylvain) CMD (/bin/bash -c "/usr/bin/battery")
Sep  1 14:25:01 localhost /USR/SBIN/CROND[7912]: (sylvain) CMDOUT (This option is not available. Please see --help for all possible usages.)
Sep  1 14:25:01 localhost /USR/SBIN/CROND[7921]: (CRON) EXEC FAILED (/usr/sbin/sendmail): No such file or directory
Sep  1 14:25:01 localhost /USR/SBIN/CROND[7912]: (sylvain) MAIL (mailed 73 bytes of output but got status 0x0001
)
Je comprends les deux dernières lignes : il y a une erreur, j'essaie de t'envoyer un mail, mais je ne trouve pas sendmail. C'est normal, je m'en f***.

Les deux premières lignes en revanche me perturbent : quand je fait une recherche Internet sur "crontab CMDOUT this option is not available", je ne trouve que dalle.

Je veux bien des pistes, merci à vous !
Dernière modification par sylvain le sam. 01 sept. 2012, 15:39, modifié 1 fois.
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17570
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [cron / bash /zenity ] Problème non-résolu

Message par benjarobin »

Il y a beaucoup de chose qui ne vont pas en effet, tout d'abord il faut que ta rajoute la tache /usr/bin/battery dans la tache de ton utilisateur !
L'utilisation de xhost est assez dangereux : A proscrire.
Pour qu'un programme graphique puisse se lancer il a besoin de 2 informations : DISPLAY et optionnellement XAUTHORITY (si non définit le fichier doit se trouver ici : $HOME/.Xauthority)

Code : Tout sélectionner

#!/bin/bash

RESTE=$(acpi -b | command grep -oE "[0-9]+%" | tr -d '%')
BRANCHEE=`acpi -a | gawk -F":" '{print $2}'`
export DISPLAY=:0.0
export XAUTHORITY=/home/benjarobin/.Xauthority

if [[ $BRANCHEE == " off-line" && $RESTE -le 10 ]]; then
	zenity --warning --text "ATTENTION, la batterie est déchargée ($RESTE%)."
fi

if [[ $BRANCHEE == " on-line" && $RESTE -ge 95 ]]; then
	zenity --warning --text "La batterie est pleine ; vous pouvez débrancher"
fi
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
sylvain
Hankyu
Messages : 28
Inscription : mar. 03 mars 2009, 19:38

Re: [cron / bash /zenity ] Problème non-résolu

Message par sylvain »

Merci beaucoup benjarobin !
ça marche du tonnerre !
J'ai copié bêtement l'astuce avec grep mais je regarderai ce que signifient les options plus tard.
En revanche, juste comme ça : ça signifie quoi :
benjarobin a écrit :tout d'abord il faut que ta rajoute la tache /usr/bin/battery dans la tache de ton utilisateur !
???

En tous cas, merci encore !
sylvain
Hankyu
Messages : 28
Inscription : mar. 03 mars 2009, 19:38

Re: [cron / bash /zenity ] Problème non-résolu (résolu)

Message par sylvain »

Bon, je viens de regarder les options de tr et grep.
J'ai une question en revanche : pourquoi utiliser

Code : Tout sélectionner

$(commande | commande)
et pas

Code : Tout sélectionner

`commande | commande`
?
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17570
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [cron / bash /zenity ] Problème non-résolu (résolu)

Message par benjarobin »

En faite "commande" est un programme qui permet de lancer la vrai commande sans alias, j'ai juste oublié de l'enlever, car l'alias de mon grep fait d'autre chose
Sinon pour cron tu as des taches utilisateur et d'autre root, il est conseillé de mettre ton script en tant que tache utilisateur, voir Wiki sur cron
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Répondre