DRM_CLIENT_...LANE_HOTSPOT(9)
π DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT π
okay so this is a page straight out of the Kernel API Manual (that's the Kernel API Manual bit from the header, bestie) and it's about exactly one thing: a client cap called DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT. short name, big feelings. let's get into it π«Ά
β¨ NAME β¨
DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT β that's it. that's the whole name. no subtitle, no little tagline, she's mysterious like that π
πΈ SYNOPSIS πΈ
DRM_CLIENT_CAP_CURSOR_PLANE_HOTSPOT
literally just the cap itself. no args, no return type, no drama. iconic behavior honestly π
π DESCRIPTION π
okay so picture this: the drivers for para-virtualized hardware β and yes that means vmwgfx, qxl, virtio and virtualbox specifically β have extra restrictions when it comes to cursor planes. which means cursor planes on those drivers are not truly universal, periodt. π
like, what kind of extra restrictions? they need their cursor planes to act exactly like a mouse cursor and have their hotspot properties set correctly. that's the vibe check they have to pass.
so here's the tea: if this client cap is not set, the DRM core will straight up hide the cursor plane on those virtualized drivers. why? because not setting it implies the client can't deal with those extra restrictions. it's giving "you're not ready for this level of responsibility" π
clients that do set the cursor hotspot and treat the cursor plane like a mouse cursor should set this property.
π
tiny but crucial detail: the client must enable DRM_CLIENT_CAP_ATOMIC first. like, first first. no skipping ahead.
then there's this gem: setting this property on drivers that don't special case cursor planes (i.e. the non-virtualized ones) will return EOPNOTSUPP. which is lowkey useful actually, because userspace can use that to gauge the requirements of the hardware/drivers it's running on. free diagnostics, we love to see it π₯
and the slayiest part? this capability is always supported for atomic-capable virtualized drivers starting from kernel version 6.6. noted, screenshotted, saved. β
π¦ SEE ALSO π¦
seriously, she brought the whole friend group. every single one:
- Kernel file
./tools/perf/trace/beauty/include/uapi/drm/drm.h struct drm_gem_close(9)struct drm_gem_flink(9)struct drm_gem_open(9)struct drm_gem_change_handle(9)DRM_CAP_DUMB_BUFFER(9)DRM_CAP_VBLANK_HIGH_CRTC(9)DRM_CAP_DUMB_PREFERRED_DEPTH(9)DRM_CAP_DUMB_PREFER_SHADOW(9)DRM_CAP_PRIME(9)DRM_PRIME_CAP_IMPORT(9)DRM_PRIME_CAP_EXPORT(9)DRM_CAP_TIMESTAMP_MONOTONIC(9)DRM_CAP_ASYNC_PAGE_FLIP(9)DRM_CAP_CURSOR_WIDTH(9)DRM_CAP_CURSOR_HEIGHT(9)DRM_CAP_ADDFB2_MODIFIERS(9)DRM_CAP_PAGE_FLIP_TARGET(9)DRM_CAP_CRTC_IN_VBLANK_EVENT(9)DRM_CAP_SYNCOBJ(9)DRM_CAP_SYNCOBJ_TIMELINE(9)DRM_CAP_ATOMIC_ASYNC_PAGE_FLIP(9)DRM_CLIENT_CAP_STEREO_3D(9)DRM_CLIENT_CAP_UNIVERSAL_PLANES(9)DRM_CLIENT_CAP_ATOMIC(9)DRM_CLIENT_CAP_ASPECT_RATIO(9)DRM_CLIENT_CAP_WRITEBACK_CONNECTORS(9)DRM_CLIENT_CAP_PLANE_COLOR_PIPELINE(9)struct drm_syncobj_eventfd(9)DRM_IOCTL_GEM_CLOSE(9)DRM_IOCTL_PRIME_HANDLE_TO_FD(9)DRM_IOCTL_PRIME_FD_TO_HANDLE(9)DRM_IOCTL_MODE_RMFB(9)DRM_IOCTL_MODE_CREATE_DUMB(9)DRM_IOCTL_MODE_GETFB2(9)DRM_IOCTL_SYNCOBJ_EVENTFD(9)DRM_IOCTL_MODE_CLOSEFB(9)DRM_IOCTL_SET_CLIENT_NAME(9)DRM_IOCTL_GEM_CHANGE_HANDLE(9)struct drm_event(9)DRM_EVENT_VBLANK(9)DRM_EVENT_FLIP_COMPLETE(9)DRM_EVENT_CRTC_SEQUENCE(9)
and that's the whole page bestie π§ go forth, set your hotspot, enable DRM_CLIENT_CAP_ATOMIC first, and don't come crying to me when you get EOPNOTSUPP on a non-virtualized driver because I literally warned you π
π sign-off corner: this gem came from./tools/perf/trace/beauty/incl...and it's dated October 2026 β future-flavored documentation, we stan. also yes the title up top isDRM_CLIENT_...LANE_HOTSPOT(9)because even the header got truncated mid-slay. iykyk π¦
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms