From 699fc73aa72a4ab2eb5e90ff1be933b97f89a663 Mon Sep 17 00:00:00 2001 From: sigma Date: Mon, 23 Mar 2026 22:18:45 +0100 Subject: [PATCH] backend/drm: support semicolon delimiter for PCI paths in AQ_DRM_DEVICES --- src/backend/drm/DRM.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/backend/drm/DRM.cpp b/src/backend/drm/DRM.cpp index 83b9b4d..8ce80ac 100644 --- a/src/backend/drm/DRM.cpp +++ b/src/backend/drm/DRM.cpp @@ -177,7 +177,18 @@ static std::vector> scanGPUs(SP backend) { auto explicitGpus = getenv("AQ_DRM_DEVICES"); if (explicitGpus) { backend->log(AQ_LOG_DEBUG, std::format("drm: Explicit device list {}", explicitGpus)); - Hyprutils::String::CVarList explicitDevices(explicitGpus, 0, ':', true); + std::string explicitGpusStr = explicitGpus; + char delimiter = ':'; + + std::error_code ec; + if (std::filesystem::exists(explicitGpusStr, ec)) { + delimiter = ';'; + } + + if (explicitGpusStr.find(';') != std::string::npos) + delimiter = ';'; + + Hyprutils::String::CVarList explicitDevices(explicitGpus, 0, delimiter, true); // Iterate over GPUs and canonicalize the paths for (auto& d : explicitDevices) { @@ -189,6 +200,10 @@ static std::vector> scanGPUs(SP backend) { // TODO: Verify that the path is a valid DRM device. (https://gitlab.freedesktop.org/wlroots/wlroots/-/blob/master/backend/session/session.c?ref_type=heads#L369-387) if (ec) { backend->log(AQ_LOG_ERROR, std::format("drm: Failed to canonicalize path {}", d)); + + if (delimiter == ':') { + backend->log(AQ_LOG_ERROR, "drm: If you are using PCI paths with colons, use ';' as a separator instead of ':'."); + } continue; }