¿Cómo puedo ejecutar automáticamente un AppleScript al apagar o cerrar sesión?

Estoy más acostumbrado a los controladores de eventos de estilo Javascript,

pero ¿hay algo similar en applescript que escuche eventos del sistema como cerrar sesión o apagar para ejecutar código?

¿O hay alguna manera de ejecutar un applescript al apagar o cerrar la sesión?

Sé sobre el temporizador de secuencias de comandos , pero preferiría tener algo gratis.

Todo lo que hace mi secuencia de comandos es silenciar el volumen para el próximo inicio.

Respuestas (2)

Los agentes de lanzamiento se pueden utilizar para esto. Vea este tutorial en MacScipter . Si no está familiarizado con el proceso, Lingon ofrece una interfaz simple para crear el archivo. Aquí hay un ejemplo para iniciar un script llamado ZuluDeltaNiner.scpt al iniciar sesión.

<?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>com.paul.applescript_Launchd</string>
   <key>ProgramArguments</key>
   <array>
       <string>osascript</string>
       <string>/ZuluDeltaNiner.scpt</string>
   </array>
   <key>QueueDirectories</key>
   <array/>
   <key>RunAtLoad</key>
   <true/>
   <key>StartOnMount</key>
   <false/>
   <key>WatchPaths</key>
   <array/>
</dict>
</plist>

Los ganchos de cierre de sesión quedaron obsoletos en 10.4 , pero aún funcionan en 10.8.

echo $'#!/usr/bin/osascript\n\nset volume with output muted' > ~/.logouthook
chmod +x ~/.logouthook
sudo defaults write com.apple.loginwindow LogoutHook ~/.logouthook

sudo defaults writemodifica archivos en /var/root/Library/Preferences/. El programa no se puede insertar como un argumento directamente.

Atrapar la señal de salida solo parece funcionar cuando se cierra la sesión y no cuando se apaga.