本篇介绍如何配置 Ubuntu 中 Network Manager 的 dispatcher 脚本,使某个特定连接上线或下线时自动执行相应命令。
为什么会有这个需求呢?因为我在学校的网络里有 native IPv6,在家里就没有,需要用 gogo6 的客户端获取 6over4 的连接,而在学校的时候这样就不如本地 IPv6 速度快。
这样,因为校园网的连接是一个特定的,只需要在校园网连上的时候自动停止 gogoc 服务,断开时再自动启动即可。首先我们需要到 /etc/NetworkManager/system-connections/ 中找到校园网的连接,获取它的 uuid(形如 “27f6539a-xxxx-xxxx-xxxx-947cf89d56d6” 的一串十六进制符号)。
以下内容部分参考 NetworkManager 的 manpage。NM 版本为 0.9.4.0。将以下脚本(按提示修改配置后)放到 /etc/NetworkManager/dispatcher.d/98xiaodu 中,拥有者为 root 并使其拥有执行权限。(点击下载这段脚本)
#!/bin/bash
# 要指定的连接UUID
MY_UUID="27f6539a-xxxx-xxxx-xxxx-947cf89d56d6"
# 连接上线时执行的命令
MY_UP="service gogoc stop"
# 连接离线时执行的命令
MY_DOWN="service gogoc start"
if [ "$CONNECTION_UUID" == "$MY_UUID" ]; then
case "$2" in
up|vpn-up)
exec $MY_UP
;;
down|vpn-down)
exec $MY_DOWN
;;
esac
fi
这样就可以在连接上线和下线时自动执行其中的命令,执行的权限是 root。更多信息请查看 man NetworkManager。