PDA

Afficher la version complète : [Réglé] Script et asus_acpi



Coin-coin
25/02/2007, 18h56
Bonjour,

J'essaye de faire un petit script (bash) pour gérer le bouton "power" de mon ordi avec asus_acpi, et j'ai un problème que je ne comprends pas !
J'ai testé mon script en le lançant à la main, et tout tourne très bien. Mais quand je le place dans le dossier asus_acpi, il ne marche plus et le log me dit :
<div class='quotetop'>Citation </div>
[Fri Feb 23 15:18:04 2007] BEGIN HANDLER MESSAGES
/home/moi/.asus_acpi/power.sh: line 6: [: too many arguments
/home/moi/.asus_acpi/power.sh: line 21: [: too many arguments
/home/moi/.asus_acpi/power.sh: line 36: [: too many arguments
[Fri Feb 23 15:18:04 2007] END HANDLER MESSAGES[/b]Sachant que les lignes en question sont simplement des "if" http://www.alionet.org/style_emoticons/<#EMO_DIR#>/huh.gif
<div class='quotetop'>Citation </div>
if [ $L -eq 0 ][/b]

Vu que j'apprends un peu sur le tas, il doit y avoir quelque chose que je fais de travers et qui m'échappe...

Merci de votre aide !

Heero_Yuy
26/02/2007, 10h36
Salux,

Je ne connais pas bien le script shell, mais je suis développeur. S'il n'est pas trop long peux-tu poster ton script pour que j'y jette un oeil ?

Coin-coin
26/02/2007, 18h24
Ok, mais interdiction de se moquer ! http://www.alionet.org/style_emoticons/<#EMO_DIR#>/unsure.gif C'est peut-être sale, mais tout ce que je veux c'est que ça marche (ce qui n'est pas vraiment le cas, je vous l'accorde).

L'idée vient d'un script que j'ai croisé sur le net. Quand on appuyait une fois sur le bouton power, il passait en init 0, quand on rappuyait, en init 6, et au bout de 3 fois ça annule (init 5 il me semble) ... C'était une bonne idée, mais chez moi lorsque j'appuyais plusieurs fois, la fraction de seconde en init 0 suffisait pour que je perde le clavier et la souris.
J'ai essayé de l'adapter en remplaceant le init par une valeur dans un fichier à part ("power_data") et en laissant 10 secondes avant d'exécuter la commande (je suis pas pressé, mais j'apprécie que mon ordinateur se débrouille tout seul).

Le principe de mon script, c'est que dans le fichier power_data, 0 correspond à "rien", 1 à "mise en veille", 2 à "éteindre" et 3 à "redémarrer".
Le script lit le fichier (je soupçonne cette étape d'être la cause de tous mes ennuis), puis en fonction de la valeur lue passe à la valeur suivante avec un avertissement (un petit popup de KDE). Au bout de 10 secondes, si la valeur dans le fichier n'a pas changé (c'est-à-dire si le script n'a pas été appelé par ailleurs) alors il exécute la commande qui va bien. Si le script a été rappelé ailleurs, alors il quitte (et l'autre appel du script vit sa vie).

Quand j'exécute depuis la console, je n'ai pas de problème, ça se comporte exactement comme prévu.
Lorsque c'est asus_acpi qui le lance ou que je le lance au clic alors il hurle sur les if et passe direct à la fin ("annulé").

(Je précise que tout est bon du côté de sudo)

Après réflexion, je me dis que ça doit être la lecture du fichier qui ne retourne pas un simple chiffre, mais je ne trouve pas la bonne syntaxe.


#!/bin/bash

dcop ksmserver ksmserver saveCurrentSession
L=`more "/home/moi/.asus_acpi/power_data"`

if [ $L -eq 0 ];
then
kdialog --title "Power" --passivepopup "Mise en veille" 10 &
echo 1 > /home/moi/.asus_acpi/power_data
sleep 10
L=`more /home/moi/.asus_acpi/power_data`
if [ $L -eq 1 ];
then
echo 0 > /home/moi/.asus_acpi/power_data
powersave -U
exit
fi
fi

if [ $L -eq 1 ];
then
kdialog --title "Power" --passivepopup "Extinction en cours" 10 &
echo 2 > /home/moi/.asus_acpi/power_data
sleep 10
L=`more /home/moi/.asus_acpi/power_data`
if [ $L -eq 2 ];
then
echo 0 > /home/moi/.asus_acpi/power_data
sudo /sbin/init 0
exit
fi
fi

if [ $L -eq 2 ];
then
kdialog --title "Power" --passivepopup "Rédémarrage en cours" 10 &
echo 3 > /home/moi/.asus_acpi/power_data
sleep 10
L=`more /home/moi/.asus_acpi/power_data`
if [ $L-eq 3 ];
then
kdialog --title "Fini" --msgbox "Rédémarrage"
sudo /sbin/init 6
exit
fi
fi

echo 0 > /home/moi/.asus_acpi/power_data
kdialog --title "Power" --passivepopup "Annulé" 10 &


EDIT

Bon, écrire mon message m'a fait réfléchir, et du coup j'ai trouvé ! http://www.alionet.org/style_emoticons/<#EMO_DIR#>/thumbup.gif

C'était effectivement la lecture du fichier qui posait problème.
Mais tout marche si je remplace
L=`more "/home/moi/.asus_acpi/power_data"` par
L=$(cat "/home/moi/.asus_acpi/power_data")

J'aurais dû googler un peu plus avant de poster http://www.alionet.org/style_emoticons/<#EMO_DIR#>/blushing.gif

Faudra que j'apprenne proprement les bases du bash un de ces quatre...

Merci à toi, Angel59, de t'être penché sur mon problème !

Heero_Yuy
27/02/2007, 09h54
De rien, même si finalement, tu as trouvé réponse tout seul http://www.alionet.org/style_emoticons/<#EMO_DIR#>/wink.gif