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も試してみましたが、これも(デフォルト設定では)ダメでした。