bounty还有7天到期。回答此问题可获得+50声望奖励。Flimm想要奖励现有答案。
如何检测当前连接是否在具有NetworkManager的系统上标记为计量连接?这是一个shell脚本,但我可以通过Python轻松调用任何C函数。
zwghvu4y1#
使用nmcli实用程序,必要的步骤包括:1.验证NetworkManager是否为version 1.0.6+:$ nmcli -v nmcli tool, version 1.9.01.选中GENERAL。接口上的METERED:$ nmcli -t -f GENERAL.METERED dev show eth1 GENERAL.METERED:unknown1.值为:unknown, yes, no, yes (guessed), no (guessed)1.强制执行该值是这样完成的:$ nmcli dev modify wlan1 connection.METERED yes Connection successfully reapplied to device 'wlan1' $ nmcli -t -f GENERAL.METERED dev show wlan1 GENERAL.METERED:yes并且,要获取按设备分组的列表:
$ nmcli -v nmcli tool, version 1.9.0
$ nmcli -t -f GENERAL.METERED dev show eth1 GENERAL.METERED:unknown
unknown, yes, no, yes (guessed), no (guessed)
$ nmcli dev modify wlan1 connection.METERED yes Connection successfully reapplied to device 'wlan1' $ nmcli -t -f GENERAL.METERED dev show wlan1 GENERAL.METERED:yes
$ nmcli -t -f GENERAL.DEVICE,GENERAL.METERED dev show GENERAL.DEVICE:wlan1 GENERAL.METERED:yes GENERAL.DEVICE:eth1 GENERAL.METERED:unknown GENERAL.DEVICE:lo GENERAL.METERED:unknown
尝试将此信息减少到仅默认路由上的信息仍然需要a call to another command,因为NetworkManager不会尝试区分处于连接状态的多个设备:
$ nmcli -t -f GENERAL.DEVICE,GENERAL.METERED dev show `ip route list 0/0 | sed -r 's/.*dev (\S*).*/\1/g'`
aiqt4smr2#
您还可以通过D-Bus获取当前连接的计量状态。在shell中,可以使用busctl:
busctl
busctl get-property org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager Metered
与nmcli解决方案相比,这仅仅是一个命令,在其他编程语言中,直接使用D-Bus而不是调用nmcli会更有效。结果是具有以下值的枚举(文档):| 姓名|价值|说明|| --------------|--------------|--------------|| NM_METERED_UNKNOWN|0|计量状态未知|| NM_METERED_YES|1|计量,则该值已显式配置|| NM_METERED_NO|二|未计量,该值已显式配置|| NM_METERED_GUESS_YES|三|计量,价值被猜到了|| NM_METERED_GUESS_NO|四|未计量,值为猜测值|
nmcli
NM_METERED_UNKNOWN
NM_METERED_YES
NM_METERED_NO
NM_METERED_GUESS_YES
NM_METERED_GUESS_NO
cyej8jka3#
出于某种原因,lossleader的解决方案总是在我的系统上返回no,而使用连接中的metered参数工作正常:nmcli -f connection.metered connection shownmcli -t -f GENERAL.CONNECTION --mode tabular device show $DEVICE | head -n1``
nmcli -f connection.metered connection show
3条答案
按热度按时间zwghvu4y1#
使用nmcli实用程序,必要的步骤包括:
1.验证NetworkManager是否为version 1.0.6+:
$ nmcli -v nmcli tool, version 1.9.0
1.选中GENERAL。接口上的METERED:
$ nmcli -t -f GENERAL.METERED dev show eth1 GENERAL.METERED:unknown
1.值为:
unknown, yes, no, yes (guessed), no (guessed)
1.强制执行该值是这样完成的:
$ nmcli dev modify wlan1 connection.METERED yes Connection successfully reapplied to device 'wlan1' $ nmcli -t -f GENERAL.METERED dev show wlan1 GENERAL.METERED:yes
并且,要获取按设备分组的列表:
尝试将此信息减少到仅默认路由上的信息仍然需要a call to another command,因为NetworkManager不会尝试区分处于连接状态的多个设备:
aiqt4smr2#
您还可以通过D-Bus获取当前连接的计量状态。在shell中,可以使用
busctl
:与
nmcli
解决方案相比,这仅仅是一个命令,在其他编程语言中,直接使用D-Bus而不是调用nmcli
会更有效。结果是具有以下值的枚举(文档):
| 姓名|价值|说明|
| --------------|--------------|--------------|
|
NM_METERED_UNKNOWN
|0|计量状态未知||
NM_METERED_YES
|1|计量,则该值已显式配置||
NM_METERED_NO
|二|未计量,该值已显式配置||
NM_METERED_GUESS_YES
|三|计量,价值被猜到了||
NM_METERED_GUESS_NO
|四|未计量,值为猜测值|cyej8jka3#
出于某种原因,lossleader的解决方案总是在我的系统上返回no,而使用连接中的metered参数工作正常:
nmcli -f connection.metered connection show
nmcli -t -f GENERAL.CONNECTION --mode tabular device show $DEVICE | head -n1``