問題の概要
iPhoneをUSBケーブルでLinux PCに接続すると、Linux側でネットワーク接続を有効化していないにも関わらず、iPhone側がWi-Fi接続を停止し、モバイルデータ通信(5G/4G)によるインターネット共有の待受状態に入ってしまう。これはLinuxのNetworkManagerがiPhoneをネットワークデバイスとして「認識」し、自動的に管理対象に置くために発生する挙動である。
本稿では、NetworkManagerにiPhoneのネットワークインターフェースを完全に無視させ、この自動的なモード切り替えを防ぐ手順を記述する。
手順1:iPhoneのMACアドレスを特定する
まず、NetworkManagerに無視させる対象を特定するため、iPhoneのネットワークインターフェースに割り当てられたMACアドレスを調べる必要がある。
- iPhoneをUSBでLinux PCに接続する。
- ターミナルを起動し、以下のコマンドを実行する。
ip a
-
出力結果から、
usb0
やenp
で始まるような、iPhoneに対応するインターフェースを探す。その項目内にあるlink/ether
の右隣に表示されるxx:xx:xx:xx:xx:xx
形式の文字列がMACアドレスである。この値を控えておく。
手順2:NetworkManagerの設定ファイルを作成する
次に、特定したMACアドレスを持つデバイスをNetworkManagerの管理対象から除外するための設定ファイルを作成する。
-
ターミナルで以下のコマンドを実行し、管理者権限で新しい設定ファイルを開く。実行時にパスワードの入力が求められる。
sudoedit /etc/NetworkManager/conf.d/99-ignore-iphone.conf
-
エディタが開いたら、以下の内容を記述する。
XX:XX:XX:XX:XX:XX
の部分は、手順1で調べた自身のiPhoneのMACアドレスに書き換えること。[keyfile] unmanaged-devices=mac:XX:XX:XX:XX:XX:XX
- ファイルを保存し、エディタを終了する。
手順3:NetworkManagerを再起動して設定を適用する
作成した設定をシステムに反映させるため、NetworkManagerサービスを再起動する。
-
ターミナルで以下のコマンドを実行する。
sudo systemctl restart NetworkManager
以上の設定が完了した後、iPhoneのUSBケーブルを再接続すると、NetworkManagerがiPhoneを認識しなくなり、iPhone側でインターネット共有モードが自動で開始されなくなる。
(補足)設定を元に戻す方法
将来的にUSBテザリング機能を使用したくなった場合は、作成した設定ファイルを削除することで元の状態に戻すことができる。
sudo rm /etc/NetworkManager/conf.d/99-ignore-iphone.conf
sudo systemctl restart NetworkManager
まとめ
iPhoneをUSBでLinux PCに接続した際に、iPhoneが意図せずインターネット共有待受状態(Wi-Fiからモバイルデータ通信への切り替え)になる問題は、NetworkManagerの自動認識機能が原因である。
この問題を解決するには、iPhoneのMACアドレスを特定し、そのMACアドレスを持つデバイスをunmanaged-devices
としてNetworkManagerの設定ファイルに記述することで、NetworkManagerの管理対象から恒久的に除外する。設定の適用にはNetworkManagerの再起動が必要である。これにより、PCはiPhoneをネットワークデバイスとして認識しなくなり、iPhone側の自動的なモード移行を根本的に防ぐことが可能となる。