iwd

提供: ArchWiki
ナビゲーションに移動 検索に移動

関連記事

iwd (iNet wireless daemon) は Intel によって書かれた Linux 用の無線デーモンです。プロジェクトの中心的な目標は、外部ライブラリに依存せず、Linux カーネルが提供する機能を最大限に活用することにより、リソース使用率を最適化することです。

iwd はスタンドアロンでも動作しますが ConnMansystemd-networkdNetworkManager のような包括的なネットワークマネージャーとの組み合わせて使うこともできます。

ノート: ネットワークマネージャ 経由で iwd を使用する場合は、そのネットワークマネージャの記事に明示的に記載されていない限り、このページの指示には従わないでください。

インストール

iwd パッケージをインストールしてください。

使用方法

iwd パッケージにはクライアントプログラムの iwctl とデーモンの iwd、そして Wi-Fi 監視ツールの iwmon が含まれています。

iwd.service起動有効化)したら、iwctl コマンドを使って制御することができます。

iwctl

対話型プロンプトを表示するには、次のようにします:

$ iwctl

対話型プロンプトは、プレフィックスが、[iwd]# と表示されます。

ヒント:
  • iwctl プロンプトで、Tab キーを押すとコマンドとデバイス名を補完できます。
  • 対話型プロンプトを終了するには、Ctrl+d を押して、 EOF を送信します。
  • 対話型プロンプトを使用せずに、すべてのコマンドをコマンドライン引数として使用できます。例:iwctl device wlan0 show

使用可能なすべてのコマンドの一覧を表示するには:

[iwd]# help

ネットワークに接続する

先ず、ワイヤレスデバイス名がわからない場合は、すべての Wi-Fiデバイスを一覧表示します:

[iwd]# device list

次に、ネットワークをスキャンします:

[iwd]# station device scan

利用可能なすべてのネットワークを一覧表示できます:

[iwd]# station device get-networks

最後に、ネットワークに接続するには:

[iwd]# station device connect SSID
ヒント: ユーザーインターフェイスはオートコンプリートをサポートしています。station と入力し、Tab Tab を押すと、使用可能なデバイスが表示され、デバイスの最初の文字を入力し、Tab を押して補完します。 同じように、connect を入力し Tab Tab と押すと、利用可能なネットワークのリストを表示します。次に、使用するネットワークの最初の文字を入力して、Tab キーを押して補完を完了します。

パスフレーズが必要な場合は、入力を求められます。コマンドライン引数として指定することもできます:

$ iwctl --passphrase passphrase station device connect SSID
ノート:
  • iwd はネットワークパスフレーズを /var/lib/iwd ディレクトリに自動的に保存し、将来的にそれらを使用して自動接続します。 #Network configuration を参照してください。
  • SSID にスペースが含まれるネットワークに接続するには、接続時にネットワーク名をダブルクオートで囲む必要があります。
  • iwd は、8〜63 文字の ASCII エンコード文字の PSK パスフレーズのみをサポートします。要件が満たされていない場合は次のエラーメッセージが表示されます: PMK generation failed. Ensure Crypto Engine is properly configured

WPS/WSC を使用してネットワークに接続する

ボタンを押してネットワークに接続できるように設定されている場合 (Wikipedia:ja:Wi-Fi Protected Setup) は、まず、ネットワークデバイスがこのセットアップ手順を使用できることを確認してください。

[iwd]# wsc list

次に、デバイスが上記のリストに表示されている場合、

[iwd]# wsc device push-button

それから、ルーターのボタンを押します。この手順は、2分以内にボタンを事前に押した場合にも機能します。

ネットワークがその方法で接続するために、PIN 番号を検証する必要がある場合は、help コマンド出力をチェックして、wsc コマンドに適切なオプションを提供する方法を確認してください。

ネットワークから切断する

ネットワークから切断するには:

[iwd]# station device disconnect

デバイスと接続情報を表示する

MAC アドレスなどの WiFi デバイスの詳細を表示するには:

[iwd]# device device show

WiFi デバイスの接続ネットワークを含む接続状態を表示するには:

[iwd]# station device show

既知のネットワークの管理

以前に接続したネットワークを一覧表示するには:

[iwd]# known-networks list

