8 votos

¿Cómo puedo crear un AppleScript que salga de una aplicación a una hora determinada y ponga el ordenador en reposo?

He estado jugando con AppleScript y Automator para conseguir que esto funcione, pero no consigo entenderlo. Si alguien puede mostrarme un ejemplo o darme algunos consejos sobre cómo puedo configurar una aplicación para que se cierre a una hora específica y luego poner el ordenador en reposo o apagado, sería muy apreciado.

0 votos

¿Ya tienes escrito el AppleScript?

16voto

ephsmith Puntos 1627

Asumo que quieres iniciar este procedimiento en lugar de que se ejecute a una hora regular.

Mi enfoque sería iniciar esto desde la línea de comandos, pero cualquier comando puede ser ejecutado en un componente del shell script de un Automator script con alguna modificación. El siguiente enfoque combina algunos componentes para hacer el trabajo:

  1. A tell para salir de la aplicación
  2. Una llamada a la línea de comandos para poner el ordenador en reposo
  3. Una llamada a la línea de comandos para programar 1 y 2 para una hora específica.

1. Decirle a la aplicación que abandone

Esto puede ser tan simple como:

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

2. Poner el ordenador en reposo

Echa un vistazo a pmset para más detalles, pero al emitir el siguiente comando su ordenador entrará en reposo:

pmset sleepnow

3. Programar una operación para que se ejecute en un momento determinado

Echa un vistazo a la en de mando. Este comando te da la posibilidad de especificar una hora para que se ejecute un comando. Tendrá que habilitar esta funcionalidad ya que no está por defecto. Para habilitar el comando atrun daemon, ejecute el siguiente comando [referencia en SU] :

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

Una vez que hayas habilitado atrun cualquier comando puede ser programado para una hora específica emitiendo

echo "<command>" | at HH:MM

que funciona porque at toma su entrada de stdin por defecto. Un enfoque más sencillo es ejecutar los comandos listados en un archivo. Un archivo puede ser ejecutado usando la función -f seguido del nombre del script que se ejecutará así:

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

Ponerlo todo junto

Lo que sigue supone que atrun está activado. Como un ejemplo de juguete, digamos que quiero salir de Mail y poner la computadora a dormir a las 11PM. Crearía un archivo que contenga los comandos que quiero que se ejecuten de la siguiente manera:

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

Guarde ese archivo en quit-and-sleep y luego ejecutar en la línea de comandos

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

Advertencias

No hice ninguna comprobación para asegurarme de que el correo se cerraba realmente. El scripttambién asume que nada más se va a interponer en el camino de poner el ordenador a dormir. Lo he mantenido simple aquí como un punto de partida para lo que quieres.

2voto

Puedes programar un evento una vez con at:

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

O para programar que se repita cada día, edita el crontab con EDITOR=nano crontab -e y añadir una entrada como esta:

59 23 * * * osascript -e 'quit app "Mail"'; pmset sleepnow

1voto

Paul Skinner Puntos 21

Aquí hay una versión estrictamente applescript que logra esto dado un valor de tiempo codificado. Por supuesto, puedes hacer esta parte interactiva si quieres. Además, esta versión asume que la cadena de tiempo se refiere a hoy.

--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

0voto

Este es el código que esperará una cantidad de segundos antes de salir de la aplicación actual e ir a dormir.

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

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X