No he encontrado la forma de ejecutar un script para la cuenta de invitado durante el inicio de sesión que se ejecuta cada minuto. Dicen que usar cron daemon está obsoleto así que parece que usaré launchd con archivos .plist.
Escenario: Tengo un iMac público y quiero permitir que el público en general utilice la cuenta de invitado y que se fuerce el cierre de sesión cada media hora. Escribí un ruby script para comprobar el tiempo de inicio de sesión y calcular el tiempo restante. Puedo hacer que muestre un banner de notificación cada 10 minutos usando osascript y luego hacer que cierre la sesión de mi cuenta. El problema es que cuando intento implementarlo para la cuenta de invitado no funciona.
El problema es cuando coloco el archivo .plist dentro de /Library/LaunchDaemons ya que se ejecuta después de iniciar sesión y también se ejecuta como Root. Ejecutar como Root es importante ya que puedo tener el privilegio de cerrar procesos cuando el tiempo se agota. Necesito que se ejecute una vez cada minuto. Este es el archivo plist actual que funciona cuando me conecto como mi propio nombre de usuario "owner" pero no como invitado. Usando org.user.plist
Mi archivo .plist original tenía el siguiente aspecto
<?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>org.user</string>
<key>Program</key>
<string>/usr/local/bin/notify-custom</string>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Actualización 1 (Todavía no es una solución) .plist que se ejecuta cada 10 segundos tanto para Guest como para mi nombre de usuario
<?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>org.user</string>
<key>ProgramArguments</key>
<string>/usr/local/bin/notify-custom</string>
<key>WatchPaths</key>
<array>
<string>/Users/Guest/Library</string>
<string>/Users/owner/Library</string>
<array>
</integer>
</dict>
</plist>
Como prueba para asegurarme de que el banner de notificación osascript aparece tengo este código dentro de /usr/local/bin/notify-custom
#/bin/bash
#Using whoami would have shown me logged in as root under LaunchDaemon .plist
loggedinUser=`finger | awk 'NR==3{print $1}'`
#I need to manually run terminal and type sudo as guest for nextline to work
sudo -u $loggedinUser /usr/bin/osascript -e 'display notification "Test" with title "Banner Notification"'
La solución está abajo.