From 99bb52c5dbea01a3ffc9b8821ec12af2536f76ca Mon Sep 17 00:00:00 2001 From: Simon Schampijer Date: Fri, 02 Mar 2012 08:38:17 +0000 Subject: If available use systemd to reboot/shutdown the system ConsoleKit is being obsoleted by systemd [1]. Accordingly use the systemd D-Bus API now to Reboot and PowerOff the system. We keep the fallback for ConsoleKit around. This adds a dependency on systemd. [1] http://fedoraproject.org/wiki/Features/ckremoval Signed-off-by: Simon Schampijer Reviewed-by: Manuel QuiƱones --- diff --git a/src/jarabe/model/session.py b/src/jarabe/model/session.py index 9b277ff..4e66bdc 100644 --- a/src/jarabe/model/session.py +++ b/src/jarabe/model/session.py @@ -28,6 +28,10 @@ from sugar import env _session_manager = None +def have_systemd(): + return os.access("/sys/fs/cgroup/systemd", 0) >= 0 + + class SessionManager(session.SessionManager): MODE_LOGOUT = 0 MODE_SHUTDOWN = 1 @@ -53,21 +57,38 @@ class SessionManager(session.SessionManager): if env.is_emulator(): self._close_emulator() elif self._logout_mode != self.MODE_LOGOUT: - try: - bus = dbus.SystemBus() - proxy = bus.get_object('org.freedesktop.ConsoleKit', - '/org/freedesktop/ConsoleKit/Manager') - pm = dbus.Interface(proxy, - 'org.freedesktop.ConsoleKit.Manager') - - if self._logout_mode == self.MODE_SHUTDOWN: - pm.Stop() - elif self._logout_mode == self.MODE_REBOOT: - pm.Restart() - except: - logging.exception('Can not stop sugar') - self.session.cancel_shutdown() - return + bus = dbus.SystemBus() + if have_systemd(): + try: + proxy = bus.get_object('org.freedesktop.login1', + '/org/freedesktop/login1') + pm = dbus.Interface(proxy, + 'org.freedesktop.login1.Manager') + + if self._logout_mode == self.MODE_SHUTDOWN: + pm.PowerOff(False) + elif self._logout_mode == self.MODE_REBOOT: + pm.Reboot(True) + except: + logging.exception('Can not stop sugar') + self.session.cancel_shutdown() + return + else: + CONSOLEKIT_DBUS_PATH = '/org/freedesktop/ConsoleKit/Manager' + try: + proxy = bus.get_object('org.freedesktop.ConsoleKit', + CONSOLEKIT_DBUS_PATH) + pm = dbus.Interface(proxy, + 'org.freedesktop.ConsoleKit.Manager') + + if self._logout_mode == self.MODE_SHUTDOWN: + pm.Stop() + elif self._logout_mode == self.MODE_REBOOT: + pm.Restart() + except: + logging.exception('Can not stop sugar') + self.session.cancel_shutdown() + return session.SessionManager.shutdown_completed(self) gtk.main_quit() -- cgit v0.9.1