Repository navigation
Fullscreen windows are not unredirected on NVIDIA X11 even with unredirect-fullscreen-windows enabled, preventing G-SYNC/VRR #847
Description
Distribution
Linux Mint 22.3 (Zena), Cinnamon edition
Package version
Muffin v6.6.3, Cinnamon v6.6.9
Graphics hardware in use
NVIDIA GeForce GTX 1050 Ti, proprietary driver v580.173.02, X11 session. Display under test: ASUS ROG Strix XG27ACMES, 2560x1440 at up to 240 Hz, connected via DisplayPort (VRR capable, not on NVIDIA's validated G-SYNC Compatible list)
Frequency
Always
Bug description
With org.cinnamon.muffin unredirect-fullscreen-windows set to true (verified with dconf read, including after a full reboot), fullscreen applications are still being composited. I verified this with the NVIDIA Graphics API Visual Indicator (enabled via ShowGraphicsVisualIndicator), which always shows BLIT - VSYNC ON for a fullscreen Vulkan client running under Cinnamon. Since the client never flips, G-SYNC/VRR can never engage.
The compositor is the only variable: replacing the WM in the same X session with openbox --replace and running the exact same command immediately shows FLIP in the indicator, and VRR physically engages. The monitor's own OSD refresh rate counter follows the application frame rate (100 FPS in my test) instead of staying pinned at the panel's maximum 240 Hz.
To rule out the usual suspects, all of the following were true during every run under Cinnamon:
- Only one monitor active, with the X screen framebuffer resized to match it exactly (
xrandr --fb 2560x1440), so the fullscreen window covers the entire X screen, which the NVIDIA driver requires for flipping. My normal setup is dual monitor, but the bug reproduces with a single one. Allow G-SYNC on monitor not validated as G-SYNC Compatibleapplied, andDisplayVRREnabled=1for the display under test confirmed withnvidia-settings -qduring the tests (immediately before and after the main runs).Force Composition PipelineandForce Full Composition Pipelineboth off, no/etc/X11/xorg.conf, stock driver install.- Reproduced with two different builds of the same client: Flatpak mpv v0.41.0 (
--vo=gpu-next, Vulkan) and the distro mpv v0.37.0 forced to Vulkan (--gpu-api=vulkan). SameBLITresult in both, so it is not a Flatpak sandbox issue. - No overlays or notifications on top of the window.
Steps to reproduce
- Run
gsettings set org.cinnamon.muffin unredirect-fullscreen-windows true, then reboot (restarting Cinnamon only gives the same result). - Enable the driver indicator:
nvidia-settings --assign ShowGraphicsVisualIndicator=1 - Set single monitor geometry:
xrandr --fb 2560x1440 --output HDMI-0 --off --output DP-0 --pos 0x0(adjust output names). Then re-apply theAllow G-SYNC on monitor not validated as G-SYNC Compatiblecheckbox innvidia-settings, because changing the metamode clears it. - Run a fullscreen Vulkan client, for example:
mpv --fs --no-audio --vo=gpu-next --gpu-api=vulkan "av://lavfi:testsrc2=size=2560x1440:rate=100"(use--vo=gpu --gpu-api=vulkanon builds withoutgpu-next) - Read the indicator overlay in the corner of the video.
Expected behavior
The fullscreen window gets unredirected, the indicator shows FLIP, and G-SYNC can engage.
Additional information
This is related to #701 and #715, but it is a different case: there is no Wine involved, and the client is a Vulkan application, which according to the discussion in #715 is not affected by the 1x1 child window problem that PR works around. In this configuration, fullscreen unredirection simply never happens.
Activity
itz-me-zappex commentedon Aug 31, 2026
Here is a function that figures out whether window should be unredirected or not.
muffin/src/compositor/meta-surface-actor-x11.c
Lines 254 to 265 in 0b7a6b9
As you can see, there is a filter that prevents unredirect under some circumstances, and there was said that dumb redirect/unredirect is not what devs want. #715 (comment)
khameleonium commentedon Sep 27, 2026
Same thing here on Intel integrated graphics with a native Linux game, same Mint 22.3 / Muffin 6.6.3 / Cinnamon 6.6.9. So this doesn't look NVIDIA- or Wine-specific. On Intel it shows up as a clear FPS loss in every game. Below are my measurements, plus two related findings from the same investigation.
Setup: Intel UHD (CometLake-U GT2, i915, modesetting DDX + glamor), Mesa 25.2.8, Xorg 21.1.12, i5-10210U laptop, kernel 7.0. Single active monitor (HDMI 1920x1080@60, laptop panel off).
unredirect-fullscreen-windows = true. Only stock@cinnamon.orgapplets, and all desklets were removed for the last runs.1. Fullscreen games are never unredirected → 10–15 FPS lost
Test game: Half-Life 2, native 32-bit
hl2_linux(OpenGL/SDL, not Steam, no Wine), true fullscreen 1920x1080, in-game VSync off. The game window looks like a perfect unredirect candidate:Same machine, same game, same scene, 30 s averages (CPU = % of one core):
hl2_linuxNo thermal or power throttling, and the GPU is fully loaded in every session. The only real difference is the compositor. On the same Xorg, gnome-shell goes idle during the fullscreen game (as expected after unredirecting).
cinnamonkeeps working, and the game loses ~10–15 FPS. It's not just HL2: all my Steam games (native and Proton) run fine in GNOME and KDE (both X11 and Wayland sessions) and noticeably worse in Cinnamon.A/B toggle of the setting while the game is focused (3 s settle, then 10 s sample; samples discarded if focus was lost):
The setting makes no measurable difference: ~2 FPS in-game, and identical compositor load. Unlike the Wine case in #701, this is a native SDL window without the 1x1 child window problem, so it looks like the same "never unredirects" behaviour as in this issue.
2. A desklet refreshing every 3 s froze all games for 0.5–1 s every 3 s
Before the measurements above, every game in Cinnamon X11 froze completely (image stuck for 0.5–1 s, then smooth again) exactly every 3 seconds. This affected windowed and fullscreen games, native and Proton, even very light ones like Blobby Volley. Other desktops on the same machine had no such freezes.
The cause was the third-party desklet
commandResult@ZimiZoneswith a refresh interval of 3 s (delay = 3.0). On each refresh it runs 5 small commands throughUtil.spawn_asyncand redraws its text:The commands themselves are fast and run asynchronously. Still, removing the desklet completely fixed the freezes, while enabling
unredirect-fullscreen-windowsdid not help at all.I'm reporting this here because it points to the same root cause. Game frames on X11 keep going through Cinnamon's compositor even in fullscreen, so any stall in Cinnamon's main loop (an xlet update, GJS work) freezes the game's image. The desklet may not be written ideally, but a desktop widget shouldn't be able to freeze a fullscreen game like this. With working unredirection, this wouldn't happen.
3. Side note: the Wayland session gives clients only software rendering
We know "Cinnamon on Wayland" is experimental, but this seemed worth mentioning. On this machine, every client in that session gets llvmpipe. Muffin itself uses the GPU, but Xwayland has no DRI3 and Wayland clients can't find the render node. Games are a slideshow there.
My guess is that Mesa 25.x needs linux-dmabuf v4 feedback (or
wl_drm) to pick the device. I can open a separate issue for this if you prefer.I can run any additional tests or debug builds. If there's a way to log Muffin's unredirect decision, I'd be happy to capture it.
The investigation (measurement scripts, xprop and A/B tests, finding the desklet) was done with the help of Claude Code (Anthropic's AI assistant). I verified the in-game behaviour myself.