Mac OS 自动根据WI-FI名字改变网络位置

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

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

原开源项目在这里

安装与设置

设置很简单。

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

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

  1. 设置。

    如果你的位置名称WIFI名称不一致,不用设置你直接都可以使用了。

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

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

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

    1
    2
    3
    ︿( ̄︶ ̄)︿.=home
    ︿( ̄︶ ̄)︿=home
    TrustAsiaEAP=office

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

  2. 切换日志会写入~/Library/Logs/LocationChanger.log文件, 如下命令可以查看。

    1
    $ tail -f ~/Library/Logs/LocationChanger.log

效果

现在我们切换一下WIFI看下效果。

当前

切换一下WI-FI。

我连接的是我手机的Wi-Fi,没有为该WI-FI配置位置,就自动切换到了Automatic。

看看日志:

1
2
3
4
5
6
7
$ 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)

再切换回来:

1
2
3
4
[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添加以下脚本:

1
2
3
4
#!/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下添加以下脚本

1
2
3
4
#!/usr/bin/env bash
exec 2>&1

osascript -e 'tell application "System Events" to tell appearance preferences to set dark mode to false'

完整步骤:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ 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, 这个苹果自带的命令很厉害,值得多学习一下。