いろいろいじった結果、Orange Pi PC 2はArmbianを使えばかなりいろんなことが出来ることがわかりました。

ただ、1つ問題がありました。USB WiFiが不安定だったのです。今回はその対策を書きます。

これができれば、Raspberry Pi3 Bと同等スペックながら3分の1くらいの値段で、安定してWiFiが使えるボードになるのでかなり良いです!

Contents

問題

Orange Pi PC 2上のArmbianでUSB WiFiをいくつか試してみた結果、以下の問題がありました:

  • ネットワークに接続できないWiFiアダプタがある
  • IPアドレスが振られインターネットにもアクセスできるが、ネットワーク上の他のPCからのPingが通らない
  • IPアドレスを固定にするとネットワークに参加できない

1つ目はもうネットワークチップとの相性が悪いのだろうということで無視します。問題は残り2つです。

必要な機能は、

  • インターネットにアクセスできる
  • ネットワーク上の他のPCからアクセスできる

だったので、2番目の対策を模索しました。結構たいへんでした。

着眼点

かなりの試行錯誤を経て、

  • IPアドレスが振られても他のPCから見えないが、一度Orange Piからpingをすると、そのPCからはpingが通るようになる。
  • しかし依然としてarpリクエストには応えない。
  • USB WiFiのネットワークインターフェースにautoを指定し、networkingをrestartすると他のPCからも見えるようになる。

が分かりました。このことから、

  • アダプタのドライバー上の一部のコマンドがNetworkManagerまたはnetworkingからうまく扱えず、boot時の処理に失敗する。

のでは?と思いました。(syslogを見るとNetworkManagerぽいです)

いずれにせよ起動後にnetworkをrestartすればおkなので、それをやります。

対策

interfaces

アダプタのコンフィグは以下の感じ (/etc/network/interfaces):

auto wlxXXX
iface wlxXXX inet dhcp
   wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

/etc/wpa_supplicant/wpa_supplicant.confには通常通りwpa_passphraseで生成したパスフレーズを書きます:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
        ssid="XXXX"
        psk=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
}

起動後に数回だけ処理をする

まず、起動後に一度だけコマンドを実行する方法として、/etc/rc.localやcrontab上の@rebootがあります。しかしこれらは、NetworkManagerの当該処理よりも先に実行されてしまうので問題を解決することが出来ません。なので、

  1. crontab上の@rebootでフラグを立てる
  2. フラグが立っていたらnetworkingをrestartした後フラグを下げるスクリプトをcronで毎分実行

させることで、「Linuxの起動後に数回だけ実行されるコマンド」を実装しました。

crontab

rootのcrontabを以下のように設定します:

@reboot echo 3 > /home/username/network_flag.txt
*/1 * * * * /home/username/restart_networking.sh < /home/username/network_flag.txt

@rebootでnetwork_flag.txtに実行したい回数を書き込みます。

restart_networking.shはnetwork_flag.txtを標準入力として受け取り、1以上ならnetworkingをrestartして数字をデクリメントします。

restart_networking.sh:

#!/bin/sh
while read i ; do
  if [ $i -gt 1 ]; then
    /usr/sbin/service networking restart
    echo $(( i-1 )) > /home/username/network_flag.txt
  elif [ $i -eq 1 ]; then
    /usr/sbin/service networking restart
    echo 0 > /home/username/network_flag.txt
  fi
done

繰り返し回数を3としたのは、2以下だとタイミングが早すぎてうまくいかないことがあったからです。

関連記事

fitbitの睡眠スコアを90弱で安定させる良い睡眠を続ける簡単な方法

m1 ipad pro 12.9 2021のusb-cハブはコレがベスト

Time Machine不要!Macを11.2.3にダウングレードして原神をm1 macbook airでプレイする

MH-Z19CとM5StickCで二酸化炭素濃度モニタリング

【神軽量HMD】Avegant Glyph 改造: 瓶詰堂さんのaltglyphを作った

PC、iPad、Android、switchもドックいらず!あまりに万能なusb-cハブが最強だった

コメント

コメントを返信する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です