AppleScript: controlla se è stato caricato "Eventi di sistema"

0

Quando un utente di Active Directory (AD) esegue l'accesso, il mio AppleScript si attiva e tenta di inserire la directory home di AD nella barra laterale per un accesso più semplice all'apertura e al salvataggio dei documenti.

Funziona alla grande, ma circa il 10% delle volte fallisce perché "Eventi di sistema" non è stato caricato. Ho provato ad aggiungere ritardi usando:

do shell script "sleep 2"

Ma questo non risolve il problema. Ho messo il ritardo fino a quattro secondi, e anche se aiuta, non è certamente l'ideale.

Sarebbe molto più semplice se potessi in qualche modo rilevare quando è stato caricato il processo "Eventi di sistema". Qualcuno sa come farlo all'interno di AppleScript?

    
posta MorganR 09.10.2013 - 11:34
fonte

1 risposta

2

Il processo degli eventi di sistema non inizia al login, quindi il ritardo potrebbe essere necessario per qualche altro motivo. Anche gli eventi di sistema vengono automaticamente interrotti se non vengono utilizzati per alcuni minuti.

Probabilmente non ti sarà d'aiuto, ma potresti provare a lanciare Eventi di sistema all'inizio dello script:

launch application "System Events"

Potresti anche provare a utilizzare un agente launchd come questo per avviare un processo degli eventi di sistema all'accesso:

<?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 puoi usare qualcosa come tell application "System Events" to exists process "Finder" per verificare se esiste un processo, ma ovviamente richiede di parlare con System Events. In questo caso potresti anche usare uno script di shell come questo:

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 è identico a -ax (include i processi di tutti gli utenti e processi senza terminali di controllo), -c stampa i nomi dei comandi invece dei percorsi assoluti in OS X e -o comm= stampa solo i nomi dei comandi senza il riga di intestazione. Puoi sostituire il comando shell con pgrep -x 'System Events'; exit 0 in 10.8 e versioni successive.

    
risposta data 09.10.2013 - 14:01
fonte

Leggi altre domande sui tag