Gnome 48 screen recording broken

Hello,
After updating to NixOS 25.05 all screen recording and screen sharing on gnome is broken.
It creates single frame stream that doesnt change, and confuses video players.

In the meantime I will downgrade to NixOS 24.11 but if I am the only one experiencing this issue I’m willing to help with debug logs because I need this fixed for my work.

System Details Report


Report details

  • Date generated: 2025-09-18 01:52:42

Hardware Information:

  • Hardware Model: Micro-Star International Co., Ltd. MS-7C91
  • Memory: 32.0 GiB
  • Processor: AMD Ryzen™ 5 5600X × 12
  • Graphics: AMD Radeon™ RX 6700 XT
  • Disk Capacity: 6.0 TB

Software Information:

  • Firmware Version: A.53
  • OS Name: NixOS 25.05 (Warbler)
  • OS Build: 25.05.20250917.e9b7f2f
  • OS Type: 64-bit
  • GNOME Version: 48
  • Windowing System: Wayland
  • Kernel Version: Linux 6.12.47

I’ve not seen anyone else mention this specifically, but the wayland migration (which I believe took full effect on GNOME with 25.05, but it’s been a while) changes how screensharing is handled. Wayland in general doesn’t just let random applications capture any screen content they want, in an effort to thwart malware (and I suppose proprietary software that acts like malware).

Instead, the software needs to request permission via the xdg desktop portal spec, so that you can click a button that says “yes I want this application to record my screen”.

Unfortunately, despite literally a decade of pre-warning, not all applications got the memo. Most notably, the chrome project just barely started supporting wayland about a year ago, and builds of electron (which is based on chrome) still generally don’t flip the experimental flag for wayland support.

Distros are finally starting to turn off X11, and NixOS is among the first to do so, because, y’know, relatively cutting edge distro. This means that people finally start noticing that the software they use is dragging its feet - most likely what’s happening to you here.

So, please tell us which software you’re using and how you’re using it. Share your configuration while you’re at it. Most likely you need to turn on a few settings to make screensharing work on wayland, and override a package setting or two.

9:1 you’re using some electron-based proprietary thing (teams?) that’s just poorly maintained by people who don’t actually give a crap about Linux desktop support.

If you’re using something more exotic, run it in the terminal and share the output, and/or the output of journalctl --user -f (started before you launch the broken application).

My configuration is Files · desktop · Luxuride / nixos-config · GitLab
Just 25.05 in flake.nix when I had the problem.

This is the result of journalctl --user -f after launching gnome screenshot tool for screen recording

