2012-05-15 204 views
2

在OSX Lion的最新版本中,您如何將機器從顯示器睡眠中喚醒?這是爲了響應網絡活動。如何在OSX 10.7.4中從睡眠中喚醒?

在10.7.3這是可能與以下電話:

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

然而,這並不在10.7.4工作。可以做些什麼呢?

回答

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喚醒從空閒屏幕。

+0

還要注意的是[可可-dev的貢獻者(http://www.cocoabuilder.com/archive/cocoa/191807-sleep -display.html#206374)表示這將導致PPC機器上出現內核恐慌。 –

0

這似乎從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命令行實用程序,我想:)