У мене є флот із 7 MacBook Pro, який працює під Mac Mac OS 10.10, 10.11 та 10.12, і 3 mac pro працює Mac os 10.13 ("висока сиєрра"). У всіх системах я встановив, що ніколи не спить систему чи дисплей. Як не дивно, цього недостатньо, тому я також використовую кофеїн для запобігання сну. У системах 10.13, проте, дисплей все ще переходить у режим сну, незалежно від того, що я намагаюся. Це впливає на дві речі:
- мої тести на opengl висять
- "osascript -e" скажіть додатку "Події системи", щоб перезапустити "" висить
Оскільки лише дисплей спить, я все ще можу зайти і озирнутися.
В даний час я запускаю свій сценарій під кофеїном -dsiu -t 31536000, і коли він зависає, очевидно, я все ще маю на увазі всі належні твердження:
$ pmset -g assertionslog
2017-11-20 19:34:27 -0800 : Showing all currently held IOKit power assertions
Assertion status system-wide:
BackgroundTask 0
ApplePushServiceTask 0
UserIsActive 1
PreventUserIdleDisplaySleep 1
PreventSystemSleep 1
ExternalMedia 0
PreventUserIdleSystemSleep 1
NetworkClientActive 1
і все ж дисплей знаходиться в DevicePowerState 1:
$ ioreg -n IODisplayWrangler | grep -i IOPowerManagement
| | "IOPowerManagement" = {"DevicePowerState"=1,"CapabilityFlags"=0,"CurrentPowerState"=1,"MaxPowerState"=4}
Виконання іншого кофеїну -у пробуджує дисплей і поміщає його в DevicePowerState 4 протягом 15 секунд, потім він повертається до сну і DevicePowerState 1, навіть якщо я даю більш тривалий час з -t. Я також намагався повторити аргумент -t після кожного твердження (на випадок, коли це заплуталася сторінка).
Щоб врятувати "osascript -e", сказати додатку "Системні події", щоб перезапустити ", я повинен видати" caffeinate -u ". "кофеїн -d" або "кофеїнат -i" недостатній.
Дивіться мої коментарі на https://github.com/newmarcel/KeepingYouAwake/isissue/92 для отримання більш детальної інформації.
Я думаю, що я повинен використовувати lldb, щоб отримати зворотній зв'язок від вивішеного тесту opengl, з'ясувати, на якому API він завішений, а потім створити мінімальну програму, яка встановлює відповідне твердження про управління потужністю, трохи спить, а потім викликає API висячого. Я спробую це зробити, коли отримаю можливість.
Щоб обійти це, у мене зараз це є у фоновому сценарії:
while true
do
caffeinate -ud sleep 10
done
але цього недостатньо; CurrentPowerState часто опускається до 1 у всіх системах (хоча, я думаю, лише 10,13 системи насправді сплять дисплей і вивішують мої тести).
Хтось ще наткнувся на це? Будь-які пропозиції, як я можу далі діагностувати це?