Desde la LSPM: Apagar el Mac mediante la inserción de una memoria USB con AppleScript, por Juan de Dios Santander

Script_Editor_big_Icon.jpgHace ya bastante tiempo, se preguntó lo siguiente en la LSPM: “Como voy a tener un Mac Mini enchufado principalmente para funciones P2P, voy a intentar manejarlo por acceso remoto, pero esto puede crear algún inconveniente cuando quiera dejarlo funcionando y tenga que ser otra persona quien apague el ordenador de la red eléctrica . No creo que pueda enseñarle cómo hacerlo remotamente, pero también sería mucho más cómodo no depender de un segundo ordenador para apagar el Mini. Por eso me venía preguntando si habría manera de programar algún _script_ autoarrancable desde una memoria USB que hiciese de “interruptor”, y que al insertarlo en el puerto USB éste “enviase” una orden reconocible para que el Mini se apagase.”

La primera respuesta es que un sistema así causaría un serio problema de seguridad en cualquier ordenador: insertar un “USB de la muerte” apagaría cualquier Mac en el que lo insertásemos, y evidentemente no sería de recibo. ¿Qué podríamos hacer para que se pudiese hacer ese apagado de forma segura?

Una posible solución es crear un archivo con un nombre determinado en la llave USB, por ejemplo ApagarMacMini.txt en el primer nivel de una memoria USB que se llame LlaveApagado. Si activamos en LlaveApagado las Acciones de Carpeta (por ejemplo, con el menú de contexto del Finder, en la opción Más > Configurar Acciones de Carpeta). Se podía añadir una acción para el caso de que hubiera contenido nuevo en la carpeta /Volumes, y si ese contenido nuevo es LlaveApagado, lanzar un AppleScript para apagar el equipo.

Una forma que puede tener ese AppleScript es la siguiente:

do shell script "shutdown" user name "usuario" password "contraseña" with administrator privileges

Donde usuario es un usuario administrador de la máquina, y contraseña es su contraseña correspondiente. Pero esto sólo resuelve el problema del apagado: ¿cómo estamos pendientes de que se ha incluido la unidad Flash que buscamos, con el archivo que determina el apagado?

Podemos asignar una acción de carpeta a la carpeta /Volumes para comprobar cuándo cambia, porque es en esta carpeta donde se montan las diferentes unidades. Para ello, podemos ir a /Volumes con el menú Ir > Ir a la carepeta… del Finder. Una vez en esa carpeta, podemos elegir el menú contextual del Finder Más > Configurar acciones de carpeta.

Con Configurar acciones de carpeta abierta, asignamos el siguiente script, que habremos llamado DetectarUSBcierre.scpt, y que habremos guardado con el Editor de Scripts en /Library/Scripts/Folder Action Scripts:

on adding folder items to this_folder after receiving added_items

    try

        tell application "System Events"

            if exists file "/Volumes/LlaveUSBCierre/ApagarEquipo.txt" then

                do shell script "shutdown" user name "usuario" password "contraseña" with administrator privileges

            end if

        end tell

    end try

end adding folder items to

El resultado en Editor de Scripts tras darle al botón Compilar debe ser así:

Hay que tener cuidado al copiar las comillas, que deben ser comillas simples ("). Podemos también descargar el script casi listo para descargar haciendo clic sobre la imagen; hay que descomprimirlo, editar el nombre de usuario y contraseña, y moverlo a /Library/Scripts/Folder Action Scripts.

Y este es el pantallazo de cómo queda Configurar acciones de carpeta tras haber activado las Acciones de carpeta (casilla superior), añadido la carpeta /Volumes, y la acción DetectarUSBCierre.scpt para la carpeta /Volumes.

Una vez configurado, bastará con introducir nuestra memoria USB, que deberá llamarse, tal y como hemos especificado, LlaveUSBCierre, y que debe contener un archivo ApagarEquipo.txt en el nivel _más alto_ de dicha memoria.

Probando el sistema

Si queremos probar el funcionamiento del sistema sin apagar el equipo, podemos cambiar esta línea:

do shell script "shutdown" user name "usuario" password "contraseña" with administrator privileges

por esta otra:

display dialog "Acaba de insertarse la memoria USB LlaveUSBCierre que incorpora el fichero para el apagado" buttons {"OK"} default button 1 giving up after 30

que mostrará un aviso sí y solo si se inserta la LlaveUSBCierre con el archivo correspondiente, pero no iniciará ningún apagado.

Otros usos

Por supuesto, la idea de apagar el ordenador con un AppleScript ya autorizado permite que cualquier aplicación que pueda lanzar _scripts_ tenga acceso al apagado incondicional del ordenador. Un ejemplo podría ser usar una aplicación como Proximity para apagar un ordenador si un determinado móvil Bluetooth se acerca (puede ser una broma pesada, o una medida de protección ;-)), o programar alguna regla de Mail para apagarlo todo. Éste último ejemplo lo detalla muy bien Macnolo Santana en su bitácora Zarachrome: “Apagar el Mac a distancia

Posibles modificaciones

Puede que todas nuestras memorias USB se llamen igual, o que queramos que se apaguen diferentes equipos con diferentes memorias. Se puede cambiar el AppleScript para que se busquen diferentes archivos o diferentes nombres de memoria USB, o diferentes archivos independientemente del nombre de la memoria. También podemos usar diferentes nombres de archivo en diferentes ordenadores, y tener una “memoria maestra” que incluya todos los archivos que buscan los diferentes ordenadores (tendrían que tener un nombre creativo, o relacionado con cada ordenador, para que no sea fácil de replicar).

Otra modificación es añadir antes del comando do shell script algo como tell application "Finder" to beep, o lanzar la reproducción de algún sonido específico, o incluso usar tell app "System Events" to say "Shutting down computer." para que tengamos realimentación sonora de que, efectivamente, ha comenzado el apagado.

Un artículo de Juan de Dios Santander en Memoria de Acceso Aleatorio

0 0 votos
Article Rating
Subscribe
Notify of
0 Comments
Opiniones Inline
Ver todos los comentarios
0
Me encantaría saber tu opinión, por favor, deja un comentariox
()
x