Arch Linux - 無線 LAN 接続

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

Windows では、付属する CD などにドライバが入っていますが、メーカー側で Linux 用のドライバが用意されていることはほぼありません。
ただし、一般的によく使われるメーカーや製品については、Linux の方でドライバが提供されています。

無線 LAN などのデバイスのドライバは、Arch Linux では、linux-firmware パッケージ内に含まれています。

# linux-firmware パッケージ

この中に、必要なドライバが含まれていない場合、(Linux 用のドライバが存在する場合は)自分でドライバを用意して、インストールする必要があります。

基本的に、最近発売されたチップセットや、あまり一般的でないメーカーの場合は、ドライバがなかったり、あっても正常に動作しない場合があるので、まず購入する際に、Linux 上で使える無線 LAN かどうかを確認しておく必要があります。

内蔵無線 LAN の場合は、Intel のチップセットが使われている場合が多いので、動作する可能性が高いです。

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

もしも Linux 用のドライバがない場合は、Ndiswrapper を使って、Windows 用のドライバを無理矢理 Linux ドライバとして使うことも出来ます。

ドライバがない場合や、正しく動作しない場合は、Arch Wiki の方で情報を確認してください。
ドライバがロードされていて使える状態にあるか
まずは、無線 LAN のチップセットに対応しているドライバが、現在の Linux 上に存在するかどうかを確認します。

Linux の起動時、それぞれのデバイスに対応するドライバがあれば、自動でロードされているので、デバイスの一覧を表示して、無線 LAN のドライバがロードされているか確認します。

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

▼ USB 接続の無線 LAN の場合 (-v で詳細を表示)
$ 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 接続の場合は、表示結果が異なります)

ドライバがロードされていない場合、対応しているドライバがないということなので、自分でドライバを用意するか、諦めて有線 LAN を使う必要があります。
インターフェイス名と設定を確認
ドライバが存在して使える状態なら、次に、無線 LAN デバイスのインターフェイス名を確認します。
/dev/sda などのように、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 d0:50:99:ae:00:b8 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 2c:6e:85:60:c2:28 brd ff:ff:ff:ff:ff:ff

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

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

有線 LAN は先頭が enp、無線 LAN は先頭が wlp なので、先頭の名前で判断してください。
無線 LAN のインターフェイス名は、覚えておくか、メモしておきます。
インターフェイスを立ち上げる
iw コマンドなどを使う場合は、その前に無線 LAN インターフェイスを立ち上げておく必要がある場合があります。
もし、それらのコマンドが失敗した場合は、立ち上げてから試してみてください。

※ netctl で接続する場合、無線 LAN インターフェイスが立ち上がっている状態だと接続できないので、DOWN の状態に戻してから接続してください。

まず、$ ip link で出力した一覧の中にある、無線 LAN のステータスを確認してください。
< > 内が、現在の状態です。

3: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP>

ここに UP の項目がある場合(LOWER_UP は別です)、インターフェイスが立ち上がっている状態です。
ない場合は、以下のコマンドで立ち上げます。

# ip link set wlp2s0 up
              ~~~~~~

wlp2s0 の部分は、自分のインターフェイス名に置き換えてください。
もう一度 $ ip link を実行して、UP の項目があれば、立ち上がっています。

逆に DOWN の状態に戻す場合は、以下のようにします。

# ip link set wlp2s0 down
              ~~~~~~
無線 LAN の知識
無線 LAN 接続する時に必要となる知識を先に説明しておきます。
SSID/ESSID
無線 LAN アクセスポイントごとの識別名です。
32 文字までの英数字で構成されます。

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

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

WEP は、様々な脆弱性が発見されているため、現在ではほぼ使われていません。
WPA は、WEP を強化したものです。
WPA2 は、WPA をさらに強化したものです。

現在では、WPAWPA2 が使われています。
ルーターが WPA2 に対応しているなら、それを使うべきです。
Linux 上でも、上記3つの暗号化には対応しています。

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

キーはルーター上で設定を変えることができます (有線/無線接続して、パソコン上で設定する)。

最近のルーターの場合は、出荷時にデフォルトのキーが設定されている場合があります。
その場合、機器の裏などにキーが書いてあるので、最初の接続時などは、そのキーを使います。
接続について
インターフェイスの準備が整って、接続に必要な情報も用意したら、実際に接続していきます。
Linux で無線 LAN 接続するための方法は、いくつかあります(複数のツールが存在する)。

