Mac OS 给我们提供了一个 Network Location 的功能,我们可以在不同的 Location 下设置不同的 DNS/VPN 等等。然而每次实际位置变化后,都要我们手动去切换。由于我在公司和家里使用的DNS服务器并不相同,很多时候到公司发现一些公司的内网连接不上了,反复检查 才想起来,哦?位置忘切换了!

我想,能不能根据地理位置改变这个 Location 呢?Google 一圈发现并没有。但是有人提供了另外一种方式。那就是根据 WI-FI 的名字,修改该 Location。一般 WI-FI 名字不会经常改变,所以这也是间接实现该需求了。

原开源项目在这里

安装与设置

设置很简单。

  1. 安装该脚本。
$ curl -L https://github.com/eprev/locationchanger/raw/master/locationchanger.sh | bash

这会需要你输入密码。自动将locationchanger脚本安装到了/usr/local/bin目录。

  1. 设置。

    如果你的位置名称WIFI名称一致(如 Localtion 是 home, WIFI 名字也是 home),不用设置你直接都可以使用了。

    如果你和我一样,位置的名称与 WIFI 名称并不一致,或者多个 WIFI 对应于同一个位置,你可以跟着我设置一下。

    $ mkdir ~/.locations
    $ touch ~/.locations/locations.conf
    

    修改lcoations.conf文件,并保存。如:

    ︿( ̄︶ ̄)︿.=home
    ︿( ̄︶ ̄)︿=home
    TrustAsiaEAP=office
    

    前面是WI-FI名称,后面是位置名称。

  2. 切换日志会写入~/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, 这个苹果自带的命令很厉害,值得多学习一下。