我有一个在安装应用程序后成功加载的launchdaemon。我希望launchdaemon在用户上下文中加载启动。如何在10.10实现?以下方式是否准确并获得Apple批准。
sudo launchctl bsexec "$PID" sudo -u "$USER" launchctl load /Library/LaunchAgents/pathto.plist
关注:
任何帮助都会很明显。
答案 0 :(得分:1)
这是我最常做的事情。我不确定这是否是Apple批准和接受的编码。
我使用下面给出的命令来记录n个用户名。如果多个用户登录,则提供活动用户的名称,我的意思是活动控制台用户。
stat -f%Su /dev/console
可以使用su -l从LaunchDaemon加载LaunchAgent。您只需将登录的用户名作为参数。
NSString *userName;
NSTask *task = [[NSTask alloc]init];
NSPipe *pipe = [NSPipe pipe];
[task setLaunchPath:@"/usr/bin/stat"];
[task setArguments:[NSArray arrayWithObjects:@"-f%Su", @"/dev/console", nil]];
[task setStandardOutput:pipe];
[task launch];
[task waitUntilExit];
userName = [[NSString alloc] initWithData:[[pipe fileHandleForReading] readDataToEndOfFile]
encoding:NSUTF8StringEncoding];
NSString *loggedInUserName = [userName stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
NSString *loadScript = [NSString stringWithFormat: @"su -l %@ -c \"/bin/launchctl load /Library/LaunchAgents/com.abc.appname.plist\"", loggedInUserName];
system([loadScript UTF8String]);
谨慎一点。当我们在OS 10.9及更低版本中将RunAtLoad设置为YES时,我已经看到这会导致LaunchAgent访问UI(与WindowServer相关的任何内容)出现问题。我在10.10中从未遇到过这种情况。