macOS action on network change
macOS – with its Posix roots – does come with a couple of useful network services auh as
sshfs to name a few. When moving around, I join different networks and in each network, I ant to have different resources available. The following collection of scripts makes it possible to mount and unmount resources depending on location.
launchd can bee used to observe a couple of files. When they change something in the network configuration has changed:
<?xml version="1.0" encoding="UTF-8"?> <!-- see `man 5 launchd.plist` --> <!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>net.wunderlin.launch.network-change</string> <key>LowPriorityIO</key> <true /> <key>ProgramArguments</key> <array> <string>/Users/Shared/bin/network-change.sh</string> </array> <key>WatchPaths</key> <array> <string>/etc/resolv.conf</string> <string>/Library/Preferences/SystemConfiguration/NetworkInterfaces.plist</string> <string>/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist</string> </array> <key>RunAtLoad</key> <true /> </dict> </plist>
1#!/usr/bin/env bash 2 3# check for search domain 4SEARCH=$(grep search /etc/resolv.conf) 5 6syslog -l 5 -s "network-change.sh $SEARCH"
1#!/usr/bin/env bash 2 3mkdir -p /Users/Shared/bin 4cp network-change.sh /Users/Shared/bin/ 5cp network-change.plist /Library/LaunchDaemons 6launchctl load /Library/LaunchDaemons/network-change.plist 7launchctl list | grep net.wunderlin