MacBook Air/Pro: ¿ejecutar script al cerrar la tapa?

¿Cómo se puede configurar MacOS (10.8 o superior) para llamar de forma automática e inmediata a un script designado por el usuario (probablemente un script bash) cuando el usuario cierra la tapa de la pantalla de una MacBook Air o Pro?

Detalles.

Quiero hacer esto porque, en algunos escenarios, mi MacBook Air 2013 con 10.8.5 no suspende/bloquea la pantalla de inmediato al cerrar la tapa (posiblemente porque un cliente VPN está intentando abrir una conexión). Como tal, quiero que el sistema ejecute inmediatamente un script que llame a este procedimiento de bloqueo y guardado de pantalla al cerrar la tapa. Sin embargo, no sé cómo llamar a los scripts al cerrar la tapa de la pantalla.

Respuestas (3)

No parece haber una forma de que un programa sea notificado cuando se cierra la tapa. Sin embargo, el estado de la tapa se puede monitorear periódicamente (y en este caso particular, cada segundo) y se pueden tomar acciones basadas en el estado de la tapa.

No conozco ningún programa que pueda proporcionar una solución completa para su necesidad, pero puede usar la siguiente información para crear una solución usted mismo.

  1. Descargue este script perl clamshellstate.pl
  2. Puede ejecutarlo en Terminal(bajo /Applications/Utilities) como:

    ./clamshellstate.pl 1  
    

    para obtener una salida como "Abierto" o "Cerrado" que indica el estado actual de la tapa

  3. Cree un script de shell como (sustituya script-to-run con un script de shell que le gustaría ejecutar):

    ./clamshellstate.pl 1 | grep Closed > /dev/null && *script-to-run*
    
  4. Configure este script para que se ejecute una vez por segundo usando launchd.plist . O use Lingon para configurar fácilmente launchd.plist.

Nota: En lugar de clamshellstate.pl, también puede usar el siguiente comando en Terminal:

ioreg -r -k AppleClamshellState | grep '"AppleClamshellState" = Yes' | cut -f2 -d"="

para obtener un "Sí" para el estado cerrado y un "No" para el estado abierto.

Necesita ejecutar un script al cerrar la tapa , no al dormir. Específicamente diferencio el cierre de la tapa y el sueño debido a la demora que puede ocurrir entre el cierre y el sueño (he experimentado dicho retraso empíricamente; la referencia anterior parece confirmar - "alrededor de 15 [segundos]") causando un acceso inseguro si alguien (digamos un ladrón) fueran a tomar mi MacBook segundos después de que lo cerraba (lo cual es razonable para alguien en el aeropuerto por un robo de "golpe y fuga"), lo abría y restablecía la contraseña de la cuenta que inició sesión.
Actualicé la respuesta, pero necesitaría hacer un trabajo de secuencias de comandos para desarrollar una solución completa.
El comando de terminal debe ser:ioreg -r -k AppleClamshellState | grep '"AppleClamshellState"' | cut -f2 -d"="

También puede intentar usar SleepWatcher . Consulte el archivo Léame para obtener instrucciones:

1. Instale el software SleepWatcher:

$ sudo mkdir -p /usr/local/sbin /usr/local/share/man/man8
$ sudo cp ~/Desktop/sleepwatcher_2.2/sleepwatcher /usr/local/sbin
$ sudo cp ~/Desktop/sleepwatcher_2.2/sleepwatcher.8 /usr/local/share/man/man8

2. Lea la página del manual y piense en las funciones de SleepWatcher que desea utilizar:

$ man sleepwatcher

3. Escriba pequeños scripts de shell que realicen las acciones que desea activar con SleepWacher y pruébelos.

4. Pruebe sus scripts en combinación con SleepWatcher, iniciado en primer plano en una ventana de Terminal, por ejemplo:

$ /usr/local/sbin/sleepwatcher --verbose --sleep /path/to/your/sleepscript --wakeup /path/to/your/wakeupscript ...

5. Coloque su línea de comandos de SleepWatcher en un archivo de configuración del agente de lanzamiento. Como ejemplo, puede usar uno de los plists de ~/Desktop/sleepwatcher_2.2/config. Para obtener más información sobre launchd y su configuración, consulte las páginas man de launchd y launchd.plist y http://developer.apple.com/macosx/launchd.html.

6. Copie la configuración de su agente launchd en /Library/LaunchDaemons o ~/Library/LaunchAgents, dependiendo de si necesita un daemon para todo el sistema o un agente de usuario.

7. Cargue la configuración del agente launchd mediante launchctl (consulte los ejemplos anteriores y la página man de launchctl).

sleepwatchertambién está disponible a través de MacPorts.

Puede intentar usar la aplicación ControlPlane , que puede actuar sobre varios cambios de estado en su Mac, incluso si la tapa está cerrada o no.

También es posible usar Hammerspoon para activar scripts específicos al despertar y dormir como se menciona en mi respuesta a otra pregunta. Los scripts lua podrían aumentarse para verificar el estado de la tapa usando la ioreg -r -k AppleClamshellStateprueba mencionada en la respuesta de MK aquí.