X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/waydroid.git/blobdiff_plain/eabe5d6c3b31360a33621284f2dcc98e9d03b81d..c49dfd272d994b1cdaa14107fee66be84b80c06b:/tools/actions/session_manager.py diff --git a/tools/actions/session_manager.py b/tools/actions/session_manager.py index abb4f35..6709e14 100644 --- a/tools/actions/session_manager.py +++ b/tools/actions/session_manager.py @@ -24,7 +24,7 @@ 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) @@ -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") @@ -59,7 +76,7 @@ def start(args, unlocked_cb=None): 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 +87,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 +107,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