With Lenovo Legion 7 2021 is does not work even with 495.44 driver. What kernel parameters are you using?
Update> My laptop has AMD Ryzen 7 5800H CPU, RTX 3070 card, I’am running kernel 5.13.0-21 from Ubuntu repository and I have 495.44 driver.
Update 2> I’am running GPU in discrete mode. Surprisingly in hybrid mode backlight control works (probably because the integrated AMD GPU takes control then), but there are other problems, so I need to use discrete mode.
I use an HP Omen 17-an113nu with an i5-8300H and a GeForce GTX 1060 6 GB. I used to have this backlight issue but I’m happy to report that manually installing the 495.44 driver fixes it for me as well.
I’m currently running a fresh Manjaro installation.
For me brightness buttons work with neither 460 nor 495.
Only 450 and older work.
However adjusting Brightness from Gnome and KDE settings works just fine.
Device: Clevo NV40MB with Intel i5-1135G7 and Nvidia 1650 Mobile
Tested Ubuntu 20.04 with kernel 5.11 and Manjaro with kernel 5.13
Can confirm the same issue here, still present. The last driver that worked for me is 460xx. Can somebody fix this shit already? This is beginning to get annoying now!
It’s beyond annoying. Even 495.46 still does not work.
It’s not just the brightness buttons/FN keys that don’t work. It’s everything.
Changing /sys/class/backlight/nvidia_0/brightness still does not have any effect.
Ironically, changing the brightness works BEFORE loading any nVidia module, but that’s through the more generic ACPI interface, since the only node available is /sys/class/backlight/acpi_video0 at that time. Once the nVidia driver takes over, everything stops working and the brightness is reset to 100 % without any way of changing it.
Can this please be fixed after almost a year of constant glare? It’s affecting battery time and probably also wearing out my display’s backlight more quickly than it’d need to.
So annoying indeed that it made me try to debug this issue.
And it gets more annoying.
Since I know (or, well, experimentally found out) that the backlight brightness can be changed by the Linux kernel via ACPI before loading the nVidia driver, I figured that I could disable the backlight handling in the nVidia driver in order to let the kernel handle this component.
I reimplemented the kernel module option as a kernel module option local to nvidia-modeset instead, which merely stubs out nvkms_register_backlight() and nvkms_unregister_backlight(). This… worked, to some degree. Enabling it at least kept the acpi_video0 node instead of creating a nvidia_0 node, but upon loading the nVidia driver, the brightness is still reset to 100 % (even though I previously set it to, e.g., a value of 20).
So the workaround I had in mind (to let the kernel handle the backlight and the driver to not interfere) won’t work either.
The only workaround would be to not use the nVidia driver, but that’s probably even more annoying.
Why was the option suddenly removed without notice? Especially if it could have been a way to make the driver move out of the way in case it’s actually harmful, as it has been for 8 months now?
thanks for your reply, but if you have been looking around on the internet you should be aware that what you propose is not working for the majority of us.
At least for my laptop “Lenovo P17 Gen 1”, the last working nVidia driver is 460.91.03
you can download the driver from the NVIDIA web site in the Beta and Older Drivers
In general, it naturally won’t work, since the backlight handler within the nVidia driver is exactly the reason why the backlight control is not working.
However, don’t be so quick to dismiss it, since his post brings up an interesting fact I haven’t been thinking about previously: generally, kernel module options can be substituted with NVreg_RegistryDwords=... parameters and the source code especially documents that each option is first checked against the static options list before applying to “the RM” (whatever that abbreviation stands for, I believe it’s Registry Msomething… Machinery?).
In any case, passing NVreg_RegistryDwords=EnableBacklightHandler=0 (not ...=1, of course) might actually stop the driver from interfering with the backlight even though the kernel module option has been removed and have the kernel handle this stuff. IF this stuff is still hooked up internally. Grepping the binary data shipped with the driver, it turns out that the string can still be found in the proprietary, binary part, so there’s a chance that we can still force/use it. It’s worth a try, but I’m too hold up to restart my graphical environment just now, so won’t be able to test for a while.
Yeah, the 460 series is the last version that worked across the board when it comes to backlight handling. I’m not keen on upgrading, though. Especially since 465+ fix quite a few lock up issues.
Finally I got it working thanks to someone answering to my Reddit question:
i915.enable_dpcd_backlight=0 that is the key, do not try it with 1 which does not work and is everywhere quoted… just change it to 0 and enjoy working backlight dimming…
Sadly, it does not. Everything works fine up until loading nvidia-drm (or initializing the card by starting X), afterwards the backlight stays put on 100 %, no matter what value is written to the sysfs node.
The option doesn’t help to tell the driver to back off and let the kernel handle this part. It was worth a shot, though.
I’m glad that this worked for you. But it won’t work for everyone, merely users with hybrid graphic setups where the primary adapter is an Intel one.
Yep, pretty much. It also won’t work for machines where the Nvidia graphics card is hooked up to the display directly, without using a hybrid gmux/indirection through another framebuffer.
So… some of us are still stuck. I just hope that it won’t be a full year until Nvidia actually fixes the issue.