2 Commits

Author SHA1 Message Date
41d9b13e71 fix(dbus): Update systemd interface and path handling
Revised DBus interactions to explicitly use `org.freedesktop.systemd1`
interface and path. This ensures that the correct interfaces are used
and bypasses ".systemd1" magic from the library `pydbus`.
2025-04-22 10:59:59 +02:00
463a61a001 fix(dbus): Update DBus policy file path and interface name
Change the comment to reflect the new DBus policy file location. Adjust
the interface name to use `PiControl` instead of `picontrol` for
consistency.
2025-04-22 10:37:36 +02:00
2 changed files with 14 additions and 6 deletions

View File

@@ -1,4 +1,4 @@
<!-- /etc/dbus-1/system.d/revpi-middleware.conf --> <!-- /usr/share/dbus-1/system.d/com.revolutionpi.middleware1.conf -->
<busconfig> <busconfig>
<!-- Allow full access to root as the bus owner --> <!-- Allow full access to root as the bus owner -->
<policy user="root"> <policy user="root">
@@ -12,7 +12,7 @@
<allow send_destination="com.revolutionpi.middleware1" <allow send_destination="com.revolutionpi.middleware1"
send_interface="org.freedesktop.DBus.Introspectable"/> send_interface="org.freedesktop.DBus.Introspectable"/>
<allow send_destination="com.revolutionpi.middleware1" <allow send_destination="com.revolutionpi.middleware1"
send_interface="com.revolutionpi.middleware1.picontrol"/> send_interface="com.revolutionpi.middleware1.PiControl"/>
</policy> </policy>
<!-- Standard-Policy --> <!-- Standard-Policy -->

View File

@@ -324,7 +324,11 @@ def configure_gui(action: ConfigActions):
return gui_available return gui_available
bus = SystemBus() bus = SystemBus()
systemd_manager = bus.get(".systemd1") systemd = bus.get(
"org.freedesktop.systemd1",
"/org/freedesktop/systemd1",
)
systemd_manager = systemd["org.freedesktop.systemd1.Manager"]
if action is ConfigActions.ENABLE: if action is ConfigActions.ENABLE:
systemd_manager.SetDefaultTarget("graphical.target", True) systemd_manager.SetDefaultTarget("graphical.target", True)
@@ -384,7 +388,11 @@ def get_rfkill_index(device_class_path: str) -> Optional[int]:
def simple_systemd(action: ConfigActions, unit: str): def simple_systemd(action: ConfigActions, unit: str):
bus = SystemBus() bus = SystemBus()
systemd_manager = bus.get(".systemd1") systemd = bus.get(
"org.freedesktop.systemd1",
"/org/freedesktop/systemd1",
)
systemd_manager = systemd["org.freedesktop.systemd1.Manager"]
if action is ConfigActions.ENABLE: if action is ConfigActions.ENABLE:
systemd_manager.UnmaskUnitFiles([unit], False) systemd_manager.UnmaskUnitFiles([unit], False)
@@ -398,7 +406,7 @@ def simple_systemd(action: ConfigActions, unit: str):
elif action is ConfigActions.STATUS: elif action is ConfigActions.STATUS:
try: try:
unit_path = systemd_manager.LoadUnit(unit) unit_path = systemd_manager.LoadUnit(unit)
properties = bus.get(".systemd1", unit_path) properties = bus.get("org.freedesktop.systemd1", unit_path)
except Exception: except Exception:
log.warning(f"could not get systemd unit {unit}") log.warning(f"could not get systemd unit {unit}")
return False return False
@@ -408,7 +416,7 @@ def simple_systemd(action: ConfigActions, unit: str):
elif action is ConfigActions.AVAILABLE: elif action is ConfigActions.AVAILABLE:
try: try:
unit_path = systemd_manager.LoadUnit(unit) unit_path = systemd_manager.LoadUnit(unit)
properties = bus.get(".systemd1", unit_path) properties = bus.get("org.freedesktop.systemd1", unit_path)
except Exception: except Exception:
log.warning(f"could not get systemd unit {unit}") log.warning(f"could not get systemd unit {unit}")
return False return False