Всем доброго В p9 xorg-server на intel kms через intel_drv устанавливает неверный заниженный размер активной зоны матрицы ноутбука Lenovo G50-80. Устанавливая его вместо 344x194, на 340x190 миллиметров. В результате приложение запускаемое в полный экран на рекомендуемом максимальном разрешении, например 0ad, рассыпает графику в мозаику. Возврат графики в номальное состояние, убить процесс по kill из tty. В p8 на intel kms через intel_drv этой ошибки нет и xorg-server правильно устанавливает верный размер активной зоны матрицы в 344x194 mm и правильный 100 dpi. Даташит на матрицу Lenovo G50-80: LG Display LP156WHB-TPC1 Lenovo G50-80 http://www.datasheet-pdf.com/PDF/LP156WHB-TPC1-Datasheet-LG-929726 VESA EEDID Version 1, Revision 4: https://glenwing.github.io/docs/VESA-EEDID-A2.pdf Множество выбросов, включая выбросы X-сервера и разбор edid Lenovo G50-80: Сравнение kms intel_drv и kms modesetting_drv в p9 и p8, с выбросами xdpyinfo и логами X-сервера, плюс скриншоты и ссылка на даташит LG Display LP156WHB-TPC1 Lenovo G50-80: https://forum.altlinux.org/index.php?topic=13216.msg351069#msg351069 Разбор edid LP156WHB-TPC1, плюс грепаный лог X-сервера на p9 intel kms intel_drv: https://forum.altlinux.org/index.php?topic=13216.msg351089#msg351089 Некоторые соображения в отношении неверных установок X-сервером с p9 kms intel_drv и кратко упоминанием сравнения этого же, но на p8: https://forum.altlinux.org/index.php?topic=13216.msg351090#msg351090 Основная суть: Активная зона матрицы LG Display LP156WHB-TPC1 Lenovo G50-80: 1366x768, 344.232x193.536 mm, 0.252 mm точка В p9 с драйвером intel_drv, X-сервер устанвливает неверный физический размер активной зоны матрицы: $ sed -n '86p; 89p; 143,144p; 1044,1045p' /var/log/Xorg.0.log [ 41.850] (--) intel(0): Output eDP1 using initial mode 1366x768 on pipe 0 [ 41.852] (==) intel(0): DPI set to (96, 96) [ 42.472] (II) intel(0): switch to mode 1366x768@60.0 on eDP1 using pipe 0, position (0, 0), rotation normal, reflection none [ 42.480] (II) intel(0): Setting screen physical size to 340 x 190 [ 45.964] (II) intel(0): switch to mode 1366x768@60.0 on eDP1 using pipe 0, position (0, 0), rotation normal, reflection none [ 45.989] (II) intel(0): Setting screen physical size to 340 x 190 В результате чего, приложение запускаемое в полный экран на максимальном рекомендуемом разрешении, рассыпает графику в мозаику. Байты 12, 13, 14, descriptor 1, # cat /sys/class/drm/card0-eDP-1/edid > edid-LP156WHB-TPC1_intel_drv.bin # edid-decode edid-LP156WHB-TPC1_intel_drv.bin Extracted contents: header: 00 ff ff ff ff ff ff 00 serial number: 30 e4 68 04 00 00 00 00 00 18 version: 01 04 basic params: 95 22 13 78 ea chroma info: 05 f5 94 58 56 92 28 1e 50 54 established: 00 00 00 standard: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 descriptor 1: d0 1d 56 f4 50 00 16 30 30 20 35 00 58 c2 10 00 00 19 descriptor 2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 descriptor 3: 00 00 00 fe 00 4c 47 20 44 69 73 70 6c 61 79 0a 20 20 descriptor 4: 00 00 00 fe 00 4c 50 31 35 36 57 48 42 2d 54 50 43 31 extensions: 00 checksum: b3 Manufacturer: LGD Model 468 Serial Number 0 Made week 0 of 2014 EDID version: 1.4 Digital display 6 bits per primary color channel DisplayPort interface Maximum image size: 34 cm x 19 cm Gamma: 2.20 DPMS levels: Standby Suspend Off Supported color formats: RGB 4:4:4, YCrCb 4:4:4 First detailed timing is preferred timing Established timings supported: Standard timings supported: Detailed mode: Clock 76.320 MHz, 344 mm x 194 mm 1366 1414 1446 1610 hborder 0 768 771 776 790 vborder 0 -hsync -vsync Manufacturer-specified data, tag 0 ASCII string: LG Display ASCII string: LP156WHB-TPC1 Checksum: 0xb3 (valid) EDID block does NOT conform to EDID 1.3! Missing name descriptor Missing monitor ranges содержат в edid верный размер активной зоны матрицы: $ ./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 $ echo '88+256' | bc -l # байт 12 + полубайт байта 14 (младший бит старшего байта, для байтов 12 и 13) из descriptor 1 344 Но в p9 с kms intel_drv, активную зону матрицы, X-сервер устанавливает в 340x190 mm. Что неверно и меньше реального 344x194 mm. И предположительно, это значение берётся из второго и третьего байта basic params из edid-decode. Которые хранятся как целочисленное значение в сантиметрах по адресам 15h 16h (спецификация), что правильно для спецификации VESA EEDID 1R4, но неправильно для установки физического размера активной зоны матрицы. При этом X-сервер в p9, установленный размер матрицы в конфиге, игнорирует: $ 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 устанавливая Setting screen physical size to 340 x 190 В p8 это значение, X-сервер с этим же драйвером, устанавливает верно в 344x194 mm с правильным dpi для этой матрицы: $ sed -n '81p; 84,85p; 123,124p; 269,271p' /var/log/Xorg.0.log [ 32.851] (--) intel(0): Output eDP1 using initial mode 1366x768 on pipe 0 [ 32.852] (**) intel(0): Display dimensions: (344, 194) mm [ 32.852] (**) intel(0): DPI set to (100, 100) [ 33.416] (II) intel(0): switch to mode 1366x768@60.0 on eDP1 using pipe 0, position (0, 0), rotation normal, reflection none [ 33.430] (II) intel(0): Setting screen physical size to 344 x 194 ... Ошибка тестировалась и анализировалась на ноутбуке Lenovo G50-80 в системах на alt-p8-sysv-xfce и alt-p9-xfce-sysv.
Удалите /etc/X11/xorg.conf.d/10-monitor.conf
(Ответ для Valery Inozemtsev на комментарий #1) > Удалите /etc/X11/xorg.conf.d/10-monitor.conf Удаление 10-monitor.conf не устранит ошибку, а заменит intel_drv на modesetting_drv.
Эта ошибка пересекается с багом #38841, в котором parse-edid возвращает такой же неверный размер активной зоны дисплея в 340 x 190 mm, байтами 15h 16h edid, что неверно и не соответствует истинному размеру экрана в 344 x 194 mm дисплея LP156WHB-TPC1. Поскольку байты 15h 16h edid, это размер экрана в сантиметрах, округлённый до ближайшего сантиметра (описание двух байтов разделом 3.6.2 спецификации VESA E-EDID Release 1, Revision 4).
(In reply to Speccyfighter from comment #0) > При этом X-сервер в p9, установленный размер матрицы в конфиге, игнорирует: Такое впечатление у меня тоже сложилось при попытке избавиться от bug 36470. Хотя что не осень понятно - как оно там у меня потом правильно работает после логина.
(Ответ для Speccyfighter на комментарий #0) > При этом X-сервер в p9, установленный размер матрицы в конфиге, игнорирует: Если Identifier "Monitor0", то игнорирует. Если: Section "Monitor" Identifier "<default monitor>" DisplaySize 344 194 EndSection Вполне себе принимает.
Похоже попутно ещё и синтаксис в конфигах разломали.
(Ответ для stranger573 на комментарий #5) > (Ответ для Speccyfighter на комментарий #0) > > > При этом X-сервер в p9, установленный размер матрицы в конфиге, игнорирует: > > Если Identifier "Monitor0", то игнорирует. > > Если: > Section "Monitor" > Identifier "<default monitor>" > DisplaySize 344 194 > EndSection > Вполне себе принимает. Спасибо! Так работает, размер экрана и dpi устанавливается, оба верные, те, которые и должны быть: $ 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 $ sed -n '145,146p' /var/log/Xorg.0.log [ 41.503] (II) intel(0): switch to mode 1366x768@60.0 on eDP1 using pipe 0, position (0, 0), rotation normal, reflection none [ 41.514] (II) intel(0): Setting screen physical size to 344 x 194 $ xdpyinfo | grep -B2 resol screen #0: dimensions: 1366x768 pixels (344x194 millimeters) resolution: 101x101 dots per inch