OrangePi-PCを使ってみる

USB-WiFiのセットアップ


Jessieでは、ネットワークの設定は「/etc/network/interfaces」を編集することで行っていましたが、
Stretchからは「/etc/network/interfaces」のファイルは以下の様にほぼ空白です。


コメントをよく見ると「NetworkはNetwork managerを使って管理しろ」と書いてあります。
そこで、今回はNetwork ManagerのCommand Line Tool(nmcli)によるWiFiのセットアップを紹介します。

nmcliでデバイスを確認する

WiFiドングルをUSBポートに刺して、以下のコマンドでTYPEにWiFiのデバイスが現れることを確認します。
この時点でWiFiのデバイスが出現しなければ、カーネルにドライバーが組み込まれていないので、そのドングルは使えません。
$ nmcli device
DEVICE           TYPE      STATE         CONNECTION
eth0             ethernet  connected     Wired connection 1
wlx40a5efdb252f  wifi      disconnected  --
lo               loopback  unmanaged     --

nmcliでアクセスポイントを確認する

アクセスポイントが見つからないときはこ のページを参考に、アクセスポイントのチャネルを変えてみてください。
1つの部屋にAPが2つ有ったときは、特定のUSBドングルではどうしてもAPを検出できませんでしたが、
APの1つを落としたらあっさりつながりました。
$ nmcli device wifi
*  SSID                MODE   CHAN  RATE       SIGNAL  BARS  SECURITY
   ap-wpsG-a8bf10      Infra  1     54 Mbit/s  89      ????  WPA2
   Picking             Infra  1     54 Mbit/s  50      ??__  WPA2
   88888888            Infra  11    54 Mbit/s  40      ??__  WPA2
   ゲストネットワーク  Infra  11    54 Mbit/s  44      ??__  WPA2
   inumber             Infra  1     54 Mbit/s  44      ??__  WPA2
   aterm-e625c0-gw     Infra  1     54 Mbit/s  100     ????  WEP
   ESP_1B06BB          Infra  1     54 Mbit/s  100     ????  --
   ESP_011834          Infra  1     54 Mbit/s  70      ???_  --
   ESP_CCE2F9          Infra  1     54 Mbit/s  57      ???_  --
*  aterm-e625c0-g      Infra  1     54 Mbit/s  84      ????  WPA1 WPA2
   W04_F0C850604726    Infra  1     54 Mbit/s  47      ??__  WPA1 WPA2
   au_Wi-Fi            Infra  11    54 Mbit/s  40      ??__  WPA2
   0001_Secured_Wi-Fi  Infra  6     54 Mbit/s  44      ??__  WPA2 802.1X
   0000_Secured_Wi-Fi  Infra  6     54 Mbit/s  40      ??__  WPA2
   0001docomo          Infra  6     54 Mbit/s  40      ??__  WPA2 802.1X
   Wi2premium          Infra  11    54 Mbit/s  40      ??__  --
   --                  Infra  1     54 Mbit/s  37      ??__  WPA2
   --                  Infra  8     54 Mbit/s  47      ??__  WEP
   aterm-bb1f8e-g      Infra  8     54 Mbit/s  40      ??__  WPA1 WPA2

nmcliでAPに接続する

設定後はrebootするよりも、一旦shutdownして再起動した方が確実です。
例えば、RTL8192EUはnmcli実行直後はネットワークを認識しますが、再起動するとネットワークを見失います。
$ sudo nmcli device wifi connect APのSSID password APのパスワード
Connection with UUID 'b1024541-df02-44e4-a118-32c6558063d8' created and activated on device 'wlan0'

複数のWiFiデバイスがある場合は、ifnameでデバイス名を指定します。
$ nmcli device
DEVICE           TYPE      STATE         CONNECTION
wlan0            wifi      disconnected  --
wlx000f003b1e47  wifi      disconnected  --
eth0             ethernet  unavailable   --
lo               loopback  unmanaged     --

