Forum Programmation.shell lidio !

Posté par  .
Étiquettes :
0
25
juin
2005
Bonjour à tous,

Je tentes, sous Debian sarge, d'éteindre l'écran de mon ordinateur portable lorsque celui-ci complètement fermé.

Pour cela j'utilise l'ACPI qui me permet de savoir, par le biais du bouton "lid", si l'écran est rabattu ou non.

Bref, j'essaie de compléter le script système qui est appelé lorsque le bouton "lid" est enfoncé. (l'écran appuis dessus !)

Il s'agit du fichier: /etc/acpi/actions/lm_lid.sh

fichier initial:
----------------------------------------------------------------------------------------------------------
#!/bin/bash

test -f /usr/sbin/laptop_mode || exit 0

# lid button pressed/released event handler

/usr/sbin/laptop_mode auto
----------------------------------------------------------------------------------------------------------


mon fichier:
----------------------------------------------------------------------------------------------------------
#!/bin/bash
# lid button pressed/released event handler

# Recuperation de l'etat du bouton lid
state=`cat /proc/acpi/button/lid/LID/state | awk '{print $2}'`

# Ecriture de l'etat du bouton lid dans la syslog
logger -i "LID state $state"

# si l'etat du bouton lid est clos, forcer l'écran à s'éteidre sinon forcer l'écran à s'allumer
if [ "$state" = "closed" ]; then
sudo -u steph /usr/bin/X11/xset -display :0 dpms force off
else
sudo -u steph /usr/bin/X11/xset -display :0 dpms force on
fi

# Si le package laptop_mode n'est pas installé, quitte direct
test -f /usr/sbin/laptop_mode || exit 0

# Appel de laptop_mode
/usr/sbin/laptop_mode auto
----------------------------------------------------------------------------------------------------------


Bon ça fonctionne mais que pour le user steph =)

- Comment savoir quel est le user qui est connecté sous X ?
( pour remplacer "steph" qui est en dur)

- Pourquoi ce type de solution n'est elle pas intégrée par défaut ?


Je suis preneur des remarques, et autre améliorations...
  • # Re: lidio !

    Posté par  . Évalué à 4.

     Comment savoir quel est le user qui est connecté sous X ? 

    $ who | grep -m1 "^.\+ :0" | awk '{print $1}'

    Mes 2 ¢.
    • [^] # Re: lidio !

      Posté par  . Évalué à 1.

      merci pour ta réponse !

      Je teste au plus tôt ...
    • [^] # awk, c'est du costaud

      Posté par  . Évalué à 2.

      On peut le faire sans le grep :

      who | awk ' $2 ~ /:0/ { print $1 }'
      • [^] # Re: awk, c'est du costaud

        Posté par  . Évalué à 3.

        Ta commande est en tout point supérieure à la mienne. Je plussoie de bon c½ur et rajoute l'apprentissage de awk à ma TODO list :)
        • [^] # je plussoie aussi =)

          Posté par  . Évalué à 1.

          Salut,

          Voici la version modifiée du fichier /etc/acpi/actions/lm_lid.sh
          -------------------------------------------------------------------------------------------------------------
          #!/bin/bash
          # lid button pressed/released event handler

          # Recuperation de l'etat du bouton lid
          state=`cat /proc/acpi/button/lid/LID/state | awk '{print $2}'`

          # Ecriture de l'etat du bouton lid dans la syslog
          logger -i "LID state $state"

          # Récupération du username que est sous X en console
          user=$(who | awk ' $2 ~ /:0/ { print $1 }')

          # si l'etat du bouton lid est clos, forcer l'écran à s'éteidre sinon forcer l'écran à s'allumer
          if [ "$state" = "closed" ]; then
          sudo -u $user /usr/bin/X11/xset -display :0 dpms force off
          else
          sudo -u $user /usr/bin/X11/xset -display :0 dpms force on
          fi

          # Si le package laptop_mode n'est pas installé, quitte direct
          test -f /usr/sbin/laptop_mode || exit 0

          # Appel de laptop_mode
          /usr/sbin/laptop_mode auto
          -------------------------------------------------------------------------------------------------------------


          A noter qu'il est nécessaire de lancer en root la commande ci-dessous pour effectuer la prise en compte de cette modification:

          /etc/init.d/acpid restart


          Merci à tous !

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.