-
Notifications
You must be signed in to change notification settings - Fork 67
/
Copy pathlocationchanger.sh
executable file
·101 lines (83 loc) · 2.68 KB
/
locationchanger.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/bin/bash
INSTALL_DIR=/usr/local/bin
SCRIPT_NAME=$INSTALL_DIR/locationchanger
LAUNCH_AGENTS_DIR=$HOME/Library/LaunchAgents
PLIST_NAME=$LAUNCH_AGENTS_DIR/LocationChanger.plist
sudo -v
sudo mkdir -p $INSTALL_DIR
cat << "EOT" | sudo tee $SCRIPT_NAME > /dev/null
#!/bin/bash
# This script changes network location based on the name of Wi-Fi network.
exec 2>&1 >> $HOME/Library/Logs/LocationChanger.log
sleep 3
ts() {
date +"[%Y-%m-%d %H:%M] $*"
}
ID=`whoami`
ts "I am '$ID'"
SSID=`/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I | grep ' SSID' | cut -d : -f 2- | sed 's/^[ ]*//'`
LOCATION_NAMES=`scselect | tail -n +2 | cut -d \( -f 2- | sed 's/)$//'`
CURRENT_LOCATION=`scselect | tail -n +2 | egrep '^\ +\*' | cut -d \( -f 2- | sed 's/)$//'`
ts "Connected to '$SSID'"
CONFIG_FILE=$HOME/.locations/locations.conf
ts "Probing '$CONFIG_FILE'"
if [ -f $CONFIG_FILE ]; then
ts "Reading to '$CONFIG_FILE'"
ESSID=`echo "$SSID" | sed 's/[.[\*^$]/\\\\&/g'`
NEW_SSID=`grep "^$ESSID=" $CONFIG_FILE | cut -d = -f 2`
if [ "$NEW_SSID" != "" ]; then
ts "Will switch the location to '$NEW_SSID' (configuration file)"
SSID=$NEW_SSID
else
ts "Will switch the location to '$SSID'"
fi
fi
ESSID=`echo "$SSID" | sed 's/[.[\*^$]/\\\\&/g'`
if echo "$LOCATION_NAMES" | grep -q "^$ESSID$"; then
NEW_LOCATION="$SSID"
else
if echo "$LOCATION_NAMES" | grep -q "^Automatic$"; then
NEW_LOCATION=Automatic
ts "Location '$SSID' was not found. Will default to 'Automatic'"
else
ts "Location '$SSID' was not found. The following locations are available: $LOCATION_NAMES"
exit 1
fi
fi
if [ "$NEW_LOCATION" != "" ]; then
if [ "$NEW_LOCATION" != "$CURRENT_LOCATION" ]; then
ts "Changing the location to '$NEW_LOCATION'"
scselect "$NEW_LOCATION"
SCRIPT="$HOME/.locations/$NEW_LOCATION"
if [ -f "$SCRIPT" ]; then
ts "Running '$SCRIPT'"
"$SCRIPT"
fi
else
ts "Already at '$NEW_LOCATION'"
fi
fi
EOT
sudo chmod +x $SCRIPT_NAME
mkdir -p $LAUNCH_AGENTS_DIR
cat > $PLIST_NAME << EOT
<?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>org.eprev.locationchanger</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/locationchanger</string>
</array>
<key>WatchPaths</key>
<array>
<string>/Library/Preferences/SystemConfiguration</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
EOT
launchctl load -w $PLIST_NAME