khurata’s blog

khurata’s blog

Optiplex 3020 に CentOS 8 を入れて無線LAN BUFFALO WI-U2-433DM を使えるようにした件

1.はじめに

 Linux の実機で無線 LAN を使おうとすると、ハードルが高い、というウェブ記事をよく目にする。 実際、自分も手こずったので、ここに記録を残しておく。 少なくとも、同じ環境であれば、本記事の通りにやればうまくいく公算は大きいと思う。

 CentOS 8 は、あと1年ほどで「終了」してしまい、CentOS Stream に移行するのだが、8 を Stream に変えるのはリポジトリ設定を変えさえすれば済む、という情報を信じて、私はまず 8 をインストールしてみる事にした。

 無線 LAN 子機については、Planex 製だと Linuxデバイスドライバが用意されているので良い、という話を見たし、BUFFALO 製品は「WLI-UC-GNM なら Linux ですぐ使えるが、他はいろいろ大変だ」という話も見た。 しかし、WI-U2-433DM は Linux で使える(ただし WI-U2-433DMS は使えないらしい?)という話も見たので、WI-U2-433DM を使ってみる事にした。 古い製品ではあるが、WLI-UC-GNM よりは性能が期待できる。

 結論を言えば、この目論見は成功した。 ……が、ウェブ上の情報が新旧錯綜していたり、私自身の知識・理解が足りなかったりして、結構手間取ってしまった。 この記事が(特に私と同じく Linux 初心者にとって)何らかの参考になれば幸いと思う。

 

2.目指したこと

 インターネットにつながっていないオフラインな PC に CentOS 8 Linux をインストールし、WI-U2-433DM のデバイスドライバをインターネット無しでビルド・インストールして、無線 LAN でインターネットできるようにしたい。

 なお、インターネット接続を確立した無線 LAN ルータと、インターネットが使える作業用のマシン(WindowsMacOSLinux 等いずれか)は、すでに在るものとする。 また、その無線 LAN ルータは、WI-U2-433DM がサポートする 5GHz 帯と 2.4GHz 帯をいずれもサポートしているものとする。

 

3.ハードウェアや BIOS の設定について

 今回試したマシンは以下の通り。 「やや古いパソコン」として、ごく普通のものである。

 3.1 BIOS 設定の確認

  CentOS をインストールしたいマシンにディスプレイ・USB キーボード・USB マウスを接続して電源を投入し、BIOS 設定で USB から起動できるようにしておく。 Optiplex 3020 SFF においては次に示す BIOS 設定を確認する。

  • General
    • Boot Sequence
      • USB Storage Device とインストール先ディスク(今回の場合は Crucial CT500MX500SSD1)にチェックを入れる
      • USB Storage Device の優先度を上げておく
    • Date/Time:2~3分程度の誤差で合わせておく (なお、午前0時は 12(HH)AM(A/P) とする、「AM 0時」という設定はできない、これで私は地味にハマった
  • System Configuration
    • SATA Operation
    • Drives
      • インストール先ディスク(今回の場合は Crucial CT500MX500SSD1)にチェックを入れる
    • SMART Reporting
      • Enable SMART Reportingチェックを入れる
    • USB Configuration
      • Enable Boot Supportチェックを入れる

  なお、場合によっては、BIOS 設定に先立って、バックアップ電池(CR2032)を新品に交換しておくのも良い。

 

4.CentOS 8 のインストール

 この章では、私が DELL Optiplex 3020 SFF に、USB メモリを用いて CentOS 8 をインストールした手順を記す。

 この章は、自分の環境における実際手順を記しているだけであって、無線 LAN でインターネットしたいという目的に直接関係するものではない。 人によっては多少の参考にはなると思うが、既知の事しか無いので、読み飛ばしていただいて構わない。 ただし、次章以降の内容は、本章で述べたインストール設定を最低限の前提としているので、次章以降で何かがうまく行かなかった場合は、本章を読み返していただければ幸いである。

 4.1 インストール用 USB メディアの作成

  Fedora のサイトから Fedora Media Writer をダウンロードし、作業用マシンにインストールする。
  https://getfedora.org/ja/workstation/download/

  CentOS のサイトから CentOS 8 の ISO イメージを作業用マシンにダウンロードしておく。 今回私は CentOS-8.3.2011-x86_64-dvd1.ISO を使った。
  https://www.centos.org/ →「CentOS Linux」「ISO x86_64」→ 適当なリンク →「CentOS-8.3.2011-x86_64-dvd1.ISO

  内容を消しても良い USB メモリを1つ用意する。 容量は 9GB 以上必要である。 先ほどインストールした Fedora Media Writer を使い、CentOS-8.3.2011-x86_64-dvd1.ISO の内容を USB メモリに書き込む。 作業手順の詳細は以下のリンク先を参照されたい。
  https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/installation_guide/sect-making-usb-media

 4.2 インストール

  マシン本体にインストール用 USB メモリを差して電源を入れ、インストーラ画面が表示されるまで待つ。

  4.2.1 インストール先ディスクの全消去

   インストールの前に、インストール先のディスク内容を全消去したい場合にのみ、本項の手順を行う。

   インストーラが起動したら、カーソルキー上下で Troubleshooting に合わせ Enter 押下、カーソルキー上下で Rescue a CentOS Linux system に合わせ Enter 押下すると、しばらく経ってオンメモリのレスキュー用 OS が起動する。

   1) Continue
   2) Read-only mount
   3) Skip to shell
   4) Quit (Reboot)
   Please make a selection from the above:
   と表示されたら 3 を打ち込んで Enter 押下。

   Please press ENTER to get a shell:
   と表示されたら Enter 押下。 これでコマンドシェルが起動する。

   parted と打ち込んで Enter 押下すると、プロンプトが (parted) に切り替わる。 そこで print と打ち込んで Enter すると、ディスク上のパーティション一覧が表示される。

