diff --git a/src/jarabe/model/session.py b/src/jarabe/model/session.py
index b6e3a59..b3e3964 100644
a
|
b
|
import gtk |
18 | 18 | import dbus |
19 | 19 | import os |
20 | 20 | import signal |
| 21 | import subprocess |
21 | 22 | import sys |
22 | 23 | |
23 | 24 | from sugar import session |
… |
… |
class SessionManager(session.SessionManager): |
46 | 47 | self._logout_mode = self.MODE_REBOOT |
47 | 48 | self.initiate_shutdown() |
48 | 49 | |
| 50 | _shutdownProgramMap = {MODE_SHUTDOWN: 'poweroff', MODE_REBOOT: 'reboot'} |
| 51 | def lowlevel_shutdown(self, mode) : |
| 52 | """ |
| 53 | Will cause the init system to do a shutdown or reboot (according to <mode>). |
| 54 | HAL is tried first, sudo poweroff / reboot second. |
| 55 | """ |
| 56 | assert (mode in [self.MODE_SHUTDOWN, self.MODE_REBOOT]) |
| 57 | |
| 58 | try : |
| 59 | bus = dbus.SystemBus() |
| 60 | proxy = bus.get_object('org.freedesktop.Hal', |
| 61 | '/org/freedesktop/Hal/devices/computer') |
| 62 | pm = dbus.Interface(proxy, \ |
| 63 | 'org.freedesktop.Hal.Device.SystemPowerManagement') |
| 64 | |
| 65 | if mode == self.MODE_SHUTDOWN: |
| 66 | pm.Shutdown() |
| 67 | elif mode == self.MODE_REBOOT: |
| 68 | pm.Reboot() |
| 69 | |
| 70 | except dbus.exceptions.DBusException : |
| 71 | # try old-school System V tools as fallback |
| 72 | subprocess.check_call(['sudo', self._shutdownProgramMap[mode]]) |
| 73 | |
49 | 74 | def shutdown_completed(self): |
50 | 75 | session.SessionManager.shutdown_completed(self) |
51 | 76 | |
52 | | bus = dbus.SystemBus() |
53 | | proxy = bus.get_object('org.freedesktop.Hal', |
54 | | '/org/freedesktop/Hal/devices/computer') |
55 | | pm = dbus.Interface(proxy, \ |
56 | | 'org.freedesktop.Hal.Device.SystemPowerManagement') |
57 | | |
58 | 77 | if env.is_emulator(): |
| 78 | # never returns |
59 | 79 | self._close_emulator() |
60 | | else: |
61 | | if self._logout_mode == self.MODE_SHUTDOWN: |
62 | | pm.Shutdown() |
63 | | elif self._logout_mode == self.MODE_REBOOT: |
64 | | pm.Reboot() |
65 | 80 | |
66 | | gtk.main_quit() |
| 81 | if (self._logout_mode != self.MODE_LOGOUT) : |
| 82 | self.lowlevel_shutdown(self._logout_mode) |
| 83 | |
| 84 | gtk.main_quit() |
67 | 85 | |
68 | 86 | def _close_emulator(self): |
69 | 87 | gtk.main_quit() |