Ticket #615: sugar-shutdown-no-hal-fallback.patch

File sugar-shutdown-no-hal-fallback.patch, 2.3 KB (added by sascha_silbe, 15 years ago)

Fallback to poweroff / reboot, fix logout

  • src/jarabe/model/session.py

    diff --git a/src/jarabe/model/session.py b/src/jarabe/model/session.py
    index b6e3a59..b3e3964 100644
    a b import gtk 
    1818import dbus
    1919import os
    2020import signal
     21import subprocess
    2122import sys
    2223
    2324from sugar import session
    class SessionManager(session.SessionManager): 
    4647        self._logout_mode = self.MODE_REBOOT
    4748        self.initiate_shutdown()
    4849
     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
    4974    def shutdown_completed(self):
    5075        session.SessionManager.shutdown_completed(self)
    5176
    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 
    5877        if env.is_emulator():
     78            # never returns
    5979            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()
    6580
    66             gtk.main_quit()
     81        if (self._logout_mode != self.MODE_LOGOUT) :
     82            self.lowlevel_shutdown(self._logout_mode)
     83
     84        gtk.main_quit()
    6785
    6886    def _close_emulator(self):
    6987        gtk.main_quit()