Number Start End Size Type File system Flags
1 1049kB 2149MB 2147MB primary ext4 boot
2 2149MB 492GB 490GB primary lvm  
(これは「パーティションが2つある」例であり、環境によって表示内容は異なる)

   (parted) プロンプト表示に続いて rm 1 と打ち込んで Enter 押下、rm 2 と打ち込んで Enter 押下すると、それぞれのパーティションが即時に削除される。
   その後 print と打ち込んで Enter 押下すると、次のようにしか表示されない。
   Number Start End Size Type File system Flags

   (parted) プロンプト表示に続いて quit と打ち込んで Enter 押下すると parted から抜け出る。 その後で exit と打ち込んで Enter 押下するとマシンが再起動し、インストール用 USB メモリからインストーラが起動する。

  4.2.2 インストールに先立ち画面解像度を設定

   インストーラ初期設定の解像度では、ディスプレイによってはインストーラ画面の端が切れて見えなくなったりするので、インストールを始める前に適切な解像度を設定しておくのが良い。

   インストーラが起動したら、ただちに Tab を押下する。
   > vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=CentOS-8-2-2004-x86_64-dvd rd.live.check quiet
   が表示されたら、その直後に半角スペースを1つ、続けて resolution=1280x1024 を入力して Enter を押下すると、CentOS インストールが始まる。

   この 1280x1024 という所は、使うディスプレイに合わせて適宜変更する。 なお、日本語キーボードで = を入力するには ^ を押下する。

  4.2.3 インストールにおける設定

   「WELCOME TO CENTOS LINUX 8.」画面では、左ペインで 日本語 を選択し、右ペインが 日本語 (日本) になっている事を確認し「続行」をクリック。

   「時刻と日付」では「地域」を アジア に、「都市」を 東京 に設定して「完了」をクリック。

   「ソフトウェアの選択」の「ベース環境」は サーバー(GUI 使用) を選択、「選択した環境用のその他のソフトウェア」は ファイルとストレージサーバー および 開発ツール を選択して「完了」をクリック。

   「ファイルとストレージサーバー」は、後々 Windows とファイル共有をしたいためであり、不要な場合は選択しなくても良い。 「開発ツール」は後ほど無線 LAN 子機のデバイスドライバをビルドするために必要である。

   いずれも、ここで選択しなくとも後から入れる事が出来るが、ここで選択しておいた方が面倒が少ない。

   「インストール先」、「ネットワークとホスト名」、「root パスワード」、「ユーザーの作成」については、それぞれ適当な内容を設定する(本例では、ユーザ usera を作成し用いる事とするので、環境に合わせて適宜読み替えること)。

   「インストールの開始」をクリックし、「システムの再起動」ボタンが表示されるまでしばらく待つ。 「システムの再起動」ボタンが表示されたらクリックし、インストーラ画面が表示されるのを待つ。 再起動が完了しインストーラ画面が表示されたら USB メモリを抜き、電源を入れ直す。

   CentOS のサインイン画面が表示されたら、CentOS のインストールは完了している。

   この後は、ユーザ usera にサインインし、デスクトップ環境の設定や日本語に関する設定、SELinux の無効化、作業用マシンから有線 LAN 経由での端末操作設定などを適宜やっておく。

 

