Fixing Flameshot on Hyprland (Wayland & ArchLinux)

Flameshot is one of those tools I end up using all the time. It is simple, lightweight, and just works for quick screenshots. You can capture, annotate, blur sensitive data, and copy straight to the clipboard without thinking too much.
For pentesting, daily work, or even during certifications, it fits perfectly. It is fast, minimal, and does not get in the way.
That is why this issue was annoying enough to dig into.
I ran into this while using Hyprland (Wayland) with a mixed monitor setup and Flameshot just refused to behave. The overlay was cut, offset, or only covering part of the screens.
This is not random. It comes from how Flameshot handles Wayland and multi-monitor layouts.
The official docs mention the basics (XDG portals, grim, etc): https://flameshot.org/docs/guide/wayland-help/
That is necessary, but not enough when your layout is not clean.
My setup (example)
This is just my case, you will need to adapt it:
one horizontal monitor (1920x1080)
one vertical monitor (1080x1920, rotated)
layout offset with negative Y
With this, Flameshot fails to understand the real screen space.
First, make sure Wayland basics are covered
Hyprland needs XDG portals so apps can capture the screen.
sudo pacman -S xdg-desktop-portal xdg-desktop-portal-hyprland
Also make sure Flameshot is using grim (this is in the docs, but easy to miss):
~/.config/flameshot/flameshot.ini
[General]
disabledGrimWarning=true
useGrimAdapter=true
The actual problem
Most examples use something like:
size = (monitor_w*2) (monitor_h)
This only works if:
monitors have the same resolution
no rotation
no weird offsets
Once you break that, it stops working.
The fix (manual windowrule)
Instead of trusting Flameshot, just define the real screen area yourself.
hyprland.conf:
windowrule {
name = flameshot-multi-display-fix
match:class = flameshot
float = on
pin = on
move = 0 -420
size = 3000 1920
rounding = 0
border_size = 0
animation = fade
}
What matters here
move
move = 0 -420
This sets where the capture area starts. In my case, one monitor sits higher, so I needed a negative Y. You need to look at your layout and match the highest point across all monitors.
size
size = 3000 1920
This is the full bounding box of everything combined.
My math:
width = 1920 (main) + 1080 (vertical) = 3000
height = total vertical span = 1920
Yours will be different. Think in terms of total canvas, not individual screens.
Why this works
Flameshot is not aware of complex layouts on Wayland. Instead of trying to make it figure it out, you give it the exact area it should cover. It looks a bit manual, but it is stable.





