14 votos

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

Todos sabemos que Mac OS X tiene el muy útil Elementos de acceso que te permite, entre otras cosas, configurar aplicaciones/scripts para que se ejecuten cuando te conectes.

Estoy buscando una forma de configurar una lista de scripts/apps que se ejecuten cuando cerrar la sesión . Una lista de "elementos de cierre de sesión", por así decirlo.
Básicamente, quiero escribir unos pequeños scripts para mí que se ejecuten automáticamente cuando me desconecto o cierro la sesión.

Por lo tanto, estoy buscando una manera de tener un script (o, idealmente, una lista de ellos) que se active automáticamente cuando cierro la sesión. El cierre de sesión esperaría a que el script termine (al igual que el cierre de sesión espera a que hagas clic en Guardar si una aplicación lo solicita).

¿Existe una manera de activar automáticamente (un) script(s) cuando cierro la sesión de Mac OS X?

7voto

Fuzzy Purple Monkey Puntos 702

Los ganchos de cierre de sesión eran obsoleto en 10.4 pero siguen funcionando a partir de la 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 sólo puede ser una ruta de acceso a un ejecutable y no un comando del shell. El gancho de cierre de sesión se ejecuta como Root.

El comando defaults modifica /var/Root/Library/Preferences/com.apple.loginwindow.plist. Añadir una clave LogoutHook a /Library/Preferences/com.apple.loginwindow.plist no funciona.

Si un gancho de cierre de sesión tarda mucho en ejecutarse, se muestra una pantalla gris hasta que el gancho de cierre de sesión finaliza. 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 encontrado ninguna forma de ejecutar programas al cerrar la sesión de forma fiable con launchd. Cuando intenté atrapar señales como EXIT, el código de la trampa sólo se ejecutaba cuando cerraba la sesión en la ventana de inicio de sesión y no cuando se apagaba o reiniciaba.

<?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>

0 votos

Hmm, ninguno de los dos me ha funcionado. Tengo este script que funciona si lo ejecuto con sh (crea ese archivo .txt). He guardado el script como /etc/rc.shutdown.local, y lo he añadido con defaults como usted dijo. Ninguno de los dos archivos estaba ya ahí. ¿Estoy haciendo algo mal? Gracias.

0 votos

No sé si estoy haciendo algo mal o no. Estoy en 10.6.8 y LogoutHook no funciona. Te agradecería si pudieras echar un vistazo a esta pantalla y hazme saber si algo se ve mal. Gracias.

1 votos

Ah, esto último ha funcionado en 10.6.8. Gracias. Una nota sin embargo: no funciona con Lion :(

4voto

HugoRune Puntos 3921

En realidad, hay una forma de hacerlo que no está obsoleta:

  1. Abra 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
  3. Archivo > Guardar, Seleccionar Aplicación y Permanece abierto después de la ejecución del gestor y ahorrar

  4. Preferencias del Sistema > Usuarios y Grupos > Ficha Elementos de inicio de sesión > botón +

  5. Añadir la aplicación y marcarla como Oculta

Para ocultarlo del Muelle:

  1. Haga clic con el botón derecho en la aplicación y seleccione Mostrar contenido del paquete
  2. Abra el archivo Info.plist y añada

    <key>NSUIElement</key> <string>1</string>

0 votos

Me encanta esto. Simple y adecuado para mis necesidades. Y no está obsoleto.

0voto

Julius Canute Puntos 26

script Temporizador es una buena opción para esto. Puede ejecutarse al cerrar la sesión, al iniciar la sesión y mucho más. Yo iría con esto para una solución simple y fácil de usar. Tiene una interfaz gráfica de usuario sencilla:

Triggered action

Hay dos cosas que debes tener en cuenta sobre script Timer. Una, es no gratis. Cuesta 12 dólares, pero personalmente creo que merece la pena. Dos, no es totalmente compatible con Lion, pero han prometido una actualización gratuita en cuanto lo hagan compatible.

1 votos

Esto ya está obsoleto

0voto

Max Puntos 56

También podrías crear una aplicación para Mac a partir de tu script utilizando algo como Ornitorrinco y luego añadirlo a los elementos de inicio de sesión como cualquier otra aplicación.

0voto

Steve Evans Puntos 155

Gestor de energía puede ejecutar un script cuando un usuario cierra la sesión. Este es un producto comercial y es compatible con el último MacOS.

Power Manager run a script on log out Schedule Assistant task

Versiones anteriores necesario utilizar el editor de eventos pero ahora se incluye una tarea del Asistente de Programación para ejecutar scripts al entrar y salir del sistema.

Yo escribí Power Manager, así que no dudes en hacer preguntas técnicas sobre su implementación. En el caso de los eventos desencadenados por el cierre de sesión, Power Manager no sondea los cambios en el estado del usuario, sino que es notificado por MacOS de los cambios del usuario. Este enfoque es más eficiente que tener un script haciendo un bucle/sondeo.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X