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

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.

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.

Before you ask, yes, we know it's a mess. Unfortunately, we're very constrained 
by 10+ years of legacy behavior.
-damien

On 17 Jul, 2015, at 08:11, Per Olofsson <per.olofs...@gu.se> wrote:
> When an installer package contains a LaunchAgent we typically try to load it 
> into any current user sessions, to avoid requiring a logout or restart. 
> Through trial and error we've arrived at using launchctl bsexec with chroot 
> in a loop like this:
> 
> if [[ "$3" == "/" ]]; then
>    # Load agent for all logged in users.
>    for pid_uid in $(ps -axo pid,uid,args | grep -i "[l]oginwindow.app" | awk 
> '{print $1 "," $2}'); do
>        pid=$(echo $pid_uid | cut -d, -f1)
>        uid=$(echo $pid_uid | cut -d, -f2)
>        if [[ "$uid" -ne 0 ]]; then
>            launchctl bsexec "$pid" chroot -u "$uid" / launchctl unload 
> "$AGENT"
>            launchctl bsexec "$pid" chroot -u "$uid" / launchctl load "$AGENT"
>        fi
>    done
> fi
> 
> It's not perfect but it got the job done, but it looks like it breaks in the 
> 10.11 betas if SIP is enabled (launchctl exits with code 5). Is there a 
> better/proper/supported way of loading LaunchAgents for users in a background 
> script running as root?
> 
> -- 
> Per Olofsson, IT-service, University of Gothenburg
> 
> _______________________________________________
> launchd-dev mailing list
> launchd-dev@lists.macosforge.org
> https://lists.macosforge.org/mailman/listinfo/launchd-dev

_______________________________________________
launchd-dev mailing list
launchd-dev@lists.macosforge.org
https://lists.macosforge.org/mailman/listinfo/launchd-dev

Reply via email to