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 c1⁄2ur 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.