Washed out colors in kde HDR (NVIDIA, Multi-monitor)

Good Evening! Hope you’re all having a wonderful day!

Here’s hoping I’m not crazy or crazy unlucky, because I’ve seen this issue sporadically in other forums but everyone reports it as already solved since nvidia 650 driver ver.

My issue is as follows: for some reason, when enabling hdr in my hdr-capable screen (main monitor, have a second one which can’t use hdr) the colors seem washed out. I’m on kde wayland, so the first thing that came to mind is using the calibration tools offered by kde, but they only affect brightness. the color saturation is already at 100, and cannot go higher.

For whatever reason, any time I want to play a game with hdr enabled (proton-ge-custom, proton_enable_wayland=1 and proton_hdr_enabled=1, of course) the colors become washed out, to the point of looking bleached. no in-game configuration can resolve the issue. I also noticed some things (such as the steam client) having worse colors too, but since it’s from x-server I guess that problem could be anything else.

as required, here’s my garuda inxi, I hope one of you has the answer to this madness, or at least some pointers. Right now not even arch’s wiki page can give me a hand.

System:
Kernel: 6.16.8-zen3-1-zen arch: x86_64 bits: 64 compiler: gcc v: 15.2.1
clocksource: tsc avail: hpet,acpi_pm
parameters: BOOT_IMAGE=/@/boot/vmlinuz-linux-zen
root=UUID=9a5d2ff6-aac6-44da-bdad-b83a4b541903 rw rootflags=subvol=@
quiet loglevel=3 splash
Desktop: KDE Plasma v: 6.4.5 tk: Qt v: N/A info: frameworks v: 6.18.0
wm: kwin_wayland with: krunner tools: avail: hypridle,hyprlock vt: 1
dm: SDDM Distro: Garuda base: Arch Linux
Machine:
Type: Desktop System: ASUS product: N/A v: N/A serial: <superuser required>
Mobo: ASUSTeK model: TUF GAMING X870-PLUS WIFI v: Rev 1.xx
serial: <superuser required> part-nu: SKU uuid: <superuser required>
UEFI: American Megatrends v: 0237 date: 07/22/2024
Battery:
Device-1: ps-controller-battery-8c:41:f2:0c:05:f0 model: N/A serial: N/A
charge: N/A status: discharging
CPU:
Info: model: AMD Ryzen 9 7950X bits: 64 type: MT MCP arch: Zen 4 gen: 4
level: v4 note: check built: 2022+ process: TSMC n5 (5nm) family: 0x19 (25)
model-id: 0x61 (97) stepping: 2 microcode: 0xA601206
Topology: cpus: 1x dies: 2 clusters: 2x1 cores: 16 threads: 32 tpc: 2
smt: enabled cache: L1: 1024 KiB desc: d-16x32 KiB; i-16x32 KiB L2: 16 MiB
desc: 16x1024 KiB L3: 64 MiB desc: 2x32 MiB
Speed (MHz): avg: 4761 min/max: 425/5883 boost: enabled scaling:
driver: amd-pstate-epp governor: powersave cores: 1: 4761 2: 4761 3: 4761
4: 4761 5: 4761 6: 4761 7: 4761 8: 4761 9: 4761 10: 4761 11: 4761 12: 4761
13: 4761 14: 4761 15: 4761 16: 4761 17: 4761 18: 4761 19: 4761 20: 4761
21: 4761 22: 4761 23: 4761 24: 4761 25: 4761 26: 4761 27: 4761 28: 4761
29: 4761 30: 4761 31: 4761 32: 4761 bogomips: 287440
Flags-basic: avx avx2 ht lm nx pae sse sse2 sse3 sse4_1 sse4_2 sse4a
ssse3 svm
Vulnerabilities: <filter>
Graphics:
Device-1: NVIDIA GA102 [GeForce RTX 3090] vendor: Gigabyte driver: nvidia
v: 580.82.09 alternate: nouveau,nvidia_drm non-free: 550-580.xx+
status: current (as of 2025-08; EOL~2026-12-xx) arch: Ampere code: GAxxx
process: TSMC n7 (7nm) built: 2020-2023 pcie: gen: 2 speed: 5 GT/s
lanes: 16 link-max: gen: 4 speed: 16 GT/s ports: active: DP-3 empty: DP-1,
DP-2, HDMI-A-1, HDMI-A-2 bus-ID: 01:00.0 chip-ID: 10de:2204 class-ID: 0300
Device-2: Advanced Micro Devices [AMD/ATI] Raphael vendor: ASUSTeK
driver: amdgpu v: kernel arch: RDNA-2 code: Navi-2x process: TSMC n7 (7nm)
built: 2020-22 pcie: gen: 4 speed: 16 GT/s lanes: 16 ports:
active: HDMI-A-3 empty: DP-4,DP-5,Writeback-1 bus-ID: 73:00.0
chip-ID: 1002:164e class-ID: 0300 temp: 50.0 C
Display: wayland server: X.org v: 1.21.1.18 with: Xwayland v: 24.1.8
compositor: kwin_wayland driver: X: loaded: amdgpu,nvidia
unloaded: modesetting,nouveau alternate: fbdev,nv,vesa dri: radeonsi
gpu: amdgpu,nv_platform,nvidia,nvidia-nvswitch d-rect: 4480x2520
display-ID: 0
Monitor-1: DP-3 pos: primary,top-left model: ViewSonic VX3218C-QHD
serial: <filter> built: 2024 res: mode: 2560x1440 hz: 120 scale: 100% (1)
dpi: 93 gamma: 1.2 size: 697x392mm (27.44x15.43") diag: 800mm (31.5")
ratio: 16:9 modes: max: 2560x1440 min: 640x480
Monitor-2: HDMI-A-3 pos: bottom-r model: Samsung C27F390 serial: <filter>
built: 2015 res: mode: 1920x1080 hz: 72 scale: 100% (1) dpi: 82 gamma: 1.2
size: 598x336mm (23.54x13.23") diag: 686mm (27") ratio: 16:9 modes:
max: 1920x1080 min: 720x400
API: EGL v: 1.5 hw: drv: nvidia drv: amd radeonsi platforms: device: 0
drv: nvidia device: 1 drv: radeonsi device: 3 drv: swrast gbm:
drv: kms_swrast surfaceless: drv: nvidia wayland: drv: nvidia x11:
drv: nvidia inactive: device-2
API: OpenGL v: 4.6.0 compat-v: 4.5 vendor: nvidia mesa v: 580.82.09
glx-v: 1.4 direct-render: yes renderer: NVIDIA GeForce RTX 3090/PCIe/SSE2
memory: 23.44 GiB display-ID: :1.0
API: Vulkan v: 1.4.321 layers: 17 device: 0 type: discrete-gpu
name: NVIDIA GeForce RTX 3090 driver: nvidia v: 580.82.09
device-ID: 10de:2204 surfaces: N/A device: 1 type: integrated-gpu name: AMD
Radeon Graphics (RADV RAPHAEL_MENDOCINO) driver: mesa radv
v: 25.2.3-arch1.2 device-ID: 1002:164e surfaces: N/A device: 2 type: cpu
name: llvmpipe (LLVM 20.1.8 256 bits) driver: mesa llvmpipe
v: 25.2.3-arch1.2 (LLVM 20.1.8) device-ID: 10005:0000 surfaces: N/A
Info: Tools: api: clinfo, eglinfo, glxinfo, vulkaninfo
de: kscreen-console,kscreen-doctor gpu: corectrl, nvidia-settings,
nvidia-smi wl: wayland-info x11: xdpyinfo, xprop, xrandr
Audio:
Device-1: NVIDIA GA102 High Definition Audio vendor: Gigabyte
driver: snd_hda_intel v: kernel pcie: gen: 4 speed: 16 GT/s lanes: 16
bus-ID: 01:00.1 chip-ID: 10de:1aef class-ID: 0403
Device-2: Advanced Micro Devices [AMD/ATI] Radeon High Definition Audio
[Rembrandt/Strix] vendor: ASUSTeK driver: snd_hda_intel v: kernel pcie:
gen: 4 speed: 16 GT/s lanes: 16 bus-ID: 73:00.1 chip-ID: 1002:1640
class-ID: 0403
Device-3: Advanced Micro Devices [AMD] Family 17h/19h/1ah HD Audio
vendor: ASUSTeK driver: snd_hda_intel v: kernel pcie: gen: 4 speed: 16 GT/s
lanes: 16 bus-ID: 73:00.6 chip-ID: 1022:15e3 class-ID: 0403
API: ALSA v: k6.16.8-zen3-1-zen status: kernel-api with: aoss
type: oss-emulator tools: N/A
Server-1: PipeWire v: 1.4.8 status: active with: 1: pipewire-pulse
status: active 2: wireplumber status: active 3: pipewire-alsa type: plugin
4: pw-jack type: plugin tools: pactl,pw-cat,pw-cli,wpctl
Network:
Device-1: Realtek RTL8125 2.5GbE vendor: ASUSTeK driver: r8169 v: kernel
pcie: gen: 2 speed: 5 GT/s lanes: 1 port: e000 bus-ID: 06:00.0
chip-ID: 10ec:8125 class-ID: 0200
IF: eno1 state: up speed: 1000 Mbps duplex: full mac: <filter>
Device-2: MEDIATEK vendor: AzureWave driver: mt7925e v: kernel pcie:
gen: 2 speed: 5 GT/s lanes: 1 port: N/A bus-ID: 07:00.0 chip-ID: 14c3:7925
class-ID: 0280
IF: wlp7s0 state: down mac: <filter>
IF-ID-1: virbr0 state: down mac: <filter>
Info: services: NetworkManager, smbd, systemd-timesyncd
Bluetooth:
Device-1: IMC Networks Wireless_Device driver: btusb v: 0.8 type: USB
rev: 2.1 speed: 480 Mb/s lanes: 1 mode: 2.0 bus-ID: 1-11:6
chip-ID: 13d3:3602 class-ID: e001 serial: <filter>
Report: btmgmt ID: hci0 rfk-id: 0 state: up address: <filter> bt-v: 5.4
lmp-v: 13 status: discoverable: no pairing: no class-ID: 7c0104
Drives:
Local Storage: total: 5.88 TiB used: 2.66 TiB (45.3%)
SMART Message: Unable to run smartctl. Root privileges required.
ID-1: /dev/nvme0n1 maj-min: 259:1 vendor: Smart Modular Tech.
model: SHPP41-2000GM size: 1.82 TiB block-size: physical: 512 B
logical: 512 B speed: 63.2 Gb/s lanes: 4 tech: SSD serial: <filter>
fw-rev: 51060A20 temp: 55.9 C scheme: GPT
ID-2: /dev/nvme1n1 maj-min: 259:0 vendor: Smart Modular Tech.
model: SHPP41-2000GM size: 1.82 TiB block-size: physical: 512 B
logical: 512 B speed: 63.2 Gb/s lanes: 4 tech: SSD serial: <filter>
fw-rev: 51060A20 temp: 52.9 C scheme: GPT
ID-3: /dev/sda maj-min: 8:0 vendor: Kingston model: SA400S37480G
size: 447.13 GiB block-size: physical: 512 B logical: 512 B speed: 6.0 Gb/s
tech: SSD serial: <filter> fw-rev: J4.3 scheme: GPT
ID-4: /dev/sdb maj-min: 8:16 vendor: Kingston model: SA400S37480G
size: 447.13 GiB block-size: physical: 512 B logical: 512 B speed: 6.0 Gb/s
tech: SSD serial: <filter> fw-rev: 66B5 scheme: GPT
ID-5: /dev/sdc maj-min: 8:32 vendor: Samsung model: HD154UI size: 1.36 TiB
block-size: physical: 512 B logical: 512 B type: USB rev: 3.0 spd: 5 Gb/s
lanes: 1 mode: 3.2 gen-1x1 tech: N/A serial: <filter> fw-rev: 0404
scheme: MBR
Partition:
ID-1: / raw-size: 446.83 GiB size: 446.83 GiB (100.00%)
used: 332.14 GiB (74.3%) fs: btrfs dev: /dev/sdb2 maj-min: 8:18
ID-2: /boot/efi raw-size: 300 MiB size: 299.4 MiB (99.80%)
used: 636 KiB (0.2%) fs: vfat dev: /dev/sdb1 maj-min: 8:17
ID-3: /home raw-size: 446.83 GiB size: 446.83 GiB (100.00%)
used: 332.14 GiB (74.3%) fs: btrfs dev: /dev/sdb2 maj-min: 8:18
ID-4: /var/log raw-size: 446.83 GiB size: 446.83 GiB (100.00%)
used: 332.14 GiB (74.3%) fs: btrfs dev: /dev/sdb2 maj-min: 8:18
ID-5: /var/tmp raw-size: 446.83 GiB size: 446.83 GiB (100.00%)
used: 332.14 GiB (74.3%) fs: btrfs dev: /dev/sdb2 maj-min: 8:18
Swap:
Kernel: swappiness: 133 (default 60) cache-pressure: 100 (default) zswap: no
ID-1: swap-1 type: zram size: 61.92 GiB used: 5.9 MiB (0.0%) priority: 100
comp: zstd avail: lzo-rle,lzo,lz4,lz4hc,deflate,842 dev: /dev/zram0
Sensors:
System Temperatures: cpu: 57.5 C mobo: N/A gpu: amdgpu temp: 51.0 C
Fan Speeds (rpm): N/A
Info:
Memory: total: 64 GiB available: 61.92 GiB used: 9.6 GiB (15.5%)
Processes: 668 Power: uptime: 4h 0m states: freeze,mem,disk suspend: deep
avail: s2idle wakeups: 0 hibernate: platform avail: shutdown, reboot,
suspend, test_resume image: 24.65 GiB services: org_kde_powerdevil,
power-profiles-daemon, upowerd Init: systemd v: 258 default: graphical
tool: systemctl
Packages: 2943 pm: pacman pkgs: 2918 libs: 624 tools: gnome-software,
octopi, pacseek, paru, yay pm: flatpak pkgs: 25 Compilers: clang: 20.1.8
gcc: 15.2.1 alt: 14 Shell: Bash v: 5.3.3 default: fish v: 4.1.1
running-in: konsole inxi: 3.3.39
Garuda (2.11.0-1):
System install date:     2024-03-15
Garuda release:          231029
Last full system update: 2025-10-01
Is partially upgraded:   No
Relevant software:       snapper NetworkManager dracut nvidia-utils nvidia-open-dkms garuda-hardware-profile-nvidia garuda-hardware-profile-standard garuda-hardware-profile-standard-x11
Windows dual boot:       Probably (Run as root to verify)
Failed units:
--- System Health Check Report ---
23/24 checks run in 1.04 seconds ⌛
Powered by garuda-health 🦅

