%20%E3%81%8C%E7%89%B9%E5%AE%9A%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%82%A4%E3%82%B9%20(wwan0)%20%E3%81%AB%E9%96%A2%E9%80%A3%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E3%82%92%E7%9F%A5%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%81%8B%3F.png)
タイトルがほぼすべてを物語っていますが、関連性がある場合に備えて私のシナリオを以下に示します。
USB モデムを最初に接続したときにオンラインにする処理を自動化しようとしています。私のハードウェアと携帯電話サービスでは、wwan0 インターフェイスが最初に接続されると、169.254.xx (未接続) アドレスが割り当てられます。対応するモデムは、デバイス ファイル経由で "AT^NDISDUP=1,1" コマンドを受信してからでないと、オンラインになりません。新しい接続のインターフェイス名にアクセスできる if-up フックを作成しましたが、それらを対応するデバイス ファイルにリンクする方法がわかりません。
もしこれが不可能だったり、単に良い方法ではない場合は、他のアイデアもぜひお聞かせください。 どうぞよろしくお願いいたします。
アップデート
Kamil の提案に従って、sysfs を詳しく調べました。デバイス関連のエントリ (/sys/devices/platform/.../.../ttyUSB0) とインターフェイス関連のエントリ (/sys/class/net/wwan0) がいくつか見つかりましたが、一方を使用して他方を取得する方法がまだわかりません。udevadm を使用してさまざまなエントリから情報を取得していますが、ほとんどの場合、何を見ているのかよくわかりません。
答え1
私は次のスクリプトを使用してこれを実現するために picocom v3 を使用しています:
#!/usr/bin/env bash
for tty in $(ls /dev/ttyUSB*); do
echo "Checking $tty"
picocom -qrX -b 9600 $tty
sleep 1
result=$(echo "AT&F" | picocom -qrix 1000 $tty)
if [ "$result" = "AT&F" ]; then
echo "Found AT compatible modem at $tty"
else
echo "No AT compatible modem at $tty"
fi
done
/dev/ttyUSB*
モデム デバイスに適合するものに置き換えることができますが、これは非常に汎用的なので機能するはずです。