NetworkManagerを使用して、デバイスに現在接続されている接続を設定するにはどうすればよいですか(たとえば、wlp2s0
)従量制ですか?
計測/非計測状態の推測が引き続き発生するような方法で設定を解除するにはどうすればよいですか?
注:一部のホットスポット(たとえば私の電話)は計測されますが、一部は計測されません(たとえば自宅)ので、デバイスでこれを設定することは私が求めているものではありません。
これが最良の答えではないことを本当に願っています。単純なケースでは複雑であるように見えますが、バイナリ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
(reference) などに基づいて推測を行います。
例:$ CONNECTIONが測定されるように設定します。
nmcli connection modify $CONNECTION connection.metered yes
バイナリSSIDを許可
これを「正しく」行うには(SSIDで32オクテットを許可)、deviceのGENERAL.CON-PATH
を使用する必要があります。
nmcli -t -f GENERAL.CON-PATH --mode tabular device show DEVICE | tail -n1
これは次のような文字列を返します:/org/freedesktop/NetworkManager/ActiveConnection/39
次に、このパスを使用してconnectionのGENERAL.CON-PATH
を取得します。 NB:これには異なる値があります(デバイスの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
(ActiveConnection
に注意)のような文字列を返します。これを使用して、接続を変更できます。
nmcli connection modify /org/freedesktop/NetworkManager/Settings/<NUMBER> connection.metered <VALUE>
active接続ステータスを取得するための@ 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"