¿Puedo escribir un script para realizar una acción justo antes de que la computadora se vaya a dormir?

Creo que mi computadora aleatoriamente no está sincronizando el correo electrónico correctamente con Apple Mail, pero solo es un problema cuando se despierta del modo de suspensión.

Ese tema no es ni de aquí ni de allá. Lo que me gustaría hacer es escribir un script/algo que cierre Apple Mail si detecta que la computadora se va a dormir.

Idealmente, habría un proceso similar para abrir Apple Mail al despertar del sueño, pero eso es un problema menor.

Traté de buscar una biblioteca de eventos del sistema de algún tipo, pero todo lo que puedo encontrar es fsevents (que no creo que tenga nada sobre dormir).

¡Gracias!

Respuestas (1)

Sugiero usar un demonio como SleepWatcher . Una vez que haya instalado SleepWatcher (consulte el LÉAME incluido), puede ejecutar comandos como el siguiente.

/usr/local/sbin/sleepwatcher -s /path/to/sleepscript -w /path/to/wakeupscript

La secuencia de comandos

#!/bin/sh
osascript -e 'quit app "Mail"'

Saldrá de Mail y el script

#!/bin/sh
open -a /Applications/Mail.app $1

lo abrirá. Puede guardarlos como .sharchivos y hacer referencia a ellos desde sleepwatcher, pero asegúrese de ejecutarlos chmod +x filename.shantes de intentar ejecutarlos. De lo contrario, OS X no los reconocerá como ejecutables.

Ahora, tiene dos opciones para cargar sleepwatcher: puede ejecutarlo manualmente, puede configurar un LaunchAgent para hacerlo. Me gusta este último, así que cree un archivo en /Library/LaunchAgents/named com.custom.mailfix.plist(el nombre no es importante, pero le recomiendo que mantenga el formato, el "com" y el "plist"). El contenido del archivo debe parecerse al siguiente.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.custom.mailfix.plist</string>
<key>ProgramArguments</key>
<array>
    <string>/usr/local/sbin/sleepwatcher</string>
    <string></string>
    <string>-s /path/to/sleepscript</string>
    <string>-w /path/to/wakescript</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
</dict>
</plist>

Como antes, reemplace las rutas de los scripts con rutas a sus scripts de shell. Para decirle a OS X que inicie este agente al inicio, ejecute

sudo launchctl load -w /Library/LaunchAgents/com.custom.mailfix.plist
¿y entonces que? podrías ser un poco más preciso, no solo un enlace.
He editado mi respuesta para ser más específico. ¡Lo lamento!