0 votos

AppleScript: Comprobar si se ha cargado "System Events"

Cuando un usuario de Active Directory (AD) se conecta, mi AppleScript se dispara e intenta poner su directorio principal de AD en la barra lateral para facilitar el acceso al abrir y guardar documentos.

Funciona muy bien, pero alrededor del 10% de las veces falla porque "System Events" no se ha cargado. He probado a añadir retrasos utilizando:

do shell script "sleep 2"

Pero eso no resuelve el problema. He puesto el retardo a cuatro segundos, y aunque ayuda, ciertamente no es lo ideal.

Sería mucho más fácil si pudiera detectar de alguna manera cuándo se ha cargado el proceso "System Events". ¿Alguien sabe cómo hacer esto dentro de AppleScript?

2voto

Fuzzy Purple Monkey Puntos 702

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.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X