Арч на флешке и определение размеров экрана

Приступив основательно к обустройству своей Арч-флешки, я столкнулся в числе прочего с дикой багофичей то ли Xorg, то ли драйверов к нему.

Заключается она в том, что если в xorg.conf или xorg.conf.d/* НЕ заданы принудительно размеры экрана в мм или DPI, то xorg, судя по логу, сначала определяет ПРАВИЛЬНЫЕ физические размеры экрана, а потом вдруг меняет их на совершенно левые “96dpi”, которые разумеется не соответствуют действительности, и приводят искажению масштаба шрифтов.

Если на стационарно установленном на определённую машину арче размеры можно тупо задать в конфиге и забыть о проблеме, то от переносной системы, от которой требуется работа на разном железе и разных экранах, требуется бОльшее.

Пока я пилю временное решение – скрипт, который по выводу xrandr и логам Xorg пытается найти указания на истинные размеры экрана, после чего восстанавливает их через xrandr –fbmm
Препирательства с разработчиками Xorg планируются, но пока не до них.

Если кто-то уже сталкивался с такой проблемой, было бы очень интересно узнать, что из этого вышло :)
к моей радости не сталкивался. Все шрифты прямые, разрешение верное. Но в теории готов к таким вариантам. По своей философии я считаю, что главное увидеть хоть чтото, а потом временно допилить. Странно, когда я планировал перенос системы на флешку, для работы с нее, я просто был уверен, что у меня всегда будут такие проблемы, подобные описанной, однако я их не встречаю. Юзаю “открытки”(открытые дрова). Может это ксорг, я просто давно не обновлял свою, надо бы посмотреть.
Лозунг у них был такой: "Познание бесконечности требует бесконечного времени". С этим я не спорил, но они делали из этого неожиданный вывод: "А потому работай не работай — все едино". И в интересах неувеличения энтропии Вселенной они не работали. (с)
По всей видимости, xorg устанавливает 96dpi по той же причине, по которой это делает, например, firefox - чтобы не сыпались интерфейсы. Картинки через dpi не изменяются, соответственно при различных dpi будут различные пропорции в интерфейсах. С точки зрения дизайна это не есть хорошо (стандартные иконки но маленький шрифт или стандартные иконки и огромный шрифт), поэтому приняли, так сказать, точку отсчёта в 96dpi. Лечить это лучше не стоит, надо просто выставить размеры шрифтов с учётом этого dpi и радоваться жизни.
По всей видимости, xorg устанавливает 96dpi …
… приняли, так сказать, точку отсчёта в 96dpi.
Что-то не понял, где это xorg устанавливает эти 96? У меня не устанавливает и не устанавливал. Вот то, что он лажает с определением физического размера дисплея - факт и, как следствие, начинается лажа со шрифтами. Хотя, если говорить о Nouveau, так это вообще, вещь в себе, не менее чем блоб. Она и ставит, хоть тресни, эти пресловутые 96dpi. Блоб хоть верно ставит 90х88 (мои), но благодаря xorg-у, неверно определяется размер дисплея. Или xorg преднамеренно искажает размер, чтобы втиснуть в него эти свои 96 точек?
Вобщем, начинаются всякие ухищрения, типа “UseEdidDpi” “False”, “DisplaySize 473.7 296.0” и подтягивание разрешения до “красивых” 90х90dpi - но это, конечно, не в случае с флешкой и случаев, когда размер и разрешение дисплея заранее неизвестны.
Это просто в кач-ве иллюстрации “корректной” работы xorg-а.
Кто ставит я понятия не имею, просто рассказал о возможной причине такого поведения.
Может я не в тему, размеры экрана в пикселях вроде бы.
А xorg не может определить какое разрешение нужно пользователю и выставляет самое большое какое возможно…
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
Дело в том, что пикселы у экранов бывают разные, а xorg, по всей вероятности, знает какой-то пиксел, “средний по больнице” и лепит, исходя из этого.
Вот, например, откуда xdpyinfo берёт инфу? (это уже с подправленным размером, ну, в данном случае, из 20-monitor.conf)
xdpyinfo | grep -B1 dot
  dimensions:    1680x1050 pixels (474x296 millimeters)
  resolution:    90x90 dots per inch
В случае же дефолта, xdpyinfo выведет мне верные размеры в пикселах, но ошибочные в миллиметрах.

На всякий: xdpyinfo > extra/xorg-xdpyinfo
nafanja, что-то Вы совсем тему не сечёте…
такие дела.
Вот у меня драйвер intel, греп из Xorg.0.log :
[   602.028] (II) intel(0): clock: 108.0 MHz   Image Size:  376 x 301 mm
[   602.070] (**) intel(0): DPI set to (85, 86)
[   602.245] (II) intel(0): Setting screen physical size to 338 x 270
Как видите, сначала определяются ПРАВИЛЬНЫЕ физические размеры экрана монитора в миллиметрах:
Image Size: 376 x 301 mm
и правильный физический DPI его экрана, то есть числи его физических пикселей на физический дюйм поверхности по вертикали и горизонтали:
DPI set to (85, 86)

А потом вдруг, безо всякого требования в каких-либо конфигах, неотключаемо и неуловимо, вдруг ни с того ни с сего xorg делает
Setting screen physical size to 338 x 270
и эти фиктивные размеры экрана задаются с тем, чтобы обмануть программы, и заставить их считать, что dpi равен не 86, как это физически у монитора, и это нельзя никакими силами изменить, а якобы 96, как это по традиции делается в форточках.
В результате программы считают, что экран МЕНЬШЕ, чем на самом деле, и делают шрифты БОЛЬШЕ, чем надо.

Ещё раз напоминаю, что речь идёт о СИСТЕМЕ НА ФЛЕШКЕ, которая должна работать на разных машинах с разными экранами и разными DPI, и у меня нет никакой возможности ни задать размеры принудительно в xorg.conf.d/ , ни подогнать шрифты, потому что на другой машине всё опять будет иначе, и подгонять всё придётся иначе. К примеру, если физическое разрешение будет БОЛЬШЕ, чем эти липовые 96dpi, и дурацкая багофича приведёт к тому, что все шрифты на этот раз станут слишком мелкими.

Собственно, меня НЕ интересует вопрос сермяжной правды в действиях разработчиков xorg и драйверов к нему по попытках виртуально изменить физичесий DPI ЖК-экрана, который на самом деле изменить невозможно, и не интерфейсы, которые якобы посыплются. Меня интересует вот что – я не нахожу ШТАТНОГО средства, позволяющего НЕ ДОПУСТИТЬ этого безобразия, когда размеры с самого начала определяются корректно, но потом без моего разрешения изменяются на неправильные. Я не нахожу опции, которая бы позволяла сохранить изначально правильно определённые размеры, а не задавать их принудительно от фонаря.

Ну, а пока я сделал вот такой костыль:
#!/bin/bash
sethwdpi() {
 if [[ -n $RES && $RES != "0x0" ]] ; then
  echo "Set size: $RES"
  xrandr --fbmm $RES
  exit
 fi
}
RES=`xrandr|grep -m 1 ' connected'|sed -n 's/^.* \([0-9]\+\)mm x \([0-9]\+\)mm.*$/\1x\2/p'`
sethwdpi
RES=`sed -n 's/^.*Image Size:\s\+\([0-9]\+\) x \([0-9]\+\).*$/\1x\2/p' /var/log/Xorg.0.log`
sethwdpi
echo 1
Скрипт запускается из .xinitrc , и пытается найти физический размер экрана сначала в выводе xrandr, а если не выходит, то в Xorg.0.log , после чего устанавливает его через xrandr –fbmm
cucullus
nafanja, что-то Вы совсем тему не сечёте…
ага я в этом полный ноль, поэтому и настраиваю только так
/etc/X11/xorg.conf.d/10-monitor.conf
Section "Monitor"
    Identifier    "Monitor0"
    VendorName     "Unknown"
EndSection
Section "Device"
    Identifier    "Device0"
EndSection
Section "Screen"
    Identifier    "Screen0"
    Device        "Device0"
    Monitor       "Monitor0"
    DefaultDepth  24
    SubSection "Display"
        Depth     24
        Modes     "1280x1024"
    EndSubSection
EndSection
А в остальном полагался на автооптеделение Xorg-ом
Псевдографический инсталлятор Arch Linux ver. 3.8.2
Благодарности принимаются на ЯД 410012815723874
 
Зарегистрироваться или войдите чтобы оставить сообщение.