Zajímavá historka s dobrým koncem. O tom, jak se mi pomátlo DPI a aplikace se rozhodly, že fonty přizpůsobí mému dvoumetrovému displeji.
Poznámka: Tohle je pro mou děravou hlavu a pro všechny, kteří budou mít stejný problém. Pokud máte v některých aplikacích miniaturní písmo, jste tu správně.
Před pár dny jsem potřeboval kvůli něčemu spustit VirtualBox a po spuštění na mě vyskočila zajímavá obrazovka.
Fonty byly mikroskopické a prakticky nečitelné. Začal jsem zjišťovat, proč to dělá jen ve VirtualBoxu a zjistil jsem, že problémem jsou aplikace používající knihovnu Qt. Těch mám v počítači jen pár, ale u všech se projevoval stejný problém: miniaturní fonty.
Nechal jsem to být a druhý den jsem začal zkoumat, co se děje. V nastavení to nebylo, protože v qtconfig
(ve kterém byla legrace něco naklikat) změna nastavení nepomohla. Až postupným pátráním jsem přišel na to, kde je problém.
$ xdpyinfo | grep -B1 dot dimensions: 1440x900 pixels (1912x1195 millimeters) resolution: 19x19 dots per inch
Můj Debian si myslí, že mám displej o velikosti dva krát jeden metr. To je na notebook poměrně dost. Zároveň samozřejmě spočítal, že se mi na palec vejde 19 bodů a tomu přizpůsobil i velikosti písma. Jedinou záhadou zatím zůstává, proč to neovlivnilo GTK aplikace, ale jen Qt.
Řešení pak bylo prosté, vzal jsem svinovací metr, změřil jsem si velikost displeje v milimetrech a připsal ji do konfiguračního souboru /etc/X11/xorg.conf
do sekce Monitor
.
Section "Monitor" Identifier "Obecný monitor" Option "DPMS" DisplaySize 332 210 EndSection
Po restartu X serveru už bylo všechno v pořádku.
$ xdpyinfo | grep -B1 dot dimensions: 1440x900 pixels (335x209 millimeters) resolution: 109x109 dots per inch
Qt aplikace vypadají normálně, u GTK se mírně měnila velikost fontů, ale nijak zásadně. V každém případě už systém správně ví, jak má velkou obrazovku a kolik bodíků se na ni vejde.
Špatně zafungovala autodetekce, 19x19 je opravdu kuriósních. Horší je, že mlamojové z x.org budou tlačit 96x96, i když autodetekce fungovat bude :-(
https://bugs.freedesktop.org/show_bug.cgi?id=23705
https://bugs.freedesktop.org/show_bug.cgi?id=41115
X.org může zmást například pokud jsou připojeny displeje s různým DPI, pak třeba závisí na pořadí přidání (a taky displej s blbými EDID údaji to může vykurvit). Utilita xrandr má parametr --dpi, s kterým to lze dobře ovládat, ale myslím to ovlivní jenom nově spuštěné aplikace.
Protože na různých místech mám několik externích monitorů k notebooku, udělal jsem si na to jednoduchý skript, který to přes xrandr všechno nastaví. Experimentálně mi vyšlo DPI 110 nejvhodnejší :-)
Co si pamatuju, každá Qt aplikace dostane by default command-line parametr na nastavení DPI, tudíž lze DPI měnit i per-application (zda si to ukládá i do ~/.config, už nevím).
Teď jsem stejný problém řešil u Toshiby AC100. Tam LVDS panel v xrandru hlásí pro jistotu rozměry 0x0 milimetrů a X server si tak musel vycucat z prstu 96 DPI. Protože jsem líný shánět se po metru, spočítal jsem rozměry displeje z výrobcem udávané uhlopříčky a předpokladu čtvercových pixelů.
Vzhledem k tomu, že tamní linux nemá xorg.conf, postupným dělěním jsem našel minimální obsah, který stačí vložit do /etc/X11/xorg.conf.d/21-monitor.conf
:
Section "Monitor"
Identifier "LCD"
DisplaySize 222 130
EndSection
Section "Screen"
Identifier "MyScreen"
Monitor "LCD"
EndSection
Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. GNU/Linuxem a Unixem obecně se zabývá již více než deset let a věnuje se především jeho nasazení v počítačových sítích a bezpečnostní politice. Zde bloguje o Root.cz, Linuxu, internetu a světě kolem sebe.
Přečteno 112 291×
Přečteno 89 765×
Přečteno 73 160×
Přečteno 58 108×
Přečteno 54 434×