NetworkManager:将设备的当前连接设置为按流量计费

NetworkManager:将设备的当前连接设置为按流量计费

使用 NetworkManager,如何将设备上当前连接的连接(例如wlp2s0)设置为按流量计费?

如何取消设置,以便仍然会猜测计量/未计量状态?

注意:有些热点将被计量(例如我的手机),而有些则不会(例如家),因此在设备上设置此功能并不是我所追求的。

答案1

我真的希望这不是最好的答案:在简单的情况下它似乎很复杂,如果允许二进制 SSID 则更是如此。无论如何,这里是:

获取设备当前连接

nmcli -t -f GENERAL.CONNECTION --mode tabular device show $DEVICE | head -n1

-t是必需的,因为末尾会附加一个空格,否则 (!?)。

显示当前计量状态

nmcli -f connection.metered connection show $CONNECTION

$CONNECTION上一个命令返回的字符串在哪里。

更改计量状态

有效状态为yesno、 和unknownunknown是默认值,它将根据 DHCP 选项等内容进行猜测ANDROID_METERED (参考)

示例:设置要计量的 $CONNECTION:

nmcli connection modify $CONNECTION connection.metered yes

允许二进制 SSID

要“正确”执行此操作(允许 SSID 中包含 32 个任意八位字节),您需要使用设备GENERAL.CON-PATH

nmcli -t -f GENERAL.CON-PATH --mode tabular device show DEVICE | tail -n1

这将返回一个类似的字符串:/org/freedesktop/NetworkManager/ActiveConnection/39

然后使用这个路径获取联系GENERAL.CON-PATH.注意:这有一个不同的值(设备的CON-PATH== 连接的GENERAL.DBUS-PATH

nmcli -t -f GENERAL.CON-PATH -m tabular connection show apath /org/freedesktop/NetworkManager/ActiveConnection/39

这将返回一个字符串,如:(/org/freedesktop/NetworkManager/Settings/5注意 no ActiveConnection)。然后可以使用它来修改连接:

nmcli connection modify /org/freedesktop/NetworkManager/Settings/<NUMBER> connection.metered <VALUE>

答案2

改编自@TomHale-s 的答案,以获得积极的连接状态:

CONNECTION_UUID=$(nmcli -t -m multiline -f UUID connection show --active | head -n1 | cut -c 6- )

METERED=$(nmcli -t -m multiline -f connection.metered connection show "$CONNECTION_UUID" | cut -c 20-)

# possible values are "yes", "no", "unknown":
echo "$METERED"

相关内容