Ejecute el script al cerrar la session sin usar el gancho de cierre de session

He estado buscando ejecutar algunos commands de limpieza cuando un usuario cierra la session, sin embargo, la antigua function de cierre de session, aunque sigue funcionando, ha quedado obsoleta desde hace un time, por lo que es posible que no nos acompañe por mucho más time.

Desafortunadamente, aunque launchd proporciona una alternativa conveniente a los enganches de inicio de session, no existe un reemploop tan obvio para los ganchos de cierre de session.

  • ¿Cómo reclamar la partición de espacio libre en macOS High Sierra?
  • osx - Cómo sobrescribir el proxy habilitado automáticamente
  • Buscando una aplicación de seguimiento de time decente para Mac
  • Solo funciona la mitad de la pantalla, ¿puedo configurar para mostrar solo en esa región?
  • ¿Cómo puedo encontrar el tamaño de varias carpetas?
  • Formateo y reinstallation de macOS
  • Ya he experimentado con la creación de un script de shell que se inicia al iniciar session, y simplemente duerme hasta que se recibe una señal de muerte, 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 forma de ejecutar un command rápido al cerrar la session. Sé que hay algunos services de terceros que pueden hacerlo, pero ¿existe una forma "correcta" de hacerlo?

  • ¿Las actualizaciones del 'Progtwig de Semillas Beta OS X' borran su installation de sistema operativo existente?
  • ¿Cómo puedo ocultar todo (incluidos los icons del escritorio) cuando reanudo el modo de suspensión?
  • Aplicación que te permite personalizar qué teclas usar para las teclas de mouse
  • ¿Esta networking está bloqueando mi VPN?
  • Acceso a Internet después de renovar el certificate com.apple.servermgrd vencido
  • ¿Forma recomendada de hacer una copy de security de una Macbook antes de actualizar su sistema operativo?
  • 4 Solutions collect form web for “Ejecute el script al cerrar la session sin usar el gancho de cierre de session”

    Parece que Apple no está interesado en un reemploop de gancho de cierre de session, ya que cerraron mi problema preguntando sobre uno.

    Sin embargo, una de las mejoras en Yosemite es que launchd ahora envía correctamente señales a los scripts de shell. Lo que esto significa es que ahora puede hacer una tarea de cierre de session como esta:

    Aquí hay un ejemplo de logout.sh:

     #!/bin/sh onLogout() { echo 'Logging out' >> ~/Logs/logout.sh.log exit } trap 'onLogout' SIGINT SIGHUP SIGTERM while true; do sleep 86400 & wait $! done 

    Esto simplemente dormirá (de forma asíncrona, haciéndolo sincrónicamente sin el signo y no parece funcionar) hasta que reciba una de las señales atrapadas, en cuyo punto ejecutará la function onLogout .

    Todo lo que necesita hacer es RunAtLoad esa secuencia de commands utilizando un agente de RunAtLoad o lanzar el daemon y se ejecutará al cerrar la session o cerrarla, aunque es importante tener en count que las tareas solo tienen una cantidad limitada de time antes de que se eliminen. en su lugar, por lo que esto no se debe usar para ejecutar nada que tarde mucho time, o requiera una connection de networking que podría demorarse, etc.

    Por supuesto, esto no sirve para nadie en Mavericks o antes, pero bajo Yosemite esto ahora parece funcionar como se esperaba; así que en realidad lo estaba haciendo bien en primer lugar, el launchd simplemente no estaba enviando las señales correctamente 🙂

    NOTA: Para que esto funcione, parece que los scripts de shell deben ejecutarse directamente desde el inicio, es decir, no deben invocarse a través de sh . Entonces, si fue colocado en ~/Library/Scripts/foo.sh los arguments de su progtwig podrían verse así:

     <key>ProgramArguments</key> <array> <string>~/Library/Scripts/foo.sh</string> <string>bar</string> </array> <key>EnableGlobbing</key> <true/> 

    Puede usar iHook para ejecutar los enganches de inicio de session / cierre de session, que he encontrado que todavía funciona para los inicios de session no interactivos y los ganchos de cierre de session escritos en Bash y Python en Yosemite.

    http://rsug.itd.umich.edu/software/ihook/

    Si otros que llegan desde los motores de búsqueda no se preocupan por utilizar un gancho de cierre de session, ejecute, por ejemplo:

    sudo defaults write com.apple.loginwindow LogoutHook '~/.logouthook';echo $'#!/usr/bin/env bash\n\nsay a'>~/.logouthook;chmod +x ~/.logouthook

    Luego ~/.logouthook se ejecuta la próxima vez que ~/.logouthook la session.

    El valor de la key LogoutHook debe ser una ruta a un ejecutable y no un command de shell. El command defaults modifica /var/root/Library/Preferences/com.apple.loginwindow.plist .

    Tampoco puedo hacer que el elemento de cierre de session de launchd funcione en 10.10.1, pero la key LogoutHook en "com.apple.loginwindow.plist" de root funciona bien. ¿Hay algún otro ejemplo para el método de lanzamiento?

    De todos modos, escribí un AppleScript para matar el volumen del sistema al cerrar la session para que el timbre de inicio no se escuche el próximo inicio. Lo que no he resuelto son los detalles para administrar múltiples commands de cierre de session basados ​​en una sola tecla LogoutHook, o si es posible almacenar varias keys LogoutHook, por lo que todavía estoy interesado en el método Launchd, que se puede administrar con Lingon, o incluso Lingon 3, que tiene un scope mucho más limitado que el original (presumiblemente para existir en la tienda de aplicaciones).

     establezca current_Vol en (realice el script de shell "osascript -e \" volumen de salida de (obtenga la configuration de volumen) \ "")
     si se devuelve el button de (cuadro de dialog "¿Desea silenciar el timbre de inicio, restaurarlo o cancelar?" botones {"Silencio", "Restaurar", "Cancelar"} button pnetworkingeterminado 1) es "silencio", luego
         hacer el script de shell "mkdir -p / usr / local / logouttask; echo '#! / bin / bash
     # logout script
     osascript -e \ "set volume 0 \" '> / usr / local / logouttask / logoutscript; sudo default write com.apple.loginwindow LogoutHook / usr / local / logouttask / logoutscript; chmod + x / usr / local / logouttask / logoutscript "con privilegios de administrador
     más
         tratar
             do shell script "sudo default escribe com.apple.loginwindow LogoutHook ''; rm / usr / local / logouttask / logoutscript" con privilegios de administrador
             cuadro de dialog de visualización "Se escuchará el tono de inicio si la configuration de volumen es mayor a 0 al apagar o reiniciar".  botones {"OK"} button pnetworkingeterminado 1
         en error el error_message número el error_number
             si error_number es 1 entonces
                 cuadro de dialog de visualización "La secuencia de commands que establece el volumen del sistema en cero al cerrar la session no existe. Se escuchará el tono de inicio si la configuration del volumen es mayor que 0 al apagar o reiniciar".  botones {"OK"} button pnetworkingeterminado 1
             más
                 mostrar el cuadro de dialog "Error:" & el error_number & "." & el error_message buttons {"OK"} button pnetworkingeterminado 1
             terminara si
         fin de tratar
     terminara si
    
    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).