Skip to main content

Wrong Monitor in Game (XWayland Multi-Monitor) Hyprland

Problem

Overwatch (and other Proton/Wine games) opened on the correct monitor (Samsung) but reported the wrong display index (Dell) in the game menu. The assignment had to be corrected manually on every start.

Root Cause

hyprctl monitors showed:

  • DP-2 (Dell) → ID 0
  • DP-3 (Samsung) → ID 1
  • HDMI-A-1 (PEAQ) → further ID

Under XWayland all monitors are bundled into a single virtual root output. Games enumerate displays by connector ID from the kernel's DRM detection order — not by physical arrangement or Hyprland layout. The IDs cannot be reliably forced via Hyprland config.

Solution: gamescope

gamescope wraps the game in a virtual single-display compositor. The game sees only one monitor — the display index problem simply does not exist anymore. gamemoderun is added for CPU governor tuning.

Installation

sudo pacman -S gamescope lib32-gamemode

(gamemode was already installed; lib32-gamemode is needed for full Proton compatibility.)

Steam Launch Options

Overwatch → Properties → Launch Options:

gamemoderun gamescope -W 3840 -H 2160 -r 240 -f -- %command%

Flag Reference

Flag Description
gamemoderun Outside gamescope — applies GameMode to both gamescope and the game process
-W 3840 -H 2160 Output resolution (native Samsung 4K)
-r 240 Target refresh rate in Hz
-f Fullscreen
-- %command% Steam appends the Proton call here

Performance Variant (FSR Upscaling)

If OW at 4K/240 is unstable — render internally at a lower resolution and upscale with FSR:

gamemoderun gamescope -W 3840 -H 2160 -w 2560 -h 1440 -r 240 -F fsr -f -- %command%
Flag Description
-w 2560 -h 1440 Internal render resolution (1440p)
-W 3840 -H 2160 Output resolution on monitor (native 4K)
-F fsr AMD FidelityFX Super Resolution upscaler

Verification

While the game is running, in a terminal:

gamemoded -s

Should print gamemode is active.

Portability

The same approach works for any Proton/Wine title on Steam — set launch options per game. For non-Steam launchers (Lutris, Heroic, Bottles) use the equivalent "pre-launch command" or wrapper field.