Looking for a GNOME-compatible screenshot annotation tool

I’ve been using Flameshot and love it, but it broke after I updated to GNOME 49. Has anyone managed to get it working on the newer version?

If not, I’m open to alternatives. My requirements are pretty simple: a keyboard shortcut that opens a screenshot GUI with annotation support, then the option to either copy to clipboard or save to disk.

There are several options:

  1. Roll back Flameshot to version 12.1.0

  2. Build Flameshot from source, where the issue has already been fixed: https://github.com/flameshot-org/flameshot

  3. Start using Gradia

1 Like

Having looked a lil’ upstream, I see plenty of evidence of people using flameshot 13.3.0 on GNOME 49. Given that you didn’t tell us what the issue is, I don’t think @Zellrus actually knows what has been fixed where or when.

Can you run flameshot in a terminal and share logs? As well as clarify what you mean by “broken” for that matter?

I’m on nixos version 25.11 using GNOME

Using the wayland setup in the wiki

$ flameshot --version
Flameshot v13.3.0 (-)Compiled with Qt 6.10.2

$ flameshot gui
flameshot: error: Unable to capture screen
flameshot: error: Unable to capture screen
QLayout: Attempting to add QLayout “” to SidePanelWidget “”, which already has a layout
flameshot: info: Screenshot aborted.
QThreadStorage: entry 2 destroyed before end of thread 0x55700c7ac2d0
QThreadStorage: entry 1 destroyed before end of thread 0x55700c7ac2d0

I also tried version 12.1.0

$ flameshot --version
Flameshot v12.1.0 (-)
Compiled with Qt 5.15.14

$ flameshot gui
Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
/nix/store/0fgzpacpdr0qhvk6k8sf1aawh7d5ghk5-gvfs-1.58.0/lib/gvfs/libgvfscommon.so: undefined symbol: g_variant_builder_init_static
Failed to load module: /nix/store/0fgzpacpdr0qhvk6k8sf1aawh7d5ghk5-gvfs-1.58.0/lib/gio/modules/libgvfsdbus.so
flameshot: error: Unable to capture screen
flameshot: error: Unable to capture screen
flameshot: info: Screenshot aborted.

$ QT_QPA_PLATFORM=wayland flameshot gui
Warning: Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run on Wayland anyway.
/nix/store/0fgzpacpdr0qhvk6k8sf1aawh7d5ghk5-gvfs-1.58.0/lib/gvfs/libgvfscommon.so: undefined symbol: g_variant_builder_init_static
Failed to load module: /nix/store/0fgzpacpdr0qhvk6k8sf1aawh7d5ghk5-gvfs-1.58.0/lib/gio/modules/libgvfsdbus.so
flameshot: error: Unable to capture screen
flameshot: error: Unable to capture screen
flameshot: info: Screenshot aborted.

I had claude try to help me debug and it seems like its associated to
this gnome ‘focused app’ restriction

Mar 14 18:55:18 johnny5 xdg-desktop-portal-gnome[427758]: Failed to associate portal window with parent window                               
  
Mar 14 18:55:18 johnny5 xdg-desktop-portal[427783]: Failed to show access dialog: GDBus.Error:org.freedesktop.DBus.Error.AccessDenied:       
GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: Only the focused app is allowed to show a system access dialog

This repeats on every attempt. The flow is:
1. Flameshot calls the Screenshot portal
2. The portal tries to show an access/permission dialog
3. GNOME blocks the dialog because flameshot isn't the focused window
4. Flameshot gets no screenshot data back and reports "Unable to capture screen"

Right, you can follow the instructions in this comment: Flameshot shows "Unable to capture screen" using flatpak on Gnome 45 · Issue #3546 · flameshot-org/flameshot · GitHub

Only way to fix this more intuitively would be adding some NixOS module that pre-grants this permission somehow, but I’m unsure that is possible. Seems like it would break the security model.

Ok I have a working solution.

