在OS X中,首选从睡眠或屏幕保护程序唤醒时需要密码,存储在首选项域 com.apple.screensaver ,键 askForPassword 。我想从以root身份运行的守护进程中更改该首选项,但我不确定这样做的正确方法是什么。
一种选择是通过[NSUserDefaults persistentDomainForName:]进行读取,更新和同步。这会成功更新首选项,但loginwindow不会立即重新加载该首选项。可以通过以下代码通知loginwindow从用户引导程序命名空间中运行的应用程序重新加载首选项:
CFMessagePortRef port = CFMessagePortCreateRemote(kCFAllocatorDefault, CFSTR("com.apple.loginwindow.notify"));
CFMessagePortSendRequest(port, 500, NULL, 0, 0, NULL, NULL);
CFRelease(port);
但是守护程序的引导名称空间中没有loginwindow端口。
有更好的方法来更新该偏好吗?或者直接从守护进程发出任何登录窗口的信号?
答案 0 :(得分:0)
我也正在寻找这个问题的答案而且已经缩短了。 但是我确实发现如果您使用Apple Script,则值会更新:
osascript -e 'tell application "System Events" to set require password to wake of security preferences to false'