Es müsste theoretisch ein Systemereignis ausgelöst werden, wenn die Verbindung zur Bluetooth-Tastatur verloren geht, aber Google findet keine Antwort, wie man darauf per AppleScript zugreifen kann. Auch die Suche nach "Bluetooth" im AppleScript-Dictionary von System Events geht leer aus.
Den Mac in den
Ruhezustand schicken per AppleScript ist an sich kein Problem:
Code:
tell application "System Events" to sleep
Eine (nicht sehr elegante)
Bastellösung wäre folgendes: Du erstellst ein Überwachungsskript, das in einer Endlosschleife alle 10 Sekunden oder so prüft, ob die Tastatur noch dran ist, und wenn nicht, den Mac in den Sleep-Modus schickt:
Code:
repeat while true
-- check if keyboard is connected
-- if not, put computer to sleep
delay 10 -- check again after 10 seconds
end repeat
Das Skript muss als Application gespeichert und dann z.B. bei jeder Anmeldung im Hintergrund gestartet werden. Keine Ahnung, ob das Ressourcen verbraucht, aber wohl nicht nennenswert viele.
Jetzt zur eigentlichen
Überprüfung:
Da sich die Namen von Bluetooth-Geräten leicht ändern können (manchmal ändert sich der Name meiner Mac Wireless Tastatur völlig selbständig von "<Name>'s Tastatur" in "Bluetooth Keyboard" und wieder zurück), würde ich statt dessen über die
MAC-Adresse gehen. Die findest Du im Terminal wie folgt raus:
Code:
system_profiler SPBluetoothDataType | grep -B 3 "Type: Keyboard"
Dort steht dann z.B. "Address: 01-2b-32-ef-37-1e"
Diese Adresse schreibst Du auf. Jetzt kann man sich alle
Adressen von Bluetooth-Geräten, die NICHT verbunden sind, ausgeben lassen:
Code:
system_profiler SPBluetoothDataType | grep -B 8 "Connected: No" | grep -w Address | sed s/' *Address: '//
Jetzt musst Du nur noch prüfen, ob die Adresse Deiner Tastatur zu diesen gehört. Ein
komplettes Skript könnte so aussehen:
Code:
property myKeyboard : "01-2b-32-ef-37-1e"
repeat while true -- CAUTION! this process will run forever until stopped
-- check if keyboard is connected
-- if not, put computer to sleep
do shell script "system_profiler SPBluetoothDataType | grep -B 8 'Connected: No' | grep -w Address | sed s/' *Address: '//"
if (myKeyboard as text) is in result then tell application "System Events" to sleep
delay 10 -- check again after 10 seconds
end repeat
Hat bei mir einwandfrei funktioniert (MacBookPro5,5 mit Mac OS X 10.6.6)
Lass mal wissen, ob es bei Dir auch läuft.