切り分けは下の層から4段階で行う
Linuxで無線LANが使えない原因は、大きく4つの層に分かれる。ハードウェアの認識、ドライバとファームウェアの読み込み、アクセスポイント(AP)の検出と認証、そして接続後の通信である。下の層が壊れていれば上の層は必ず失敗するため、確認は下から順に行う。設定画面を手当たり次第に触ると、原因が分からないまま設定だけが壊れる。
最初に現在の状態を1行で把握する。
nmcli device status無線インターフェース(wlan0 や wlp3s0 などの名前)の行が存在しなければ段階1へ。行はあるが状態が unavailable なら段階2へ。disconnected なら段階3へ。connected なのに通信できない、またはすぐ切れるなら段階4へ進む。unmanaged と表示される場合は NetworkManager の管理対象から外れているので、後述の段階3の末尾を参照する。
段階1: アダプタがカーネルに見えているか
まずインターフェースの有無と、デバイスとしての認識を確認する。
ip link
lspci -nnk | grep -iA3 net
lsusb内蔵カードは lspci、USB子機は lsusb に現れる。ここに製品名すら出ない場合、Linux側の問題ではない可能性が高い。UEFI/BIOS設定で無線が無効化されていないか、ノートPCの物理スイッチが切れていないか、USB子機ならポートを変えて給電が足りているかを確認する。M.2カードの挿し直しで復活することもある。
デバイスは出るのに Kernel driver in use の行が無い、あるいは ip link に無線インターフェースが出ない場合は、ドライバが当たっていない。段階2へ進む。
段階2: ドライバ・ファームウェア・rfkill
デバイスは見えているのに使えないときは、無線の無効化(rfkill)とファームウェアの欠落がほとんどを占める。
rfkill listSoft blocked が yes なら sudo rfkill unblock all で解除できる。Hard blocked が yes の場合はソフトウェアでは解除できない。物理スイッチか、機内モードのFnキー(多くの機種で F2 や F12 前後)を操作する。ノートPCによっては、いったんスリープさせて復帰すると解除される。
次にカーネルのログを見る。ファームウェアはドライバとは別の、チップに流し込むバイナリで、多くの無線チップで必須になる。
sudo dmesg | grep -iE 'firmware|iwlwifi|ath|rtw|brcm|mt79'Direct firmware load ... failed や no suitable firmware found が出ていれば、ファームウェアパッケージを入れる。Debian/Ubuntu系は firmware-iwlwifi firmware-realtek firmware-atheros など(リポジトリで non-free-firmware の有効化が必要)、Fedora系と Arch系は linux-firmware にまとめて含まれる。導入後は再起動するか、該当モジュールを sudo modprobe -r して読み込み直す。
ログに何も出ず、モジュール自体が読み込まれていないなら、そのチップが使用中のカーネルで未対応の可能性がある。新しい無線チップは対応が後追いになるため、より新しいカーネルを含むディストリビューションのインストーラで起動して動くか試すと判断が早い。
段階3: APを検出し、認証が通るか
インターフェースが disconnected まで来たら、周囲のAPが見えるかを確かめる。
nmcli device wifi rescan
nmcli device wifi list一覧が完全に空なら段階2の見落としを疑う。他のAPは見えるのに自宅のSSIDだけ出ない場合は、周波数帯と国コードを確認する。iw reg get が 00(未設定)だと5GHz帯の一部チャンネルが使えない。ルータ側を2.4GHz帯にも出す設定にすると切り分けできる。ステルスSSIDなら明示的に指定する。
nmcli device wifi connect SSID名 password パスワード hidden yesSSIDは見えるのに接続が失敗する場合は、認証段階のログを読む。
journalctl -u NetworkManager -b --no-pager4-Way Handshake failed はパスワード誤りか暗号方式の不一致を示す。パスワードが正しいのに繰り返す場合、ルータがWPA3(SAE)専用になっている可能性がある。執筆時点では、古い無線チップやドライバはWPA3に対応していない。ルータ側をWPA2/WPA3混在モードにすると繋がることが多い。
認証は通るのに毎回やり直しになる場合は、MACアドレスのランダム化がMACフィルタリングと衝突している疑いがある。接続プロファイル名は nmcli connection show で確認し、固定に変更する。
nmcli connection modify 接続名 wifi.cloned-mac-address permanent段階0で unmanaged だった場合は、/etc/network/interfaces や systemd-networkd など別の仕組みが同じインターフェースを掴んでいる。管理主体を1つに絞る。
段階4: 接続はできるのに通信できない・すぐ切れる
connected 表示なのに使えないときは、IPアドレスの取得から順に切り分ける。
ip -4 addr show
ip routeアドレスが無い、または 169.254 で始まるアドレスならDHCPが失敗している。ルータのDHCP割り当て範囲が埋まっていないか確認し、応急処置として固定IPを手動設定する。アドレスはあるがデフォルトルート(default via の行)が無ければ、切断済みVPNの残骸や、有線と無線の両方が有効なときの経路優先度を疑う。
経路がある場合は、IPと名前解決を分けて試す。
ping -c3 1.1.1.1
ping -c3 www.kernel.orgIPには届くのに名前解決だけ失敗するならDNSの問題である。resolvectl status(systemd-resolved利用時)や /etc/resolv.conf の内容を確認し、暫定的に nmcli connection modify 接続名 ipv4.dns 1.1.1.1 を試す。特定サイトだけ極端に遅い場合はIPv6が原因のことがある。切り分け目的で一時的に無効化する。
nmcli connection modify 接続名 ipv6.method disabled接続が数分で切れる、スリープ復帰後に切れる、という症状は無線の省電力設定が原因であることが多い。
iw dev wlan0 get power_saveon なら /etc/NetworkManager/conf.d/wifi-powersave.conf を作り、[connection] と wifi.powersave = 2 の2行を書いて NetworkManager を再起動する(2が無効化を意味する)。それでも断続する場合は、ドライバの高速通信モードを落として安定するか試す。例えば Intel の場合は /etc/modprobe.d/iwlwifi.conf に options iwlwifi 11n_disable=1 を書いて再起動する。速度は落ちるが、これで安定するならドライバとAPの相性が原因だと判断できる。
直らないときの次の手
標準ドライバで安定しないチップ(Realtekの一部など)は、DKMS形式の別ドライバがコミュニティから提供されていることがある。ただしSecure Bootが有効な環境では署名のないモジュールが読み込めないため、導入前にその可否を確認する。カーネル更新の直後に壊れた場合は、GRUBの詳細オプションから1つ前のカーネルで起動すると切り分けられる。
作業中にネットが必要になったら、スマートフォンをUSBケーブルで接続してUSBテザリングを有効にすると、有線と同じ扱いで即座に通信できる。ドライバやファームウェアのパッケージを取得する場面で有効な応急処置である。数百円のUSB Wi-Fi子機を1つ持っておくのも同じ用途で使える。
自力で解決できず、フォーラムやバグ報告に情報を出すなら、次の3つを揃える。lspci -nnk または lsusb のチップ識別番号、journalctl -b -k のカーネルログ、journalctl -u NetworkManager -b の接続ログである。詳細が足りなければ sudo nmcli general logging level DEBUG domains WIFI で一時的に出力を増やせる。
どこで打ち切るかの目安
段階1でデバイス自体が見えないなら、それはハードウェアかファームウェア(UEFI)側の問題であり、Linuxの設定をいくら変えても解決しない。段階2でファームウェアを入れても認識しないチップは、カーネルの対応状況そのものを調べる方が早い。段階3と段階4は設定で解決できる範囲が広いので、変更するときは1つずつ試し、効果がなければ必ず元に戻す。複数の変更を重ねると、次に何が効いたのか分からなくなる。切り分けの記録を残しながら進めれば、同じ症状が再発したときの復旧時間は大きく短くなる。