Replacing the wpa_supplicant wifi daemon with iwd

879 views
Skip to first unread message

qtpie

unread,
Mar 3, 2021, 1:10:49 PM3/3/21
to qubes...@googlegroups.com
Hi,

Due to mysterious, unsolvable Wifi issues, I decided to replace the
wpa_supplicant wifi daemon with iwd. iwd itself is excellent and a
definite improvement over wpa_supplicant. I can't find Fedora working on
this though. In the Fedora 33 template, it currently comes down to:

$ dnf remove wpa_supplicant
$ echo -e "[device] \nwifi.backend=iwd" | tee -a
/etc/NetworkManager/NetworkManager.conf
$ systemctl enable iwd.service
$ systemctl start iwd.service
$ systemctl restart NetworkManager

There are just two integration issues remaining that I hope people can
help me with. I am using the standard Qubes Fedora template, and want to
stay as close to it as possible, so I'm not interested in ditching
NetworkManager unless it is unavoidable.

1. /etc/dbus-1/system.d/org.freedesktop.GeoClue2.conf: this is the only
other file in /etc/ that mentions wpa_supplicant. It contains policy to
allow wpa_supplicant to be used for geolocation. Since I don't care for
geolocation, I just removed it (don't comment it out. But if someone
cares to adapt this to iwd, it would be nice.

2. Occasionally, NetworkManager says 'device not ready' under wifi, and
wifi stops working. It is solved temporarily by ``$ systemctl restart
iwd.service && systemctl restart NetworkManager.service`` in sys-net. I
don't get from the log what the exact issue is though.

----------

Resources:
- I used this howto from Josh Stoik as a starter:
https://blobfolio.com/2019/replacing-wpa-supplicant-with-iwd-in-ubuntu-eoan/
- https://wiki.archlinux.org/index.php/Iwd

GeoClue2 policy:

  <policy user="geoclue">
    <!-- Only allow geoclue to own the name on the bus -->
    <allow own="org.freedesktop.GeoClue2"/>

    <!-- Also give geoclue access to wpa_supplicant API -->
    <allow receive_sender="fi.w1.wpa_supplicant1"
           receive_type="signal"/>

    <allow send_destination="fi.w1.wpa_supplicant1"
           send_interface="org.freedesktop.DBus.Properties"
           send_member="Get"/>

    <allow send_destination="fi.w1.wpa_supplicant1"
           send_interface="org.freedesktop.DBus.Properties"
           send_member="GetAll"/>

    <allow send_destination="fi.w1.wpa_supplicant1"
           send_interface="org.freedesktop.DBus.Introspectable"/>

    <allow send_destination="fi.w1.wpa_supplicant1"
           send_interface="fi.w1.wpa_supplicant1.Interface"
           send_type="method_call"
           send_member="Scan"/>
  </policy>


haaber

unread,
Mar 18, 2021, 7:46:09 AM3/18/21
to qtpie, qubes-users, unman
On 3/3/21 5:19 PM, 'qtpie' via qubes-users wrote:
> Due to mysterious, unsolvable Wifi issues, I decided to replace the
> wpa_supplicant wifi daemon with iwd.
-- snip --
> $ dnf remove wpa_supplicant
> $ echo -e "[device] \nwifi.backend=iwd" | tee -a
> /etc/NetworkManager/NetworkManager.conf
> $ systemctl enable iwd.service
> $ systemctl start iwd.service
> $ systemctl restart NetworkManager

interesting. I tried that in my debian-minimal-net but I cannot start
iwd with systemctl. Errors similar to here

https://bbs.archlinux.org/viewtopic.php?id=250220

but the proposed "solution" does not work. The thread suggests

sudo cp /usr/lib/systemd/system/iwd.service /etc/systemd/system/

but that file does simply not exist, so I cannot copy it. So I stopped
that experiment for the moment. Maybe @unman has a suggestion for a
well-working debian-based 'minimal' solution without networkmanager
and/or wpa_applicant ? Best,

qtpie

unread,
Mar 18, 2021, 4:44:53 PM3/18/21
to haaber, qubes-users, unman

On 3/18/21 12:46 PM, haaber wrote:
> On 3/3/21 5:19 PM, 'qtpie' via qubes-users wrote:
>> Due to mysterious, unsolvable Wifi issues, I decided to replace the
>> wpa_supplicant wifi daemon with iwd.
>   -- snip --
>> $ dnf remove wpa_supplicant
>> $ echo -e "[device] \nwifi.backend=iwd" | tee -a
>> /etc/NetworkManager/NetworkManager.conf
>> $ systemctl enable iwd.service
>> $ systemctl start iwd.service
>
> interesting. I tried that in my debian-minimal-net but I cannot start
> iwd with systemctl. Errors similar to here
>
>   https://bbs.archlinux.org/viewtopic.php?id=250220
>
> but the proposed "solution" does not work. The thread suggests
>
>   sudo cp /usr/lib/systemd/system/iwd.service /etc/systemd/system/
>
> but that file does simply not exist, so I cannot copy it. So I stopped
> that experiment for the moment. Maybe @unman has a suggestion for a
> well-working debian-based 'minimal' solution without  networkmanager
> and/or   wpa_applicant ?  Best,
>
>

For those who want to stick to NetworkManager, II found out that the

$ systemctl enable iwd.service
$ systemctl start iwd.service

from my initial post, should not be necessary and can cause conflict.
Because NetworkManager is supposed to handle starting iwd, after iwd is
added to the NetworkManager config file.

That networkmanager does not handle iwd correctly, is a known issue with
NetworkManager. We can only wait for it to get updated with future
Fedora releases I guess.
https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/issues/101

I am now also curious about non-networkmanager alternatives and their
usability though.

Reply all
Reply to author
Forward
0 new messages