5.無線 LAN 子機のインストールと設定と動作確認

 この章が本記事のメインである。

 5.1 必要なパッケージのインストール

  上記のインストール状態でデバイスドライバをビルドすると libelf-devel が足りずビルドが完了しないので、libelf-devel を CentOS インストーラ USB メモリからインストールする。

  CentOS が起動した状態でインストーラ USB メモリを差すと、GUI 画面で USB メモリが認識されている様子が確認できる。 コマンドでも確認できる。

  $ dmesg | grep usb-storage
  [ 2993.764310] usb-storage 3-9:1.0: USB Mass Storage device detected
  [ 2993.764404] scsi host6: usb-storage 3-9:1.0
  [ 2993.764457] usbcore: registered new interface driver usb-storage
  (これは表示例であり、細かい点は環境により異なる)

  $ dmesg | grep removable
  [ 2994.815298] sd 6:0:0:0: [sdb] Attached SCSI removable disk
  (これは表示例であり、細かい点は環境により異なる)

  インストーラ USB メモリがどこにマウントされたかを確認する。

  $ mount
  /dev/sdb1 on /run/media/usera/CentOS-8-3-2011-x86_64-dvd type iso9660 (ro,nosuid,nodev,relatime,nojoliet,check=s,map=n,blocksize=2048,uid=1000,gid=1000,dmode=500,fmode=400,uhelper=udisks2)
  (これは表示例であり、細かい点は環境により異なる;この例は /run/media/usera/CentOS-8-3-2011-x86_64-dvd にマウントされている事を示している)

  $ ls /run/media/usera/CentOS-8-3-2011-x86_64-dvd
  AppStream BaseOS EFI LICENSE TRANS.TBL images isolinux media.repo

  インストーラ USB メモリを参照するためのリポジトリファイルを作成する。 なお、CentOS-Linux-Media-My.repo というファイル名や、media-baseos-my というリポジトリ名は、他と重複しなければ自由に付けて良い。
  # cp /etc/yum.repos.d/CentOS-Linux-Media.repo /etc/yum.repos.d/CentOS-Linux-Media-My.repo(このように元からあるメディア参照ファイルをコピーして編集すれば楽だが、コピーせずにゼロから作っても構わない)
  # vi /etc/yum.repos.d/CentOS-Linux-Media-My.repo

[media-baseos-my]
name=CentOS Linux $releasever - Media - BaseOS
baseurl=file:///run/media/usera/CentOS-8-3-2011-x86_64-dvd/BaseOS
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial

  (上記に示した必要な行以外は削除すべきである;余計な baseurl が処理されるとパッケージ導入時にチェックサムエラーになってしまう)

  新たに作成したリポジトリ(この場合は media-baseos-my)の内容が閲覧できる事を確認する。
  # dnf list --disablerepo=* --enablerepo=media-baseos-my

  デバイスドライバのビルドに必要なパッケージの名前を特定する。
  # dnf list --disablerepo=* --enablerepo=media-baseos-my | grep libelf-devel

