EDID
Подмена EDID монитора
Extended Display Identification Data (EDID) — стандарт формата данных VESA, который содержит базовую информацию о мониторе и его возможностях, включая информацию о производителе, максимальном размере изображения, цветовых характеристиках, заводских предустановленных таймингах, границах частотного диапазона, а также строках, содержащих название монитора, его размер и серийный номер.
Все мониторы, аналоговые или цифровые, должны поддерживать EDID, Эти данные хранятся в памяти EEPROM монитора в формате, заданном стандартом VESA.
Формат EDID
Данные EDID форматируются в виде одного или нескольких 128 блоков.
EDID версии 1,0 – 1,2 состоит из одного блока данных в соответствии со спецификацией VESA. С EDID версии 1,3 или расширенным EDID (E-EDID) изготовители могут указать один или несколько блоков расширения в дополнение к основному блоку.
Каждый блок пронумерован, начиная с 0 для начального блока. Чтобы обновить сведения EDID, INF-файл изготовителя указывает номер обновляемого блока и предоставляет 128 байт данных EDID для замены исходного блока. Драйвер монитора получает обновленные данные для исправленных блоков из реестра и использует данные EEPROM для оставшихся блоков.
Бывают случаи, когда монитор, или внешний телевизор не выдают, или дают неправильный EDID
В данной статье рассматривается вариант передачи X-серверу информации об правильном EDID монитора. Статья основана на статье Подстановка файла прошивки вместо вшитого EDID монитора и адаптирована к особенности ALT Linux
Создание дампа прошивки
Устанавливаем read-edid
$ su - # apt-get install read-edid
Считываем EDID
# get-edid | parse-edid
get-edid - считывает EDID, а read-edid преобразует его в читабельный вид
Считать EDID и записать его в файл:
# get-edid > edid.bin
Прочитать содержимое EDID из файла:
# parse-edid < edid.bin
Checksum Correct
Section "Monitor"
Identifier ""
ModelName ""
VendorName "LGD"
# Monitor Manufactured week 0 of 2014
# EDID version 1.3
# Digital Display
DisplaySize 350 190
Gamma 2.20
Option "DPMS" "false"
Modeline "Mode 0" -hsync -vsync
EndSection
Error: output block unchanged parse-edid: IO error reading EDID
тогда попробуйте ещё раз.
Если эта ошибка возникает постоянно тогда это значит, что ваш EDID монитора скорее всего повреждён и делать дамп бессмысленно.
Особый способ сделать дамп прошивки для использующих проприетарный драйвер nvidia.
В nvidia-settings есть кнопка Adquire EDID, которая сохраняет EDID дисплея в двоичном или текстовом формате.
Подстановка дампа прошивки EDID в xorg.conf.d
Выясняем "порт", к каторому подключена ваша видеокарта : xrandr | grep "\<"connec eDP connected primary 1366x768+0+0 (normal left inverted right x axis y axis) 345mm x 194mm
Создаём произвольный файл в /etc/X11/xorg.conf.d с разрешением .conf, например 20-edid.conf, например такого содержания:
Section "Device" Identifier "my_videocard" Option "ConnectedMonitor" "eDP" Option "CustomEDID" "eDP:/ec/X11/edid.bin" Option "IgnoreEDID" "false" Option "UseEDID" "true" EndSection
После рестарта X-сервера , он считает EDID дисплея из нашего дампа прошивки, а не из дисплея.
Это бывает полезным, например, если монитор подключают к "плохому" видеовыходу (через который по какой-то причине неправильно считывается EDID). Тогда, подключив его заранее к хорошему видеовыходу, вы можете сохранить EDID монитора, а потом, при включении к плохому выходу передать EDID X-серверу. Второй случай, это если вы выявили ошибку в выдаваемом монитором EDID, вы его исправляете и передаёте исправленный X-серверу Патчим EDID телевизора из-под Linux
Ссылки
Патчим EDID телевизора из-под Linux Подстановка файла прошивки вместо вшитого EDID монитора