Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Schampijer <simon@schampijer.de>2012-03-02 08:38:17 (GMT)
committer Simon Schampijer <simon@schampijer.de>2012-03-14 17:28:05 (GMT)
commit99bb52c5dbea01a3ffc9b8821ec12af2536f76ca (patch)
tree1d19000b07c7c2f9281b2eb8937369895e0d8827
parent55a4df2fb8476d295f90767d42f54eca81b37cd9 (diff)
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 <simon@laptop.org> Reviewed-by: Manuel QuiƱones <manuq@laptop.org>
-rw-r--r--src/jarabe/model/session.py51
1 files changed, 36 insertions, 15 deletions
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()