Автор Тема: Очень крупно всё после подключения второго монитора  (Прочитано 4997 раз)

Оффлайн DEmentED

  • Начинающий
  • *
  • Сообщений: 16
Есть КДЕ5. До подключения второго монитора всё было хорошо, но как только подключил второй, так ВСЁ стало крупным. Очень. Слишком. Уже на экране ввода пароля все элементы огромные.
Оба дисплея имеют одинаковое разрешение: 1920x1080, но разные диагонали: 21.5 и 23 дюйма. Оба подключаются через HDMI.
Видеокарта - АМД RX580.

Вин7 - полет нормальный.
МакОС 14.6 (Мохаве) - полет нормальный.

Где смотреть настройки этого безобразия? Чего крутить?

Оффлайн DEmentED

  • Начинающий
  • *
  • Сообщений: 16
Отключил второй монитор и всё вернулось на круги своя. Хотя, как мне кажется, расстояние между пунктами меню стало больше. Или это кегль мельче стал.

Уже более 260-ти просмотров, а никто даже идей не подал, где может прятаться настройка, отвечающая за гигантизм интерфейса. Очень жаль.

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 19 920
    • Домашняя страница
    • Email
Отключил второй монитор и всё вернулось на круги своя. Хотя, как мне кажется, расстояние между пунктами меню стало больше. Или это кегль мельче стал.

Уже более 260-ти просмотров, а никто даже идей не подал, где может прятаться настройка, отвечающая за гигантизм интерфейса. Очень жаль.
В xorg.
Андрей Черепанов (cas@)

Оффлайн Александр Ерещенко

  • Завсегдатай
  • *
  • Сообщений: 1 159
Возможно, второй монитор врёт в DDC насчёт своих размеров
xdpyinfo |egrep "screen #|dimensions|resolution"Как вариант попробовать подключить только второй монитор - будут ли шрифты огромными или нормальными?

Можно жестко зафиксировать свой вариант dpi на оба монитора
KDE - Параметры системы - Шрифты - Использовать другой DPI
Можно выставить, как любит делать Windows, 96dpi
Можно вручную посчитать для ваших мониторов и выбрать приемлемый для обоих (для 21-23" будет как раз где-то близко к 96)

ЗЫ. Подобная проблема вылезает, когда подключаешь ноут с 16" матрицей 1920x1080 к монитору 24" с тем же разрешением - на мониторе размер шрифтов увеличенный, т.к. к нему применяется тот же dpi, что и для ноута.
Сложно предложить разумный вариант пересчета параметров вывода для нескольких мониторов с разным физическим dpi с учётом очень гибкой конфигурации вывода на несколько мониторов (можно делать и полностью пересекающиеся пространства мониторов, и частично пересекающиеся, и непересекающиеся - последний вариант самый простой для разных dpi)
Поэтому проще всего задать преемлемый фиксированный dpi для всех мониторов одновременно.
« Последнее редактирование: 18.12.2020 20:08:00 от Александр Ерещенко »

Оффлайн DEmentED

  • Начинающий
  • *
  • Сообщений: 16
Как вариант попробовать подключить только второй монитор - будут ли шрифты огромными или нормальными?

У меня не сколько шрифты, сколько вообще ВСЁ увеличилось.

В ходе очередного эксперимента подключил второй монитор "на горячую". И, о чудо, оба дисплея показывают то что надо. Но если во время загрузки компьютера второй монитор просто подключен по HDMI, но выключен, то я вижу то, что на картинках в первом посте. При подключении "на горячуу" картинка хорошая. Как во вложении.

[andrew@NEST ~]$ xdpyinfo |egrep "screen #|dimensions|resolution"
screen #0:
  dimensions:    3840x1080 pixels (952x268 millimeters)
  resolution:    102x102 dots per inch

Оффлайн DEmentED

  • Начинающий
  • *
  • Сообщений: 16
Сделал ребут
[andrew@NEST ~]$ xdpyinfo |egrep "screen #|dimensions|resolution"
screen #0:
  dimensions:    3840x1080 pixels (320x90 millimeters)
  resolution:    305x305 dots per inch

В пикселях верно. В миллиметрах лажа.

Оффлайн Александр Ерещенко

  • Завсегдатай
  • *
  • Сообщений: 1 159
Сделал ребут
[andrew@NEST ~]$ xdpyinfo |egrep "screen #|dimensions|resolution"
screen #0:
  dimensions:    3840x1080 pixels (320x90 millimeters)
  resolution:    305x305 dots per inch

В пикселях верно. В миллиметрах лажа.
Видимо, когда монитор ещё находится в "спящем" режиме, он как-то странно отвечает на запрос о своих параметрах.
Так что пожалуй проще всего будет зафиксировать dpi вручную на это самое значение 102.

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Поиск вручную модели монитора и размера экрана
по 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.
« Последнее редактирование: 19.12.2020 14:37:02 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Аналогично ТС:

Здесь полный бред, - экран не может быть больше, чем сам аппаратный дисплей:
И 96 dpi на этом дисплее на максимальном разрешении быть не может. Не может и всё. Это аппаратно невозможно.
$ xdpyinfo | grep -B2 resol
screen #0:
  dimensions:    1366x768 pixels (361x203 millimeters)
  resolution:    96x96 dots per inch

Но если задать верные параметры для максимального рарешения
$ xrandr --output eDP1 --fbmm 344x194 --mode 1366x768

то всё придёт в норму
$ xdpyinfo | grep -B2 resol
screen #0:
  dimensions:    1366x768 pixels (344x194 millimeters)
  resolution:    101x101 dots per inch

То что работало в p8, благополучно сломано в p9.
« Последнее редактирование: 19.12.2020 15:20:46 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Сделал ребут
[andrew@NEST ~]$ xdpyinfo |egrep "screen #|dimensions|resolution"
screen #0:
  dimensions:    3840x1080 pixels (320x90 millimeters)
  resolution:    305x305 dots per inch

В пикселях верно. В миллиметрах лажа.

:-) История эта началась, когда обновлением X-сервера с версии 1.20.8-alt1 до версии 1.20.8-alt3, сломали и размер активной области матрицы, и dpi:
https://forum.altlinux.org/index.php?topic=13216.msg350979#msg350979

