· Kalpa Madhushan · linux · 3 min read

Fix Brightness Control Not Working on ASUS TUF A15 with Pop OS COSMIC

Brightness keys and slider not working on ASUS TUF A15 with hybrid AMD+NVIDIA graphics on Pop!_OS COSMIC? Here is the exact one-command fix that actually works, plus everything else we tried that didn't.

Brightness keys and slider not working on ASUS TUF A15 with hybrid AMD+NVIDIA graphics on Pop!_OS COSMIC? Here is the exact one-command fix that actually works, plus everything else we tried that didn't.

Fix Brightness Control Not Working on ASUS TUF A15 with Pop OS (COSMIC)

Hardware: ASUS TUF Gaming A15
CPU: AMD Ryzen 7
GPU: NVIDIA RTX 2050 + AMD Radeon 680M (hybrid)
OS: Pop!_OS 24.04 LTS with COSMIC desktop
Kernel: 6.x (systemd-boot)


The Problem

After installing Pop!_OS on an ASUS TUF A15 with hybrid AMD+NVIDIA graphics, the brightness control simply does not work. Symptoms:

  • Brightness slider in COSMIC settings moves but screen doesn’t change
  • Fn brightness keys show the OSD bar going up/down but nothing happens visually
  • /sys/class/backlight/ only shows nvidia_wmi_ec_backlight instead of an AMD backlight device

Why This Happens

On ASUS TUF laptops with hybrid AMD+NVIDIA graphics, the display is physically driven by the AMD iGPU (Radeon 680M) — but the Linux kernel’s ACPI layer hands backlight control to the NVIDIA WMI driver (nvidia_wmi_ec_backlight). This driver has no real control over the panel brightness on this hardware, so all brightness changes are silently ignored.

The fix is to tell the kernel to use the native AMD backlight driver instead.

What Doesn’t Work (Save Yourself the Pain)

Before jumping to the fix, here’s what won’t work on this setup so you don’t waste time like we did:

  • GNOME extensions (e.g. Soft Brightness) — COSMIC is not GNOME, extensions don’t apply
  • xrandr --brightnessxrandr --listproviders returns 0 providers on COSMIC/Wayland; commands run silently but do nothing
  • wlsunset / wl-gammarelay — COSMIC’s compositor (cosmic-comp) does not yet support wlr-gamma-control-unstable-v1
  • ddcutil — eDP laptop panels don’t support DDC/CI protocol
  • Writing directly to /sys/class/backlight/nvidia_wmi_ec_backlight/brightness — the file accepts writes but the screen ignores them
  • GTK overlay dimmer apps — Wayland layer shell overlays either block mouse input or don’t render correctly on COSMIC
  • Editing /boot/efi/loader/entries/Pop_OS-current.conf manually — can cause COSMIC session to fail to start on reboot

The Fix

Pop!_OS uses kernelstub to manage kernel boot parameters (not GRUB). Use it to add the acpi_backlight=native parameter, which forces the kernel to use the AMD native backlight driver:

sudo kernelstub --add-options "acpi_osi=! acpi_backlight=native"

Then reboot:

sudo reboot

Verify It Worked

After rebooting, check the backlight device:

ls /sys/class/backlight/

You should now see amdgpu_bl0 instead of (or alongside) nvidia_wmi_ec_backlight:

amdgpu_bl0

Your brightness keys, COSMIC brightness slider, and all system brightness controls should now work correctly.

Cleanup

If you installed packages during troubleshooting that you no longer need:

sudo apt remove wlsunset ddcutil i2c-tools libi2c0 libx86-1 read-edid --autoremove -y
sudo apt remove libgtk-layer-shell0 gir1.2-gtklayershell-0.1 --autoremove -y
rm -f ~/dimmer.py

Why kernelstub and Not Editing the Boot Entry Directly?

Pop!_OS uses systemd-boot with EFI stub loading. The boot entry lives at /boot/efi/loader/entries/Pop_OS-current.conf. While you can edit this file manually, Pop!_OS can overwrite it on kernel updates. kernelstub writes parameters persistently so they survive kernel updates. It is the correct and safe way to manage boot parameters on Pop!_OS.

References


Tested on ASUS TUF Gaming A15 with Pop!_OS 24.04 COSMIC. If this helped you, hopefully it saved you the full day it took us to figure out.

Back to Blog

Related Posts

View All Posts »