AppleScript: verifique si “Eventos del sistema” se ha cargado

0

Cuando un usuario de Active Directory (AD) inicia sesión, mi AppleScript se activa e intenta colocar su directorio de inicio de AD en la barra lateral para facilitar el acceso al abrir y guardar documentos.

Funciona muy bien, pero aproximadamente el 10% del tiempo falla porque "Eventos del sistema" no se ha cargado. He intentado agregar retrasos utilizando:

do shell script "sleep 2"

Pero eso no resuelve el problema. Puse el retraso hasta cuatro segundos, y aunque ayuda, ciertamente no es lo ideal.

Sería mucho más fácil si pudiera detectar de alguna manera cuando se haya cargado el proceso de "Eventos del sistema". ¿Alguien sabe cómo hacer esto dentro de AppleScript?

    
pregunta MorganR 09.10.2013 - 11:34

1 respuesta

2

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.

    
respondido por el user495470 09.10.2013 - 14:01

Lea otras preguntas en las etiquetas