]> glassweightruler.freedombox.rocks Git - waydroid.git/commitdiff
Use synthetic paths for host sockets
authorJoshua Ashton <joshua@froggi.es>
Thu, 7 Mar 2024 01:36:41 +0000 (01:36 +0000)
committerAlessandro Astone <ales.astone@gmail.com>
Sat, 27 Jul 2024 21:40:24 +0000 (23:40 +0200)
Mount XDG_RUNTIME_DIR, PULSE_RUNTIME_PATH and
WAYLAND_DISPLAY to our own synthetic paths in
/run/xdg/...

That way, they can never clash with any of our
Android bindpoints.

Eg. /data/.../xdg/wayland-0 conflicts with /data

Co-authored-by: Alessandro Astone <ales.astone@gmail.com>
tools/config/__init__.py
tools/helpers/images.py
tools/helpers/lxc.py

index 4eff2b66e65e0878059c072f3c8cabb6fcbfdcd2..18e17ed183faaf29593e385c5bb63bb10a3cb01c 100644 (file)
@@ -41,6 +41,8 @@ defaults = {
     "suspend_action": "freeze",
     "mount_overlays": "True",
     "auto_adb": "True",
     "suspend_action": "freeze",
     "mount_overlays": "True",
     "auto_adb": "True",
+    "container_xdg_runtime_dir": "/run/xdg",
+    "container_wayland_display": "wayland-0",
 }
 defaults["images_path"] = defaults["work"] + "/images"
 defaults["rootfs"] = defaults["work"] + "/rootfs"
 }
 defaults["images_path"] = defaults["work"] + "/images"
 defaults["rootfs"] = defaults["work"] + "/rootfs"
@@ -50,6 +52,7 @@ defaults["overlay_work"] = defaults["work"] + "/overlay_work"
 defaults["data"] = defaults["work"] + "/data"
 defaults["lxc"] = defaults["work"] + "/lxc"
 defaults["host_perms"] = defaults["work"] + "/host-permissions"
 defaults["data"] = defaults["work"] + "/data"
 defaults["lxc"] = defaults["work"] + "/lxc"
 defaults["host_perms"] = defaults["work"] + "/host-permissions"
+defaults["container_pulse_runtime_path"] = defaults["container_xdg_runtime_dir"] + "/pulse"
 
 session_defaults = {
     "user_name": pwd.getpwuid(os.getuid()).pw_name,
 
 session_defaults = {
     "user_name": pwd.getpwuid(os.getuid()).pw_name,
index f266db3704dab9a7022ed713d0e82a081f244d39..8a88f2970dd3b53f3ca59bb46498260b7a97d56f 100644 (file)
@@ -136,10 +136,10 @@ def make_prop(args, cfg, full_props_path):
     add_prop("waydroid.host.uid", "user_id")
     add_prop("waydroid.host.gid", "group_id")
     add_prop("waydroid.host_data_path", "waydroid_data")
     add_prop("waydroid.host.uid", "user_id")
     add_prop("waydroid.host.gid", "group_id")
     add_prop("waydroid.host_data_path", "waydroid_data")
-    add_prop("waydroid.xdg_runtime_dir", "xdg_runtime_dir")
-    add_prop("waydroid.pulse_runtime_path", "pulse_runtime_path")
-    add_prop("waydroid.wayland_display", "wayland_display")
     add_prop("waydroid.background_start", "background_start")
     add_prop("waydroid.background_start", "background_start")
+    props.append("waydroid.xdg_runtime_dir=" + tools.config.defaults["container_xdg_runtime_dir"])
+    props.append("waydroid.pulse_runtime_path=" + tools.config.defaults["container_pulse_runtime_path"])
+    props.append("waydroid.wayland_display=" + tools.config.defaults["container_wayland_display"])
     if which("waydroid-sensord") is None:
         props.append("waydroid.stub_sensors_hal=1")
     dpi = cfg["lcd_density"]
     if which("waydroid-sensord") is None:
         props.append("waydroid.stub_sensors_hal=1")
     dpi = cfg["lcd_density"]
index 6be7b7dd2142d7da104c3307bc30f8ca347a84c1..c2ca4e7bf77fc1f127ddd88cfd3859ad08c3edcb 100644 (file)
@@ -190,15 +190,18 @@ def generate_session_lxc_config(args, session):
         return add_node_entry(nodes, src, dist, mnt_type, options, check=False)
 
     # Make sure XDG_RUNTIME_DIR exists
         return add_node_entry(nodes, src, dist, mnt_type, options, check=False)
 
     # Make sure XDG_RUNTIME_DIR exists
-    if not make_entry("tmpfs", session["xdg_runtime_dir"], options="create=dir 0 0"):
+    if not make_entry("tmpfs", tools.config.defaults["container_xdg_runtime_dir"], options="create=dir 0 0"):
         raise OSError("Failed to create XDG_RUNTIME_DIR mount point")
 
         raise OSError("Failed to create XDG_RUNTIME_DIR mount point")
 
-    wayland_socket = os.path.realpath(os.path.join(session["xdg_runtime_dir"], session["wayland_display"]))
-    if not make_entry(wayland_socket):
+    wayland_host_socket = os.path.realpath(os.path.join(session["xdg_runtime_dir"], session["wayland_display"]))
+    wayland_container_socket = os.path.realpath(os.path.join(tools.config.defaults["container_xdg_runtime_dir"], tools.config.defaults["container_wayland_display"]))
+    if not make_entry(wayland_host_socket, wayland_container_socket[1:]):
         raise OSError("Failed to bind Wayland socket")
 
         raise OSError("Failed to bind Wayland socket")
 
-    pulse_socket = os.path.join(session["pulse_runtime_path"], "native")
-    make_entry(pulse_socket)
+    # Make sure PULSE_RUNTIME_DIR exists
+    pulse_host_socket = os.path.join(session["pulse_runtime_path"], "native")
+    pulse_container_socket = os.path.join(tools.config.defaults["container_pulse_runtime_path"], "native")
+    make_entry(pulse_host_socket, pulse_container_socket[1:])
 
     if not make_entry(session["waydroid_data"], "data", options="rbind 0 0"):
         raise OSError("Failed to bind userdata")
 
     if not make_entry(session["waydroid_data"], "data", options="rbind 0 0"):
         raise OSError("Failed to bind userdata")