Tom*_*ale 7 networkmanager nmcli
使用 NetworkManager,如何将设备上当前连接的连接(例如wlp2s0
)设置为计量?
我如何以这样一种方式取消它,即仍然会发生对计量/未计量状态的猜测?
注意:有些热点会被计量(例如我的手机),而有些则不会(例如家),所以在设备上设置它并不是我所追求的。
Tom*_*ale 12
我真的希望这不是最好的答案:在简单的情况下它似乎令人费解,如果允许二进制 SSID,则更是如此。无论如何,这里是:
获取设备的当前连接
nmcli -t -f GENERAL.CONNECTION --mode tabular device show $DEVICE | head -n1
Run Code Online (Sandbox Code Playgroud)
-t
是必需的,因为在末尾附加了一个空格,否则 (!?)。
显示当前计量状态
nmcli -f connection.metered connection show $CONNECTION
Run Code Online (Sandbox Code Playgroud)
$CONNECTION
上一个命令返回的字符串在哪里。
更改计量状态
有效的状态是yes
,no
和unknown
。unknown
是默认值,它将根据 DHCP option ANDROID_METERED
(reference) 之类的内容进行猜测。
示例:设置要计量的 $CONNECTION:
nmcli connection modify $CONNECTION connection.metered yes
Run Code Online (Sandbox Code Playgroud)
允许二进制 SSID
要做到这一点“正确”(在 SSID 中允许 32 个任意八位字节),您需要使用设备的GENERAL.CON-PATH
:
nmcli -t -f GENERAL.CON-PATH --mode tabular device show DEVICE | tail -n1
Run Code Online (Sandbox Code Playgroud)
这将返回一个字符串,如: /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
Run Code Online (Sandbox Code Playgroud)
这将返回一个字符串,如:(/org/freedesktop/NetworkManager/Settings/5
注意没有ActiveConnection
)。然后可以使用它来修改连接:
nmcli connection modify /org/freedesktop/NetworkManager/Settings/<NUMBER> connection.metered <VALUE>
Run Code Online (Sandbox Code Playgroud)