X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/waydroid.git/blobdiff_plain/eabe5d6c3b31360a33621284f2dcc98e9d03b81d..refs/heads/electrikjesus-patch-1:/tools/actions/session_manager.py diff --git a/tools/actions/session_manager.py b/tools/actions/session_manager.py index abb4f35..d2daf7a 100644 --- a/tools/actions/session_manager.py +++ b/tools/actions/session_manager.py @@ -24,13 +24,13 @@ class DbusSessionManager(dbus.service.Object): @dbus.service.method("id.waydro.SessionManager", in_signature='', out_signature='') def Stop(self): do_stop(self.args, self.looper) - stop_container() + stop_container(quit_session=False) def service(args, looper): 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: @@ -39,13 +39,30 @@ def start(args, unlocked_cb=None): unlocked_cb() return - session = copy.copy(tools.config.session_defaults); + session = copy.copy(tools.config.session_defaults) + + # TODO: also support WAYLAND_SOCKET? wayland_display = session["wayland_display"] if wayland_display == "None" or not wayland_display: logging.warning('WAYLAND_DISPLAY is not set, defaulting to "wayland-0"') + wayland_display = session["wayland_display"] = "wayland-0" + + if os.path.isabs(wayland_display): + wayland_socket_path = wayland_display + else: + xdg_runtime_dir = session["xdg_runtime_dir"] + if xdg_runtime_dir == "None" or not xdg_runtime_dir: + logging.error(f"XDG_RUNTIME_DIR is not set; please don't start a Waydroid session with 'sudo'!") + sys.exit(1) + wayland_socket_path = os.path.join(xdg_runtime_dir, wayland_display) + if not os.path.exists(wayland_socket_path): + logging.error(f"Wayland socket '{wayland_socket_path}' doesn't exist; are you running a Wayland compositor?") + sys.exit(1) + waydroid_data = session["waydroid_data"] if not os.path.isdir(waydroid_data): os.makedirs(waydroid_data) + dpi = tools.helpers.props.host_get(args, "ro.sf.lcd_density") if dpi == "": dpi = os.getenv("GRID_UNIT_PX") @@ -55,11 +72,13 @@ 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): do_stop(args, mainloop) - stop_container() + stop_container(quit_session=False) def sigusr_handler(data): do_stop(args, mainloop) @@ -70,6 +89,7 @@ def start(args, unlocked_cb=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: @@ -89,10 +109,10 @@ def stop(args): try: tools.helpers.ipc.DBusSessionService().Stop() except dbus.DBusException: - stop_container() + stop_container(quit_session=True) -def stop_container(): +def stop_container(quit_session): try: - tools.helpers.ipc.DBusContainerService().Stop() + tools.helpers.ipc.DBusContainerService().Stop(quit_session) except dbus.DBusException: pass