Page 1 sur 1
[suspend] Bouton mise en veille dans LXDE (résolu)
Publié : mar. 04 mai 2010, 17:41
par defred
Bonjour,
Je rencontre un soucis avec le bouton de mise en veille que je n'arrive pas à faire fonctionner.
Le bouton fonctionne bien et est bien détecté :
Mais le script /etc/acpi/handler.sh ne se lance pas, par-contre "xev" détecte que la touche "XF86Sleep" est utilisée. Je pense que Xorg remplace les events acpi par des events X11, mais je me trompe peut-être.
J'ai essayé de modifier le fichier "~/.config/openbox/lxde-rc.conf" en y ajoutant :
Code : Tout sélectionner
<keybind key="XF86Sleep">
<action name="Execute">
<command>/usr/sbin/pm-suspend</command>
</action>
</keybind>
Mais la commande pm-suspend ne peut à priori être lancée qu'avec l'utilisateur root...
Pouvez-vous m'aider ?
Merci d'avance pour votre aide.
Re: [suspend] Bouton mise en veille dans LXDE
Publié : mar. 04 mai 2010, 18:18
par tuxce
salut, déjà, est ce que la mise en veille fonctionne ? (en lancant pm-suspend)
dans /etc/acpi/handler.sh, par défaut, c'est un echo -n mem > /sys/power/state
il est possible que cette commande ne fonctionne pas, teste là ou remplace là par pm-suspend.
Re: [suspend] Bouton mise en veille dans LXDE
Publié : mar. 04 mai 2010, 18:25
par defred
La mise en veille fonctionne bien si je lance la commande directement. J'ai remplacé la commande "echo -n mem > /sys/power/state" par "pm-suspend" dans le handler.sh, mais ça ne fait rien, comme si le script n'était pas du tout utilisé.
Edit : Je viens de me rendre compte que la modification ci-dessous, me crée l'erreur "This utility may only be run by the root user." dans le fichier /var/log/slim.log
Code : Tout sélectionner
<keybind key="XF86Sleep">
<action name="Execute">
<command>/usr/sbin/pm-suspend</command>
</action>
</keybind>
Re: [suspend] Bouton mise en veille dans LXDE
Publié : mar. 04 mai 2010, 19:21
par la_poigne
Salut,
tu peut modifier le fichier /etc/sudoers avec
visudo pour pouvoir lancer
sudo /usr/sbin/pm-suspend sans mot de passe
Code : Tout sélectionner
# User privilege specification
root ALL=(ALL) ALL
vince ALL=(ALL) ALL,NOPASSWD: /usr/sbin/pm-suspend
Re: [suspend] Bouton mise en veille dans LXDE
Publié : mar. 04 mai 2010, 19:27
par defred
J'ai essayé la manip, mais ça ne fonctionne pas. Apres investigation, le script est fait pour être lancé uniquement par root.
Voici ce qu'on y trouve :
Code : Tout sélectionner
if [ "$(id -u)" != "0" ]; then
echo This utility may only be run by the root user. 1>&2
exit 1
fi
Re: [suspend] Bouton mise en veille dans LXDE
Publié : mar. 04 mai 2010, 20:54
par defred
J'ai trouvé une solution, qui n'est peut-être pas la plus optimale, mais qui fonctionne.
J'ai créé un script qui contient:
Code : Tout sélectionner
dbus-send --system --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Suspend int32:0
Puis dans ~/.config/openbox/lxde-rc.conf j'ai ajouté ceci :
Code : Tout sélectionner
<keybind key="XF86Sleep">
<action name="Execute">
<command> ~/Scripts/monscript.sh </command>
</action>
</keybind>
Re: [suspend] Bouton mise en veille dans LXDE (résolu)
Publié : mar. 04 mai 2010, 22:36
par tuxce
ça me paraît bizarre qu'acpi_listen detecte et que le handler.sh ne lance pas la commande, tu peux poster ton handler.sh ?
Re: [suspend] Bouton mise en veille dans LXDE (résolu)
Publié : mer. 05 mai 2010, 08:17
par defred
Voici mon handler.sh
Code : Tout sélectionner
#!/bin/sh
# Default acpi script that takes an entry for all actions
# NOTE: This is a 2.6-centric script. If you use 2.4.x, you'll have to
# modify it to not use /sys
minspeed=`cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq`
maxspeed=`cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq`
setspeed="/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed"
set $*
case "$1" in
button/power)
#echo "PowerButton pressed!">/dev/tty5
case "$2" in
PWRF) logger "PowerButton pressed: $2" ;;
export _LXSESSION_PID=`pidof lxsession`
su fred -c lxsession-logout ;;
*) logger "ACPI action undefined: $2" ;;
esac
;;
button/sleep)
case "$2" in
SLPB) pm-suspend ;;
*) logger "ACPI action undefined: $2" ;;
esac
;;
ac_adapter)
case "$2" in
AC)
case "$4" in
00000000)
echo -n $minspeed >$setspeed
#/etc/laptop-mode/laptop-mode start
;;
00000001)
echo -n $maxspeed >$setspeed
#/etc/laptop-mode/laptop-mode stop
;;
esac
;;
*) logger "ACPI action undefined: $2" ;;
esac
;;
battery)
case "$2" in
BAT0)
case "$4" in
00000000) #echo "offline" >/dev/tty5
;;
00000001) #echo "online" >/dev/tty5
;;
esac
;;
CPU0)
;;
*) logger "ACPI action undefined: $2" ;;
esac
;;
button/lid)
#echo "LID switched!">/dev/tty5
;;
*)
logger "ACPI group/action undefined: $1 / $2"
;;
esac
J'ai aussi essayé de décommenter la ligne "#echo "PowerButton pressed!">/dev/tty5" et rien n'apparait dans la console tty5 lorsque j'appuie sur le bouton power.
Re: [suspend] Bouton mise en veille dans LXDE (résolu)
Publié : mer. 05 mai 2010, 11:10
par tuxce
defred a écrit :
Code : Tout sélectionner
case "$2" in
PWRF) logger "PowerButton pressed: $2" ;;
export _LXSESSION_PID=`pidof lxsession`
su fred -c lxsession-logout ;;
*) logger "ACPI action undefined: $2" ;;
esac
Le ";;" indique une fin de condition, pour séparer des instructions, c'est ";" ou un retour à la ligne.
Enlève le premier ";;"
Sinon, mettre une action utilisateur dans un fichier système n'est pas forcément une bonne chose, si tu veux quitter ton système avec le bouton d'alimentation, utilise plutôt acpi_listen, par exemple
Code : Tout sélectionner
acpi_listen | while read btn action nb1 nb2; do
[[ $btn = "button/power" && $action = "PWRF" ]] && { lxsession-logout; exit; }
done
en supposant que t'as bien PWRF.
Re: [suspend] Bouton mise en veille dans LXDE (résolu)
Publié : mer. 05 mai 2010, 11:31
par defred
Effectivement, cette erreur empêchait le handler.sh de fonctionner.
J'ai supprimé la partie :
Code : Tout sélectionner
export _LXSESSION_PID=`pidof lxsession`
su fred -c lxsession-logout ;;
Et j'ai rajouté dans "~/.config/openbox/lxde-rc.xml" la partie suivante qui permet de faire la même chose plus proprement :
Code : Tout sélectionner
<!-- Power Button -->
<keybind key="XF86PowerOff">
<action name="Execute">
<command>lxde-logout</command>
</action>
</keybind>
En fait lxde-logout affiche un menu permettant de redémarrer/arrêter/fermer la session, et je crois que cette commande doit être lancée par l'utilisateur, et c'est pour ça que j'avais mis ces choses dans le handler.sh ...
Merci pour tout