GUI 環境で、GUI のツールを使って接続することもできますが、Arch Linux を使うなら、インストール時にコンソール画面での接続は必須となるため、CUI での設定方法は覚えておいた方が良いでしょう。

無線 LAN を切り替えて使うことが多い場合においては、普段使い用として GUI のネットワークマネージャを使うと楽です。

ネット接続がほぼ固定の場合は、わざわざネットワークマネージャを使う必要もないので、一度設定を行って、後は起動時に自動で接続してくれれば、問題ない場合がほとんどだと思います。
CUI での接続方法
接続には、以下のようなコマンド・パッケージを使います。

ネットワーク全般ip (iproute2 パッケージ。base に含まれる)
IP アドレス関連ip (手動設定)
dhcpcd (DHCP による自動取得)
無線関連iw (ユーティリティ)
iwconfig (ユーティリティ)
wpa_supplicant (暗号化接続)
マネージャnetctl
systemd-networkd (systemd によるネットワーク設定)
iwd (暗号化含む無線接続)

完全に手動で行うのは大変なので、netctl, systemd, iwd などを使って接続すると良いです。

# netctl - ArchWiki
# systemd-networked - ArchWiki
# iwd - ArchWiki
iwd
iwd は、Intel によって作られた無線 LAN 接続のためのデーモンです。
wpa_supplicant を置き換えることを目的としています。

以前のインストール ISO では、無線 LAN 接続用に wifi-menu というコマンドがありましたが、現在はそれが削除され、代わりに iwd が含まれています。

Arch Linux のインストール時に無線 LAN 接続する場合は、iwd を使うことになります。

もちろん、インストール時だけでなく、メインの無線 LAN 接続としても使えます。
※ iwd がインストールされていると、netctl での無線接続はできません。
使い方
iwd を使うには、まず iwd のデーモンを起動する必要がありますが、Arch Linux のインストール時は、自動で起動されています。

