Arch Linux - 無線 LAN 接続

無線 LAN 接続について
>> ワイヤレス設定 - ArchWiki

※ 無線 LAN で接続するには、無線 LAN のチップセットに応じたドライバが必要になります。

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

>> linux-firmware パッケージ

この中に使いたいチップセットのドライバがない場合は、(Linux 用のドライバがある場合) 自分でドライバを用意して、インストールする必要があります。

基本的に、発売が新しいチップセットや、あまり一般的でないメーカーの場合は、ドライバがなかったり、あっても正常に動作しない場合があるので、Linux で使える無線 LAN かどうかを最初に確認しておく必要があります。
内蔵無線 LAN の場合は、Intel のチップセットが使われている場合が多いので、ドライバが存在していて動作する可能性が高いです。
USB 接続型の場合、製品によって対応状況はバラバラですが、基本的に少し古めのものの方が接続できる可能性は高いです。

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

ドライバがない場合や、正しく動作しない場合は、Arch Wiki の方で情報を確認してください。

なお、VirtualBox 上では無線 LAN で接続するのは難しいと思うので、実際のパソコン上で試してください。
ドライバがロードされていて使える状態にあるか
まずは、無線 LAN のチップセットに対応しているドライバが存在するかどうか確認します。
Linux の起動時、それぞれのデバイスに対応するドライバがあれば、自動でロードされているので、デバイスの一覧を表示して、無線 LAN のデバイスのドライバがロードされているか確認します。

なお、Arch Linux インストール時などで、出力が長くて先頭の方が見れない場合、「$ lspci -k | less」 などのように、less や more コマンドでページ表示をすることができます。

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

▼ USB 接続の無線 LAN の場合 (-v で詳細を表示)
$ lsusb -v

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

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

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

ドライバがロードされていない場合、対応しているドライバがないということなので、自分でドライバを用意するか、諦めて有線 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 インターフェイスを立ち上げておく必要がある場合があります。
もし、コマンドが失敗した場合は、立ち上げてから試してみてください。

※ インターフェイスが立ち上がっている状態だと、無線 LAN の接続時に失敗する場合があるので、接続前は DOWN の状態に戻してください。

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

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

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

# ip link set wlp2s0 up

wlp2s0 の部分は、自分のインターフェイス名に置き換えてください。
もう一度一覧を表示して、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 のツールを使って接続することもできます。
CUI でコマンドを使ったり設定ファイルを記述して、手動で接続することもできます。

面倒な場合は GUI ツールを使うのが簡単ですが、接続は頻繁に変えないとか、接続関連の常駐などは最小限に抑えたい (軽量化したい) という場合は、CUI で行っていきます。
一度設定すれば、起動時に自動で接続してくれるので、手間がかかるのは最初だけです。

また、Arch Linux インストール時に無線 LAN 接続する場合は、必然的にコマンドによる接続となります。

GUI ツールの場合は、インストール、起動、設定を行うだけなので、特に問題はないと思います。
今回は、CUI ツールでの接続方法を説明します。
ソフトウェア (CUI)
完全に手動で行う場合、ネットワーク全般の操作は ip、無線 LAN 関係は iw, iwconfig, wpa_supplicant で、IP アドレスを取得するのには、ip, dhcpcd などを使います。

さすがにすべて手動で行うのは大変なので、netctl, Wicd, NetworkManager など、ある程度自動で処理してくれるツールを使います。

中でも、netctl は Arch Linux 独自のツールです。
インストールシステム内にも入っているので、通常は netctl を使います。
wifi-menu (主にインストール時)
wifi-menu コマンドは、netctl で簡易的な接続を行うためのツールです。
コマンドライン上で簡単なメニューを表示して、必要な情報を入力していき、無線 LAN 接続することができます。

Arch Linux のインストールシステム内に入っているので、インストール時に一時的な接続を行いたい場合に使うことになります。
永続的な設定を行いたい場合は、これを使わずに手動でやった方が良いでしょう。

wifi-menu コマンドに、無線 LAN のインターフェイス名を指定して、起動します。

# wifi-menu wlp2s0

まず、周辺の無線 LAN アクセスポイントが検索され、その一覧が表示されます。
他の家のアクセスポイントも表示されるので、SSID/ESSID から、自分の家のアクセスポイントを上下キーで選択し、Enter で決定してください。

次に、設定ファイルのプロファイル名の入力画面になりますが、デフォルトのままでも構いません。
アクセスポイントに暗号化が設定されている場合、次に、暗号化キーの入力画面になります。
入力して決定すると、接続が行われます。

なお、/etc/netctl 内に、指定したプロファイル名のファイルが生成されます。
netctl
netctl は、Arch Linux 独自のネットワーク接続ツールです。
ユーザーはネットワークに関する情報を書いたプロファイルを作成して、それを元に netctl が接続関連のツールを使って自動でネットワークに接続します。

一度プロファイルを作って、起動時に netctl が動作するように設定すれば、あとは起動時に自動でネットワークに接続してくれるので、手間がかかるのは最初だけです。
プロファイルについて
プロファイルのファイル (テキストファイル) は手動で作成し、/etc/netctl/ ディレクトリ内に好きな名前で置いておきます。
ファイル名がプロファイル名となります。拡張子は付けません。

各種類ごとのサンプルファイルが /etc/netctl/examples/ に置いてあるので、基本的にこのファイルを元に編集していきます。
サンプルプロファイルの一覧
まずは、サンプルの一覧を見てみます。
サンプルファイルのディレクトリに移動し、ファイル一覧を表示します。

$ cd /etc/netctl/examples
$ ls

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

いくつかありますが、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 の場合、他にも選択肢がありますが、普通は wireless-wpa で問題ありません。
IP アドレスは、dhcp を使って自動で取得されます。

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 コマンドなどで編集できます。

# 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 インターフェイス名を指定してください。
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

wireless は、プロファイル名です。ディレクトリパスは指定しないでください。
netctl の start コマンドで、プロファイルの内容からネットワークに接続します。

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

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

# ip link set wlp2s0 down

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

# netctl stop wireless
起動時に接続させる
接続はできましたが、そのままでは、再起動時に自動で接続されません。
起動時に自動で接続するようにするには、enable/disable コマンドを使います。

# netctl enable wireless

enable で、起動時に接続を行うように、systemd に登録します。
disable で、逆に systemd から登録を削除します。

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

「netctl enable」 を一回行っておけば、あとは systemd が起動時に自動で netctl を実行してくれます。

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

# netctl reenable wireless