diff --git a/archinstall/default_profiles/desktop.py b/archinstall/default_profiles/desktop.py index 9bd65b444b..ab582186e1 100644 --- a/archinstall/default_profiles/desktop.py +++ b/archinstall/default_profiles/desktop.py @@ -32,7 +32,6 @@ def packages(self) -> list[str]: 'wget', 'iwd', 'wireless_tools', - 'wpa_supplicant', 'smartmontools', 'xdg-utils', ] diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index 36a15df686..88cd89365f 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -768,6 +768,14 @@ def post_install_enable_networkd_resolved(*args: str, **kwargs: str) -> None: return True + def configure_nm_iwd(self) -> None: + # Create NetworkManager config directory and write iwd backend conf + nm_conf_dir = self.target / 'etc/NetworkManager/conf.d' + nm_conf_dir.mkdir(parents=True, exist_ok=True) + + iwd_backend_conf = nm_conf_dir / 'wifi_backend.conf' + iwd_backend_conf.write_text('[device]\nwifi.backend=iwd\n') + def mkinitcpio(self, flags: list[str]) -> bool: for plugin in plugins.values(): if hasattr(plugin, 'on_mkinitcpio'): diff --git a/archinstall/lib/interactions/network_menu.py b/archinstall/lib/interactions/network_menu.py index 14071ef2d2..7ab2a1f3cd 100644 --- a/archinstall/lib/interactions/network_menu.py +++ b/archinstall/lib/interactions/network_menu.py @@ -212,6 +212,8 @@ def ask_to_configure_network(preset: NetworkConfiguration | None) -> NetworkConf return NetworkConfiguration(NicType.ISO) case NicType.NM: return NetworkConfiguration(NicType.NM) + case NicType.NM_IWD: + return NetworkConfiguration(NicType.NM_IWD) case NicType.MANUAL: preset_nics = preset.nics if preset else [] nics = ManualNetworkConfig(tr('Configure interfaces'), preset_nics).run() diff --git a/archinstall/lib/models/network.py b/archinstall/lib/models/network.py index 88f52fd6b9..69acc06812 100644 --- a/archinstall/lib/models/network.py +++ b/archinstall/lib/models/network.py @@ -17,6 +17,7 @@ class NicType(Enum): ISO = 'iso' NM = 'nm' + NM_IWD = 'nm_iwd' MANUAL = 'manual' def display_msg(self) -> str: @@ -24,7 +25,9 @@ def display_msg(self) -> str: case NicType.ISO: return tr('Copy ISO network configuration to installation') case NicType.NM: - return tr('Use NetworkManager (necessary to configure internet graphically in GNOME and KDE Plasma)') + return tr('Use Network Manager (default backend)') + case NicType.NM_IWD: + return tr('Use Network Manager (iwd backend)') case NicType.MANUAL: return tr('Manual configuration') @@ -147,16 +150,29 @@ def install_network_config( installation.copy_iso_network_config( enable_services=True, # Sources the ISO network configuration to the install medium. ) - case NicType.NM: - installation.add_additional_packages(['networkmanager']) + case NicType.NM | NicType.NM_IWD: + # Install NetworkManager package for both cases + packages = ['networkmanager'] + # Defautl back-end only for non-iwd + if self.type == NicType.NM: + packages.append('wpa_supplicant') + + installation.add_additional_packages(packages) + + # Desktop profile -> Always add applet if profile_config and profile_config.profile: if profile_config.profile.is_desktop_profile(): - installation.add_additional_packages(['network-manager-applet']) + installation.add_additional_packages('network-manager-applet') + installation.enable_service('NetworkManager.service') + if self.type == NicType.NM_IWD: + # NM_IWD special handling + installation.configure_nm_iwd() + installation.disable_service('iwd.service') + case NicType.MANUAL: for nic in self.nics: installation.configure_nic(nic) - installation.enable_service('systemd-networkd') installation.enable_service('systemd-resolved')