54 votes

Possibilité d'exécuter des scripts en veille et au réveil ?

MacBook Pro 2010 fonctionnant sous OS X Lion.

Est-il possible d'exécuter des scripts sur les événements de sommeil et de réveil ?

Mon application spécifique est que j'ai des volumes Truecrypt synchronisés avec Dropbox que j'utilise régulièrement sur mon MacBook et mon iMac. J'éteins rarement mon MBP car fermer le couvercle est beaucoup plus rapide et plus facile, mais cela signifie que je dois me rappeler de démonter mes volumes Truecrypt et de les laisser se synchroniser à nouveau avant de fermer mon MBP. Il est assez trivial de script montage/démontage de ceux-ci, mais j'aimerais aller un peu plus loin et avoir ces script exécutés automatiquement.

26voto

DaveEmme Points 341

SleepWatcher peuvent être utiles.

D'après la description : Il peut être utilisé pour exécuter une commande Unix lorsque le Mac ou l'écran du Mac se met en veille ou se réveille, après un temps donné sans interaction de l'utilisateur ou lorsque l'utilisateur reprend son activité après une pause ou encore lorsque l'alimentation d'un ordinateur portable Mac est attachée ou détachée. Il peut également faire passer le Mac en mode veille ou récupérer le temps écoulé depuis la dernière activité de l'utilisateur.

Il fonctionne bien pour moi sur 10.6.8. Plusieurs versions sont disponibles pour les versions 10.1( !) à 10.7.

0 votes

Voici une série de Conseils pour Mac OSX qui utilisent SleepWatcher.

7 votes

Vous pouvez installer SleepWatcher en Homebrew par exemple brew install sleepwatcher . Et voir ce poste c'est très utile. L'utilitaire SleepWatcher prend également en charge OS X El Capitan (10.11).

21voto

Daniel Points 32917

Il semble que lorsque le système d'exploitation est livré, sleep/wake ne peut pas déclencher de scripts. mais des solutions tierces ont été développées.

Je n'ai aucune expérience personnelle de ces programmes ou de leurs vendeurs.

2 votes

Le scénario semble faire ce que je recherche. Merci.

0 votes

J'ai demandé à Scenario de déclencher l'applescript qui déclenche un bash script et voilá.

0 votes

Pour mettre fin à une application, tapez simplement ceci dans une nouvelle fenêtre AppleScripts et enregistrez-la dans le dossier SleepScripts : tell application "CodeBox" quit end tell

11voto

Dustin Points 737

Il s'agit de ma propre application, alors tenez-en compte, mais ControlPlane a la capacité d'effectuer des actions basées sur la veille/le réveil. Vous le trouverez à http://www.controlplaneapp.com/ .

ControlPlane est un fork de MarcoPolo et a été mis à jour pour fonctionner sur Snow Leopard et Lion.

2 votes

Des années plus tard, controlplane n'est plus maintenu en raison de l'accumulation d'incompatibilités que Dustin a publiées sur son blog et qu'il n'a pas eu le temps de corriger. C'est dommage, mais c'est logique.

1 votes

C'est un utilitaire très cool, c'est un peu trop pour cela, mais si vous avez besoin de déclencher sur autre chose que le réveil/le sommeil, alors c'est plutôt cool. J'aime aussi le support Growl pour que vous sachiez ce qu'il fait. Et il est gratuit :).

2 votes

Ce devrait être la réponse acceptée parce que c'est gratuit

8voto

Nathan Points 1975

J'ai développé le simple Daemon de lancement suivant pour fournir un déclencheur de 'réveil' pour les scripts sur Leopard :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>wake-alert</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/bash</string>
        <string>-c</string>
        <string>z=/tmp/wake; test -s $z || { date > $z; say w; }; 
tail -1 /Library/Logs/DirectoryService/DirectoryService.server.log | grep -v Sleep || > $z
        </string>
    </array>
    <key>WatchPaths</key>
    <array>
        <string>/Library/Logs/DirectoryService/DirectoryService.server.log</string>
    </array>
    <key>ExitTimeOut</key>
    <integer>2</integer>
    <key>ThrottleInterval</key>
    <integer>1</integer>
</dict>
</plist>

Vous pouvez remplacer "say w" par votre code. J'écris une date à z mais vous pourriez changer cela pour écrire n'importe quoi. Vous devrez peut-être augmenter 'ExitTimeOut' pour certains scripts. Mon Daemon de lancement se trouve dans /Library/LaunchDaemons/wake-alert.plist.

Le démon de lancement observe le fichier DirectoryService.server.log et l'écrit dans un fichier temporaire à condition que le fichier soit vide. Le fichier est effacé par une entrée 'Sleep' du journal et par un arrêt.

Si vous utilisez 'fast user switching' pour dormir, vous constaterez que les scripts qui nécessitent un utilisateur connecté tenteront de s'exécuter trop tôt et échoueront à moins que vous ne modifiiez le Daemon de lancement - peut-être grep 'Succeeded' dans 'secure.log'.

1 votes

/Library/Logs/DirectoryService/DirectoryService.server.log n'existe pas dans High Sierra (10.13).

0 votes

Il existe probablement d'autres journaux qui peuvent être utilisés.

6voto

Dzmitry Hubin Points 151

Cette question m'intéressait auparavant mais je n'ai pas trouvé de guide pas à pas pour y parvenir. La solution est basée sur un outil open-source appelé veilleur de nuit et de la Apple lancé sur le marché S'est inspiré de ce article

Alors profitez-en ! :

  1. Installer sleepwatcher => brew install sleepwatcher
  2. Au début, créez => ~/.wakeup y ~/.sleep scripts et y mettre de la logique shell
  3. Ajoutez les permissions nécessaires => chmod 700 ~/.sleep && chmod 700 ~/.wakeup
  4. Le tester localement => /usr/local/sbin/sleepwatcher --verbose --sleep ~/.sleep - s'endormir avec un terminal en marche
  5. Si cela fonctionne, chargez le processus en tant qu'agent launchd pour tous les utilisateurs. /Library/LaunchAgents
  6. Ajout d'un lien symbolique pour la tâche launchd de sleepwatcher => sudo ln -sfv /usr/local/Cellar/sleepwatcher/2.2/de.bernhard-baehr.sleepwatcher-20compatibility.plist /Library/LaunchAgents/
  7. Charger la tâche launchd => sudo launchctl load /Library/LaunchAgents/de.bernhard-baehr.sleepwatcher-20compatibility.plist

J'espère que cela aidera tout le monde :)

0 votes

Sleepwatcher ne fonctionne pas pour moi sur calalina avec un disque SSD interne. Je suppose que le SSD est si rapide que l'ordinateur dort avant que le script puisse s'exécuter.

0 votes

Ça ne semble pas fonctionner sur moi. Je suis sur Catalina et j'exécute simplement /usr/local/sbin/sleepwatcher --verbose --sleep ~/.sleep raccroche.

1 votes

@user3056783 Je pense qu'en fait cela fonctionne comme il se doit si vous l'exécutez en terminal. C'est pourquoi il doit être exécuté comme un processus démon via LaunchAgents comme je l'ai mentionné dans les étapes suivantes.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X