✅ System health check passed. No issues found.

Hope you have a lovely day!

A wiki article for HDR was recently created by a community member, maybe this is useful?

1 Like

First thing i checked, been following that thread since its inception. Sadly nothing there for this situation

Not your issue, but why you don’t make a bios update ?
You are owner from very good metal but the bios is out of date. (security risks)

2 Likes

My thought was that it would get done automatically by Linux, i remember windows has a software that is able to do that though, maybe it’s time to give it a run. Thanks!

Sorry, no.

3 Likes

Yea if you use two monitors and to that both are different and even worse both have different features you may see issues like this. Additionally you try to run HDR using the native driver not gamescope.

So first 2 things:

  1. Did you try to disconnect the second monitor (non-HDR). does it do any difference when using native driver?
  2. Did you try to run HDR on games via gamescope? With the second monitor connected as well disconnected?
4 Likes

I do remember trying turning off (not disconnecting) the non-hdr monitor, but it not making much of a difference. I can try again though.

For gamescope, I do try to avoid it as I want all to stay in kwin, where I can shuffle windows around and such, having a fixed resolution window that i had problems dragging over and could spawn in the wrong screen wasn’t that good of an experience for me to keep trying, but I do see most people using gamescope instead of proton_wayland + hdr. I don’t know what the difference would be there though, as kde is perfectly hdr capable and proton has native wayland now, no? I’m working now but definetely will update with that