The process of opening flameshot config and taking a screenshot didn’t end up working for me. The prompt never showed. I threw claude at the issue and got it working. Then I also ran into an issue with copying to clipboard which claude found a solution for as well. These were a bit over my head so not sure how reasonable this fix is, but it works. Here is a summary:

Fixing Flameshot on GNOME Wayland: Screenshot Permission + Clipboard

Two issues and their fixes for Flameshot on GNOME Wayland (tested with Flameshot 13.3.0, GNOME Shell 49, NixOS).

Issue 1: “Unable to capture screen”

Symptom: Pressing a keyboard shortcut to launch Flameshot fails with:

Failed to show access dialog: GDBus.Error:org.freedesktop.DBus.Error.AccessDenied:
Only the focused app is allowed to show a system access dialog

Root cause: An app_id mismatch in the XDG permission store. When gsd-media-keys launches a custom keybinding command, it creates a systemd scope based on the binary name — e.g. app-gnome-flameshot-gui-12345.scope. The portal extracts the app_id flameshot-gui from this. But the .desktop file registers as org.flameshot.Flameshot, so even if you’ve granted permission for org.flameshot.Flameshot, the portal doesn’t find a match for flameshot-gui. It tries to show an “Allow screenshots?” dialog, which GNOME blocks because the app launched in the background doesn’t have focus.

How to find your app_id: Trigger your keybinding, then run:

systemctl --user list-units --type=scope | grep flameshot

The scope name app-gnome-<APP_ID>-.scope reveals what the portal actually sees.

Fix: Grant the screenshot permission for the correct app_id:

dbus-send --session --print-reply=literal \
  --dest=org.freedesktop.impl.portal.PermissionStore \
  /org/freedesktop/impl/portal/PermissionStore \
  org.freedesktop.impl.portal.PermissionStore.SetPermission \
  string:'screenshot' boolean:true string:'screenshot' \
  string:'flameshot-gui' array:string:'yes'

This takes effect immediately (no reboot). The permission persists in ~/.local/share/flatpak/db/screenshot across reboots.

Issue 2: Clipboard doesn’t work

Symptom: After taking a screenshot and pressing Ctrl+C in Flameshot’s annotation UI, nothing ends up on the clipboard. Pasting into other apps does nothing.

Root cause: Flameshot’s built-in clipboard copy is broken on Wayland. This is true under both XWayland (Qt’s default on GNOME) and native Wayland (QT_QPA_PLATFORM=wayland). Confirmed still broken in 13.3.0.

Fix: Use --raw to pipe the screenshot through wl-copy instead. The --raw flag still shows the full annotation UI — it just outputs the final PNG to stdout when you’re done:

flameshot gui --raw | wl-copy

NixOS Wrapper (both fixes combined)

Here’s the wrapper script approach I use in my NixOS config. The dbus-send grants the portal permission on every invocation so it self-heals if the permission store is ever cleared:

let
  grantScreenshotPermission = appId: ''
    ${pkgs.dbus}/bin/dbus-send --session --print-reply=literal \
      --dest=org.freedesktop.impl.portal.PermissionStore \
      /org/freedesktop/impl/portal/PermissionStore \
      org.freedesktop.impl.portal.PermissionStore.SetPermission \
      string:'screenshot' boolean:true string:'screenshot' \
      string:'${appId}' array:string:'yes' 2>/dev/null || true
  '';

  flameshotGui = pkgs.writeShellScriptBin "flameshot-gui" ''
    ${grantScreenshotPermission "flameshot-gui"}
    ${pkgs.flameshot}/bin/flameshot gui --raw | ${pkgs.wl-clipboard}/bin/wl-copy
  '';
in
{
  # Bind to a custom keybinding via dconf
  "org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0" = {
    name = "Flameshot";
    command = "${flameshotGui}/bin/flameshot-gui";
    binding = "<Shift><Control>4";
  };
}

This likely affects any app launched via a GNOME custom keybinding where the binary name doesn’t match the .desktop file’s app_id.