elfutils-libelf-devel.i686 0.180-1.el8 media-baseos-my
elfutils-libelf-devel.x86_64 0.180-1.el8 media-baseos-my
(これは表示例であり、細かい点は環境により異なる)

  上記で判明したパッケージをインストールする。
  # dnf install --disablerepo=* --enablerepo=media-baseos-my elfutils-libelf-devel

  無線ネットワーク関連で便利な iw コマンドパッケージもついでに導入しておく。
  # dnf install --disablerepo=* --enablerepo=media-baseos-my iw

  インストーラ USB メモリを外す。

 5.2 BUFFALO WI-U2-433DM のデバイス名とデバイス ID を調査

  作業用マシンとして Windows マシンを使っている場合、BUFFALO 公式 Windowsインストーラ「エアナビゲータ2ライト」(airnavi2_221.exe)を作業用マシンで解凍し、\Win\driver\U2433DM\Win10\u2433dm.inf を「メモ帳」などで見て調べる。
[BUFFALO.NTx86]
; DisplayName Section DeviceID
; ----------- ------- --------
%BUFFALO_0x0242.DeviceDesc% = RTL8811au.ndi, USB\VID_0411&PID_0242
  となっているので、「デバイス名」は RTL8811au であり、「デバイス ID」は 0411 0242 である事が分かる。 0411 は BUFFALO 製品である事を示している。 RTL は Realtek 社の略であり、WI-U2-433DM の内蔵チップが Realtek 社製である事を示している。

 

  ところが私は、この「デバイス名」を「内蔵チップ名」と勘違いしてしまった。 このために、私は結構ハマってしまったのである。

  ウェブ上でよく見かける説明は次のようなものだ。

  「WI-U2-433DM の内蔵チップ RTL8811au は 8812au ドライバでも動作する。8812au とよく似たチップに 8821au があり、間違えてはいけない。しかし、だいたいの 8821au ドライバパッケージには 8812au ドライバも含まれているので、それを使う

  上記の説明が間違っているかどうか私には分からないが、すっきり分かりやすいとは思えない。 私なりに「たぶんこういう事であろう」と理解した事情は、次のようなものである。

  「WI-U2-433DM の内蔵チップは RTL8821 であり、このデバイス名は RTL8811au であるので、対応するデバイスドライバは 8811au である。従って、(RTL8821 などのドライバパッケージに含まれる)8811au というドライバを使う」

  この簡潔な理解にたどり着くまでに、私は何時間も費やして、多くのドライバパッケージを試行錯誤するハメに陥ってしまった。

 5.3 WI-U2-433DM デバイスドライバのビルド

  対応可能と思われるドライバパッケージは GitHub 上でいくつか見つけられるが、実装機能が豊富でメンテナンス頻度も高く見える次のパッケージを使う事にした。

  https://github.com/aircrack-ng/rtl8812au

  作業用マシンで「Code」「Download ZIP」をクリックして rtl8812au-5.6.4.2.zip をダウンロードし、CentOS に転送する。

  たとえば Tera Term を使っているなら、Tera Term 上で適当なユーザの適当なディレクトリに移動し、その画面に rtl8812au-5.6.4.2.zip をドラッグ&ドロップする。 「ファイル転送を行いますか?」ダイアログで「SCP」を選択、「送信先は指定しない」「OK」で転送される。

  転送後は、ディレクトリに rtl8812au-5.6.4.2.zip が存在することを確認する。

  確認できたら解凍し、解凍後のディレクトリに移動する。
  $ unzip rtl8812au-5.6.4.2.zip
  $ cd rtl8812au-5.6.4.2

  このドライバパッケージには、WI-U2-433DM のデバイス ID が無いので、ソースに追記しておく(211行目あたりの「WI-U2-433DHP」用の行を直下にコピペして編集すれば楽)。

  $ vi os_dep/linux/usb_intf.c

