Share

High Refresh Rate and Variable Refresh Rate (VRR) with Xorg

The evolution of display technology in recent years has brought with it a surge of interest in high refresh rate monitors and adaptive refresh mechanisms, such as Variable Refresh Rate (VRR), among Linux desktop users. While these features have been widely adopted and marketed in the Windows gaming ecosystem, their support and integration in Linux, particularly in Xorg-based environments, have followed a more gradual, community-driven path. The X Window System, originally conceived in an era when 60 Hz CRTs were standard and graphics hardware was orders of magnitude simpler, was never designed with modern adaptive refresh logic in mind. However, the robustness and extensibility of Xorg’s modular architecture have enabled significant progress through driver-level enhancements, kernel development, and careful coordination with desktop environments and compositors. Despite its age, Xorg can now reasonably support both high refresh rate and VRR workflows, though achieving stable and smooth behavior still depends on numerous interdependent factors.

At the heart of high refresh rate support in Xorg lies the relationship between the kernel DRM subsystem, the display drivers, and the desktop compositor. When a user connects a 120 Hz or 144 Hz monitor, assuming the GPU driver supports the desired timing, the X server can negotiate the higher mode and allow rendering at elevated refresh frequencies. This is made possible via Extended Display Identification Data (EDID) that the monitor exposes, which the kernel parses to make available refresh modes. The user can then select among these using xrandr, the standard Xorg utility for manipulating screen modes on-the-fly. However, unlike Wayland, which supports synchronized frame callbacks and atomic presentation, Xorg lacks a unified mechanism to guarantee that clients are rendering at the native refresh rate. Instead, the actual perceived fluidity depends on the cooperation of the window manager, compositor, and the rendering behavior of each application. This means that even if the desktop is technically running at 144 Hz, a misbehaving compositor or legacy application could introduce frame drops or micro-stuttering, breaking the expected fluidity.

To effectively harness high refresh rates under Xorg, the GPU driver must not only support the desired modes but also manage buffer swaps efficiently to match the refresh cadence. The open-source AMD and Intel drivers, integrated with the kernel’s Direct Rendering Manager (DRM) subsystem, have matured to support high refresh rate output on most modern hardware. They often expose the appropriate timings automatically and rely on Xorg’s modesetting driver to make these modes accessible. The NVIDIA proprietary driver, though using its own stack, also provides extensive support for high refresh displays, albeit with different configuration semantics. Where things become intricate is in how these frames are actually composed and presented to the screen. Compositors like mutter, kwin_x11, or picom introduce an additional layer of timing control, and their default settings often assume a 60 Hz baseline. Without explicit configuration, many compositors may throttle their internal redraw logic, effectively negating the benefits of a higher refresh panel. For instance, a misconfigured compositor might cap the redraw interval to 16.67 milliseconds, regardless of whether the monitor can update every 6.94 milliseconds at 144 Hz.

Variable Refresh Rate introduces an entirely new dimension to refresh timing, offering the display system the flexibility to match the monitor’s refresh timing with the GPU’s frame output in real-time. This allows the monitor to wait for the GPU to finish rendering a frame before updating, eliminating tearing and reducing input latency without needing to rely on fixed VSync intervals. On Linux, VRR support is primarily made possible through the DRM kernel interface, which exposes VRR capabilities to userspace. For Xorg users, however, this support is not uniformly exposed, and enabling VRR can be a nuanced process. NVIDIA, AMD, and Intel drivers each have their mechanisms for enabling VRR, often requiring kernel parameters, Xorg configuration directives, and sometimes proprietary extensions or tools like nvidia-settings or xset.

