53 votes

Exécuter script au réveil ?

Existe-t-il un moyen d'exécuter un script lorsqu'un ordinateur se "réveille" (après avoir dormi) ? Je sais qu'on peut le faire au démarrage, évidemment, mais le problème dans ce cas est que le rétroéclairage de mon ordinateur portable semble se réinitialiser à chaque fois qu'il sort du sommeil, et j'aimerais idéalement qu'un script se charge de le ramener à un niveau raisonnable au lieu d'avoir à le taper manuellement à chaque fois.

56voto

SpmP Points 706

Dans 15.04, Vivid, vous devez placer vos scripts dans :

/lib/systemd/system-sleep/

Un exemple de script basé sur celui du wiki Arch ( systemd sleep Hooks ) :

#!/bin/sh
case $1/$2 in
  pre/*)
    echo "Going to $2..."
    # Place your pre suspend commands here, or `exit 0` if no pre suspend action required
    ;;
  post/*)
    echo "Waking up from $2..."
    # Place your post suspend (resume) commands here, or `exit 0` if no post suspend action required
    ;;
esac

N'oubliez pas de rendre votre script exécutable !

sudo chmod a+x /lib/systemd/system-sleep/your-script

見る man systemd-sleep pour plus de détails.

Il n'est pas nécessaire de sudo car votre script sera exécuté en tant que root.

note : le lien wiki de l'Arche sur le sujet ( systemd sleep hooks ) indique (à tort pour la version 15.04) que vous devez placer vos scripts dans le dossier /usr/lib/systemd/system-sleep/ mais cela ne fonctionnera pas sous Ubuntu 15.04. Placez vos scripts dans /lib/systemd/system-sleep/ si vous utilisez la version 15.04.

39voto

Joe Fontana Points 703

Pm-utils fournit un tas de scripts qui s'exécutent sur sleep/resume, vous pourriez y ajouter votre scripts, mais vous devrez être prudent car si vous vous plantez, vous risquez de casser resume. Regardez dans /usr/lib/pm-utils/sleep.d c'est là que se trouvent les scripts, vous pouvez regarder le scripts appelé 95led car il est assez simple et constitue un bon modèle pour commencer.

95led fournit des cas pour l'hibernation/suspension et le dégel/reprise, si vous ne voulez que la reprise, vous devez écrire votre script comme ceci :

#!/bin/sh

case "$1" in
    resume)
        echo "hey I just got resumed!"
        run_some_command
esac

Votre script devrait probablement s'exécuter en dernier, donc assurez-vous qu'il apparaisse en dernier dans le répertoire, en l'appelant par exemple 99ZZZ_myscript ou quelque chose comme ça. Encore une fois, si vous n'êtes pas sûr de ce que vous faites ici, je ne m'en mêlerais pas. Vous risquez d'interrompre la suspension/reprise d'activité. Si cela se produit, vous pouvez supprimer le script ou le réparer, mais vous devrez faire un cycle d'alimentation dur pour remettre votre système en marche.

Il existe peut-être une méthode plus simple, mais je sais que celle-ci fonctionnera.

13voto

sangorys Points 310

Comme je n'ai pas assez de réputation pour écrire des commentaires, je vais réécrire la solution de mfisch en ajoutant la réponse pour Lindh-E :

SOLUTION :

pm-utils fournit un ensemble de scripts qui s'exécutent lors de la mise en veille ou de la reprise.

Ce qu'il vous faut, c'est :

  1. Créer un script appelé 99MyScript.sh (99 permet de l'exécuter après d'autres scripts)
  2. Ajoutez votre script en /usr/lib/pm-utils/sleep.d
  3. Attribution du droit d'exécution : sudo chmod +x /usr/lib/pm-utils/sleep.d/99MyScript.sh
  4. Testez-le :)

AVERTISSEMENT :

vous devrez être prudent car si vous vous trompez, vous risquez de casser resume. Si le système se bloque ou se fige, vous pouvez supprimer le script ou le réparer, mais vous devrez effectuer un redémarrage brutal pour remettre votre système en marche.

EXEMPLE :

Consultez les scripts existants dans /usr/lib/pm-utils/sleep.d. Le script appelé 95led est assez simple et sera un bon modèle pour commencer. 95led fournit des cas pour hibernate/suspend et thaw/resume, si vous ne voulez que resume, vous écrirez votre script comme ceci :

#!/bin/sh

case "$1" in
    resume)
        echo "hey I just got resumed!"
        run_some_command
esac

7voto

jamadagni Points 211

Il ne s'agit pas vraiment d'une réponse indépendante, mais comme je ne peux pas commenter (en raison d'une restriction de réputation), je voudrais juste ajouter un complément important à la réponse de mfisch, qui a également fonctionné pour moi.

Veuillez noter que le HOME y PATH (et très probablement d'autres variables environnementales) ne sera probablement pas le même que votre environnement Shell habituel. J'ai eu des problèmes avec la solution de mfisch qui ne semblait pas fonctionner pour les Shell que j'avais besoin d'exécuter sur resume mais il s'est avéré que c'était mes Shell qui étaient en cause puisqu'ils s'attendaient à ce que HOME à mon répertoire d'utilisateur (je suis un utilisateur unique sur mon système) et pour PATH pour inclure /usr/local/bin et au moment de la reprise, rien de tout cela n'est garanti (et dans le cas de HOME (ce qui est peut-être déconseillé). Vous devrez donc peut-être adapter vos scripts/programmes pour qu'ils ne dépendent pas de ces env-vars...

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X