---
title: "How to Take Screenshots in Hyprland"
description: "Screenshots in Hyprland with grim, slurp and wl-clipboard: region and full-screen binds, saving to a timestamped file, and annotating with swappy."
url: "https://knng.de/blog/hyprland-screenshots/"
published: "2025-11-15"
updated: "2026-07-21"
series: "Arch Linux and Hyprland on a Surface Pro 7"
---

# How to Take Screenshots in Hyprland

## Preface

Taking screenshots in Hyprland is straightforward, it just takes a few small tools.  
This post starts with a region screenshot to the clipboard and adds saving and annotating on top.

---

### The tools

* **grim** - Screenshot utility for Wayland
* **slurp** - Region selection tool for Wayland compositors
* **wl-clipboard** - Clipboard utilities for Wayland
* **swappy** - Annotation tool, only needed for the last part

```bash
sudo pacman -S grim slurp wl-clipboard swappy
```

---

### Region to the clipboard

I use the `PRINT` key as my screenshot hotkey.  
Add the following to your `hyprland.conf`:

```ini
bind = , PRINT, exec, grim -g "$(slurp)" - | wl-copy
```

This lets you select a region on the screen and copies the screenshot to your clipboard.

---

### Saving to a file

For screenshots you want to keep, a small script saves them with a timestamp and copies them too:

```bash
mkdir -p ~/.local/bin
nano ~/.local/bin/screenshot
```

```bash
#!/bin/bash
dir=~/Pictures/Screenshots
mkdir -p "$dir"
file="$dir/$(date +%Y-%m-%d_%H-%M-%S).png"

if [ "$1" = "region" ]; then
  geometry=$(slurp) || exit 0
  grim -g "$geometry" "$file"
else
  grim "$file"
fi

wl-copy < "$file"
```

```bash
chmod +x ~/.local/bin/screenshot
```

> **Info:** `slurp` exits with an error when you cancel the selection with `Esc`, so the script just stops instead of saving an empty file.

The binds:

```ini
bind = SHIFT, PRINT, exec, ~/.local/bin/screenshot region
bind = CTRL, PRINT, exec, ~/.local/bin/screenshot
```

`SHIFT+PRINT` saves a region, `CTRL+PRINT` the whole screen.

---

### Annotating with swappy

To draw arrows, boxes or text on a screenshot before sharing it:

```ini
bind = $mainMod, PRINT, exec, grim -g "$(slurp)" - | swappy -f -
```

Select a region and swappy opens with it.  
From there you can copy the result to the clipboard or save it.

Cheers.