{USB_DEVICE(0x0411, 0x029B), .driver_info = RTL8821}, /* Buffalo - WI-U2-433DHP */
{USB_DEVICE(0x0411, 0x0242), .driver_info = RTL8821}, /* Buffalo - WI-U2-433DM */(この1行を新規追加)
{USB_DEVICE(0x056E, 0x4007), .driver_info = RTL8821}, /* Elecom - WDC-433DU2HBK */

  また、目当てのドライバだけをビルドするように、Makefile も編集しておく。
  $ vi Makefile

CONFIG_RTL8812A = y(24行目あたりの「y」を)

CONFIG_RTL8812A = n(「n」に書き換える)

  これは RTL8812 用ドライバをビルドしないようにする事で、RTL8821 用ドライバのみを単独ビルドするための設定である。 元々の Makefile では、CONFIG_RTL8812A と CONFIG_RTL8821A が共に「y」になっており、このままビルドすると混成ドライバ(?)である「88XXau.ko」というファイルが出来上がってしまうが、それだとうまく行かなかった。

 

  上記2点の編集を終えたらビルドする。 数分ほど時間が掛かるので、しばらく待つ。
  $ make

  ビルドが終わったら、「8811au.ko」というファイルが存在している事を確認する。 これがお目当てのデバイスドライバである。
  $ ls
  8811au.ko

  再度、整理しておこう。

  「WI-U2-433DM の内蔵チップは RTL8821 であるから、デバイスドライバのソースに RTL8821 機器として WI-U2-433DM のデバイス ID を新規追加した。また Makefile では RTL8812 用ドライバを生成せず、RTL8821 用ドライバのみを生成するように指定した。
  そうしてデバイスドライバをビルドした結果、チップ RTL8821 に対応するデバイス名のドライバ 8811au が生成された」

 5.4 WI-U2-433DM デバイスドライバのインストール

  通常は make install でインストールするのだが、手動でインストールした方が良い、みたいなウェブ記事も散見されるので、手動でインストールしてみる(多分、どちらでやっても大差無いと思われるが)。
  $ sudo cp 8811au.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless/
  $ sudo depmod -a
  $ sudo modprobe 8811au

  ドライバが組み込まれていることを確認する。
  $ modinfo 8811au
  filename: /lib/modules/4.18.0-240.el8.x86_64/kernel/drivers/net/wireless/8811au.ko
  version: v5.6.4.2_35491.20191025
  author: Realtek Semiconductor Corp.
  description: Realtek Wireless Lan Driver
  license: GPL
  rhelversion: 8.3
  srcversion: 69A4CAC3F0E9B3F2B50FFA3
  alias: usb:v2357p011Fd*dc*dsc*dp*ic*isc*ip*in*
  (以下、延々と続く)

 

  なお、本論とは関係無い事だが、もしルータ側で「知らない MAC アドレスは無視する」設定をしている場合などは、MAC アドレスをランダムにする機能が邪魔になる事がある。 そのような場合には、MAC アドレスが固定化されるように、次の設定を行う。

  $ sudo vi /etc/NetworkManager/NetworkManager.conf

