ubuntu-release-upgrade: final elaborated fix (d-bus bridge)
This commit is contained in:
parent
73484f4f85
commit
6dd7725ebf
2 changed files with 73 additions and 19 deletions
|
|
@ -1,40 +1,94 @@
|
|||
diff --git a/DistUpgrade/DistUpgradeController.py b/DistUpgrade/DistUpgradeController.py
|
||||
index b7dd0af7..ffc66293 100644
|
||||
index b7dd0af7..dd9d171d 100644
|
||||
--- a/DistUpgrade/DistUpgradeController.py
|
||||
+++ b/DistUpgrade/DistUpgradeController.py
|
||||
@@ -2708,10 +2708,31 @@ class DistUpgradeController(object):
|
||||
@@ -2700,18 +2700,84 @@ class DistUpgradeController(object):
|
||||
|
||||
try:
|
||||
import dbus
|
||||
+ import dbus.bus
|
||||
|
||||
+ # Root D-Bus bridge
|
||||
+ bus_address = None
|
||||
+ try:
|
||||
+ uid_str = os.environ.get('SUDO_UID') or os.environ.get('PKEXEC_UID')
|
||||
+ if uid_str:
|
||||
+ import subprocess
|
||||
+ # Find the PID of mate-session for this user
|
||||
+ pid = subprocess.check_output(["pgrep", "-u", uid_str, "-n", "mate-session"]).decode().strip()
|
||||
+ if pid:
|
||||
+ with open(f"/proc/{pid}/environ", "r") as f:
|
||||
+ for line in f.read().split('\0'):
|
||||
+ if line.startswith("DBUS_SESSION_BUS_ADDRESS="):
|
||||
+ bus_address = line.split("=", 1)[1]
|
||||
+ os.environ["DBUS_SESSION_BUS_ADDRESS"] = bus_address
|
||||
+ logging.debug("D-Bus successfully bridged: " + bus_address)
|
||||
+ break
|
||||
+ except Exception as e:
|
||||
+ logging.debug("Failed to create D-Bus bridge: " + str(e))
|
||||
+
|
||||
+ # Drop root privileges
|
||||
self._setNonRootEUID()
|
||||
|
||||
# The org.freedesktop.ScreenSaver.Inhibit effect lasts only
|
||||
# as long as the dbus connection remains open. Once u-r-u
|
||||
# exits, the connection will be closed and screen inhibition
|
||||
# will be removed.
|
||||
self._session_bus = dbus.SessionBus()
|
||||
- self._session_bus = dbus.SessionBus()
|
||||
- proxy = self._session_bus.get_object('org.freedesktop.ScreenSaver',
|
||||
- '/org/freedesktop/ScreenSaver')
|
||||
- screensaver = dbus.Interface(proxy, dbus_interface='org.freedesktop.ScreenSaver')
|
||||
- screensaver.Inhibit('trisquel-release-upgrader', 'Upgrading Trisquel')
|
||||
+ if bus_address:
|
||||
+ self._session_bus = dbus.bus.BusConnection(bus_address)
|
||||
+ else:
|
||||
+ self._session_bus = dbus.SessionBus()
|
||||
+
|
||||
+ inhibited = False
|
||||
+
|
||||
+ # Attempt 1: Generic Freedesktop
|
||||
+ try:
|
||||
+ # Attempt standar "generic"
|
||||
+ proxy = self._session_bus.get_object('org.freedesktop.ScreenSaver',
|
||||
+ '/org/freedesktop/ScreenSaver')
|
||||
+ screensaver = dbus.Interface(proxy, dbus_interface='org.freedesktop.ScreenSaver')
|
||||
+ screensaver.Inhibit('trisquel-release-upgrader', 'Upgrading System')
|
||||
+ except Exception:
|
||||
+ try:
|
||||
+ # Attempt MATE specific
|
||||
+ proxy_ss = self._session_bus.get_object('org.mate.ScreenSaver',
|
||||
+ '/org/mate/ScreenSaver')
|
||||
+ screensaver_mate = dbus.Interface(proxy_ss, dbus_interface='org.mate.ScreenSaver')
|
||||
+ screensaver_mate.Inhibit('trisquel-release-upgrader', 'Upgrading System')
|
||||
+ screensaver.Inhibit('trisquel-release-upgrader', 'Upgrading System', timeout=2)
|
||||
+ logging.debug('Freedesktop ScreenSaver inhibited')
|
||||
+ inhibited = True
|
||||
+ except Exception as e:
|
||||
+ logging.debug('Freedesktop Inhibit failed: ' + str(e))
|
||||
+
|
||||
+ # DPMS management
|
||||
+ # Attempt 2: MATE ScreenSaver
|
||||
+ try:
|
||||
+ proxy_ss = self._session_bus.get_object('org.mate.ScreenSaver',
|
||||
+ '/org/mate/ScreenSaver')
|
||||
+ screensaver_mate = dbus.Interface(proxy_ss, dbus_interface='org.mate.ScreenSaver')
|
||||
+ screensaver_mate.Inhibit('trisquel-release-upgrader', 'Upgrading System')
|
||||
+ logging.debug('MATE ScreenSaver successfully inhibited')
|
||||
+ inhibited = True
|
||||
+ except Exception as e:
|
||||
+ logging.debug('Failed to inhibit MATE ScreenSaver: ' + str(e))
|
||||
+
|
||||
+ # Attempt 3: SessionManager - MATE, fallback to GNOME namespace
|
||||
+ try:
|
||||
+ try:
|
||||
+ proxy_sm = self._session_bus.get_object('org.mate.SessionManager',
|
||||
+ '/org/mate/SessionManager')
|
||||
+ session_mate = dbus.Interface(proxy_sm, dbus_interface='org.mate.SessionManager')
|
||||
+ session_mate.Inhibit('trisquel-release-upgrader', 0, 'Upgrading System', 8)
|
||||
+ except Exception:
|
||||
+ # Fallback for MATE systems using legacy GNOME namespace
|
||||
+ proxy_sm = self._session_bus.get_object('org.gnome.SessionManager',
|
||||
+ '/org/gnome/SessionManager')
|
||||
+ session_mate = dbus.Interface(proxy_sm, dbus_interface='org.gnome.SessionManager')
|
||||
+ session_mate.Inhibit('trisquel-release-upgrader', 0, 'Upgrading System', 8)
|
||||
+
|
||||
+ logging.debug('MATE Session and Screensaver successfully inhibited')
|
||||
+ except Exception as mate_e:
|
||||
+ logging.debug('Failed to inhibit MATE specifically: ' + str(mate_e))
|
||||
+ raise
|
||||
+ logging.debug('SessionManager DPMS successfully inhibited')
|
||||
+ inhibited = True
|
||||
+ except Exception as e:
|
||||
+ logging.debug('Failed to inhibit SessionManager DPMS: ' + str(e))
|
||||
+
|
||||
+ if not inhibited:
|
||||
+ raise Exception("Neither Freedesktop, nor MATE, nor GNOME namespaces could be inhibited")
|
||||
|
||||
summary = _("Lock screen disabled")
|
||||
message = _("Your lock screen has been "
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
#
|
||||
# Copyright (C) 2025 Luis Guzmán <ark@switnet.org>
|
||||
# Copyright (C) 2026 Luis Guzmán <ark@switnet.org>
|
||||
# Copyright (C) 2008-2024 Ruben Rodriguez <ruben@trisquel.info>
|
||||
# Copyright (C) 2014 Santiago Rodriguez <santi@trisquel.info>
|
||||
# Copyright (C) 2019 Mason Hock <mason@masonhock.com>
|
||||
|
|
@ -25,7 +25,7 @@
|
|||
# Also, don't forget to update the meta-release files at archive and packages.t.i
|
||||
# The "obsoletes" list from ubuntu has been removed
|
||||
|
||||
VERSION=21
|
||||
VERSION=22
|
||||
|
||||
. ./config
|
||||
# Previous upstream release name, update for each release.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue