+ @dbus.service.method("id.waydro.SessionManager", in_signature='', out_signature='')
+ def Stop(self):
+ do_stop(self.args, self.looper)
+ stop_container(quit_session=False)
+
+def handle_disconnect(args, looper):
+ do_stop(args, looper)
+ stop_container(quit_session=False)
+
+def service(args, looper):
+ bus = dbus.SessionBus()
+ bus.set_exit_on_disconnect(False)
+ bus.add_signal_receiver(lambda: handle_disconnect(args, looper),
+ signal_name='Disconnected',
+ dbus_interface='org.freedesktop.DBus.Local')
+ dbus_obj = DbusSessionManager(looper, dbus.SessionBus(), '/SessionManager', args)
+ looper.run()
+
+def start(args, unlocked_cb=None, background=True):
+ try:
+ name = dbus.service.BusName("id.waydro.Session", dbus.SessionBus(), do_not_queue=True)
+ except dbus.exceptions.NameExistsException:
+ logging.error("Session is already running")
+ if unlocked_cb:
+ unlocked_cb()
+ return
+
+ session = copy.copy(tools.config.session_defaults)