Pull to refresh

Управление монитором по DDC

Reading time2 min
Views75K
Что мониторы умеют DDC, думаю, знают все. Традиционно, он используется X-сервером для определения параметров изображения, и админами, с помощью ddcprobe, для изучения «что не так сделал X-сервер» (ddcprobe показывает поддерживаемые монитором режимы по мнению самого монитора).

Однако, ddc — это двусторонний протокол. Он не только говорит компьютеру о том, что умеет монитор, но и монитору, о том, что хочет от него компьютер.

Windows-пользователи мониторов Samsung знают их magic tune, который позволяет выставлять яркость/контраст из (неудобной) программы. Однако, существует более интересный метод работы с монитором: это утилита ddccontrol.

C помощью этой утилиты можно:
  • Изменять яркость, контрастность, гамму изображения. Причём, изменение яркости осуществляется изменением яркости подсветки! (разумеется, если монитор это физически умеет делать)
  • Программно переключать пресеты (movie/text/user/game); это куда удобнее, чем тыкать соответствующую кнопку на самом мониторе
  • Играться с недокументированными возможностями мониторов, например, вызывать заблокированные из меню языки и пункты настроек. На моём мониторе, например, мне удалось подвинуть картинку при работе по DVI (обычно этот пункт меню доступен только для VGA)
  • Блокировать кнопки монитора (думаю, это не у всех моделей, но у самсунга точно можно). Блокируются все кнопки, кроме вкл/выкл, выключение/включение монитора эту блокировку сбрасывает.
  • Включать и выключать монитор (полностью, без мигающей в standby лампочки)


Итак, вот несколько примеров использования утилиты:


Для начала грузим нужный модуль: modprobe i2c-dev

Дальше, ищем мониторы. (Их может быть больше одной штуки, правда?): ddccontrol -p
Найдены мониторы :
 - Устройство: dev:/dev/i2c-1
   Поддерживается DDC/CI: Да
   Имя монитора: Samsung SyncMaster 215TW (DVI)
   Тип входа: Цифровой
  (Автоматический выбор)
 - Устройство: dev:/dev/i2c-2
   Поддерживается DDC/CI: Да
   Имя монитора: VESA standard monitor
   Тип входа: Цифровой


На «VESA standart monitor» можно не обращать внимания, это полноценный монитор, который просто отсутсвует в базе данных ddccontrol (это означает всего лишь, что вам придётся самостоятельно искать нужные атрибуты в регистрах). Все примеры я буду показывать именно на этом, «неизвестном» мониторе.

Основной принцип работы по DDC — у монитора есть регистры (от 0 до 255) с известными допустимыми значениями. Смысл этих регистров у каждого монитора свой, но некий общий набор обычно совпадает.

ddccprobe -d dev:/dev/i2c-2 — выводит все регистры монитора c подсказкой, если монитор известен ddccprobe.
(обратите внимание на префикс dev:).

ddccontrol -r 0xdc -w 2 dev:/dev/i2c-2 — выставление режима «интернет». -r 0xdc — регистр, куда писать, -w — команда писать и значение, которое писать. 0 — user mode, 5 — movie и т.д.

ddccontrol -r 0xf5 -w 1 dev:/dev/i2c-2 — блокировка меню (-w 0 — разблокировка).

А теперь немножко недокументированных возможностей:

ddccontrol -r 0xEE -w 55 dev:/dev/i2c-2 — сдвиг изображения
ddccontrol -r 0xCC -w 0 dev:/dev/i2c-2 — включить язык в меню. 0 — китайский 1 — японский, 2 — английский… 9 — русский. Любопытно, но через само меню выставить китайский или японский невозможно…

Как подсказывают в комментариях, выключение и включение монитора:

ddccontrol dev:/dev/i2c-2 -r 0xe1 -w 0 — выключить
ddccontrol dev:/dev/i2c-2 -r 0xe1 -w 1 — включить

Я уже давно думаю о встраивании этого функционала в видеоплеер (нажал фулскрин — включился movie), но руки не доходят…

PS У этой утилиты есть и гуёвая морда — gddccontrol
Tags:
Hubs:
Total votes 72: ↑62 and ↓10+52
Comments46

Articles