使用locationchanger解决macOS更换地点需要手工切换网络配置的问题

背景

最近在家里给macOS电脑配了有线网卡,使用DHCP获取IP。但是因为在公司有线网卡使用了固定IP的方式,导致需要手工切换网络位置来应用不同的网络配置,这该如何是好。

方案

经过一番查找,还真有人做了一个网络位置切换工具(点击下载安装)。原理是通过识别连接到不同WIFI的系统通知,配合脚本来进行自动位置切换。你要做的只是把每个WIFI对应切换到什么网络位置写到配置文件里就行。

分析

可以看到功能整体是依靠脚本来实现的。具体是因为系统的WIFI切换时,会有一个配置文件被更改(/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist)。这里显示出了unix系列系统一切皆文件的特点。而通过launchd提供的watchPaths功能,即可监控文件变化并执行命令(更多用法请看这里)。因此在文件变化时触发执行脚本,脚本中再读取配置文件获得当前WIFI名称,读取用户配置文件获得WIFI与位置的对应关系,通过scselect命令查询当前位置,如果与切换到的目的位置不一样,则通过scselect再执行切换动作。整个过程会在指定位置记录日志。

如果在windows下要实现类似功能,可就不是几行脚本就能搞定的了。据我所指Windows到现在好像还没有用于切换网卡配置的网络位置概念,所以我知道的切换网络位置的工具都是厂商自己实现的独立应用,如ThinkPad的Access Connections,需要你自己调用系统API来实现,来起码看起来复杂度就高了一个量级。如果在Linux下,那这件事情就更有意思了,不同的发行版可能使用了不同的网络配置管理工具,在体系内配置网卡的方式都不一样,就更不用谈搞一个通用的工具了。

后记

整个分析下来,不得不说macOS真的是继承了unix的优点,另外也添加了大量便于日常使用的自动化工具,比起linux作为桌面机更为实用和易用,比起windows更接近类unix工具体系。除了图形性能真的不行(主要是因为生态体量太小,加上有封闭自成一套的特点,大量库和软件并没有针对其平台和API进行优化),真的是相较而言最完善的系统了。当你拥有了macOS系统,用好它,确实会大大提高你的生产力。