Weird Print Screen behavior

Hyprland version
➜  ~ hyprctl version
Hyprland 0.52.1 built from branch v0.52.1 at commit 967c3c7404d4fa00234e29c70df3e263386d2597 clean (version: bump to 0.52.1).
Date: Sun Nov 9 23:31:36 2025
Tag: v0.52.1, commits: 6564

Libraries:
Hyprgraphics: built against 0.3.0, system has 0.3.0
Hyprutils: built against 0.10.2, system has 0.10.2
Hyprcursor: built against 0.1.13, system has 0.1.13
Hyprlang: built against 0.6.3, system has 0.6.3
Aquamarine: built against 0.9.5, system has 0.9.5

no flags were set

Describe your issue / feature…

I never used Print Screen before this, but I wanted to set up keybinds for screenshots, so I only incidentally discovered this weird behavior: When I hit the Print Screen key, it moves the currently focused window to workspace 4, just like hitting Super + Shift + 4, which is my normal key combination for this. If it matters, I have a German keyboard.

Here’s the keyboard section from my hyprland.conf:

input {
    kb_layout = de
    kb_variant = nodeadkeys 
    kb_model = pc105
    kb_options =
    kb_rules =

    follow_mouse = 1

    sensitivity = 0 # -1.0 - 1.0, 0 means no modification.

    touchpad {
        natural_scroll = false
    }
}

I’ve tried leaving kb_variant or kb_model or both blank, to no avail.

Here’s the output of wev after spawning it through a terminal, pressing Print Screen and closing the window with Super + c:

