Ubuntu 18.04をPCにインストールして、いざ使おうとしたらWiFiが使えなくて困ってしまった。 Ubuntuでは標準でWI-U3-866dのドライバーが入っていないため、自分でインストールする必要があった。 ただLinuxのドライバがどこにあるのかさっぱりわからず、しかもぐぐると古い情報と新しい情報が入り混じってどれが正しいのかわからない。
ようやっと正解っぽいのにたどり着いたので、メモしておく。
準備の準備
この時点では当然インターネットに繋がっていないため、別の方法でドライバを入手する必要がある。またインストール直後のUbuntuは開発環境が入ってないので、どうしょうもない。(開発環境をはじめから入れておくオプションがあったりする?)
私の場合はWindows10とのDual boot環境だったので、Windows10にVirtualboxを入れてUbuntuを入れてドライバをコンパイルすることにした。
と、ここまで準備できているとする。
ドライバの入手とコンパイル@Ubuntu on Windows10
BuffaloのWI-U3-866Dを使いたくて、調べてみると中身はrtl8812auというチップらしい。なので、rtl8812auのドライバが使えるとのこと。
Qiitaで載ってたドライバでは、最初はうまく動いていたけど何度か再起動していたらうまく動かなくなってしまった。
深追いしてもわからなそうだったので、もっとぐぐったらもっといいページが見つかった。 このページでバージョンが5.2.20のドライバがあることを知った(上記Qiitaで紹介していたのは4.2.2)。
https://github.com/zebulon2/rtl8812au-driver-5.2.20
git
でファイルをダウンロードする。
$ git clone https://github.com/zebulon2/rtl8812au-driver-5.2.20.git
$ cd rtl8812au-driver-5.2.20
このページを参考にして、ソースを書き換え、USBのIDからドライバを見つけられるようにする。
$ vi os_dep/linux/usb_intf.c
{USB_DEVICE(0x2604, 0x0012), .driver_info = RTL8812}, /* Tenda - U12 */
{USB_DEVICE(0x0411, 0x025d), .driver_info = RTL8812}, /* Buffalo - WI-U3-866D */ //ここを追加
このコードは、lsusb
して出てくる番号。
% lsusb | grep BUFFALO
Bus 001 Device 004: ID 0411:025d BUFFALO INC. (formerly MelCo., Inc.)
コンパイルしてtar
で固める。
$ make
$ cd..
$ tar cf rtl8812au.tar rtl8812au-driver-5.2.20
コンパイルするためにいくつかパッケージをインストールしたけど、メモしてなかったから忘れてしまった。。。
できたtarファイルをUSBメモリ等に保存しておく。
ドライバのインストール@Ubuntu18.04
以降はドライバをインストールしたいUbuntuで作業する。
USBメモリに保存しておいたtarファイルをコピーしてくる。
$ cp <USBメモリ>/rtl8812au.tar .
$ tar xf rtl8812au.tar
$ cd rtl8812au-driver-5.2.20
$ sudo insmod 8812au.ko
$ sudo modprobe 8812au
これでできない場合は、Qiitaに載っていた方法で対応する。
$ sudo cp 8812au.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless
$ sudo depmod
lsmod
で認識できたら成功。WiFiの設定ができるようになるはず。
$ lsmod|grep 8812au
8812au 1470464 0
cfg80211 622592 1 8812au
DKMSでインストール
今回知ったんだけど、新しいカーネルをインストールしたときに自動的にドライバをコンパイルしてくれる仕組みがあって、 Dynamic Kernel Module Support(DKMS)というらしい。
簡単に導入できたのでメモしておく。 gitリポジトリのREADME.mdにも手順が載っているので、そちらを参照してもよいです。
/usr/src
にドライバをコピーする。ディレクトリ名にバージョンを入れておくのがポイントっぽい。
$ sudo cp rtl8812au-driver-5.2.20 /usr/src/rtl8812au-5.2.20
dkms
パッケージをインストールする。
$ sudo apt install dkms
登録、ビルド、インストールの順ですすめる。
$ cd /usr/src/rtl8812au-5.2.20
$ sudo dkms add -m rtl8812au -v 5.2.20
$ sudo dkms build -m rtl8812au -v 5.2.20
$ sudo dkms install -m rtl8812au -v 5.2.20
インストールできたかどうか、確認。
$ dkms status
nvidia, 410.78, 4.15.0-43-generic, x86_64: installed
rtl8812au, 5.2.20, 4.15.0-43-generic, x86_64: installed
rtl8812auが入っていればOK。 nvidiaのドライバもDKMSの仕組みでインストールされていることも確認できた。
ここでインストールに失敗してしまったら、/lib/modules/$(uname -r)/kernel/drivers/net/wireless
の8812au.ko
を削除すればよい。
DKMSのドライバも削除しておく。
$ sudo dkms remove -m rtl8812au -v 5.2.20 --all
これでもう一度、登録、ビルド、インストールすればうまくいく(はず)。
以上。