Using the softbuttons is annoying over time. I mean the real brightness of the backlight (Not X11 gamma). Which protocols are cabable of this? (DVI, HDMI, DP, guess VGA is not)
Actually, all of these interfaces are capable of backlight control (and more), as long as both, graphics card and the monitor support the Display Data Channel.
DDC is based on I²C, so you have to install and load appropriate kernel modules to make it work.
# Debian sudo apt-get install i2c-tools sudo modprobe i2c-dev # RHEL sudo dnf install i2c-tools
After that, you have to find out which I²C bus is connected to the monitor using
sudo i2cdetect -l.
# Example output for Intel graphics card i2c-0 i2c i915 gmbus dpc I2C adapter i2c-1 i2c i915 gmbus dpb I2C adapter i2c-2 i2c i915 gmbus dpd I2C adapter i2c-3 i2c DPDDC-B I2C adapter i2c-4 i2c DPDDC-C I2C adapter # Example output for AMD graphics card i2c-0 i2c Radeon i2c bit bus 0x90 I2C adapter i2c-1 i2c Radeon i2c bit bus 0x91 I2C adapter i2c-2 i2c Radeon i2c bit bus 0x92 I2C adapter i2c-3 i2c Radeon i2c bit bus 0x93 I2C adapter i2c-4 i2c Radeon i2c bit bus 0x94 I2C adapter i2c-5 i2c Radeon i2c bit bus 0x95 I2C adapter i2c-6 i2c card0-eDP-1 I2C adapter i2c-7 i2c card0-VGA-1 I2C adapter
In Intel case, the right bus is one of DPDDCs (Display Port DDC), depending which on port are you using. In my case both, HDMI and DP are displayed as DP.
In AMD case, the bus is called card0-interface-n.
If there are no interfaces listed, then your card/driver doesn't not support DDC in standard way.
Now we have to probe, whether monitor supports DDC and does it allow to set brightness this way. First, install
# Debian sudo apt-get install ddccontrol # RHEL sudo dnf install ddccontrol
Then, list get list of supported DDC parameters using it. This example assumes your DDC interface is bound to i2c-3 bus.
# sudo ddccontrol dev:/dev/i2c-3 ddccontrol version 0.4.2 Copyright 2004-2005 Oleg I. Vdovikin ([email protected]) Copyright 2004-2006 Nicolas Boichat ([email protected]) This program comes with ABSOLUTELY NO WARRANTY. You may redistribute copies of this program under the terms of the GNU General Public License. Reading EDID and initializing DDC/CI at bus dev:/dev/i2c-3... I/O warning : failed to load external entity "/usr/share/ddccontrol-db/monitor/DELA0A2.xml" Document not parsed successfully. I/O warning : failed to load external entity "/usr/share/ddccontrol-db/monitor/DELlcd.xml" Document not parsed successfully. EDID readings: Plug and Play ID: DELA0A2 [VESA standard monitor] Input type: Digital = VESA standard monitor > Color settings > Brightness and Contrast > id=brightness, name=Brightness, address=0x10, delay=-1ms, type=0 supported, value=45, maximum=100 > id=contrast, name=Contrast, address=0x12, delay=-1ms, type=0 supported, value=75, maximum=100 --- [snip] ---
That's it, if everything goes right, brightness value should report exactly the same brightness as set in monitor. You might now set 50% brightness using this command (replace 0x10 with address of brightness value found above):
sudo ddccontrol dev:/dev/i2c-3 -r 0x10 -w 50
Building on @M132's answer,
ddccontrol appears unmaintained and hasn't added configurations for any new monitors since 2006.
Fortunately, there is a newer tool: ddcutil, that is much more robust and actively developed. After installing one of the prebuilt packages or building from source, it can be used to query and set brightness (among myriad other settings):
# ddcutil capabilities | grep Brightness Feature: 10 (Brightness) # ddcutil getvcp 10 VCP code 0x10 (Brightness ): current value = 60, max value = 100 # ddcutil setvcp 10 70
The DDC/CI kernel module includes a
ddcci-backlight module which can integrate most DDC/CI-capable monitors into the kernel’s backlight system (
/sys/class/backlight). This allows any tool which can use the latter to drive the backlight on a DDC/CI monitor; for example, using the built-in controls on the GNOME desktop:
The kernel module is available in Debian (since Debian 9) and derivative distributions:
sudo apt install ddcci-dkms