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

    Что мониторы умеют 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
    Поделиться публикацией

    Похожие публикации

    Комментарии 46

    • НЛО прилетело и опубликовало эту надпись здесь
        +2
        Разумеется, ЕСЛИ монитор умеет. Понятно, что регулировать балланс белого на Ч/Б мониторе не получится, так же как выставлять яркость для монитора, который эту яркость не может менять.
        +2
        Интересная утилитка, жаль только, что у них в базе всего лишь 89 мониторов и база эта с 2006 года не пополняется, если я всё правильно понял :(
          +1
          Автор, вроде, данные собирает. Но это совершенно не мешает ей пользоваться. Все примеры выше проверялись на «неподдерживаемом» мониторе.
          0
          Windows-пользователи мониторов Samsung знают их magic tune, который позволяет выставлять яркость/контраст
          Кстати, кроме программы MagicTune от Samsung для программного управления монитором по протоколу DDC/CI есть софт и у других производителей мониторов:
          У NEC/Mitsubishi — это NaViSet (есть под Windows и MacOS X);
          У LG — это forteManager (есть только под Windows).
            0
            Ага. Но главный минус всех этих программ, они не предоставляют API для настройки. Например, у меня сейчас регуляция профилей мониторов (левого и правого, раздельно) вытащена на мультимедиа кнопки клавиатуры. Я использую два режима (user/movie) для обычной работы и кино/игр, так что всего у меня занято две кнопки, которые переключают режимы туда/сюда.
              0
              А у ACER есть что-нибудь? Хотя я пока и без «тюнинга» доволен вроде всем.
                0
                Протокол стандартный. Если и ваша видеокарта, и ваш монитор его поддерживают, то по идее подойдёт программа от любого производителя.

                Правда, раньше встречались модели LCD-мониторов, которые поддерживают DDC/CI частично, например, только при подключении по аналоговому кабелю. Для современных мониторов и видеокарт это, скорее всего, уже неактуально. Сейчас практически все его поддерживают без проблем.
                  0
                  А у ACER есть что-нибудь?
                  Acer eDisplay
                +5
                Году в 2004-2005, когда только вышли модели мониторов Samsung 173P/193P вопрос программного управления монитором по DDC встал для меня особо остро по той простой причине, что эти мониторы не имели вообще аппаратных кнопок настроек. Т.е. у них была только сенсорная кнопка включения (она же при удержании переключала между цифровым и аналоговым входом), а вся настройка яркости, контрасности, цветности и т.д. осуществлялась исключительно программно по протоколу DDC/CI. Под Windows для этих целей в комплекте была программа MagicTune, а вот решение под Linux производитель вообще не предлагал.

                Когда я стал интересоваться, что же есть в Linux-сообществе для этих целей, то узнал про два проекта:
                1) Linux DDC/CI Tool (автор Олег Вдовкин)
                2) Linux DDC/CI control (автор Nicolas Boichat)
                Позже оба разработчика объединили свои усилия в общем проекте DDCcontrol.
                Но, судя по информации на странице проекта, они его с октября 2006 года не развивали. Видимо, забросили, а жаль.
                  –1
                  Они написали реализацию, которой всего хватает. Зачем что-то делать еще?
                    +1
                    если заниматься перфекционизмом, то там должна быть user-driven база данных мониторов, которая бы регулярно включалась в violative обновления. А так да — всё что нужно есть.
                    0

                    Чего ж вы об этих мониторах в прошедшем времени говорите? Вот сижу сейчас и думаю, как бы мне его из Windows 10 настроить

                      0

                      Оказывается, вот так можно image

                        0
                        Это не ddc. Это просто настройка dac'а или его аналога в видеокарте.
                          0

                          Тогда я продолжу изыскания. Самсунговские утилиты у меня не заработали

                    0
                    Я искал способ прикрутить ddccontrol к событиям типа stanby в иксах. Было бы круто, если б сами иксы при переходе в режим пониженного энергопотребления отключали монитор.
                    К сожалению, способ найти не удалось. Может, у кого-нибудь есть соображения?
                      0
                      Насчёт «x'ы сами» не знаю, вы ключение (перевод в standby) монитора осуществляется командой xset dpms force off. Вкручивание его в gnome screensaver (или что там аналогичное у KDE) вопрос техники.
                        0
                        Не путайте DPMS и DDC.
                        DMPS — старая добрая фича, позволяющая перевести монитор в «режим ожидания». Поддерживается иксами из коробки.
                        DDC — фича, которая дает большую экономию энергии (за счет выключения почти всей логики монитора) и, что для меня очень важно, погашенный, а не мигающий светодиод. Яркий синий светодиод, мигающий в ночи, иногда мешает заснуть.
                          –2
                          Я не совсем понимаю кого с кем я путаю. Что именно вы хотите делать с помощью ddc с монитором? О какой «фича, которая даёт большую экономию энергии» речь идёт?
                    0
                    DPMS позволяет перевести монитор в «ждущий» режим, в котором индикатор питания мигает и раздражает присутствующих.
                    DDC/CI позволяет эмулировать нажатие кнопки питания на мониторе, после чего он не подает признаков разумной жизни, пока не будет нажата кнопка питания (или не будет по DDC послана команда, эмулирующая ее нажатие)

                    В идеале, монитор должен выключаться при получении Power off и через DPMS, но на современных мониторах режимы DPMS «Stand-by», «Suspend» и «Turned off» не различаются (индикатор мигает одинаково, время выхода в рабочий режим одинаково).
                    Поэтому вариант с заменой действий DPMS на DDC/CI мне кажется привлекательным.
                      –1
                      А можно пример такого выключения? Это было бы интересно, но я пока возможности так сделать не нашёл.
                        +2
                        Выключаем, ждем 10 секунд и включаем обратно:
                        ddccontrol dev:/dev/i2c-1 -r 0xe1 -w 0; sleep 10; ddccontrol dev:/dev/i2c-1 -r 0xe1 -w 1
                          0
                          О, а вот это уже очень интересно!

                          Кстати, если встраивать, я бы её встраивал не в X-org, а в локер экрана. Лочишь — монитор(ы) выключаются. Разлочиваешь — включаются.
                            0
                            интересно, как разлочивать с выключенным монитором…
                            Ну, и локеров/скринсейверов туева хуча, а иксы — одни. Зачем делать одну работу в 10 местах, если можно обойтись одним? Тем более, управление состоянием монитора уже осуществляется иксами, так что зачем плодить сущности?
                              0
                              Пока я думаю о простеньком скринсейвере, который при запуске будет монитор выключать, а при завершении — включать.
                          +2
                          Почитал код Xorg, там такой привязки не предусмотрено, но код достаточно понятный, чтобы прикрутить ее сбоку. Может, займусь на досуге.
                          0
                          На моём мониторе, например, мне удалось подвинуть картинку при работе по DVI


                          нафига?!!!
                            +3
                            это уже другой вопрос. Важно, что «могу».
                              0
                              очень даже нужно. на ViewSonic сверху появилась белая полоска полубитых пикселей. При подключении через аналоговый выход я так чутка избражение сдвигал вниз — и все было ОК, а с цифровым выходом fail. так что способ опробуем.
                              +2
                              Есть, кстати, и gui к этой утилитке — gddccontrol.
                                0
                                Спасибо, обновлю пост.
                                0
                                Интересно, а профиль калибровки в монитор засунуть можно?
                                Пользуюсь Samsung SyncMaster F2380 (он позиционируется как «про»).
                                  –1
                                  Вопрос интересный.

                                  Разделим его на следующие:

                                  1) Как выглядит профиль калибровки? Это набор чисел гаммы для каждого из каналов? Или более сложная величина?
                                  2) Нужно найти регистры, отвечающие за соответствующие гаммы. Вероятнее всего, экспериментальным образом.
                                  3) Объединить первое и второе.

                                  4) PROFIT???
                                    0
                                    1) профиль в виде графика для каждого из каналов (соответственно числовые значения есть для яркости 0-255 по каналам). И надо попробовать LUT записать в монитор.
                                    2) А там регистры энерго-зависимы? Если напортачить сильно, то при сбросе все восстановится (и соответственно повредиться не может)?
                                    3) Надо разобраться в вопросе. Теперь понятно хотя бы куда копать…
                                      –1
                                      1) Этот график практически всегда строится по точкам. Сколько их?
                                      2) Насколько я понимаю, частично. Т.е. выставленный режим остаётся, а такие вещи, как вызов меню — нет. Фактически, это имитация нажатия кнопок на мониторе. Повредить оно может только в смысле «испанского в меню». А ещё там есть регистр «сбросить настройки».
                                        0
                                        1) 256 точек и есть. Профиль в формате ICC, но можно и в текстовик скопировать (я по нему сужу о количестве точек).
                                        2) Понятно. Значит напортачить при желании можно (и зависит это от честности программистов, которые меню делали. К сожалению, защиты от «знающего» дурака нет в принципе).
                                          –1
                                          Вы уверены, что для этой кривой действительно использовалось 256 точек? Записываться в профиль он может таблично, но, насколько я знаю, редкие калибраторы работают по большому числу значений.
                                            0
                                            Конечно же не уверен.
                                            Профиль не совсем мой (все собираюсь найти калибратор на денек, да руки не доходят).
                                            Единственная проблема моего монитора — завал в тенях.

                                            P.S. а не подскажите чем можно загрузить профиль в LUT видеокарты под Linux (Mandriva)?
                                              0
                                              Пока не интересовался, хотя покупка калибратора в планах…
                                  –2
                                  А под win api существует? хочу на ночь так же выключать монитор програмно!
                                    –1
                                    xen server, винды в domU, линукс в dom0 — будут вам винды с линуксовым функционалом.
                                      0
                                      никак руки не дойдут такое настроить :)
                                    0
                                    о, я как раз хотел приспособить вебкамеру для оценки яркости и выставления яркости монитора.
                                    и все поиски по регулировке яркости монитора заканчивались xgamma что делает совсем не то, теперь можно попробовать поэспериментировать
                                      0
                                      У меня месяц ушел, чтобы сообразить. Поэтому добавлю.
                                      Крайне полезно в меню монитора управление по ddc/ci включить. На моем BENQ G2420HDBL по умолчанию было выключено.

                                      Выставленная в меню галочка изменила мир!

                                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                      Самое читаемое