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

Reply via email to