- xdg_session = os.getenv("XDG_SESSION_TYPE")
- if xdg_session != "wayland":
- logging.warning('XDG Session is not "wayland"')
-
- cfg = tools.config.load_session()
- waydroid_data = cfg["session"]["waydroid_data"]
- #TODO: Drop me
- old_user_waydroid = cfg["session"]["host_user"] + "/waydroid"
- if os.path.isdir(old_user_waydroid):
- if not os.path.isdir(waydroid_data):
- shutil.move(old_user_waydroid, cfg["session"]["xdg_data_home"])
- else:
- os.removedirs(old_user_waydroid)
+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, background=True):
+ try:
+ name = dbus.service.BusName("id.waydro.Session", dbus.SessionBus(), do_not_queue=True)
+ except dbus.exceptions.NameExistsException:
+ logging.error("Session is already running")
+ if unlocked_cb:
+ unlocked_cb()
+ return
+
+ 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"]