diff --git a/src/revpi_middleware/dbus_middleware1/system_config/interface_config.py b/src/revpi_middleware/dbus_middleware1/system_config/interface_config.py index 03aaca2..76c7933 100644 --- a/src/revpi_middleware/dbus_middleware1/system_config/interface_config.py +++ b/src/revpi_middleware/dbus_middleware1/system_config/interface_config.py @@ -5,6 +5,7 @@ from collections import namedtuple from enum import Enum from logging import getLogger +from os import X_OK, access from pydbus import SystemBus @@ -70,6 +71,28 @@ class InterfaceRevpiConfig(DbusInterface): return list(AVAILABLE_FEATURES.keys()) +def configure_gui(action: ConfigActions): + gui_available = access("/usr/bin/startx", X_OK) + + if action is ConfigActions.AVAILABLE: + return gui_available + + bus = SystemBus() + systemd_manager = bus.get(".systemd1") + + if action is ConfigActions.ENABLE: + systemd_manager.SetDefaultTarget("graphical.target", True) + + elif action is ConfigActions.DISABLE: + systemd_manager.SetDefaultTarget("multi-user.target", True) + + elif action is ConfigActions.STATUS: + return systemd_manager.GetDefaultTarget() == "graphical.target" + + else: + raise ValueError(f"action {action} not supported") + + def get_feature(feature: str) -> FeatureFunction: if feature not in AVAILABLE_FEATURES: raise ValueError(f"feature {feature} does not exist") @@ -117,7 +140,7 @@ def simple_systemd(action: ConfigActions, unit: str): AVAILABLE_FEATURES = { - "gui": False, + "gui": FeatureFunction(configure_gui, []), "revpi-con-can": False, "var-log.mount": False, "dphys-swapfile": False,