Adjust an external monitor's brightness, color and inputs over DDC/CI — a GTK4/Adwaita front-end for
ddcutil.
Package: big-ddcgui. Works on any external monitor that supports DDC/CI;
laptop panels (eDP) do not, and aren't shown.
- Brightness and contrast up front — the controls you actually use, loaded fast in a first pass; everything else stays behind a guarded toggle.
- Auto-detects every supported control from
ddcutil capabilities: sliders for ranges, dropdowns for inputs and presets, read-only rows for info. - Export / import a profile as JSON — a superset of
ddcutil dumpvcp, covering every read-write feature, not just color. - Translated UI (gettext) — ships in 29 languages.
sudo pacman -S big-ddcgui # or: yay -S big-ddcguicd pkgbuild && makepkg -si # builds from the local checkoutRuntime needs ddcutil, gtk4, libadwaita, python, python-gobject
(all native packages — no PyPI runtime dependencies).
Launch External Monitor Settings from the app grid, or run big-ddcgui.
Enable DDC/CI in the monitor's own OSD menu first; some docks, MST hubs and
KVM switches block the channel.
The menu's Export writes a JSON profile of every read-write value;
Import replays it with setvcp, warning if the saved monitor differs from
the selected one and validating ranges before applying anything.
ddcutil needs read/write on /dev/i2c-*. A normal desktop session grants this
via logind uaccess. If detection fails:
sudo modprobe i2c-dev
sudo cp /usr/share/ddcutil/data/60-ddcutil-i2c.rules /etc/udev/rules.d/
sudo udevadm control --reload && sudo udevadm trigger
# or join the i2c group, then re-login:
sudo usermod -aG i2c "$USER"Verify with ddcutil detect.
python -m venv .venv && . .venv/bin/activate
pip install ruff black mypy pytest pygobject-stubs # dev/audit tools only
PYTHONPATH=src python -m big_ddcgui
pytest && ruff check . && mypy src/big_ddcguiLayout: src/big_ddcgui/ — ddc.py (subprocess + pure parsers, unit-tested) ·
models.py · worker.py (serial thread; i2c is not concurrency-safe) ·
categories.py · widgets.py (per-feature rows) · window.py · app.py.
Also po/ (catalogs) · pkgbuild/ (wheel build via uv_build) · tests/
(parser + profile tests, no monitor required).
User-facing strings go through gettext (from .i18n import _). Refresh the
template and merge catalogs after changing strings:
./update_translations.sh # xgettext -> po/big-ddcgui.pot, msgmerge po/*.po
msgfmt -c -v po/pt_BR.po # validate a catalog.mo files are compiled from po/*.po at package build time. New languages are
filled by the GitHub auto-translate workflow; pt_BR is hand-maintained.
Issues and pull requests welcome. Keep patches minimal and run the floor
(pytest, ruff, mypy) before opening one.
By the BigLinux Team. Built on
ddcutil, GTK4 and
libadwaita.
Report an issue.

