Le processus System Events ne démarre pas à la connexion, le délai peut donc être nécessaire pour une autre raison. System Events se désactive aussi automatiquement s'il n'est pas utilisé pendant quelques minutes.
Cela ne vous aidera probablement pas, mais vous pourriez essayer de lancer System Events au début du script :
launch application "System Events"
Vous pouvez également essayer d'utiliser un agent launchd comme celui-ci pour lancer un processus System Events à la connexion :
<?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>
Vous pouvez normalement utiliser quelque chose comme tell application "System Events" to exists process "Finder"
pour vérifier si un processus existe, mais cela nécessite évidemment de parler aux System Events. Dans ce cas, vous pourriez également utiliser un script shell comme celui-ci :
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
est identique à -ax
(comprend les processus de tous les utilisateurs et les processus sans terminal de contrôle), -c
imprime les noms de commande au lieu des chemins absolus dans OS X, et -o comm=
imprime uniquement les noms des commandes sans la ligne d'en-tête. Vous pouvez remplacer la commande shell par pgrep -x 'System Events'; exit 0
dans les versions 10.8 et ultérieures.