$ sudo nmcli device wifi connect APのSSID password APのパスワード ifname wlx000f003b1e47
Connection with UUID 'b1024541-df02-44e4-a118-32c6558063d8' created and activated on device 'wlan0'

nmcliで結果を確認する

WiFiデバイスをAPに接続すると、コネクションが作られます。
コネクション名は以下で確認することができます。
$ nmcli connection show
NAME            UUID                                  TYPE  DEVICE
aterm-d5a4ee-g  b9810cbf-a14b-45e2-9832-2350fc6a73b2  wifi  wlan0

設定内容の詳細は以下のコマンドで確認することができます。。
$ nmcli device show wlan0
GENERAL.DEVICE:                         wlan0
GENERAL.TYPE:                           wifi
GENERAL.HWADDR:                         C0:84:7D:80:D5:90
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (接続済み)
GENERAL.CONNECTION:                     aterm-d5a4ee-g
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/1
IP4.ADDRESS[1]:                         192.168.10.15/24
IP4.GATEWAY:                            192.168.10.1
IP4.ROUTE[1]:                           dst = 192.168.10.0/24, nh = 0.0.0.0, mt = 600
IP4.ROUTE[2]:                           dst = 169.254.0.0/16, nh = 0.0.0.0, mt = 1000
IP4.ROUTE[3]:                           dst = 0.0.0.0/0, nh = 192.168.10.1, mt = 600
IP4.DNS[1]:                             192.168.10.1
IP6.ADDRESS[1]:                         fe80::2e3f:d4e7:2c94:12b2/64
IP6.GATEWAY:                            fe80::fab7:97ff:fe36:de50
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 600
IP6.ROUTE[2]:                           dst = ::/0, nh = fe80::fab7:97ff:fe36:de50, mt = 600

$ nmcli connection show aterm-d5a4ee-g
connection.id:                          aterm-d5a4ee-g
connection.uuid:                        b9810cbf-a14b-45e2-9832-2350fc6a73b2
connection.stable-id:                   --
connection.type:                        802-11-wireless
connection.interface-name:              wlan0
connection.autoconnect:                 はい
connection.autoconnect-priority:        0
connection.autoconnect-retries:         -1 (default)
connection.multi-connect:               0 (default)
connection.auth-retries:                -1
connection.timestamp:                   1700059290
connection.read- only:                   いいえ
connection.permissions:                 --
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.autoconnect-slaves:          -1 (default)
connection.secondaries:                 --
connection.gateway-ping-timeout:        0
connection.metered:                     不明
connection.lldp:                        default
connection.mdns:                        -1 (default)
connection.llmnr:                       -1 (default)
connection.wait-device-timeout:         -1
802-11-wireless.ssid:                   aterm-d5a4ee-g
802-11-wireless.mode:                   infrastructure
802-11-wireless.band:                   --
802-11-wireless.channel:                0
802-11-wireless.bssid:                  --
802-11-wireless.rate:                   0
802-11-wireless.tx-power:               0
802-11-wireless.mac-address:            --

ifconfigでIPアドレスを確認する

現在のIPアドレスはifconfigコマンドで確認することができます。
以下の様にIPアドレスが表示されればOKです。
$ sudo ifconfig wlan0
wlan0     Link encap:Ethernet  HWaddr 3e:a3:9c:a5:8a:5d
          inet addr:192.168.10.123  Bcast:192.168.10.255  Mask:255.255.255.0
          inet6 addr: fe80::3ca3:9cff:fea5:8a5d/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:54522 errors:0 dropped:771 overruns:0 frame:0
          TX packets:21454 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:82177808 (78.3 MiB)  TX bytes:2305787 (2.1 MiB)

ipでIPアドレスを確認する

