[launchd-dev] Loading LaunchAgents for users in postinstall

Damien Sorresso dsorresso at apple.com
Sun Jul 19 10:44:55 PDT 2015


On 18 Jul, 2015, at 01:41, Per Olofsson <per.olofsson at gu.se> wrote:
> 17 juli 2015 kl. 22:03 skrev Damien Sorresso <dsorresso at apple.com>:
>> 
>> Per,
>> 
>> You should be able to use `launchctl asuser` for this purpose, eg.
>> 
>> $ launchctl asuser launchctl unload /Path/to/plist
>> $ launchctl asuser launchctl load /Path/to/plist
> 
> Thanks, I got some replies off list as well, and asuser is pretty much a drop-in replacement. It wasn't documented until 10.10, but opensource.apple.com (yay!) confirms that it appeared in 10.7, so I guess it should be safe to use even if you need to support older releases?

Yes, it is there. In Yosemite, we actually improved the fidelity of "asuser" substantially. The process adopts not only the proper bootstrap context but also the right exception context and audit session.

>> On El Capitan, you can use `launchctl bootstrap` and `launchctl bootout`, eg.
>> 
>> $ launchctl bootout user/$uid /path/to/plist
>> $ launchctl bootstrap user/$uid /path/to/plist
>> 
>> Note that both of these will load your job into the user's background session and *not* the user's GUI session. This means that your job must have a LimitLoadToSessionType value of "Background".
>> 
>> If you want to load your agent into the user's GUI session, your approach below will work just fine, though I'm not sure why you're chroot(2)ing.
> 
> We're basically cargo culting Quinn's reply here:
> 
>  https://lists.macosforge.org/pipermail/launchd-dev/2011-January/000890.html
> 
> chroot -u just executes a command though, and you don't have to deal with the shell as you have to if you use su, and as a bonus there's no quoting involved.

Oh I see.

>> On El Capitan, you can modify the above commands to be
>> 
>> $ launchctl bootout gui/$uid /path/to/plist
>> $ launchctl bootstrap gui/$uid /path/to/plist
>> 
>> if you want to load the job into the user's GUI session, and you won't have to go through any weird tricks like below.
> 
> It'll be a few years before we can target 10.11+, but that's excellent!

You could always conditionalize based on the availability of the bootout subcommand if you really wanted to use it I suppose.

>> Before you ask, yes, we know it's a mess. Unfortunately, we're very constrained by 10+ years of legacy behavior.
> 
> Don't I know it, but heck, it's cleaner and more explicit now than it's ever been.

Yeah, that was the intent. ;)
-damien



More information about the launchd-dev mailing list