![Linux で Huawei 3G モデムからランダムに「NO CARRIER」が表示される](https://rvso.com/image/1345281/Linux%20%E3%81%A7%20Huawei%203G%20%E3%83%A2%E3%83%87%E3%83%A0%E3%81%8B%E3%82%89%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E3%81%AB%E3%80%8CNO%20CARRIER%E3%80%8D%E3%81%8C%E8%A1%A8%E7%A4%BA%E3%81%95%E3%82%8C%E3%82%8B.png)
私は Linux で Huawei 3G モデムを使用しています。しばらく NetworkManager を使用していましたが、現在は wvdial を使用してモデムと通信し、pppd を起動しています。USB デバイスが接続されると wvdial が自動的に起動するように udev ルールを追加しました。
- 良いケース: モデムを接続すると、モデムの登録中に wvdial が数回失敗し、その後成功します。
- 悪いケース: 同じですが、wvdial は「NO CARRIER」で永遠に失敗し続けます。
2) が発生した場合に行うべき唯一のことは、デバイスのプラグを抜いて再度差し込み、今度はうまくいくことを祈ることです...
gprs/umts の切り替え、オペレータの手動切り替えによる強制再登録など、さまざまなことを試しましたが、うまくいきませんでした。一度機能しなくなると、そのままの状態になります。
数日前、UMTS が常に失敗するのに対し、GPRS は比較的成功するというケースに遭遇しました。興味深いのは、Windows では UMTS がすぐに機能したことです。つまり、これは間違いなく Linux の問題です。
モデムは huawei E1762 です。NetworkManager
/ modem-manager も多少同じ問題を抱えています。ubuntu
lucid を実行しています
答え1
わかりました。登録が完了する前に wvdial がモデムと通信を開始すると、モデムが混乱してしまうのだと思います。
-> デバイスを接続した後 2 秒の遅延を追加し、デバイスが登録されるまでスクリプトを待機させてから wvdial を実行します。その後は常に動作します。
#!/bin/bash
while [ -e /dev/ttyUSB0 ] ; do
# wait to be registered
if ./operator | grep -q ','; then
wvdial provider >> wvdial.log 2>&1
fi
sleep 1
done
オペレータースクリプト:
#!/bin/bash
# boy, is this ugly ...
chat -t 1 -e "" '\pAT' OK AT+COPS? +COPS '\pAT' OK >> /dev/ttyUSB1 < /dev/ttyUSB1 2>/tmp/foo
grep -m 1 '^+COPS' /tmp/foo