~/home

Старый монитор, который перестаёт ловить сигнал

· железо, windows

TL;DR: Старый DVI-монитор, который остаётся чёрным после загрузки или долгого пропадания сигнала, можно разбудить, переключив вход по DDC/CI (VCP 0x60) на VGA и обратно на DVI утилитой NirSoft ControlMyMonitor из задачи планировщика при входе в систему.

Мой второй экран — 22-дюймовая панель с наработкой около 35 000 часов, подключённая по DVI. После каждой загрузки он оставался чёрным с включённой подсветкой. Windows его видела, кабель был в порядке, переподключение помогало. Надоело это очень быстро.

Сужаем круг

Монитор отвечает по DDC/CI, так что можно спросить у него самого, что происходит. В зависшем состоянии он сообщал правильный вход (DVI) и частоту вертикальной развёртки 0 (VCP AE), то есть просто не слушал сигнал.

  • Воспроизводится так: Win+P → «PC screen only» на 40 секунд, потом «Extend». Разрыв в секунду (Win+Ctrl+Shift+B) проблему не вызывает.
  • Повторный выбор DVI ничего не даёт. Перезапуск сигнала со стороны Windows — тоже.
  • Переключение входа на VGA и обратно на DVI будит его каждый раз.

Обходное решение

ControlMyMonitor от NirSoft умеет писать VCP-коды из командной строки. VCP 60 — источник сигнала; у этого монитора 1 — VGA, 3 — DVI.

ControlMyMonitor.exe /SetValue "\\.\DISPLAY2\Monitor0" 60 1
timeout /t 2
ControlMyMonitor.exe /SetValue "\\.\DISPLAY2\Monitor0" 60 3

Пока монитор переключается, он игнорирует запись, поэтому настоящий скрипт повторяет команду, пока чтение 60 не подтвердит значение, а потом проверяет, что AE больше не 0.

Скрипт запускается задачей планировщика при входе в систему, плюс второй триггер через минуту — на всякий случай. 26 загрузок подряд монитор зависал, и каждый раз скрипт будил его с первой попытки.