使用 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
上一个命令返回的字符串在哪里。
更改计量状态
有效状态为yes
、no
、 和unknown
。unknown
是默认值,它将根据 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"