web-dev-qa-db-fra.com

Exécuter le script sur Wakeup?

Existe-t-il un moyen d'exécuter un script lorsqu'un ordinateur "sort de veille"? Je sais que cela peut être fait au démarrage, bien sûr, 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 de sommeil, et j'aimerais idéalement qu'un script prenne soin de le transformer. à un niveau raisonnable au lieu d'avoir à le taper manuellement à chaque fois.

41
Eva

pm-utils fournit un tas de scripts qui s'exécutent en mode veille/reprise, vous pouvez ajouter votre script ici, mais vous devrez faire attention car tout foirage risquerait de provoquer une interruption de la reprise. Regardez dans /usr/lib/pm-utils/sleep.d, c'est là que se trouvent les scripts. Vous pouvez consulter le script appelé 95led car il est assez simple et constituera un bon modèle pour commencer.

95led fournit des cas d'hibernation/suspension et décongélation/reprise. Si vous souhaitez uniquement reprendre, vous écrivez votre script de la manière suivante:

#!/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, alors assurez-vous qu'il s'affiche en dernier dans le répertoire, peut-être appelez-le 99ZZZ_myscript ou quelque chose du genre. Encore une fois, si vous n'êtes pas sûr de ce que vous faites ici, je ne le ferais pas. Vous pouvez finir par suspendre/reprendre. Si cela se produit, vous pouvez supprimer le script ou le corriger, mais vous devrez effectuer un cycle d'alimentation difficile pour restaurer votre système.

Il existe peut-être aussi un moyen plus simple, mais je sais que cette méthode fonctionnera.

34
mfisch

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

Voir man systemd-sleep pour plus de détails.

Sudon'est pas nécessaire, car votre script sera exécuté en tant que root.

remarque: le lien wiki Arch sur le sujet ( systemd sleep hooks ) indique (à tort pour 15.04) que vous devez placer vos scripts dans /usr/lib/systemd/system-sleep/, mais cela ne fonctionnera pas dans Ubuntu 15.04. Placez vos scripts dans /lib/systemd/system-sleep/ si vous exécutez 15.04.

38
SpmP

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 à Lindh-E:

SOLUTION:

pm-utils fournit un ensemble de scripts qui s'exécutent en mode veille/reprise.

Ce dont vous avez besoin est de:

  1. Créez un script appelé 99MyScript.sh (99 permet de l'exécuter après d'autres scripts)
  2. Ajoutez votre script dans /usr/lib/pm-utils/sleep.d
  3. Affecter le droit d'exécution: Sudo chmod + x /usr/lib/pm-utils/sleep.d/99MyScript.sh
  4. Essaye-le :)

ATTENTION:

vous devrez faire attention car tout gâcher risque de briser la reprise. Si le système se bloque ou se bloque, vous pouvez supprimer le script ou le corriger, mais vous devrez effectuer un cycle d'alimentation difficile pour que votre système soit sauvegardé.

EXEMPLE:

Recherchez 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 d'hibernation/suspension et décongélation/reprise. Si vous souhaitez uniquement reprendre, vous écrivez votre script de la manière suivante:

#!/bin/sh

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

Ce n'est pas vraiment une réponse indépendante distincte mais étant donné que je suis incapable de commenter (en raison d'une restriction de réputation), j'aimerais simplement ajouter un complément important à la réponse de mfisch, qui a également fonctionné pour moi.

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

6
jamadagni