通过编程方式或通过mac上的命令行发现当前用户的屏幕保护程序超时

hva*_*rug 4 macos cocoa command-line screensaver

有谁知道如何发现mac上当前用户的屏幕保护程序的超时.如果可能的话,我更喜欢编程方法,但我也很乐意解析命令行实用程序的输出.我已经用pmset做这个以获得睡眠时间.

Duf*_*ffJ 6

作为正确原始答案的后续(在对有关El Capitan的答案的评论的回复中),似乎上述属性在10.11中不存在于默认值集合中,但它确实存在于currentHost:

$ defaults read com.apple.screensaver
{
    askForPassword = 1;
    askForPasswordDelay = 5;
    tokenRemovalAction = 0;
}
Run Code Online (Sandbox Code Playgroud)

然后为currentHost:

$ defaults -currentHost write com.apple.screensaver idleTime 60
$ defaults -currentHost read com.apple.screensaver
{
    PrefsVersion = 100;
    idleTime = 60;
    moduleDict =     {
        moduleName = iLifeSlideshows;
        path = "/System/Library/Frameworks/ScreenSaver.framework/Resources/iLifeSlideshows.saver";
        type = 0;
    };
    showClock = 0;
    tokenRemovalAction = 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的write命令设置了我的用户的空闲时间,这正是我要找的.希望这可以帮助!


小智 5

在当前用户(在从10.6.x的至少向上)存储在用于屏幕保护程序设置的值属性列表文件~/Library/Preferences/com.apple.screensaver.plist。如果用户决定禁用自动屏幕消隐/保存,则可能没有值。

您可以使用名为defaults(1)的命令行实用程序读取该值:

defaults read com.apple.screensaver idleTime
defaults -currentHost read com.apple.screensaver idleTime
Run Code Online (Sandbox Code Playgroud)

前者提供对当前用户设置的访问,后者提供对系统默认值的访问,如果存在的话。

使用 defaults(1) 读取值有些复杂,因为该值可能存在也可能不存在。defaults read com.apple.screensaver idleTime如果当前用户禁用了屏幕保护程序,假设它将返回零是明智的,但事实并非如此。相反, defaults(1) 将在终端上抛出错误消息并返回非零退出代码。而不是仅仅解析 defaults(1) 的输出,您必须首先检查退出代码并仅在它为零的情况下才进行解析。另一方面,在解析外部命令的输出时,这可能是一个明智的策略。

Apple 也为他们的 Xcode提供用于读取/写入属性列表的编程接口