現在のIPアドレスはipコマンドでも確認することができます。
$ ip addr show dev wlan0
4: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether e8:4e:06:58:c0:93 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.123/24 brd 192.168.10.255 scope global dynamic wlan0
       valid_lft 86054sec preferred_lft 86054sec
    inet6 fe80::80:4408:ad3e:2adf/64 scope link
       valid_lft forever preferred_lft forever

ネットワークの無効化

以下のコマンドで一時的にネットワークを無効にすることができます。
sshで接続しているときは、接続が切れます。
$ nmcli connection show
NAME                UUID                                  TYPE             DEVICE
aterm-d5a4ee-g      4d3366e2-38ee-441b-a033-972afb6791f1  802-11-wireless  wlan0

$ sudo nmcli connection down aterm-d5a4ee-g
Connection 'aterm-d5a4ee-g' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7)

$ nmcli connection show
NAME                UUID                                  TYPE             DEVICE
aterm-d5a4ee-g      0030f668-b368-4387-8acc-13643a088285  802-11-wireless  --

ネットワークの有効化

以下のコマンドで無効になっているネットワークを再び有効にすることができます。
$ nmcli connection show
NAME                UUID                                  TYPE             DEVICE
aterm-d5a4ee-g      0030f668-b368-4387-8acc-13643a088285  802-11-wireless  --

$ sudo nmcli connection up aterm-d5a4ee-g
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7)

$ nmcli connection show
NAME                UUID                                  TYPE             DEVICE
aterm-d5a4ee-g      0030f668-b368-4387-8acc-13643a088285  802-11-wireless  wlan0

自動接続の無効化

以下のコマンドでマシン起動時の自動接続を無効にすることができます。
$ nmcli connection show
NAME                UUID                                  TYPE             DEVICE
aterm-d5a4ee-g      0030f668-b368-4387-8acc-13643a088285  802-11-wireless  wlan0
 
$ sudo nmcli connection modify aterm-d5a4ee-g connection.autoconnect no

自動接続の有効化

以下のコマンドでマシン起動時の自動接続を有効にすることができます。
$ nmcli connection show
NAME                UUID                                  TYPE             DEVICE
aterm-d5a4ee-g      0030f668-b368-4387-8acc-13643a088285  802-11-wireless  wlan0

$ sudo nmcli connection modify aterm-d5a4ee-g connection.autoconnect yes

設定情報(接続プロファイル)の削除

以下のコマンドで設定情報(接続プロファイル)を削除する事ができます。
USB-WiFiモジュールを交換するときは、一旦削除してから再度追加する必要が有ります。
$ nmcli connection show
NAME                UUID                                  TYPE             DEVICE
aterm-d5a4ee-g      4d3366e2-38ee-441b-a033-972afb6791f1  802-11-wireless  wlan0

$ sudo nmcli connection delete aterm-d5a4ee-g
Connection 'aterm-d5a4ee-g' (4d3366e2-38ee-441b-a033-972afb6791f1) successfully deleted.

設定情報(接続プロファイル)の保存先

nmcliで設定した内容は「/etc/NetworkManager/system-connections」に保存されま す。
同じデバイスに対して何回もnmcliで設定を行うと、いくつもプロファイルが作られるので、どのプロファイルが使われるのか不定になります。
「/etc/NetworkManager/system-connections」に有るファイルを全て削除すると、全ての設定情報(接続プロ ファイル)を削除することができます。
$ ls /etc/NetworkManager/system-connections
aterm-d5a4ee-g.nmconnection

ネットワークデバイス命名における一貫性の無効化

