Possible d'exécuter des scripts en mode veille et réveil?

48

MacBook Pro 2010 sous OS X Lion.

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

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 sur mon iMac. Je ferme rarement mon MBP car fermer le couvercle est beaucoup plus rapide et facile, mais cela signifie que je dois me rappeler de démonter mes volumes Truecrypt et de les laisser se synchroniser avant la fermeture de mon MBP. Il est assez simple de monter / démonter des scripts, mais j'aimerais aller plus loin et faire en sorte que ces scripts s'exécutent automatiquement.

sh-beta
la source

Réponses:

17

Il semble que lorsque le système d'exploitation est disponible, les fonctions veille / réveil ne peuvent pas déclencher de scripts , mais des solutions tierces ont été développées.

Je n'ai aucune expérience personnelle avec ces programmes ou leurs fournisseurs.

Daniel
la source
2
Scenario semble faire ce que je cherche. Merci!
sh-beta
Scenario a déclenché l'applescript avec un script bash et voila.
Redolent
Pour terminer une application, il suffit de taper ceci dans une nouvelle fenêtre AppleScrip et de l’enregistrer dans le dossier SleepScripts: indiquez à l’application "CodeBox" quit end end
brainray
24

SleepWatcher peut être utile.

De la description: Il peut être utilisé pour exécuter une commande Unix lorsque le Mac ou l’affichage du Mac passe en mode veille ou s’active, après un laps de temps donné, sans interaction de l’utilisateur ou lorsque l’utilisateur reprend l’activité après une pause ou lorsque la fourniture d'un ordinateur portable Mac est attachée ou détachée. Il peut également envoyer le Mac en mode veille ou récupérer le temps écoulé depuis la dernière activité de l'utilisateur.

Cela fonctionne bien pour moi sur 10.6.8. Différentes versions sont disponibles pour prendre en charge les versions 10.1 (!) À 10.7

DaveEmme
la source
Voici quelques astuces Mac OSX utilisant SleepWatcher.
studgeek
4
Vous pouvez installer SleepWatcher de Homebrew , par exemple brew install sleepwatcher. Et voir ce post , c'est très utile. L'utilitaire SleepWatcher prend également en charge OS X El Capitan (10.11).
Rockallite
11

Ceci est ma propre application, donc considérez cela, mais ControlPlane a la capacité de faire des actions basées sur Sleep / Wake. Vous le trouverez à l' adresse http://www.controlplaneapp.com/ .

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

Dustin
la source
1
Utilité très cool, c'est exagéré pour cela, mais si vous avez besoin de déclencher plus que de réveiller / dormir, alors ça sonne plutôt bien. J'aime aussi le support de Growl pour que vous sachiez ce qu'il fait. Et c'est gratuit :).
studgeek
2
Devrait être la réponse acceptée parce que c'est gratuit
Kevin Parker
cela peut-il être utilisé pour monter et démonter des disques avec veille et réveil? Avons-nous besoin d'écrire des scripts d'automation?
bicepjai
1
Des années plus tard, controlplane n'est plus entretenu en raison de l'accumulation d'incompatibilités que Dustin a publiées sur son blog et qu'il n'avait pas le temps de corriger. Dommage, cela a du sens quand même.
lahwran
6

J'ai développé le démon de lancement simple suivant pour fournir un déclencheur de «réactivation» 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 pouvez changer cela pour écrire n'importe quoi. Vous devrez peut-être augmenter «ExitTimeOut» pour certains scripts. Mon démon de lancement réside dans /Library/LaunchDaemons/wake-alert.plist

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

Si vous utilisez l'option 'Changement rapide d'utilisateur' en veille, vous constaterez que les scripts nécessitant un utilisateur connecté essaieront de s'exécuter trop tôt et échoueront à moins que vous ne modifiiez le démon de lancement - peut-être grep 'Succeeded' dans 'secure.log'.

Neville Hillyer
la source
1
/Library/Logs/DirectoryService/DirectoryService.server.logn'existe pas dans High Sierra (10.13).
Nowaker
Il existe probablement d'autres journaux pouvant être utilisés.
Neville Hillyer
2

EventScripts est un autre programme que vous pourriez découvrir et que vous pourriez être tenté d'essayer . Bien que ce soit un programme très impressionnant, que je recommanderais en général, après l'avoir testé à cette fin, il ne semble PAS réellement être en mesure de déclencher les scripts assez rapidement pour qu'ils puissent s'exécuter avant que votre Mac ne se mette en veille. ne pas courir avant que le Mac se soit réveillé, ce qui (évidemment) va à l'encontre du but recherché.

J'espère vous épargner, à vous et à quiconque lisant ceci, les heures de tests qu'il m'a fallu pour arriver à cette conclusion. Je suis désolé de devoir dire que cela a échoué, cependant, car à bien des égards, il s'agit d'un programme vraiment bien conçu, assez puissant et flexible. C'est aussi très bon marché (3 $). Les performances de bas niveau ne semblent tout simplement pas être là, cependant, pour exécuter un script avant de dormir.

D'autre part, dans mes tests (jusqu'à présent), somnambule est apparu assez fiable et rapide. C'est aussi gratuit, ce qui est génial. Je vais continuer à tester et si je trouve que cela ne fonctionne pas parfois, je mettrai à jour ma réponse et continuerai à tester d'autres options.

MISE À JOUR Je n'ai pas trouvé somnambule toujours fiable depuis la rédaction de cette réponse, même si au début il semblait fonctionner. Dans mon cas, je n'ai pas besoin d'exécuter des scripts arbitraires, mais simplement d'éjecter des lecteurs externes. J'ai trouvé une petite application bon marché qui fait très bien jusqu'à présent: Jettison . C’est très vite devenu l’une des rares installations sans lesquelles je ne peux pas vivre. Si vos besoins sont les mêmes que les miens, je pense que vous trouverez que cela vaut bien les quelques dollars qu’ils facturent.

iconoclaste
la source
1

WakeWatcher est une simple application de fond sans visage pour OS X que j'ai créée pour résoudre ce problème. Il fonctionne ~/.onwakechaque fois que le réveil est détecté. Vous pouvez ensuite mettre les commandes pour monter / remonter vos disques dans ce script.

WakeWatcher peut être utilisé comme élément de connexion. Ce n'est pas très sophistiqué, mais c'est gratuit et simple.

L'exécution de scripts en veille serait un ajout simple, mais je suis préoccupé par le temps qu'il faut pour que les scripts se terminent avant que le système ne dorme réellement. Si vous en avez vraiment besoin, ouvrez un problème contre le projet github et je l'ajouterai.

Eric
la source