Come mettere un Mac in stop dopo la disconnessione del display usando AppleScript?

1

Vorrei risolvere il problema da questa domanda , ovvero, dopo aver scollegato un monitor Cinema da un MacBook a conchiglia, vorrei lasciare che il MacBook vada a dormire senza aprire e chiudere il coperchio.

Non ho mai usato AppleScript prima. È possibile scrivere un AppleScript che mette il computer in modalità di sospensione, diciamo 30 secondi dopo la disconnessione di uno schermo esterno, ma solo se il coperchio è chiuso.

    
posta Thomas 21.01.2016 - 12:36
fonte

2 risposte

2

Usando lo Script Editor.app incluso con OS X, prova a sperimentare con questi frammenti.

Attendi 30 secondi

Il seguente frammento farà in modo che lo script attenda 30 secondi prima di mostrare una finestra di dialogo:

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

Il sonno

Il seguente frammento inserisce il tuo Mac immediatamente dopo il sonno :

tell application "System Events"
    sleep
end tell

Attendi e poi Sospendi

Combinando i due frammenti sopra ci sono un AppleScript che attenderà 30 secondi prima di mettere il Mac in stop:

delay 30
tell application "System Events"
    sleep
end tell

Display e desktop

Non sono sicuro di come sia meglio determinare se un monitor è connesso. Potresti certamente sondare regolarmente; chiamare system_profiler SPThunderboltDataType SPDisplaysDataType e analizzare l'output dovrebbe funzionare.

Il polling è computazionalmente costoso e meglio evitato.

In alternativa, forse un approccio in base al quale un AppleScript potrebbe determinare se il numero di desktop attivi è cambiato? Quando due monitor sono collegati al mio Mac, lo snippet seguente restituisce un elenco di due elementi:

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

Espandendoti sopra, il seguente frammento fornisce più informazioni di visualizzazione su cui lavorare:

tell application "System Events"
    set myDesktop to properties of the first desktop
end tell
    
risposta data 21.01.2016 - 14:50
fonte
1

Non ho intenzione di fare una cosa del genere come Graham Miln, ma ha comunque creato un'app AppleScript che puoi eseguire prima di disconnettere il tuo schermo esterno, quindi attenderà 30 secondi, controlla se è in modalità clamshell e se sì, metti il sistema in stato di stop.

Codice 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: nell'istruzione if , System Events può essere utilizzata al posto di Finder poiché accetta il sleep comando .

    
risposta data 21.01.2016 - 17:15
fonte

Leggi altre domande sui tag