Cette fois ci une astuce (et des propositions intéressantes également dans les commentaires) en provenance de l’excellent blog http://patternbuffer.wordpress.com de Kyle Crawford.
L’OS d’Apple impose des restrictions sur l’accès aux LaunchAgents s’exécutant depuis une session utilisateur, et il est donc nécessaire pour recharger un LaunchAgent depuis une session utilisateur, de se déconnecter.
On découvre sur ce billet une approche intéressante permettant, pour ceux qui le souhaitent, d’intégrer dans leurs scripts, notamment pour la construction de packages d’installation, de charger ou recharger un LaunchAgent en contournant cette restriction.
Le principe consiste à appeler des fonctions AppleScript au travers du Shell grâce à “osascript” :
#!/bin/bash # if someone is logged in if who | grep -q console; then # get the logged in user's uid LOGGED_IN_UID=`ls -ln /dev/console | awk '{ print $3 }'` # use the uid and pgrep to find the Finder process id FINDER_PID=`pgrep -U ${LOGGED_IN_UID} Finder` # use launchctl bsexec to run applescript code in the same Mach bootstrap namespace hierachy as the Finder launchctl bsexec "${FINDER_PID}" osascript -e ' tell app "Finder" do shell script " launchctl unload -S Aqua /Library/LaunchAgents/com.company.agent.plist launchctl load -S Aqua /Library/LaunchAgents/com.company.agent.plist " end tell ' fi
Une autre proposition intéressante soumise en commentaire sur ce même blog :
loggedInUser=`who | grep console | awk ‘{ print $1 }’` if [ ! -z $loggedInUser ] then launchctl bsexec `ps auwwx | grep [l]oginwindow | awk ‘{ print $2 }’` sudo -u $loggedInUser launchctl load /Library/LaunchAgents/com.company.agent.plist fi
Evidemment, si vous avez des commentaires ou propositions complémentaires, n’hésitez pas !