He estado buscando ejecutar algunos comandos de limpieza cuando un usuario cierra la sesión, sin embargo, la antigua función de enlace de cierre de sesión, aunque todavía funciona, ha quedado en desuso por algún tiempo, por lo que es posible que no esté con nosotros por mucho tiempo.
Desafortunadamente, aunque launchdproporciona una alternativa conveniente a los enlaces de inicio de sesión, no existe un reemplazo tan obvio para los enlaces de cierre de sesión.
Ya he experimentado con la creación de un script de shell que se inicia al iniciar sesión, y simplemente duerme hasta que se recibe una señal de apagado, sin embargo, esto no parece funcionar (el script nunca recibe la señal durante el funcionamiento normal).
De lo contrario, no estoy seguro de cuál sería la mejor manera de ejecutar un comando rápido al cerrar sesión. Sé que hay algunas utilidades de terceros que pueden hacerlo, pero ¿hay alguna forma "correcta" de hacerlo?

line 8: syntax error near unexpected token ;'(con una tumba antes del punto y coma)Puede usar iHook para ejecutar enlaces de inicio de sesión / cierre de sesión, que he encontrado que aún funcionan para los enlaces de inicio de sesión y cierre de sesión no interactivos escritos en Bash y Python en Yosemite.
http://rsug.itd.umich.edu/software/ihook/
fuente
Si a otros que llegan aquí desde los motores de búsqueda no les importa usar un enlace de cierre de sesión, ejecute, por ejemplo:
sudo defaults write com.apple.loginwindow LogoutHook '~/.logouthook';echo $'#!/usr/bin/env bash\n\nsay a'>~/.logouthook;chmod +x ~/.logouthookLuego
~/.logouthookse ejecuta la próxima vez que cierre sesión.El valor de la
LogoutHookclave tiene que ser una ruta a un ejecutable y no un comando de shell. Eldefaultscomando se modifica/var/root/Library/Preferences/com.apple.loginwindow.plist.fuente
launchd, es una pena que no tengaRunBeforeUnloaduna opción similar .Tampoco puedo hacer que el elemento de inicio de sesión de launchd funcione en 10.10.1, pero la clave LogoutHook en "com.apple.loginwindow.plist" de la raíz funciona bien. ¿Hay otros ejemplos para el método launchd?
De todos modos, escribí un AppleScript para eliminar el volumen del sistema al cerrar sesión para que no se escuche el timbre de inicio en el próximo inicio. Lo que no he resuelto son los detalles para administrar múltiples comandos de cierre de sesión basados en una sola tecla LogoutHook, o si es posible almacenar varias claves LogoutHook, por lo que todavía estoy interesado en el método Launchd, que podría administrarse con Lingon, o incluso Lingon 3, que tiene un alcance mucho más limitado que el original (presumiblemente para existir en la tienda de aplicaciones).
establezca current_Vol en (hacer el script de shell "osascript -e \" volumen de salida de (obtener configuración de volumen) \ "") si el botón devuelto de (muestra el cuadro de diálogo "¿Desea silenciar el timbre de inicio, restaurarlo o cancelar?", los botones {"Silenciar", "Restaurar", "Cancelar"} botón predeterminado 1) son "silenciar" y luego hacer script de shell "mkdir -p / usr / local / logouttask; echo '#! / bin / bash # script de cierre de sesión osascript -e \ "set volume 0 \" '> / usr / local / logouttask / logoutscript; sudo por defecto escribe com.apple.loginwindow LogoutHook / usr / local / logouttask / logoutscript; chmod + x / usr / local / logouttask / logoutscript "con privilegios de administrador más tratar hacer script de shell "valores predeterminados de sudo escribir com.apple.loginwindow LogoutHook ''; rm / usr / local / logouttask / logoutscript" con privilegios de administrador diálogo de visualización "Se escuchará el timbre de inicio si la configuración del volumen es mayor que 0 al apagar o reiniciar". botones {"OK"} botón predeterminado 1 en caso de error el número de mensaje de error el número de error si error_number es 1, entonces display dialog "El script que establece el volumen del sistema en cero al cerrar sesión no existe. Se escuchará la campana de inicio si la configuración del volumen es mayor que 0 al apagar o reiniciar". botones {"OK"} botón predeterminado 1 más muestra el cuadro de diálogo "Error:" y el número_error & "." y los botones error_message {"Aceptar"} botón predeterminado 1 terminara si intento final terminara sifuente
sh), por lo que debe ser un archivo ejecutable, lo notaré en mi respuesta.