È possibile eseguire script in modalità sleep e wake?


48

MacBook Pro 2010 con OS X Lion.

È possibile eseguire script su eventi di sospensione e riattivazione?

La mia applicazione specifica è che ho volumi TrueCrypt sincronizzati con Dropbox che utilizzo regolarmente sia sul mio MacBook che su iMac. Raramente chiudo il mio MBP poiché chiudere il coperchio è molto più veloce e più semplice, ma questo significa che devo ricordare di smontare i volumi di Truecrypt e lasciarli sincronizzare prima di chiudere il mio MBP. È abbastanza banale montarli / smontarli, ma mi piacerebbe fare un passo avanti e far eseguire automaticamente questi script.

Risposte:


17

Sembra che durante la spedizione del sistema operativo, sleep / wake non possa attivare gli script , ma sono state sviluppate soluzioni di terze parti.

Non ho esperienza personale con questi programmi o i loro fornitori.


2
Lo scenario sembra fare quello che sto cercando. Grazie!
sh-beta,

Ho fatto sparare a Scenario lo script di mele che spara una sceneggiatura e voilá.
redolent il

Per terminare un'applicazione basta digitare questo in una nuova finestra AppleScrip e salvarlo nella cartella SleepScripts: dire all'applicazione "CodeBox" uscire e dire
brainray

24

SleepWatcher potrebbe essere utile.

Dalla descrizione: può essere utilizzato per eseguire un comando Unix quando il Mac o il display del Mac passano in modalità sospensione o si sveglia, dopo un determinato periodo di tempo senza interazione dell'utente o quando l'utente riprende l'attività dopo un'interruzione o quando l'alimentazione la fornitura di un notebook Mac è collegata o scollegata. Può anche inviare il Mac in modalità sospensione o recuperare il tempo trascorso dall'ultima attività dell'utente.

Funziona benissimo per me il 10.6.8. Sono disponibili varie versioni per supportare da 10.1 (!) A 10.7


Ecco alcuni suggerimenti per Mac OSX che utilizzano SleepWatcher.
Studgeek

4
È possibile installare SleepWatcher da Homebrew , ad es brew install sleepwatcher. E vedi questo post , è molto utile. L'utilità SleepWatcher supporta anche OS X El Capitan (10.11).
Rockallite,

11

Questa è la mia app, quindi considera questo, ma ControlPlane ha la capacità di fare azioni basate su Sleep / Wake. Lo troverai su http://www.controlplaneapp.com/ .

ControlPlane è un fork di MarcoPolo ed è stato aggiornato per funzionare su Snow Leopard e Lion.


1
Utilità dal suono molto interessante, è eccessiva solo per questo, ma se hai bisogno di innescare più di sveglia / sonno, allora sembra piuttosto bello. Mi piace anche il supporto di Growl, quindi sai cosa sta facendo. Ed è gratuito :).
Studgeek

2
Dovrebbe essere la risposta accettata perché è gratuita
Kevin Parker,

questo può essere usato per montare e smontare le unità con sleep e wake? dobbiamo scrivere script di automator?
Bicepjai,

1
anni dopo, controlplane non è più mantenuto a causa dell'accumulo di incompatibilità che Dustin ha pubblicato sul suo blog e che non ha avuto il tempo di risolvere. Peccato, ha senso però.
Lahwran,

6

Ho sviluppato il seguente semplice Daemon di lancio per fornire un trigger "wake" per gli script su 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>

Puoi sostituire "say w" con il tuo codice. Scrivo una data in z ma potresti cambiarla per scrivere qualsiasi cosa. Potrebbe essere necessario aumentare "ExitTimeOut" per alcuni script. My Launch Daemon risiede su /Library/LaunchDaemons/wake-alert.plist

Il Daemon di avvio controlla DirectoryService.server.log e scrive su un file temporaneo a condizione che il file sia vuoto. Il file viene cancellato da una voce di registro "Sospensione" e da Spegni.

Se si utilizza "Cambio rapido utente" per mettere in pausa, si scoprirà che gli script che richiedono un utente connesso tenteranno di essere eseguiti troppo presto e falliranno a meno che non si modifichi il Daemon di avvio - forse grep "Riuscito" in "secure.log".


1
/Library/Logs/DirectoryService/DirectoryService.server.lognon esiste in High Sierra (10.13).
Nowaker, il

Probabilmente ci sono altri registri che possono essere utilizzati.
Neville Hillyer,

2

Un altro programma che potresti scoprire ed essere tentato di provare è EventScripts . Sebbene sia un programma davvero impressionante che consiglierei in generale, dopo averlo testato a questo scopo NON sembra in realtà essere in grado di attivare gli script abbastanza velocemente da eseguirli prima che il Mac vada in sospensione, e invece lo script sleep non funziona fino a dopo che il Mac si è svegliato, il che (ovviamente) sconfigge lo scopo.

Spero di salvare te e chiunque altro leggendo questo le ore di test che mi ci sono voluti per giungere a questa conclusione. Mi dispiace dover dire che è fallito, tuttavia, perché per molti aspetti è un programma davvero ben progettato, abbastanza potente e flessibile. È anche abbastanza economico ($ 3). Le prestazioni di basso livello non sembrano essere lì, tuttavia, per l'esecuzione di una sceneggiatura prima di dormire.

D'altra parte, nei miei test (finora) il sleepwatcher è sembrato essere abbastanza affidabile e veloce. È anche gratuito, il che è fantastico. Continuerò i test e se trovo che non funzioni a volte aggiornerò la mia risposta e continuerò a testare altre opzioni.

UPDATE Ho Non trovato sleepwatcher essere sempre affidabili poiché la scrittura in origine questa risposta, anche se, inizialmente sembrava funzionare. Nel mio caso non ho bisogno di eseguire script arbitrari, ma invece di espellere unità esterne. Ho trovato un'app piccola ed economica che lo fa molto bene finora: Jettison . Questo è diventato molto rapidamente una delle poche utility senza le quali non posso vivere. Se i tuoi bisogni sono uguali ai miei, penso che ne valga la pena per i pochi soldi che fanno pagare.


1

WakeWatcher è una semplice applicazione in background senza volto di OS X che ho creato per risolvere questo problema. Funziona ~/.onwakeogni volta che viene rilevata la veglia. È quindi possibile inserire i comandi per montare / rimontare le unità in quello script.

WakeWatcher è adatto per l'uso come elemento di accesso. Non è molto sofisticato, ma è gratuito e semplice.

Eseguire script in modalità sleep sarebbe una semplice aggiunta, ma sono preoccupato per il tempo a disposizione per il completamento degli script prima che il sistema effettivamente dorma. Se ne hai davvero bisogno, apri un problema con il progetto github e lo aggiungerò.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.