[ 4: wl_seat] name: Hyprland
[ 4: wl_seat] capabilities: pointer keyboard
[ 11: xdg_toplevel] configure: width: 960; height: 525
tiled-left tiled-right tiled-top tiled-bottom
[ 10: xdg_surface] configure: serial: 91966
[ 16: wl_keyboard] keymap: format: 1 (xkb v1), size: 36166
[ 16: wl_keyboard] repeat_info: rate: 25 keys/sec; delay: 600 ms
[ 11: xdg_toplevel] configure: width: 960; height: 525
tiled-left tiled-right tiled-top tiled-bottom maximized
[ 16: wl_keyboard] enter: serial: 91971; surface: 3
sym: Return (65293), utf8: ‘\r’
[ 16: wl_keyboard] modifiers: serial: 91972; group: 0
depressed: 00000000
latched: 00000000
locked: 00000000
[ 12: wl_data_device] data_offer: id: 4278190080
[4278190080: wl_data_offer] source_actions: actions: 7 (copy, move, ask)
[4278190080: wl_data_offer] action: dnd_action: 2 (move)
[4278190080: wl_data_offer] offer: mime_type: application/glfw+clipboard-194057
[4278190080: wl_data_offer] offer: mime_type: TEXT
[4278190080: wl_data_offer] offer: mime_type: STRING
[4278190080: wl_data_offer] offer: mime_type: UTF8_STRING
[4278190080: wl_data_offer] offer: mime_type: text/plain;charset=utf-8
[4278190080: wl_data_offer] offer: mime_type: text/plain
[ 12: wl_data_device] selection: id: 4278190080
[ 11: xdg_toplevel] configure: width: 960; height: 525
tiled-left tiled-right tiled-top tiled-bottom maximized activated
[ 15: wl_pointer] enter: serial: 91974; surface: 3, x, y: 536.687500, 227.285156
[ 15: wl_pointer] frame
[ 10: xdg_surface] configure: serial: 91967
[ 11: xdg_toplevel] configure: width: 941; height: 506
tiled-left tiled-right tiled-top tiled-bottom maximized activated
[ 10: xdg_surface] configure: serial: 91975
[ 16: wl_keyboard] key: serial: 91976; time: 25738013; key: 36; state: 0 (released)
sym: Return (65293), utf8: ‘’
[ 16: wl_keyboard] key: serial: 91977; time: 25739283; key: 50; state: 1 (pressed)
sym: Shift_L (65505), utf8: ‘’
[ 16: wl_keyboard] modifiers: serial: 91978; group: 0
depressed: 00000001: Shift
latched: 00000000
locked: 00000000
[ 16: wl_keyboard] key: serial: 91979; time: 25739284; key: 133; state: 1 (pressed)
sym: Super_L (65515), utf8: ‘’
[ 16: wl_keyboard] modifiers: serial: 91980; group: 0
depressed: 00000041: Shift Mod4
latched: 00000000
locked: 00000000
[ 11: xdg_toplevel] configure: width: 941; height: 506
tiled-left tiled-right tiled-top tiled-bottom maximized
[ 16: wl_keyboard] modifiers: serial: 91982; group: 0
depressed: 00000000
latched: 00000000
locked: 00000000
[ 16: wl_keyboard] leave: serial: 91983; surface: 3
[ 15: wl_pointer] motion: time: 25739292; x, y: 536.687500, 227.285156
[ 16: wl_keyboard] enter: serial: 91990; surface: 3
sym: Shift_L (65505), utf8: ‘’
sym: Super_L (65515), utf8: ‘’
[ 16: wl_keyboard] modifiers: serial: 91991; group: 0
depressed: 00000041: Shift Mod4
latched: 00000000
locked: 00000000
[ 12: wl_data_device] data_offer: id: 4278190081
[4278190081: wl_data_offer] source_actions: actions: 7 (copy, move, ask)
[4278190081: wl_data_offer] action: dnd_action: 2 (move)
[4278190081: wl_data_offer] offer: mime_type: application/glfw+clipboard-194057
[4278190081: wl_data_offer] offer: mime_type: TEXT
[4278190081: wl_data_offer] offer: mime_type: STRING
[4278190081: wl_data_offer] offer: mime_type: UTF8_STRING
[4278190081: wl_data_offer] offer: mime_type: text/plain;charset=utf-8
[4278190081: wl_data_offer] offer: mime_type: text/plain
[ 12: wl_data_device] selection: id: 4278190081
[ 11: xdg_toplevel] configure: width: 941; height: 506
tiled-left tiled-right tiled-top tiled-bottom maximized activated
[ 11: xdg_toplevel] configure: width: 941; height: 1026
tiled-left tiled-right tiled-top tiled-bottom maximized activated
[ 10: xdg_surface] configure: serial: 91981
[ 16: wl_keyboard] key: serial: 91992; time: 25739337; key: 50; state: 0 (released)
sym: Shift_L (65505), utf8: ‘’
[ 16: wl_keyboard] modifiers: serial: 91993; group: 0
depressed: 00000040: Mod4
latched: 00000000
locked: 00000000
[ 16: wl_keyboard] key: serial: 91994; time: 25739338; key: 133; state: 0 (released)
sym: Super_L (65515), utf8: ‘’
[ 16: wl_keyboard] modifiers: serial: 91995; group: 0
depressed: 00000000
latched: 00000000
locked: 00000000
[ 16: wl_keyboard] key: serial: 91996; time: 25740137; key: 133; state: 1 (pressed)
sym: Super_L (65515), utf8: ‘’
[ 16: wl_keyboard] modifiers: serial: 91997; group: 0
depressed: 00000040: Mod4
latched: 00000000
locked: 00000000
[ 11: xdg_toplevel] close

I don’t know what this means or if it’s useful but hopefully you do…

The last thing I tried was commenting out this line from my hyprland.conf:

bind = $mainMod SHIFT, 4, movetoworkspace, 4

This indeed stopped Print Screen from moving the currently focused window to workspace 4, and Print Screen seemed not to do anything in general, but on further inspection, hitting it inside of a text editor for example, made it type “$”.

For reference, this is the bind I’m trying to get working:

bind = , PRINT, exec, hyprshot -m output -m DP-2

This is confusing.
Delete the the bind with the PRINT.
Run wev and press the printscreen button once.
Somewhere along the lines, it will return:

key: SOME-NUMBER; state: 1 (pressed)
key: SOME-NUMBER; state: 0 (released)

Take a note of this SOME-NUMBER.

Then you can bind the printscreen key by means of the following.

bind = , code:SOME-NUMBER, exec, hyprshot -m output
This will take screenshot of the monitor

Read this and also use in terminal
hyprshot --help in order to see and understand all options.

Here is the wev output for pressing Print Screen once (I removed all the parts before and after pressing the key):

