2

在最新版本的 OSX Lion 中,如何将机器从显示睡眠中唤醒?这是对网络活动的响应。

在 10.7.3 中,这可以通过以下调用实现:

IOPMAssertionID id = 0;
IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep,
                            kIOPMAssertionLevelOn, reason, &id)

但是,这在 10.7.4 中不起作用。可以做些什么呢?

4

2 回答 2

1

我尚未测试性能影响或与空闲计时器本身的交互,但是:

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 中工作以将屏幕从空闲状态唤醒。

于 2012-05-28T19:36:59.847 回答
0

文档中可以看出,这些天“唤醒”显示器的方法是:

IOPMAssertionID assertionID2;
IOPMAssertionDeclareUserActivity(CFSTR("Your reasoning"),
       kIOPMUserActiveLocal, &assertionID2);

如果它已经打开,那么问题的IOPMAssertionCreateWithName(...)原始方式只是“防止显示器进入睡眠状态” (尽管它确实有效并且也可以用来防止它在一段时间内进入睡眠状态)。

用于“保持”显示的 docs 方法的工作方式与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我想的内置命令行实用程序:)

于 2017-12-15T18:58:22.570 回答