This makes it much easier to set your screen’s brightness to a comfortable level at each time of the day, and to save energy.
(For Windows, see the very bottom of this post.)
On Linux, if you currently have no keyboard shortcuts for that available, a good way to create them is via ddcutil
. Once you have ddcutil
installed, have your displays’ properties printed in the command line by typing ddcutil detect
.
This should show you a list of parameters for each of the displays you have connected. For a display of your choice, try these commands:
ddcutil -n <Serial number> setvcp 10 - 5 # reduces brightness by 5 %
ddcutil -n <Serial number> setvcp 10 + 5 # increases brightness by 5 %
ddcutil -n <Serial number> setvcp 12 - 10 # reduces contrast by 10 %
ddcutil -n <Serial number> setvcp 12 + 10 # increases contrast by 10 %
ddcutil -n <Serial number> setvcp 10 0 # sets brightness to minimum
ddcutil -n <Serial number> setvcp 10 100 # sets brightness to maximum
If these commands all work, you can create in your desktop environment’s settings (e.g. KDE) custom keyboard shortcuts that execute these commands. Personally, with my two displays and with dedicated “Brightness up” and “Brightness down” keys (macros) on my keyboard, I am using combinations with the modifiers Alt
to address the secondary instead of the primary display, Shift
, to adjust contrast instead of brightness, and Control
to set an absolute value (0% or 100%) instead of going by increments.
Further notes:
Instead of addressing your displays via their serial number, you can also address your display via most other parameters shown in ddcutil detect
by using another option than -n
, e.g. via bus number or manufacturer name, but I’ve found that bus number is not persistent over the years, and manufacturer name (“Mfg id”) may contain spaces which may lead to problems.
A full list of all other possible vcp commands (the numbers after setvcp
) can be obtained through ddcutil vcpinfo
.
If you’re using a laptop, brightness adjustments for its internal screen are of course almost always a no-brainer.
On Windows 10 and perhaps 11 as well, you can apparently do the following:
Step 1: Press the Win + A to open the Action Center.
Step 2: Press Shift + Tab to select the brightness slider.
Step 3: Use the left and right arrow keys to adjust the screen brightness.
Isn’t i2c module neccessary?
You should put in the title that this is only for Linux.
Your comment has now motivated me to add a Windows section :)
It is also possible to make the monitor brightness show up as a normal system setting by using a kernel module. The other thing I read when I did this is that monitor flash memory that stores the settings, like brightness, is often particularly bad, having only 1000s of cycles. If you do use this, just keep that in mind
Edit: i checked again and 1000s of cycles is low. 100s of 1000s is more reasonable, but could still be reached fairly easily within the monitors lifespan if frequently adjusting
I’m curious about both things you mention. Do you have the name of the kernel module at hand? And can you point me to a source on the monitor flash memory (as I couldn’t find anything on that)?
The kernel module is ddcci-driver-linux
This is the Reddit post I read. It links to a Hacker News forum post as well that discusses it. Really it shouldn’t be much of a problem unless you’re using dynamic brightness that is overzealous
I cranked my laptop display’s gamma up to 11 using an icc profile because it wasn’t bright enough for me. Or rather all the shitty content is too dark to see anything.
How does one find an unknown register in hardware for a similar but undocumented setting? My laptop has an undocumented microcontroller for the RGB keyboard. I can change it through the extra function keys but only to a 3 level preset and not the real fine tuned control. I can dual boot and change the setting with their app and it is persistent. If I could discover all registers their app uses I would totally ditch w11 and free up a good bit of space. I figure it is just a block of memory somewhere, (thinking like Arduino stuff), but I am clueless about how to find that at OS level complexity… If anyone here casually knows at a conversational social level here, like don’t go looking it up for me or whatnot
I know nothing about this, but can OpenRGB (Linux tool) talk to your device in any way?
Not as of a year or so back. I’m not sure how it works but there are several settings available in the manufacturer’s app that are not in Linux. Only the hotkey settings from the fn+ function keys work. Dmesg spits out a block of unrecognized memory that is something like 8 or 16 bits long that is the likely culprit. There is some odd microcontroller on a serial bus that is unrecognized too IIRC but that I have never seen before like any of the thousands found on LCSC. Last time I checked linux-hardware.org, it looked like no one had solved this one on any of the scans. I’m not motivated to chase it down myself. Poking some registers or watching for the changed location after using the built in hotkey would be peripherally interesting as a general thing to know.
I feel you basically. I have given up trying to control the RGB on my RAM (even though it’s probably decently documented somewhere).