For instance, AMD users on supported hardware can leverage FreeSync via the open-source amdgpu driver, provided the kernel, Mesa, and compositor cooperate to allow it. The process typically involves ensuring the appropriate VariableRefresh property is set via xrandr and that the screen is not artificially throttled by the compositor. Similarly, NVIDIA’s proprietary drivers support G-SYNC-compatible VRR through extensions that can be toggled in configuration panels or through configuration files. Intel’s support for VRR is more recent and remains tied closely to the development of newer kernel and Mesa versions. Despite these advancements, VRR on Xorg remains a fragile construct. Unlike Wayland, where protocols such as presentation-time are built to support adaptive sync explicitly, Xorg relies heavily on driver-specific behavior and lacks an overarching standard for managing VRR states between clients and the display server.

One of the more subtle challenges in enabling and testing VRR on Xorg is diagnosing whether the refresh rate is actively changing. Standard tools like xrandr will indicate if a display is VRR-capable and whether the feature is enabled, but they do not provide dynamic readouts of refresh variation. As a result, users often rely on indirect observation—such as reduced stuttering in games, or test patterns from tools like glxgears—to infer whether VRR is functioning. Additionally, VRR often requires fullscreen exclusive mode to work properly on Xorg, a condition that many windowed or borderless applications fail to meet. This requirement contrasts with newer Wayland implementations, where VRR can be applied more gracefully even in non-fullscreen contexts. As a result, power users looking to enable VRR on Xorg frequently resort to scripting, patching compositors, or disabling them altogether to allow direct scanout by the X server to the GPU pipeline.

Compositors further complicate the implementation of VRR and high refresh features. Most compositors redraw frames at a fixed interval, and unless specifically patched or configured, will disregard the presence of a high refresh display. Some users overcome this limitation by enabling features like “unredirect full-screen windows,” allowing games and full-screen applications to bypass the compositor and interface directly with the X server and GPU. This setup allows for a closer coupling between application and hardware, improving the odds that VRR will function correctly. However, such bypassing can break other desktop features such as notifications, overlays, or screen recording. Furthermore, switching between virtual desktops or dragging windows across monitors with mismatched refresh rates can lead to inconsistencies or rendering artifacts if the compositor is not designed to adaptively manage redraw intervals.

Despite these technical hurdles, tuning Xorg to work with high refresh and VRR displays is entirely possible, and for many users, the end result is a dramatically smoother and more responsive experience. The road to optimization involves carefully balancing kernel support, driver configuration, Xorg modesetting, and compositor behavior. Ensuring that VSync is appropriately managed—either via driver settings or compositor VBlank sync—is essential to prevent tearing without compromising responsiveness. On high refresh rate setups, users must also verify that desktop toolkits and applications are capable of rendering at higher frame rates; otherwise, UI elements may remain sluggish or janky despite the monitor’s capabilities. Toolkits like GTK and Qt are increasingly aware of refresh timing and provide better support for smooth rendering, especially when paired with hardware-accelerated compositing and optimized drawing routines.

Looking ahead, while Xorg continues to serve as the default display server for many distributions, it is clear that its architecture places inherent limits on how gracefully it can support future display innovations like VRR and ultra-high refresh rates. The lack of a unified timing model across clients and the absence of protocol-level support for frame pacing coordination make it difficult to guarantee consistent results. Nevertheless, with the right configuration and hardware, Xorg remains capable of delivering impressive visual performance, especially for users willing to invest time in learning its nuances. The maturity of open-source drivers, the flexibility of compositors like picom and kwin_x11, and the wealth of community-shared configuration knowledge make it feasible to tailor a system that rivals even commercial platforms in graphical fluidity.

As the Linux ecosystem continues its gradual shift toward Wayland, it’s likely that some of these complexities will be addressed at a deeper level, making VRR and high refresh support more automatic and robust. But until that transition is universally complete, Xorg users who demand the best from their display hardware can still extract exceptional results by understanding and harnessing the full breadth of what Xorg, DRM, and modern compositors have to offer. The learning curve may be steep, but the reward is a desktop experience that feels both cutting-edge and under full user control—hallmarks of what makes Linux uniquely powerful.