既知のネットワークを忘れるには:

[iwd]# known-networks SSID forget

iwgtk

iwgtkAUR は、iwd を制御できる GUI フロントエンドを提供します。

引数を指定せずに iwgtk を実行すると、アプリケーションウィンドウが起動します。このウィンドウを使用して、アダプターとデバイスのオン/オフの切り替え、動作モードの変更、利用可能なネットワークの表示、利用可能なネットワークへの接続、既知のネットワークの管理を行うことができます。

インジケーターアイコン

iwgtk のインジケーター (トレイ) アイコンデーモンを起動するには、次のコマンドを実行します:

$ iwgtk -i

インジケーターアイコンが表示されない場合は、システムトレイで StatusNotifierItem API がサポートされていない可能性が高く、その場合は、snixembed-gitAUR などの互換性レイヤーを実行する必要があります。

次のシステムトレイは StatusNotifierItem をサポートしているため、そのまま使用できます:

  • KDE Plasma
  • swaybar
  • xfce4-panel

次のトレイは XEmbed のみをサポートしているため、snixembed-gitAUR が必要です:

  • AwesomeWM
  • i3bar

自動起動

iwgtk の最も一般的な使用例は、デスクトップにログインするたびにインジケーターデーモンを起動することです。デスクトップ環境が XDG Autostart 標準をサポートしている場合、AUR パッケージによって /etc/xdg/autostart/ に配置されている iwgtk-indicator.desktop ファイルにより自動的に行われます。

あるいは、インジケーターデーモンを起動するための systemd ユニットファイルが AUR パッケージによって提供されます。デスクトップ環境が systemd の graphical-session.target ユニットをサポートしている場合、iwgtk.service ユーザーユニット有効化 することで、systemd 経由で iwgtk を自動起動できます。

ネットワーク設定

デフォルトでは、iwd はネットワーク設定を /var/lib/iwd ディレクトリに保存します。設定ファイルの名前は、network.type となります。network はネットワーク SSID で .type はネットワークタイプ(.open.wep.psk または .8021x)です。このファイルは暗号化された事前共有鍵と、オプションでクリアテキストのパスフレーズを保存するために使用され、ユーザー iwctl を呼び出さずに作成することもできます。このファイルは、そのネットワーク SSID に関連する他の設定にも使用できます。詳細な設定については、iwd.network(5) を参照してください。

WPA-PSK

SSID "spaceship" とパスフレーズ "test1234" を使用して WPA-PSK または WPA2-PSK で保護されたネットワークに接続するための最小限のサンプルファイル:

/var/lib/iwd/spaceship.psk
[Security]
PreSharedKey=aafb192ce2da24d8c7805c956136f45dd612103f086034c402ed266355297295
ノート: ネットワークの SSID は英数字のみまたは - _ のいずれかを含む場合のみファイル名として使用されます。他の文字が含まれている場合、名前は = 文字の後に16進数でエンコードされた SSID が代わりに使用されます。

パスフレーズから事前共有鍵を計算するには、次の二つの方法のいずれかを使用できます:

  • 設定ファイルにクリアテキストでパスフレーズを入力します:
/var/lib/iwd/spaceship.psk
[Security]
Passphrase=test1234

事前共有鍵は、最初の接続時にファイルに追加されます。

/var/lib/iwd/spaceship.psk
[Security]
Passphrase=test1234
PreSharedKey=aafb192ce2da24d8c7805c956136f45dd612103f086034c402ed266355297295

WPA Enterprise

EAP-PWD

EAP-PWD で保護されたエンタープライズアクセスポイントに接続するには /var/lib/iwd フォルダに以下の内容で essid.8021x という名前のファイルを作成する必要があります:

/var/lib/iwd/essid.8021x
[Security]
EAP-Method=PWD
EAP-Identity=your_enterprise_email
EAP-Password=your_password

[Settings]
AutoConnect=true

アクセスポイントに自動接続したくない場合、AutoConnect オプションを false に設定して iwctl で手動でアクセスポイントに接続してください。パスワードを平文で保存したくない場合は、ファイルからパスワードの設定を外してください。

EAP-PEAP