zář 18 12:49:57 LuxDesktop .kgx-wrapped[5989]: Unknown key gtk-modules in /home/lux/.config/gtk-4.0/settings.ini
zář 18 12:49:57 LuxDesktop .kgx-wrapped[5989]: Using GtkSettings:gtk-application-prefer-dark-theme with libadwaita is unsupported. Please use AdwStyleManager:color-scheme instead.
zář 18 12:49:57 LuxDesktop systemd[1322]: Started VTE child process 5998 launched by kgx process 5989.
zář 18 12:49:57 LuxDesktop steam[3765]: pressure-vessel-wrap[5855]: W: Found more than one possible libdrm data directory from provider
zář 18 12:49:57 LuxDesktop steam[3765]: pressure-vessel-wrap[5855]: W: "run/opengl-driver-32/share/drirc.d" is unlikely to appear in "/run/host"
zář 18 12:49:57 LuxDesktop steam[3765]: pressure-vessel-wrap[5855]: W: "run/opengl-driver/share/drirc.d" is unlikely to appear in "/run/host"
zář 18 12:49:57 LuxDesktop steam[3765]: pressure-vessel-wrap[5855]: W: Found more than one possible drirc.d data directory from provider
zář 18 12:49:57 LuxDesktop steam[3765]: pressure-vessel-wrap[5855]: W: "run/opengl-driver-32/share/drirc.d" is unlikely to appear in "/run/host"
zář 18 12:49:58 LuxDesktop steam[3765]: fsync: up and running.
zář 18 12:50:00 LuxDesktop steam[3765]: Fossilize INFO: Overriding serialization path: "/home/lux/.local/share/Steam/shader_cache_temp_dir_d3d11_64/fozpipelinesv6/steamapprun_pipeline_cache".
zář 18 12:50:03 LuxDesktop dbus-daemon[1380]: [session uid=1000 pid=1380] Activating service name='org.gnome.Shell.Screencast' requested by ':1.46' (uid=1000 pid=2484 comm="/nix/store/c377j5g57a925fgirj7ljwdcdqzgrd3k-gnome-")
zář 18 12:50:03 LuxDesktop dbus-daemon[1380]: [session uid=1000 pid=1380] Successfully activated service 'org.gnome.Shell.Screencast'
zář 18 12:50:03 LuxDesktop pipewire[1383]: pw.core: 0x55ecd68f76c0: error -22 for resource 2: unhandled format
zář 18 12:50:03 LuxDesktop pipewire[1383]: mod.client-node: 0x55ecd6cf20a0: error seq:22 -22 (unhandled format)
zář 18 12:50:03 LuxDesktop pipewire[1383]: pw.core: 0x55ecd68f76c0: error -22 for resource 2: port_set_param(Spa:Enum:ParamId:Format) failed: Invalid argument
zář 18 12:50:03 LuxDesktop pipewire[1383]: mod.client-node: 0x55ecd6cf20a0: error seq:22 -22 (port_set_param(Spa:Enum:ParamId:Format) failed: Invalid argument)
zář 18 12:50:07 LuxDesktop steam[3765]: Fossilize INFO: Setting autogroup scheduling.
zář 18 12:50:08 LuxDesktop steam[3765]: pressure-vessel-wrap[6292]: W: Found more than one possible libdrm data directory from provider
zář 18 12:50:08 LuxDesktop steam[3765]: pressure-vessel-wrap[6292]: W: "run/opengl-driver-32/share/drirc.d" is unlikely to appear in "/run/host"
zář 18 12:50:08 LuxDesktop steam[3765]: pressure-vessel-wrap[6292]: W: "run/opengl-driver/share/drirc.d" is unlikely to appear in "/run/host"
zář 18 12:50:08 LuxDesktop steam[3765]: pressure-vessel-wrap[6292]: W: Found more than one possible drirc.d data directory from provider
zář 18 12:50:08 LuxDesktop steam[3765]: pressure-vessel-wrap[6292]: W: "run/opengl-driver-32/share/drirc.d" is unlikely to appear in "/run/host"
zář 18 12:50:08 LuxDesktop steam[3765]: fsync: up and running.
zář 18 12:50:09 LuxDesktop .org.gnome.Shel[6209]: Unknown key gtk-modules in /home/lux/.config/gtk-4.0/settings.ini
zář 18 12:50:10 LuxDesktop steam[3765]: Fossilize INFO: Overriding serialization path: "/home/lux/.local/share/Steam/shader_cache_temp_dir_d3d12_64/fozpipelinesv6/steamapprun_pipeline_cache".

I know what desktop portal is and don’t expect x11 screen recording to work.

I have downgraded back to NixOS 24.11 and when running the screenshot tool screen recording, I don’t see the lines

zář 18 12:50:03 LuxDesktop pipewire[1383]: pw.core: 0x55ecd68f76c0: error -22 for resource 2: unhandled format
zář 18 12:50:03 LuxDesktop pipewire[1383]: mod.client-node: 0x55ecd6cf20a0: error seq:22 -22 (unhandled format)
zář 18 12:50:03 LuxDesktop pipewire[1383]: pw.core: 0x55ecd68f76c0: error -22 for resource 2: port_set_param(Spa:Enum:ParamId:Format) failed: Invalid argument
zář 18 12:50:03 LuxDesktop pipewire[1383]: mod.client-node: 0x55ecd6cf20a0: error seq:22 -22 (port_set_param(Spa:Enum:ParamId:Format) failed: Invalid argument)

Full 24.11 log with working screen recording on same system and config

