「ネットワーク設定/ワイヤレス」の版間の差分
Kusakata.bot (トーク | 投稿記録) 細 (文字列「http://sourceforge.net/」を「https://sourceforge.net/」に置換) |
Kusakata.bot (トーク | 投稿記録) 細 (文字列「http://wiki.debian.org/」を「https://wiki.debian.org/」に置換) |
||
722行目: | 722行目: | ||
参照: |
参照: |
||
* http://wireless.kernel.org/en/users/Drivers/ath5k |
* http://wireless.kernel.org/en/users/Drivers/ath5k |
||
− | * |
+ | * https://wiki.debian.org/ath5k |
ウェブページのロードがランダムで極端に遅くなったり、デバイスが IP アドレスを取得できなくなったら、{{ic|ath5k}} モジュールに {{ic|1=nohwcrypt=1}} オプションを付けてロードして暗号化をハードウェアからソフトウェアに切り替えてください。詳しくは[[カーネルモジュール#設定]]を見て下さい。 |
ウェブページのロードがランダムで極端に遅くなったり、デバイスが IP アドレスを取得できなくなったら、{{ic|ath5k}} モジュールに {{ic|1=nohwcrypt=1}} オプションを付けてロードして暗号化をハードウェアからソフトウェアに切り替えてください。詳しくは[[カーネルモジュール#設定]]を見て下さい。 |
||
737行目: | 737行目: | ||
参照: |
参照: |
||
* http://wireless.kernel.org/en/users/Drivers/ath9k |
* http://wireless.kernel.org/en/users/Drivers/ath9k |
||
− | * |
+ | * https://wiki.debian.org/ath9k |
Linux 3.15.1 現在、一部のユーザーが帯域幅が減少することを報告しています。{{ic|/etc/modprobe.d/ath9k.conf}} を編集して以下の行を追加することで問題が解決することがあります: |
Linux 3.15.1 現在、一部のユーザーが帯域幅が減少することを報告しています。{{ic|/etc/modprobe.d/ath9k.conf}} を編集して以下の行を追加することで問題が解決することがあります: |
2018年2月6日 (火) 23:44時点における版
ワイヤレスネットワークの設定は2段階で行います; まずワイヤレスデバイスを使うために正しいドライバがインストールされているか確認し(インストールメディア上では利用できても、明示的にインストールする必要があります)、インターフェースを設定します。次に、ワイヤレス接続を管理する方法を選びます。この記事では両方をカバーしています。また、ワイヤレス管理ツールへの追加リンクもあります。
目次
デバイスドライバ
デフォルトの Arch Linux カーネルはモジュール式です、つまりマシンに必要なドライバの多くはハードドライブに置かれ、モジュールとして利用されます。起動時に、udev がハードウェアの棚卸を実施します。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 を見て下さい。
ワイヤレス管理
ドライバがインストールされ正しく動作しているとして、次にワイヤレス接続を管理するための方法を選ぶ必要があります。次のサブセクションが方法を決めるのに役立つでしょう。
複数の理由によって手順とツールが必要になるでしょう:
- 望む設定管理の種類; 完全に手動なコマンドラインによる設定方法から、グラフィカルフロントエンドによる自動設定まで。
- ワイヤレスネットワークを保護する暗号化方式。
- コンピュータが使うネットワークを頻繁に変える場合 (ラップトップなど)、ネットワークプロファイルの必要性。
マニュアル設定はあなたに多くの仕事を課しますが、設定のよりよいコントロールが得られます。 一般に、永続的な効果のないコマンドセットを入力する必要があるでしょう、つまり、再起動後に適用はされないでしょう。 起動毎にコマンドを入力するのがやっかいな場合は、コマンドをシェルスクリプトに入れて手順を自動化することができます。スクリプトは起動時に自動で実行されるでしょう。Arch ブートプロセスを見て下さい。
以下の表はワイヤレスネットワーク接続を有効化・管理するために使われる方法を、暗号化と管理方式、必要になるツールによってまとめています。他の方法も存在しますが、よく使われるのはこの通りです:
管理方法 | インターフェイスの有効化 | ワイヤレス接続管理 (/=代替) |
IP アドレスの取得 (/=代替) |
---|---|---|---|
手動管理, 暗号化なしか WEP |
ip | iw / iwconfig | ip / dhcpcd / dhclient / networkd |
手動管理, WPA か WPA2 PSK |
ip | iw / iwconfig + wpa_supplicant | ip / dhcpcd / dhclient / networkd |
自動管理, ネットワークプロファイルのサポート |
netctl, Wicd, NetworkManager など。これらのツールは手動の方法にあるパッケージのリストから必要な依存パッケージを追加でインストールします。 |
手動セットアップ
他のネットワークインターフェイスと同じように、無線インターフェイスは iproute2 パッケージの ip で操作します。さらに iw パッケージはワイヤレス接続を管理する基本的なツールのセットを提供します。あなたのカードで iw が動かない場合は、昔の wireless_tools を使ってみて下さい。#iw と wireless_tools の比較表を参照。また、WPA/WPA2 暗号化を使うには、wpa_supplicant パッケージをインストールする必要があります。これらのパワフルなユーザースペースのツールはすこぶる良く動作し、ワイヤレス接続を完全に手動で操作できます。
情報を取得する
- まず無線インターフェイスの名前を調べる必要があります。次のコマンドを使って確認できます:
$ iw dev
phy#0 Interface wlan0 ifindex 3 wdev 0x1 addr 12:34:56:78:9a:bc type managed channel 1 (2412 MHz), width: 40 MHz, center1: 2422 MHz
- リンクの状態を確認するには、次のコマンドを使って下さい。アクセスポイント (AP) に接続されていないと以下のように表示されます:
$ iw dev wlan0 link
Not connected.
AP に接続されている場合は、以下のように表示されるはずです:
$ iw dev wlan0 link
Connected to 12:34:56:78:9a:bc (on wlan0) SSID: MyESSID freq: 2412 RX: 33016518 bytes (152703 packets) TX: 2024638 bytes (11477 packets) signal: -53 dBm tx bitrate: 150.0 MBit/s MCS 7 40MHz short GI bss flags: short-preamble short-slot-time dtim period: 1 beacon int: 100
- 次のコマンドで tx/rx バイトの総量やシグナルの強さと言った統計値を取得することができます:
$ iw dev wlan0 station dump
Station 12:34:56:78:9a:bc (on wlan0) inactive time: 1450 ms rx bytes: 24668671 rx packets: 114373 tx bytes: 1606991 tx packets: 8557 tx retries: 623 tx failed: 1425 signal: -52 dBm signal avg: -53 dBm tx bitrate: 150.0 MBit/s MCS 7 40MHz short GI authorized: yes authenticated: yes preamble: long WMM/WME: yes MFP: no TDLS peer: no
インターフェースの有効化
(通常は不要)
カードによっては iw
や wireless_tools
を使う前にカーネルインターフェースを初期化する必要があります:
# ip link set wlan0 up
インターフェイスが立ち上がっているか確認するには、次のコマンドの出力を見て下さい:
# ip link show wlan0
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 wlan0 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 wlan0 set type ibss
関連付け
暗号化方式によって、利用するアクセスポイントと暗号化キーをワイヤレスデバイスに関連付ける必要があります。
- 暗号化なし
# iw dev wlan0 connect your_essid
- WEP
十六進数キーか ASCII キーを使う (WEP キーは長さが固定されているため、どちらの形式かは自動で識別されます):
# iw dev wlan0 connect your_essid key 0:your_key
十六進数キーか ASCII キーを使う、3番目に設定したキーをデフォルトとして指定する (キーは0からカウントされます):
# iw dev wlan0 connect your_essid key d:2:your_key
- WPA/WPA2
WPA supplicant で説明されているように #アクセスポイント検索 で得られた結果にあわせて /etc/wpa_supplicant.conf
ファイルを編集する必要があります。それができたら、次のコマンドを実行してください:
# wpa_supplicant -D nl80211,wext -i wlan0 -c /etc/wpa_supplicant.conf
ここではあなたのデバイスが wext
ドライバを使うと仮定しています。これで動かない場合、オプションを修正しなくてはならないかもしれません。
接続に成功したなら、新しいターミナルで次に進んでください (もしくは Ctrl+c
で wpa_supplicant
を終了し上記のコマンドに -B
スイッチを付けてバックグラウンドで実行してください)。WPA supplicant にはより詳しい情報とトラブルシューティングが載っています。
使う方法によらず、関連付けが成功しているかどうかは次を実行することで確かめられます:
# iw dev wlan0 link
IP アドレスを取得
最後に、ネットワークインターフェースに IP アドレスを与えます。例えば DHCP を使って:
# dhcpcd wlan0
または
# dhclient wlan0
固定 IP アドレスの場合:
# ip addr add 192.168.0.2/24 dev wlan0 # ip route add default via 192.168.0.1
カスタムスタートアップスクリプト・サービス
手動設定はワイヤレスに関する問題のトラブルシューティングに役立ちますが、再起動する毎にコマンドを再入力する必要があります。全体のプロセスを自動で行うシェルスクリプトを書けば、設定の全てのコントロールを維持しながらネットワーク管理をとても便利にすることができます。
systemd と dhcpcd を使って起動時に手動でワイヤレス接続
この例ではスタートアップに systemd を、接続に WPA supplicant を、IP アドレスの取得に dhcpcd を使っています。
systemd のユニットを作成してください、例: /etc/systemd/system/network-wireless@.service
:
/etc/systemd/system/network-wireless@.service
[Unit] Description=Wireless network connectivity (%i) Wants=network.target Before=network.target BindsTo=sys-subsystem-net-devices-%i.device After=sys-subsystem-net-devices-%i.device [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/bin/ip link set dev %i up ExecStart=/usr/bin/wpa_supplicant -B -i %i -c /etc/wpa_supplicant.conf ExecStart=/usr/bin/dhcpcd %i ExecStop=/usr/bin/ip link set dev %i down [Install] WantedBy=multi-user.target
ユニットを有効にして起動してください (インターフェイスの名前を指定します):
# systemctl enable network-wireless@wlan0.service # systemctl start network-wireless@wlan0.service
Systemd と wpa_supplicant と固定 IP
まず systemd サービスの設定ファイルを作成してください (<interface>
は適切なインターフェイス名に置き換えて下さい):
/etc/conf.d/network-wireless@<interface>
address=192.168.0.10 netmask=24 broadcast=192.168.0.255 gateway=192.168.0.1
systemd のユニットファイルを作成してください:
/etc/systemd/system/network-wireless@.service
[Unit] Description=Wireless network connectivity (%i) Wants=network.target Before=network.target BindsTo=sys-subsystem-net-devices-%i.device After=sys-subsystem-net-devices-%i.device [Service] Type=oneshot RemainAfterExit=yes EnvironmentFile=/etc/conf.d/network-wireless@%i ExecStart=/usr/bin/ip link set dev %i up ExecStart=/usr/bin/wpa_supplicant -B -i %i -c /etc/wpa_supplicant.conf ExecStart=/usr/bin/ip addr add $address/$netmask broadcast $broadcast dev %i ExecStart=/usr/bin/ip route add default via $gateway ExecStop=/usr/bin/ip addr flush dev %i ExecStop=/usr/bin/ip link set dev %i down [Install] WantedBy=multi-user.target
ユニットを有効にして起動してください (インターフェイスの名前を指定します):
# systemctl enable network-wireless@wlan0.service # systemctl start network-wireless@wlan0.service
自動セットアップ
様々な方法を選ぶことができますが、相互に相容れないことを忘れないで下さい; 2つのデーモンを同時に実行してはいけません。下の表は接続マネージャを比較しています。それぞれの詳細は下のサブセクションにあります。
接続マネージャ | ネットワーク プロファイル サポート |
ローミング (切断したり場所を変更した時の 自動接続) |
PPP サポート (例: 3G モデム) |
Archiso [1] | 公式 GUI |
コンソールツール | Systemd ユニット |
---|---|---|---|---|---|---|---|
ConnMan | Yes | Yes | Yes | No | No | connmanctl |
connman.service
|
netctl | Yes | Yes | Yes | Yes (base) | No | netctl ,wifi-menu |
netctl-auto@interface.service
|
NetworkManager | Yes | Yes | Yes | No | Yes | nmcli ,nmtui |
NetworkManager.service
|
Wicd | Yes | Yes | No | No | Yes | wicd-curses |
wicd.service
|
Wifi Radar | Yes | Yes | No | No | Yes | wifi-radar |
Netctl
netctl は netcfg の後継で systemd で動作するように設計されています。設定にプロファイルを使い、幅広いタイプのネットワークを検知・接続することができます。グラフィカルツールを使うのと難易度は大して変わりません。
参照: Netctl
Wicd
Wicd は無線・有線両方の接続を管理することができるネットワークマネージャです。Python と Gtk で書かれており NetworkManager よりも依存ライブラリがすくなく、軽量なデスクトップを使うユーザーにとって理想的な選択肢になるかもしれません。
参照: Wicd
NetworkManager
NetworkManager は高度なネットワーク管理ツールであり、人気のある GNU/Linux ディストーションのほとんどでデフォルトで有効にされています。有線接続の管理に加えて、NetworkManager は、GUI プログラムで利用したいネットワークを選択する、使いやすくて、心配のないワイヤレスローミングを提供します。
参照: NetworkManager
WiFi Radar
WiFi Radar はワイヤレスプロファイルを管理する Python/PyGTK2 ユーティリティです(ワイヤレスだけをサポートしています)。利用できるネットワークのスキャンとネットワークのプロファイルの作成ができます。
参照: Wifi Radar
WPA2 Enterprise
WPA2 Enterprise のページを見てください。
ヒントとテクニック
規制範囲
法的に許可されている無線周波数はデバイスが使われる地域によって異なるため、無線ドライバーに地域を設定する必要があります。これは規制範囲 (regulatory domain) と呼ばれます。
例えば、iwl3945
ドライバーはデフォルトでチャネル 1-11 のネットワークだけで動作するように設定されています。世界の一部地域ではこれよりも高い周波数帯は許可されていません (例: アメリカ)。しかしながら EU では、チャネル 12 と 13 も広く一般的に使われています (そして日本ではチャネル 14 も許可されています)。規制範囲を例えばアメリカに設定した場合、高チャネルのネットワークはスキャンしても表示されません。同じように、規制範囲を正しく設定しないと、5 Mhz モードも制限を受けることがあります。
options cfg80211 ieee80211_regdom=EU
などのモジュールオプションを追加することで特定の規制範囲を使用して cfg80211 カーネルモジュールを設定することが可能です。設定方法の詳細はカーネルモジュールを見て下さい。
他にも crda パッケージをインストールして /etc/conf.d/wireless-regdom
を編集するという設定方法もあります (このファイルは実際は crda の依存パッケージである wireless-regdb に含まれています)。
iw と wireless_tools の比較表
下の表は両方のツールのコマンドの簡単な比較です ([2] にもっと詳しい例があります)。
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 s:your_key | 十六進数のキーを使って WEP で暗号化されたネットワークに接続。 |
iwconfig wlan0 essid your_essid key s:your_key | ASCII 文字のキーを使って WEP で暗号化されたネットワークに接続。 | |
iw dev wlan0 set power_save on | iwconfig wlan0 power on | 省電力機能を有効にする。 |
トラブルシューティング
一時的にネットワークにアクセス
ハードウェアに問題があるときに、インターネットに接続してソフトウェアをダウンロードしたりフォーラムでヘルプを得たい場合、Android に内蔵されている機能を使って USB ケーブルでインターネット共有をすることができます。詳しくは Android テザリング#USB テザリングを見て下さい。
Rfkill によるブロック
多くのノートパソコンには無線カードをオフにするための物理ボタン(スイッチ)が付いていますが、カーネルからカードをブロックすることも可能です。これは rfkill[リンク切れ: 置換パッケージ: util-linux] によって行うことができます。rfkill を使って現在の状態を表示してみてください:
# rfkill list
0: phy0: Wireless LAN Soft blocked: yes Hard blocked: yes
カードが hard-blocked になっている場合、物理ボタン(スイッチ)を使ってブロックを解除してください。カードが hard-blocked ではなく soft-blocked されている場合、次のコマンドを使ってください:
# rfkill unblock wifi
ワイヤレスカードのオンオフを切り替えるハードウェアボタンはメーカー別のカーネルモジュールによって処理されます。大抵は WMI モジュールです。特に最近のハードウェアでは、安定版のカーネルではまだサポートが完全には実装されていない可能性があります。そのような場合、カーネルのバグトラッカーを検索したりカーネルモジュールのメンテナにモデルを報告してください。
詳細: http://askubuntu.com/questions/62166/siocsifflags-operation-not-possible-due-to-rf-kill
ログの取得
トラブルシューティングで一番初めにするべきなのはシステムのログファイルを解析することです。全部を手でパースしないために、新しいターミナル(コンソール)を開いて、接続を試行している間のカーネルメッセージを次のコマンドで見ると良いでしょう:
$ dmesg -w
ネットワーク管理にツールを使っている場合、systemd でも同じことができます:
# journalctl -f
この記事にあるそれぞれのツールは詳細なデバッグ出力をするオプションを用意しているので、必要ならば、解析の第二段階としてそれを使うことができます。
省電力機能
省電力設定#ネットワークインターフェイスを見て下さい。
IP アドレスの取得に失敗する
- デフォルトの dhcpcd クライアントでは IP アドレスの取得に何度も失敗する場合、代わりに dhclient をインストールして使用してみて下さい。あなたの使っている接続マネージャで DHCP クライアントとして dhclient を忘れずに選択してください。
- 有線インターフェイスでは IP アドレスを取得できるのに、無線インターフェイスでは出来ない場合、ワイヤレスカードの省電力機能を無効にしてみてください:
# iwconfig wlan0 power off
- waiting for carrier の問題でタイムアウトエラーになる場合、特定のデバイスのチャンネルモードを
auto
に設定する必要があるかもしれません:
# iwconfig wlan0 channel auto
チャンネルを auto に変える前に、あなたのワイヤレスインターフェースが止まっていることを確認してください。変更が成功したら、インターフェースを立ち上げなおして次の手順に進んで下さい。
IP アドレスは取得できるのにホスト解決ができない
公共の無線ネットワークを使っている場合 Captive Portal が存在することがあります。その場合、resolv.conf からカスタム DNS サーバーを削除する必要があります。
接続がいつもタイムアウトになる
何らかの理由で tx excessive retries や invalid misc などのエラーが大量に発生すると、パケットをロスしたり接続が切れたりすることがあります。以下のヒントが役に立つかもしれません。
レートを下げる
低いレートに設定してみてください (例: 5.5M):
# iwconfig wlan0 rate 5.5M auto
fixed オプションを使うことでドライバーによってレートが変わらないようにすることができ、接続が少しだけ安定します:
# iwconfig wlan0 rate 5.5M fixed
txpower を下げる
出力も同じように下げることができます。出力を下げると電力も節約できます:
# iwconfig wlan0 txpower 5
利用できる設定は 0
から 20
までと auto
または off
です。
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
dmesg に wlan0: deauthenticating from MAC by local choice (reason=3)
と表示され Wi-Fi 接続が失われる場合は、おそらく Wi-Fi カードの省電力機能がアグレッシブすぎるのが原因です [3]。無線カードの省電力機能を無効化してみてください:
# iwconfig wlan0 power off
この設定を永続化する方法は省電力設定を見て下さい (on
の代わりに off
を指定)。
あなたのカードが iwconfig wlan0 power off
をサポートしていない場合は、BIOS の電源管理のオプションを確認してください。Lenovo W520 では BIOS にある PCI-Express の電源管理を無効化すると問題が解決します。
原因 #2
頻繁に切断が発生し、dmesg で以下のようなメッセージが表示される場合:
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 を無効化
40Mhz
周波数帯を無効化 (スループットは悪くなりますが衝突は起きにくくなります)- ルーターにサービス品質に関する設定がある場合、設定が完全であることを確認 (例: Wi-Fi Multimedia (WMM) は任意の QoS フロー制御の一部です。問題のあるルーターファームウェアは設定が有効になっていない場合も有効であるかのように見せかけてくることがあります)
ドライバとファームウェアのトラブルシューティング
このセクションでは、一般的な方法とは異なる、特定のチップセットのカーネルモジュールとファームウェアをインストールする方法を説明します。
モジュールの動作についての一般的な情報はカーネルモジュールを見て下さい。
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
によって置き換えられました[4]。 - デバイスによっては
iwpriv
を使って様々なオプションを設定することができます。これらのオプションについては Ralink から入手できる source tarballs にまとめられています。
rt3090
rt3090 を使っているデバイスには rt2800pci
ドライバを使うことができますが、うまく動作しないことがあります (例えば、時々 2Mb/s 以上の速度が出なくなります)。
rt3290
rt3290 チップセットはカーネルの rt2800pci
モジュールによって認識されます。ただし、問題が起こることもあり、そのような場合はパッチがあてられた Ralink ドライバーに戻すと良いようです。
rt3573
2012年時点で新しいチップセットです。Ralink が提供している新しいプロプライエタリドライバが必要かもしれません。様々な製造会社がそれを使っています、Belkin N750 無線 USB アダプタのスレッドを見て下さい。
rt5572
5 Ghz 帯をサポートした2012年時点で新しいチップセットです。Ralink が提供している新しいプロプライエタリドライバをコンパイルする必要があるかもしれません。DLINK DWA-160 rev のためのコンパイル方法が書かれています。B2 here。
mt7612u
新しい商号 Mediatek でリリースされている最新のチップセットです。AC1200 または AC1300 チップセットになります。サポートページ で Linux 用のドライバーがメーカーから公開されています。
Realtek
rtl8192cu
このドライバーはカーネルに含まれていますが、多くのユーザーがネットワークのスキャンはできても接続が出来ないと報告しています。
問題が起こる場合は 8192cu-dkmsAUR パッケージで改善するかもしれません。
rtl8192e
このドライバはカーネルパッケージの一部になっています。以下のエラーメッセージを表示してモジュールの初期化が失敗する場合があるかもしれません:
rtl819xE:ERR in CPUcheck_firmware_ready() rtl819xE:ERR in init_firmware() step 2 rtl819xE:ERR!!! _rtl8192_up(): initialization is failed! r8169 0000:03:00.0: eth0: link down
回避方法は単純にモジュールをアンロードするだけです:
# modprobe -r r8192e_pci
そして (一定時間後) モジュールをリロードします:
# modprobe r8192e_pci
rtl8188eu
TP-Link TL-WN725N v2 (rtl8179 チップセットを使用) などのドングルには、このドライバーと互換性のあるチップセットを使っているものがあります。ドングルを使うには AUR の 8188eu-dkmsAUR パッケージをインストールしてください。
rtl8723ae/rtl8723be
Linux カーネルのバージョン 3.6 から新しい rtl8723ae
モジュールが含まれるようになりました。同 3.15 から rtl8723be
モジュールが追加されています。
このカードの省電力機能についてエラーが発生することがあります。症状としては、ときどき上位のネットワークマネージャ (netctl, NetworkManager) で認識されなくなり切断されます。このエラーは dmesg -w
や journalctl -f
を実行して省電力機能や rtl8723ae
/rtl8723be
モジュールに関連するメッセージを探すことで確認できます。この問題を解決するには、fwlps=0
カーネルオプションを使って、WiFi カードが自動的にスリープ状態にならないようにしてください:
/etc/modprobe.d/rtl8723ae.conf
options rtl8723ae fwlps=0
または:
/etc/modprobe.d/rtl8723be.conf
options rtl8723be fwlps=0
信号が弱い場合、デバイスにアンテナがひとつしか接続されておらず自動モードが機能していない可能性があります。ant_sel=1
や ant_sel=2
カーネルオプションでアンテナを強制的に設定することができます。
rtl88xxau
Realtek の rtl8811au/rtl8812au/rtl8814au/rtl8821au チップセットは AC600 から AC1900 までの様々な USB アダプタ用に設計されています。
以下のパッケージでカーネルドライバーをインストールできます:
チップセット | ドライバーのバージョン | AUR パッケージ | ノート |
---|---|---|---|
rtl8812au | 5.2.9.3 | rtl8812au-dkms-gitAUR | rtl8812au 専用の最新版のドライバー |
rtl8811au, rtl8812au, rtl8821au | 5.1.5 | rtl8821au-dkms-gitAUR | rtl8812au については最新版を使うことを推奨します。 |
rtl8814au | 4.3.21 | rtl8814au-dkms-gitAUR | rtl8813au でも動作する可能性があります。 |
上記のパッケージを使うには DKMS が必要です。適切なカーネルヘッダーをインストールしてください。
Atheros
MadWifi チーム によって、Atheros チップセットを使っているデバイス用に3つのモジュールがメンテナンスされています:
madwifi
は古い、旧式のドライバーです。2.6.39.1 から Arch のカーネルには含まれていません[5]。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 現在、一部のユーザーが帯域幅が減少することを報告しています。/etc/modprobe.d/ath9k.conf
を編集して以下の行を追加することで問題が解決することがあります:
options ath9k nohwcrypt=1
安定性に問題が起こる場合、backports-patchedAUR パッケージを試してみることもできます。サポートと開発のための ath9k メーリングリスト が存在します。
省電力機能
Linux Wireless には AR9280 よりも新しい Atheros 製の ath9k シングルチップでは動的な省電力機能が有効になると書かれていますが、一部のデバイス (例: AR9285) では powertop を使って確認すると省電力機能が無効になっていることがわかります。そのような場合、手動で有効にしてください。
ただし一部のデバイス (例: AR9285) では省電力機能を有効にすると以下のようなエラーが発生します:
# iw dev wlan0 set power_save on
command failed: Operation not supported (-95)
ath9k
モジュールの ps_enable=1
オプションを設定することでエラーは解決できます:
/etc/modprobe.d/ath9k.conf
options ath9k ps_enable=1
ASUS
ASUS のノートパソコンでは (ASUS U32U シリーズでテスト)、/etc/modprobe.d/asus_nb_wmi.conf
に options asus_nb_wmi wapf=1
を追加すると rfkill に関連する問題が解決するかもしれません。
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
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 options iwlwifi swcrypto=1
802.11n モードでアップリンクの速度が遅い (例: 20Mbps) 場合は、アンテナのアグリゲーションを有効化してみてください:
/etc/modprobe.d/iwlwifi.conf
options iwlwifi 11n_disable=8
オプションの名前に惑わされてはいけません。値が 8
に設定されている場合、無効化ではなくアンテナのアグリゲーションが再有効化されます [6] [7]。
これで上手くいかない場合、無線アダプターの省電力モードを切ってみて下さい。永続的に設定するには、新しい udev ルールを追加します:
/etc/udev/rules.d/80-iwlwifi.rules
ACTION=="add", SUBSYSTEM=="net", ATTR{address}=="your_mac_address", RUN+="/usr/bin/iw dev %k set power_save off"
Bluetooth の共存
Bluetooth ヘッドセットを接続できない場合やダウンロード速度があまり出ない場合、Bluetooth の共存を無効化してみてください [8]:
/etc/modprobe.d/iwlwifi.conf
options iwlwifi bt_coex_active=0
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 カーネルに含まれています。サポートされているドライバの一覧は [9] を見て下さい。zd1211-firmware パッケージとして提供されているファームウェアをインストールすることだけが必要です。
hostap_cs
Host AP は Intersil の Prism2/2.5/3 チップセットを使ったワイヤレス LAN カードの Linux ドライバです。hostap_cs
は linux
パッケージに含まれています。
ndiswrapper
Ndiswrapper は Linux で Windows のドライバーを使うためのラッパースクリプトです。互換リストは ここ を見て下さい。Windows のドライバーに含まれる *.inf
と .sys
ファイルが必要です。ドライバがあなたのアーキテクチャ (例: 32/64 ビット) に適合しているかも確認してください。
ndiswrapper を設定するには ndiswrapper-dkms をインストールしてから以下の手順に従って下さい。
1. ドライバを /etc/ndiswrapper/*
にインストールします
# ndiswrapper -i ファイル名.inf
2. ndiswrapper にインストールされたドライバを全て一覧します
$ ndiswrapper -l
3. 以下の設定ファイルを書き出します
/etc/modprobe.d/ndiswrapper.conf
ndiswrapper -m depmod -a
これで ndiswrapper のインストールはほぼ完了です; あとはカーネルモジュール#ロードの指示に従って起動時に自動でモジュールをロードするようにしてください。
重要なことは ndiswrapper が他のモジュールと一緒にロードされることです。ndiswrapper がロードされているかテストするには、次を実行してください:
# modprobe ndiswrapper # iwconfig
wlan0 が表示されるはずです。問題が起こった場合は次のページを見て下さい: Ndiswrapper installation wiki。
backports-patched
backports-patchedAUR は新しいカーネルのドライバーは旧カーネルで使えるようにバックポートしたパッケージです。プロジェクトは2007年から開始され最初は compat-wireless という名前で、次に compat-drivers となり、最近になって backports になりました。
古いカーネルを使っていて無線が繋がらない場合、このパッケージをインストールすることで問題が解決する場合があります。