Cómo poner una Mac a dormir después de desconectar la pantalla con AppleScript?

Me gustaría resolver el problema a partir de esta pregunta , es decir, después de desconectar una pantalla de cine de una MacBook clamshell, me gustaría dejar que la MacBook se vaya a dormir sin abrir ni cerrar la tapa.

Nunca antes había usado AppleScript. ¿Es posible escribir un AppleScript que apague la computadora, digamos 30 segundos después de desconectar una pantalla externa, pero solo si la tapa está cerrada?

2 Solutions collect form web for “Cómo poner una Mac a dormir después de desconectar la pantalla con AppleScript?”

Usando Script Editor.app incluido con OS X, intente experimentar con estos fragments.

Espera 30 segundos

El siguiente fragment hará que su secuencia de commands espere 30 segundos antes de mostrar un cuadro de dialog:

delay 30 -- this waits thirty seconds display dialog "Hello?" -- this shows a dialog 

Dormir

El siguiente fragment pondrá inmediatamente a tu Mac a dormir :

 tell application "System Events" sleep end tell 

Espera y luego duerme

La combinación de los dos fragments anteriores proporciona un AppleScript que esperará 30 segundos antes de poner su Mac a dormir:

 delay 30 tell application "System Events" sleep end tell 

Pantallas y escritorios

No estoy seguro de cuál es la mejor manera de determinar si un monitor está conectado. Ciertamente podrías sondear regularmente; llamar a system_profiler SPThunderboltDataType SPDisplaysDataType y analizar el resultado funcionaría.

El sondeo es computacionalmente costoso y es mejor evitarlo.

Alternativamente, ¿quizás un enfoque mediante el cual un AppleScript podría determinar si la cantidad de escritorios activos ha cambiado? Cuando dos monitores están conectados a mi Mac, el siguiente fragment devuelve una list de dos elementos:

 tell application "System Events" set myDesktops to desktops end tell 

Ampliando esto, el siguiente fragment proporciona más información de visualización para trabajar con:

 tell application "System Events" set myDesktop to properties of the first desktop end tell 

No voy a arreglar esto como lo hizo Graham Miln, pero si quieres crear una aplicación AppleScript que puedas ejecutar antes de desconectar tu pantalla externa, esperará 30 segundos, verifica si está en modo clamshell y si es así pon el sistema a dormir

Código de AppleScript:

 delay 30 set AppleClamshellState to do shell script "ioreg -r -k AppleClamshellState -d 1 | awk -F' = ' '/AppleClamshellState/ {print $2}'" if AppleClamshellState = "Yes" then tell application "Finder" to sleep 

Nota: En la instrucción if , los System Events se pueden usar en lugar del Finder , ya que cualquiera de ellos aceptará el command de sleep .

Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).