Czy można uruchamiać skrypty w trybie uśpienia i wybudzenia?

48

MacBook Pro 2010 z systemem OS X Lion.

Czy można uruchamiać skrypty podczas zdarzeń uśpienia i przebudzenia?

Moja konkretna aplikacja polega na tym, że mam zsynchronizowane z Dropbox woluminy Truecrypt, których regularnie używam zarówno na MacBooku, jak i iMacu. Rzadko zamykam mój MBP, ponieważ zamykanie pokrywy jest znacznie szybsze i łatwiejsze, ale oznacza to, że muszę pamiętać, aby zdemontować woluminy Truecrypt i pozwolić im zsynchronizować się ponownie przed zamknięciem mojego MBP. Jest to dość trywialne do montowania / odinstalowywania skryptów, ale chciałbym pójść o krok dalej i automatycznie uruchamiać te skrypty.

sh-beta
źródło

Odpowiedzi:

17

Wygląda na to, że wraz z dostarczaniem systemu operacyjnego tryb uśpienia / budzenia nie może wyzwalać skryptów , ale opracowano rozwiązania innych firm.

Nie mam osobistego doświadczenia z tymi programami lub ich dostawcami.

Daniel
źródło
2
Scenariusz wydaje się robić to, czego szukam. Dzięki!
sh-beta,
Miałem Scenariusz odpalił jabłko, który odpala skrypt bash i voilá.
redolent
Aby zakończyć aplikację, po prostu wpisz to w nowym oknie AppleScrip i zapisz w folderze SleepScripts: powiedz aplikacji „CodeBox”, wyjdź i powiedz
brainray
24

SleepWatcher może się przydać .

Z opisu: Można go użyć do wykonania komendy Unix, gdy komputer Mac lub wyświetlacz komputera Mac przechodzi w tryb uśpienia lub budzi się, po określonym czasie bez interakcji użytkownika lub gdy użytkownik wznawia aktywność po przerwie lub po włączeniu zasilania dostawa notebooka Mac jest podłączona lub odłączona. Może również wysłać komputer Mac do trybu uśpienia lub odzyskać czas od ostatniej aktywności użytkownika.

Działa dla mnie dobrze w 10.6.8. Dostępne są różne wersje obsługujące 10.1 (!) Do 10.7

DaveEmme
źródło
Oto kilka wskazówek Mac OSX, które używają SleepWatcher.
studgeek
4
Możesz zainstalować SleepWatcher by Homebrew , np brew install sleepwatcher. I zobacz ten post , jest bardzo pomocny. Narzędzie SleepWatcher obsługuje również system OS X El Capitan (10.11).
Rockallite,
11

To moja własna aplikacja, więc zastanów się, ale ControlPlane ma możliwość wykonywania działań w oparciu o tryb uśpienia / budzenia. Znajdziesz go na stronie http://www.controlplaneapp.com/ .

ControlPlane jest rozwidleniem MarcoPolo i został zaktualizowany do działania na Snow Leopard i Lion.

Dustin
źródło
1
Bardzo fajnie brzmiące narzędzie, jego przesada w tym celu, ale jeśli musisz aktywować więcej niż przebudzenie / sen, to brzmi całkiem fajnie. Podoba mi się również wsparcie Growl, więc wiesz, co robi. I to za darmo :).
studgeek
2
Powinna być zaakceptowana odpowiedź, ponieważ jest bezpłatna
Kevin Parker
czy można tego używać do montowania i odmontowywania dysków w trybie uśpienia i wybudzenia czy musimy pisać skrypty automatyzujące?
bicepjai
1
lata później samolot kontrolny nie jest już utrzymywany z powodu narastających niezgodności, które Dustin opublikował na swoim blogu, których nie miał czasu naprawić. Szkoda, ma to jednak sens.
lahwran
6

Opracowałem następujący prosty demon uruchamiania, aby zapewnić wyzwalacz „budzenia” dla skryptów w systemie 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>

