Клавиши яркости работают на ноутбуке, а подключённый монитор их словно не замечает. На столе с двумя экранами приходится открывать два аппаратных меню. ddcutil позволяет обращаться к совместимому внешнему монитору прямо из Linux. Несколько команд помогут выяснить, работает ли DDC/CI, и менять яркость с клавиатуры. Начнём с чтения настроек: так после опыта будет известно, что именно возвращать.
Прокрутите схему по горизонтали, чтобы прочитать подписи.
Открыть схему в полном размере ↗Для этого нужен монитор с DDC/CI и соединение, которое пропускает команды. Встроенная панель ноутбука обычно управляется другим способом. Изменение её яркости через окружение рабочего стола не подтверждает работоспособность DDC на внешнем экране.
Подготовьте монитор и установите пакет
Найдите DDC/CI в экранном меню монитора по руководству модели. Включите эту функцию. Запишите аппаратную яркость и режим изображения. Для первого опыта удобен обычный SDR-режим с доступной ручной яркостью. Если включён HDR, запишите его состояние до временного отключения.
Установите пакет ddcutil средствами своего дистрибутива. Например, в Debian или Ubuntu команда sudo apt install ddcutil устанавливает пакет из настроенных репозиториев. В других системах используйте их менеджер пакетов. Не копируйте пакетный менеджер из примера, если ваш дистрибутив другой. После установки выполните ddcutil --version, чтобы сохранить номер программы для дальнейшей диагностики.
У проекта есть официальная документация ddcutil и графическая оболочка ddcui. Первую проверку удобнее провести командами: их результат можно точно повторить. Графическое окно пригодится позже, когда сам обмен уже проверен.
Найдите экран и прочитайте исходную яркость
В терминале выполните:
ddcutil detect
Команда перечисляет обнаруженные дисплеи. Сопоставьте название модели с экраном на столе. Запишите номер Display и I2C bus. При двух одинаковых мониторах дополнительно сверяйте серийный номер, если он доступен. Не продолжайте запись команд в неизвестное устройство.
В следующем примере нужный монитор имеет номер 1. Если у вас другой номер, замените его во всех командах:
ddcutil --display 1 getvcp 10
Код 10 здесь читается как шестнадцатеричный VCP-код яркости. Значение яркости в ответе включает текущую и максимальную величину. Сохраните обе. Подробно выбор дисплея и команды описаны в Command Overview.
Не считайте шкалу автоматически процентной. Если ответ сообщает максимум 100, значение 40 составляет 40% диапазона настройки. У другой модели шкала может отличаться. Это также не измерение яркости в кд/м² и не основание выставлять одинаковые цифры на разных экранах.
Сделайте один небольшой шаг и верните его
Если чтение удалось и экран определён верно, уменьшите яркость на пять единиц:
ddcutil --display 1 setvcp 10 - 5
ddcutil --display 1 getvcp 10
Пробелы вокруг минуса нужны: так задаётся относительное изменение. Убедитесь, что потемнел нужный экран. Откройте аппаратное меню и сравните показание, если монитор его отображает. Затем верните исходное значение. Например, только если вы записали первоначальное значение 60:
ddcutil --display 1 setvcp 10 60
ddcutil --display 1 getvcp 10
Число 60 в этом примере не является рекомендуемой яркостью. Подставьте своё исходное значение. Первое чтение сохраняет путь возврата; второе подтверждает, что монитор сообщил нужное состояние. В описании setvcp объясняется встроенная проверка записи. Не отключайте её через --noverify ради небольшой экономии времени при первоначальной настройке.
Если команда сообщает успех, а картинка не меняется, проверьте режим монитора и его аппаратное меню. Показание и наблюдение нужно сопоставлять. Ограничения конкретной модели могут проявляться только в определённом пресете или HDR.
Ошибка доступа: сначала выясните причину
ddcutil нужен доступ к связанным с видеоконтроллером устройствам /dev/i2c-*. Современная установка обычно включает правило udev с uaccess, однако упаковка дистрибутива и тип сеанса могут отличаться. Это описано в I2C Device Permissions.
Если обычный detect сообщает отказ в доступе, можно однократно сравнить его с sudo ddcutil detect. Успешное обнаружение с правами администратора при отказе обычному пользователю указывает на права доступа. Дальше проверьте установленные правила пакета и рекомендации дистрибутива. На рабочей машине передайте администратору точную ошибку и версию пакета.
Не выдавайте всем пользователям запись во все I2C-устройства командой chmod 666 и не запускайте графическую оболочку постоянно от root. У I2C есть и другие устройства; широкое разрешение выходит за рамки управления монитором. Для сеанса без локального входа правила доступа тоже могут отличаться от обычного рабочего стола.
Если нужных устройств вообще нет, проверьте наличие модуля i2c-dev. Проект поясняет, что в одних ядрах он встроен, в других загружается отдельно. На системе с доступным модулем администратор может выполнить sudo modprobe i2c-dev, затем повторить обнаружение. Инструкция по модулю ядра описывает и постоянную загрузку. Добавлять её до успешной разовой проверки незачем.
Монитор обнаружился, но DDC не отвечает
Проверьте включение DDC/CI физическими кнопками. Затем подключите монитор напрямую к компьютеру, временно исключив док и переходник. Повторите detect и чтение 10. Если напрямую всё работает, возвращайте устройства цепочки по одному, каждый раз проверяя ту же команду.
Сохраните удачную и неудачную схему в паспорте монитора. Наличие изображения не подтверждает прохождение управляющих команд. Для понимания видеочасти используйте расчёт полосы подключения, но его успешный результат тоже не проверяет DDC.
При частичном ответе полезна команда ddcutil --display 1 capabilities. Она читает заявленные возможности. Однако строка capabilities у мониторов бывает неточной, что отмечено в FAQ ddcutil. Не отправляйте подряд все VCP-коды ради эксперимента. Для задачи яркости достаточно проверенного чтения и небольшой записи 10 с восстановлением.
Назначьте клавиши после проверки пробуждения
Выберите комфортное значение вручную, затем проверьте сон и пробуждение, переподключение дока и перезагрузку. После изменения состава экранов снова выполните detect: номер дисплея или шины может измениться. До автоматизации убедитесь, что выбранный идентификатор устойчив в вашей схеме.
В настройках сочетаний вашего окружения рабочего стола можно назначить две проверенные команды с setvcp 10 - 5 и setvcp 10 + 5. Подставьте правильный выбор монитора и не держите клавишу нажатой во время первого опыта. Если встроенная регулировка яркости уже работает с этим экраном, дополнительная привязка может оказаться лишней. Альтернатива терминалу для повседневного управления есть в ddcui.
Для отмены удалите свои сочетания, верните записанную яркость через setvcp либо аппаратное меню. Удаление пакета не возвращает настройку, уже сохранённую монитором. Если сравниваете тот же экран с Windows, Twinkle Tray поможет повторить аппаратную проверку в другой системе, сохранив исходные значения для каждой рабочей конфигурации.