El proceso de Eventos del Sistema no se inicia al iniciar la sesión, por lo que el retraso podría ser necesario por alguna otra razón. Eventos del Sistema también se elimina automáticamente si no se utiliza durante unos minutos.
Probablemente no sirva de nada, pero podrías probar a lanzar Eventos del Sistema al inicio del script:
launch application "System Events"
También puede intentar usar un agente launchd como este para lanzar un proceso de Eventos del Sistema al iniciar la sesión:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd>
<plist version="1.0">
<dict>
<key>Label</key>
<string>test</string>
<key>Program</key>
<string>/System/Library/CoreServices/System Events.app/Contents/MacOS/System Events</string>
<key>RunAtLoad</key> <!-- run at login -->
<true/>
<key>KeepAlive</key> <!-- run the program again if the previous program terminates -->
<true/>
</dict>
</plist>
Normalmente se puede utilizar algo como tell application "System Events" to exists process "Finder"
para comprobar si existe un proceso, pero obviamente requiere hablar con System Events. En este caso también se podría utilizar un shell script como este:
repeat 100 times
do shell script "ps -eco comm= | grep -x 'System Events'; exit 0"
if result is not "" then exit repeat
delay 0.1
end repeat
ps -e
es idéntica a -ax
(incluye los procesos de todos los usuarios y los procesos sin terminales de control), -c
imprime los nombres de los comandos en lugar de las rutas absolutas en OS X, y -o comm=
imprime sólo los nombres de los comandos sin la fila de cabecera. Puede reemplazar el comando del shell con pgrep -x 'System Events'; exit 0
en 10.8 y posteriores.