El proceso de eventos del sistema no se inicia al iniciar sesión, por lo que la demora puede ser necesaria por algún otro motivo. Los eventos del sistema también se eliminan automáticamente si no se utilizan durante unos minutos.
Probablemente no servirá de nada, pero puedes intentar lanzar los eventos del sistema al inicio del script:
launch application "System Events"
También puedes intentar usar un agente launchd como este para iniciar un proceso de eventos del sistema al iniciar 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 puedes usar algo como tell application "System Events" to exists process "Finder"
para verificar si existe un proceso, pero obviamente requiere hablar con los eventos del sistema. En este caso, también puede usar un script de shell 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éntico a -ax
(incluye procesos de todos los usuarios y procesos sin terminales de control), -c
imprime nombres de comando en lugar de rutas absolutas en OS X, y -o comm=
imprime solo nombres de comando sin el comando fila de encabezado Puede reemplazar el comando de shell con pgrep -x 'System Events'; exit 0
en 10.8 y versiones posteriores.