DDC/CI Monitor Control
DDC/CI is an i2c protocol for controlling your monitors' brightness, contrast, color, and input selection.
It’s good to understand DDC because Desktops running Windows/MacOS/etc. will not support changing brightness for your monitor by default which makes for an annoying (possibly painful) experience by working in a dark/bright room and a monitor that isn’t configured correctly.
It’s also useful for dual computer setups sharing a keyboard/mouse/monitor, because it can be used to tell the monitor to switch inputs without requiring touching the monitor. Some have created custom apps which monitor the USB devices connected via a USB switch and telling DDC to switch to the correct input.
@haimgel on GitHub describes how he wrote two programs, one for mac and one for windows, which watches for his USB Switch and uses DDC/CI to switch the inputs as needed: https://haim.dev/posts/2020-07-28-dual-monitor-kvm/ [github]
Windows
To control your monitor install Monitorian
in the
Windows Store. Also checkout the
github repo: github.com/emoacht/Monitorian.
MacOS
To control your monitor install Monitor Control
via
brew: brew install --cask monitorcontrol
or
checkout the
github repo: github.com/MonitorControl/MonitorControl
The app used to be very basic and sometimes buggy, but a lot of work has been put in to it recently. It looks very professional and works perfectly for me.
Note: You’ll want to make sure you’re directly connected to a monitor with DDC/CI enabled. Connecting via docks or switches (HDMI switch or etc) will interfere with actually communicating the DDC/CI commands in my experience.
Linux
You have several options in Linux and they all start with making
sure the i2c-dev
kernel module is enabled so apps
can talk to your monitor. You may also want to update
udev
rules to allow users of a certain group to
access specific i2c devices without sudo
.
There is ddccontrol
but it appears unmaintained and
the supposedly correct tool to use is ddcutil
.
There are extensions for Gnome 3 to control
ddcutil
from the system tray, but you could also
just create some bash scripts/functions as well to set things
via the terminal.
NixOS
To install in NixOS add ddcutil
,
ddcui
, and
gnomeExtensions.brightness-control-using-ddcutil
to
your system packages.
Then also configure udev rules for the ddc
group to
use it without sudo
services.udev.extraRules = ''KERNEL=="i2c-[0-9]*", GROUP="ddc", MODE="0660", PROGRAM="${pkgs.ddcutil}/bin/ddcutil --bus=%n getvcp 0x10"'';
Make sure to create a ddc
group and add it to the
users you want to control the monitor brightness. For example:
users.groups.ddc = { };
# Define a user account. Don't forget to set a password with ‘passwd’.
users.users.cmp = {
isNormalUser = true;
extraGroups = [ "wheel" "networkmanager" "ddc" ];
};