让NetworkManager在某个连接启动和停止时自动执行特定命令

本篇介绍如何配置 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。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注