MacBook Pro 2010 con OS X Lion.
¿Es posible ejecutar scripts en eventos de suspensión y activación?
Mi aplicación específica es que tengo volúmenes Truecrypt sincronizados con Dropbox que uso regularmente tanto en mi MacBook como en mi iMac. Rara vez apago mi MBP ya que cerrar la tapa es mucho más rápido y fácil, pero esto significa que debo acordarme de desmontar mis volúmenes de Truecrypt y dejar que se sincronicen antes de cerrar mi MBP. Es bastante trivial montar/desmontar scripts de ellos, pero me gustaría ir un paso más allá y hacer que estos scripts se ejecuten automáticamente.
Parece que a medida que se envía el sistema operativo, dormir/activar no puede activar scripts , pero se han desarrollado soluciones de terceros.
No tengo experiencia personal con estos programas o sus proveedores.
SleepWatcher puede ser útil.
De la descripción: se puede usar para ejecutar un comando de Unix cuando la Mac o la pantalla de la Mac pasan al modo de suspensión o se activan, después de un tiempo determinado sin interacción del usuario o cuando el usuario reanuda la actividad después de un descanso o cuando la energía El suministro de una computadora portátil Mac está conectado o desconectado. También puede enviar la Mac al modo de suspensión o recuperar el tiempo transcurrido desde la última actividad del usuario.
Está funcionando bien para mí en 10.6.8. Varias versiones están disponibles para soportar 10.1(!) a 10.7
Esta es mi propia aplicación, así que considéralo, pero ControlPlane tiene la capacidad de realizar acciones basadas en Sleep/Wake. Lo encontrará en http://www.controlplaneapp.com/ .
ControlPlane es una bifurcación de MarcoPolo y se actualizó para ejecutarse en Snow Leopard y Lion.
Desarrollé el siguiente Launch Daemon simple para proporcionar un disparador de 'activación' para scripts en 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>
Puede reemplazar 'say w' con su código. Escribo una fecha en z, pero puedes cambiar esto para escribir cualquier cosa. Es posible que deba aumentar 'ExitTimeOut' para algunos scripts. Mi Launch Daemon reside en /Library/LaunchDaemons/wake-alert.plist
Launch Daemon observa DirectoryService.server.log y escribe en un archivo temporal siempre que el archivo esté vacío. El archivo se borra con una entrada de registro de 'Suspender' y con Apagar.
Si usa 'cambio rápido de usuario' para dormir, encontrará que los scripts que requieren que un usuario haya iniciado sesión intentarán ejecutarse demasiado pronto y fallarán a menos que modifique el Launch Daemon, tal vez grep 'Succeeded' en 'secure.log'.
/Library/Logs/DirectoryService/DirectoryService.server.log
no existe en High Sierra (10.13).Estaba interesado en esa pregunta anteriormente pero no encontré ninguna guía paso a paso sobre cómo lograrlo. La solución se basa en una herramienta de código abierto llamada sleepwatcher y apple launchd Fue inspirado por este artículo
¡Así que Disfrutá! :
brew install sleepwatcher
~/.wakeup
y ~/.sleep
scripts y pon algo de lógica de shell en elloschmod 700 ~/.sleep && chmod 700 ~/.wakeup
/usr/local/sbin/sleepwatcher --verbose --sleep ~/.sleep
- vaya a dormir con la terminal en ejecución/Library/LaunchAgents
sudo ln -sfv /usr/local/Cellar/sleepwatcher/2.2/de.bernhard-baehr.sleepwatcher-20compatibility.plist /Library/LaunchAgents/
sudo launchctl load /Library/LaunchAgents/de.bernhard-baehr.sleepwatcher-20compatibility.plist
Espero que ayude a alguien :)
/usr/local/sbin/sleepwatcher --verbose --sleep ~/.sleep
cuelga.brew install sleepwatcher
para conseguirlo. ¡Gracias!brew services start sleepwatcher; sudo cp /usr/local/Cellar/sleepwatcher/2.2.1/etc/sleepwatcher/rc.* /etc
y luego agregar el ~/.sleep
archivo.Uso Keyboard Maestro ( https://www.keyboardmaestro.com/ ), sin afiliación. Puede desencadenar una acción cuando el sistema entra en modo de suspensión o se activa entre toneladas de otras funciones para facilitar el trabajo con Mac.
Usé los eventos de reposo/activación para activar una URL que se conecta a un dispositivo IOT que diseñé para controlar un ventilador externo que puse encima de la Mac Mini (la Mac está al revés).
Otro programa que puede descubrir y tener la tentación de probar es EventScripts . Aunque es un programa muy impresionante que recomendaría en general, después de probarlo para este propósito, en realidad NO parece ser capaz de activar scripts lo suficientemente rápido como para que se ejecuten antes de que su Mac se duerma, y en su lugar, el script de suspensión lo hará. no se ejecute hasta después de que la Mac se haya despertado, lo que (obviamente) anula el propósito.
Espero ahorrarle a usted y a cualquier otra persona que lea esto las horas de prueba que me tomó llegar a esta conclusión. Lamento tener que decir que falló, sin embargo, porque en muchos aspectos es un programa muy bien diseñado y bastante potente y flexible. También es bastante económico ($3). Sin embargo, el rendimiento de bajo nivel simplemente no parece estar allí para ejecutar un script antes de dormir.
Por otro lado, en mis pruebas (hasta ahora) , Sleepwatcher parece ser bastante confiable y rápido. También es gratis, lo cual es increíble. Seguiré probando y, si encuentro que no funciona, a veces actualizaré mi respuesta y seguiré probando otras opciones.
ACTUALIZAR No heencontrado que sleepwatcher sea consistentemente confiable desde que originalmente escribí esta respuesta, aunque inicialmente parecía estar funcionando. En mi caso, no necesito ejecutar scripts arbitrarios, sino simplemente expulsar unidades externas. He encontrado una aplicación pequeña y económica que hace esto muy bien hasta ahora: Jettison . Esto se ha convertido rápidamente en una de las pocas utilidades sin las que no puedo vivir. Si sus necesidades son las mismas que las mías, creo que encontrará que vale la pena los pocos dólares que cobran.
WakeWatcher es una sencilla aplicación en segundo plano sin rostro para OS X que creé para abordar este problema. Se ejecuta ~/.onwake
cada vez que se detecta una estela. Luego puede poner los comandos para montar/volver a montar sus unidades en ese script.
WakeWatcher es adecuado para su uso como elemento de inicio de sesión. No es muy sofisticado, pero es gratuito y sencillo.
Ejecutar secuencias de comandos en suspensión sería una simple adición, pero me preocupa el tiempo disponible para que las secuencias de comandos se completen antes de que el sistema entre en suspensión. Si realmente lo necesita, abra un problema en el proyecto github y lo agregaré.
sh-beta
fragante
rayo de cerebro