Getting G-sync up and running on Linux with a Nvidia GPU and variable refresh rate monitor has some complications and very little documentation, so I thought I would share my first hand experience. I should mention that these findings are based on hardware G-sync (ie. not G-sync “compatible”).
The most important consideration here is the DE compositor, in particular the ability to re-direct fullscreen windows. Some compositors do this by default, for instance Mutter and Muffin “just works”. Others, like XFWM and Marco are incompatible and will need to replaced (with compton and compiz respectively), or else disabled - but that is not a great solution as it will likely cause screen tearing on the desktop.
Another requirement is a FPS cap/limiter, to ensure all frames rendered are within the G-sync range of the monitor, usually slightly below the maximum refresh rate. For example, if your monitor is 144 Hz set the cap to around 142 fps. I recommend MangoHud, which can be set as a run command within Lutris or Steam. See its Github page for instructions: https://github.com/flightlessmango/MangoHud
How to tell if G-sync is actually working? Open NVIDIA X Server Settings, navigate to “OpenGL settings” then tick the boxes “enable G-sync visual indicator” and “enable graphics API visual indicator”. Now launch a game and check the top corner for a text overlay, it should say “FLIP” and “G-SYNC”. Also notice the FPS indicator, it will be capping frames if MangoHud is running and configured.
Desktop environments/compositors confirmed to work with G-Sync;
KDE Plasma (KWin)
Config file variables;
unredir-if-possible = true; vsync = "opengl-swc"; refresh-rate = 0;
For XFCE users only;
Make sure that xfwm vblank mode is set to glx, by typing this in terminal…
xfconf-query -c xfwm4 -p /general/vblank_mode -t string -s "glx" --create
If you encounter flickering or lag on the desktop, add a new rule under “application profiles” in Nvidia control panel with the following settings…
This feature = process name (procname) Matches this string = xfwm4 Profile name = no_gsync Key = GLGSYNCAllowed Value = false