[device]
wifi.scan-rand-mac-address=no

  (上記の2行を末尾に追記)

 

  以上の手順を終えたら、CentOS マシンを再起動する(「何もわざわざ再起動しなくても、systemctl restart NetworkManager.service とかで済むのではないか」と思われるかも知れないが、「無線 LAN で6時間も悩んだが、再起動だけで解決した」というウェブ情報を見たので、私はここで再起動してしまう事にしたのである)。

  なお、再起動は # reboot で良いはずだが、私の環境では reboot による再起動が不安定になる事がままあったので、# shutdown -h now と手動の電源オンを使った。 これについては、sync を3回打ち込むだとか、UNIX では reboot は推奨されないが Linux ではOKのはずであるとか、いくつかの情報がウェブ上で確認できるが、正直言ってよく分からなかった。

 5.5 WI-U2-433DM の装着と設定

  CentOS マシンが起動したら、USB 端子に WI-U2-433DM を差し込む。 ただちに認識され、WI-U2-433DM の青色ランプが点灯するはずである。 ランプが点灯しない場合は、今迄の手順のどこかが間違っている(たとえ lsusb コマンドや dmesg コマンドで認識されていようが、青色ランプが点灯していないならば、何を試しても、おそらく無駄だ)。

  WI-U2-433DM が認識されたら、デバイス名と MAC アドレスを確認する。
  $ dmesg
  [ 79.994532] 8811au: loading out-of-tree module taints kernel.
  [ 79.994957] 8811au: module verification failed: signature and/or required key missing - tainting kernel
  [ 80.061222] usb 3-10: 88XXau b2:a7:05:83:cb:51 hw_info[107]
  [ 80.062255] usbcore: registered new interface driver rtl8812au
  [ 80.072646] rtl8812au 3-10:1.0 wlp0s20u10: renamed from wlan0
  [ 80.086621] IPv6: ADDRCONF(NETDEV_UP): wlp0s20u10: link is not ready
  [ 80.383039] IPv6: ADDRCONF(NETDEV_UP): wlp0s20u10: link is not ready
  [ 80.383941] IPv6: ADDRCONF(NETDEV_CHANGE): wlp0s20u10: link becomes ready
  [ 80.398437] IPv6: ADDRCONF(NETDEV_UP): wlp0s20u10: link is not ready
  (上記は表示の一例であり、環境によって細部は異なる)

  無線 LAN 子機のデバイス名が wlan0 から wlp0s20u10 にリネームされている事が分かる。 MAC アドレスも確認できる(上記例における「b2:a7:05:83:cb:51」である;なお、この MAC アドレスは説明のためのデタラメな値である)。 デバイス名と MAC アドレスはこの後の設定で必要になるものだが、環境により異なると思われるので、この後は適宜ご自分の環境にて読み替えていただきたい。

  $ ip addr
  1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
  valid_lft forever preferred_lft forever
  inet6 ::1/128 scope host
  valid_lft forever preferred_lft forever
  2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  link/ether f9:b0:14:5e:ef:35 brd ff:ff:ff:ff:ff:ff
  inet 192.168.0.6/24 brd 192.168.0.255 scope global noprefixroute enp2s0
  valid_lft forever preferred_lft forever
  inet6 f980::f9b0:14ff:fe5e:ef35/64 scope link
  valid_lft forever preferred_lft forever
  3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
  link/ether 52:54:00:91:23:6b brd ff:ff:ff:ff:ff:ff
  inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
  valid_lft forever preferred_lft forever
  4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
  link/ether 52:54:00:91:23:6b brd ff:ff:ff:ff:ff:ff
  5: wlp0s20u10: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 2312 qdisc mq state DORMANT group default qlen 1000
  link/ether b2:a7:05:83:cb:51 brd ff:ff:ff:ff:ff:ff
  (上記は表示の一例であり、環境によって細部は異なる;MAC アドレスと IP アドレスは説明用のデタラメな値である)

  このように、ip コマンドでも、無線 LAN 子機のデバイス wlp0s20u10 が MAC アドレス b2:a7:05:83:cb:51 で認識されている事が分かる。

  もしルータで「知らない MAC アドレスは無視する」設定をしている場合は、上記で得られた MAC アドレスをルータに設定しておく。

  次に IP アドレスやセキュリティの設定を行う。 本例では、「常用したい高速な 5GHz 帯」と「低速だが安定しやすい 2.4GHz 帯」の、2つの無線ネットワークプロファイルを作成し、それぞれにおいて設定をする。 プロファイル名は何でも良いが、ルータが供給する SSID に合わせておくのが分かりやすくて無難だと私は思う。

  プロファイル作成・設定の方法はいくつか有るが、nmtui を使うのが私の好みである(nmtui が起動できない場合は、$ sudo systemctl start NetworkManager.service を実行しておく)。

  なお本例では、

  • 5GHz 帯の SSID とプロファイル名は「ROUTER-A」
  • 2.4GHz 帯の SSID とプロファイル名は「ROUTER-G」
  • セキュリティは「WPA & WPA2 パーソナル」
  • 割り当て IPv4 アドレスは 192.168.11.8
  • デフォルトゲートウェイとなるルータの IPv4 アドレスは 192.168.11.1
  • DNS サーバはプライマリが 1.1.1.1 でセカンダリが 1.0.0.1
  • IPv6 は使用しない

  と設定するので、それぞれの環境に合わせ適宜読み替えていただきたい。

  $ sudo nmtui

  「接続の編集
    「Ethernet」「追加
      「新規の接続」「Wi-Fi」「作成
        「プロファイル名ROUTER-A
        「バイスwlp0s20u10
        「SSIDROUTER-A
        モード」「Client
        「セキュリティ」「WPA & WPA2 パーソナル
        「パスワード********
        「IPv4 設定」「手作業」「表示する
          「アドレス」「追加192.168.11.8
          「ゲートウェイ192.168.11.1
          「DNS サーバー」「追加1.1.1.1 「追加1.0.0.1
        「IPv6 設定」「無視する
        「自動的に接続する」にチェック
        「全ユーザーに使用可能」にチェック
    「戻る
    「Ethernet」「追加
      「新規の接続」「Wi-Fi」「作成
        「プロファイル名ROUTER-G
        「バイスwlp0s20u10
        「SSIDROUTER-G
        「モード」「Client
        「セキュリティ」「WPA & WPA2 パーソナル
        「パスワード********
        「IPv4 設定」「手作業」「表示する
          「アドレス」「追加192.168.11.8
          「ゲートウェイ192.168.11.1
          「DNS サーバー」「追加1.1.1.1 「追加1.0.0.1
        「IPv6 設定」「無視する
        「全ユーザーに使用可能」にチェック
    「戻る
  「接続をアクティベートする
    「Wi-Fi
    * ROUTER-A が「解除」になっており、他が「アクティベート」になっている事を確認する
    「戻る
  「終了

  設定が終わったら、それを反映させる。
  $ sudo systemctl restart NetworkManager.service

 5.6 WI-U2-433DM の動作確認

  いくつかのコマンドで動作状況を確認できる。
  $ nmcli dev status

