#目次
1.はじめに
2.ハマった問題点
3.パッケージのダウンロード方法(有線LANを使えない方)
4.ドライバーの構築(有線LAN使える方はここから)
5.おわりに
6.参考
#1. はじめに
実家でPCを購入したときに、一番評判の良いWiFiアダプターを買ったところ、Windowsには簡単につなげたものの、Ubuntu20.04にはつながらず、苦労したため、環境の構築方法を共有します。
これからWiFiアダプターを購入する方は、自分の使う全てのOSに対応しているものを購入することをおすすめします。
#2. ハマった問題点
TP-LinkのArcher T9UHを購入したところ、公式のLinuxの対応がUbuntu16.04で止まっており、なおかつ無線でつなぎたいからWiFiアダプターを買っているのに、初期設定では有線LANを必要としました。
Ubuntu20.04にT9UHを挿すと、USB機器として認識するものの(下図lsusb
)、ドライバーがない状態でした。Ubuntu18.04でうまくいっている記事と同様の処理もしてもドライバーがうまく機能せず、WiFiマークが出ませんでした。
$ lsusb | grep TP-Link
Bus 001 Device 002: ID 2357:0106 TP-Link Archer T9UH v1 [Realtek RTL8814AU]
#3. パッケージのダウンロード方法(有線LANを使えない方)
4.ドライバーの構築でsudo apt install hogehoge
をする必要があるのですが、有線LANをつなげられない状況だったので、オフラインでのパッケージの落とし方について、調べました。
必要なもの
- ネット環境のあるUbuntu20.04(WSLでも可)
- USBメモリー
ネット環境のあるPCで行う作業
まずネット環境のあるUbuntu20.04(以後ネットPCと呼びます)に、パッケージの依存関係を表示するapt-rdepends
を入れます。
sudo apt install apt-rdepends
作業するディレクトリを作成します。
mkdir -p debs && cd debs
apt download <package>
で一つのパッケージに対する.deb
ファイルを取得できるのですが、これとapt-rdepends
を絡めたシェルスクリプトgetdepends.sh
を作成します。(参照)
#!/bin/bash
export MAXPARAMETERS=255
function array_contains_find_index() {
local n=$#
local i=0
local value=${!n}
for (( i=1; i < n; i++ )) {
if [ "${!i}" == "${value}" ]; then
echo "REMOVING $i: ${!i} = ${value}"
return $i
fi
}
return $MAXPARAMETERS
}
LIST=( $( apt-rdepends $1 | grep -v "^ " ) )
echo ${LIST[*]}
read -n1 -r -p "... Packages that will be downloaded (Continue or CTRL+C) ..."
RESULTS=( $( apt-get download ${LIST[*]} |& cut -d' ' -f 8 ) )
LISTLEN=${#LIST[@]}
while [ ${#RESULTS[@]} -gt 0 ]; do
for (( i=0; i < $LISTLEN; i++ )); do
array_contains_find_index ${RESULTS[@]} ${LIST[$i]}
ret=$?
if (( $ret != $MAXPARAMETERS )); then
unset LIST[$i]
fi
done
FULLRESULTS=$( apt-get download ${LIST[*]} 2>&1 )
RESULTS=( $( echo $FULLRESULTS |& cut -d' ' -f 11 | sed -r "s/'(.*?):(.*$)/\1/g" ) )
done
apt-get download ${LIST[*]}
これを使って下記のパッケージを依存関係含めて、.deb
ファイルにします。
sudo chmod 755 getdepends.sh # 実行権限を付与
./getdepends.sh build-essential
./getdepends.sh make
./getdepends.sh dkms
./getdepends.sh openssl
./getdepends.sh mokutil
これで必要なパッケージが揃いました。ネットのないPCでは、パッケージに加え、git clone
もできないため、ネットPCでリポジトリを入れておきます。
git clone https://github.com/puuuuh/rtl8814au.git
以上で、ネットから引っ張る必要のあるものが揃ったので、パッケージ群のdebs
ディレクトリとリポジトリのrtl8814au
をUSBメモリに移して、ネットのないPCに移します。
T9UHをつなぐPCで行う作業
USBメモリのdebs
とrtl8814au
を適当なところに配置してください。
パッケージのインストールは以下のように行います。
cd debs
sudo apt install -y ./*.deb
#4. ドライバーの構築(有線LAN使える方はここから)
github.com/puuuuh/rtl8814auを使って、ドライバーを入れていきます。
sudo apt update && sudo apt install -y build-essential make dkms openssl mokutil # 3.を行った人は必要ない
git clone https://github.com/puuuuh/rtl8814au # 3.を行った人は必要ない
cd rtl8814au
make dkms_install
openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Descriptive name/"
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 ./MOK.priv ./MOK.der /lib/modules/$(uname -r)/updates/dkms/8814au.ko
sudo mokutil --import MOK.der
sudo reboot
以上の処理はREADME.mdに従い、行っているのですが、今回のケースではUEFI Secure Bootの2.Sign the moduleで行う$(modinfo -n rtl6612au)
が動作しなかったため、それに相応するものに置き換えています。
再起動が終わったら、WiFiマークが点いて、使えるようになっていると思います。
もしマークが点かない場合は、何度か再起動をしてみてください。
#5. おわりに
公式の対応がないWiFiアダプターを購入するととても苦労するので、買い物はよく考えてするようにしようと思いました。
#6. 参考
- Archer T9UH AC1900 ハイパワー デュアルバンド 無線LAN子機
https://www.tp-link.com/jp/home-networking/adapter/archer-t9uh/ - オフライン環境のパッケージのインストール
https://superuser.com/questions/1112525/ignore-apt-get-download-errors - ドライバのgithub
https://github.com/puuuuh/rtl8814au - 公式のドライバ(Ubuntu16.04)
https://www.tp-link.com/jp/support/download/archer-t9uh/ - Ubuntu18.04でTP-LinkのArcher T9UHを使う
https://qiita.com/Iyugo/items/8b93277398ef9cf7e084