EAP-PWD と同様に、フォルダー内に essid.8021x を作成する必要があります。設定ファイルの作成に進む前に、組織が使用している CA 証明証を確認する良い機会でもあります。これは MSCHAPv2 パスワード認証を使用する設定ファイルの例です:

/var/lib/iwd/essid.8021x
[Security]
EAP-Method=PEAP
EAP-Identity=anonymous@realm.edu
EAP-PEAP-CACert=/path/to/root.crt
EAP-PEAP-ServerDomainMask=radius.realm.edu
EAP-PEAP-Phase2-Method=MSCHAPV2
EAP-PEAP-Phase2-Identity=johndoe@realm.edu
EAP-PEAP-Phase2-Password=hunter2

[Settings]
AutoConnect=true

MsCHAPv2 パスワードは、暗号化されたハッシュとして保存することもできます。正しい md4 ハッシュは次のように計算できます: (パスワードの後に EOF を挿入し、Enter キーを押さないでください)

$ iconv -t utf16le | openssl md4 -provider legacy

結果のハッシュは、EAP-PEAP-Phase2-Password-Hash キー内に保存する必要があります。

ヒント: eduroam の使用を計画している場合は、#Eduroam も参照してください。

TTLS-PAP

EAP-PWD と同様に、フォルダー中に essid.8021x を作成する必要があります。設定ファイルの作成に進む前に、組織が使用している CA 証明書を確認する良い機会でもあります。これは、PAP パスワード認証を使用する設定ファイルの例です:

/var/lib/iwd/essid.8021x
[Security]
EAP-Method=TTLS
EAP-Identity=anonymous@uni-test.de
EAP-TTLS-CACert=cert.pem
EAP-TTLS-ServerDomainMask=*.uni-test.de
EAP-TTLS-Phase2-Method=Tunneled-PAP
EAP-TTLS-Phase2-Identity=user
EAP-TTLS-Phase2-Password=password

[Settings]
AutoConnect=true

Eduroam

Eduroam は 設定アシスタントツール(CAT) を提供していますが、残念ながら iwd には対応していません。しかし、ダウンロードボタンをクリックし、大学を選択してダウンロードできるインストーラは単なる Python スクリプトです。証明書やサーバのドメインマスクなど、必要な設定オプションを簡単に抽出することができます。

以下の表は、iwd の設定オプションと eduroam CAT のインストールスクリプトの変数の対応を示します。

Iwd 設定オプション CAT スクリプト変数
file name Config.ssids の一つ
EAP-Method Config.eap_outer
EAP-Identity Config.anonymous_identity
EAP-PEAP-CACert Config.CA
EAP-PEAP-ServerDomainMask Config.servers の一つ
EAP-PEAP-Phase2-Method Config.eap_inner
EAP-PEAP-Phase2-Identity ユーザー名@Config.user_realm
ノート:
  • EAP-Identity は Eduroam プロバイダによって要求されていない場合があります。その場合は、このフィールドに anonymous@Config.user_realm を使用する必要があります。
  • EAP-PEAP-ServerDomainMaskDNS: で始まる場合は、DNS: 以降の部分のみを使用してください。

その他のケース

その他のテスト例は、上流リポジトリの テストケースにあります。

任意設定

メインの設定は /etc/iwd/main.conf ファイルで行います。 iwd.config(5) を参照してください。

特定のネットワークに対する自動接続を無効化

/var/lib/iwd/network.type ファイルを作成・編集してください (network はネットワークの SSID に、type は "open", "wep", "psk", "8021x" のどれかのネットワークタイプに置き換えてください)。そしてファイルに以下のセクションを追加してください:

/var/lib/iwd/spaceship.psk
[Settings]
AutoConnect=false

利用可能なネットワークの定期スキャンを無効にする

デフォルトでは、 iwd は切断状態の場合、利用可能なネットワークを定期的にスキャンします。定期スキャンを無効にする(常に手動でスキャンする)には、/etc/iwd/main.conf ファイルを作成/編集し、以下のセクションを追加します:

/etc/iwd/main.conf
[Scan]
DisablePeriodicScan=true

内蔵ネットワーク設定の有効化

バージョン 0.19 以降、iwd は内蔵の DHCP クライアントまたは静的な設定を使用して、IPアドレスの割り当てとルートの設定を行うことができます。これは、スタンドアロン DHCP クライアントの良い代替手段です。

