Jak utworzyć AppleScript, który zamknie aplikację w określonym czasie, a następnie przełączy komputer w tryb uśpienia?

8

Pracowałem z AppleScript i Automatorem, aby uruchomić tę funkcję, ale po prostu nie wydaje mi się, żeby mi się to udało. Jeśli ktoś mógłby mi pokazać przykład lub dać mi wskazówki, jak ustawić aplikację, aby zamknęła się w określonym czasie, a następnie uśpić lub zamknąć komputer, byłoby to bardzo mile widziane.

Tomás Richardson
źródło
Czy chcesz to robić regularnie, czy jest to coś, co chcesz inicjować ręcznie?
efsmith
Czy masz już napisany AppleScript?
efsmith
Jest to coś, co chciałbym robić regularnie i nie muszę się martwić o inicjację. Miałem napisany scenariusz, ale był dość niechlujny, więc go zepsułem i trafiłem tutaj. Dzięki za odpowiedź. Spróbuję i mam nadzieję, że rozwiąże to problemy, które miałem.
Tomás Richardson,
jeśli chcesz to robić regularnie, to planowanie pracy z atnie jest tym, czego chcesz. cronlub launchd. Jeśli potrzebujesz prostszego interfejsu do konfiguracji, być może Lingon 3 pomoże.
efmith

Odpowiedzi:

14

Zakładam, że chcesz zainicjować tę procedurę, a nie jej regularne uruchamianie.

Moim podejściem byłoby zainicjowanie tego z wiersza poleceń, ale wszelkie polecenia można uruchamiać w komponencie skryptu powłoki skryptu Automator z pewnymi modyfikacjami. Poniższe podejście łączy kilka składników w celu wykonania zadania:

  1. tellPolecenie, aby zamknąć aplikację
  2. Wywołanie z wiersza poleceń, aby uśpić komputer
  3. Wywołanie z wiersza poleceń, aby zaplanować 1 i 2 na określony czas.

1. Powiedzenie aplikacji, aby wyjść

Może to być tak proste, jak:

osascript -e 'tell application "AppName" to quit'

2. Przełączanie komputera w tryb uśpienia

Spójrz na pmsetwięcej szczegółów, ale wydanie następującego polecenia spowoduje przejście komputera w tryb uśpienia:

pmset sleepnow

3. Planowanie uruchomienia operacji o określonej godzinie

Spójrz na komendę at . To polecenie umożliwia określenie czasu uruchomienia polecenia. Musisz włączyć tę funkcję, ponieważ nie jest ona domyślnie. Aby włączyć atrundemona, uruchom następującą komendę [odniesienie na SU] :

sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.atrun.plist

Po włączeniu atrunmożna wydać dowolne polecenie na określony czas

echo "<command>" | at HH:MM

co działa, ponieważ domyślnie atpobiera dane wejściowe stdin. Prostszym podejściem jest uruchamianie poleceń wymienionych w pliku. Plik można wykonać za pomocą -fflagi, a następnie nazwy skryptu, który ma zostać uruchomiony w następujący sposób:

at -f /path/to/file HH:MM

Kładąc wszystko razem

Poniżej założono, że atrunjest włączony. Jako przykład zabawki powiedzmy, że chcę wyjść z Maila i uśpić komputer o 23:00. Chciałbym utworzyć plik zawierający polecenia, które chcę uruchomić w następujący sposób:

osascript -e 'tell application "Mail" to quit'
pmset sleepnow

Zapisz ten plik w, quit-and-sleepa następnie uruchom w wierszu polecenia

at -f /path/to/quit-and-sleep 23:00

Ostrzeżenia

Nie sprawdziłem, aby upewnić się, że Mail faktycznie został zamknięty. Skrypt zakłada również, że nic więcej nie będzie przeszkadzało w uśpieniu komputera. Uczyniłem to prostym jako punkt wyjścia do tego, czego chcesz.

ephsmith
źródło
1

Oto wersja ściśle jabłkowa, która osiąga to, biorąc pod uwagę zakodowaną wartość czasu. Możesz oczywiście uczynić tę część interaktywną, jeśli chcesz. Ponadto ta wersja zakłada, że ​​ciąg czasu odnosi się do dnia dzisiejszego.

--Get time setting for action to occur
set t to "3:16:30 PM"
--build a time string to use as a target.
set cd to (current date) as text
set AppleScript's text item delimiters to " "
set targetTime to text items 1 thru -3 of cd
set targetTime to date ((targetTime as text) & " " & t)

repeat while (current date) < targetTime
    beep
    delay 30 -- check the time every 30 seconds
end repeat

tell application "Mail"
    quit
end tell

tell application "Finder"
    display dialog "Do you want to shut the computer down now?"
    if button returned of the result is "Ok" then
        shutdown
    end if
end tell
Paul Skinner
źródło
1

Możesz zaplanować wydarzenie raz z:

at 23:59 <<< 'osascript -e "quit app \"Mail\""; pmset sleepnow'

Lub zaplanuj powtarzanie każdego dnia, edytuj crontab za pomocą EDITOR=nano crontab -ei dodaj wpis w ten sposób:

59 23 * * * osascript -e 'quit app "Mail"'; pmset sleepnow
Lri
źródło
o 23:59 <<< 'osascript -e "zamknij aplikację \" Mail \ ""; pmset sleepnow ”nie działa dla mnie. Mówi „praca 1 w sob. 30 kwietnia 12:47:00 2016”, ale nie uruchamia polecenia, gdy nadejdzie czas
oluckyman
0

Oto kod, który będzie czekał kilka sekund przed zamknięciem bieżącej aplikacji i przejściem w tryb uśpienia.

delay (your amount of seconds here)
tell application "System Events"
    key down {command}
    keystroke "q"
    key up {command}
    set volume "1"
    say "computer going to sleep"
    tell application "Finder"
        sleep
    end tell
end tell
imagophereatingapickle
źródło