Brightness Not Changing / Stuck at 100%

I upgraded my PC (not a laptop, a PC) from Fedora Workstation 43 to 44 and the brightness has since stopped changing on my external monitor with it being stuck at 100%. This was also a problem for me on my old laptop but I ignored it as I didn’t use it at all. However, this is quite frustrating on my PC. Funnily enough, I recall booting CachyOS at one point on my old laptop and somehow the brightness was working. Unsure if that helps but I thought it’s worth mentioning.

Any suggested fixes? Thanks in advance.

—TEMP FIX BELOW—
By using ddcutil I can change brightness. It’s a bit tedious but I’m hoping I can figure out a way to use ddcutil without sudo and then be able to use my brightness keys and ddcutil as a shortcut. Will update if I figure it out but otherwise the below is my solution.

sudo dnf install ddcutil
sudo ddcutil setvcp 10 XXX

Replace XXX with your desired brightness, e.g. sudo ddcutil setvcp 10 90.
—TEMP FIX ABOVE—

I tried these fixes below with no success, but I will leave them in case it helps someone else in the future:

  1. sudo grubby --args=“acpi_backlight=native” --update-kernel=ALL
  2. sudo grubby --update-kernel=ALL --args=“acpi_backlight=native”
  3. sudo nano /etc/default/grub and then looked at the acpi bit but it was already ‘=native"’
  4. sudo dnf install brightnessctl
    brightnessctl set 50%
    Which returns:
    Updated device ‘input6::numlock’:
    Device ‘input6::numlock’ of class ‘leds’:
    Current brightness: 1 (100%)
    Max brightness: 1
  5. sudo dnf install light
    light -A 10
    light -U 10
    light -S 50

    Which all returned:
    No backlight controller was found, so we could not decide an automatic target. The current command will have no effect. Please use -L to find a target and then specify it with -s.
    light -L
    Listing device targets (none of which were my external monitor):
    sysfs/leds/input6::numlock
    sysfs/leds/input12::kana
    sysfs/leds/input6::kana
    sysfs/leds/input12::compose
    sysfs/leds/input6::scrolllock
    sysfs/leds/igc-0a00-led2
    sysfs/leds/input6::compose
    sysfs/leds/igc-0a00-led0
    sysfs/leds/input12::scrolllock
    sysfs/leds/input12::numlock
    sysfs/leds/input12::capslock
    sysfs/leds/input6::capslock
    sysfs/leds/igc-0a00-led1
    util/test/dryrun

Some system information:
System
Kernel: 7.1.8-200.fc44.x86_64 arch: x86_64 bits: 64 compiler: gcc v: 16.1.1
Desktop: GNOME v: 50.4 tk: GTK v: 3.24.52 wm: gnome-shell dm: GDM
Distro: Fedora Linux 44 (Workstation Edition)

Machine
Type: Desktop System: ASUS product: N/A v: N/A serial:
Mobo: ASUSTeK model: ROG STRIX B850-I GAMING WIFI v: Rev 1.xx
serial: part-nu: SKU Firmware: UEFI
vendor: American Megatrends v: 1063 date: 06/09/2025

CPU
Info: 6-core model: AMD Ryzen 5 9600X bits: 64 type: MT MCP arch: Zen 5
rev: 0 cache: L1: 480 KiB L2: 6 MiB L3: 32 MiB
Speed (MHz): avg: 3917 min/max: 628/5486 boost: enabled cores: 1: 3917
2: 3917 3: 3917 4: 3917 5: 3917 6: 3917 7: 3917 8: 3917 9: 3917 10: 3917
11: 3917 12: 3917 bogomips: 93599
Flags-basic: avx avx2 ht lm nx pae sse sse2 sse3 sse4_1 sse4_2 sse4a
ssse3 svm

