「ネットワーク設定/ワイヤレス」の版間の差分
細 (→規制範囲に従う: 修正) |
Kusanaginoturugi (トーク | 投稿記録) (→デバイスドライバ: インベントリに修正) |
||
25行目: | 25行目: | ||
== デバイスドライバ == |
== デバイスドライバ == |
||
− | デフォルトの Arch Linux カーネルは''モジュール式''です、つまりマシンに必要なドライバの多くはハードドライブに置かれ、''[[カーネルモジュール|モジュール]]''として利用されます。起動時に、[[udev]] がハードウェアの |
+ | デフォルトの Arch Linux カーネルは''モジュール式''です、つまりマシンに必要なドライバの多くはハードドライブに置かれ、''[[カーネルモジュール|モジュール]]''として利用されます。起動時に、[[udev]] がハードウェアのインベントリを取得し、ハードウェアに必要である適切なモジュール(ドライバ)をロードし、次に、ドライバをロードしてカーネル''インターフェース''を作成します。 |
ワイヤレスチップセットによっては、適切なドライバーに加えて、ファームウェアも必要になります。ほとんどのファームウェアイメージはデフォルトでインストールされる {{Pkg|linux-firmware}} パッケージに含まれていますが、プロプライエタリなファームウェアイメージは含まれていないため別にインストールする必要があります。[[#ドライバー・ファームウェアのインストール]]で説明されています。 |
ワイヤレスチップセットによっては、適切なドライバーに加えて、ファームウェアも必要になります。ほとんどのファームウェアイメージはデフォルトでインストールされる {{Pkg|linux-firmware}} パッケージに含まれていますが、プロプライエタリなファームウェアイメージは含まれていないため別にインストールする必要があります。[[#ドライバー・ファームウェアのインストール]]で説明されています。 |
2022年11月15日 (火) 10:57時点における版
ネットワーク設定に関するメインの記事は ネットワーク設定 です。
ワイヤレスネットワークの設定は2段階で行います; まずワイヤレスデバイスを使うために正しいドライバがインストールされているか確認し(インストールメディア上では利用できても、明示的にインストールする必要があります)、インターフェースを設定します。次に、ワイヤレス接続を管理する方法を選びます。この記事では両方をカバーしています。また、ワイヤレス管理ツールへの追加リンクもあります。
#iw セクションでは iw を使ってワイヤレスネットワークインターフェイス/ワイヤレス LAN を手動で管理する方法を説明しています。ネットワーク設定#ネットワークマネージャ セクションでは、ワイヤレスインターフェイスを自動的に管理する際に使用できるいくつかのプログラムについて説明しています。それらはすべてネットワークプロファイルのサポートを含んでおり(ノート PC のようにワイヤレスネットワークを頻繁に切り替える際に便利です)、それらのうち一部は GUI を含んでいます。
目次
デバイスドライバ
デフォルトの Arch Linux カーネルはモジュール式です、つまりマシンに必要なドライバの多くはハードドライブに置かれ、モジュールとして利用されます。起動時に、udev がハードウェアのインベントリを取得し、ハードウェアに必要である適切なモジュール(ドライバ)をロードし、次に、ドライバをロードしてカーネルインターフェースを作成します。
ワイヤレスチップセットによっては、適切なドライバーに加えて、ファームウェアも必要になります。ほとんどのファームウェアイメージはデフォルトでインストールされる linux-firmware パッケージに含まれていますが、プロプライエタリなファームウェアイメージは含まれていないため別にインストールする必要があります。#ドライバー・ファームウェアのインストールで説明されています。
ドライバーの状態を確認する
あなたのカードに合ったドライバーがロードされているか確認するには、カードを PCI(e) を接続している場合は lspci -k
、USB で接続している場合は lsusb -v
コマンドの出力をチェックしてください。カーネルドライバーが使われているなら、例えば以下のように表示されるはずです:
$ lspci -k
06:00.0 Network controller: Intel Corporation WiFi Link 5100 Subsystem: Intel Corporation WiFi Link 5100 AGN Kernel driver in use: iwlwifi Kernel modules: iwlwifi
また、ip link
コマンドの出力をチェックして無線インターフェイス (例: wlan0
, wlp2s1
, ath0
) が作成されているか確認してください。そして、ip link set <interface> up
を実行してインターフェイスを立ち上げて下さい。例えば、インターフェイスが wlan0
の場合:
# ip link set wlan0 up
次のエラーメッセージが表示される場合: SIOCSIFFLAGS: No such file or directory
、おそらくチップセットを機能させるためにファームウェアが必要です。
ファームウェアがロードされているかカーネルメッセージを確認してください:
$ dmesg | grep firmware
[ 7.148259] iwlwifi 0000:02:00.0: loaded firmware version 39.30.4.1 build 35138 op_mode iwldvm
出力がない場合は、先に確かめたモジュール (この例では iwlwifi
) の完全な出力のメッセージをチェックして関連するメッセージや問題を確認してください:
$ dmesg | grep iwlwifi
[ 12.342694] iwlwifi 0000:02:00.0: irq 44 for MSI/MSI-X [ 12.353466] iwlwifi 0000:02:00.0: loaded firmware version 39.31.5.1 build 35138 op_mode iwldvm [ 12.430317] iwlwifi 0000:02:00.0: CONFIG_IWLWIFI_DEBUG disabled ... [ 12.430341] iwlwifi 0000:02:00.0: Detected Intel(R) Corporation WiFi Link 5100 AGN, REV=0x6B
カーネルモジュールが正しくロードされ、インターフェイスが立ち上がっている場合は、次のセクションを飛ばしてかまいません。
ドライバー・ファームウェアをインストールする
あなたのカードがサポートされているかどうか調べるために以下のリストを確認してください:
- 既存の Linux ワイヤレスドライバー表 から飛べる各ドライバーのページにはサポートしているデバイスのリストが載っています。Linux における Wi-Fi デバイスの ID リスト も存在します。
- Ubuntu Wiki にはワイヤレスカードの一覧と、Linux カーネル・ユーザースペースドライバによってサポートされているかの情報があります (ドライバ名含む)。
- Linux Wireless Support と Linux Questions の Hardware Compatibility List (HCL) にもカーネルで利用できるハードウェアのデータベースがあります。
あなたのワイヤレスカードが上記のリストにあった場合、このページの #ドライバとファームウェアのトラブルシューティング サブセクションを見て下さい、特定のワイヤレスカードのドライバーやファームウェアのインストール情報が載っています。インストールした後、またドライバーの状態を確認してください。
ワイヤレスハードウェアが上記のリストになかった場合、おそらくサポートしているのが Windows のみだと思われます (Broadcom, 3com, etc)。そういったカードについては、ndiswrapper を使う必要があります。詳しくは #ndiswrapper を見て下さい。
ユーティリティ
他のネットワークインターフェイスと同じように、ワイヤレスインターフェイスも iproute2 パッケージの ip でコントロールします。
ワイヤレス接続の管理には基本的なツール一式が必要です。ネットワークマネージャ を使うか、以下のうち1つを直接使ってください:
ソフトウェア | パッケージ | WEXT | nl80211 | WEP | WPA/WPA2 | Archiso [1] |
---|---|---|---|---|---|---|
wireless_tools1 | wireless_tools | Yes | No | Yes | No | Yes |
iw | iw | No | Yes | Yes | No | Yes |
wpa_supplicant | wpa_supplicant | Yes | Yes | No | Yes | Yes |
iwd | iwd | No | Yes | No | Yes | Yes |
- 非推奨
一部のカードは WEXT のみをサポートすることに注意してください。
iw と wireless_tools の比較
以下の表は iw と wireless_tools の比較可能なコマンドの概要です。さらなる例は iw replaces iwconfig を見てください。
iw コマンド | wireless_tools コマンド | 説明 |
---|---|---|
iw dev wlan0 link | iwconfig wlan0 | リンクの状態を取得。 |
iw dev wlan0 scan | iwlist wlan0 scan | 利用可能なアクセスポイントをスキャン。 |
iw dev wlan0 set type ibss | iwconfig wlan0 mode ad-hoc | 動作モードを ad-hoc に設定。 |
iw dev wlan0 connect your_essid | iwconfig wlan0 essid your_essid | 接続してネットワークを開く。 |
iw dev wlan0 connect your_essid 2432 | iwconfig wlan0 essid your_essid freq 2432M | 接続して指定したチャンネルのネットワークを開く。 |
iw dev wlan0 connect your_essid key 0:your_key | iwconfig wlan0 essid your_essid key your_key | 16進数のキーを使って WEP で暗号化されたネットワークに接続。 |
iwconfig wlan0 essid your_essid key s:your_key | ASCII 文字のキーを使って WEP で暗号化されたネットワークに接続。 | |
iw dev wlan0 set power_save on | iwconfig wlan0 power on | 省電力機能を有効にする。 |
iw
このセクションに出てくる例ではあなたのワイヤレスデバイスを interface
、wifi のアクセスポイントを your_essid
と仮定しています。それぞれ適切な文字列に置き換えて下さい。
インターフェイス名の取得
ワイヤレスインターフェイスの名前を取得するには:
$ iw dev
インターフェイス名は "Interface" という単語のあとに出力されます。例えば、インターフェイス名は wlan0
が一般的です。
インターフェイスの状態の取得
リンクの状態を確認するには、次のコマンドを使ってください。
$ iw dev interface link
次のコマンドで tx/rx バイトの総量やシグナルの強さといった統計値をを取得することができます:
$ iw dev interface station dump
インターフェイスの有効化
カードによっては iw や wireless_tools を使う前にカーネルインターフェースをアクティブ化する必要があります:
# ip link set interface up
インターフェイスが立ち上がっているか確認するには、次のコマンドの出力を見て下さい:
$ ip link show interface
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state DOWN mode DORMANT group default qlen 1000 link/ether 12:34:56:78:9a:bc brd ff:ff:ff:ff:ff:ff
<BROADCAST,MULTICAST,UP,LOWER_UP>
にある UP
がインターフェイスが立ち上がっていることを示しています。後ろにある state DOWN
は関係ありません。
アクセスポイント検索
利用できるアクセスポイントを見るには:
# iw dev interface scan | less
チェックするべきポイント:
- SSID: ネットワークの名前。
- Signal: は dBm 単位でワイヤレスの信号強度を報告します(例: -100 から 0)。負の数が 0 に近づくほど、信号の品質が良いことを表します。良質なリンクや低品質なリンクで報告された強度を観察することで、それぞれの範囲を知ることができます。
- Security: 直接は報告されません、
capability
から始まる行を見て下さい。capability: ESS Privacy ShortSlotTime (0x0411)
のようにPrivacy
が含まれている場合、そのネットワークは保護されています。RSN
情報ブロックがある場合、そのネットワークは Robust Security Network プロトコル、別名 WPA2 によって保護されています。WPA
情報ブロックがある場合、そのネットワークは Wi-Fi Protected Access プロトコルによって保護されています。RSN
やWPA
ブロックには以下の情報が含まれていることがあります:- Group cipher: 値は TKIP, CCMP, その両方, もしくはその他。
- Pairwise ciphers: 値は TKIP, CCMP その両方, もしくはその他。Group cipher と同じ値である必要はありません。
- Authentication Suites: 値は PSK, 802.1x, もしくはその他。家庭用ルーターでは、一般的に PSK になるでしょう (つまりパスフレーズ)。大学などでは、ログインとパスワードが必要な 802.1x スイートになると思われます。利用するためにはどのキーマネージメント (例: EAP) とカプセル化 (例: PEAP) が使われているか知る必要があります。詳しくは Wikipedia:Authentication protocol と関連記事を見て下さい。
Privacy
があるのにRSN
やWPA
ブロックがない場合、WEP が使われています。
動作モードの設定
ワイヤレスカードの正しい動作モードを設定する必要があるかもしれません。具体的に言うと、アドホックネットワークに接続したい場合、動作モードを ibss
に設定する必要があります:
# iw dev interface set type ibss
アクセスポイントへの接続
暗号化方式によっては、使用するワイヤレスデバイスをアクセスポイントと関連付けて、暗号化キーを渡す必要があります:
- 暗号化なし
# iw dev interface connect "your_essid"
- WEP
- 16進数、または ASCII キーを使用する(WEP のキーは固定長なので、キーの形式は自動的に判別されます):
# iw dev interface connect "your_essid" key 0:your_key
- 16進数、または ASCII キーを使用し、3番目に設定したキーをデフォルトとして指定する(キーは 0 からカウントされます。4 つまで可能です):
# iw dev interface connect "your_essid" key d:2:your_key
- 16進数、または ASCII キーを使用する(WEP のキーは固定長なので、キーの形式は自動的に判別されます):
- その他
- iw は WEP のみを扱えます。他の暗号化スキームを使用して接続する場合、下記の #認証 を見てください。
どの方法を使用しても、正しく関連付けできたかどうかは以下で確認できます:
# iw dev interface link
認証
WPA2 Personal
WPA2 Personal(別名: WPA2-PSK)は Wi-Fi Protected Access のモードの1つです。
wpa_supplicant や iwd を用いて WPA2 Personal ネットワークに認証したり、ネットワークマネージャを用いて接続したりできます。ネットワークに認証しただけの場合、接続はまだ完全には機能せず、手動またはDHCPクライアントを用いて IP アドレスとルートを割り当てる必要があります。
WPA2 Enterprise
WPA2 Enterprise は Wi-Fi Protected Access のモードの1つです。WPA2 Personal よりも良いセキュリティとキー管理を提供し、VLAN や NAP といった他のエンタープライズタイプの機能を提供します。しかし、これは、ユーザの認証を処理するために RADIUS サーバと呼ばれる外部の認証サーバを必要とします。これは、ワイヤレスルータとアクセスポイント(AP)の他に何も必要とせず、すべてのユーザに対して1つのパスフレーズかパスワードを使用する Personal モードとは対照的です。
Enterprise モードでは、ユーザはユーザ名とパスワード、もしくはデジタル証明書、もしくはその両方を用いて Wi-Fi ネットワークにログインできます。それぞれのユーザは動的でユニークな暗号鍵を持っているため、ワイヤレスネットワーク上のユーザからユーザへの盗聴防止や暗号強度の向上に役立ちます。
このセクションでは、WPA2 Enterprise モードを用いてワイヤレスアクセスポイントに接続するためのネットワーククライアントの設定について説明します。アクセスポイントそのもののセットアップに関する情報は ソフトウェアアクセスポイント#RADIUS を見てください。
プロトコル間の比較はこの表を見てください。
MS-CHAPv2
PEAP の MSCHAPv2 type-2 認証を要求する WPA2-Enterprise ワイヤレスネットワークは時々、ppp パッケージに加えて pptpclient パッケージを必要とします。しかし、netctl は ppp-mppe 無しでも動作するようです。いずれの場合でも、MSCHAPv2 は非常に脆弱であるため、使用は推奨されません。しかし、他の手段は通常選択肢になりません。
eduroam
eduroam は研究、高等教育、継続教育のユーザー向けの、WPA2 Enterprise ベースの国際ローミングサービスです。
手動/自動 セットアップ
- wpa_supplicant は、設定ファイルを直接編集するか CLI/GUI フロントエンドを使用することで設定できます。また、DHCP クライアントと組み合わせて使うことができます。接続の詳細を設定するには
/usr/share/doc/wpa_supplicant/wpa_supplicant.conf
の例を見てください。 - iwd#WPA Enterprise
- NetworkManager は、nmcli や グラフィカルなフロントエンドを使用して WPA2 Enterprise プロファイルを作成できます。nmtui はこれをサポートしていません(NetworkManager issue 376)。しかし、既存のプロファイルを使用することはできます。
- ConnMan は、ネットワークに接続する前に、別の設定ファイルを必要とします。詳細は connman-service.config(5) と ConnMan#eduroam に接続 を見てください。
- netctl は、
WPAConfigSection=
に含まれるブロックを通して wpa_supplicant の設定をサポートします。詳細は netctl.profile(5) を見てください。
WPA3 Personal
WPA3 Personal(別名: WPA3-SAE) は Wi-Fi Protected Access のモードの1つです。
wpa_supplicant は WPA3 Personal をサポートします(バージョン 2:2.9-4 より、CONFIG_SAE
が wpa_supplicant で有効化されています)。
iwd はバージョン 0.7 から WPA3 をサポートしています。
ヒントとテクニック
規制範囲に従う
規制範囲(regdomain) は、ワイヤレスハードウェアの動作が FCC や ETSI、他の組織により定められた地域の法律に準拠するようにワイヤレスドライバを設定する際に用いられます。規制範囲では ISO 3166-1 alpha-2 国名コードを使用します。例えば、米国は "US"、中国は "CN"、日本は "JP" となります。
規制範囲は、どのワイヤレスチャネルが利用できるかに関与します。2.4GHz 帯で許可されているチャネルは、米国では 1~11、日本では 1~14、他の殆どの国では 1~13 です。5Ghz 帯では、許可されるチャネルの規則は非常に複雑です。どちらの場合でも、より詳細な情報はこの WLAN チャネルのリストを見てください。
規制範囲はまた、ワイヤレスデバイスから放射される電波の実効輻射電力(EIRP)の制限にも関与します。これは送信パワー(Tx Power)から算出され、dBm/mBm (1dBm=100mBm) または mW (対数スケール)により測られます。2.4Ghz 帯では、米国とカナダでは最大が 30dBm、ヨーロッパのほとんどの地域では 20dBm、その他の地域では 20dBm~30dBm です。通常、5Ghz 帯では、最大値はより低く規定されます。より詳細な情報は wireless-regdb を見てください(EIRP の dBm 値はそれぞれの行の2番めのカッコの中にあります)。
規制範囲の設定を誤ると便利である場合があります(例えば、チャネルが混雑している時に未使用のチャネルを利用できたり、送信パワーを増やして送信範囲を広げたり)。しかし、地域の法律に違反したり、他の無線機器と干渉する可能性があるので、推奨されません。
wireless-regdb がインストールされていれば、カーネルは規制範囲のデータベースを直接読み込みます。直接読み込むため、セキュリティ上の理由により、カーネルは CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS
を yes に設定して、データベースの暗号検証を有効化してあるべきです。これは Arch のカーネルには有効化されていますが、他のカーネルを使用していたり自分でコンパイルしている場合、これを確認するべきです。さらなる情報はこのガイドで見られます。
規制範囲を設定するには wireless-regdb をインストールして再起動してください (cfg80211
モジュールや関連するすべてのドライバを再ロードするためです)。ブートログを見て、データベースが読み込まれていることや cfg80211
によってキーが検証されていることを確認してください:
# dmesg | grep cfg80211
現在の規制範囲を日本に設定するには:
# iw reg set JP
情報を見るには:
$ iw reg get
しかし、規制範囲を設定しても設定が変わらない場合があります。一部のデバイスは、デバイスの制限を規定する firmware/EEPROM で規制範囲が設定されています。これは、ソフトウェアでは制限を増やすことしかできず、制限を減らすことができないことを意味します。例えば、中国のデバイスはソフトウェアで米国の規制範囲に設定できるでしょうが、中国では EIRP の最大値が 20dBm と規定されているので、デバイスは米国の最大 EIRP である 30dBm で送信を行うことはできません。
例えば、Atheros デバイスのファームウェアで規制範囲が設定されているかどうか確認するには:
# dmesg | grep ath:
他のチップセットの場合、"EEPROM" や "regdomain"、デバイスドライバの名前で検索すると良いかもしれません。
規制範囲が正しく変更されたかどうかを確認し、利用可能なチャネル数や許可されている送信パワーを確認するには:
$ iw list | grep -A 15 Frequencies:
規制範囲の設定を永続化するには、/etc/conf.d/wireless-regdom
を編集して、適切なドメインをアンコメントしてください。
wpa_supplicant でも、/etc/wpa_supplicant/wpa_supplicant.conf
の country=
行で規制範囲を設定できます。
cfg80211 カーネルモジュールでもモジュールオプションを追加することで特定の規制範囲を使用するように設定できます(例: options cfg80211 ieee80211_regdom=JP
)。このモジュールオプションは 古い規制範囲の実装から継承されたもので、最近のカーネルでは iw
や wpa_supplicant
のようなユーティリティから nl80211
を通して来たようなユーザスペースの規制ヒントとして振る舞います。
Rfkill caveat
多くのノート PC にはワイヤレスカードの電源を切るハードウェアボタン/スイッチがあります。しかし、カードがカーネルによってブロックされている場合があります。これは rfkill によって操作できます。現在の状態を確認するには以下のコマンドを使用してください:
# rfkill list
0: phy0: Wireless LAN Soft blocked: yes Hard blocked: yes
カードが hard-blocked である場合、ハードウェアボタン/スイッチを使ってカードをアンロックできます。カードが hard-blocked でなく、soft-blocked である場合、以下のコマンドを使用してください:
# rfkill unblock wifi
ワイヤレスカードを切り替えるハードウェアボタンはベンダー固有のカーネルモジュールによって操作されます。これらは WMI モジュールであることが多いです。非常に新しいハードウェアモデルでは特に、最新の安定版カーネルでモデルが完全にサポートされていないことがあります。この場合、カーネルのバグトラッカーで情報を探し、まだ報告されていない場合は各ベンダーのカーネルモジュールのメンテナにモデルを報告することが役に立ちます。
[2] も参照してください。
省電力
電源管理#ネットワークインターフェイス を見てください。
トラブルシューティング
このセクションには、ドライバやファームウェアに強く関連しない問題のトラブルシューティングの一般的なヒントを含んでいます。ドライバやファームウェアに関するトピックは次のセクション #ドライバとファームウェアのトラブルシューティング を見てください。
一時的にネットワークにアクセス
ハードウェアに問題があるときに、インターネットに接続してソフトウェアをダウンロードしたりフォーラムでヘルプを得たい場合、Android に内蔵されている機能を使って USB ケーブルでインターネット共有をすることができます。詳しくは Android テザリング#USB テザリングを見て下さい。
ログの取得
トラブルシューティングで一番初めにするべきなのはシステムのログファイルを解析することです。全部を手でパースしないために、新しいターミナル(コンソール)を開いて、接続を試行している間のカーネルメッセージを次のコマンドで見ると良いでしょう:
$ dmesg -w
ネットワーク管理にツールを使っている場合、systemd でも同じことができます:
# journalctl -f
特定の理由コードによる認証解除を伴うワイヤレスエラーがよく起こります。例えば:
wlan0: deauthenticating from XX:XX:XX:XX:XX:XX by local choice (reason=3)
理由コードを見ることでヒントを得られるかもしれません。コントロールメッセージの flowchart を見ることも役に立つかもしれません。ジャーナルのメッセージはこれに従って出力されます。
この記事にあるそれぞれのツールは詳細なデバッグ出力をするオプションを用意しているので、必要ならば、解析の第二段階としてそれを使うことができます。
IP アドレスの取得に失敗する
- デフォルトの dhcpcd クライアントでは IP アドレスの取得に何度も失敗する場合、代わりに dhclient をインストールして使用してみて下さい。あなたの使っている接続マネージャで DHCP クライアントとして dhclient を忘れずに選択してください。
- 有線インターフェイスでは IP アドレスを取得できるのに、無線インターフェイスでは出来ない場合、ワイヤレスカードの省電力機能を無効にしてみてください(
on
ではなくoff
を指定してください)。
- waiting for carrier の問題でタイムアウトエラーになる場合、特定のデバイスのチャンネルモードを
auto
に設定する必要があるかもしれません:
# iwconfig wlan0 channel auto
チャンネルを auto に変える前に、あなたのワイヤレスインターフェースが止まっていることを確認してください。変更が成功したら、インターフェースを立ち上げなおして次の手順に進んで下さい。
IP アドレスは取得できるのにホスト解決ができない
Captive Portal が存在する可能性のある公共の無線ネットワークを使っている場合、Web ブラウザから(HTTPS ではなく)HTTP ページをクエリしていることを確認してください。一部の captive portal は HTTP のみをリダイレクトするためです。 これが原因ではない場合、ドメイン名を解決できることを確認してください。DHCP を通して広告した DNS サーバを使用することが必須である場合があります。
RTS や fragmentation のしきい値を設定する
無線ハードウェアはデフォルトでは RTS と fragmentation を無効化しています。帯域幅を犠牲にスループットを高める方法は2つ存在します。近隣にアクセスポイントが多く存在する環境で、干渉によってタイムアウトが発生したり接続が途切れる場合、設定によって改善する可能性があります。
パケットの断片化は fragmentation の閾値を越えたパケットを分割してスループットを改善します。最大値 (2346) にするとパケットが超過することはなくなるため断片化を無効化にするのと同義です。最低値 (256) にするとスループットは最大になりますが、かなり帯域幅を消費します。設定するには:
# iw phy0 set frag 512
RTS は RTS の閾値を越えるパケットを送信する前にアクセスポイントとハンドシェイクを実行することでスループットを改善します。最大値 (2347) にするとパケットが超過しなくなり RTS を無効化するのと同じになります。最低値 (0) では全てのパケットで RTS が有効になりますが、大抵の場合は無駄になります。
# iw phy0 set rts 500
ランダムに切断する
原因 #1
Journal に wlan0: deauthenticating from MAC by local choice (reason=3)
と表示され Wi-Fi 接続が失われる場合は、おそらく Wi-Fi カードの省電力機能がアグレッシブすぎるのが原因です。無線カードの[[省電力機能を無効化してみてください(on
ではなく off
を指定してください)。
あなたのカードが iwconfig wlan0 power off
をサポートしていない場合は、BIOS の電源管理のオプションを確認してください。Lenovo W520 では BIOS にある PCI-Express の電源管理を無効化すると問題が解決します。
原因 #2
頻繁に切断が発生し、Journal で以下のようなメッセージが表示される場合:
ieee80211 phy0: wlan0: No probe response from AP xx:xx:xx:xx:xx:xx after 500ms, disconnecting
ルーターの設定でチャンネルの帯域を 20MHz
に変更してみてください。
原因 #3
ノートパソコン (例: Thinkpad X200 シリーズ) に rfkill のハードウェアスイッチが付いている場合、スイッチの経年劣化や設計不良により、スイッチ (またはメインボードへの接続) がゆるくなってしまっている可能性があります。結果として、スイッチに触れたり、ノートパソコンをちょっと動かすだけで、ハードウェアによる無線のブロックが発生して、インターネットから切断されているのかもしれません。このような問題に対するソフトウェアによる解決方法は存在しません。電気仕掛けのスイッチなら、BIOS にスイッチを無効化するオプションが存在することがあります。機械式のスイッチの場合 (ほとんどのスイッチはそうです)、スイッチを壊してしまうというのが解決法になります: メインボードや wifi カードとの接触点をハンダ付けする、スイッチを糊で固める、塞ぐ、またはスクリューナットを使ってスイッチを固く締める、取り除いてしまう。
原因 #4
頻繁に切断したり接続が成功しない他の原因として、ルーターが仕様に合わない挙動をする、ルーターの設定が誤っている、他の無線デバイスによる干渉、などが考えられます。
トラブルシューティングするには、まず認証なしでルーターに接続できないか試して下さい。
それで動作する場合、WPA/WPA2 を再度有効にして、ルーターの設定を変更してみてください。例えば:
- ルーターが(クライアントで使っている)無線デバイスと比べて相当に旧式である場合、ルーターを別のワイヤレスモードに設定して動作するかテストする
- mixed-mode 認証を無効化 (例: WPA2 と AES、またはルーターが古い場合 TKIP)
- "auto" チャンネル以外の固定/自由チャンネルを使ってみる (隣家のルーターが古くて干渉している可能性があります)
- WPS を無効化
- ルータの 5Ghz チャネルから non-DFS (Dynamic Frequency Selection) チャネル に変更する。そのようなチャネルでは、地格の気象レーダーとの鑑賞により接続が落ちたり、いきなり切り替わったりする場合があります。
- クライアントに 5Ghz と 2.4Ghz のどちらが良いかを選ばせるのではなく 2.4Ghz のみに設定してみる。(後者はスループットが低いですが、遠距離からの接続でも安定した接続を得られます)
cfg80211.cfg80211_disable_40mhz_24ghz=1
を指定して40Mhz
周波数帯を無効化 (スループットは悪くなりますが衝突は起きにくくなります)- ルーターにサービス品質に関する設定がある場合、設定が完全であることを確認 (例: Wi-Fi Multimedia (WMM) は任意の QoS フロー制御の一部です。問題のあるルーターファームウェアは設定が有効になっていない場合も有効であるかのように見せかけてくることがあります)
原因 #5
一部のワイヤレスアダプタ(例: Qualcomm Atheros AR9485)では、DMA エラーによりランダムな接続断が起こる可能性があります:
# journalctl -xb
ath: phy0: DMA failed to stop in 10 ms AR_CR=0x00000024 AR_DIAG_SW=0x02000020 DMADBG_7=0x0000a400 wlp1s0: authenticate with 56:e7:ee:7b:55:bc wlp1s0: send auth to 56:e7:ee:7b:55:bc (try 1/3) wlp1s0: send auth to 56:e7:ee:7b:55:bc (try 2/3) wlp1s0: send auth to 56:e7:ee:7b:55:bc (try 3/3) wlp1s0: authentication with 56:e7:ee:7b:55:bc timed out
可能な回避策は Intel IOMMU driver (DMA) を無効化することです。カーネルパラメータに intel_iommu=off
を追加してください[3]。
原因 #6
ワイヤレス接続のための iwlwifi と iwlmvm のあるデバイスを使用していて、Wi-Fi カードがバッテリー駆動時に消えたように見える場合、iwlmvm で省電力設定を変更することでこれを修正できます。
/etc/modprobe.d/iwlmvm.conf
ファイルが存在しなければ作成し、以下の行を追加してください:
/etc/modprobe.d/iwlmvm.conf
options iwlmvm power_scheme=1
power_scheme
の 1 という数値は iwlmvm が "常に有効" になります。利用可能なオプションは以下のとおりです:
値 | 説明 |
---|---|
1 | 常に有効 |
2 | バランス |
3 | 低パワー |
この修正法は [4] で発見されました。
原因 #7
デバイスが長時間使用されなかった場合(例: ファイルサーバ)、省電力機能により接続断が発生する場合があります。これにより、受信トラフィックがブロックされ、接続が妨げられます。"interface" の省電力機能を無効化してみてください:
# iw dev interface set power_save off
udev ルールを作成してこれを起動時に行うこともできます。電源管理#ネットワークインターフェイス を見てください。
規制範囲が間違っているために Wi-Fi ネットワークが認識されない
コンピュータの Wi-Fi チャンネルがユーザーの居住国の規制範囲に一致していない場合、Wi-Fi ネットワークが認識されないことがあります。#規制範囲に従うを参照して設定を行ってください。
ドライバとファームウェアのトラブルシューティング
このセクションでは、一般的な方法とは異なる、特定のチップセットのカーネルモジュールとファームウェアをインストールする方法を説明します。
モジュールの動作についての一般的な情報はカーネルモジュールを見て下さい。
Ralink/Mediatek
rt2x00
Ralink のチップセット用の統合ドライバー (rt2500
, rt61
, rt73
などを置き換えます)。このドライバーは Linux カーネル 2.6.24 から含まれており、チップに合わせて適切なモジュールをロードするだけで問題なく使うことができます: rt2400pci
, rt2500pci
, rt2500usb
, rt61pci
, rt73usb
は rt2x00
モジュールもそれぞれ自動でロードします。
このモジュールでサポートされているデバイスの一覧はプロジェクトの ホームページ で見ることができます。
- 追加情報
- カーネル 3.0 から、rt2x00 は次のドライバーを含んでいます:
rt2800pci
,rt2870usb
。 - カーネル 3.0 から、staging ドライバー
rt2860sta
とrt2870sta
は mainline ドライバーrt2800pci
とrt2800usb
によって置き換えられました[5]。 - デバイスによっては
iwpriv
を使って様々なオプションを設定することができます。これらのオプションについては Ralink から入手できる source tarballs にまとめられています。
rt3090
rt3090 を使っているデバイスには rt2800pci
ドライバを使うことができますが、うまく動作しないことがあります (例えば、時々 2Mb/s 以上の速度が出なくなります)。
rt3290
rt3290 チップセットはカーネルの rt2800pci
モジュールによって認識されます。ただし、問題が起こることもあり、そのような場合はパッチがあてられた Ralink ドライバーに戻すと良いようです。
rt3573
2012年時点で新しいチップセットです。Ralink が提供している新しいプロプライエタリドライバが必要かもしれません。様々な製造会社がそれを使っています、Belkin N750 DB wireless 無線 USB アダプタのスレッドを見て下さい。
mt7612u
2014 年以降の新しい商号 Mediatek でリリースされている最新のチップセットです。AC1200 または AC1300 チップセットになります。サポートページ で Linux 用のドライバーがメーカーから公開されています。カーネル 5.5 より、同梱されている mt76
ドライバによりサポートされているはずです。
Realtek
Realtek のチップセットと仕様のリストは [6] で見られます。
rtl8192cu
このドライバーはカーネルに含まれていますが、多くのユーザーがネットワークのスキャンはできても接続が出来ないと報告しています。
問題が起こる場合は 8192cu-dkmsAUR パッケージで改善するかもしれません。
rtl8723ae/rtl8723be
メインラインの Linux カーネルには rtl8723ae
と rtl8723be
モジュールが含まれています。
このカードの省電力機能についてエラーが発生することがあります。症状としては、ときどき上位のネットワークマネージャ (netctl, NetworkManager) で認識されなくなり切断されます。このエラーは dmesg -w
や journalctl -f
を実行して省電力機能や rtl8723ae
/rtl8723be
モジュールに関連するメッセージを探すことで確認できます。この問題を解決するには、fwlps=0
カーネルオプションを使って、WiFi カードが自動的にスリープ状態にならないようにしてください。方法は カーネルモジュール#モジュールオプションを設定する を見てください。
信号が弱い場合、デバイスにアンテナがひとつしか接続されておらず自動モードが機能していない可能性があります。ant_sel=1
や ant_sel=2
カーネルオプションでアンテナを強制的に設定することができます [7]。
rtl88xxau
Realtek の rtl8811au/rtl8812au/rtl8814au/rtl8821au チップセットは AC600 から AC1900 までの様々な USB アダプタ用に設計されています。いくつかのパッケージは様々なカーネルドライバを提供しており、これらは DKMS(dkms パッケージとインストールされているカーネルのヘッダファイル) を必要とします:
チップセット | パッケージ | ノート |
---|---|---|
rtl8811au, rtl8812au, rtl8821au | rtl88xxau-aircrack-dkms-gitAUR | 8811au, 8812au, 8821au チップセット用の Aircrack-ng カーネルモジュール。モニタモードとインジェクションモードサポート。 |
rtl8814au | rtl8814au-aircrack-dkms-gitAUR | 8814au チップセット用 Aircrack-ng カーネルモジュール。モニタモードとインジェクションモードサポート。 |
rtl8812au | rtl8812au-dkms-gitAUR | rtl8812au のみ用の公式の最新 Realtek ドライババージョン。 |
rtl8811au, rtl8821au | rtl8821au-dkms-gitAUR | rtl8821au 用のより新しいドライババージョン。 |
rtl8814au | rtl8814au-dkms-gitAUR | おそらく rtl8813au に対しても機能する。非推奨らしく、後継は rtl8814au-aircrack-dkms-gitAUR となっています。 |
rtl8811cu/rtl8821cu
rtl8821cu-dkms-gitAUR は Realtek 8811cu と 8821cu チップセット用のカーネルモジュールを提供します。
パッケージをインストールするには DKMS が必要です。適切なカーネルヘッダーをインストールしてください。
8821cu
がロードされていてもワイヤレスインターフェイスが見つからない場合、おそらく rtw_RFE_type
オプションを手動で指定する必要があります[8][9]。例えば rtw_RFE_type=0x26
や他の値を試してみると、機能するかもしれません。詳細は カーネルモジュール#モジュールオプションを設定する を見てください。
rtl8821ce
rtl8821ce-dkms-gitAUR は Realtek 8821ce チップセット用のカーネルモジュールを提供します。このチップセットは Asus X543UA に搭載されています。
パッケージをインストールするには DKMS が必要です。適切なカーネルヘッダーをインストールしてください。
rtl8822bu
rtl88x2bu-dkms-gitAUR は Realtek 8822bu チップセット用のカーネルモジュールを提供します。このチップセットは Edimax EW7822ULC USB3、Asus AC53 Nano USB 802.11ac、TP-Link Archer T3U アダプタに搭載されています。
パッケージをインストールするには DKMS が必要です。適切なカーネルヘッダーをインストールしてください。
rtl8xxxu
サードパーティ製のモジュールをコンパイルすることでメインラインカーネルの rtl8xxxu
モジュールの問題を解決できる場合があります。ソースコードは GitHub リポジトリ に存在します。
一部のドライバーは AUR の rtl8723bu-git-dkmsAUR パッケージなどでインストールできます。
Atheros
MadWifi チーム によって、Atheros チップセットを使っているデバイス用に3つのモジュールがメンテナンスされています:
madwifi
は古い、旧式のドライバーです。2.6.39.1 から Arch のカーネルには含まれていません[11]。ath5k
は新しいドライバーでmadwifi
ドライバーを置き換えます。現在、チップセットによってはベターな選択肢ですが、全てのチップセットがサポートされているわけではありません(下を見て下さい)。ath9k
は3つのドライバーの中で最新のドライバーで、新しい Atheros チップセットに対応しています。802.11n 対応のチップは全てサポートしています。
Atheros デバイス向けに他にも複数のドライバーが存在します。詳しくは Linux Wireless ドキュメント を見て下さい。
ath5k
参照:
ウェブページのロードがランダムで極端に遅くなったり、デバイスが IP アドレスを取得できなくなったら、ath5k
モジュールに nohwcrypt=1
オプションを付けてロードして暗号化をハードウェアからソフトウェアに切り替えてください。詳しくはカーネルモジュール#モジュールオプションを設定するを見て下さい。
ラップトップによっては無線 LED インディケータが赤と青に点滅する問題が発生することがあります。この問題を解決するには、以下を実行して下さい:
# echo none > /sys/class/leds/ath5k-phy0::tx/trigger # echo none > /sys/class/leds/ath5k-phy0::rx/trigger
もしくは このバグレポート を見て下さい。
ath9k
参照:
Linux 3.15.1 現在、一部のユーザーが帯域幅が減少することを報告しています。nohwcrypt=1
オプションを ath9k
モジュールに対して設定することでこれを修正することができる場合があります。カーネルモジュール#モジュールオプションを設定する を見てください。
サポートと開発のための ath9k メーリングリスト が存在します。
省電力機能
Linux Wireless には AR9280 よりも新しい Atheros 製の ath9k シングルチップでは動的な省電力機能が有効になると書かれていますが、一部のデバイス (例: AR9285) では powertop を使って確認すると省電力機能が無効になっていることがわかります。そのような場合、手動で有効にしてください。
ただし一部のデバイス (例: AR9285) では省電力機能を有効にすると以下のようなエラーが発生します:
# iw dev wlan0 set power_save on
command failed: Operation not supported (-95)
解決策は ps_enable=1
オプションを ath9k
モジュールに対して設定することです。カーネルモジュール#モジュールオプションを設定する を見てください。
Intel
ipw2100 と ipw2200
モジュールはカーネルによって完全にサポートされていますが、追加のファームウェアが必要になります。使うチップセットによって、ipw2100-fw か ipw2200-fw をインストールしてください。そして適切なモジュールを再ロードしてください。
iwlegacy
iwlegacy は Intel の 3945, 4965 ワイヤレスチップのワイヤレスドライバーです。このファームウェアは linux-firmware パッケージに含まれています。
udev が自動でドライバーをロードするはずですが、ロードされないときは手動で iwl3945
か iwl4965
をロードしてください。詳しくはカーネルモジュール#ロードを見てください。
信号品質が極端に悪い場合やネットワークに接続できない場合、802.11n を無効化してみてください:
/etc/modprobe.d/iwl4965.conf
options iwl4965 11n_disable=1
起動後に障害が発生し続け、Nouveau ドライバを使用している場合、早期 KMS を有効化して競合を防いでみてください [12]。
iwlwifi
iwlwifi は 5100AGN, 5300AGN, 5350AGN などの Intel の最新のワイヤレスチップのワイヤレスドライバーです。full list of supported devices を見て下さい。このファームウェアは linux-firmware パッケージに含まれています。linux-firmware-iwlwifi-gitAUR パッケージをインストールすることで新しいバージョンを使用することができます。
接続品質が悪いといった一般的なネットワーク接続の問題が起こる場合は、802.11n を無効にしてソフトウェア暗号を有効にしてみて下さい:
/etc/modprobe.d/iwlwifi.conf
options iwlwifi 11n_disable=1 swcrypto=1
802.11n モードでアップリンクの速度が遅い (例: 20Mbps) 場合は、アンテナのアグリゲーションを有効化してみてください:
/etc/modprobe.d/iwlwifi.conf
options iwlwifi 11n_disable=8
オプションの名前に惑わされてはいけません。値が 8
に設定されている場合、無効化ではなくアンテナのアグリゲーションが再有効化されます [13] [14]。
これで上手くいかない場合、無線アダプターの省電力モードを切ってみて下さい。
一部のユーザはこれでうまく行かないようです。あるユーザはルータの設定で N を無効化することにより解決しました。これが唯一の解決策であることは何度も知られています。上記の2つ目のリンクでは 5Ghz オプションに試す価値があると言及されています。
802.11ax (WiFi 6) アクセスポイントがあり、ビーコンの検出や不安定な接続に関する問題がある場合、Intel Article 54799 を見てみてください。
Bluetooth の共存
Bluetooth ヘッドセットを接続できない場合やダウンロード速度があまり出ない場合、Bluetooth の共存を無効化してみてください [15]:
/etc/modprobe.d/iwlwifi.conf
options iwlwifi bt_coex_active=0
Firmware スタックトレース
ドライバがスタックトレースとエラーを出力する問題があり、これによりスタッタリングが発生する可能性があります。
# dmesg
Microcode SW error detected. Restarting 0x2000000.
これらのエラーを修正するには、linux-firmware パッケージをダウングレードするか、デバイスが使用しているファームウェアの最終バージョンをリネームして、古いバージョンがロードされるようにします。
Windows から起動するとアダプタが検出されない
Windows のセッション終了後に Wifi アダプタが検出されない場合、Windows の高速スタートアップ機能が原因であるかもしれません(この機能はデフォルトで有効になっています)。高速スタートアップを無効化してみてください。iwlwifi カーネルドライバ wiki にはこれのエントリがあります。
LED の点滅を無効化する
デフォルト設定ではモジュールの動作中 LED が点滅するようになっています。人によってはこれが鬱陶しく感じるかもしれません。Wi-Fi を使っている時に LED を固定するには、systemd-tmpfiles を使って下さい:
/etc/tmpfiles.d/phy0-led.conf
w /sys/class/leds/phy0-led/trigger - - - - phy0radio
変更を適用するには、systemd-tmpfiles --create phy0-led.conf
を実行するか再起動してください。
LED のトリガの全ての設定値を見るには:
# cat /sys/class/leds/phy0-led/trigger
Broadcom
Broadcom ワイヤレスを見て下さい。
他のドライバー・デバイス
Tenda w322u
この Tenda カードは rt2870sta
デバイスとして扱って下さい。#rt2x00 を参照。
orinoco
カーネルパッケージの一部となっているので、別個インストールする必要はありません。
いくつかの Orinoco チップセットは Hermes I/II です。orinoco_cs
の代わりに wlags49_h1_cs
を使うことで WPA サポートを得ることができます。このドライバーを使うには orinoco_cs
をブラックリスト化して下さい。
prism54
このドライバー p54
はカーネルに含まれていますが、このサイト からあなたのカードに対応するファームウェアをダウンロードして /usr/lib/firmware
ディレクトリにインストールする必要があります。
ACX100/111
パッケージ: tiacx
tiacx-firmware
(公式リポジトリや AUR からは削除されました)
詳しくは 公式 wiki を見て下さい。
zd1211rw
zd1211rw
は ZyDAS ZD1211 802.11b/g USB WLAN チップセット用のドライバで、最近の Linux カーネルに含まれています。サポートされているドライバの一覧は [16] を見て下さい。zd1211-firmwareAUR パッケージとして提供されているファームウェアをインストールすることだけが必要です。
hostap_cs
Host AP は Intersil の Prism2/2.5/3 チップセットを使ったワイヤレス LAN カードの Linux ドライバです。ドライバは Linux カーネルに含まれています。
ndiswrapper
Ndiswrapper は Linux で Windows のドライバーを使うためのラッパースクリプトです。Windows のドライバーに含まれる *.inf
と .sys
ファイルが必要です。
ndiswrapper を設定するには以下の手順に従って下さい。
1. ndiswrapper-dkms をインストールする
2. ドライバを /etc/ndiswrapper/*
にインストールする
# ndiswrapper -i filename.inf
3. ndiswrapper にインストールされたドライバをすべて一覧表示する
$ ndiswrapper -l
4. ndiswrapper に設定を /etc/modprobe.d/ndiswrapper.conf
に書き出させる:
# ndiswrapper -m # depmod -a
これで ndiswrapper のインストールはほぼ完了です; あとはカーネルモジュール#systemd により自動モジュールロードの指示に従って起動時に自動でモジュールをロードするようにしてください。
重要なことは ndiswrapper が他のモジュールと一緒にロードされることです。ndiswrapper がロードされているかテストするには、次を実行してください:
# modprobe ndiswrapper # iwconfig
wlan0 が表示されるはずです。問題が起こった場合は次のページを見て下さい: ndiswrapper howto、ndiswrapper FAQ。
参照
- Linux Wireless プロジェクト
- Aircrack-ng guide on installing drivers
- Wireless Device Database Wiki (このフォークは元の wiki が終了してから wi-cat.ru によってホストされています。これより完全ではないバージョンは: TechInfoDepot, deviwiki)