diff --git a/supervisor/exceptions.py b/supervisor/exceptions.py index 55fb1995a..5168e43f2 100644 --- a/supervisor/exceptions.py +++ b/supervisor/exceptions.py @@ -225,6 +225,10 @@ class DBusParseError(DBusError): """DBus parse error.""" +class DBusProgramError(DBusError): + """DBus application error.""" + + # util/apparmor diff --git a/supervisor/host/network.py b/supervisor/host/network.py index ab88be0a3..4b31cfa4c 100644 --- a/supervisor/host/network.py +++ b/supervisor/host/network.py @@ -22,6 +22,7 @@ from ..dbus.payloads.generate import interface_update_payload from ..exceptions import ( DBusError, DBusNotConnectedError, + DBusProgramError, HostNetworkError, HostNetworkNotFound, HostNotSupportedError, @@ -140,9 +141,19 @@ class NetworkManager(CoreSysAttributes): _LOGGER.error("Can only scan with wireless card - %s", interface.name) raise HostNotSupportedError() - await inet.wireless.request_scan() - await asyncio.sleep(5) + # Request Scan + try: + await inet.wireless.request_scan() + except DBusProgramError as err: + if ( + "GDBus.Error:org.freedesktop.NetworkManager.Device.NotAllowed" + not in str(err) + ): + raise HostNetworkError() from err + else: + await asyncio.sleep(5) + # Process AP accesspoints: List[AccessPoint] = [] for ap_object in (await inet.wireless.get_all_accesspoints())[0]: accesspoint = NetworkWirelessAP(ap_object) diff --git a/supervisor/utils/gdbus.py b/supervisor/utils/gdbus.py index 6a27fc3e2..c838598a2 100644 --- a/supervisor/utils/gdbus.py +++ b/supervisor/utils/gdbus.py @@ -17,6 +17,7 @@ from ..exceptions import ( DBusInterfaceError, DBusNotConnectedError, DBusParseError, + DBusProgramError, ) _LOGGER: logging.Logger = logging.getLogger(__name__) @@ -250,8 +251,8 @@ class DBus: raise exception() # General - _LOGGER.error("D-Bus return: %s", error.strip()) - raise DBusFatalError() + _LOGGER.debug("D-Bus return: %s", error.strip()) + raise DBusProgramError(error.strip()) def attach_signals(self, filters=None): """Generate a signals wrapper."""