Монитор уже умеет переключать входы — просто мы об этом не знали
Протокол DDC/CI живёт внутри каждого современного кабеля к монитору и умеет управлять входами, яркостью и питанием. Разберёмся, как это работает и почему перед покупкой KVM-свитча стоит попробовать бесплатное ПО.
Монитор с двумя входами может стать собственным KVM-переключателем — достаточно отправить ему команду по тому же кабелю, по которому он получает картинку. Протокол DDC/CI живёт в каждом современном дисплее больше двадцати лет, и большинство пользователей о нём даже не подозревает.
Проблема, которую мы решаем деньгами, а потом теряем пульт
Представьте типичный рабочий стол: ноутбук подключён к внешнему монитору. Теперь добавьте второй компьютер — допустим, домашний десктоп или второй ноутбук. Два устройства, один экран. Что делать?
Первое, что приходит в голову — купить HDMI-свитч. Небольшая коробочка за 10–15 долларов, пульт, пара кабелей. Работает, но добавляет в кучу проводов ещё один девайс, ещё один адаптер, ещё один предмет в ящике стола, где и так полно подобных «решений».
Альтернатива — KVM-свитч, который переключает не только видео, но и клавиатуру с мышью. Там цены начинаются от 30–40 долларов за приличную модель с поддержкой 4K, и снова: коробочка, кабели, пульт.
Но что если монитор уже умеет всё это сам?
Секретный язык внутри кабеля
Внутри каждого HDMI-, DisplayPort- и USB-C-кабеля, помимо проводов, несущих гигабиты видеоданных, есть два скромных провода с шиной I²C. Изначально она нужна для чтения EDID — файла, в котором монитор сообщает компьютеру своё имя, поддерживаемые разрешения и частоты. Операционная система запрашивает эти данные при подключении, и вы видите правильное разрешение на экране.
Но организация VESA на этом не остановилась. Стандарт DDC/CI (Display Data Channel / Command Interface) с набором команд MCCS позволяет компьютеру отправлять команды монитору по тому же каналу. Яркость, громкость, питание — и главное:
Код VCP 0x60 — выбор входа. Отправьте нужное значение, и монитор переключится с HDMI на DisplayPort или USB-C. Без кнопок на корпусе. Без ИК-пульта. Без внешнего свитча.
Монитор и есть переключатель. Он был им всё это время.
Как это попробовать самому
На каждой операционной системе есть инструменты для работы с DDC/CI:
- macOS — утилита
m1ddcили приложение BetterDisplay - Linux —
ddcutil - Windows — ControlMyMonitor или Monitorian
Всё перечисленное бесплатное. Установили, запустили, отправили команду на смену входа — монитор переключился. Звучит просто, и технически это действительно просто. Но есть нюанс.
Диалекты одного протокола
DDC/CI — стандарт, но его реализация у каждого производителя немного своя. Взять хотя бы LG: многие модели мониторов этой марки используют альтернативную адресацию для команд переключения входов. Стандартная команда доходит до монитора, вызывает кратковременное мигание экрана — и игнорируется. Выглядит так, будто DDC «не работает». На самом деле работает, просто вы разговариваете не на том диалекте.
BetterDisplay умеет запрашивать у монитора список поддерживаемых входов, включая альтернативные коды. Для LG это могут быть значения вроде 17 для HDMI 1 или 15 для USB-C, которые отличаются от стандартных. Именно эти коды монитор слушает и выполняет.
Конкретные числа зависят от модели, прошивки и даже от того, какой порт вы используете. Нет универсальной таблицы — только эмпирический тест: отправил код, посмотрел на экран, записал, что произошло. Это занимает минут десять.
Подводные камни, о которых стоит знать
Практика показывает несколько важных моментов, которые документация обычно опускает.
Чтение текущего входа может врать. Некоторые мониторы на запрос «какой вход сейчас активен?» отвечают нулём или мусором, независимо от реального состояния. Проверять — только визуально.
DDC работает на неактивном входе. Компьютер, подключённый по USB-C, может отправить команду переключения на себя, даже когда монитор сейчас показывает картинку с другого устройства. Это ключевая возможность: вы переключились на второй компьютер и можете вернуться обратно, не вставая с места.
Частые переключения ломают связь. Если отправить десяток команд переключения за минуту, монитор может «зависнуть» — сбросить USB-C-соединение, перестать реагировать на DDC. Помогает только физическое отключение кабеля или перезагрузка монитора кнопкой. Поэтому между командами нужна пауза — хотя бы секунда. Это не функция в программе, это реле с физическим переключением.
DDC требует запущенной ОС. BIOS, загрузчик GRUB, экран выбора диска — всё это появляется до того, как операционная система загружает драйверы для DDC. Если вам нужен доступ к одному из компьютеров до загрузки системы (а это частый сценарий), его лучше подключить по «глупому» HDMI напрямую.
Второй компьютер должен быть включён. Если переключиться на спящий ноутбук, монитор покажет «нет сигнала». Потребуется либо разбудить машину, либо идти к кнопке на корпусе монитора.
Проблема с окнами, которую не решить свитчем
Есть ещё одна тонкость, которая касается в первую очередь macOS, но может проявиться и на других системах.
Когда монитор подключён по USB-C, связь между ноутбуком и экраном не разрывается при переключении входа — именно поэтому DDC вообще может отправлять команды. macOS не знает, что вы переключились на другой компьютер, и продолжает считать, что внешний монитор на месте. Все окна остаются на «виртуальном» десктопе, который вы не видите.
Аппаратный HDMI-свитч решает это грубо: разрывая сигнал, он заставляет macOS «заметить» пропажу и перенести окна на встроенный экран. Но это неудобно — окна теряют расположение, а при обратном переключении не возвращаются.
Более элегантное решение — зеркалирование перед переключением. Когда монитор уходит на второй компьютер, встроенный экран ноутбука копирует содержимое внешнего. Окна остаются на месте и становятся видны на маленьком экране. При возврате — отмена зеркалирования.
В BetterDisplay это делается одной командой, и её можно привязать к алиасу вместе с переключением входа.
Готовое решение в две команды
Весь рабочий процесс сводится к двум скриптам или алиасам в терминале:
- Первый: переключает монитор на второй компьютер + включает зеркалирование
- Второй: отключает зеркалирование + возвращает монитор на первый компьютер
Набрали команду в терминале на любом из двух компьютеров — экран переключился. Кабель не трогали, кнопку не нажимали, деньги не тратили.
Весь софт бесплатный. BetterDisplay работает в фоне и занимает место в автозагрузке. Ни одного дополнительного устройства на столе.
Кому это подойдёт, а кому — нет
DDC/CI — отличное решение, если:
- вы используете один монитор для двух компьютеров
- оба устройства работают с одной ОС (или вам хватает терминала для переключения)
- вам не нужен доступ к BIOS/загрузчику на обоих машинах
- вы не против потратить десять минут на тестирование кодов
DDC/CI не заменит полноценный KVM-свитч, если:
- вам нужно переключать не только видео, но и USB-периферию (камеру, микрофон, картридер)
- оба компьютера требуют доступа до загрузки ОС
- вы хотите переключение одной кнопкой без терминала
Для последнего сценария, впрочем, можно написать скрипт с горячей клавишей или даже привязать его к голосовой команде.
Главный вывод
Протокол DDC/CI существует с начала 2000-х. Он встроен в каждый современный монитор, в каждый кабель с HDMI, DisplayPort или USB-C. Он умеет менять вход, яркость, контрастность и питание дисплея — и всё это через тот же провод, который несёт видеосигнал.
Мы десятилетиями покупаем переключатели, пульты и коробочки, чтобы решить задачу, которую наш монитор уже умеет решать сам. Возможно, перед тем как оформлять заказ на KVM-свитч, стоит открыть терминал и попробовать отправить монитору пару команд. В худшем случае вы потратите десять минут. В лучшем — обнаружите, что KVM-переключатель уже стоит у вас на столе.
Источник: dev.to