USB WiFiドングルを追加すると、Stretchでは以下の名前のデバイスが出現します。
$ sudo ifconfig -a
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.135  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::81:48ff:fe3e:ae19  prefixlen 64  scopeid 0x20<link>
        ether 02:81:48:3e:ae:19  txqueuelen 1000  (Ethernet)
        RX packets 969  bytes 1242998 (1.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 670  bytes 50879 (49.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 38

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlx0013efc30bb7: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 00:13:ef:c3:0b:b7  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Stretchでは「一貫性のあるネットワークデバイス命名方法」(「ネットワークデバイス命名における一貫性」とも呼ばれています)により
WiFiのインタフェース名が以下のように[wlx+MAC Address]になります。
$ sudo ifconfig -a

wlx0013efc30bb7 Link encap:Ethernet  HWaddr 00:13:ef:c3:0b:b7
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

シェルやプログラムの中でWiFiのIPアドレスを求める場合、インタフェース名がマシンごとに変わると面倒です。
「/boot/armbianEnv.txt」に、以下の1行を追加してリブートすると、見慣れたインタフェース名になります。
$ cat /boot/armbianEnv.txt
verbosity=1
console=both
overlay_prefix=sun50i-h6
rootdev=UUID=209058d9-8c3e-4224-ab3f-8ac1c3b6c1fb
rootfstype=ext4
overlays=i2c0 i2c1 i2c2
extraargs=net.ifnames=0
usbstoragequirks=0x2537:0x1066:u,0x2537:0x1068:u

$ sudo ifconfig -a

wlan0     Link encap:Ethernet  HWaddr 00:13:ef:c3:0b:b7
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

インタフェース名を変えてログインすると、以下のエラーが表示されることが有ります。
Welcome to Armbian 21.05.6 Buster with Linux 5.10.34-sunxi64

System load:   9%               Up time:       0 min
Memory usage:  10% of 985M      IP:            192.168.10.143 192.168.10.146
CPU temp:      52°C            Usage of /:    10% of 15G
RX today:      Error: Unable to read database "/var/lib/vnstat/wlan0": No such file or directory Merge "eth0+wlan0" failed.

このエラーが出るときは、以下のコマンドでデータベースを更新してやるとエラーが無くなります。
$ sudo vnstat -u -i wlan0



Debian JessieではカーネルがサポートしないUSB-WiFiドングルが結構ありました。
そこで、Debian Stretchで家中のドングルを片っ端から確認してみました。

USB-WiFiドングルを交換するときは以下の手順で交換します。
@システムを停止する。
AUSB-WiFiドングルを外し、システムを起動。
B有線LAN、またはデバッグポートを使ってログインする。
C以下のコマンドで以前の設定を削除する→重要
 nmcli connection delete プロファイル名
D新しいUSB-WiFiドングルを刺す
ElsusbでUSB-WiFiドングルが認識されていることを確認する
➆以下のコマンドで設定する。
 sudo nmcli d wifi connect SSID password パスワード
G以下のコマンドで設定を確認する。
 nmcli device show

デバッグポート、または有線LANでログインし、lsusbを使ってUSB-WiFiで使われているチップを調べます。
赤枠の部分で調べれば、どのようなチップが使われているかが分かります。




これらはカーネル標準のドライバーで動きます。
  • RTL8188ETV(0bda:0179 Realtek Semiconductor Corp)
  • RTL8188EUS(0bda:8179 Realtek Semiconductor Corp)
  • RTL8188CUS(0bda:8176 Realtek Semiconductor Corp. RTL8188CUS)
  • RTL8811AU(0bda:a811 Realtek Semiconductor Corp.)
  • RTL8811CU(0bda:c811 Realtek Semiconductor Corp.)
  • MT7601U(148f:7601 Ralink Technology, Corp.)
  • RT5370(148f:5370 Ralink Technology, Corp. RT5370 Wireless Adapter)
  • RT3070(148f:3070 Ralink Technology, Corp. RT2870/RT3070 Wireless)
  • RTL8192EU(0bda:818b Realtek Semiconductor Corp.)

  • これらは802.11ACに対応しているので、5GHz帯域でも使うことができます。
  • RTL8811AU(0bda:a811 Realtek Semiconductor Corp.)
  • RTL8811CU(0bda:c811 Realtek Semiconductor Corp.)

  • RTL8811CUはFreeDriverの製品でRTL8188GUとも呼ばれています。
    FreeDriver製品とは見た目はWiFiモジュールですが、デフォルトではUSBメモリーやCD-ROMデバイスとして動きます。
    Windows10のUSBポートに刺すと、いきなりEドライブが出現し、ドライブをクリックすると、
    ROMに格納されているWindows用のドライバーがインストールされ、動作モードをWiFiに切り替えます。
    CD-ROMデバイスとして動いているときはRTL8188GUで、WiFiデバイスとして動いているときはRTL8811CUという、
    なんとも厄介な奴です。

    こちらに Realtekの製品一覧が有りますが(After Modeswitch)とか(Driver CDROM Mode)の記載のあるものはすべてFreeDriver製品です。
    実物をよ〜く見ると「FreeDriver」と小さく書かれています。
    ArmbianではWiFiモードに切り替える設定が最初から設定されていますが、切り替え後のIDによって、動くものと動かないものが有りま す。

    RTL8188GUについてはこちらで少し詳しく説明してい ます。



    これらはカーネル標準のドライバーでは認識できません。
  • RTL8188FTV(0bda:f179 Realtek Semiconductor Corp.)

  • こちらでDKMSを使ったドライバーのインストールを紹 介し ていますが、カーネルバージョンとの依存関係などで、
    ドライバーがビルドできない可能性が有ります。
    わざわざ手間をかけるよりも、さっさと別のドングルに交換した方がいいです。



    ぞれぞれのUSBドングルのパフォーマンスを調べてみました。
    使用したツールは speedtest-cli で、3回測定した中のDownload最速値です。
    $ sudo apt install speedtest-cli
    $ speedtest --simple

    Model Ping Download Upload
    RTL8188ETV 49.206 ms 19.91 Mbit/s 7.04 Mbit/s
    RTL8188EUS 39.711 ms 19.18 Mbit/s 6.65 Mbit/s
    RTL8188CUS 56.206 ms 18.91 Mbit/s 5.77 Mbit/s
    RTL8811AU(2.4Ghz) 39.828 ms 31.16 Mbit/s 7.05 Mbit/s
    RTL8811AU(5Ghz) 67.972 ms 29.93 Mbit/s 10.68 Mbit/s
    RTL8811CU(2.4Ghz) 34.859 ms 39.50 Mbit/s 7.17 Mbit/s
    RTL8811CU(5Ghz) 68.261 ms 28.83 Mbit/s 9.14 Mbit/s
    MT7601U(150Mbps) 49.829 ms 30.34 Mbit/s 6.85 Mbit/s
    RT5370(150Mbps) 38.844 ms 35.26 Mbit/s 6.94 Mbit/s
    RT3070(150Mbps) 49.462 ms 37.75 Mbit/s 5.77 Mbit/s

    以下がDebian Jessieの時に調べたパフォーマンスです。
    Realtek系が全体的に下がっています。
    Model Ping Download Upload
    RTL8188ETV 56.544 ms 27.85 Mbit/s 7.23 Mbit/s
    RTL8188EUS 63.414 ms 36.82 Mbit/s 6.97 Mbit/s
    RTL8188CUS 152.172 ms 31.74 Mbit/s 7.09 Mbit/s
    RTL8192EU(300Mbps) 70.863 ms 39.71 Mbit/s 6.66 Mbit/s
    RTL8811AU(2.4Ghz) 54.589 ms 30.92 Mbit/s 6.68 Mbit/s
    MT7601 284.014 ms 27.58 Mbit/s 6.66 Mbit/s
    RT5370(150Mbps) 58.487 ms 24.55 Mbit/s 6.77 Mbit/s
    RT3070(150Mbps) 52.052 ms 30.22 Mbit/s 6.72 Mbit/s

    次回は固定IPアドレスの設定方法を紹介します。