web-dev-qa-db-ja.com

NetworkManager:デバイスの現在の接続を従量制として設定

NetworkManagerを使用して、デバイスに現在接続されている接続を設​​定するにはどうすればよいですか(たとえば、wlp2s0)従量制ですか?

計測/非計測状態の推測が引き続き発生するような方法で設定を解除するにはどうすればよいですか?

注:一部のホットスポット(たとえば私の電話)は計測されますが、一部は計測されません(たとえば自宅)ので、デバイスでこれを設定することは私が求めているものではありません。

6
Tom Hale

これが最良の答えではないことを本当に願っています。単純なケースでは複雑であるように見えますが、バイナリSSIDを許可するとさらに複雑になります。とにかく、ここに行きます:

デバイスの現在の接続を取得します

nmcli -t -f GENERAL.CONNECTION --mode tabular device show $DEVICE | head -n1

それ以外の場合は末尾にスペースが追加されるため、-tが必要です(!?)。

現在の計測ステータスを表示

nmcli -f connection.metered connection show $CONNECTION

ここで、$CONNECTIONは、前のコマンドによって返された文字列です。

計測状態の変更

有効なステータスは、yesno、およびunknownです。 unknownがデフォルトであり、DHCPオプションAndroid_METERED(reference) などに基づいて推測を行います。

例:$ CONNECTIONが測定されるように設定します。

nmcli connection modify $CONNECTION connection.metered yes

バイナリSSIDを許可

これを「正しく」行うには(SSIDで32オクテットを許可)、deviceGENERAL.CON-PATHを使用する必要があります。

nmcli -t -f GENERAL.CON-PATH --mode tabular device show DEVICE | tail -n1

これは次のような文字列を返します:/org/freedesktop/NetworkManager/ActiveConnection/39

次に、このパスを使用してconnectionGENERAL.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/5ActiveConnectionに注意)のような文字列を返します。これを使用して、接続を変更できます。

nmcli connection modify /org/freedesktop/NetworkManager/Settings/<NUMBER> connection.metered <VALUE>
7
Tom Hale

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"
1
VasyaNovikov