iwd のネットワーク設定機能を有効にするには、//etc/iwd/main.conf を作成・編集し、以下のセクションを追加します:

/etc/iwd/main.conf
[General]
EnableNetworkConfiguration=true

また、RoutePriorityOffset でルートメトリックを設定する機能もあります:

/etc/iwd/main.conf
[Network]
RoutePriorityOffset=300

IPv6 support

バージョン 1.10 以降、iwd は IPv6 をサポートしていますが、デフォルトでは無効になっています。IPv6 を有効にするには、設定ファイルに以下を追加します:

/etc/iwd/main.conf
[Network]
EnableIPv6=true

この設定は、DHCPv6 または 静的 IPv6 設定のどちらを使用する場合でも必要です。ネットワーク毎に設定することもできます。

ネットワーク構成での静的 IP アドレスの設定

次のセクションを /var/lib/iwd/network.type ファイルに追加します。例えば:

/var/lib/iwd/spaceship.psk
[IPv4]
Address=192.168.1.10
Netmask=255.255.255.0
Gateway=192.168.1.1
Broadcast=192.168.1.255
DNS=192.168.1.1

DNS マネージャーの選択

現在、iwd は systemd-resolvedresolvconf の二つの DNS マネージャーをサポートしています。

systemd-resolved の場合、次のセクションを /etc/iwd/main.conf に追加します:

/etc/iwd/main.conf
[Network]
NameResolvingService=systemd

resolvconf の場合:

/etc/iwd/main.conf
[Network]
NameResolvingService=resolvconf

すべてのユーザーにステータス情報の読み取りを許可する

すべてのユーザーにステータス情報の読み取りを許可するが、設定の変更は許可しない場合は、次の D-Bus 設定ファイルを作成できます。

/etc/dbus-1/system.d/iwd-allow-read.conf
<!-- Allow any user to read iwd status information. Overrides some part
     of /usr/share/dbus-1/system.d/iwd-dbus.conf. -->

<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
 "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>

  <policy context="default">
    <deny send_destination="net.connman.iwd"/>
    <allow send_destination="net.connman.iwd" send_interface="org.freedesktop.DBus.Properties" send_member="GetAll" />
    <allow send_destination="net.connman.iwd" send_interface="org.freedesktop.DBus.Properties" send_member="Get" />
    <allow send_destination="net.connman.iwd" send_interface="org.freedesktop.DBus.ObjectManager" send_member="GetManagedObjects" />
    <allow send_destination="net.connman.iwd" send_interface="net.connman.iwd.Device" send_member="RegisterSignalLevelAgent" />
    <allow send_destination="net.connman.iwd" send_interface="net.connman.iwd.Device" send_member="UnregisterSignalLevelAgent" />
  </policy>

</busconfig>

暗号化されたネットワークプロファイル

デフォルトでは、iwd はネットワーク資格情報を暗号化せずにシステムに保存します。iwd バージョン 1.25 以降、iwd は、systemd を使用するシステム向けに 暗号化プロファイル を作成するための実験的なサポートを提供します。

まず、暗号化された認証情報を作成します。次の例では、systemd-creds を使用し、暗号化されたプロファイルの作成に使用されるシステムの Trusted Platform Module にバインドされる iwd-secret という暗号化された資格情報を作成します:

# systemd-ask-password -n | systemd-creds --tpm2-device=auto -T --name=iwd-secret encrypt - /etc/credstore.encrypted/iwd-secret.cred

次に、iwd サービスの ドロップインファイル を作成して、LoadEncryptedCredential オプションを追加します。

/etc/systemd/system/iwd.service.d/use-creds.conf
[Service]
LoadEncryptedCredential=iwd-secret:/etc/credstore.encrypted/iwd-secret.cred

最後に、名前付き資格情報を値として持つ SystemdEncrypt オプションを iwd 設定ファイルに追加し、systemd マネージャーを リロード して、iwd サービスを 再起動 します。

