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

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上一个命令返回的字符串在哪里。

更改计量状态

有效的状态是yesnounknownunknown是默认值,它将根据 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)