[launchd-dev] Loading LaunchAgents for users in postinstall
Hofi
hofione at gmail.com
Fri Jul 17 14:11:51 PDT 2015
It is really a good news that
$ launchctl bootstrap gui/$uid /path/to/plist
will work also, thanks for this info!
I assume they need to load the agent into a GUI session
"though I'm not sure why you're chroot(2)ing."
In some cases we also needed to use chroot to get loaded in the correct user context with the appropriate uid/gui
Although
$ launchctl bsexec "$pid" launchctl load -S Aqua "$AGENT”
and
$ launchctl bsexec "$pid” open /Applications/Your.app
will load into the correct context with the perfect rights, but
$ launchctl bsexec "$pid” /PathToMyExecutable
will start your executable as user root, so generally we always use the chroot approach.
———————————————————
Hofi – Istvan Hoffmann
http://hofione.wix.com/memyselfandi
On 7/17/15, 22:03 , "Damien Sorresso" <launchd-dev-bounces at lists.macosforge.org on behalf of dsorresso at apple.com> wrote:
>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.olofsson at 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 at lists.macosforge.org
>> https://lists.macosforge.org/mailman/listinfo/launchd-dev
>
>_______________________________________________
>launchd-dev mailing list
>launchd-dev at lists.macosforge.org
>https://lists.macosforge.org/mailman/listinfo/launchd-dev
More information about the launchd-dev
mailing list