在OSX中休眠显示器的命令

7

在OS X上有没有一个命令/API可以将显示器置于睡眠模式?

所谓的睡眠模式是指完全关闭对显示器的输出。我知道在电源设置中可以配置这个功能,但那是基于时间的。

3个回答

18

这可以通过使用半文档化的API来完成。

#include <CoreFoundation/CoreFoundation.h>
#include <IOKit/IOKitLib.h>

/* Returns 0 on success and 1 on failure. */
int display_sleep(void)
{
    io_registry_entry_t reg = IORegistryEntryFromPath(kIOMasterPortDefault, "IOService:/IOResources/IODisplayWrangler");
    if (reg) {
                IORegistryEntrySetCFProperty(reg, CFSTR("IORequestIdle"), kCFBooleanTrue);
                IOObjectRelease(reg);
        } else {
                return 1;
        }
        return 0;
}

GCC标志:-framework CoreFoundation -framework IOKIT

IOKit文档


编译版本可以在此处找到:http://www.malcolmhall.com/products/sleepdisplay/。 - rogerdpack
2
您能否在多显示器系统中针对一个显示器进行操作?这似乎会使所有显示器都进入睡眠状态。 - regulus6633
我尝试创建一个带有按钮的窗口,调用上述函数,但是没有任何反应。您有什么建议,为什么会出现这种情况? - David
@David:我已经更新了代码,包含所需的头文件和gcc标志。我不确定这是否能解决你的问题,如果不能,请告诉我。 - Tabitha
@Tarrant:感谢您在非沙盒环境下的工作。在沙盒中,Lion将不允许您设置IORequestIdle。 - David
显示剩余2条评论

11

在OS X 10.9.5中测试,您可以使用以下命令将显示器置于睡眠状态:

$ pmset displaysleepnow

注意:目前在 OS X 10.9.5 中,睡眠显示存在一个小问题(真的只是个小烦恼),我在使用 LaunchBar 的睡眠显示操作时发现了这个问题。通过调用此命令(操作或终端),最后按下的键始终是 Return,因此当您唤醒显示器时,该键似乎会被“卡住”。您可能永远不会注意到它,但如果使用某种双修饰键敲击来调用 LaunchBar 或其他应用程序(在我的情况下,是 Double Cmd),则此键组合在唤醒显示器后将无法正常工作,直到您再次按下 Return 来“释放”它。


10

是以编程方式还是作为用户?

对于后者,可以使用 Control+Shift+Eject 快捷键。


是的,我正在寻找一个编程解决方案。 - mikeycgto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接