# 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/](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.

```bash
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):

```bash
~/.config/flameshot/flameshot.ini
```

```ini
[General]
disabledGrimWarning=true
useGrimAdapter=true
```

## The actual problem

Most examples use something like:

```ini
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`:

```ini
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

```ini
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

```ini
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.
