Bagaimana cara mematikan Mac setelah putuskan sambungan menggunakan AppleScript?

1

Saya ingin menyelesaikan masalah dari pertanyaan ini , yaitu, setelah melepas layar Cinema dari clamshell MacBook saya ingin membiarkan MacBook tidur tanpa membuka dan menutup tutupnya.

Saya belum pernah menggunakan AppleScript sebelumnya. Apakah mungkin untuk menulis AppleScript yang membuat komputer tidur, katakan 30 detik setelah terputusnya layar eksternal, tetapi hanya jika tutupnya ditutup.

Thomas
sumber

Jawaban:

2

Menggunakan Script Editor.app yang disertakan dengan OS X, coba bereksperimen dengan cuplikan ini.

Tunggu 30 detik

Cuplikan berikut akan membuat skrip Anda menunggu 30 detik sebelum menampilkan dialog:

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

Tidur

Cuplikan berikut akan membuat Mac Anda langsung tertidur :

tell application "System Events"
    sleep
end tell

Tunggu, lalu tidur

Menggabungkan dua cuplikan di atas menghasilkan AppleScript yang akan menunggu 30 detik sebelum mematikan Mac Anda:

delay 30
tell application "System Events"
    sleep
end tell

Layar dan Desktop

Saya tidak yakin cara terbaik untuk menentukan apakah monitor terhubung. Anda tentu bisa melakukan polling secara teratur; memanggil system_profiler SPThunderboltDataType SPDisplaysDataTypedan mem-parsing output akan bekerja.

Polling mahal secara komputasional dan sebaiknya dihindari.

Atau, mungkin pendekatan di mana AppleScript dapat menentukan apakah jumlah desktop aktif telah berubah? Ketika dua monitor terhubung ke Mac saya, cuplikan berikut mengembalikan daftar dua item:

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

Memperluas ini, cuplikan berikut menyediakan lebih banyak informasi tampilan untuk bekerja dengan:

tell application "System Events"
    set myDesktop to properties of the first desktop
end tell
Graham Miln
sumber
1

Saya tidak akan mempercantik ini seperti yang dilakukan oleh Graham Miln namun Anda ingin membuat aplikasi AppleScript yang dapat Anda jalankan sebelum memutuskan koneksi layar eksternal Anda maka ini akan menunggu 30 detik, periksa untuk melihat apakah itu dalam mode clamshell dan jika ya matikan sistem.

Kode 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

Catatan: Dalam if pernyataan , System Eventsdapat digunakan Findersebagai salah satu akan menerima sleep perintah .

pengguna3439894
sumber
Jika Anda mengambil pendekatan ini, pastikan untuk melepaskan koneksi monitor dan adaptor ethernet Thunderbolt dalam 30 detik - atau Anda akan membangunkan MacBook tepat setelah tidur.
Graham Miln