и продолжалась она, со 104-ой страницы по 110-ю, с множеством выбросов команд терминала.
В ходе чего выяснилось, мейтейнер для X-сервера берёт параметры не из секции 18 Byte Data Blocks, в которой размер активной области  дисплея указан с точностью до миллиметра, а из секции Основные параметры и функции дисплея, в которой размер Active Display Area округлён до ближайшего сантимера:
https://forum.altlinux.org/index.php?topic=13216.msg350993#msg350993
Что в свою очередь сломает и размер Активной Области Дисплея, и dpi.

Где последний рассчитывается
(истинный точный dpi по спецификации на дисплей)
$ echo '1366/((1366*0.252)/10/2.54)' | bc -l; echo '768/((768*0.252)/10/2.54)' | bc -l
100.79365079365079365086
100.79365079365079365087

(по байтам из edid)
$ echo '1366/(344/10/2.54)' | bc -l; echo '768/(194/10/2.54)' | bc -l
100.86162790697674418609
100.55257731958762886601

по формуле
Xmaxres/(Xmm/10/2.54)

Где:

Xmaxres, это максимальное разрешение
для координаты X
$ hexdump -C -s 56 -n 1 < /sys/class/drm/card0/card0-eDP-1/edid # Байт (младший байт) для координаты X
00000038  56                                                |V|
00000039

$ hexdump -C -s 58 -n 1 < /sys/class/drm/card0/card0-eDP-1/edid # Старший полубайт (старший байт) для координаты X
0000003a  50                                                |P|
0000003b

$ ./base.sh 0x556 # ПолубайтБайт, - максимальное разрешение по X
hex=556    dec=1366    oct=2526    bin=10101010110

или координаты Y
$ hexdump -C -s 59 -n 1 < /sys/class/drm/card0/card0-eDP-1/edid # Байт (младший байт) для координаты Y
0000003b  00                                                |.|
0000003c

$ hexdump -C -s 61 -n 1 < /sys/class/drm/card0/card0-eDP-1/edid # Старший полубайт (старший байт) для координаты Y
0000003d  30                                                |0|
0000003e

$ ./base.sh 0x300 # ПолубайтБайт, - максимальное разрешение по Y
hex=300    dec=768    oct=1400    bin=1100000000

и где Xmm, это размер активной области дисплея с точностью до миллиметра
по координатам X или Y
# Байт X; байт Y; байт: два полубайта, - старший для X, младший для Y
$ hexdump -C -s 66 -n 3 < /sys/class/drm/card0/card0-eDP-1/edid
00000042  58 c2 10                                          |X..|
00000045

# В hexadecimal,
# байт имеет двухсимвольное значение
# и представлен в виде двух полубайт,
# старшего (слева) и младшего (справа).
# Например в байте 10 (hex)
# 1 - старший полубайт
# 0 - младший полубайт

$ ./base.sh 0x158 # Координата X в миллиметрах, число как ПолубайтБайт в hex
hex=158    dec=344    oct=530    bin=101011000

$ ./base.sh 0x0c2 # Координата Y в миллиметрах, число как ПолубайтБайт в hex
hex=C2    dec=194    oct=302    bin=11000010

И с dpi,  никак наоборот это не делается. И из Basic Display Parameters & Features, спецификации VESA EEDID, он никак не рассчитывается.
На максимальном разрешении, пиксел отрисовывается в точке матрицы. И никак больше. А на более низком разрешении, в больше чем точка матрицы (размер которой указывается в тысячных миллиметра в спецификации на дисплей/монитор).


Закончилась вся эта история тут
https://bugzilla.altlinux.org/show_bug.cgi?id=38777

Где выяснилось и то, что попутно в X-сервере сломали синтаксис в 10-monitor.conf
https://bugzilla.altlinux.org/show_bug.cgi?id=38777#c5
https://bugzilla.altlinux.org/show_bug.cgi?id=38777#c6


Что крутить? Руками крутить 10-monitor.conf, как и xorg.conf двадцать лет назад.
« Последнее редактирование: 20.12.2020 17:32:32 от Speccyfighter »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 10 259
Что это вообще всё было?
Это было про подробности, чем и как вы можете ответить, если станут утверждать про неправильный edid вашего монитора или дисплея. Когда представленный вами результат декодирования байтов edid, станет непробиваемым аргументом.

Оффлайн tema

  • alt linux team
  • ***
  • Сообщений: 2 073
    • Email
# apt-get install xorg-96dpi