# SPDX-License-Identifier: GPL-3.0-or-later
import subprocess
import os
-import re
import logging
import glob
import shutil
make_entry("/dev/pvr_sync")
make_entry("/dev/pmsg0")
make_entry("/dev/dxg")
- render, card = tools.helpers.gpu.getDriNode(args)
- make_entry(render, "dev/dri/renderD128")
- make_entry(card, "dev/dri/card0")
+ render, _ = tools.helpers.gpu.getDriNode(args)
+ make_entry(render)
for n in glob.glob("/dev/fb*"):
make_entry(n)
make_entry(n)
for n in glob.glob("/dev/video*"):
make_entry(n)
+ for n in glob.glob("/dev/dma_heap/*"):
+ make_entry(n)
# Binder dev nodes
make_entry("/dev/" + args.BINDER_DRIVER, "dev/binder", check=False)
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")
- 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")
- 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 dri:
gralloc = "gbm"
egl = "mesa"
+ props.append("gralloc.gbm.device=" + dri)
else:
gralloc = "default"
egl = "swiftshader"
"BOOTCLASSPATH": "/apex/com.android.art/javalib/core-oj.jar:/apex/com.android.art/javalib/core-libart.jar:/apex/com.android.art/javalib/core-icu4j.jar:/apex/com.android.art/javalib/okhttp.jar:/apex/com.android.art/javalib/bouncycastle.jar:/apex/com.android.art/javalib/apache-xml.jar:/system/framework/framework.jar:/system/framework/ext.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/framework-atb-backward-compatibility.jar:/apex/com.android.conscrypt/javalib/conscrypt.jar:/apex/com.android.media/javalib/updatable-media.jar:/apex/com.android.mediaprovider/javalib/framework-mediaprovider.jar:/apex/com.android.os.statsd/javalib/framework-statsd.jar:/apex/com.android.permission/javalib/framework-permission.jar:/apex/com.android.sdkext/javalib/framework-sdkextensions.jar:/apex/com.android.wifi/javalib/framework-wifi.jar:/apex/com.android.tethering/javalib/framework-tethering.jar"
}
-def android_env_attach_options():
- env = [k + "=" + v for k, v in ANDROID_ENV.items()]
+def android_env_attach_options(args):
+ local_env = ANDROID_ENV.copy()
+ # Include CLASSPATH env that was generated by Android
+ command = ["lxc-attach", "-P", tools.config.defaults["lxc"],
+ "-n", "waydroid", "--clear-env", "--",
+ "/system/bin/cat" ,"/data/system/environ/classpath"]
+ classpath = tools.helpers.run.user(args, command, output_return=True).strip()
+ for line in classpath.splitlines():
+ _, k, v = line.split(' ', 2)
+ local_env[k] = v
+ env = [k + "=" + v for k, v in local_env.items()]
return [x for var in env for x in ("--set-var", var)]
def shell(args):
return
command = ["lxc-attach", "-P", tools.config.defaults["lxc"],
"-n", "waydroid", "--clear-env"]
- command.extend(android_env_attach_options())
+ command.extend(android_env_attach_options(args))
if args.uid!=None:
command.append("--uid="+str(args.uid))
if args.gid!=None:
command.extend(args.COMMAND)
else:
command.append("/system/bin/sh")
- subprocess.run(command)
+
+ try:
+ subprocess.run(command)
+ except KeyboardInterrupt:
+ pass
+
if state == "FROZEN":
freeze(args)