Surge实现根据WI-FI情况自动调整代理策略

假如家里路由级已经解决了科学上网,那么Mac等终端设备是没必要再重复开启代理的,不然速度会更慢,性能开销也属浪费,但是当出了家门,连到公司Wi-Fi,又或者在咖啡厅,那么又需要开启代理。OK,这个过程完全是固定模式,有办法自动吗?YES。

Surge提供了Event脚本支持,即可做到以上需求。

官方文档,参考这里

配置

主配置文件,增加以下配置

1
2
[Script]
script1 = type=event,event-name=network-changed,script-path=wifi-changed.js

wifi-changed.js脚本内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const WIFI_DONT_NEED_PROXYS = ['xiaomi_Alan_5G_1'];
const CURRENT_WIFI_SSID_KEY = 'current_wifi_ssid';

if (wifiChanged()) {
const mode = WIFI_DONT_NEED_PROXYS.includes($network.wifi.ssid)
? 'direct'
: 'rule';
$surge.setOutboundMode(mode);
$notification.post(
'Surge',
`Wi-Fi changed to ${$network.wifi.ssid || 'cellular'}`,
`use ${mode} mode`
);
}

function wifiChanged() {
const currentWifiSSid = $persistentStore.read(CURRENT_WIFI_SSID_KEY);
const changed = currentWifiSSid !== $network.wifi.ssid;
changed && $persistentStore.write($network.wifi.ssid, CURRENT_WIFI_SSID_KEY);
return changed;
}

$done();

这样,WI-FI变动下即可自动切换代理策略了。

注意:网络环境变动都会触发network-changed事件,比如VPN,为了实现只在Wi-Fi变动时才触发,因此脚本增加了$persistentStore来记录当前所连Wi-Fi。

写在最后

不得不说Surge做的真的很棒,有效的解决了网络方面的相关需求。