From ec85ccf53cd5c3c9a38d0ffecbf85986963007c1 Mon Sep 17 00:00:00 2001 From: Alessandro Astone Date: Wed, 3 Jan 2024 12:52:03 +0100 Subject: [PATCH 01/16] upgrader: Clarify refused upgrade message The previous string was wrong because we are not detecting the presence of image files, but whether waydroid was initialized with preinstalled images or with OTA images. --- tools/actions/upgrader.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/actions/upgrader.py b/tools/actions/upgrader.py index f35aac4..7f71e1e 100644 --- a/tools/actions/upgrader.py +++ b/tools/actions/upgrader.py @@ -47,7 +47,7 @@ def upgrade(args): if args.images_path not in tools.config.defaults["preinstalled_images_paths"]: helpers.images.get(args) else: - logging.info("Upgrade refused because a pre-installed image is detected at {}.".format(args.images_path)) + logging.info("Upgrade refused because Waydroid was configured to load pre-installed image from {}.".format(args.images_path)) helpers.drivers.probeAshmemDriver(args) helpers.lxc.setup_host_perms(args) helpers.lxc.set_lxc_config(args) -- 2.47.3 From f8d4bd2dc78fab8b6f9e837b65869f8fa112f7c4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Mihai-Drosi=20C=C3=A2ju?= Date: Mon, 15 Jan 2024 16:38:05 +0200 Subject: [PATCH 02/16] Add sysconfdir to Makefile defaulting to /etc --- Makefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 42ec712..d1cbc3a 100644 --- a/Makefile +++ b/Makefile @@ -4,17 +4,18 @@ USE_SYSTEMD ?= 1 USE_DBUS_ACTIVATION ?= 1 USE_NFTABLES ?= 0 +SYSCONFDIR := /etc WAYDROID_DIR := $(PREFIX)/lib/waydroid BIN_DIR := $(PREFIX)/bin APPS_DIR := $(PREFIX)/share/applications APPS_DIRECTORY_DIR := $(PREFIX)/share/desktop-directories -APPS_MENU_DIR := /etc/xdg/menus/applications-merged +APPS_MENU_DIR := $(SYSCONFDIR)/xdg/menus/applications-merged METAINFO_DIR := $(PREFIX)/share/metainfo ICONS_DIR := $(PREFIX)/share/icons SYSD_DIR := $(PREFIX)/lib/systemd/system DBUS_DIR := $(PREFIX)/share/dbus-1 POLKIT_DIR := $(PREFIX)/share/polkit-1 -APPARMOR_DIR := /etc/apparmor.d +APPARMOR_DIR := $(SYSCONFDIR)/apparmor.d INSTALL_WAYDROID_DIR := $(DESTDIR)$(WAYDROID_DIR) INSTALL_BIN_DIR := $(DESTDIR)$(BIN_DIR) -- 2.47.3 From 3e6872c0fd97dd5463d07315548187ad16a1eda1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Lo=C3=AFc=20CORBASSON?= Date: Wed, 1 Nov 2023 13:43:18 +0100 Subject: [PATCH 03/16] Don't change user-defined desktop files for Waydroid when they're set as read-only --- tools/services/user_manager.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/tools/services/user_manager.py b/tools/services/user_manager.py index 92ee203..83a50cc 100644 --- a/tools/services/user_manager.py +++ b/tools/services/user_manager.py @@ -49,10 +49,14 @@ Icon={waydroid_data}/icons/com.android.settings.png def makeWaydroidDesktopFile(hide): desktop_file_path = apps_dir + "/Waydroid.desktop" - if os.path.isfile(desktop_file_path): - os.remove(desktop_file_path) - with open(desktop_file_path, "w") as desktop_file: - desktop_file.write(f"""\ + # If the user has set the desktop file as read-only, we won't replace it + if not os.access(desktop_file_path, os.W_OK): + logging.info(f"Desktop file '{desktop_file_path}' is not writeable, not updating it") + else: + if os.path.isfile(desktop_file_path): + os.remove(desktop_file_path) + with open(desktop_file_path, "w") as desktop_file: + desktop_file.write(f"""\ [Desktop Entry] Type=Application Name=Waydroid -- 2.47.3 From 2be58d19ad233e61d5ce1d3c3fbbe38261f783e6 Mon Sep 17 00:00:00 2001 From: "Fabrice A. Marie" Date: Sun, 10 Dec 2023 21:16:22 +0800 Subject: [PATCH 04/16] Ensure default umask to avoid surprises with file permissions. --- systemd/waydroid-container.service | 1 + waydroid.py | 2 ++ 2 files changed, 3 insertions(+) diff --git a/systemd/waydroid-container.service b/systemd/waydroid-container.service index c8ffbd8..4a86383 100644 --- a/systemd/waydroid-container.service +++ b/systemd/waydroid-container.service @@ -2,6 +2,7 @@ Description=Waydroid Container [Service] +UMask=0022 BusName=id.waydro.Container ExecStart=/usr/bin/waydroid -w container start diff --git a/waydroid.py b/waydroid.py index a79b015..c9e50b3 100755 --- a/waydroid.py +++ b/waydroid.py @@ -2,8 +2,10 @@ # Copyright 2021 Oliver Smith # SPDX-License-Identifier: GPL-3.0-or-later # PYTHON_ARGCOMPLETE_OK +import os import sys import tools if __name__ == "__main__": + os.umask(0o0022) sys.exit(tools.main()) -- 2.47.3 From 068a143be99bf57fe649395ad9d95ef966fc49d8 Mon Sep 17 00:00:00 2001 From: Jami Kettunen Date: Mon, 1 Apr 2024 13:48:28 +0300 Subject: [PATCH 05/16] initializer: Fix Halium version VNDK detection logic for 12L+ API 32 (12L) was getting detected as HALIUM_13 which wouldn't work on devices when official images ship with support for these newer versions. --- tools/actions/initializer.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/actions/initializer.py b/tools/actions/initializer.py index 41a0be3..fee1280 100644 --- a/tools/actions/initializer.py +++ b/tools/actions/initializer.py @@ -23,6 +23,8 @@ def get_vendor_type(args): ret = "MAINLINE" if vndk_str != "": vndk = int(vndk_str) + if vndk > 31: + vndk -= 1 # 12L -> Halium 12 if vndk > 19: ret = "HALIUM_" + str(vndk - 19) -- 2.47.3 From 7496998e9d30211b9a8692761c6d54203aa0ec00 Mon Sep 17 00:00:00 2001 From: linsyking Date: Tue, 9 Jul 2024 00:17:36 -0400 Subject: [PATCH 06/16] Add msm_dpu driver for freedreno --- tools/helpers/gpu.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/helpers/gpu.py b/tools/helpers/gpu.py index eac3184..b5f7d24 100644 --- a/tools/helpers/gpu.py +++ b/tools/helpers/gpu.py @@ -27,6 +27,7 @@ def getVulkanDriver(args, dev): "radeon": "radeon", "panfrost": "panfrost", "msm": "freedreno", + "msm_dpu": "freedreno", "vc4": "broadcom", } kernel_driver = getKernelDriver(args, dev) -- 2.47.3 From 404980b3af27ede6163d9fdcc9d870237492f058 Mon Sep 17 00:00:00 2001 From: Alessandro Astone Date: Thu, 9 May 2024 14:47:22 +0200 Subject: [PATCH 07/16] Re-enable nouveau and nvk --- tools/helpers/gpu.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/helpers/gpu.py b/tools/helpers/gpu.py index b5f7d24..55343d4 100644 --- a/tools/helpers/gpu.py +++ b/tools/helpers/gpu.py @@ -2,7 +2,7 @@ import glob import os import tools.helpers.props -unsupported = ["nvidia", "nouveau"] +unsupported = ["nvidia"] def getKernelDriver(args, dev): return tools.helpers.props.file_get(args, "/sys/class/drm/{}/device/uevent".format(dev), "DRIVER") @@ -29,6 +29,7 @@ def getVulkanDriver(args, dev): "msm": "freedreno", "msm_dpu": "freedreno", "vc4": "broadcom", + "nouveau": "nouveau", } kernel_driver = getKernelDriver(args, dev) if kernel_driver in mapping: -- 2.47.3 From 3dd05999699513b687b09b1cf8dfbd92063c783d Mon Sep 17 00:00:00 2001 From: Alessandro Astone Date: Sat, 27 Jul 2024 22:29:28 +0200 Subject: [PATCH 08/16] Remove unused session.cfg config --- tools/config/__init__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/config/__init__.py b/tools/config/__init__.py index 002562e..4eff2b6 100644 --- a/tools/config/__init__.py +++ b/tools/config/__init__.py @@ -65,7 +65,6 @@ session_defaults = { "lcd_density": "0", "background_start": "true" } -session_defaults["config_path"] = defaults["work"] + "/session.cfg" session_defaults["waydroid_data"] = session_defaults["xdg_data_home"] + \ "/waydroid/data" if session_defaults["pulse_runtime_path"] == "None": -- 2.47.3 From af296c90a788dde0b33813b12607cfab2fa65b98 Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Thu, 7 Mar 2024 01:36:41 +0000 Subject: [PATCH 09/16] Use synthetic paths for host sockets 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 --- tools/config/__init__.py | 3 +++ tools/helpers/images.py | 6 +++--- tools/helpers/lxc.py | 13 ++++++++----- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/tools/config/__init__.py b/tools/config/__init__.py index 4eff2b6..18e17ed 100644 --- a/tools/config/__init__.py +++ b/tools/config/__init__.py @@ -41,6 +41,8 @@ defaults = { "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" @@ -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["container_pulse_runtime_path"] = defaults["container_xdg_runtime_dir"] + "/pulse" session_defaults = { "user_name": pwd.getpwuid(os.getuid()).pw_name, diff --git a/tools/helpers/images.py b/tools/helpers/images.py index f266db3..8a88f29 100644 --- a/tools/helpers/images.py +++ b/tools/helpers/images.py @@ -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.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") + 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"] diff --git a/tools/helpers/lxc.py b/tools/helpers/lxc.py index 6be7b7d..c2ca4e7 100644 --- a/tools/helpers/lxc.py +++ b/tools/helpers/lxc.py @@ -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 - 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") -- 2.47.3 From c312b3fc94fb158df9c74fc20ea81c194b525caa Mon Sep 17 00:00:00 2001 From: Alessandro Astone Date: Sat, 27 Jul 2024 23:41:03 +0200 Subject: [PATCH 10/16] Bail out if system_channel or vendor_channel are empty Closes: #1033 --- tools/actions/initializer.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/tools/actions/initializer.py b/tools/actions/initializer.py index fee1280..8f6c2c3 100644 --- a/tools/actions/initializer.py +++ b/tools/actions/initializer.py @@ -59,6 +59,10 @@ def setup_config(args): if not args.system_type: args.system_type = channels_cfg["channels"]["system_type"] + if not args.system_channel or not args.vendor_channel: + logging.error("ERROR: You must provide 'System OTA' and 'Vendor OTA' URLs.") + return False + args.system_ota = args.system_channel + "/" + args.rom_type + \ "/waydroid_" + args.arch + "/" + args.system_type + ".json" system_request = helpers.http.retrieve(args.system_ota) @@ -101,6 +105,7 @@ def setup_config(args): cfg["waydroid"]["vndbinder"] = args.VNDBINDER_DRIVER cfg["waydroid"]["hwbinder"] = args.HWBINDER_DRIVER tools.config.save(args, cfg) + return True def init(args): if not is_initialized(args) or args.force: @@ -109,7 +114,8 @@ def init(args): initializer_service = tools.helpers.ipc.DBusContainerService("/Initializer", "id.waydro.Initializer") except dbus.DBusException: pass - setup_config(args) + if not setup_config(args): + return status = "STOPPED" if os.path.exists(tools.config.defaults["lxc"] + "/waydroid"): status = helpers.lxc.status(args) -- 2.47.3 From 20ad11568352afdbf30dacaa34c9ecd3ee926b26 Mon Sep 17 00:00:00 2001 From: Alessandro Astone Date: Sun, 28 Jul 2024 10:19:31 +0200 Subject: [PATCH 11/16] user_manager: Restore desktop-file creation the first time --- tools/services/user_manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/services/user_manager.py b/tools/services/user_manager.py index 83a50cc..dbde361 100644 --- a/tools/services/user_manager.py +++ b/tools/services/user_manager.py @@ -50,7 +50,7 @@ Icon={waydroid_data}/icons/com.android.settings.png def makeWaydroidDesktopFile(hide): desktop_file_path = apps_dir + "/Waydroid.desktop" # If the user has set the desktop file as read-only, we won't replace it - if not os.access(desktop_file_path, os.W_OK): + if os.path.isfile(desktop_file_path) and not os.access(desktop_file_path, os.W_OK): logging.info(f"Desktop file '{desktop_file_path}' is not writeable, not updating it") else: if os.path.isfile(desktop_file_path): -- 2.47.3 From 583ebb5ebb97e976196dc5db70839b5225364f09 Mon Sep 17 00:00:00 2001 From: Alessandro Astone Date: Wed, 7 Aug 2024 23:01:09 +0200 Subject: [PATCH 12/16] Upver to 1.4.3 --- tools/config/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/config/__init__.py b/tools/config/__init__.py index 18e17ed..e14ff2d 100644 --- a/tools/config/__init__.py +++ b/tools/config/__init__.py @@ -12,7 +12,7 @@ from tools.config.save import save # # Exported variables (internal configuration) # -version = "1.4.2" +version = "1.4.3" tools_src = os.path.normpath(os.path.realpath(__file__) + "/../../..") # Keys saved in the config file (mostly what we ask in 'waydroid init') -- 2.47.3 From 9cd66662ba53d491ce7e3c74218b5194267a6f68 Mon Sep 17 00:00:00 2001 From: Alessandro Astone Date: Wed, 7 Aug 2024 23:00:56 +0200 Subject: [PATCH 13/16] debian: Upver to 1.4.3 --- debian/changelog | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/debian/changelog b/debian/changelog index b926471..3117df7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,23 @@ +waydroid (1.4.3) bullseye; urgency=medium + + * update regex for deprecation warning + * Add SSSE3 CPU check for arch x86/x86_64 + * Make adb auto-connection opt-out + * upgrader: Clarify refused upgrade message + * Add sysconfdir to Makefile defaulting to /etc + * Don't change user-defined desktop files for Waydroid when they're set as read-only + * Ensure default umask to avoid surprises with file permissions. + * initializer: Fix Halium version VNDK detection logic for 12L+ + * Add msm_dpu driver for freedreno + * Re-enable nouveau and nvk + * Remove unused session.cfg config + * Use synthetic paths for host sockets + * Bail out if system_channel or vendor_channel are empty + * user_manager: Restore desktop-file creation the first time + * Upver to 1.4.3 + + -- Alessandro Astone Wed, 07 Aug 2024 22:58:54 +0200 + waydroid (1.4.2) bullseye; urgency=medium * Allow running a shell command as an arbitrary user and group and with an arbitrary security context (#996) -- 2.47.3 From c9ea5abff749e660c9aca0fcd224875464c3dacd Mon Sep 17 00:00:00 2001 From: Alessandro Astone Date: Sat, 10 Aug 2024 16:10:14 +0200 Subject: [PATCH 14/16] debian: Use new polkitd package Prefer the new polkitd name but keep supporting policykit-1 for older distros Fixes: #1484 --- debian/control | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/debian/control b/debian/control index 2b63f56..8f0dfa4 100644 --- a/debian/control +++ b/debian/control @@ -20,7 +20,7 @@ Depends: ${misc:Depends}, gir1.2-gtk-3.0, python3-dbus, dbus, - policykit-1, + polkitd | policykit-1, iptables Description: Android™ application support waydroid allows running a separate Android™ environment -- 2.47.3 From 5000c9703de873e4f477ebcdd3556ad163252115 Mon Sep 17 00:00:00 2001 From: Alessandro Astone Date: Wed, 4 Sep 2024 23:27:58 +0200 Subject: [PATCH 15/16] initializer: Refactor setup to better handle preinstalled images Bail out early when using preinstalled images. There's no reason to attempt fetching the OTA channels if we're going to use preinstalled images. Fixes: #1550 --- tools/actions/initializer.py | 52 ++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 23 deletions(-) diff --git a/tools/actions/initializer.py b/tools/actions/initializer.py index 8f6c2c3..8725097 100644 --- a/tools/actions/initializer.py +++ b/tools/actions/initializer.py @@ -35,20 +35,37 @@ def setup_config(args): args.arch = helpers.arch.host() cfg["waydroid"]["arch"] = args.arch + args.vendor_type = get_vendor_type(args) + cfg["waydroid"]["vendor_type"] = args.vendor_type + + helpers.drivers.setupBinderNodes(args) + cfg["waydroid"]["binder"] = args.BINDER_DRIVER + cfg["waydroid"]["vndbinder"] = args.VNDBINDER_DRIVER + cfg["waydroid"]["hwbinder"] = args.HWBINDER_DRIVER + + has_preinstalled_images = False preinstalled_images_paths = tools.config.defaults["preinstalled_images_paths"] - if not args.images_path: - for preinstalled_images in preinstalled_images_paths: - if os.path.isdir(preinstalled_images): - if os.path.isfile(preinstalled_images + "/system.img") and os.path.isfile(preinstalled_images + "/vendor.img"): - args.images_path = preinstalled_images - break - else: - logging.warning("Found directory {} but missing system or vendor image, ignoring...".format(preinstalled_images)) + for preinstalled_images in preinstalled_images_paths: + if os.path.isdir(preinstalled_images): + if os.path.isfile(preinstalled_images + "/system.img") and os.path.isfile(preinstalled_images + "/vendor.img"): + has_preinstalled_images = True + args.images_path = preinstalled_images + break + else: + logging.warning("Found directory {} but missing system or vendor image, ignoring...".format(preinstalled_images)) if not args.images_path: args.images_path = tools.config.defaults["images_path"] cfg["waydroid"]["images_path"] = args.images_path + if has_preinstalled_images: + cfg["waydroid"]["system_ota"] = args.system_ota = "None" + cfg["waydroid"]["vendor_ota"] = args.vendor_ota = "None" + cfg["waydroid"]["system_datetime"] = tools.config.defaults["system_datetime"] + cfg["waydroid"]["vendor_datetime"] = tools.config.defaults["vendor_datetime"] + tools.config.save(args, cfg) + return True + channels_cfg = tools.config.load_channels() if not args.system_channel: args.system_channel = channels_cfg["channels"]["system_channel"] @@ -67,11 +84,8 @@ def setup_config(args): "/waydroid_" + args.arch + "/" + args.system_type + ".json" system_request = helpers.http.retrieve(args.system_ota) if system_request[0] != 200: - if args.images_path not in preinstalled_images_paths: - raise ValueError( - "Failed to get system OTA channel: {}, error: {}".format(args.system_ota, system_request[0])) - else: - args.system_ota = "None" + raise ValueError( + "Failed to get system OTA channel: {}, error: {}".format(args.system_ota, system_request[0])) device_codename = helpers.props.host_get(args, "ro.product.device") args.vendor_type = None @@ -85,12 +99,8 @@ def setup_config(args): break if not args.vendor_type: - if args.images_path not in preinstalled_images_paths: - raise ValueError( - "Failed to get vendor OTA channel: {}".format(vendor_ota)) - else: - args.vendor_ota = "None" - args.vendor_type = get_vendor_type(args) + raise ValueError( + "Failed to get vendor OTA channel: {}".format(vendor_ota)) if args.system_ota != cfg["waydroid"].get("system_ota"): cfg["waydroid"]["system_datetime"] = tools.config.defaults["system_datetime"] @@ -100,10 +110,6 @@ def setup_config(args): cfg["waydroid"]["vendor_type"] = args.vendor_type cfg["waydroid"]["system_ota"] = args.system_ota cfg["waydroid"]["vendor_ota"] = args.vendor_ota - helpers.drivers.setupBinderNodes(args) - cfg["waydroid"]["binder"] = args.BINDER_DRIVER - cfg["waydroid"]["vndbinder"] = args.VNDBINDER_DRIVER - cfg["waydroid"]["hwbinder"] = args.HWBINDER_DRIVER tools.config.save(args, cfg) return True -- 2.47.3 From 023c4e31e06e2a31110a346516a841e68063d473 Mon Sep 17 00:00:00 2001 From: Alessandro Astone Date: Sat, 14 Dec 2024 16:40:05 +0100 Subject: [PATCH 16/16] gpu: Use intel_hasvk on intel graphics gen 8 or lower Closes: #1604 --- tools/helpers/gpu.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tools/helpers/gpu.py b/tools/helpers/gpu.py index 55343d4..2a38cfe 100644 --- a/tools/helpers/gpu.py +++ b/tools/helpers/gpu.py @@ -4,6 +4,9 @@ import tools.helpers.props unsupported = ["nvidia"] +def getMinor(args, dev): + return tools.helpers.props.file_get(args, "/sys/class/drm/{}/uevent".format(dev), "MINOR") + def getKernelDriver(args, dev): return tools.helpers.props.file_get(args, "/sys/class/drm/{}/device/uevent".format(dev), "DRIVER") @@ -32,6 +35,16 @@ def getVulkanDriver(args, dev): "nouveau": "nouveau", } kernel_driver = getKernelDriver(args, dev) + + if kernel_driver == "i915": + try: + gen = tools.helpers.run.user(args,["awk", "/^graphics version:|^gen:/ {print $NF}", + "/sys/kernel/debug/dri/{}/i915_capabilities".format(getMinor(args, dev))], output_return=True) + if int(gen) < 9: + return "intel_hasvk" + except: + pass + if kernel_driver in mapping: return mapping[kernel_driver] return "" -- 2.47.3