DEVICE TYPE STATE CONNECTION
wlp0s20u10 wifi 接続済み ROUTER-A(ルータと 5.0GHz 帯で接続出来ている事を示す)
enp2s0 ethernet 接続済み enp2s0
virbr0 bridge 接続済み (外部) virbr0
p2p-dev-wlp0s20u10 wifi-p2p 切断済み --
lo loopback 管理無し --
virbr0-nic tun 管理無し --
(これは表示例であり、細かい点は環境により異なる)

  $ nmcli con show

NAME UUID TYPE DEVICE
ROUTER-A 0a1bc909-8407-4e86-abd6-ae38346798ec wifi wlp0s20u10
enp2s0 eb618bad-9122-33fb-ba81-8f9ff5a23468 ethernet enp2s0
virbr0 fe51ef0d-af0b-4abb-a18a-06004590def7 bridge virbr0
ROUTER-G 1bfcd231-02c1-4bb7-9af5-853383a74411 wifi --(今は 2.4GHz 帯プロファイルが使われていない事を示す)
(これは表示例であり、細かい点は環境により異なる)

  $ ip addr
  1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  inet 127.0.0.1/8 scope host lo
  valid_lft forever preferred_lft forever
  inet6 ::1/128 scope host
  valid_lft forever preferred_lft forever
  2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
  link/ether f9:b0:14:5e:ef:35 brd ff:ff:ff:ff:ff:ff
  inet 192.168.0.6/24 brd 192.168.0.255 scope global noprefixroute enp2s0
  valid_lft forever preferred_lft forever
  inet6 f980::f9b0:14ff:fe5e:ef35/64 scope link
  valid_lft forever preferred_lft forever
  3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
  link/ether 52:54:00:91:23:6b brd ff:ff:ff:ff:ff:ff
  inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
  valid_lft forever preferred_lft forever
  4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
  link/ether 52:54:00:91:23:6b brd ff:ff:ff:ff:ff:ff
  5: wlp0s20u10: <NO-CARRIER,BROADCAST,MULTICAST,UP,LOWER_UP> mtu 2312 qdisc mq state DORMANT group default qlen 1000
  link/ether b2:a7:05:83:cb:51 brd ff:ff:ff:ff:ff:ff
  inet 192.168.11.8/24 brd 192.168.11.255 scope global noprefixroute wlp0s20u10(IP アドレスが設定されている事を示す)
  valid_lft forever preferred_lft forever
  inet6 240d:1a:5b2:7000:b2a7:05ff:fe83:cb51/64 scope global dynamic mngtmpaddr
  valid_lft 10234sec preferred_lft 10234sec
  inet6 fe80::b2a7:05ff:fe83:cb51/64 scope link
  valid_lft forever preferred_lft forever
  (上記は表示の一例であり、環境によって細部は異なる;MAC アドレスと IP アドレスは説明用のデタラメな値である)

 

  インターネット疎通を確認する。
  $ ping www.yahoo.co.jp
  PING edge12.g.yimg.jp (182.22.16.251) 56(84) bytes of data.
  64 bytes from 182.22.16.251 (182.22.16.251): icmp_seq=1 ttl=54 time=8.43 ms
  64 bytes from 182.22.16.251 (182.22.16.251): icmp_seq=2 ttl=54 time=6.19 ms
  64 bytes from 182.22.16.251 (182.22.16.251): icmp_seq=3 ttl=54 time=5.14 ms
  64 bytes from 182.22.16.251 (182.22.16.251): icmp_seq=4 ttl=54 time=4.36 ms
  64 bytes from 182.22.16.251 (182.22.16.251): icmp_seq=5 ttl=54 time=9.25 ms
  ^C
  --- edge12.g.yimg.jp ping statistics ---
  5 packets transmitted, 5 received, 0% packet loss, time 9ms
  rtt min/avg/max/mdev = 4.358/6.672/9.245/1.880 ms
  (上記は表示例の1つ、5回目で Ctrl+C した事を示す、細かい部分は環境により異なる)

 

