https://bugs.kde.org/show_bug.cgi?id=521914
Bug ID: 521914
Summary: GpuManager unconditionally opens all render nodes at
startup, preventing dGPU power-off on hybrid laptops
Classification: Plasma
Product: kwin
Version First 6.7.0
Reported In:
Platform: Arch Linux
OS: Linux
Status: REPORTED
Severity: normal
Priority: NOR
Component: general
Assignee: [email protected]
Reporter: [email protected]
Target Milestone: ---
SUMMARY
Since Plasma 6.7, KWin's new GpuManager (MR !8913 / !8926) unconditionally
enumerates and opens ALL render nodes via scanForRenderDevices(), creating
EGL displays, GBM devices, and Vulkan contexts on every GPU — including the
discrete GPU on hybrid laptops.
This happens regardless of the KWIN_DRM_DEVICES environment variable, which
previously was sufficient to keep KWin from touching the dGPU entirely.
The result is that the dGPU (NVIDIA in my case) can never fully power off,
as KWin holds open file descriptors and driver contexts on it for the
entire session. This causes unnecessary battery drain on laptops.
STEPS TO REPRODUCE
1. Have a hybrid laptop (Intel iGPU + NVIDIA dGPU)
2. Set KWIN_DRM_DEVICES="/dev/dri/by-path/pci-0000:00:02.0-card" (Intel only)
3. Log into a Plasma Wayland session
4. Run: nvidia-smi
OBSERVED BEHAVIOR
nvidia-smi shows kwin_wayland using 11 MiB on the NVIDIA GPU with a
persistent C+G context. The NVIDIA GPU cannot fully suspend because KWin
holds open render device handles via GpuManager.
KWin's supportInformation confirms rendering is on Intel:
OpenGL vendor string: Intel
OpenGL renderer string: Mesa Intel(R) Graphics (ADL GT2)
Yet GpuManager::scanForRenderDevices() still opened renderD129 (NVIDIA),
created an EglDisplay and VulkanDevice on it, and keeps them alive.
EXPECTED BEHAVIOR
GpuManager should respect KWIN_DRM_DEVICES and skip render nodes belonging
to GPUs excluded from display use, OR provide a separate environment
variable (e.g. KWIN_RENDER_DEVICES) to control which render nodes are
probed.
Before Plasma 6.7, KWin did not touch the NVIDIA GPU at all when
KWIN_DRM_DEVICES was set to the Intel iGPU, allowing the dGPU to remain
fully powered off.
RELEVANT CODE
- GpuManager::scanForRenderDevices() in src/core/gpumanager.cpp
unconditionally calls m_udev->listRenderNodes() and opens every result
- RenderDevice::open() creates DrmDevice + EglDisplay + VulkanDevice
on every opened render node
SYSTEM INFORMATION
- Plasma 6.7
- KWin (Wayland)
- Intel ADL GT2 iGPU (card1 / renderD128)
- NVIDIA GeForce RTX 3070 Ti Laptop GPU (card0 / renderD129)
- NVIDIA driver 610.43.02
- Kernel 7.0.12
- Arch Linux
ADDITIONAL INFORMATION
Introduced by MR !8913 (GpuManager) and MR !8926 (multi-GPU copy swapchain),
both merged March 2026.
PS: I had used AI for assisting me in diagnosis.
--
You are receiving this mail because:
You are watching all bug changes.