How do I launch a process as a specific user at startup on OS X?
I had similar problems trying to make a long running process use a default keychain. Essentially LaunchAgent doesn't seem to run in a full login environment for doing the security commands so changing the default keychain doesn't work and comes back with a permissions error on the /Library/Preferences/
directory.
The secret sauce is to add:
<key>SessionCreate</key>
<true/>
to your plist. This is a undocumented feature which will force a proper environment and will enable you to set the default keychain. Credit to joensson on this question for pointing me in the right direction.
Save as a global daemon (/Library/LaunchDaemons
) and specify the user with key UserName
:
<key>UserName</key>
<string>Put username here</string>
There are a number of other places where you can hide startup items in OS X (most of which are thoroughly unsupported). I'd try /etc/rc.local
; I seem to recall that working in Panther, so there's a possibility it might still work today.