[suspend] Bouton mise en veille dans LXDE (résolu)

Questions et astuces concernant l'installation et la configuration d'archlinux
Répondre
defred
newbie
Messages : 6
Inscription : mar. 04 mai 2010, 17:25

[suspend] Bouton mise en veille dans LXDE (résolu)

Message 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é :

Code : Tout sélectionner

$ acpi_listen 
button/sleep SLPB 00000080 00000029
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.
Dernière modification par defred le mar. 04 mai 2010, 21:21, modifié 1 fois.
Avatar de l’utilisateur
tuxce
Maître du Kyudo
Messages : 6677
Inscription : mer. 12 sept. 2007, 16:03

Re: [suspend] Bouton mise en veille dans LXDE

Message 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.
defred
newbie
Messages : 6
Inscription : mar. 04 mai 2010, 17:25

Re: [suspend] Bouton mise en veille dans LXDE

Message 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>
Avatar de l’utilisateur
la_poigne
yeomen
Messages : 215
Inscription : dim. 22 févr. 2009, 09:20

Re: [suspend] Bouton mise en veille dans LXDE

Message 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
defred
newbie
Messages : 6
Inscription : mar. 04 mai 2010, 17:25

Re: [suspend] Bouton mise en veille dans LXDE

Message 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
defred
newbie
Messages : 6
Inscription : mar. 04 mai 2010, 17:25

Re: [suspend] Bouton mise en veille dans LXDE

Message 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>
Avatar de l’utilisateur
tuxce
Maître du Kyudo
Messages : 6677
Inscription : mer. 12 sept. 2007, 16:03

Re: [suspend] Bouton mise en veille dans LXDE (résolu)

Message 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 ?
defred
newbie
Messages : 6
Inscription : mar. 04 mai 2010, 17:25

Re: [suspend] Bouton mise en veille dans LXDE (résolu)

Message 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.
Avatar de l’utilisateur
tuxce
Maître du Kyudo
Messages : 6677
Inscription : mer. 12 sept. 2007, 16:03

Re: [suspend] Bouton mise en veille dans LXDE (résolu)

Message 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.
defred
newbie
Messages : 6
Inscription : mar. 04 mai 2010, 17:25

Re: [suspend] Bouton mise en veille dans LXDE (résolu)

Message 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 :D
Répondre