触发登录窗口以从睡眠状态唤醒时重新加载AskForPassword

时间:2011-08-15 20:23:59

标签: objective-c cocoa macos

在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端口。

有更好的方法来更新该偏好吗?或者直接从守护进程发出任何登录窗口的信号?

1 个答案:

答案 0 :(得分:0)

我也正在寻找这个问题的答案而且已经缩短了。 但是我确实发现如果您使用Apple Script,则值会更新:

osascript -e 'tell application "System Events" to set require password to wake of security preferences to false'