Arch Linux - 無線 LAN 接続

無線 LAN 接続について
# ワイヤレス設定 - ArchWiki
ドライバ
※無線 LAN で接続するには、無線 LAN のチップセットに応じたドライバが必要になります。

Arch Linux では、一般的なドライバの多くは、linux-firmware パッケージ内に含まれています。

# linux-firmware パッケージ

この中に必要なドライバが含まれていない場合は、メーカーの HP からダウンロードするなどして、手動でインストールする必要があります。

比較的新しい製品や、あまり一般的でないメーカーの場合は、Linux 用ドライバがなかったり、あっても正常に動作しない場合があるので、無線 LAN デバイスを購入する前に、あらかじめ Linux で使えるかどうかを確認しておいた方が良いです。

USB 接続型の場合は、製品によって対応状況はバラバラですが、少し古めの製品の方が、接続できる可能性は高いです。

ドライバがない場合や、正しく動作しない場合は、Arch Wiki の方で情報を確認してください。
ドライバがロードされていて使える状態にあるか
linux-firmware パッケージがインストールされている場合、必要なドライバがあれば、起動時に自動でロードされるので、デバイスの一覧を表示して、無線 LAN のドライバがすでにロードされているかを確認します。

▼ 内蔵無線 LAN や PCI 接続の場合 (-k でドライバの情報表示)
※ pciutils パッケージ
$ lspci -k

▼ USB 接続の無線 LAN の場合 (-v で詳細を表示)
※ usbutils パッケージ
$ lsusb -v

Wireless が無線という意味なので、デバイス名にそのような文字がある所を探します。

02:00.0 Network controller: Intel Corporation Wireless 3160 (rev 83)
    Subsystem: Intel Corporation Dual Band Wireless AC 3160
    Kernel driver in use: iwlwifi
    Kernel modules: iwlwifi

上記の場合は、Intel の内蔵無線 LAN なので、iwlwifi モジュールがロードされていることがわかります。
このような状態であれば、問題なく使えます。
(USB 接続の場合は、表示結果が異なります)

ドライバがロードされていない場合、既存のファームウェアでは対応できないということなので、自分でドライバを用意する必要があります。
メーカーによって方法が異なるので、Arch Wiki の方を確認してください。
ドライバのファイルを確認
以下のコマンドで、/usr/lib/firmware にあるファームウェアのファイルのうち、どのファイルが使用されているかを確認することができます。
※ root で実行してください。

# dmesg | grep firmware

[    8.720537] iwlwifi 0000:02:00.0: loaded firmware version 17.3216344376.0 3160-17.ucode op_mode iwlmvm
[    9.203187] Bluetooth: hci0: Intel Bluetooth firmware file: intel/ibt-hw-37.7.10-fw-1.0.1.2d.d.bseq

この場合、iwlwifi のモジュールに関して、3160-17.ucode という記述があるので、/usr/lib/firmware から関連ファイルを探すと、iwlwifi-3160-17.ucode.xz のファイルが見つかり、その中に iwlwifi-3160-17.ucode ファイルが含まれていました。
おそらく、このファイルが使われているものと思われます。

また、同様に、Bluetooth 用のドライバとして、/usr/lib/firmware/intel/ibt-hw-37.7.10-fw-1.0.1.2d.d.bseq.xz が使われていることもわかります。
インターフェイス名と設定を確認
ドライバが存在していて、そのデバイスが使える状態なら、次に、無線 LAN デバイスのインターフェイス名を確認します。
Linux では、デバイスごとに自動で名前が付けられています。

ip コマンドで、ネットワーク関連の操作が行えます。
iw コマンドは、無線 LAN 用のコマンドなので、そちらを使うことも出来ますが、今回は ip を使います。
インターフェイス名の確認
ネットワークインターフェイスの一覧と状態を表示します。

$ ip link

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s31f6: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether ... brd ff:ff:ff:ff:ff:ff
3: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
    link/ether ... brd ff:ff:ff:ff:ff:ff

結果は、環境によって異なります。

一番最初の lo は無視してください。
2番目の enp0s31f6 は、有線 LAN です。
3番目の wlp2s0 が、無線 LAN となります。

