Vinzenz Feenstra has uploaded a new change for review. Change subject: Implementation of logind based session locking ......................................................................
Implementation of logind based session locking Support screen lock for logind based systems, since ConsoleKit is no longer developed in the long run this will be the way to go. Change-Id: Iafc4b88d9c508647e1d09407556359fbefbba34c Signed-off-by: Vinzenz Feenstra <[email protected]> --- M ovirt-guest-agent/LockActiveSession.py 1 file changed, 64 insertions(+), 4 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-guest-agent refs/changes/28/24628/1 diff --git a/ovirt-guest-agent/LockActiveSession.py b/ovirt-guest-agent/LockActiveSession.py index aed5aa0..af3b41b 100755 --- a/ovirt-guest-agent/LockActiveSession.py +++ b/ovirt-guest-agent/LockActiveSession.py @@ -20,10 +20,37 @@ import os -def GetActiveSession(): +class SessionWrapper(object): + def __init__(self, bus, path, session): + self._bus = bus + self._path = path + self._session = session + + def _getProperty(self, name): + obj = self._bus.get_object('org.freedesktop.login1', self._path) + iface = 'org.freedesktop.DBus.Properties' + props = dbus.Interface(obj, dbus_interface=iface) + return props.Get('org.freedesktop.login1.Session', name) + + def GetId(self): + return self._getProperty('Id') + + def IsActive(self): + return self._getProperty('Active') + + def GetX11Display(self): + return self._getProperty('Display') + + def GetUnixUser(self): + return self._getProperty('User')[0] + + def Lock(self): + return self._session.Lock() + + +def GetSessionConsoleKit(bus): session = None try: - bus = dbus.SystemBus() manager = dbus.Interface( bus.get_object( 'org.freedesktop.ConsoleKit', @@ -37,9 +64,40 @@ dbus_interface='org.freedesktop.ConsoleKit.Session') if s.IsActive(): session = s + break except: - logging.exception("Error retrieving active session (ignore if running " - "on a system without ConsoleKit installed).") + pass + return session + + +def GetSessionLoginD(bus): + session = None + try: + manager = dbus.Interface( + bus.get_object( + 'org.freedesktop.login1', + '/org/freedesktop/login1'), + dbus_interface='org.freedesktop.login1.Manager') + sessions = manager.ListSessions() + for session_struct in sessions: + session_path = session_struct[4] + s = dbus.Interface(bus.get_object('org.freedesktop.login1', + session_path), + dbus_interface='org.freedesktop.login1.Session') + session = SessionWrapper(bus, session_path, s) + if session.IsActive(): + break + session = None + except: + pass + return session + + +def GetActiveSession(): + bus = dbus.SystemBus() + session = GetSessionConsoleKit(bus) + if not session: + session = GetSessionLoginD(bus) return session @@ -70,6 +128,7 @@ screensaver.Lock() exitcode = 0 else: + logging.info("KDE standard interface seems not to be supported") exitcode = 1 os._exit(exitcode) @@ -78,6 +137,7 @@ # If our first try failed, try the GNOME "standard" interface. if result[1] != 0: + logging.info("Attempting session lock via ConsoleKit/LoginD") session.Lock() -- To view, visit http://gerrit.ovirt.org/24628 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iafc4b88d9c508647e1d09407556359fbefbba34c Gerrit-PatchSet: 1 Gerrit-Project: ovirt-guest-agent Gerrit-Branch: master Gerrit-Owner: Vinzenz Feenstra <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
