Вопрос: существует ли способ настроить LaunchAgent, чтобы запустить (и поддержать) сценарий при вводе определенного местоположения?
Пример: При переключении на местоположение "Office" я хочу инициировать LaunchAgent, который запускает сценарий, который открывает туннель SSH, в котором я нуждаюсь.
Mac OS X обновляет файл в /Library/Preferences/SystemConfiguration/
названный preferences.plist
. Это обновляет названный ключ CurrentSet
к UUID текущего местоположения (каждому местоположению дают UUID, когда это создается.) Можно определить название того Местоположения путем поиска UserDefinedName
введите словарь с тем же именем как UUID.
Сценарий в качестве примера:
#! /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
LaunchAgent в качестве примера для выполнения выше сценария каждый раз, когда местоположение изменено:
<?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>
Заполните путь к сценарию, дайте ему идентификатор и сохраните его с тем же именем (например. local.lajuette.location
должен быть названный файл local.lajuette.location.plist
). Скопируйте этот файл в ~/Library/LaunchAgents
и выполненный launchctl load ~/Library/LaunchAgents/name.of.plist.here.plist
. С файлами примера открывают Console.app и проверку на строку: "ДАТА => В Office" или "ДАТЕ => Из Office" соответственно.
Можно хотеть проверить: Как я могу заставить сценарий работать каждый день на Mac OS X для большего количества информации о том, как загрузить и запустить Ваш скрипт с помощью launchd, если Вы не уверены.