暮光博客

小心你讨厌的东西,因为你很可能被它塑造成某种形状

Hammerspoon 实现 macOS 位置自动切换

折腾 13 条评论

每天上下班都要在公司与家里的 WiFi 来回切换,并且我们公司需要固定 IP、网关与 DNS。这意味着,每次上下班都要变更网络设置。macOS 自带的位置选择可以轻松地切换不同的网络环境,至少这个设定可以节省每天用来填固定 IP 花费的一分钟。

但是我是不满足于此的。

用Alfred实现位置一键切换

后来我找到了 Alfred 的一个 WorkFlow,唤出 Alfred 输入loc即可「一键」切换网络位置。
这个方式更为便捷,毕竟能用键盘就不要用鼠标了,这也是我一直在使用的一种方式。

Hammerspoon 实现 macOS 位置自动切换

Hammerspoon 介绍

直到昨天,我发现了 Hammerspoon 这款神器。关于 Hammerspoon 的简介,可以阅读一下 v2ex 上的安利帖子:https://www.v2ex.com/t/553241,这里只截取一小段:

Hammerspoon 是 MacOS 上的自动化工具,许多介绍 Hammerspoon 的文章都主要介绍了它是一个窗口管理工具,但是 Hammerspoon 能做到的远远不仅如此。 Hammerspoon 开源、免费和支持插件,将大多数系统层面的接口封装成了 Lua API,这就让这把小锤子在 MacOS 上近乎无所不能,可玩性极高。

Hammerspoon 提供了很多开放 API,用户可以随心所欲地使用 Lua 编写脚本实现某些具体需求的自动化,其中就包括 WiFi 切换监控,这也就为「网络位置自动切换」提供了可能:识别不同的 WiFi SSID 以作出不同的指令。
当然,Hammerspoon 能做的还有很多,感兴趣的可以直接去看看它的 GitHub

用 Hammerspoon 实现位置自动切换

监控 WiFi 切换并执行相关指令,编写以下 Lua 脚本:

function ssidChangedCallback() -- 回调
    ssid = hs.wifi.currentNetwork() -- 获取当前 WiFi ssid
    if (ssid ~= nil) then
        if (ssid == 'Company') then
            uid = "C4A43BA2-1DDE-4C22-BECB-1D3DA2719CBA" -- 公司的位置 uid,后面会讲
            hs.notify.new({title="位置", informativeText="位置切换到公司"}):send() -- 发出通知
        else
            uid = "7500A4F7-72BD-4ABB-9D31-3934BBE13F39"
            hs.notify.new({title="位置", informativeText="位置切换到家里"}):send()
        end
        os.execute("scselect " ..uid .." > /dev/null") -- 切换网络位置
    end
end

wifiWatcher = hs.wifi.watcher.new(ssidChangedCallback)
wifiWatcher:start() -- 开始监控

代码里可以看出,网络位置的切换是用 scselect 命令完成的,然后此命令的参数需要一个 uiduid 的获取很简单,在终端里执行 scselect 就能拿到了。

Hammerspoon 实现 macOS 位置自动切换

当然,一切需要在 WiFi 切换后执行的指令都可以在脚本中完成,比如开关虚拟机、自动 PUSH/PULL 代码,前提是懂一点点 Lua。
每天又为自己节省了两秒钟的时间,真开心。

罗技 MX Master 2S 鼠标的设计缺陷
评论区 / 取消回复
选择表情选择表情
  1. 云点

    公司的网络设置确实烦人 icon_mad.gif

    回复
  2. workflow 是哪个。。。

    回复
    1. @碰

      https://github.com/gyk001/alfred-switch-network-location

      回复
  3. 可以加友链么?我已经加你很久了!

    回复
    1. @www.qian.lu

      已添加。

      回复
      1. @大袋鼠

        https://manman.qian.lu/bokeshu 在这个页面也增加了你的推荐

        回复
  4. 这个软件我看到过。对于家里蹲的人没用。

    回复
  5. 还不错。

    回复
  6. 哇,技术大牛,这都能解决,厉害

    回复
  7. Windows有没有类似的软件呢?

    回复
    1. @antior

      Win平台目前还没发现…

      回复
  8. 高手。。

    回复
    1. @老虎

      就是随便折腾啦 icon_redface.gif

      回复