Arch Linuxで無線LAN TP-Link Archer T3U Nano を設定

November 03, 2024

tp link

引っ越しに伴って、有線で使っていた自作デスクトップの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'.

これで起動時に自動接続できるようになる。


© 2020-2024 ntsk.