Hacer que un script / aplicación se ejecute al cerrar sesión

13

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 / scripts para que se ejecuten cuando inicie sesión.

Estoy buscando una manera de configurar una lista de scripts / aplicaciones que se ejecutan cuando cierre la sesión . Una lista de "Elementos de cierre de sesión", si lo desea.
Básicamente, quiero escribir unos pocos scripts de limpieza para mí que se ejecutarán automáticamente cuando cierre la sesión o apague.

Por lo tanto, estoy buscando una manera de que un script (o, idealmente, una lista de ellos) se active automáticamente cuando me desconecto. El cierre de sesión esperará a que finalicen los scripts (como lo hace el cierre de sesión para que haga clic en Guardar si una aplicación lo solicita).

¿Hay alguna forma de activar (a) los guiones cuando me desconecto de Mac OS X?

    
pregunta Nathan Greenstein 01.07.2011 - 18:17

5 respuestas

7

Los enlaces de cierre de sesión eran en desuso en 10.4 , pero aún funcionan a partir del 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 ven obligados a terminar.

No he descubierto ninguna forma de ejecutar programas en el cierre de sesión de forma confiable con launchd. Cuando intenté interceptar señales como SALIR, el código en la trampa solo se ejecutó cuando cerré la sesión en la ventana de inicio de sesión y no cuando cerré 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>
    
respondido por el user495470 01.07.2011 - 21:42
0

Script Timer es una buena opción para esto. Se puede ejecutar en el cierre de sesión, inicio de sesión y mucho más. Me gustaría ir con esto para una solución simple y fácil de usar. Tiene una interfaz gráfica de usuario simple:

Hay dos cosas que debes tener en cuenta sobre el temporizador de script. Uno, es no libre. 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 la hayan hecho compatible.

    
respondido por el daviesgeek 25.02.2012 - 18:15
0

También puede crear una aplicación Mac desde su script usando algo como Platypus y luego agregarla a los elementos de inicio de sesión como cualquier otra aplicación.

    
respondido por el svth 30.11.2015 - 21:51
0

Power Manager puede ejecutar un script cuando un usuario cierra la sesión. Este es un producto comercial y es compatible con las últimas macOS.

Versionesanteriores se requiere el uso del editor de eventos , pero ahora se incluye una tarea de Schedule Assistant para ejecutar scripts 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 desencadenados de cierre de sesión, Power Manager no busca cambios en el estado del usuario, sino que MacOS le notifica los cambios realizados por el usuario. Este enfoque es más eficiente que tener un script / bucle de sondeo.

    
respondido por el Graham Miln 31.03.2018 - 12:08
0

En realidad hay una manera:

  1. Abre la aplicación "Script Editor"
  2. pegar

do shell script "PUT YOUR START SCRIPT PATH HERE"

on quit
    do shell script "PUT YOUR STOP SCRIPT PATH HERE"
    continue quit
end quit
  1. Archivo > Guarde, seleccione Aplicación y Permanezca abierto después de ejecutar el controlador y guarde
  2. Preferencias del sistema > Usuarios & Grupos > Pestaña de elementos de inicio de sesión > botón +
  3. Agregue la aplicación y márquela como Oculta

Para ocultarlo del Dock:

  1. Haga clic derecho en la aplicación y seleccione Mostrar contenido del paquete
  2. Abre Info.plist y agrega

<key>NSUIElement</key>
<string>1</string>
    
respondido por el user824963 16.12.2018 - 11:29

Lea otras preguntas en las etiquetas