Tengo una flota de 7 macbook pro que se ejecutan mac osx 10.10, 10.11 y 10.12, y 3 mac pro que se ejecutan mac os 10.13 ("sierra alta"). En todos los sistemas, lo he configurado para que nunca se duerma el sistema o la pantalla. Curiosamente, eso no es suficiente, así que también uso cafeína para evitar el sueño. Sin embargo, en los sistemas 10.13, la pantalla aún se duerme, no importa lo que intente. Esto afecta a dos cosas:
- mis pruebas de opengl cuelgan
- "osascript -e 'tell app" Eventos del sistema "para reiniciar" "cuelga
Dado que solo la pantalla está en modo inactivo, todavía puedo ssh y mirar alrededor.
Actualmente ejecuto mi script en cafeinate -dsiu -t 31536000, y cuando se cuelga, evidentemente todavía tengo todas las afirmaciones correctas:
$ 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
y, sin embargo, la pantalla está en DevicePowerState 1:
$ ioreg -n IODisplayWrangler | grep -i IOPowerManagement
| | "IOPowerManagement" = {"DevicePowerState"=1,"CapabilityFlags"=0,"CurrentPowerState"=1,"MaxPowerState"=4}
Ejecutar otro cafeína -u despierta la pantalla y la coloca en DevicePowerState 4 durante 15 segundos, luego vuelve a dormir y DevicePowerState 1, incluso si doy un tiempo de espera más largo con -t. También he intentado repetir el argumento -t después de cada aserción (en caso de que la página de manual confusa significara eso).
Para rescatar "osascript -e 'tell app" Eventos del sistema "para reiniciar'", Tengo que emitir "cafeína -u". "caffeinate -d" o "caffeinate -i" no son suficientes.
Vea mis comentarios en enlace para obtener más detalles.
Supongo que debería usar lldb para obtener un seguimiento de una prueba de opengl colgada, averiguar de qué API está colgada y luego crear una aplicación mínima que establezca la aserción de administración de energía adecuada, duerma un poco y luego llame a la API colgada . Intentaré hacerlo cuando tenga la oportunidad.
Para evitarlo, actualmente tengo esto en una secuencia de comandos de fondo:
while true
do
caffeinate -ud sleep 10
done
pero eso no es suficiente; CurrentPowerState baja a 1 frecuentemente todos los sistemas (aunque creo que solo los sistemas 10.13 en realidad duermen los mostrar y colgar mis pruebas).
¿Alguien más se ha topado con esto? ¿Alguna sugerencia sobre cómo puedo diagnosticar esto más a fondo?