Możesz zastąpić „say w” swoim kodem. Piszę datę do z, ale możesz to zmienić, aby napisać cokolwiek. W przypadku niektórych skryptów może być konieczne zwiększenie „ExitTimeOut”. My Launch Daemon znajduje się w /Library/LaunchDaemons/wake-alert.plist

Uruchom demona obserwuje DirectoryService.server.log i zapisuje do pliku tymczasowego, pod warunkiem że plik jest pusty. Plik zostanie wyczyszczony przez wpis w dzienniku „Uśpij” i przez Zamknij.

Jeśli użyjesz opcji „szybkiego przełączania użytkownika” w tryb uśpienia, zauważysz, że skrypty wymagające zalogowanego użytkownika będą próbowały uruchomić się zbyt wcześnie i nie będą działać, chyba że zmodyfikujesz demona uruchamiającego - być może grep „Succeeded” w „secure.log”.

Neville Hillyer
źródło
1
/Library/Logs/DirectoryService/DirectoryService.server.lognie istnieje w High Sierra (10.13).
Nowaker
Prawdopodobnie można użyć innych dzienników.
Neville Hillyer,
2

Innym programem, który możesz odkryć i pokusić się o wypróbowanie, jest EventScripts . Chociaż jest to bardzo imponujący program, który ogólnie polecam, po przetestowaniu go w tym celu NIE wydaje się, aby był w stanie wystarczająco szybko uruchamiać skrypty, aby mogły zostać uruchomione, zanim komputer Mac przejdzie w tryb uśpienia, a zamiast tego skrypt uśpienia nie uruchomi się, dopóki Mac się nie obudzi, co (oczywiście) pokona ten cel.

Mam nadzieję, że ocalę ciebie i wszystkich, którzy to przeczytają, godziny testów zajęło mi dojście do tego wniosku. Przykro mi, ale muszę powiedzieć, że zawiodło, ponieważ pod wieloma względami jest to naprawdę ładnie zaprojektowany, dość mocny i elastyczny program. Jest również dość niedrogi (3 USD). Wydaje się jednak, że wydajność niskiego poziomu nie występuje w przypadku uruchamiania skryptu przed snem.

Z drugiej strony, w moich testach (jak dotąd) sleepwatcher okazał się dość niezawodny i szybki. Jest również bezpłatny, co jest niesamowite. Będę nadal testować, a jeśli okaże się, że to nie działa, czasami aktualizuję swoją odpowiedź i testuję inne opcje.

UPDATE ja nie znaleziono sleepwatcher być spójne i wiarygodne, ponieważ pierwotnie pisząc tę odpowiedź, choć początkowo wydawał się być pracy. W moim przypadku nie muszę uruchamiać dowolnych skryptów, lecz po prostu wysunąć dyski zewnętrzne. Znalazłem małą i niedrogą aplikację, która do tej pory robi to bardzo dobrze: Jettison . To bardzo szybko stało się jednym z niewielu narzędzi, bez których nie mogę żyć. Jeśli twoje potrzeby są takie same, jak moje, myślę, że przekonasz się, że warto zapłacić kilka dolców.

ikonoklasta
źródło
1

WakeWatcher jest prostą aplikacją bez tła OS X, którą stworzyłem, aby rozwiązać ten problem. Działa przy ~/.onwakekażdym wykryciu budzenia. Następnie możesz umieścić polecenia do zamontowania / ponownego zamontowania dysków w tym skrypcie.

WakeWatcher nadaje się do użycia jako element logowania. Nie jest bardzo wyrafinowany, ale jest darmowy i prosty.

Wykonywanie skryptów w trybie uśpienia byłoby prostym dodatkiem, ale martwię się o czas, jaki muszą upłynąć na ukończenie skryptów, zanim system faktycznie przejdzie w stan uśpienia. Jeśli naprawdę tego potrzebujesz, otwórz problem dotyczący projektu github, a ja go dodam.

Eric
źródło