@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)
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")
def sigint_handler(data):
do_stop(args, mainloop)
- stop_container()
+ stop_container(quit_session=False)
def sigusr_handler(data):
do_stop(args, mainloop)
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)
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