私は他の開発者と協力して、Linuxシステムがデータ通信接続に接続しないたびに自動的に更新するスクリプトを作成しました。
しかし、一部のシステムでは、ネットワーク管理者の代わりに「systemd-networkd」を使用してネットワークを構成し、両方のプログラムを同時に使用すると互いに競合することがわかりました。
そのため、システムにインストールされているnmcliに実際に依存することはできず、このソリューションを使用することはできません。質問。
答え1
これを自動的に検出する信頼できる単一の方法はありません。ネットワークが計量されていることを示唆する方法がありますが、これらの方法は普遍的に配布されるものとは離れています。
WiFiホットスポットまたはテザリングデバイスとして機能するAndroidデバイスは、DHCPオプション43を文字列に設定し、
ANDROID_METERED
DHCPレスポンスでそのオプションを強制的に返します。望むより:https://www.lorier.net/docs/android-metered.htmlAppleには、iOSデバイスのホットスポット機能を使用してクライアントに接続状態を表示する独自の方法があるようです。、たとえ情報が不足しているようです。
WiFiベースステーションはMicrosoft設計を実装できます。802.11 プロトコル拡張無線ネットワークの測定状態を示します。 Linuxでは、
wpa_supplicant
この情報を受け取るコンポーネントではないかと思います。他の情報がない場合、Windowsは接続タイプ(イーサネット、WiFi、4G、3G、またはデフォルト/不明)によってのみ測定接続プロパティのデフォルト値を設定します。参考https://www.msoutlook.info/question/metered-network-warning
ただし、これらのメッセージが表示されない場合は、接続が測定されない場合もそうでない場合もあるとは考えられません。 NetworkManagerを使用すると、ユーザーは接続状態について最もよく理解できるため、接続を構成するときに測定接続プロパティを設定できます。
したがって、ユーザーにスクリプト実行の選択/責任を付与または無効にすることができます。
答え2
@telcoMが言ったように、接続が測定されていることを確認するための明確な方法はありません。別のオプションは、既知の接続とそれを測定するかどうかについてテーブルを作成することです。比較的良い指標は、次のコマンドを使用して確認できる外部IPアドレスです。
dig +short myip.opendns.com @resolver1.opendns.com
答え3
私たちが見つけた唯一のソリューションは、まだネットワーク管理者が必要です。
nmcli --terse --fields GENERAL.METERED dev show 2>/dev/null | grep --quiet "yes"