Graphics
Device-1: Advanced Micro Devices [AMD/ATI] Navi 48 [Radeon RX 9070/9070
XT/9070 GRE] vendor: XFX driver: amdgpu v: kernel arch: RDNA-4 pcie:
speed: 32 GT/s lanes: 16 ports: active: DP-1 empty: DP-2, DP-3, HDMI-A-1,
Writeback-1 bus-ID: 03:00.0 chip-ID: 1002:7550
Device-2: Advanced Micro Devices [AMD/ATI] Granite Ridge [Radeon Graphics]
vendor: ASUSTeK driver: amdgpu v: kernel arch: RDNA-2 pcie: speed: 16 GT/s
lanes: 16 ports: active: none empty: DP-4,HDMI-A-2,Writeback-2
bus-ID: 0e:00.0 chip-ID: 1002:13c0 temp: 42.0 C
Display: wayland server: Xwayland v: 24.1.13 compositor: gnome-shell
driver: gpu: amdgpu display-ID: 0
Monitor-1: DP-1 model: MSI MAG 273Q X24 res: 2560x1440 dpi: 112
diag: 672mm (26.5")
API: OpenGL v: 4.6 vendor: amd mesa v: 26.1.7 glx-v: 1.4 es-v: 3.2
direct-render: yes renderer: AMD Radeon RX 9070 XT (radeonsi gfx1201 ACO
DRM 3.64 7.1.8-200.fc44.x86_64) device-ID: 1002:7550 display-ID: :0.0
API: EGL Message: EGL data requires eglinfo. Check --recommends.
Info: Tools: api: glxinfo x11: xdriinfo, xdpyinfo, xprop, xrandr

Info
Memory: total: 32 GiB note: est. available: 30.5 GiB used: 3.83 GiB (12.5%)
Processes: 437 Power: uptime: 1h 32m wakeups: 0 Init: systemd v: 259
default: graphical
Packages: pm: rpm pkgs: N/A note: see --rpm pm: flatpak pkgs: 9
Compilers: N/A Shell: Bash v: 5.3.9 running-in: ptyxis-agent inxi: 3.3.41

My brightness function keys on my Samsung Galaxy Book laptop stopped working with an update a month or three ago.
It is one of those always buggy features, so I have not looked into it.

Fair enough, it’s just quite annoying. I made do with my previous laptop but I would really like this fixed for my PC.

Bump (apologies if not allowed)

Can you provide some additional information about your machine?

inxi -ezxx

you may need to install inxi sudo dnf install inxi

Thanks

The reason i stopped looking into brightness is that is is usually a kernel regression that removes it.

In some cases, installing ‘light’ and adjusting brightness from command line has brought it back.

Hi Joe,

I got rid of some of the sections from the output of inxi -ezxx (Audio, Network, Bluetooth, Drives, Partition, Swap, Sensors) as I didn’t think them relevant - can paste them if need be. But I’ve got the rest in the OP. Thanks for any help you can give me.

Hi Mat,

I installed light and these are the list of devices that it came out with. I put it into duck.ai and it says that none of these are related to my monitor’s brightness. Thanks though!

sysfs/leds/input6::numlock
sysfs/leds/input12::kana
sysfs/leds/input6::kana
sysfs/leds/input12::compose
sysfs/leds/input6::scrolllock
sysfs/leds/igc-0a00-led2
sysfs/leds/input6::compose
sysfs/leds/igc-0a00-led0
sysfs/leds/input12::scrolllock
sysfs/leds/input12::numlock
sysfs/leds/input12::capslock
sysfs/leds/input6::capslock
sysfs/leds/igc-0a00-led1
util/test/dryrun

Did you try the command to change your monitor brightness?

eg
light -A 10
light -U 10

light -A 10
No backlight controller was found, so we could not decide an automatic target. The current command will have no effect. Please use -L to find a target and then specify it with -s.

light -U 10
No backlight controller was found, so we could not decide an automatic target. The current command will have no effect. Please use -L to find a target and then specify it with -s.

I’ve got a temporary fix by using ddcutil somehow. I have to use sudo but using the command below I can set the brightness to what I want.

sudo ddcutil setvcp 10 XX

Now the question is if I can return functionality to my brightness keys. A tad bit annoying having to not only use the terminal but also having to use sudo. If I could at least do it without sudo I could theoretically set up a shortcut using my brightness keys. Is there a way I can do that?

I see now you editied that into your OP.
Reading again, I see you are on a PC, rather than a laptop with this issue. Is is a totally unuseful suggestion to ask if you can change you brightness from the monitor hardware?

Not totally unhelpful a suggestion, Mat. It’s just it’s a bit tedious having to use the monitor menu to workaround this issue. For example, if I am midgame and then have to pause to turn up the brightness or turn it down when I enter a dark/bright area.

Similarly, that’s the issue with having to use sudo ddcutil too. It isn’t exactly conducive to my immersion if I have to back out the terminal any time I need to change brightness…

So both current workarounds force me to take 30s to change the brightness. If that’s as good as I can get, then fair enough. But I hope someone is able to help me set up ddcutil to where I can use it without sudo, and then I can use ddcutil as a shortcut using my brightness keys.

I think there is a way you can set ddcutil or any sudo to not require the sudo… And you should be able to remap keys too.
I would make a new post asking these specific questions, as many very smart regulars here will not look at this topic again.

—TEMP FIX BELOW—
By using ddcutil I can change brightness. It’s a bit tedious but I’m hoping I can figure out a way to use ddcutil without sudo and then be able to use my brightness keys and ddcutil as a shortcut. Will update if I figure it out but otherwise the below is my solution.

sudo dnf install ddcutil
sudo ddcutil setvcp 10 XXX

Replace XXX with your desired brightness, e.g. sudo ddcutil setvcp 10 90.
—TEMP FIX ABOVE—

I’ve had to use ddcutil in the past, even for internal monitors.

Maybe https://github.com/philling-dev/monitor-brightness-control will provide a proper solution.

I tried installing the git you’ve liked using method 1 and its prerequisites. This is what I get (not that I’m expecting you to know about it).

Cloning into ‘monitor-brightness-control’…
remote: Enumerating objects: 55, done.
remote: Counting objects: 100% (55/55), done.
remote: Compressing objects: 100% (35/35), done.
remote: Total 55 (delta 21), reused 46 (delta 15), pack-reused 0 (from 0)
Receiving objects: 100% (55/55), done.
Resolving deltas: 100% (21/21), done.
:desktop_computer: Monitor Brightness Control - Installation Script

[INFO] Detected distribution: fedora

[INFO] Starting installation process…

[INFO] Installing system dependencies…
[sudo] password for username:
Updating and loading repositories:
Repositories loaded.
Failed to resolve the transaction:
Package “ddcutil-2.2.1-3.fc44.x86_64” is already installed.
No match for argument: python3-qt6
Package “xcb-util-cursor-0.1.6-2.fc44.x86_64” is already installed.
You can try to add to command line:
–skip-unavailable to skip unavailable packages

Then the rest of the commands don’t work:
‘monitor-control brightness
bash: monitor-control: command not found…’

I’ve tried the troubleshooting steps in the github, but to no avail.

Thanks though!

Fedora 44 has python3-qt5:

python3-qt5-5.15.12-0.2.fc44.x86_64 : Python 3 bindings for Qt5
Repo         : fedora
Matched From : 
Provide      : python3-qt5 = 5.15.12-0.2.fc44

Thanks - still have an error though, if you’re able to assist.

  1. git clone https://github.com/philling-dev/monitor-brightness-control.git
  2. cd monitor-brightness-control
  3. chmod +x install.sh
  4. Went into the install.sh and changed every instance of qt6 to qt5
  5. ./install.sh

Actually went further than last time but still at the end got an error.

:desktop_computer: Monitor Brightness Control - Installation Script

./install.sh
[INFO] Detected distribution: fedora

[INFO] Starting installation process…

[INFO] Installing system dependencies…
[sudo] password for nj:
Updating and loading repositories:
Repositories loaded.
Package “ddcutil-2.2.1-3.fc44.x86_64” is already installed.
Package “python3-pip-26.0.1-2.fc44.noarch” is already installed.
Package “python3-virtualenv-20.35.4-4.fc44.noarch” is already installed.
Package “python3-qt5-5.15.12-0.2.fc44.x86_64” is already installed.
Package “xcb-util-cursor-0.1.6-2.fc44.x86_64” is already installed.

Nothing to do.
[SUCCESS] System dependencies installed

[INFO] Setting up I2C permissions…
[SUCCESS] Added nj to i2c group

[INFO] Testing ddcutil installation…
[SUCCESS] ddcutil is installed
[INFO] Testing monitor detection…
[SUCCESS] Detected 1 monitor(s)

[INFO] Installing Python package…
[INFO] Installing from source directory…
Obtaining file:///home/nj/monitor-brightness-control
Installing build dependencies … done
Checking if build backend supports build_editable … done
Getting requirements to build editable … done
Preparing editable metadata (pyproject.toml) … done
Requirement already satisfied: click>=8.0 in /usr/lib/python3.14/site-packages (from monitor-brightness-control==0.1.0) (8.3.3)
Collecting pydantic>=1.8 (from monitor-brightness-control==0.1.0)
Using cached pydantic-2.13.4-py3-none-any.whl.metadata (109 kB)
Collecting rich>=12.0 (from monitor-brightness-control==0.1.0)
Using cached rich-15.0.0-py3-none-any.whl.metadata (18 kB)
Collecting PyQt6>=6.0 (from monitor-brightness-control==0.1.0)
Using cached pyqt6-6.11.0-cp310-abi3-manylinux_2_34_x86_64.whl.metadata (2.1 kB)
Collecting pynput>=1.7 (from monitor-brightness-control==0.1.0)
Using cached pynput-1.8.2-py2.py3-none-any.whl.metadata (32 kB)
Collecting annotated-types>=0.6.0 (from pydantic>=1.8->monitor-brightness-control==0.1.0)
Using cached annotated_types-0.8.0-py3-none-any.whl.metadata (15 kB)
Collecting pydantic-core==2.46.4 (from pydantic>=1.8->monitor-brightness-control==0.1.0)
Using cached pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.6 kB)
Requirement already satisfied: typing-extensions>=4.14.1 in /usr/lib/python3.14/site-packages (from pydantic>=1.8->monitor-brightness-control==0.1.0) (4.15.0)
Collecting typing-inspection>=0.4.2 (from pydantic>=1.8->monitor-brightness-control==0.1.0)
Using cached typing_inspection-0.4.4-py3-none-any.whl.metadata (2.6 kB)
Requirement already satisfied: six in /usr/lib/python3.14/site-packages (from pynput>=1.7->monitor-brightness-control==0.1.0) (1.17.0)
Collecting evdev>=1.3 (from pynput>=1.7->monitor-brightness-control==0.1.0)
Using cached evdev-1.9.3.tar.gz (32 kB)
Installing build dependencies … done
Getting requirements to build wheel … done
Preparing metadata (pyproject.toml) … done
Collecting python-xlib>=0.17 (from pynput>=1.7->monitor-brightness-control==0.1.0)
Using cached python_xlib-0.33-py2.py3-none-any.whl.metadata (6.2 kB)
Collecting PyQt6-sip<14,>=13.8 (from PyQt6>=6.0->monitor-brightness-control==0.1.0)
Using cached pyqt6_sip-13.12.0-cp314-cp314-manylinux1_x86_64.manylinux_2_5_x86_64.whl.metadata (495 bytes)
Collecting PyQt6-Qt6<6.12.0,>=6.11.0 (from PyQt6>=6.0->monitor-brightness-control==0.1.0)
Using cached pyqt6_qt6-6.11.1-py3-none-manylinux_2_34_x86_64.whl.metadata (535 bytes)
Collecting markdown-it-py>=2.2.0 (from rich>=12.0->monitor-brightness-control==0.1.0)
Using cached markdown_it_py-4.2.0-py3-none-any.whl.metadata (7.4 kB)
Collecting pygments<3.0.0,>=2.13.0 (from rich>=12.0->monitor-brightness-control==0.1.0)
Using cached pygments-2.21.0-py3-none-any.whl.metadata (2.5 kB)
Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich>=12.0->monitor-brightness-control==0.1.0)
Using cached mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB)
Using cached pydantic-2.13.4-py3-none-any.whl (472 kB)
Using cached pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.1 MB)
Using cached annotated_types-0.8.0-py3-none-any.whl (13 kB)
Using cached pynput-1.8.2-py2.py3-none-any.whl (92 kB)
Using cached pyqt6-6.11.0-cp310-abi3-manylinux_2_34_x86_64.whl (8.3 MB)
Using cached pyqt6_qt6-6.11.1-py3-none-manylinux_2_34_x86_64.whl (85.9 MB)
Using cached pyqt6_sip-13.12.0-cp314-cp314-manylinux1_x86_64.manylinux_2_5_x86_64.whl (299 kB)
Using cached python_xlib-0.33-py2.py3-none-any.whl (182 kB)
Using cached rich-15.0.0-py3-none-any.whl (310 kB)
Using cached pygments-2.21.0-py3-none-any.whl (1.3 MB)
Using cached markdown_it_py-4.2.0-py3-none-any.whl (91 kB)
Using cached mdurl-0.1.2-py3-none-any.whl (10.0 kB)
Using cached typing_inspection-0.4.4-py3-none-any.whl (14 kB)
Building wheels for collected packages: monitor-brightness-control, evdev
Building editable for monitor-brightness-control (pyproject.toml) … done
Created wheel for monitor-brightness-control: filename=monitor_brightness_control-0.1.0-0.editable-py3-none-any.whl size=6782 sha256=8ab6ddc3349f598609d8b4c302b795dde17e752f4cfe5aed61b8b05f1b04e060
Stored in directory: /tmp/pip-ephem-wheel-cache-rfz91ipy/wheels/f8/a1/78/cdf3e4a8fcb35ded3b1a1709a76a6f645a5745ff8bbdbda811
Building wheel for evdev (pyproject.toml) … error
Successfully built monitor-brightness-control
Failed to build evdev
[ERROR] Installation failed. Check /tmp/pip_error.log

