X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/waydroid.git/blobdiff_plain/ff4cf1c83f09e639504209dec68855cdf3c69bce..c49dfd272d994b1cdaa14107fee66be84b80c06b:/tools/actions/session_manager.py diff --git a/tools/actions/session_manager.py b/tools/actions/session_manager.py index cfcd267..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) @@ -69,11 +86,14 @@ def start(args, unlocked_cb=None): GLib.unix_signal_add(GLib.PRIORITY_HIGH, signal.SIGUSR1, sigusr_handler, None) try: tools.helpers.ipc.DBusContainerService().Start(session) - except dbus.DBusException: - logging.error("WayDroid container is not listening") + 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: + logging.error("WayDroid container is not listening") sys.exit(0) - services.user_manager.start(args, session, unlocked_cb) services.clipboard_manager.start(args) service(args, mainloop) @@ -87,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