Skip to main content
  1. Posts/

External Monitor Goes Blank on Fullscreen in Hyprland? Here's Why and How to Fix It

Noor Khafidzin
Author
Noor Khafidzin
A homelab enthusiast obsessed with system efficiency and the art of troubleshooting.
Table of Contents
Hyprland Tips - This article is part of a series.
Part : This Article

Where the Monitor Blanking Issue Started
#

The setup was supposed to be simple: a Linux laptop (e.g. Fedora 43) running the Hyprland window manager, connected to an external monitor via an HDMI cable. Everything worked flawlessly, until that one moment when opening a video player like mpv and hitting the fullscreen key.

The external monitor instantly went blank. A pure black screen. A few seconds later it came back, acting as if the HDMI cable had just been re-plugged. Strange, isn’t it?

It also turned out to happen every time the mouse cursor moved (shifting window focus) from the built-in laptop screen to the external display. A brief black flash, then it returned. Definitely not a great Wayland experience, especially when watching a movie or giving an important presentation.


Why Does This Happen?
#

Two Hyprland features are usually responsible for this, depending on the situation:

1. Direct Scanout
#

When an app enters fullscreen, Hyprland by default tries to enable direct scanout: an optimization where frames from the app are sent directly to the display, bypassing the compositor entirely. Good for performance, but with tradeoffs.

When direct scanout kicks in, the monitor has to re-negotiate the signal with the GPU. This process is what causes the brief blank screen every time fullscreen is toggled. On certain GPU and monitor combinations, this handshake fails entirely and the monitor appears to disconnect.

2. VRR (Variable Refresh Rate)
#

If direct scanout is already disabled but the problem persists (especially when moving the cursor between monitors), VRR is likely the culprit.

VRR allows the monitor’s refresh rate to dynamically follow the application’s frame rate. The problem is that when Hyprland runs with vrr = 1 (always active on all monitors), shifting focus between monitors can trigger unstable refresh rate transitions, causing the brief blank screen.


The Fix: Starting Simple
#

Fix 1: Disable Direct Scanout
#

Open the Hyprland config file:

nano ~/.config/hypr/hyprland.conf

Add or modify the following section:

render {
    direct_scanout = false
}

Reload the config:

hyprctl reload

This stops Hyprland from trying to bypass the compositor during fullscreen. The monitor should no longer blank out unexpectedly, though there might still be a brief dark flash the first time fullscreen is entered, or when the cursor moves between monitors.

Result: More stable, but not perfect yet.


Fix 2: Change the VRR Mode (The One That Works)
#

Still in hyprland.conf, add or modify the misc section:

misc {
    vrr = 0
}

Or, to keep VRR active only during fullscreen:

misc {
    vrr = 2
}

What each value means:

  • 0 = VRR fully disabled
  • 1 = VRR always active (default, often causes issues)
  • 2 = VRR only active when an app is fullscreen

Reload the config again:

hyprctl reload

Combining direct_scanout = false with vrr = 0 (or vrr = 2) is the most stable configuration. Fullscreen runs smoothly and the cursor can move between monitors without any blank flash.


Fix 3: Set the Monitor Explicitly
#

Sometimes Hyprland misreads the mode or refresh rate of a monitor connected via HDMI. First, check the monitor name:

hyprctl monitors

Example output:

Monitor HDMI-A-1 (ID 1):
    [email protected]

Then define the monitor explicitly in the config:

monitor = HDMI-A-1, 1920x1080@60, auto, 1

Avoid using highrr or preferred if the connection is unstable, as Hyprland will attempt the highest supported refresh rate, which does not always stay stable over HDMI.


Fix 4: Force Native Wayland Backend in mpv
#

The issue might also come from mpv not using the optimal rendering backend. Try running it with these flags:

mpv --vo=gpu-next --gpu-api=vulkan filename.mp4

Or set it as default in ~/.config/mpv/mpv.conf:

vo=gpu-next
gpu-api=vulkan

This makes mpv use Vulkan directly, which is more compatible with the Wayland/Hyprland rendering pipeline.


Fix 5: Add a Window Rule for mpv
#

As a finishing touch, add a window rule to prevent Hyprland from making compositor state changes while mpv is fullscreen:

windowrulev2 = idleinhibit fullscreen, class:^(mpv)$

Here is a summary of what to add or change in the config:

render {
    direct_scanout = false
}

misc {
    vrr = 2
}

monitor = HDMI-A-1, 1920x1080@60, auto, 1

windowrulev2 = idleinhibit fullscreen, class:^(mpv)$

After all changes, reload one more time:

hyprctl reload

Closing Thoughts
#

The blank monitor issue in Hyprland is fairly common, especially in dual monitor setups over HDMI. The root cause is usually not the hardware itself, but rather Hyprland’s optimization features not playing well with every GPU and monitor combination.

The most effective fix is combining direct_scanout = false with a more conservative vrr setting. If the setup is similar (Fedora + Hyprland + HDMI monitor), those two changes alone will likely be enough.

If the problem persists after all of this, check the Hyprland log for more clues:

cat /tmp/hypr/$(ls /tmp/hypr)/hyprland.log | grep -i "monitor\|drm\|scanout"

Hope this helps!

Hyprland Tips - This article is part of a series.
Part : This Article

Related


Load Comments