Arch Linuxで無線LAN TP-Link Archer T3U Nano を設定
November 03, 2024
引っ越しに伴って、有線で使っていた自作デスクトップのArch Linuxを無線LANに対応した。 受信機はコンパクトで評価が高かった TP-Link Archer T3U Nano にした。
手順は基本的に ArchWiki-ネットワーク設定/ワイヤレス に従って進めていく。
1. デバイスドライバの確認
デバイスを接続したら、ドライバのインストール状況を確認する。今回はUSB接続のため lsusb -v
で確認する。PCI接続の場合には、lspci -k
で確認すると良い。
~ ❯ lsusb -v
Bus 005 Device 037: ID 2357:012e TP-Link 802.11ac NIC
Couldn't open device, some information will be missing
Negotiated speed: High Speed (480Mbps)
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.10
bDeviceClass 0 [unknown]
bDeviceSubClass 0 [unknown]
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x2357 TP-Link
idProduct 0x012e 802.11ac NIC
bcdDevice 2.10
iManufacturer 1 Realtek
iProduct 2 802.11ac NIC
iSerial 3 123456
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0035
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 5
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 255 Vendor Specific Subclass
bInterfaceProtocol 255 Vendor Specific Protocol
iInterface 2
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x05 EP 5 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x06 EP 6 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x87 EP 7 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 3
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x08 EP 8 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Couldn't open device, some information will be missing
とエラーが表示されている。
カードが USB デバイスの場合、dmesg | grep usbcore を root ユーザーとして実行すると usbcore: registered new interface driver rtl8187 のように表示されるはずです。
とWikiに記載があるが、dmesg | grep usbcore
を実行するものの何も表示されない。
起動時に、udev がハードウェアの一覧を作成し、対応するハードウェア用の適切なモジュール(ドライバ)をロードします。これにより、ネットワークインターフェイスの作成が可能になります。
とのことなので、USBを刺した状態で再起動すると、dmesg | grep usbcore
で認識することが確認できた。再度、lsusb -v
でエラーが消えていることを確認。
2. ネットワークインターフェースの有効化
ip link
でワイヤレスネットワークインターフェースが作成されたことを確認する。
3: wlp30s0f3u4: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
ip link set <YOUR_INTERFACE_NAME> up
でインターフェースを有効化する。今回の場合は、wlp30s0f3u4
がインターフェース名となる。
ip link set wlp30s0f3u4 up
有効化されたら iw dev <YOUR_INTERFACE_NAME> scan
で ネットワークの一覧を表示し、自身のWi-Fiを探す。パイプしてlessするか、SSIDでgrepすると良い。
sudo iw dev wlp30s0f3u4 scan | grep SSID
SSID: hoge
SSID: fuga
SSID: piyo
3. wpa_supplicant を利用してネットワーク接続
wpa_supplicant は、暗号化と認証・自動接続の機能を持ったWi-Fi管理用のソフト。
次のコマンドでネットワークへ接続できる。
wpa_supplicant -B -i <YOUR_INTERFACE_NAME> -c <(wpa_passphrase <YOUR_SSID> <YOUR_PASSPHRASE>)
-B
はバックグランドでの実行を表しコマンド実行後に端末をブロックしないためのもの。-i
はインターフェースを指定するオプション。-c
は設定ファイルを指定するオプション。ここには、wpa_passphrase
の出力をプロセス置換で渡す。
注意点として、sudo で実行するとプロセスが置き換えられるため、rootシェルでの実行が必要。sudoで実行すると下記のようなエラーになる。
Successfully initialized wpa_supplicant
Failed to open config file '/proc/self/fd/11', error: No such file or directory
Failed to read or parse configuration '/proc/self/fd/11'.
wpa_passphrase
の結果をファイルに書き出してから実行する場合には、sudo でも実行できる。
wpa_supplicant が行うのは無線ネットワークへの接続と認証のみのため、Successfully initialized wpa_supplicant
が表示され、他にエラーがない状態になったら、dhcpcd
を実行してIPアドレスやネットワーク設定の取得を行う。
sudo dhcpcd
成功したらインターネット接続が可能になっているはず。
4. 起動時に自動接続する
上記だけだと、再起動するとまたオフラインになってしまう。毎回設定するのは面倒なので自動接続するようにする。 wpa_supplicant には systemd サービスファイルが含まれており、これらを有効にすることで起動時に自動接続が可能。
3で wpa_passphrase
コマンドで出力した結果を、/etc/wpa_supplicant/wpa_supplicant-<YOUR_INTERFACE_NAME>.conf
へ保存する。
出力されたconfファイルは下記のようになっている。
network={
ssid="<YOUR_SSID>"
#psk="<YOUR_PASSPHRASE>"
psk=59e0d07fa4c7741797a4e394f38a5c321e3bed51d54ad5fcbd3f84bc7415d73d
}
そして、systemctl enable wpa_supplicant@<YOUR_INTERFACE_NAME>
で特定のインターフェースに対して有効にしておく。
この際に、systemctl enable dhcpcd@<YOUR_INTERFACE_NAME>
で dhcpcd
も有効にしておく。
sudo systemctl enable wpa_supplicant@wlp30s0f3u4
Created symlink '/etc/systemd/system/multi-user.target.wants/wpa_supplicant@wlp30s0f3u4.service' → '/usr/lib/systemd/system/wpa_supplicant@.service'.
sudo systemctl enable dhcpcd@wlp30s0f3u4
Created symlink '/etc/systemd/system/multi-user.target.wants/dhcpcd@wlp30s0f3u4.service' → '/usr/lib/systemd/system/dhcpcd@.service'.
これで起動時に自動接続できるようになる。