/etc/iwd/main.conf
[General]
...
SystemdEncrypt=iwd-secret
ノート:
  • 現在システム上にあるプロファイルはすべて自動的に暗号化されます。この時点では他に何も必要ありません。今後のプロファイルは自動的に暗号化されます。
  • 上の例では、暗号化された資格情報は TPM PCR 7 に暗黙的にバインドされています。したがって、セキュアブートの状態が変化すると、そのブートセッションではネットワークに接続できなくなります。

トラブルシューティング

詳細な TLS デバッグ

これは、MSCHAPv2 または TTLS の設定に問題がある場合に役立ちます。 ドロップインスニペット を使用して、次の環境変数を設定できます。

/etc/systemd/system/iwd.service.d/tls-debug.conf
[Service]
Environment=IWD_TLS_DEBUG=TRUE

その後、root で journalctbl -u iwd.service を実行して、iwd ログを確認します。

起動後の iwd.service の再起動

一部のマシンでは、起動後に動作するために iwd.service を再起動する必要があると報告されています。FS#63912thread 251432 を参照してください。これはおそらく、Linux カーネルとサービスの起動が早すぎて、ワイヤレスネットワークカードの電源がオンになる前に、iwd が起動するために発生します。回避策として、ユニットを拡張して、遅延時間を追加します。

[Service]
ExecStartPre=/usr/bin/sleep 2

次に systemd マネージャーの設定をリロードします。

再起動後の接続の問題

エントロピープールが低いと、特に再起動後に顕著な接続の問題が発生する可能性があります。エントロピープールを増やすための提案については、乱数生成 を参照してください。

ワイヤレスデバイスが udev によって名前が変更されない

バージョン 1.0 以降、iwd は無線デバイスの予測可能な名前変更を無効にします。これは以下の systemd ネットワークリンク設定ファイルをインストールすることで、 udev がインターフェースの名前を wlp#s# に変更するのを防ぎます。

/usr/lib/systemd/network/80-iwd.link
[Match]
Type=wlan

[Link]
NamePolicy=keep kernel

その結果、ワイヤレスリンク名 wlan# は起動後も保持されます。これにより、iwd udev インターフェイス名前変更で説明されているように、インターフェイスの名前変更に関する iwdudev 間の競合状態を解決しました。

もし、これが問題になるなら、次のコマンドでマスクしてみてください。

# ln -s /dev/null /etc/systemd/network/80-iwd.link

AP モードで DHCP が使えない

AP モードで iwd に接続する場合、クライアントは DHCP で IP アドレスを受け取れない場合があります。そのため、管理対象のインターフェイス上で、 iwd によるネットワーク設定を有効にする必要があります。

/etc/iwd/main.conf
[General]
EnableNetworkConfiguration=True

上記のファイルが存在しない場合は、作成する必要があります。

iwd のクラッシュにより WiFi が切断され続ける

ジャーナルiwd.service のクラッシュ ([1]) を報告しています。

中心的な問題は、ネットワーク接続を管理するために複数の競合するサービスがあることです。この問題を解決するには、それらを同時に 有効 にしていないことを確認してください。

Error loading client private key

キーファイルをロードするには、iwd には pkcs8_key_parser カーネルモジュール が必要です。起動時に /usr/lib/modules-load.d/pkcs8.conf を使用して systemd-modules-load.service(8) によってロードされますが、iwd がインストールされたばかりの場合は当てはまりません。

WPA エンタープライズネットワークに接続しようとしたときに、Error loading client private key /path/to/key などのメッセージが ジャーナル に表示される場合は、モジュールを手動でロードします:

# modprobe pkcs8_key_parser

iwd がローミングを続ける

接続が悪すぎる場合、iwd は他の既知の AP にローミングします。

これはシステムログに wlan0: deauthenticating from xx:xx:xx:xx:xx:xx by local Choice (Reason: 3=DEAUTH_LEAVING) として表示されます。

接続信号の強度を確認するには、

iwctl station wlan0 show | grep RSSI

しきい値を大きくして、接続を悪化させることができます。デフォルトの RoamThreshold は -70、RoamThreshold5G は -76 です。

/etc/iwd/main.conf
[General]
RoamThreshold=-75
RoamThreshold5G=-80

参照

翻訳ステータス: このページは en:iwd の翻訳バージョンです。最後の翻訳日は 2023-12-07 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。