No pude encontrar una manera de ejecutar un script para la cuenta de Invitado durante el inicio de sesión que se ejecuta cada minuto. Dicen que el uso del cron daemon está obsoleto, por lo que parece que estaré usando launchd con archivos .plist.
Escenario: Tengo un iMac público. Quiero permitir que el público en general use la cuenta de invitado y haga que cierre la sesión cada media hora. Escribí un script de ruby para verificar el tiempo de inicio de sesión y averiguar el tiempo restante. Puedo hacer que muestre una notificación de banner 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 del inicio de sesión y también se ejecuta como root. Ejecutar como root es importante ya que puedo tener el privilegio de cerrar procesos cuando se agote el tiempo. Lo necesito para ejecutar una vez cada minuto. Este es el archivo plist actual que funciona cuando inicio mi sesión como mi propio nombre de usuario "propietario" pero no como invitado. Usando org.user.plist
Mi archivo .plist original se parecía en algo a esto
<?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 el invitado 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 asegurarse de que aparezca el banner de notificación de osascript, 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.