/tmp/pip_error.log
error: subprocess-exited-with-error

× Building wheel for evdev (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [53 lines of output]
running bdist_wheel
running build
running build_py
creating build/lib.linux-x86_64-cpython-314/evdev
copying src/evdev/util.py → build/lib.linux-x86_64-cpython-314/evdev
copying src/evdev/uinput.py → build/lib.linux-x86_64-cpython-314/evdev
copying src/evdev/genecodes_py.py → build/lib.linux-x86_64-cpython-314/evdev
copying src/evdev/genecodes_c.py → build/lib.linux-x86_64-cpython-314/evdev
copying src/evdev/ff.py → build/lib.linux-x86_64-cpython-314/evdev
copying src/evdev/evtest.py → build/lib.linux-x86_64-cpython-314/evdev
copying src/evdev/events.py → build/lib.linux-x86_64-cpython-314/evdev
copying src/evdev/eventio_async.py → build/lib.linux-x86_64-cpython-314/evdev
copying src/evdev/eventio.py → build/lib.linux-x86_64-cpython-314/evdev
copying src/evdev/ecodes_runtime.py → build/lib.linux-x86_64-cpython-314/evdev
copying src/evdev/ecodes.py → build/lib.linux-x86_64-cpython-314/evdev
copying src/evdev/device.py → build/lib.linux-x86_64-cpython-314/evdev
copying src/evdev/init.py → build/lib.linux-x86_64-cpython-314/evdev
running egg_info
writing src/evdev.egg-info/PKG-INFO
writing dependency_links to src/evdev.egg-info/dependency_links.txt
writing top-level names to src/evdev.egg-info/top_level.txt
reading manifest file ‘src/evdev.egg-info/SOURCES.txt’
reading manifest template ‘MANIFEST.in’
warning: no previously-included files found matching ‘src/evdev/ecodes.c’
adding license file ‘LICENSE’
writing manifest file ‘src/evdev.egg-info/SOURCES.txt’
copying src/evdev/input.c → build/lib.linux-x86_64-cpython-314/evdev
copying src/evdev/py.typed → build/lib.linux-x86_64-cpython-314/evdev
copying src/evdev/uinput.c → build/lib.linux-x86_64-cpython-314/evdev
running build_ext
running build_ecodes
The ‘linux/input.h’ and ‘linux/input-event-codes.h’ include files
are missing. You will have to install the kernel header files in
order to continue:

      dnf install kernel-headers-$(uname -r)
      apt-get install linux-headers-$(uname -r)
      emerge sys-kernel/linux-headers
      pacman -S kernel-headers
  
  In case they are installed in a non-standard location, you may use
  the '--evdev-headers' option to specify one or more colon-separated
  paths. For example:
  
      python setup.py \
        build \
        build_ecodes --evdev-headers path/input.h:path/input-event-codes.h \
        build_ext --include-dirs path/ \
        install
  
  If you want to avoid building this package from source, then please consider
  installing the `evdev-binary` package instead. Keep in mind that it may not be
  fully compatible with, or support all the features of your current kernel.
  [end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for evdev
error: failed-wheel-build-for-install

× Failed to build installable wheels for some pyproject.toml based projects
╰─> evdev

By the by, I did note the above in the error log. I tried running the command but got this.

sudo  dnf install kernel-headers-$(uname -r)
Updating and loading repositories:
Repositories loaded.
Failed to resolve the transaction:
No match for argument: kernel-headers-7.1.8-200.fc44.x86_64
You can try to add to command line:
  --skip-unavailable to skip unavailable packages