Non sono riuscito a trovare un modo per eseguire uno script per l'account Guest durante l'accesso che viene eseguito ogni minuto. Dicono che l'uso di cron daemon sia deprecato, quindi sembra che userò launchd con i file .plist.
Scenario: Ho un iMac pubblico Voglio consentire al pubblico di utilizzare l'account guest e farlo forzare a uscire ogni mezz'ora. Ho scritto uno script rubino per controllare il tempo di accesso e calcolare il tempo rimanente. Posso farlo visualizzare una notifica di banner ogni 10 minuti utilizzando osascript e quindi effettuare la disconnessione dal mio account. Il problema è quando cerco di implementarlo per l'account Guest che non funziona.
Il problema si verifica quando inserisco il file .plist in / Library / LaunchDaemons poiché viene eseguito dopo l'accesso e viene eseguito anche come root. L'esecuzione come root è importante poiché posso avere il privilegio di chiudere i processi quando il tempo si esaurisce. Ne ho bisogno per eseguire una volta ogni minuto. Questo è l'attuale file plist che funziona quando effettuo il login come nome utente "proprietario" ma non come ospite. Usando org.user.plist
Il mio file .plist originale era simile a questo
<?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>
Aggiornamento 1 (non ancora una soluzione) .plist file che viene eseguito ogni 10 secondi sia per Guest che per il mio nome utente
<?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>
Come test per assicurarmi che il banner di notifica di osascript venga visualizzato ho questo codice in / 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 soluzione è sotto.