Arch Linux インストール後に使う場合は、# systemctl start iwd で、デーモンを起動します。
(起動時に自動で有効にする場合は、# systemctl enable iwd)

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

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

以下、ヘルプの内容の一部です。

Devices:
  device list                                       List devices
  device <wlan> show                                Show device info
  device <wlan> set-property <name> <value>         Set property

Known Networks:
  known-networks list                               List known networks
  known-networks <"network name"> forget            Forget known network
  known-networks <"network name"> show              Show known network
  known-networks <"network name"> set-property <name> <value>Set property

WiFi Simple Configuration:
  wsc list                                          List WSC-capable devices
  wsc <wlan> push-button                            PushButton mode
  wsc <wlan> start-user-pin <8 digit PIN>           PIN mode
  wsc <wlan> start-pin                              PIN mode with generated
                            8 digit PIN
  wsc <wlan> cancel                                 Aborts WSC operations

Station:
  station list                                      List devices in Station mode
  station <wlan> connect <"network name"> [security]Connect to network
  station <wlan> connect-hidden <"network name">    Connect to hidden network
  station <wlan> disconnect                         Disconnect
  station <wlan> get-networks [rssi-dbms/rssi-bars] Get networks
  station <wlan> get-hidden-access-points [rssi-dbms]Get hidden APs
  station <wlan> scan                               Scan for networks
  station <wlan> show                               Show station info

device でデバイスの情報を表示します。
known-networks は、一度接続したネットワークの情報を操作します。
wsc は、ルーターに付いている WPS などのボタンを使って、接続します。
station は、通常のルーター操作です。

プロンプト内で実行するなら、ヘルプの通り "device list" などと入力して実行します。
単独で実行するなら、"iwctl device list" として、iwctl コマンドに引数で指定します。
接続方法
まずは、デバイスの名前を取得します。

# iwctl list

通常は、wlan0 となるはずです。
以降は、デバイス名が wlan0 として、コマンドを記述しています。

近所のルーターのネットワーク名を検索するなら、以下を実行します。

# iwctl station wlan0 get-networks
                ~~~~~

接続する場合は、以下のようにします。
接続するルーターのネットワーク名を指定してください。

# iwctl station wlan0 connect <network-name>

その後、暗号化のキーを入力する必要があるため、入力します。
問題なければ、接続されています。

iwd では、一度接続したルーターの情報は、/var/lib/iwd/ ディレクトリ内に、各ファイルで自動的に保存されます。
netctl
netctl は、Arch Linux 独自のネットワーク接続ツールです。
有線/無線両方に対応しています。

ユーザーは、ネットワークに関する情報をプロファイルとして作成して、それを元に、netctl が接続関連のツールを使って自動でネットワークに接続します。

一度プロファイルを作って、起動時に netctl が動作するように設定しておけば、あとは起動時に自動でネットワークに接続してくれます。
必要なパッケージ
netctlnetctl 本体
dhcpcdDHCP で自動的に IP アドレスを取得する場合。
固定 IP の場合は不要。
wpa_supplicantWPA 暗号化で接続する場合

※ netctl のサービスを有効にする場合、dhcpcd のサービスは無効にしてください。
プロファイルについて
プロファイルのテキストファイルは手動で作成する必要があります。

/etc/netctl/ ディレクトリ内に、任意のファイル名(拡張子はなし)で作成します。
このファイル名がプロファイル名となります。

各接続タイプごとのサンプルファイルが、/etc/netctl/examples/ に存在するので、基本的にこのファイルをコピーして編集していきます。
サンプルプロファイルの一覧
まずは、サンプルの一覧を見てみます。
サンプルファイルのディレクトリに移動し、ファイル一覧を表示します。

$ cd /etc/netctl/examples
$ ls

bonding          macvlan-static  vlan-dhcp      wireless-wpa-config
bridge           mobile_ppp      vlan-static    wireless-wpa-configsection
ethernet-custom  openvswitch     wireguard      wireless-wpa-static
ethernet-dhcp    pppoe           wireless-open
ethernet-static  tunnel          wireless-wep
macvlan-dhcp     tuntap          wireless-wpa

いくつかありますが、ethernet-* は有線 LAN 用、wireless-* が無線 LAN 用です。
通常は、この中のどれかをベースとして使います。

wireless-open暗号化が設定されていない、オープンなアクセスポイント用
wireless-wep暗号化が WEP の場合 (暗号化キーの設定が必要)
wireless-wpa暗号化が WPA/WPA2 の場合 (DHCP で IP アドレスを自動取得)
wireless-wpa-static上と同じ (固定 IP アドレス)
wireless-wpa-config上と同じ (wpa_passphrase で生成したキー情報をファイルで指定)
wireless-wpa-configsection上と同じ (wpa_passphrase で生成したキー情報を埋め込み)

暗号化などによってファイルが分かれているので、必要なものを選択してください。

通常は暗号化に WPA/WPA2 を使うため、一般的には wireless-wpa で問題ありません。
IP アドレスは、dhcpcd を使って自動で取得されます。
(dhcpcd パッケージは、あらかじめインストールしておいてください)

wireless-wpa-static は、IP アドレスを手動で指定する場合に使います。
自動取得に失敗した場合や、自分で好きなアドレスにしたい場合は、こちらを使ってください。
(ルーターと接続する場合、IP アドレスは 192.168.0.* などの値となるので、* の部分は好きな値に設定できます)
プロファイルの作成
使うサンプルプロファイルが決まったら、/etc/netctl 上にサンプルをコピーします。

$ cd /etc/netctl
# cp exsamples/wireless-wpa wireless
# chmod 600 wireless

cp コマンドで、/etc/netctl/exsamples/wireless-wpa ファイルを、/etc/netctl/wireless にコピーします。
ファイル名は一応 "wireless" にしましたが、別の名前でも構いません。

ファイル内に暗号化キーを直接記述するため、セキュリティ的に、管理者以外がファイル内容を見られないようにするために、chmod コマンドでアクセスを制限します。

600 は、所有者(管理者)のみ、読み込みと書き込みを許可する値です。
(一般ユーザー上では、ファイルを開いて内容を確認することもできなくなります)
プロファイルの編集
テキストエディタで、プロファイルを編集します。

# nano wireless

テキスト内容は、以下のようになっているので、一部を自分の環境用に書き換えます。

Description='A simple WPA encrypted wireless connection'
Interface=wlan0
Connection=wireless

Security=wpa
IP=dhcp

ESSID='MyNetwork'
# Prepend hexadecimal keys with \"
# If your key starts with ", write it as '""<key>"'
# See also: the section on special quoting rules in netctl.profile(5)
Key='WirelessKey'
# Uncomment this if your ssid is hidden
#Hidden=yes
# Set a priority for automatic profile selection
#Priority=10

Description説明文。そのままでもいいです。
Interface 必須インターフェイス名。
自分の環境の無線 LAN インターフェイス名を指定してください。

※ wlan0 では、接続できません。
$ ip link で表示された、"wlp〜" の名前を指定します。
Connection接続タイプ。wireless で無線接続。
Security暗号化のタイプ。wpa で WPA/WPA2。
IPIP アドレスの取得方法。
dhcp は、dhcp クライアントツールで自動取得。
ESSID 必須アクセスポイントの ESSID (識別名)。
MyNetwork の部分を、自分のルーターの名前に置き換えます。
Key 必須暗号化のキー。
WirelessKey の部分を、自分のルーターの暗号化キーに置き換えます。

必須の項目については、自分の環境用に置き換えてください。
他はそのままで構いません。

キーの暗号化について
Key の項目は、パスワードをそのままテキスト内に直接記述することになるので、他人に見られると、パスワードを知られてしまいます。

パスワードを直接書くのが嫌だという場合は、キーの文字列を暗号化して、設定することもできます。

wireless-wpa-config, wireless-wpa-configsection のサンプルプロファイルは、キー文字列を暗号化する場合のためのものです。

キーの暗号化は、wpa_passphrase コマンドを使い、ESSID とキーの文字列を指定して行います。
実行後、結果が出力されるので、その内容をファイルに保存するか、プロファイル内に直接書き込みます。

$ wpa_passphrase <ESSID> <KEY>

これで、一見してパスワードの中身はわからなくなりました。

ただし、これらのファイル自体を入手できてしまうと、結局そのファイルを使って接続してしまうことができるため、セキュリティ的には、それほど意味はありません。
プロファイル (固定 IP の場合)
固定 IP にしたい場合 (IPv4 の場合) は、以下のようになります。

「192.168.N.M」 の N の部分は、ルーターによって値が異なります。
説明書を見たり、ルーターの情報を見たりしてください。

Description='A simple WPA encrypted wireless connection'
Interface=***
Connection=wireless
Security=wpa
ESSID='***'
Key='***'

IP=static
Address='192.168.0.100/24'
Gateway='192.168.0.1'
DNS='192.168.0.1'

Address は、IP アドレスです。
「192.168.N.M」 の M の部分は 1 以外の好きな値を使って構いません。

ただし、そのルータが他のパソコンや機器とも接続する場合は、それぞれで IP アドレスを消費するので、他の機器の IP アドレスと重複しないようにしてください。

DHCP で自動取得した場合は、通常、低い値から順に割り当てられていきます。

GatewayDNA は、ルーターのアドレスを指定します。
基本的に、ブラウザでルーターの設定画面を開く時のアドレスと同じです。
接続
プロファイルが作成できたら、そのプロファイルを使って、netctl で接続します。

(プロファイルから接続)
# netctl start wireless
               ~~~~~~~~

netctl の start コマンドで、プロファイルの内容を元にネットワークに接続します。
wireless は、接続するプロファイル名(作成したファイル名)です。

接続に失敗した場合は、プロファイルを見直してください。

なお、ip コマンドで、インターフェイスを UP にして立ち上げた状態の場合は、接続に失敗するので、DOWN の状態にしておいてください。

# ip link set wlp2s0 down
              ~~~~~~

接続を切断する場合は、stop です。

# netctl stop wireless
              ~~~~~~~~
起動時に接続させる
start によって、その場での接続はできましたが、このままでは、再起動時に自動で接続することはできません。

起動時に自動で接続するようにするには、enable コマンドを使います。

# netctl enable <profile>

enable を行うと、サービスが systemd に登録され、起動時に自動で接続されます。

逆に、disable を行うと、systemd から登録を削除します。

systemd とは、Arch Linux において、システムやサービスを管理するものです。
起動時や一定期間ごとに実行したいものがある場合は、ここに登録します。

なお、enable 後にプロファイルの内容を変更した場合は、再設定が必要になるので、reenable を行ってください。

# netctl reenable <profile>