launchd: iniciar script ao entrar em um local

2

Pergunta: Existe uma maneira de configurar um LaunchAgent para iniciar (e manter vivo) um script ao entrar em um local específico?

Exemplo: Ao mudar para o local "Office" eu quero disparar um LaunchAgent que inicia um script que abre um túnel SSH que eu preciso.

    
por lajuette 29.04.2010 / 22:32

1 resposta

2

O Mac OS X atualiza um arquivo em /Library/Preferences/SystemConfiguration/ chamado preferences.plist . Ele atualiza uma chave chamada CurrentSet para o UUID do local atual (cada local recebe um UUID quando é criado). Você pode determinar o nome desse Local procurando a chave UserDefinedName no dicionário com o mesmo nome como o UUID.

Exemplo de script:

#! /bin/bash

# Proof of Concept Script to check if the location changed.

CURRENT_LOCATION='/usr/libexec/PlistBuddy -c "Print :CurrentSet" /Library/Preferences/SystemConfiguration/preferences.plist | sed 's/\/Sets\///''
CURRENT_LOCATION_NAME='/usr/libexec/PlistBuddy -c "Print :Sets:$CURRENT_LOCATION:UserDefinedName" /Library/Preferences/SystemConfiguration/preferences.plist'

# If location is the one we want:
# Logger puts the message into syslog

if [ $CURRENT_LOCATION_NAME == "Office" ]; then
    logger "'date' => In the Office"

    #Commands to set up SSH Tunnel among others

else
# If the location is not the one we want: Undo whatever we have done.
    logger "'date' => Out of Office"

    #Commands here for when you leave the office location
fi

Exemplo do LaunchAgent para executar o script acima sempre que o local for alterado:

<?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>local.IDENTIFIER_HERE.SOMETHING</string>
    <key>OnDemand</key>
    <true/>
    <key>Program</key>
    <string>/PATH/TO/SCRIPT</string>
    <key>WatchPaths</key>
    <array>
        <string>/Library/Preferences/SystemConfiguration/preferences.plist</string>
    </array>
</dict>
</plist>

Preencha o caminho para o script, dê a ele um identificador e salve-o com o mesmo nome (por exemplo, local.lajuette.location deve ser um arquivo chamado local.lajuette.location.plist ). Copie este arquivo para ~/Library/LaunchAgents e execute launchctl load ~/Library/LaunchAgents/name.of.plist.here.plist . Com os arquivos de amostra, abra o Console.app e verifique a linha: "DATE = > No Office" ou "DATE = > Fora do Escritório" de acordo.

Você pode querer verificar: Como posso obter um script para ser executado todos os dias no Mac OS X para obter mais informações sobre como carregar e executar seu script usando o launchd se você não tiver certeza.

    
por 04.07.2010 / 17:23

Tags