Linuxで無線LAN子機WDC-433DU2H2-Bを使う


Ubuntu 20.04 を入れたPC用にELECOMの無線LAN子機 WDC-433DU2H2-B を買ってきたのですが、そのままではつながりませんでした。それでいろいろ調べた結果、ドライバを入れて動かすことに成功しました。同じ目に会ってる方が少なからずいると思いますので、そのやり方をメモしておきます。

私はUbuntu20.04を使いましたが、おそらく同様の方法で他のバージョンでも、またUbuntu以外のLinuxでも開発環境や下記のDKMSを入れることができれば同様のやり方で動くのではないかと思います。

WDC-433DU2H2-B以外の子機をお持ちの方は、まず下記の手順の2.のところを読んでみてください。もしかしたら同じ方法が使えるかもしれません。

本記事は2022年3月に書いています。その時点での情報です。今後変わるかもしれません。

# 手順

## 0. 開発環境を整える

私はふだんからいろいろコンパイルしている環境だったので、今回は特にこの点は何もしていません。おそらく必要なのは、ビルド環境一式とカーネルヘッダくらいだと思います。あとソースを取ってくるのにgitも必要です。つまり以下でよいと思います、たぶん。

```
sudo apt install build-essential linux-headers-generic git
```

足りないものありましたらごめんなさい、この辺はすみませんがご自分でお調べください。物知りな方、「他にこれも必要」等ありましたらご指摘ください。

## 1. ドライバのソースを取ってくる

ソースをgitで取ってきて、適当なディレクトリに入れます。

```
GITHOME=/home/myuserid/githome # 好きな場所でよい
cd $GITHOME
git clone https://github.com/aircrack-ng/rtl8812au
```

以下、ほぼ上のURLに書いてある通りにします。ただしその前に、

## 2. ソースを一点修正

残念ながらこのソースはそのままではWDC-433DU2H2-Bには対応していません。1行だけ追加が必要です。

ソースの中の`os_dep/linux/usb_intf.c`を開きます。その中に `#ifdef CONFIG_RTL8821A` の行を探します。こんな感じになっています。

```
#ifdef CONFIG_RTL8821A
        /*=== Realtek demoboard ===*/
        {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x0811), .driver_info = RTL8821}, /* Default ID */
        {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x0821), .driver_info = RTL8821}, /* Default ID */
        　　：
        /*=== Customer ID ===*/
        {USB_DEVICE(0x0411, 0x0242), .driver_info = RTL8821}, /* ELECOM - WDC-433DU2H */
        {USB_DEVICE(0x0411, 0x029B), .driver_info = RTL8821}, /* Buffalo - WI-U2-433DHP */
        {USB_DEVICE(0x04BB, 0x0953), .driver_info = RTL8821}, /* I-O DATA - Edimax */
        {USB_DEVICE(0x056E, 0x4007), .driver_info = RTL8821}, /* Elecom - WDC-433DU2HBK */
        {USB_DEVICE(0x056E, 0x400E), .driver_info = RTL8821}, /* ELECOM -  ELECOM */
        {USB_DEVICE(0x056E, 0x400F), .driver_info = RTL8821}, /* ELECOM -  ELECOM */
        {USB_DEVICE(0x0846, 0x9052), .driver_info = RTL8821}, /* Netgear - A6100 */
```

ここに次の1行を追加します。デバイスの順番はたぶん無関係だと思いますのでどこでもいいでしょう。

```
{USB_DEVICE(0x056E, 0x4010), .driver_info = RTL8821}, /* ELECOM -  ELECOM */
```

0x056EがELECOMのベンダID、0x4010がWDC-433DU2H2-BのProductIDです。ちなみにこれはコマンド"lsusb"でわかります。

WDC-433DU2H2-B以外の無線LAN子機を持ってる方も、その子機のチップがRTL8811/8821/8812を使っているなら同じ方法でうまく行くかもしれません。というかusb_intf.cを見て運よくその子機が載ってるなら、ソース修正は必要ないわけです。ただしソースのコメントは正しいとは限らないようなので（Customer IDのすぐ下の行にはELECOMとあるけど、ベンダIDが違う…）、lsusbで確認した方がよさそうです。

## 3. DKMSを入れる

```
sudo apt install dkms
```

DKMSというのは、カーネルにドライバを自動で組み込むための仕組み、なんだそうです。（私もよく知りません、書いてある通りにやってるだけです）

## 4. コンパイル＆インストール

ソースのディレクトリ（上の例だと$GITHOME/rtl8812au）に行き、以下のコマンドを実行するとコンパイルからインストールまでやってくれます。

```
sudo make dkms_install
```

## 5. 再起動

再起動するとWDC-433DU2H2-Bが認識されると思います。

手順としては以上になります。以下はより詳しく知りたい方向けのおまけ情報です。

# その他注意点等

ubuntuのパッケージにrtl8812au-dkmsというのがあるのですが、これを試してみてもダメでした。

「最新版ならサポートされてるんじゃないか？」と思ってUbuntu 21.10も試してみましたが、これも（デフォルト設定では）ダメでした。

# 参照した情報

- aircrack-ng/rtl8812auについては、いろいろ検索していた中で[この記事](https://askubuntu.com/questions/1279251/driver-for-usb-wifi-dongle-realtek-rtl8811au-chipset-and-ubuntu-server-20-04?answertab=modifieddesc#tab-top)で知りました

- WDC-433DU2H2-Bのチップに関しては[この記事](https://qiita.com/newtypehiro919/items/69758c50cad2ba9ecc19?msclkid=cd34b6e0a75911eca320ad29235480ef)で知りました。「WDC-433DU2H2-B は…Realtek製のWiFiコントローラーチップ RTL8811AU を採用しているようだが、RTL8821AU用のカーネルモジュールにて動作させることが可能」「番号が8812なのは間違いではない。8812用と8821用のカーネルモジュールが同時提供されていることはよくある」とのことです。