zář 18 13:09:15 LuxDesktop .kgx-wrapped[5641]: Using GtkSettings:gtk-application-prefer-dark-theme with libadwaita is unsupported. Please use AdwStyleManager:color-scheme instead.
zář 18 13:09:15 LuxDesktop systemd[1324]: Started VTE child process 5649 launched by kgx process 5641.
zář 18 13:09:21 LuxDesktop systemd[1324]: app-gnome-firefox-2735.scope: Consumed 26.798s CPU time, 1.7G memory peak.
zář 18 13:09:23 LuxDesktop steam[3957]: Removing HIDAPI device 'Valve Index Controller' VID 0x28de, PID 0x2300, bluetooth 0, version 512, serial LHR-2E0B0195, interface 0, interface_class 0, interface_subclass 0, interface_protocol 0, usage page 0xff00, usage 0x0001, path = /dev/hidraw1, driver = NONE (DISABLED)
zář 18 13:09:23 LuxDesktop steam[3957]: Removing HIDAPI device 'Valve Index Controller' VID 0x28de, PID 0x2300, bluetooth 0, version 512, serial LHR-2E0B0195, interface 1, interface_class 0, interface_subclass 0, interface_protocol 0, usage page 0xff00, usage 0x0001, path = /dev/hidraw2, driver = NONE (DISABLED)
zář 18 13:09:23 LuxDesktop steam[3957]: Removing HIDAPI device 'Valve Index Controller' VID 0x28de, PID 0x2300, bluetooth 0, version 512, serial LHR-2E0B0195, interface 2, interface_class 0, interface_subclass 0, interface_protocol 0, usage page 0xff00, usage 0x0001, path = /dev/hidraw3, driver = NONE (DISABLED)
zář 18 13:09:23 LuxDesktop steam[3957]: Removing HIDAPI device 'Valve Software Watchman Dongle' VID 0x28de, PID 0x2101, bluetooth 0, version 1, serial 3A1A856DA6, interface 0, interface_class 0, interface_subclass 0, interface_protocol 0, usage page 0xff00, usage 0x0001, path = /dev/hidraw12, driver = NONE (DISABLED)
zář 18 13:09:23 LuxDesktop steam[3957]: Removing HIDAPI device 'Valve Software Watchman Dongle' VID 0x28de, PID 0x2101, bluetooth 0, version 1, serial 7A479B36ED, interface 0, interface_class 0, interface_subclass 0, interface_protocol 0, usage page 0xff00, usage 0x0001, path = /dev/hidraw13, driver = NONE (DISABLED)
zář 18 13:09:23 LuxDesktop steam[3957]: Removing HIDAPI device 'Valve Software Watchman Dongle' VID 0x28de, PID 0x2101, bluetooth 0, version 1, serial 9A76FA7701, interface 0, interface_class 0, interface_subclass 0, interface_protocol 0, usage page 0xff00, usage 0x0001, path = /dev/hidraw14, driver = NONE (DISABLED)
zář 18 13:09:23 LuxDesktop steam[3957]: [2025-09-18 13:09:23] Shutdown
zář 18 13:09:27 LuxDesktop systemd[1324]: app-gnome-steam-2833.scope: Consumed 4min 39.913s CPU time, 5.1G memory peak.
zář 18 13:09:29 LuxDesktop systemd[1324]: app-gnome-vesktop-2808.scope: Consumed 18.689s CPU time, 1.3G memory peak.
zář 18 13:09:30 LuxDesktop dbus-daemon[1344]: [session uid=1000 pid=1344] Activating service name='org.gnome.Shell.Screencast' requested by ':1.45' (uid=1000 pid=2527 comm="/nix/store/q1wrj6rv3bvl4cyn5p30wb8h9b2m14wn-gnome-" label="kernel")
zář 18 13:09:30 LuxDesktop dbus-daemon[1344]: [session uid=1000 pid=1344] Successfully activated service 'org.gnome.Shell.Screencast'
zář 18 13:09:34 LuxDesktop .gnome-shell-wr[2527]: surface_state_changed: assertion 'wl_window->has_last_sent_configuration' failed
zář 18 13:09:37 LuxDesktop .org.gnome.Shel[5999]: Unknown key gtk-modules in /home/lux/.config/gtk-4.0/settings.ini
zář 18 13:09:45 LuxDesktop systemd[1324]: Started Application launched by gnome-shell.
zář 18 13:09:50 LuxDesktop firefox.desktop[6229]: [Child 6229, MediaDecoderStateMachine #1] WARNING: Decoder=7fa05f994d00 Decode error: NS_ERROR_OUT_OF_MEMORY (0x8007000e) - ProcessDecode: file /build/firefox-140.0.1/dom/media/MediaDecoderStateMachineBase.cpp:168

and screen recording works normally

Awesome, that helps :slight_smile:

Yep, those immediately stand out. Looks like a codec support issue of some kind; either whatever library ends up backing this doesn’t support the codec an application is asking for anymore or some kind of caching is getting in the way.

IIRC gstreamer has a directory in ~/.cache, you could try deleting that just as a first idea, I’ve seen that work before, but it’s a shot in the dark.

I would suspect my graphics driver using something like HDR, and pipewire not supporting that. A quick glance at pipewire issues doesn’t reveal anything. Do you get other results when attempting this with Firefox?

Deleting ~/.cache didn’t solve the issue.

I have tried it with firefox, and same problem, but no pipewire error.

zář 18 17:17:32 LuxDesktop systemd[1342]: Started Application launched by gnome-shell.
zář 18 17:17:33 LuxDesktop firefox.desktop[5871]: [Child 5871, MediaDecoderStateMachine #1] WARNING: Decoder=7fc314876300 Decode error: NS_ERROR_OUT_OF_MEMORY (0x8007000e) - ProcessDecode: file /build/firefox-143.0/dom/media/MediaDecoderStateMachineBase.cpp:168
zář 18 17:17:47 LuxDesktop firefox.desktop[5814]: libva info: VA-API version 1.22.0
zář 18 17:17:47 LuxDesktop firefox.desktop[5814]: libva info: User environment variable requested driver 'radeonsi'
zář 18 17:17:47 LuxDesktop firefox.desktop[5814]: libva info: Trying to open /run/opengl-driver/lib/dri/radeonsi_drv_video.so
zář 18 17:17:47 LuxDesktop firefox.desktop[5814]: libva info: Found init function __vaDriverInit_1_22
zář 18 17:17:47 LuxDesktop firefox.desktop[5814]: libva info: va_openDriver() returns 0
zář 18 17:17:57 LuxDesktop .xdg-desktop-po[3068]: Failed to associate portal window with parent window 
zář 18 17:17:58 LuxDesktop pipewire[1384]: spa.alsa: set_hw_params: Connection timed out
zář 18 17:17:58 LuxDesktop pipewire[1384]: pw.node: (alsa_input.usb-R__DE_Microphones_R__DE_NT-USB_Mini_BECFA604-00.mono-fallback-55) suspended -> error (Start error: Connection timed out)
zář 18 17:18:02 LuxDesktop .gnome-shell-wr[2487]: Can't update stage views actor input only grab actor [ClutterInputOnlyActor] is on because it needs an allocation.
zář 18 17:18:08 LuxDesktop firefox.desktop[5676]: 'loop->recurse > 0' failed at ../src/pipewire/thread-loop.c:425 pw_thread_loop_wait()
zář 18 17:18:47 LuxDesktop .xdg-desktop-po[3068]: Failed to associate portal window with parent window 
zář 18 17:19:10 LuxDesktop firefox.desktop[5676]: 'loop->recurse > 0' failed at ../src/pipewire/thread-loop.c:425 pw_thread_loop_wait()
zář 18 17:19:13 LuxDesktop .xdg-desktop-po[3068]: Failed to associate portal window with parent window 
zář 18 17:19:16 LuxDesktop .gnome-shell-wr[2487]: Error blitting to screencast framebuffer: cogl_framebuffer_blit premult mismatch.
zář 18 17:19:16 LuxDesktop .gnome-shell-wr[2487]: Could not destroy EGLImage attached to GBM BO: One or more argument values are invalid.
zář 18 17:19:16 LuxDesktop .gnome-shell-wr[2487]: Error blitting to screencast framebuffer: cogl_framebuffer_blit premult mismatch.
zář 18 17:19:16 LuxDesktop .gnome-shell-wr[2487]: Could not destroy EGLImage attached to GBM BO: One or more argument values are invalid.
zář 18 17:19:17 LuxDesktop .gnome-shell-wr[2487]: Error blitting to screencast framebuffer: cogl_framebuffer_blit premult mismatch.
zář 18 17:19:17 LuxDesktop .gnome-shell-wr[2487]: Could not destroy EGLImage attached to GBM BO: One or more argument values are invalid.
zář 18 17:19:17 LuxDesktop .gnome-shell-wr[2487]: Error blitting to screencast framebuffer: cogl_framebuffer_blit premult mismatch.
zář 18 17:19:17 LuxDesktop .gnome-shell-wr[2487]: Could not destroy EGLImage attached to GBM BO: One or more argument values are invalid.
zář 18 17:19:17 LuxDesktop .gnome-shell-wr[2487]: Error blitting to screencast framebuffer: cogl_framebuffer_blit premult mismatch.
zář 18 17:19:17 LuxDesktop .gnome-shell-wr[2487]: Could not destroy EGLImage attached to GBM BO: One or more argument values are invalid.
zář 18 17:19:17 LuxDesktop .gnome-shell-wr[2487]: Error blitting to screencast framebuffer: cogl_framebuffer_blit premult mismatch.
zář 18 17:19:26 LuxDesktop firefox.desktop[5676]: 'loop->recurse > 0' failed at ../src/pipewire/thread-loop.c:425 pw_thread_loop_wait()
zář 18 17:19:26 LuxDesktop .gnome-shell-wr[2487]: Could not destroy EGLImage attached to GBM BO: One or more argument values are invalid.
zář 18 17:19:31 LuxDesktop .xdg-desktop-po[3068]: Failed to associate portal window with parent window 
zář 18 17:19:58 LuxDesktop firefox.desktop[5676]: 'loop->recurse > 0' failed at ../src/pipewire/thread-loop.c:425 pw_thread_loop_wait()
zář 18 17:20:06 LuxDesktop .kgx-wrapped[5341]: vkAcquireNextImageKHR(): A swapchain no longer matches the surface properties exactly, but can still be used to present to the surface successfully. (VK_SUBOPTIMAL_KHR) (1000001003)
zář 18 17:20:07 LuxDesktop .xdg-desktop-po[3068]: Failed to associate portal window with parent window 
zář 18 17:20:10 LuxDesktop .kgx-wrapped[5341]: vkAcquireNextImageKHR(): A swapchain no longer matches the surface properties exactly, but can still be used to present to the surface successfully. (VK_SUBOPTIMAL_KHR) (1000001003)
zář 18 17:20:10 LuxDesktop .kgx-wrapped[5341]: vkAcquireNextImageKHR(): A swapchain no longer matches the surface properties exactly, but can still be used to present to the surface successfully. (VK_SUBOPTIMAL_KHR) (1000001003)
zář 18 17:20:16 LuxDesktop firefox.desktop[5676]: 'loop->recurse > 0' failed at ../src/pipewire/thread-loop.c:425 pw_thread_loop_wait()
zář 18 17:20:24 LuxDesktop .xdg-desktop-po[3068]: Failed to associate portal window with parent window 
zář 18 17:20:24 LuxDesktop .kgx-wrapped[5341]: vkAcquireNextImageKHR(): A swapchain no longer matches the surface properties exactly, but can still be used to present to the surface successfully. (VK_SUBOPTIMAL_KHR) (1000001003)
zář 18 17:20:24 LuxDesktop .kgx-wrapped[5341]: vkAcquireNextImageKHR(): A swapchain no longer matches the surface properties exactly, but can still be used to present to the surface successfully. (VK_SUBOPTIMAL_KHR) (1000001003)
zář 18 17:20:26 LuxDesktop pipewire[1384]: pw.node: (alsa_output.usb-R__DE_Microphones_R__DE_NT-USB_Mini_BECFA604-00.analog-stereo-54) graph xrun (0 suppressed)
zář 18 17:20:28 LuxDesktop pipewire[1384]: pw.node: (alsa_output.usb-R__DE_Microphones_R__DE_NT-USB_Mini_BECFA604-00.analog-stereo-54) graph xrun (189 suppressed)
zář 18 17:20:36 LuxDesktop firefox.desktop[5676]: 'loop->recurse > 0' failed at ../src/pipewire/thread-loop.c:425 pw_thread_loop_wait()
zář 18 17:20:52 LuxDesktop .xdg-desktop-po[3068]: Failed to associate portal window with parent window 
zář 18 17:20:53 LuxDesktop .kgx-wrapped[5341]: vkAcquireNextImageKHR(): A swapchain no longer matches the surface properties exactly, but can still be used to present to the surface successfully. (VK_SUBOPTIMAL_KHR) (1000001003)
zář 18 17:20:53 LuxDesktop .kgx-wrapped[5341]: vkAcquireNextImageKHR(): A swapchain no longer matches the surface properties exactly, but can still be used to present to the surface successfully. (VK_SUBOPTIMAL_KHR) (1000001003)
zář 18 17:20:56 LuxDesktop .kgx-wrapped[5341]: vkAcquireNextImageKHR(): A swapchain no longer matches the surface properties exactly, but can still be used to present to the surface successfully. (VK_SUBOPTIMAL_KHR) (1000001003)
zář 18 17:21:07 LuxDesktop firefox.desktop[5676]: 'loop->recurse > 0' failed at ../src/pipewire/thread-loop.c:425 pw_thread_loop_wait()

And this is when I run my own application that records using Desktop Portal → Gstreamer using pipewire FD, no more logs on the screen recording.

zář 18 17:25:45 LuxDesktop .xdg-desktop-po[3068]: Failed to associate portal window with parent window 
zář 18 17:25:48 LuxDesktop .kgx-wrapped[5341]: vkAcquireNextImageKHR(): A swapchain no longer matches the surface properties exactly, but can still be used to present to the surface successfully. (VK_SUBOPTIMAL_KHR) (1000001003)
zář 18 17:25:49 LuxDesktop .kgx-wrapped[5341]: vkAcquireNextImageKHR(): A swapchain no longer matches the surface properties exactly, but can still be used to present to the surface successfully. (VK_SUBOPTIMAL_KHR) (1000001003)

I fixed it by deleting ~/.config/systemd/ thanks to suggestions in https://github.com/NixOS/nixpkgs/issues/275431