[Mac] 使用 Control Plane 在特定情境執行特定動作
身為工程師都是很懶的,總是希望事情可以自動化做好 😛
在 Android 手機上我用了 Llama 來幫我做事,
在 Mac 電腦上其實也有類似的需求,像是
「我想要電腦在連上家裡的 Wifi 後,就自動執行一個 shell script 連上公司的 VPN」
問題是,這要怎麼做到呢?
因為我都是關閉 Mac 螢幕後,帶回家打開螢幕,
Mac 醒來之後會自動連上 Wifi,我再手動連 VPN~
因此原本考慮的是如何在 Mac 休眠醒來之後自動做事,
結果在 Possible to run scripts on sleep and wake? 這篇看到更好的東西,
有人推薦了他自己寫的 ControlPlane 軟體,
試用了一下也真的是不錯,而且是免費軟體喔~
1. 安裝 ControlPlane
到 ControlPlane 的首頁,就可以下載軟體安裝~
2. ControlPlane 的一般設定
第一次執行時,會自動建立一個叫 Automatic 的 context…
先點選 Open Preferences 看看設定~
在 General 這邊,可以把 “Start ControlPlane at login” 勾起來~
3. 建立情境 Context
ControlPlane 裡面的 Context 代表的是一個情境,
ControlPlane 會藉由觀察一些資料 (Evidence Sources),
經由規則 (Rules) 的判斷,來決定現在處於哪一種 Context 之下~
像下面我是把預設的那個 Automatic context 名稱改掉,
改成 Home network connected 這個名稱:
那麼什麼時候會進入這個 Context 呢?
這邊就要靠 Evidence Sources 裡的資料來源了,
像我只要連到家裡的 Wifi 就認為是進入 Home network connected 情境,
因此我選了 Nearby WiFi Network 這個資料來源:
在 Evidence Sources 這邊勾起來的東西,就可以在 Rules 這邊使用~
我加了一個 Nearby WiFi Network 的 Rule,
只要連到的 Wifi AP 的 SSID 是家裡的 WiFi AP 的話,
就代表進入 Home network connected 情境了:
這邊還可以調整這條 rule 的信心程度,
像我很確定連到家裡 Wifi 就代表進入 Home network connected 情境,
因此就調整成 100%~
(ControlPlane 只有在信心程度超過某個預設值時,才會認為情境確立,可以執行動作)
這邊要注意的是,Rules 這邊可以設定很多個 Rule,
但每個 Rule 其實是互相沒有關連的。
就算有一堆 Rule 都是用來設定同一個 Context,那也只是從那一堆 Rule 中,
找出較高的「目前是否為這個情境」的信心程度而已~
原本我沒有理解正確,以為它是像 Llama 一樣,多個 Rule 代表 (AND) 要同時成立,
結果一試才發現,只要有一條 Rule 中了就進入該情境了~
4. 設定情境要執行的動作
在 Actions 這邊可以設定進入或離開情境時,要執行的動作~
像我想要在進入 Home network connected 情境時,
執行我的 login_vpn.sh,因此就選擇 System Actions > Run Shell Script:
接著設定好在進入情境時 (On arrival),立刻 (Delay: None) 執行 login_vpn.sh~
5. 測試設定好的情境與動作
如果情境設定正確的話,那麼在正確的環境下,
應該可以從 ControlPlane 圖示 > Active Context 下,
看到設定的情境被選擇了~
不過 ControlPlane 不像 Llama 有「測試動作」這個功能~
(老實說 Llama 有 AND/OR 的條件設定以及測試動作,
還是比較方便,可惜它沒有 Mac 版本)
因此要測試動作的話,還是得自己試著離開情境再進入看看,
像我可能就是先關掉 Wifi,再打開 Wifi,
看看 ControlPlane 會不會正確的執行我設定的 login_vpn.sh~
雖然 ControlPlane 的設定在一開始不算很直覺,
但習慣了也就 OK 了~可以試試看~自動化可以省不少時間喔~^^