Yes please try it out. Disconnect the 2nd monitor from your GPU and let only one connected, than test as I suggested.

This is necessary to do in order to know if its caused due to Dual-Monitor setup or once again NVIDIA BS.

In regards of gamescope. Games can be run in gamescope 3 ways.

  1. Run the DE in gamescope session
  2. Run steam in gamescope session
  3. Run the game in gamescope session e.g nested (this method is mentioned on Wiki)

With the option 2 & 3 you stay in KWIN, you are just starting the gamescope session for either the specific application or specific game.

The reason why ppl use gamescope rather than native driver is due to the native driver is not yet in official Valve proton. A lot of ppl dont know or dont want to install custom proton version such as cachy or GE fork. Also gamescope with HDR is here for some while and considered very stable.

4 Likes

So, I’ve been doing some testing:

Disconnecting my second monitor doesn’t affect hdr (or anything for that matter)

as additional context, it’s connected to the iGPU (amd)

gamescope doesn’t seem to work, so I’ve been testing with the proton solution using the latest protonGE (protonge-custom-bin from garuda itself)

gamescope spawns an empty window from what I’ve been testing (even after passing correct -W and -H params as arguments) tested from both steam and heroic games launcher

what else can I test?

Some other relevant info is the screen I’m trying to display HDR content into, which is a ViewSonic VS19257