6.無線 LAN インタフェース関連コマンドあれこれ

  $ iw wlp0s20u10 info(インタフェース名は環境により異なる)
  $ nmcli dev status
  $ nmcli con show

  • ネットワーク設定の確認

  $ ip addr
  $ ip link
  $ ip route

  • 無線現況の確認

  $ nmcli dev wifi

  • 接続プロファイル設定の確認

  $ nmcli -p con show ROUTER-A(プロファイル名は設定により異なる)
  $ nmcli -p con show ROUTER-G(プロファイル名は設定により異なる)

  • 接続プロファイルのアクティブ切り替えと切り戻し

  $ sudo nmcli con down ROUTER-A && sudo nmcli con up ROUTER-G(プロファイル名は設定により異なる)
  $ sudo nmcli con down ROUTER-G && sudo nmcli con up ROUTER-A(プロファイル名は設定により異なる)

 

7.おわりに

 Linux における無線 LAN 子機インストールの急所は、「内蔵チップと対応デバイスドライバの対応をきちんとする事」に尽きる、とつくづく思った。 ここを誤解していると、試行錯誤に時間を取られてなかなか結果が得られない。

 ロクに読めもしない英語のサイトを数十個も閲覧したり、いくつものドライバパッケージを GitHub から落として試してみたり、よく分からないままドライバのソースをあちこちいじくり回したり、コンパイルエラーを姑息的に取り除こうとしてみたり、wpa_supplicant を使うのか考えてみたり、もしや DKMS を使うのかと迷走したり、ビルドは完了して USB デバイスとしては認識しているのだから(しかし青色ランプは点いていない)残りは「設定」だけだと勇み足を踏んでみたり……そんな無駄足は、もうこりごりである、という思いが、本記事を書いた原動力となった。

 「すぐ無線 LAN を使いたいだけだ、とにかく有線で無ければ良いのだ」という場合には、差すだけで使える WLI-UC-GNM を選ぶべきだろう。

 

 最後に……今回の設定や本記事作成にあたっては、先人の方々が遺してくれた、数々のサイトを参考にさせていただいた。 以下に挙げさせていただくと共に、御礼を申し上げたい。

(以上)