有線 LAN は先頭が enp、無線 LAN は先頭が wlp なので、先頭の名前で判断してください。
無線 LAN のインターフェイス名は、覚えておくか、メモしておきます。
無線 LAN の知識
無線 LAN 接続をする時に必要となる知識を、先に説明しておきます。
SSID/ESSID
無線 LAN アクセスポイント(ルータ)ごとの識別名です。
32 文字までの英数字で構成されます。

これは、接続するアクセスポイントを指定する時に使います。

コマンドで、近所のルータの名前を検索することもできますが、できれば、自分の家のルータの情報は、あらかじめ調べておいてください。
機器の裏などに表示してあります。
WEP/WPA/WPA2
通信を暗号化するための認証方式です。
暗号化を設定しておかないと、電波が届く範囲内であれば、誰でもそのアクセスポイントに接続できてしまうので、自宅での通常使用であれば、必ず設定しておきます。

WEP初期の規格。様々な脆弱性が発見されているため、現在ではほぼ使われていません
WPAWEP を強化したもの
WPA2WPA をさらに強化したもの (2004年)
WPA3WPA2 をさらに強化したもの (2018年)

ルータと Linux 両方で対応している、一番新しいものを使うことになります。

暗号化を使う場合は、そのアクセスポイントに接続する時に、キー (パスワード) の文字列が必要になります。
キーを知っている人間しかそのアクセスポイントに接続できないので、他の人に使われる心配はありません。

キーの文字列は、ルータの設定で変えることができます (有線/無線接続して、パソコン上のブラウザで設定する)。

最近発売されているルータの場合は、出荷時にデフォルトのキーが設定されている場合が多いです。
機器の裏などにキーが書いてあるので、最初の接続時などは、そのキーを使います。
TKIP/AES
TKIP、AES は暗号化の方法です。
ルータの設定では、この2つを選択できる場合があります。

TKIP よりも AES の方が強固なので、通常は AES を選択してください。
接続について
インターフェイスの準備が整って、接続に必要な情報も用意したら、実際に接続していきます。
Linux で無線 LAN 接続するための方法は、いくつかあります。
コマンド/パッケージ
ネットワーク接続には、以下のようなコマンドやパッケージを使います。

ネットワーク全般ip コマンド (iproute2 パッケージ。base に含まれる)
IP アドレス関連ip コマンド (手動設定時)
dhcpcd (DHCP による、IP アドレスの自動取得)
DNSresolvconf コマンド (openresolv パッケージ。/etc/resolv.conf の生成)
無線関連iw (ユーティリティ)
wpa_supplicant (無線接続)
iwd (無線接続)
ネットワーク管理netctl
systemd-networkd (systemd によるネットワーク設定)

# netctl - ArchWiki
# iwd - ArchWiki
# systemd-networked - ArchWiki

無線 LAN 接続の場合、「iwd 単体」「netctl + wpa_supplicant」「systemd-networkd + (iwd or wpa_supplicant)」などの方法があります。

詳しい接続方法は、ネットワーク設定 の方を見てください。
iwd
iwd は、Intel によって作られた、無線 LAN 接続のためのデーモンです。
wpa_supplicant を置き換えることを目的としています。

現在のインストール ISO 内には、無線 LAN 接続用に iwd が含まれているので、Arch Linux のインストール時は、iwd を使って接続することになります。

iwd 単体で接続することもできますが、systemd-networkd + iwd で接続することもできます。
使い方
まず、systemd で iwd のサービスを起動する必要がありますが、Arch Linux のインストール時は、自動で起動されています。

## 起動
# systemctl start iwd

## PC 起動時に有効にする
# systemctl enable iwd

iwd の起動後、接続などの操作をする場合は、iwctl コマンドを使います。

iwctl コマンドでオプションを指定しなかった場合は、独自のプロンプトが実行されるので、その中でコマンドを入力していきます。
オプションを指定した場合は、単独で各処理を行います。

$ iwctl --help で、ヘルプを表示できます。

プロンプト内で実行するなら、ヘルプの通り、"device list" などと入力して実行します。
コマンド単独で実行するなら、"$ iwctl device list" というように、iwctl コマンドに引数を指定します。

stationアクセスポイントに関する操作
wscルータに付いている、WPS などのボタンを使って接続する
known-networks既存のネットワークの情報 (一度接続したもの)
deviceネットワークデバイスの情報

接続先のネットワーク名 (SSID) と暗号化キーがわかっているなら、以下のコマンドで接続できます。

# iwctl station <interface> connect <network>
(暗号化キーの入力)