Todos sabemos que Mac OS X tiene la muy útil funcionalidad Elementos de inicio de sesión que le permite, entre otras cosas, configurar aplicaciones/secuencias de comandos para que se ejecuten cuando inicie sesión.
Estoy buscando una manera de configurar una lista de scripts/aplicaciones que se ejecutan cuando me desconecto . Una lista de "Elementos de cierre de sesión", por así decirlo.
Básicamente, quiero escribir algunos pequeños scripts de limpieza para mí que se ejecutarán automáticamente cuando cierre la sesión o cierre la sesión.
Por lo tanto, estoy buscando una forma de que un script (o, idealmente, una lista de ellos) se active automáticamente cuando cierre la sesión. El cierre de sesión esperaría a que finalicen los scripts (al igual que el cierre de sesión espera que haga clic en Guardar si una aplicación lo solicita).
¿Hay alguna manera de activar automáticamente (un) script(s) cuando me desconecto de Mac OS X?
Los ganchos de cierre de sesión quedaron obsoletos en 10.4 , pero aún funcionan a partir de 10.9.
sudo defaults write com.apple.loginwindow LogoutHook ~/.logouthook
echo $'#!/bin/bash\nsay a' > ~/.logouthook
chmod +x ~/.logouthook
El valor de la clave LogoutHook solo puede ser una ruta a un ejecutable y no un comando de shell. El gancho de cierre de sesión se ejecuta como root.
El comando predeterminado modifica /var/root/Library/Preferences/com.apple.loginwindow.plist. Agregar una clave LogoutHook a /Library/Preferences/com.apple.loginwindow.plist no funciona.
Si un enlace de cierre de sesión tarda lo suficiente en ejecutarse, se muestra una pantalla gris hasta que finaliza el enlace de cierre de sesión. No parece haber ningún límite de tiempo después del cual los ganchos de cierre de sesión se vean obligados a terminar.
No he descubierto ninguna forma de ejecutar programas al cerrar la sesión de manera confiable con launchd. Cuando intenté atrapar señales como EXIT, el código en la trampa solo se ejecutó cuando cerré sesión en la ventana de inicio de sesión y no cuando apagué o reinicié.
<?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>test</string>
<key>ProgramArguments</key>
<array>
<string>bash</string>
<string>-c</string>
<string>trap 'echo a>/Users/username/Desktop/a;say a' EXIT;while :;do sleep 10;done</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
sh
(crea ese archivo .txt). Guardé el script como /etc/rc.shutdown.local y lo agregué defaults
como dijiste. Ninguno de los dos archivos ya estaba allí. ¿Estoy haciendo algo mal? ¡Gracias!En realidad, hay una forma no obsoleta de hacerlo:
do shell script "PUT YOUR START SCRIPT PATH HERE"
on quit
do shell script "PUT YOUR STOP SCRIPT PATH HERE"
continue quit
end quit
Para ocultarlo del Dock:
<key>NSUIElement</key>
<string>1</string>
Script Timer es una buena opción para esto. Puede ejecutarse al cerrar sesión, iniciar sesión y mucho más. Iría con esto para una solución simple y fácil de usar. Tiene una GUI simple:
Hay dos cosas que debe tener en cuenta sobre Script Timer. Uno, no es gratis . Cuesta $12, pero personalmente creo que vale la pena. Dos, no es totalmente compatible con Lion, pero han prometido una actualización gratuita tan pronto como lo hagan compatible.
También puede crear una aplicación para Mac a partir de su secuencia de comandos usando algo como Platypus y luego agregarlo a Elementos de inicio de sesión como cualquier otra aplicación.
Power Manager puede ejecutar un script cuando un usuario cierra la sesión. Este es un producto comercial y es compatible con la última versión de macOS.
Las versiones anteriores requerían el uso del editor de eventos , pero ahora se incluye una tarea del asistente de programación para ejecutar secuencias de comandos al iniciar y cerrar sesión.
Escribí Power Manager, así que no dude en hacer preguntas técnicas sobre su implementación. En el caso de eventos activados por cierre de sesión, Power Manager no sondea los cambios en el estado del usuario, sino que macOS le notifica los cambios del usuario. Este enfoque es más eficiente que tener un script en bucle/sondeo.
usuario588