кофеинат не может держать дисплей от сна

5

У меня есть парк из 7 MacBook Pro, работающий под управлением Mac OSX 10.10, 10.11 и 10.12, и 3 Mac Mac Pro, работающий под управлением Mac OS 10.13 («высокая Сьерра»). На всех системах я настроил его на то, чтобы никогда не спал система или дисплей. Как ни странно, этого недостаточно, поэтому я также использую кофеин для предотвращения сна. В системах 10.13 дисплей по-прежнему переходит в спящий режим, что бы я ни пытался. Это влияет на две вещи:

  • мои тесты opengl зависают
  • "osascript -e" говорит приложению "Системные события" перезапустить "" зависает

Поскольку только дисплей спит, я все еще могу ssh войти и осмотреться.

В настоящее время я запускаю свой сценарий с именем caffeinate -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}

Выполнение другого кофеина -u пробуждает дисплей и помещает его в DevicePowerState 4 на 15 или около того секунд, затем он возвращается в спящий режим и DevicePowerState 1, даже если я дам более длительное время ожидания с -t. Я также пытался повторять аргумент -t после каждого утверждения (на случай, если запутанная страница справки это означает).

Чтобы спасти «osascript -e», сказать приложению «Системные события« перезапустить »», я должен выпустить «caffeinate -u». «кофеинат -d» или «кофеинат -i» не являются достаточными.

Смотрите мои комментарии на https://github.com/newmarcel/KeepingYouAwake/issues/92 для более подробной информации.

Думаю, мне следует использовать lldb, чтобы получить обратную трассировку из зависшего теста opengl, выяснить, на каком API он завис, а затем создать минимальное приложение, которое устанавливает соответствующее утверждение управления питанием, немного спит, а затем вызывает зависший API. Я постараюсь сделать это, когда у меня будет шанс.

Чтобы обойти это, в настоящее время у меня есть это в фоновом скрипте:

while true
do
   caffeinate -ud sleep 10
done

но этого недостаточно; CurrentPowerState часто падает до 1 на всех системах (хотя я думаю, что только системы 10.13 фактически спят на дисплее и вешают мои тесты).

Кто-нибудь еще сталкивался с этим? Любые предложения, как я могу диагностировать это дальше?

Дэн Кегель
источник
Рассматривали ли вы попробовать сторонние приложения, такие как кофеин или амфетамин для 10,13 машин?
JMH
1
Второе предложение @ jmh, но также добавьте «Anti Sleep» (я полагаю, что Z в круге), который, кажется, работает на 10.13, хотя я не обращал внимания на гашение экрана, поскольку меня беспокоило только то, что процессор не Спать (читай: удаленный рабочий стол откуда-то еще). Но один вопрос в противном случае: если вы хотите, чтобы все эти машины поддерживали работу своих дисплеев, вы установили Системные настройки -> Питание -> Тайм-аут экрана на «никогда»? Если в macOS есть ошибка, из-за которой тайм-аут переопределяет настройки cafinated, то, по крайней мере, сейчас это можно обойти?
BJB
1
Я просто использую кофеин от Apple, потому что этого должно быть достаточно, и мне нравится избегать сторонних графических приложений. И да, я установил Системные настройки, чтобы они никогда не спали и не выключали дисплей.
Дэн Кегель