高效 Mac 人士必备:实现工作/家庭间网络环境切换的自动化

不知在看本文的你是否正处于如下情形:自带的Mac 设备(特指MacBook/Air/Pro 等苹果笔记本)在公司跟家里,因为使用的网络环境不同常常需要来回修改。就Jeff 本身来说,在公司的时候我会连接到公司的办公WiFi,打开内部通讯工具,Proxifier 等工作专用APP,甚至要将设备调成静音;而当我回到家连上家里的Wi-Fi,为了翻墙需要另外设置PAC 路径,同时关闭工作专用APP。第二天的上班下班再次重复同样的流程。

需要说明下,本文标题中的“网络环境”并不单单是指WiFi 的切换,更涵盖了切换网络环境前后的附属动作(即上文所说的开关某些APP 等动作)的范畴。从另外一个角度是指包括你从打开电脑前盖开始到能正常进入工作或娱乐状态前的所有操作。

基于一种理想的惰性思维(凡是重复性的动作皆可自动化),先评估下是否可以采用自动化的方式完成上述的所有操作。之前Jeff 在公司内做了一个Alfred workflow 来解决公司内三大Wi-Fi(因为涉及到公司内部信息,所以代码不便公开)的频繁切换问题,也一直用得很爽,但这种实现方式属于半自动化操作,因为最开始的触发的源头还是要靠自己手动输入关键词开启。如果要实现全自动化,则需要一个触发器(trigger)作为动作(action)的激活源头。根据上一段所言的需求,自然而然可以想到采用Wi-Fi 名(专业点的名称为SSID)——通过连接到不同的SSID 作为触发器来进行不同的动作。

能够实现这个需求的方式还蛮不少,接下来就根据Jeff 的使用经历推荐三种实现方式。前两种是借助第三方应用来实现,第三种则是调用系统原生服务来实现(也是目前Jeff 正在用的)。在介绍完每种实现方式并给出符合以上需求的例子后,会从优劣的角度来分析该种方式并提供个人建议供参考。在进入正文之前将这三种方式先罗列出来作为索引,如果你有需要,完全可以跳着来阅读接下来的内容。

目录索引

方式一:(Mac 应用)Keyboard Maestro 实现连接到指定SSID 激活自定义动作

方式二:(Mac 应用)ControlPlane 建立连接指定SSID 自动触发动作的场景

方式三:(纯代码)借助 launchd 实现Mac 系统中网络变化时自动触发并运行指定脚本

Keyboard Maestro 实现连接到指定SSID 激活自定义动作

简介

Keyboard Maestro 是Mac 上一款比较出名的应用,应用名直译为“键盘大师”,但其实其能做的东西远远超出“键盘”的范畴。Keyboard Maestro 自带了数量非常丰富的触发器(trigger)及相应的动作(action)(如下图)。本文需求的实现则是利用了其中的“Wi-Fi Network Trigger”。

实现

以在我司内的办公WiFi 为例,要实现我们的需求:首先是进入应用的Keyboard Maestro Editor,新建一个Mocros(可以理解为一个使用场景)命名为Office,添加“触发器”为指定连接到指定SSID。添加“动作”分别如下:

1、延迟5s 运行(为防止过于场景的触发过于频繁);2、运行指定applescript 脚本(包括设置PAC 等Keyboard Maestro 本身没有提供的Action);3、设备静音;4、依次打开内部通讯工具、Proxifier 并隐藏;5、提供个Notification 告诉我任务已经执行完毕了。

回到家里的场景也按照来如法炮制。基本上通过上面的方式就可以很容易的实现我们的需求。

评价

优势:应用本身提供了非常多的触发器及动作,操作便捷,流程清晰明了。

劣势:收费应用($36),功能强大的同时必然占据些系统性能,对单一需求有点大材小用

建议:适合不具备编程经验+不介意价格的用户

ControlPlane 建立连接指定SSID 自动触发动作的场景

简介

ControlPlane 是一个根据用户不同使用场景(context)而执行相应系统设置适配的应用。提供的触发器及动作也基本能满足不少使用需求。

实现

以在公司的场景为例,进入到偏好设置:

1、在“context”一栏新建名为“Work”的场景;2、点击到“Evidence Sources”栏,选择触发器为“Nearby WiFi NetWork”; ControlPlane

3、点击到“Rules”栏,左下角新建将与“Nearby WiFi NetWork”选择为“WiFi SSID”,选择需要的公司的办公WiFi。注意Conifidence 要调到尽可能大(过小后续会无法触发,尚不知原因)。4、最后在“Action” 根据需求添加需要的动作即可。

在家里的“Home”的场景也类似,这里就不再累述。

评价

优势:免费应用,使用对象明确。

劣势:图标丑陋(个人看法),设置时候的交互不那么人性化。有时候定义场景(context)的触发会过于敏感。

