Tengo una flota de 7 macbook pro's con mac osx 10.10, 10.11 y 10.12, y 3 mac pro's con mac os 10.13 ("high sierra"). En todos los sistemas, lo he configurado para que nunca duerma el sistema o la pantalla. Curiosamente, eso no es suficiente, por lo que también uso el cafeinato para evitar el sueño. En los sistemas 10.13, sin embargo, la pantalla sigue durmiendo, no importa lo que intente. Esto afecta a dos cosas:
- mis pruebas de opengl se cuelgan
- "osascript -e 'dile a la aplicación "Eventos del sistema" que se reinicie'" se cuelga
Como sólo la pantalla está dormida, aún puedo conectarme por ssh y echar un vistazo.
Actualmente ejecuto mi script bajo caffeinate -dsiu -t 31536000, y cuando se cuelga, evidentemente todavía tengo todas las aserciones adecuadas:
$ 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 caffeinate -u despierta la pantalla y la pone en DevicePowerState 4 durante 15 segundos más o menos, luego vuelve a dormir y a DevicePowerState 1, incluso si le doy un tiempo de espera más largo con -t. También he probado a repetir el argumento -t después de cada afirmación (por si la confusa página de manual se refería a eso).
Para rescatar "osascript -e 'tell app "System Events" to restart'", tengo que emitir "caffeinate -u". "caffeinate -d" o "caffeinate -i" no son suficientes.
Ver mis comentarios en https://github.com/newmarcel/KeepingYouAwake/issues/92 para más detalles.
Supongo que debería usar lldb para obtener un backtrace de una prueba de opengl colgada, averiguar en qué API está colgada, y luego crear una aplicación mínima que establezca la aserción de gestión de energía apropiada, duerma un poco, y luego llame a la API colgada. Intentaré hacerlo cuando tenga la oportunidad.
Para solucionarlo, actualmente tengo esto en un script de fondo:
while true
do
caffeinate -ud sleep 10
done
pero no es suficiente; CurrentPowerState baja a 1 con frecuencia en todos los sistemas (aunque creo que sólo los sistemas 10.13 realmente duermen la pantalla y cuelgan mis pruebas).
¿Alguien más se ha encontrado con esto? ¿Alguna sugerencia de cómo puedo diagnosticar esto más adelante?