我尝试使用具有登录用户权限的launchd执行我的测试守护程序。
我将我的plist文件保存在/Library/LaunchAgents/myplist
,并且在Mavericks的登录用户帐户中执行得很好。
我的命令是这样的。
$launchctl load /Library/LaunchAgents/myplist
但是当我在Yosemite尝试时,它以root帐号执行。
据我所知,它应该作为登录用户帐户执行,但它不是在Yosemite。我还将myplist文件移到~/Library/LauchAgents/myplist
,但结果是一样的。
在Yosemite发布了什么以及如何使用登录用户帐户执行launchd?
答案 0 :(得分:0)
可以使用 UserName 键在守护程序的plist中指定用户。例如: -
<key>UserName</key>
<string>_daemonUser</string>
其中 _daemonUser 是守护程序应该运行的用户的名称,假设存在具有该名称的用户。
如果要使用当前登录用户的名称,则必须在调用 launchctl load 时指定该名称。在bash脚本中,使用sudo运行,你可以这样做: -
SESSION_USER="$USER"
echo Starting MyDaemon as user $SESSION_USER
su $SESSION_USER -c 'launchctl load /Library/LaunchAgents/myplist.plist'
如果用户切换适用且他们已经登录,您可能还需要考虑其他用户。这更复杂,但有一个解决方案here。