GTK4 native apps on Gnome show blank windows with Mesa 25.1.3-417.1 (Haswell graphics)

With snapshot 20250610 which includes Mesa 25.1.3-417.1 native GTK4 Gnome apps like Nautilus, Console, System Monitor etc. show a blank window on Wayland session.
That might be limited to Intel Haswell graphics (which has a known incomplete Vulkan implementation) and possibly older GPUs.
Available workarounds:

  • use an Xorg session if you still have one (the Vulkan renderer is the default only for the Wayland session);
  • write GSK_RENDERER=nglto /etc/environment (create that file if you have not one);
  • for temporary debugging use e.g. the old gnome-terminal or XTerm and issue for instance GSK_RENDERER=ngl nautilus (or the name of the GTK4 app you need).
1 Like

I have a nvidia 750ti and gnome-system-monitor works fine … I don’t have the gnome-desktop pattern installed so I only have what’s been pulled by dependencies (no nautilus/console)

If you are lucky, you have hybrid graphics and one of your GPUs has a better support for Vulkan, you can force the use of that GPU.
For instance on this system:

bruno@LT-B:~> MESA_VK_DEVICE_SELECT=list vulkaninfo
MESA-INTEL: warning: Haswell Vulkan support is incomplete
selectable devices:
  GPU 0: 10de:139b "NVIDIA GeForce GTX 960M" discrete GPU 0000:01:00.0
  GPU 1: 8086:416 "Intel(R) HD Graphics 4600 (HSW GT2)" integrated GPU 0000:00:02.0
  GPU 2: 10005:0 "llvmpipe (LLVM 20.1.6, 256 bits)" CPU 0000:00:00.0
bruno@LT-B:~>

and the Nvidia definitely has a better vulkan support, so I can workaround by writing /etc/environment so that it reads:

bruno@LT-B:~> cat /etc/environment
MESA_VK_DEVICE_SELECT="10de:139b!"
bruno@LT-B:~>

(please adjust to the vendorID:deviceID from your system) and still use vulkan instead of openGL for GTK4 apps.
Please note that on this system I see:

bruno@LT-B:~> env |grep _VK_
MESA_VK_DEVICE_SELECT=10de:139b!
__VK_LAYER_NV_optimus=NVIDIA_only
bruno@LT-B:~>

and the second line was apparently enough until the last Mesa upgrade, but now a forced selection is apparently needed.
See mesa3d docs for details.