Summary: | Неверный возврат размера экрана дисплея в parse-edid | ||||||||
---|---|---|---|---|---|---|---|---|---|
Product: | Sisyphus | Reporter: | Speccyfighter <zxwarior> | ||||||
Component: | read-edid | Assignee: | Vladislav Zavjalov <slazav> | ||||||
Status: | NEW --- | QA Contact: | qa-sisyphus | ||||||
Severity: | normal | ||||||||
Priority: | P5 | CC: | asy, slazav, stranger573 | ||||||
Version: | unstable | ||||||||
Hardware: | all | ||||||||
OS: | Linux | ||||||||
Attachments: |
|
Description
Speccyfighter
2020-08-24 20:28:36 MSK
Спецификация VESA E-EDID Version 1 Revision 4 (1.8 Mb): https://glenwing.github.io/docs/VESA-EEDID-A2.pdf # edid-decode < /sys/devices/pci0000\:00/0000\:00\:02.0/drm/card0/card0-eDP-1/edid | grep 'Manufacturer:\|EDID version\|ASCII' Manufacturer: LGD Model 468 Serial Number 0 EDID version: 1.4 ASCII string: LG Display ASCII string: LP156WHB-TPC1 Спецификация дисплея LP156WHB-TPC1 ноутбука Lenovo G50-80 (pdf, 5.3 Mb): http://www.datasheet-pdf.com/PDF/LP156WHB-TPC1-Datasheet-LG-929726 Правильно ли я понимаю проблему: По стандарту VESA E-EDID в разделе "Basic Display Parameters and Features" указан примерный размер экрана (округленный до сантиметров). Для того, чтобы устанавливать подходящий размер шрифта, картинок и т.п. В разделах "Detailed Timing Descriptor" указаны более точные размеры изображения для конкретных видеорежимов. Из них первый, "Preferred Timing Mode" всегда должен присутствовать и показывать оптимальный режим для данного монитора. parse-edid выдает секцию "Monitor" для xorg.conf с DisplaySize, выставленным по первому (неточному) размеру. DisplaySize в xserver нужен для выставления DPI, то есть, тоже для получения правильного размера шрифтов, картинок и т.п. То есть, формально все сделано правильно, особенно, учитывая, что это делалось во времена CRT-мониторов с разными режимами. Вы предлагаете выдавать более точный размер, из "Preferred Timing Mode", что будет точнее для LCD-мониторов с одним режимом. Мне не очень понятно, какие проблемы может вызвать неточное выставление DisplaySize (и, соответственно DPI). Вроде, вся графика привязана к точкам экрана, DPI применяется только для оценки размера дефолтного шрифта, чтоб не было слишком мелко/крупно, и тому подобных вещей. Собственно, вопрос, в чем именно заключается наблюдаемая проблема? Решается ли она установкой правильного DisplaySize в xorg.conf или DPI через xrandr? (In reply to Vladislav Zavjalov from comment #2) > Собственно, вопрос, в чем именно заключается наблюдаемая проблема? Speccyfighter завёл ещё один баг на эту же тему, про xorg: bug 38777, там уже описано, к чему предположительно это у него приводит. > Решается ли она установкой правильного DisplaySize в xorg.conf или DPI через xrandr? Вероятно тут кроется другая проблема - xorg, похоже, перестал на DisplaySize реагировать. (Ответ для Vladislav Zavjalov на комментарий #2) > Правильно ли я понимаю проблему: > > По стандарту VESA E-EDID в разделе "Basic Display Parameters and Features" > указан примерный размер экрана (округленный до сантиметров). Для того, чтобы > устанавливать подходящий размер шрифта, картинок и т.п. > > В разделах "Detailed Timing Descriptor" указаны более точные размеры > изображения для конкретных видеорежимов. Из них первый, "Preferred Timing > Mode" всегда должен присутствовать и показывать оптимальный режим для > данного монитора. > > parse-edid выдает секцию "Monitor" для xorg.conf с DisplaySize, выставленным > по первому (неточному) размеру. DisplaySize в xserver нужен для выставления > DPI, то есть, тоже для получения правильного размера шрифтов, картинок и > т.п. То есть, формально все сделано правильно, особенно, учитывая, что это > делалось во времена CRT-мониторов с разными режимами. Вы предлагаете > выдавать более точный размер, из "Preferred Timing Mode", что будет точнее > для LCD-мониторов с одним режимом. > Предлагаю привести вывод DisplaySize в соответствие со спецификацией по байтам 15h 16h, т.е. в сантиметрах. Либо делать вывод в миллиметрах по байтам 42h 43h 44h первого дескриптора, с отображением точного размера дисплея. Некоторые размышления по поводу термина DisplaySize в парсинге edid: Термин DisplaySize в контексте экрана, некорректен. Поскольку сам DisplaySize, скорее воспринимается как Outline Dimension (определение спецификации на LP156WHB-TPC1), т.е. габаритный размер дисплея, а не как ScreenSize, который в той же спецификации на LP156WHB-TPC1 определён как Active Display Area, т.е. активная область дисплея (экран, screen). Поскольку экран как активная область, лишь часть дисплея, габариты которого скрыты от пользователя корпусом монитора. Это скорее ScreenSize как размер экрана, а не DisplaySize как устройство отображения целиком. > Мне не очень понятно, какие проблемы может вызвать неточное выставление > DisplaySize (и, соответственно DPI). Вроде, вся графика привязана к точкам > экрана, DPI применяется только для оценки размера дефолтного шрифта, чтоб не > было слишком мелко/крупно, и тому подобных вещей. > Собственно, вопрос, в чем именно заключается наблюдаемая проблема? Решается > ли она установкой правильного DisplaySize в xorg.conf или DPI через xrandr? Не решается установкой DisplaySize в 10-monitor.conf: $ cat /etc/X11/xorg.conf.d/10-monitor.conf # Generated by xsetup Section "Monitor" Identifier "Monitor0" DisplaySize 344 194 EndSection Section "Device" Identifier "Card0" Option "SwapbuffersWait" "false" Driver "intel" EndSection Неверный размер экрана, неверный dpi: $ sed -n '145,146p' /var/log/Xorg.0.log [ 40.477] (II) intel(0): switch to mode 1366x768@60.0 on eDP1 using pipe 0, position (0, 0), rotation normal, reflection none [ 40.478] (II) intel(0): Setting screen physical size to 340 x 190 $ xdpyinfo | grep -B2 resol screen #0: dimensions: 1366x768 pixels (340x190 millimeters) resolution: 102x103 dots per inch Решается установкой через xrandr: $ xrandr --dpi 100.79365079365079365079 $ xdpyinfo | grep -B2 resol screen #0: dimensions: 1366x768 pixels (344x193 millimeters) resolution: 101x101 dots per inch Истинный точный dpi для дисплея LP156WHB-TPC1: $ echo -e '2.54*10*1366/(1366*0.252)\n2.54*10*768/(768*0.252)' | bc -l 100.79365079365079365079 100.79365079365079365079 Истинный точный размер экрана дисплея LP156WHB-TPC1: $ echo -e '1366*0.252\n768*0.252' | bc -l 344.232 193.536 (In reply to Speccyfighter from comment #4) > (Ответ для Vladislav Zavjalov на комментарий #2) > > Решается ли она установкой правильного DisplaySize в xorg.conf или DPI > > через xrandr? > > Не решается установкой DisplaySize в 10-monitor.conf: > > $ cat /etc/X11/xorg.conf.d/10-monitor.conf > # Generated by xsetup > > Section "Monitor" > Identifier "Monitor0" > DisplaySize 344 194 > EndSection > > Section "Device" > Identifier "Card0" > Option "SwapbuffersWait" "false" > Driver "intel" > EndSection > В X-сах сломан синтаксис. Решается, если в секции Monitor, индентификатор установлен как Identifier "<default monitor>" а не Identifier "Monitor0" $ cat /etc/X11/xorg.conf.d/10-monitor.conf Section "Monitor" Identifier "<default monitor>" DisplaySize 344 194 EndSection Section "Device" Identifier "Card0" Option "SwapbuffersWait" "false" Driver "intel" EndSection Тогда опция DisplaySize 344 194 отрабатывает: https://bugzilla.altlinux.org/show_bug.cgi?id=38777#c7 За подсказку https://bugzilla.altlinux.org/show_bug.cgi?id=38777#c5 спасибо stranger573. (In reply to Speccyfighter from comment #5) > В X-сах сломан синтаксис. > Решается, если в секции Monitor, индентификатор установлен как > > Identifier "<default monitor>" Нет, именно тут синтаксис не сломан. Так как это не полный конфиг, а только фрагмент, Identifier не может быть произвольным, он должен быть таким, какой ждёт xorg. Или уж тогда надо описывать, начиная с Section "ServerLayout" и произвольными Identifier. Ну а что хочет xorg от фрагментов можно увидеть в логе (это у меня без monitor.conf): [ 338.866] (==) No Layout section. Using the first Screen section. [ 338.866] (==) No screen section available. Using defaults. [ 338.866] (**) |-->Screen "Default Screen Section" (0) [ 338.866] (**) | |-->Monitor "<default monitor>" [ 338.867] (==) No monitor specified for screen "Default Screen Section". (Ответ для Sergey Y. Afonin на комментарий #6) > (In reply to Speccyfighter from comment #5) > > > В X-сах сломан синтаксис. > > Решается, если в секции Monitor, индентификатор установлен как > > > > Identifier "<default monitor>" > > Нет, именно тут синтаксис не сломан. Так как это не полный конфиг, а только > фрагмент, Identifier не может быть произвольным, он должен быть таким, какой > ждёт xorg. Или уж тогда надо описывать, начиная с Section "ServerLayout" и > произвольными Identifier. Ну а что хочет xorg от фрагментов можно увидеть в > логе (это у меня без monitor.conf): > > [ 338.866] (==) No Layout section. Using the first Screen section. > [ 338.866] (==) No screen section available. Using defaults. > [ 338.866] (**) |-->Screen "Default Screen Section" (0) > [ 338.866] (**) | |-->Monitor "<default monitor>" > [ 338.867] (==) No monitor specified for screen "Default Screen Section". p8-sysv-xfce: Он не случайный. Он 0 (ноль) или eDP1: $ xrandr --listmonitors Monitors: 1 0: +eDP1 1366/340x768/190+0+0 eDP1 Альтераторной конфигурялкой с ручной правкой и прописыванием eDP1: # grep -v '#' /etc/X11/xorg.conf.d/10-monitor.conf Section "Monitor" Identifier "eDP1" DisplaySize 344 194 EndSection Section "Device" Identifier "Card0" Driver "intel" EndSection Section "Screen" Identifier "Screen0" Device "Card0" Monitor "eDP1" SubSection "Display" Modes "1366x768" EndSubSection EndSection Может и ошибаюсь, но думается что в бинарнике Xorg, этот Monitor%d не случаен: # strings /usr/bin/Xorg | grep '^Monitor%\|<default' Monitor%d <default monitor> Монитор подхватывается, размер экрана устанавливается правильный с правильным dpi: # sed -n '19,26p; 69,71p; 81,85p' /var/log/Xorg.0.log [ 4998.170] (==) No Layout section. Using the first Screen section. [ 4998.170] (**) |-->Screen "Screen0" (0) [ 4998.170] (**) | |-->Monitor "eDP1" [ 4998.171] (**) | |-->Device "Card0" [ 4998.171] (==) Automatically adding devices [ 4998.171] (==) Automatically enabling devices [ 4998.171] (==) Automatically adding GPU devices [ 4998.171] (==) Automatically binding GPU devices [ 4998.230] (II) intel(0): Output eDP1 using monitor section eDP1 [ 4998.230] (**) intel(0): Found backlight control interface intel_backlight (type 'raw') for output eDP1 [ 4998.230] (II) intel(0): Enabled output eDP1 [ 4998.231] (--) intel(0): Output eDP1 using initial mode 1366x768 on pipe 0 [ 4998.231] (==) intel(0): TearFree enabled [ 4998.231] (==) intel(0): Using gamma correction (1.0, 1.0, 1.0) [ 4998.231] (**) intel(0): Display dimensions: (344, 194) mm [ 4998.231] (**) intel(0): DPI set to (100, 100) Но несмотря на это, xdpyinfo в p8 врёт безбожно, игнорируя всё что установил X-сервер: # xdpyinfo | grep -B2 resolution screen #0: dimensions: 1366x768 pixels (361x203 millimeters) resolution: 96x96 dots per inch Наверное надо бы глянуть, как это всё будет выглядеть, если это же подсунуть в p9-xfce-sysv. Посмотрел и в системе на alt-p9-xfce-sysv-*-x86_64: Правильное разрешение и правильный dpi будет установлено X-сервером: $ sed -n '68,70p; 80,84p' /var/log/Xorg.0.log [ 1271.795] (II) intel(0): Output eDP1 using monitor section Monitor0 [ 1271.795] (**) intel(0): Found backlight control interface intel_backlight (type 'raw') for output eDP1 [ 1271.795] (II) intel(0): Enabled output eDP1 [ 1271.796] (--) intel(0): Output eDP1 using initial mode 1366x768 on pipe 0 [ 1271.796] (==) intel(0): TearFree enabled [ 1271.796] (==) intel(0): Using gamma correction (1.0, 1.0, 1.0) [ 1271.796] (**) intel(0): Display dimensions: (344, 194) mm [ 1271.796] (**) intel(0): DPI set to (100, 100) если сгенерирован такой конфиг: $ grep -v '#' /etc/X11/xorg.conf.d/10-monitor.conf Section "Monitor" Identifier "Monitor0" DisplaySize 344 194 EndSection Section "Device" Identifier "Card0" Driver "intel" EndSection Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" SubSection "Display" Modes "1366x768" EndSubSection EndSection Но xdpyinfo про размер экрана и dpi продолжит врать: $ xdpyinfo | grep -B2 resol screen #0: dimensions: 1366x768 pixels (361x203 millimeters) resolution: 96x96 dots per inch Всё отработает, если есть секция "Screen" в таком виде. Конфигурированием через alterator-standalone x11, с явным указанием всех необходимых опций и параметров. В alt-p9-xfce-sysv-*-{i586,x86_64}, через модуль альтератора x11, на ноутбуке Lenovo G50-80 с дисплеем LP156WHB-TPC1, сгенерировать секцию "Screen" невозможно. За отсутствием разрешения 1366x768 в списке доступных разрешений. Этот конфиг выше, был сгенерирован в системе на alt-p8-sysv-xfce-*-i586 и был скопирован вручную в систему на alt-p9-xfce-sysv-*-x86_64. Ошибка: В модуле альтератора x11, в списке доступных разрешений, отсутствует разрешение 1366x768. Генерация секции "Screen" в 10-monitor.conf невозможна на дисплеях с максимальным разрешением 1366x768. Обход ошибки: Для генерации секции "Screen" через альтератор, выбрать любое доступное наиболее близкое разрешение. После генерации 10-monitor.conf, в секции "Screen" вручную сменить это разрешение на максимальное рекомендуемое для дисплея. На DisplaySize parse-edid внимания не обращать: для LP156WHB-TPC1 он покажет неверный размер экрана в 340x190. Но этот точный размер экрана в миллиметрах нужен, для установки правильного размера экрана в модуле альтератора x11, для установки X-сервером правильного размера экрана и правильного dpi. Правильный размер экрана с точностью до миллиметра, возвращает edid-decode. Необходимо в случае, если точный размер экрана неизвестен и документация на дисплей отсутствует. (In reply to Speccyfighter from comment #7) > Он не случайный. Он 0 (ноль) или eDP1: Нет. Он eDP1, в данном случае, потому, что есть Section "Screen" Monitor "eDP1" Только из-за этого подхватился Section "Monitor" Identifier "eDP1" Если Section "Screen" убрать, то, очевидно, не подхватится, если Identifier не поменять соответствующим образом. (Ответ для Sergey Y. Afonin на комментарий #9) > (In reply to Speccyfighter from comment #7) > > > Он не случайный. Он 0 (ноль) или eDP1: > > Нет. Он eDP1, в данном случае, потому, что есть > > Section "Screen" > Monitor "eDP1" > > Только из-за этого подхватился > > Section "Monitor" > Identifier "eDP1" > > Если Section "Screen" убрать, то, очевидно, не подхватится, если Identifier > не поменять соответствующим образом. Не совсем так. Всё зависит от используемого драйвера, intel_drv или modesetting_drv. А в Линукс единого стандарта на имя устройства отображения под графикой intel нет. Штука вот в чём: Для драйвера modesetting_drv, c LP156WHB-TPC1, устройство отображения это eDP-1: $ cat p9-modeset_drv.txt $ ls /etc/X11/xorg.conf.d/10-monitor.conf ls: невозможно получить доступ к '/etc/X11/xorg.conf.d/10-monitor.conf': Нет такого файла или каталога $ xrandr | grep eDP eDP-1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 344mm x 194mm $ xrandr --listmonitors Monitors: 1 0: +eDP-1 1366/344x768/194+0+0 eDP-1 $ grep -r eDP /var/log/Xorg.0.log [ 14413.049] (II) modeset(0): Output eDP-1 has no monitor section [ 14413.053] (II) modeset(0): EDID for output eDP-1 [ 14413.054] (II) modeset(0): Printing probed modes for output eDP-1 [ 14413.057] (II) modeset(0): Output eDP-1 connected [ 14413.057] (II) modeset(0): Output eDP-1 using initial mode 1366x768 +0+0 В то время как для X-драйвера intel_drv, устройство отображения, это eDP1. Это устройство: $ xrandr --listmonitors Monitors: 1 0: +*eDP1 1366/340x768/190+0+0 eDP1 прекрасно подтянется: $ grep eDP /var/log/Xorg.0.log | head -n5 [ 17782.787] (II) intel(0): Output eDP1 using monitor section eDP1 [ 17782.788] (**) intel(0): Found backlight control interface intel_backlight (type 'raw') for output eDP1 [ 17782.788] (II) intel(0): Enabled output eDP1 [ 17782.789] (--) intel(0): Output eDP1 using initial mode 1366x768 on pipe 0 [ 17782.818] (II) intel(0): switch to mode 1366x768@60.0 on eDP1 using pipe 0, position (0, 0), rotation normal, reflection none и установится правильный размер экрана (Active Display Area): $ grep -ri physical /var/log/Xorg.0.log | head -n1 [ 17782.819] (II) intel(0): Setting screen physical size to 344 x 194 даже если секция "Screen" отсутствует: $ grep -v '#' /etc/X11/xorg.conf.d/10-monitor.conf Section "Monitor" Identifier "eDP1" DisplaySize 344 194 EndSection Section "Device" Identifier "Card0" Driver "intel" EndSection Но X-сервер будет продолжать форсить 96 dpi: $ grep DPI /var/log/Xorg.0.log | head -n1 [ 17782.789] (==) intel(0): DPI set to (96, 96) что является неправильным для LP156WHB-TPC1: https://bugs.freedesktop.org/show_bug.cgi?id=23705#c27 При этом, при конфигурировании на intel графике, нужно быть предельно внимательным с именем устройства отображения, на имя которого, стандарт в Линукс отсутствует: С modesetting_drv на Lenovo G50-80 с LP156WHB-TPC1, это eDP-1. С intel_drv на этом же железе, это eDP1. Поэтому чтобы DisplaySize подхватился, идентификатор как имя устройства отображения должен указываться точно. А увидеть его имя можно в логе Xorg. Но если монитор указан как Monitor0 (как его и конфигурирует alterator-x11), а не как реальное имя устройства: $ grep -v '#' /etc/X11/xorg.conf.d/10-monitor.conf Section "Monitor" Identifier "Monitor0" DisplaySize 344 194 EndSection Section "Device" Identifier "Card0" Driver "intel" EndSection то без описания Monitor0 в секции "Screen", DisplaySize будет игнорироваться и размер экрана LP156WHB-TPC1 при X-драйвере intel_drv, свалится в неправильные 340x190: $ grep -ri physical /var/log/Xorg.0.log | head -n1 [ 19722.916] (II) intel(0): Setting screen physical size to 340 x 190 Не факт конечно что скажу не глупость, но вот тут меня смущает этот Monitor%d, который по моему разумению, допускаю что и неправильному, и должен обрабатываться как обнаруженный Monitor0, если монитор один: # strings /usr/bin/Xorg | grep 'Monitor%' Monitor%d Предположил, что %d, это номер устройства вывода в Monitor%d: $ xrandr --listmonitors Monitors: 1 0: +*eDP1 1366/340x768/190+0+0 eDP1 Тогда, продолжая, почему DisplaySize подхватывается без секции "Screen" при указании реального имени устройства, с поправкой на X-драйвер, и не подхватывается при указании Monitor0, не знаю. В продолжение Комментарий 10: Но если идентификатор, т.е. имя реального устройства отображения, $ xrandr --listmonitors Monitors: 1 0: +*eDP1 1366/340x768/190+0+0 eDP1 $ grep eDP /var/log/Xorg.0.log | head -n5 [ 25360.356] (II) intel(0): Output eDP1 has no monitor section [ 25360.356] (**) intel(0): Found backlight control interface intel_backlight (type 'raw') for output eDP1 [ 25360.356] (II) intel(0): Enabled output eDP1 [ 25360.357] (--) intel(0): Output eDP1 using initial mode 1366x768 on pipe 0 [ 25360.386] (II) intel(0): switch to mode 1366x768@60.0 on eDP1 using pipe 0, position (0, 0), rotation normal, reflection none для соответствующего драйвера указать неверным: $ cat /etc/X11/xorg.conf.d/10-monitor.conf # Generated by xsetup Section "Monitor" # Identifier "Monitor0" # Identifier "eDP1" # intel_drv Identifier "eDP-1" # modesetting_drv DisplaySize 344 194 EndSection Section "Device" Identifier "Card0" Driver "intel" EndSection то DisplaySize в 10-monitor.conf будет проигнорирован и размер экрана свалится в неверные 340x190 mm: $ grep -ri physical /var/log/Xorg.0.log | head -n1 [ 25360.389] (II) intel(0): Setting screen physical size to 340 x 190 (Ответ для Vladislav Zavjalov на комментарий #2) > По стандарту VESA E-EDID в разделе "Basic Display Parameters and Features" > указан примерный размер экрана (округленный до сантиметров). Для того, чтобы > устанавливать подходящий размер шрифта, картинок и т.п. Не подходящий а приблизительный размер. Тем кого это устраивает. > parse-edid выдает секцию "Monitor" для xorg.conf с DisplaySize, выставленным > по первому (неточному) размеру. До недавнего времени выдавал точный размер. И совсем непонятно для чего это понадобилось менять. >Вы предлагаете > выдавать более точный размер, из "Preferred Timing Mode", что будет точнее > для LCD-мониторов с одним режимом. Не совсем так. Вернуть выдачу точного размера, так как было ранее. Ибо было лучше. С неточными размерами часто выставляется dpi с неквадратной точкой для мониторов у которых она квадратная и наоборот. Также во всех случаях выставляется неточный dpi. > Мне не очень понятно, какие проблемы может вызвать неточное выставление > DisplaySize (и, соответственно DPI). Вроде, вся графика привязана к точкам > экрана, DPI применяется только для оценки размера дефолтного шрифта, чтоб не > было слишком мелко/крупно, и тому подобных вещей. Нет, dpi это не крутилка для выставления размеров по вкусу. Нет, не вся графика привязана к точкам экрана. Есть целый класс программ работающих с реальными размерами, такие как: офисные пакеты, CAD-ы, Inkscape, Scribus, просмотрщики pdf и прочих документов. Людям работающим с графикой, шрифтами, вёрсткой и допечатной подготовкой необходимо знать и выставлять абсолютно точное значение dpi. И не только из-за отображаемых размеров. Неправильный dpi вызывает чудовищную растровую интерференцию (см. вложения, изменил dpi всего лишь на единичку в одном из двух измерений, чтобы увидеть разницу необходимо смотреть в масштабе 1:1 или 100%), очень даже может вызывать нарушения в работе видеокарты (по многолетнему опыту), неправильное позиционирование элементов интерфейса, неправильный рендеринг шрифтов и много чего ещё в самых неожиданных местах. Вот вы как думаете, такие вещи как read-edid нужны тем для кого размеры монитора не важны? Они могут без каких-либо программ и EDID получить тоже самое с помощью резиновой портновской ленты с сантиметровыми делениями. Created attachment 8920 [details]
Точный реальный dpi
Created attachment 8921 [details]
dpi на одну единицу в одном измерении меньше
parse-edid при выводе DisplaySize, должен точно следовать спецификации: VESA EEDID Version 1, Revision 4: https://glenwing.github.io/docs/VESA-EEDID-A2.pdf VESA EEDID Version 1, Revision 3 https://glenwing.github.io/docs/VESA-EEDID-A1.pdf Описание байтов 15h 16h: VESA EEDID Version 1, Revision 4 https://glenwing.github.io/docs/VESA-EEDID-A2.pdf Таблица структуры EDID: Table 3.1 - EDID Structure Version 1, Revision 4 Page 19 of 91 Раздел детального описания байтов 15h 16h: 3.6.2 Horizontal and Vertical Screen Size or Aspect Ratio: 2 Bytes Page 25 of 91 Цитата из описания байтов 15h 16h: The horizontal and vertical screen size parameters provide information on the screen dimensions of the display device, rounded to the nearest centimeter (cm). Байты 15h 16h содержат размер дисплея округлённый до ближайшего сантиметра. При декодировании edid, размер дисплея при использовании байтов 15h 16h, должен указываться только в сантиметрах. Переводить содержимое этих байтов из сантиметров в миллиметры нельзя. Эти же два байта, 15h 16h, кратко упоминаются примечанием в колонке Format, таблицы 3.1 EDID Format Overview, в спецификации 1R3. edid-decode, декодирует edid верно. Правильно указывая размер дисплея и в Maximum image size, и в Detailed Timing Descriptors. Ошибка пересекается с багом: Ошибка 38777 - xorg устанавливает малый неверный размер матрицы https://bugzilla.altlinux.org/show_bug.cgi?id=38777 (Ответ для Vladislav Zavjalov на комментарий #2) > DisplaySize в xserver нужен для выставления DPI, ... И для LG Display LP156WHB-TPC1 Lenovo G50-80 http://www.datasheet-pdf.com/PDF/LP156WHB-TPC1-Datasheet-LG-929726 этот DPI будет неверным. Потому как при размере экрана с точностью до тысячных миллиметра $ echo -e '1366*0.252\n768*0.252' | bc -l 344.232 193.536 и целочисленном 344x194, верный DPI, это 101 dpi. Или 100. Потому что истинное точное значение для этой матрицы, находится между 100 и 101. Но никак не 96. |