在OSX Lion的最新版本中,如何从显示器睡眠中唤醒机器?这是对网络活动的回应。
在10.7.3中,通过以下调用可以实现:
IOPMAssertionID id = 0;
IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep,
kIOPMAssertionLevelOn, reason, &id)
但是,这在10.7.4中不起作用。可以做些什么呢?
我还没有测试性能影响以及与空闲计时器本身的交互,但是:
io_registry_entry_t regEntry = IORegistryEntryFromPath(kIOMasterPortDefault, "IOService:/IOResources/IODisplayWrangler");
if (regEntry != MACH_PORT_NULL) {
IORegistryEntrySetCFProperty(regEntry, CFSTR("IORequestIdle"), kCFBooleanFalse);
IOObjectRelease(regEntry);
}
在10.7.4中工作以唤醒屏幕空闲。
从docs看来,这些天“唤醒”显示器的方式是:
IOPMAssertionID assertionID2;
IOPMAssertionDeclareUserActivity(CFSTR("Your reasoning"),
kIOPMUserActiveLocal, &assertionID2);
IOPMAssertionCreateWithName(...)
从原始问题的方式只是“防止显示进入睡眠”,如果它已经开启(虽然它确实有效,也可以用来防止它进入睡眠时间为duration)。
“保持”显示的文档方法与IOPMAssertionCreateWithName
的工作方式大致相同
IOPMAssertionID m_disableDisplaySleepAssertion;
IOReturn success2 = IOPMAssertionCreateWithDescription(
kIOPMAssertionTypePreventUserIdleDisplaySleep, reasonForActivity, NULL, NULL, NULL, 0, NULL, &m_disableDisplaySleepAssertion);
if (success2 == kIOReturnSuccess) {
// screen will stay on, do you work
success = IOPMAssertionRelease(m_disableDisplaySleepAssertion);
}
如果你想“打开它并永远保持它”,那么IOPMAssertionDeclareUserActivity
紧随其后,或者只是一遍又一遍地调用IOPMAssertionDeclareUserActivity
。
您也可以调用caffeinate
命令行实用程序,我想:)