[ 16: wl_keyboard] key: serial: 2234; time: 1069874; key: 50; state: 1 (pressed)
sym: Shift_L (65505), utf8: ‘’
[ 16: wl_keyboard] modifiers: serial: 2235; group: 0
depressed: 00000001: Shift
latched: 00000000
locked: 00000000
[ 16: wl_keyboard] key: serial: 2236; time: 1069875; key: 133; state: 1 (pressed)
sym: Super_L (65515), utf8: ‘’
[ 16: wl_keyboard] modifiers: serial: 2237; group: 0
depressed: 00000041: Shift Mod4
latched: 00000000
locked: 00000000
[ 11: xdg_toplevel] configure: width: 941; height: 506
tiled-left tiled-right tiled-top tiled-bottom maximized
[ 16: wl_keyboard] modifiers: serial: 2239; group: 0
depressed: 00000000
latched: 00000000
locked: 00000000
[ 16: wl_keyboard] leave: serial: 2240; surface: 3
[ 15: wl_pointer] motion: time: 1069882; x, y: 470.500000, -7.000000
[ 16: wl_keyboard] enter: serial: 2248; surface: 3
sym: Shift_L (65505), utf8: ‘’
sym: Super_L (65515), utf8: ‘’
[ 16: wl_keyboard] modifiers: serial: 2249; group: 0
depressed: 00000041: Shift Mod4
latched: 00000000
locked: 00000000
[ 12: wl_data_device] data_offer: id: 4278190081
[4278190081: wl_data_offer] source_actions: actions: 7 (copy, move, ask)
[4278190081: wl_data_offer] action: dnd_action: 2 (move)
[4278190081: wl_data_offer] offer: mime_type: image/png
[ 12: wl_data_device] selection: id: 4278190081
[ 11: xdg_toplevel] configure: width: 941; height: 506
tiled-left tiled-right tiled-top tiled-bottom maximized activated
[ 11: xdg_toplevel] configure: width: 941; height: 1026
tiled-left tiled-right tiled-top tiled-bottom maximized activated
[ 10: xdg_surface] configure: serial: 2238
[ 16: wl_keyboard] key: serial: 2250; time: 1069921; key: 50; state: 0 (released)
sym: Shift_L (65505), utf8: ‘’
[ 16: wl_keyboard] modifiers: serial: 2251; group: 0
depressed: 00000040: Mod4
latched: 00000000
locked: 00000000
[ 16: wl_keyboard] key: serial: 2252; time: 1069922; key: 133; state: 0 (released)
sym: Super_L (65515), utf8: ‘’
[ 16: wl_keyboard] modifiers: serial: 2253; group: 0
depressed: 00000000
latched: 00000000
locked: 00000000

Apparently, pressing the Print Screen key results in the key with code 50 (Shift) as well as the key with code 133 (Super) being “pressed” simultaneously. I did not touch Shift or Super once in this snippet. As a result, binding either code:50 or code:133 does not lead to the desired behavior, because while technically a screenshot can be taken with Print Screen, just hitting Shift (if bound with code:50) or Super (if bound with code:133) also takes a screenshot. Also, Print Screen still moves the currently focused window to workspace 4 while simultaneously taking a screenshot.

This is not a hyprland issue afaik.
And frankly, I have not come across a similar situation with keyboards and keypress. Out of curiosity, what kb is it?

Within the hyprland framework, you could simply bind hyprshot to some functioning key or key combination. Whatever will make it work and suits you best.
I gave you the syntax of the bind.

Remapping the keyboard -if needed- is, in my eyes, outside the scope of hyprland forum. You would want to take this on your own by reading (a lot) and if your os is archlinux, ask for help at arch forum in case you hit a wall.

It’s the Keychron V6.

Thanks for the help anyway.

I have found the culprit. This was not a Hyprland issue. Thanks to the keyboard manufacturer, the physical Print Screen key was not mapped to the digital Print Screen representation, instead it was bound to something like “Screenshot on macOS”. Changing this to map the physical key to the correct digital Print Screen representation fixed the issue and everything works fine now. Thanks for the help nonetheless.

1 Like

That’s so cool.
I use a Keychron C3 Pro and the browser interface key-mapping is a charm.
Be well.