]> glassweightruler.freedombox.rocks Git - waydroid.git/blobdiff - tools/actions/session_manager.py
lxc: Create session-specific mount entries
[waydroid.git] / tools / actions / session_manager.py
index abb4f35a080fee5edebbbab90ed823e493988751..6709e14f1c174761c73b91c5a543ea2f99529635 100644 (file)
@@ -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