Mac OS 给我们提供了一个 Network Location 的功能,我们可以在不同的 Location 下设置不同的 DNS/VPN 等等。然而每次实际位置变化后,都要我们手动去切换。由于我在公司和家里使用的DNS服务器并不相同,很多时候到公司发现一些公司的内网连接不上了,反复检查 才想起来,哦?位置忘切换了!
我想,能不能根据地理位置改变这个 Location 呢?Google 一圈发现并没有。但是有人提供了另外一种方式。那就是根据 WI-FI 的名字,修改该 Location。一般 WI-FI 名字不会经常改变,所以这也是间接实现该需求了。
原开源项目在这里。
安装与设置
设置很简单。
- 安装该脚本。
$ curl -L https://github.com/eprev/locationchanger/raw/master/locationchanger.sh | bash
这会需要你输入密码。自动将locationchanger
脚本安装到了/usr/local/bin
目录。
设置。
如果你的位置名称WIFI名称一致(如 Localtion 是 home, WIFI 名字也是 home),不用设置你直接都可以使用了。
如果你和我一样,位置的名称与 WIFI 名称并不一致,或者多个 WIFI 对应于同一个位置,你可以跟着我设置一下。
$ mkdir ~/.locations $ touch ~/.locations/locations.conf
修改
lcoations.conf
文件,并保存。如:︿( ̄︶ ̄)︿.=home ︿( ̄︶ ̄)︿=home TrustAsiaEAP=office
前面是WI-FI名称,后面是位置名称。
切换日志会写入
~/Library/Logs/LocationChanger.log
文件, 如下命令可以查看。$ tail -f ~/Library/Logs/LocationChanger.log
效果
现在我们切换一下 WI-FI 看下效果。
当前
切换一下 WI-FI。
我连接的是我手机的 Wi-Fi,没有为该 WI-FI 配置位置,就自动切换到了 Automatic。
看看日志:
$ tail -f ~/Library/Logs/LocationChanger.log
[2019-04-06 04:59] Connected to 'Razeen.Cheng-iPhone'
[2019-04-06 04:59] Will switch the location to 'Razeen.Cheng-iPhone'
[2019-04-06 04:59] Location 'Razeen.Cheng-iPhone' was not found. Will default to 'Automatic'
[2019-04-06 04:59] Changing the location to 'Automatic'
CurrentSet updated to 3E129B23-9186-447F-A402-7EDFFDA16C72 (Automatic)
再切换回来:
[2019-04-06 05:01] Connected to '︿( ̄︶ ̄)︿.'
[2019-04-06 05:01] Will switch the location to 'home' (configuration file)
[2019-04-06 05:01] Changing the location to 'home'
CurrentSet updated to 710A1F1F-D207-4CF8-A36E-268FF3EE2C9E (home)
很方便,再也不用担心忘记切换位置了~
更多功能
其实,该脚本的强大之处就是监听了系统的网络切换事件。不仅可以在切换的时候切换 NetWork Location, 还可以自动运行一些自定义脚本。设置起来同样简单。
如,我要切换到office
位置的时候,打开Dark Mode
, 当我到home
或其他位置时关闭Dark Mode
。
只需要我在~/.locations/office
添加以下脚本:
#!/usr/bin/env bash
exec 2>&1
osascript -e 'tell application "System Events" to tell appearance preferences to set dark mode to true'
在~/.locations/home
和 ~/.locations/Automatic
下添加以下脚本
#!/usr/bin/env bash
exec 2>&1
osascript -e 'tell application "System Events" to tell appearance preferences to set dark mode to false'
完整步骤:
$ touch ~/.locations/office ~/.locations/home ~/.locations/Automatic
$ cat > ~/.locations/office << EOT
#!/usr/bin/env bash
exec 2>&1
osascript -e 'tell application "System Events" to tell appearance preferences to set dark mode to true'
EOT
$ cat > ~/.locations/home << EOT
#!/usr/bin/env bash
exec 2>&1
osascript -e 'tell application "System Events" to tell appearance preferences to set dark mode to false'
EOT
$ cat > ~/.locations/Automatic << EOT
#!/usr/bin/env bash
exec 2>&1
osascript -e 'tell application "System Events" to tell appearance preferences to set dark mode to false'
EOT
$ chmod +x Automatic home office
然后切换 Wi-Fi 你就能看到效果了~
最后,提一下osascript
, 这个苹果自带的命令很厉害,值得多学习一下。