Items de arranque y apagado en Mac OS X

Publicado en: Tecnología

Si necesitas ejecutar comandos o scripts en el momento del arranque de tu equipo con Mac OS X, puedes crear un script y un fichero plist, colocarlo en el directorio de Librería/StartupItems o puedes programarlos y añadirlos a las variables del sistema propias de Apple y su Mac OS X. Hoy os presento a LoginHook y LogoutHook.

Mac OS X 10.4.x a veces produce un error al intentar montar el escritorio del usuario. Solo aparece su imagen personalizada de fondo de escritorio y el icono arriba a la derecha de spotlight, sin la barra de menús completa y con la ‘pelotita de colores’ girando sin parar. La solución es borrar las cachés de sistema. Y no, no pienso hacerlo cada vez, se programa una tarea de arranque automática y listo.

En cuanto a scripts que se ejecutan en la secuencia de arranque podríamos resumirla como una cadena en la que el sistema arranca los servicios mínimos del equipo (montaje de discos, red, demonios, variables de entorno…) y después cada usuario ejecuta los suyos propios.

Cada usuario puede añadir items de arranque a su panel de preferencias del sistema. Pero en Mac OS X ya no tenemos los items de apagado del equipo, primer punto para ir pensando en otra solución que no sea esta tan sencilla y limitada.

Podemos crear un script y un fichero XML con la estructura de plist que Apple nos marca. Esta solución sirve tanto para items de arranque para todos los usuarios en general (/Library/StartupItems/) o para un usuario en concreto (/Users/username/Library/StartupItems/). No es difícil de hacer, incluso puedes probarlos si funcionan sin reiniciar. Pero… esta vez no me valía, debía ejecutarse antes que esta secuencia. Así que seguí buscando soluciones.

En la secuencia de arranque existen una serie de variables de sistema que se asignan a ficheros de preferencias comunes y no comunes a todos los usuarios. El comando ‘defaults‘ permite leer, escribir y borrar estas variables por defecto del sistema.

Defaults de arranque y apagado
Con las variables LoginHook y LogoutHook podemos indicar si se ejecuta al arranque o al apagado, respectivamente.

Con este método debemos crear un script de shell con la ejecución de todos los comandos y acciones que necesitemos, lo guardamos con permisos de ejecución y añadimos la ruta a loginwindow de arranque (LoginHook) o de apagado (LogoutHook).

Una vez presentadas estas bases, podemos aplicarlas al problema inicial: el usuario no puede arrancar su escritorio de trabajo.

Para borrar las cachés simplemente basta con borrar el contenido al completo de los directorios de caché de sistema, sin entrar a borrar las de cada usuario.

Creamos el script de comandos shell que nos permita borrar el contenido de las cachés. En el directorio scripts o donde queramos guardarlo, ejecutamos el editor ‘vi’ o nuestro editor plano preferido:

shell> vi /scripts/login_clean_cache.sh

y escribimos:

#!/bin/bash

LOG="/Library/Logs/arranque.log"

rm -rf /System/Library/Caches/*
rm -rf /Library/Caches/*

echo -e "`date`: login_clean_cache Ejecutadon" >> "$LOG" 2>&1

Este fichero crea un fichero de log de ejecución simple, nos pone la fecha y un pequeño texto que nos va guardando en el fichero arranque.log un pequeño y simple historial de ejecuciones, para chequear que todo vaya bien. Y realiza las acciones fundamentales de borrar el contenido de los directorio de sistema de Cachés.

Aplicamos permisos de ejecución al fichero:

shell> sudo chmod +x /scripts/login_clean_cache.sh

Añadimos el script al fichero ‘defaults‘ del sistema siendo la variable domain com.apple.loginwindow, todo en una línea:

defaults write com.apple.loginwindow LoginHook
/scripts/login_clean_cache.sh

Y en cada reinicio del sistema se ejecutará el script de borrar cachés de sistema para que todo funcione bien en el perfil de usuario.

SaludoX

  1. OuenDinga
    |

    Hola,

    Quisiera saber si hay alguna posibilidad de hacer el «deaults write com.apple.loginwindow LoginHook /…» pero para todos los usuarios y no solamente sobre el que estamos utilizando.

    Un saludo y gracias por el aporte.