X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/waydroid.git/blobdiff_plain/e9d3d01bef8f7021667fe3e4b3fb3c518f3e8b10..HEAD:/tools/actions/session_manager.py diff --git a/tools/actions/session_manager.py b/tools/actions/session_manager.py index 2421256..e02665e 100644 --- a/tools/actions/session_manager.py +++ b/tools/actions/session_manager.py @@ -2,10 +2,8 @@ # SPDX-License-Identifier: GPL-3.0-or-later import logging import os -import time import signal import sys -import shutil import tools.config import tools.helpers.ipc from tools import services @@ -26,11 +24,20 @@ class DbusSessionManager(dbus.service.Object): 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): +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: @@ -72,6 +79,8 @@ def start(args, unlocked_cb=None): dpi = "0" session["lcd_density"] = dpi + session["background_start"] = "true" if background else "false" + mainloop = GLib.MainLoop() def sigint_handler(data): @@ -81,12 +90,14 @@ def start(args, unlocked_cb=None): def sigusr_handler(data): do_stop(args, mainloop) + GLib.unix_signal_add(GLib.PRIORITY_HIGH, signal.SIGHUP, sigint_handler, None) GLib.unix_signal_add(GLib.PRIORITY_HIGH, signal.SIGINT, sigint_handler, None) GLib.unix_signal_add(GLib.PRIORITY_HIGH, signal.SIGTERM, sigint_handler, None) GLib.unix_signal_add(GLib.PRIORITY_HIGH, signal.SIGUSR1, sigusr_handler, None) try: tools.helpers.ipc.DBusContainerService().Start(session) except dbus.DBusException as e: + logging.debug(e) if e.get_dbus_name().startswith("org.freedesktop.DBus.Python"): logging.error(e.get_dbus_message().splitlines()[-1]) else: