Ubuntu 20.04 で iwd を使って無線ネットワークを管理する
最近 Canonical の公式フォーラムに投稿が出て、テスターを募集していた。iwd を使って、本来の wpa_supplicant の代わりに無線ネットワークを管理できるか試してみてほしい、という内容だ。

iwd は Intel がカーネルベースで出している無線ネットワーク管理で、利点が多い。ほとんどが性能重視で速い。なにせカーネル層のものだからね。Canonical の投稿に従えば、自分でもテストに参加して効果を確認できる:
まずは iwd 本体をインストールする:
sudo apt install iwd
次に NetworkManager の設定ファイルを編集して、バックエンドを iwd に差し替える。ファイルを開くと空なので、そのまま新しい内容を書き足せばいい。
sudo gedit /etc/NetworkManager/conf.d/iwd.conf
追加:
[device]
wifi.backend=iwd
あとは元のネットワーク管理である wpa_supplicant をマスクして、PC を再起動するだけ。
sudo systemctl mask wpa_supplicant
sudo reboot
再起動が終わればテストに参加できる。これで無線ネットワーク管理は iwd をバックエンドとして使うようになった。まあ、意識高い Archer 諸兄はとっくにやってるんだろうけど、遅れてて発言権もない Ubuntu + GNOME Shell ユーザーも一応おこぼれに預かれるってわけだ。
とはいえ、普通にいくつか問題にぶつかるので、以下に個別に書いておく:
再起動後に Wi-Fi ネットワークが空で、Wi-Fi 信号を一切検索できない
これは Canonical がテスト用ドキュメントで明確に説明している状況だ。向こうは「起動のたびに一定の確率で iwd サービスが起動しないことがある」と言っているが、全然「一定の確率」じゃない。完全に「毎回」だ。Canonical いわく、解決策は iwd サービスを再起動するだけでいいらしいが……
毎回起動のたびに再起動なんてやってられるか!
ネットで調べてみると、これも古くからある問題らしい:
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/101
おおよその原因は、NetworkManager が起動しても iwd を一緒に動かさないこと。両者の結び付きがそれほど強くない。このスレッドでは一年近く議論されても結論が出ておらず、最終的な解決策は iwd サービスを自分で動かすことだった。
sudo systemctl enable iwd.service
自分の環境では問題ない。もちろん、他に影響が出るかどうかは知らんけど。
iwd のバージョンが古すぎる。最新はもう 1.8 だ
iwd の依存はどうやらかなり緩いので、Ubuntu 20.10 のリポジトリから新しい版を引っ張ってきてインストールすればいい。
https://launchpad.net/ubuntu/+source/iwd
iwd を有効にしたら Wi-Fi に再接続され、名前の後ろに「1」が付くようになった
これは正常。1 が付いているものを削除して再接続すればいい。
iwd を無効にして元の wpa_supplicant に戻すには?
sudo rm /etc/NetworkManager/conf.d/iwd.conf
sudo apt remove iwd
sudo systemctl unmask wpa_supplicant
sudo reboot
Ubuntu ユーザーでフィードバックがあるなら、Canonical のスレッドに返信してほしい:
https://discourse.ubuntu.com/t/call-for-testing-improved-wifi-via-iwd/
コメントは中国語の本家サイトで受け付けています。このミラーは閲覧専用です。