Can you show us the exact gamescope command you use as a launch option in steam?

And as well which game did you test it on?

2 Likes

This thread (and the link to the wiki) flashed a lightbulb in my head.

I checked my Samsung monitor’s settings, and found out that it was HDR Standard. Setting it to HDR Dynamic, made my display much more vibrant.

1 Like

hey! so I did check the hdr options on my monitor previously, however my monitor only has the “hdr range” set to auto. there’s another option that’s color range which I set to full, but I don’t think that can be it

Did it help in your case?

@Seimus I’m sorry I didn’t respond earlier, I found another issue but with my rig, so I got to debugging that first. as fat as the command goes, it’s the regular one I found in both archwiki and protondb and the like, something like the following:

for steam:

  • gamescope -W 2560 -H 1440 -r 120 -- %command%
    

this time, tested with dmc5 on steam it DID work but I have no way to say if HDR works well since I can’t see HDR related options (more than Color grading, which is something I already could change with the “native proton solution”

however, from heroic games launcher it still produces what I can only call a null screen (has a wayland icon, but no display, nor screen size)

I think it’s more a problem on heroic’s side too.

Alright you are dealing here with multiple launchers which can be difficult to Tshoot.

gamescope works as well on heroic but its weirdly turned on, I can advice you how to, but lets first focus purely on steam. As enabling HDR there is simple.

The command you used, enables nested gamescope but does not enable HDR. In order to enable HDR in gamescope you need to pass the HDR flag. Looking on what you are saying about DMC5 and HDR it is the case. Please use the command that is in the Wiki, so in your case you want to use the following in steam

gamescope -w 2560 -h 1440 -f -r 120 --hdr-enabled -- %command%

This will enabled nested gamescope with your monitor resolution in full screen at 120Mhz refresh rate. The last flag enables HDR.

2 Likes

Heroic is easier then steam, but wine wayland still breaks controller support, so as long as you don’t need that its golden.

1 Like

This depends on what translation layer you using.

I use gamescope with ProtonGE in Heroic in order to have controller support + HDR working properly.

But in theory you are right its few clicks. But I feel like steam launch option is simpler cause all you need is to pass the HDR flag.

Jesus, well, I sure didn’t knew I had to pass the hdr argument, thought gamescope inferred it on it’s own, I’ll have another go and see if there’s some changes

Not by default, gamescope in nested mode turns on what you tell him to by passing the proper flags.

With time when the APIs are done, thus native HDR will be a thing between the DE and the games, we will not need anymore gamescope.

I did as well update the wiki a bit explaining the flags.

2 Likes

so, as an Illustration to what happens, this is what I see when trying to enable hdr in game in cyberpunk 2077:

the colors still appear washed out, but it’s definitely a software thing, since even in screenshots it appears the same. any guesses?

To clarify:

this is from heroic games launcher with the following options:

  • Enable HDR

  • Enable Wayland

My guess is that this is beyond games and is something DE related maybe?

sorry for the double post, but just to compare, the non-hdr version: