Поиск вручную модели монитора и размера экрана
по VESA EEDID версия 1 ревизия 4
Шаг 1:
Подключенные устройства вывода
# xrandr | grep ' connected' | cut -f1 -d ' '
eDP1
Шаг 2:
Поиск файлов edid устройств вывода
# find /sys -type f -name "edid"
/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-HDMI-A-1/edid
/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/edid
/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-HDMI-A-2/edid
/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-DP-1/edid
Шаг 3:
Поиск подключенных устройств вывода, используя часть пути (Шаг 2)
/sys/devices/pci0000:00/0000:00:02.0/drm/card0/
# grep ^connected /sys/devices/pci0000:00/0000:00:02.0/drm/card0/*/* 2>/dev/null
/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/status:connected
Шаг 4:
Получили полный путь к файлу edid устройства вывода
/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/edid
Шаг 5:
По смещению 95 (dec), находятся 13 байт имени дисплея
# hexdump -C -s 95 -n 13 < /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/edid
0000005f 4c 47 20 44 69 73 70 6c 61 79 0a 20 20 |LG Display. |
0000006c
Шаг 6:
По смещению 113 (dec), находятся 13 байт модели дисплея
# hexdump -C -s 113 -n 13 < /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/edid
00000071 4c 50 31 35 36 57 48 42 2d 54 50 43 31 |LP156WHB-TPC1|
0000007e
Шаг 7:
По смещению 66 (dec) (байты 12, 13, 14 первого дескриптора), находятся три байта размера экрана дисплея, содержащие размер с точностью до миллиметра.
Байт 12 - координата X.
Байт 13 - координата Y.
Байт 14 - два полубайта для координат X и Y.
# hexdump -C -s 66 -n 3 < /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-eDP-1/edid
00000042 58 c2 10 |X..|
00000045
Шаг 8:
Помощь скрипта base для перевода числа из одной системы счисления в другую.
Листинг скрипта наодится в справочнике:
https://forum.altlinux.org/index.php?topic=32361.msg351134#msg351134# ./base.sh --help
base.sh - вывод чисел в различных системах счисления, 1.2 (stv '95)
Порядок использования: base.sh [number ...]
Если число не задано, то производится ввод со stdin.
Число может быть:
двоичное должно начинаться с комбинации символов 0b (например 0b1100)
восьмеричное должно начинаться с 0 (например 014)
шестнадцатиричное должно начинаться с комбинации символов 0x (например 0xc)
десятичное в любом другом случае (например 12)
Шаг 9:
Переводим байт 12 первого дескритора (находится по смещению 66; см. Шаг 7) из hex в другие системы счисления
# ./base.sh 0x58
hex=58 dec=88 oct=130 bin=1011000
Шаг 10:
Переводим байт 13 первого дескритора из hex в другие системы счисления
# ./base.sh 0xc2
hex=C2 dec=194 oct=302 bin=11000010
Шаг 11:
Переводим байт 14 первого дескритора из hex в другие системы счисления:
Байт, это 8 бит. Дваа полубайта, это два по 4 бита, - счёт битов начинается справа, с нуля. Справа 4 бита в байте, - младший полубайт; слева 4 бита, - старший полубайт.
Старший полубайт (четыре бита, слева) относится к координате X; младший полубайт (четыре бита, справа) относится к координате Y.
# ./base.sh 0x10
hex=10 dec=16 oct=20 bin=10000
Шаг 12:
Вычисляем размер экрана по координате X в формате:
ПолубайтБайт
Старший полубайт байта 14 и байт 12.
# ./base.sh 0b000101011000
hex=158 dec=344 oct=530 bin=101011000
Шаг 13:
Вычисляем размер экрана по координате Y в формате:
ПолубайтБайт
Младший полубайт байта 14 и байт 13.
# ./base.sh 0b000011000010
hex=C2 dec=194 oct=302 bin=11000010
Шаг 14:
Шагами 12 и 13 получили размер экрана в 344x194 миллиметра.
В шагах 12 и 13, вычисление можно проводить и в шестнадцатиричной системе счисления.
Байт (8 бит), в шестнадцатиричной системе счисления имеет двухсимвольное значение в виде двух полубайт.
Используя полученные значения в шагах 9, 10 и 11
# ./base.sh 0x58
hex=58 dec=88 oct=130 bin=1011000
# ./base.sh 0xc2
hex=C2 dec=194 oct=302 bin=11000010
# ./base.sh 0x10
hex=10 dec=16 oct=20 bin=10000
получим значения координат в миллиметрах, используя тот же формат ПолубайтБайт, но для hex
# ./base.sh 0x158
hex=158 dec=344 oct=530 bin=101011000
# ./base.sh 0x0c2
hex=C2 dec=194 oct=302 bin=11000010
получив тот же размер экрана в 344x194 миллиметра.
Полтора байта, полубайт и байт, 12 бит, дают 4095 миллиметров по X или Y, которые может максимально содержать edid:
# ./base.sh 0xfff
hex=FFF dec=4095 oct=7777 bin=111111111111
# ./base.sh 0b111111111111
hex=FFF dec=4095 oct=7777 bin=111111111111
Начиная с Шаг 5, все дальнейшие действия можно упростить, если использовать edid-decode из одноимённого пакета.
если использовать полный путь полученный в Шаг 4, в команде форматом:
edid-decode < /полный/путь/подключенное/устройство/вывода/edidВывод будет представлять из себя дамп edid и декодирование секций edid с комментариями значений полей дампа.
Сверив полученное со спецификацией на монитор/дисплей (pdf на сайте производителя), можно исключить гадание на кофейной гуще, верный edid или неверный.
Спецификация на монитор/дисплей, в pdf файле на сайте производителя, содержит максимальное разрешение и размер точки матрицы с точностью до тысячных миллиметра. Из которых потом можно рассчитать размер экрана до тысячных миллиметра и аппаратно правильный dpi.