建议:适合不具备编程经验的用户 + 免费首选

借助launchd 实现Mac 系统中网络变化时自动触发并运行指定脚本

简介

launchd是在Mac 上自带的一个执行定时任务的服务(相当于Linux 上的crontab),其通过plist 文件进行配置。launchd支持的属性有定时任务(StartCalendarInterval),启动运行程序(Startup Process),监控文件变动(WatchPaths)等。

在Mac 上,当网络有变化的时候(如关闭/开启WiFi,连接到不同SSID 等),/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist这个文件就会有变化。因此借助launchd 服务中的WatchPaths特征,就可以实现监控到该文件变化的时候执行指定的脚本文件。

实现

launchd 的常规配置步骤比较繁琐,包括编辑plist 文件,放置文件到指定文件夹,通过命令行启用等等。Jeff 在深入了解其步骤后将这个过程用Python 写了个方便配置的“一键生成”小工具。

Github 地址:https://github.com/Jeff2Ma/launchd-with-networkchange (欢迎给个star 哦!)

使用方法见Github 上的README。囿于篇幅,在这里恕不再重复。你可以在Repo 中的example.sh 的基础上复制一份,重命名为dynamic.sh并根据个人具体需求改写代码。example.sh与dynamic.sh在同一个目录的时候,dynamic.sh会被优先执行。

配置好后,自动运行成功则会静静在右上角提醒:

评价

优势:轻量级,直接系统服务,兼容性好,对系统性能负担小。能实现的action 几乎无限(与你需求及能力相关)

劣势:虽然Jeff 弄了个小工具方便配置,但依然需要使用者本身具备一定的编程能力

建议:推荐够极客范的用户上手尝试 :)

结语

当你用上述三种方式的任一种实现了属于你的工作/家庭间网络环境切换的自动化,你就能享受到这其中的乐趣:来到公司上班打开 MacBook 前盖,输入用户密码后即可立刻上手工作;下班直接盖上就走,回到家也是能打开即用。工作生活场景的切换是无缝的且互不影响,该工作就工作,该下班娱乐就娱乐,思绪灵感不受阻。这是一种多么美妙的事情!

.entry img{border:0 none;}

本文首发于我司内网知识平台,略有修改。版权受相关法律保护,转载请提供原始来源为本页URL http://devework.com/mac-automatic-network.html。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算D1net

云应用程序性能管理的四大金刚

应用程序一旦迁移到了云端,管理起来就变得更困难重重了。云应用程序性能管理和性能监控工具则可以帮助识别瓶颈及其他性能度量指标。 优秀的工具有助于确定是否可以将瓶颈...

2904
来自专栏沃趣科技

Gitlab删库事件回顾,备份手段还停留在“原始社会”?

作者简介:孙朝阳 沃趣科技高级产品经理。 Gitlab简介 Gitlab是大家很熟悉的开源Git代码托管工具,国内公司大多使用社区版自行搭建私有化的内部代码托...

3556
来自专栏杨建荣的学习笔记

MySQL压力测试中定制sysbench的Lua模板

对于sysbench的定制,自己给自己定了一个小目标,但是实践的时候发现,难度比想象的要大很多。 都说Lua很简单,性能很不错,但是定制sysb...

44510
来自专栏杨建荣的学习笔记

SQL审核的整体设计和落地

SQL审核目前已做差不多了,整个过程其实看起来,要远比我们想的c/s服务调用要复杂的多。

2082
来自专栏phodal

GitHub 更新 License 界面,让你对 License 一目了然

在前天的文章里,我们提到了 License 相关的信息,开源世界的 License 相当的复杂。 而在三个小时前,GitHub 为 License 页面添加了更...

20010
来自专栏PHP在线

PHP 的前世今生

翻译自 《Modern PHP》by Josh Lockhart PHP 现在正在经历着一场自己在编程语言中的文艺复兴。通过增加一系列新的特性(比如 name...

3956
来自专栏黑白安全

研究人员发现可公开访问的包含 1100 万条记录的 MongoDB 数据库

安全研究员Bob Diachenko发现了一个可公开访问的MongoDB数据库,其中包含43.5 GB的数据和10.999.535的Yahoo电子邮件地址。除其...

973
来自专栏程序你好

Azure AI 服务之语音识别

1632
来自专栏开源项目

走过微软20年,埋头并发编程15年,如何减少代码的认知负荷?| 码云周刊

每周为您推送最有价值的开源技术内参! 技术干货 从Visual Studio看微软20年技术变迁 spring cloud netflix 微服务使用实例 20...

55113
来自专栏信安之路

Red Team 工具集之信息收集

上图是一个 Red Team 攻击的生命周期,整个生命周期包括:信息收集、攻击尝试获得权限、持久性控制、权限提升、网络信息收集、横向移动、数据分析(在这个基础上...

1650

扫码关注云+社区

领取腾讯云代金券