Linux a font rendering…opět

Lis
28
2007

S koupí LCD monitoru (vbrzku se snad rozepíšu víc) jsem čelil problému, zvanému subpixel rendering, v končinách Windows označovanému jako ClearType. Kupodivu se mi poprvé v životě ClearType líbil, a to, co produkoval Linux (aktualizovaný Arch Linux), bylo vcelku zoufalé s jakýmkoliv nastavením. Nicméně povedlo se vyřešit a Linux tu u mě už zase vypadá tak, jak má – tedy lépe než Windows :)

Uvedený popis se primárně týká Arch Linuxu, ale odvodit si potřebné kroky pro jinou distribuci by neměl být problém – pokud nebudete vědět, jak na to, patrně byste to stejně raději neměli dělat. Co bylo potřeba?
V první řadě základní nastavení v /etc/fonts/local.conf. Zatímco na CRT jsem spíše používal autohinter z FreeType, pro slušný vzhled písma na LCD jsem musel aktivovat patentovaný bytecode interpreter. To se provede ve zmíněném souboru nastavením volby autohint na false. Dlužno podotknout, že v některých distribucích (například v Ubuntu) se navenek nic neprojeví, protože ho nemají ve FreeType zkompilovaný, ale to vcelku nevadí, protože se bude stejně kompilovat znova. Současně jsem v témže souboru odpoznámkoval sekci, která detekuje, zda je přítomen LCD monitor, a pokud ano, zapíná subpixel rendering. Je to asi vcelku jedno, fungovat by to mělo i tak, ale proč to neudělat. Vypadá takhle:

<match target="font">
<test qual="all" name="rgba">
<const>unknown</const>
</test>
<edit name="rgba" mode="assign">
<const>rgb</const></edit>
</match>

Poté nastává nejdůležitější část celé akce. Je totiž potřeba nainstalovat balíčky cairo-lcd a xft-lcd, které jsou už součástí repozitáře community. Uživatelé jiných distribucí to budou mít těžší, protože budou muset kompilovat ručně a stejně tak i zjišťovat, jaké patche jsou na standardní zdrojový kód pro dosažení kýžených změn aplikovány. Vodítkem budou PKGBUILDy z komunitního serveru AUR – cairo-lcd, libxft-lcd.
Posléze se na AUR budou muset vydat i uživatelé Arch Linuxu, protože poslední balík, freetype2-lcd_ (to podtržítko v názvu je VELMI důležité), se v žádném repozitáři nevyskytuje. Je tedy třeba ho vyhledat na AURu, poté stáhnout tarball a klasicky zkompilovat pomocí makepkg (v jiných distribucích to zase bude komplikovanější, protože je třeba všechno dělat ručně). Kromě PKGBUILDu je v rootu tarballu i soubor ftoption.h, na jehož konci je možné změnit způsob, který se pro subpixel rendering používá. Musím říct, že alespoň mně osobně ale vyhovuje nastavení, které je předvyplněné (light rendering). U všech ostatních jsou příliš vidět rušivé barevné kontury. Stejně tak je v tomto ftoption.h automaticky zapnuté kompilování včetně zmíněného bytecode interpreteru, takže to není potřeba hledat.
Po připravě balíčku je třeba odinstalovat stávající balík freetype2 (je na něm závislá řada dalších balíčků, takže je nutno použít pacman -Rd) a vzápětí pak normálně nainstalovat nově zkompilovaný balík freetype2-lcd_.
A to je v zásadě všechno. Pak už stačí jen nastavit ve ~/.fonts.conf (ať už ručně, nebo prostřednictvím ovládacího panelu fontů ve window manageru) míru hintingu tak, jak vám vyhovuje – mně osobně je ve výše popsané kombinaci nejpříjemnější medium hinting, ale ten samozřejmě nemusí vyhovovat každému (stejně jako každému patrně nebude vyhovovat bytecode interpreter a budou chtít používat klasický autohinter – stačí na počátku uvedenou volbu přepsat zpátky na true). Současně si nastavuji vynucení 96dpi, ale to už nemá s kvalitou vykreslení fontů v zásadě příliš společného, jde primárně o kompenzaci jejich velikosti.

Musím říct, že jsem s výsledkem VELICE spokojený a z mého pohledu je škoda, že to není pro FreeType, Cairo a Xft výchozí konfigurace. Všechny fonty působí ostřeji a čitelněji a výtečně se zvýšila čitelnost i velmi malých fontů (i když pravda na následujích screenshotech nebudou patrně v rozlišeních nižších, než je mé aktuální 1680×1050, vypadat jako velmi malé žádné fonty…).

Freetype LCD

Freetype LCD

Freetype LCD

Buďte první, komu se článek líbí.

Napsal(a) dne 28. 11. 2007 v 02:58
Kategorie: HW, SW a podobná verbež,Návody

4 Comments »

  • kkl2401 napsal:

    Fakt je tam potreba pacman -Rd (to neni namitka, opravdu dotaz)? Neco takoveho se mi principialne prici. :-) Nezvladl by to pacman -U? Ackoliv kdyz tak nad tim premejslim, tak on asi v tomhle pripade neumi upgradnout, kdyz se jedna o jinej balik, i kdyby mel spravne vyplneno „provides“, mam dojem, ze jsem o nejakym takovyhle problemu kdysi cetl.

  • Case napsal:

    Nezvládl, -U se taky ten původní balík snaží odebrat a zařve, že freetype2 je závislý na tom a tom a že odmítá pokračovat a že máš použít -Rd :) Nicméně ty závislosti se očividně zcela korektně nahradí, protože když pak chceš odebrat pro změnu ten upravený freetype2-lcd, tak zase křičí totéž.

  • Johny_G napsal:

    No vida – teď to vypadá skvěle (tedy až na ten text uvnitř příspěvku na druhém screenu – to by ještě v mých očích zasloužilo drobné ladění). Když se to tu probíralo minule, byly ty tvé screeny z Linuxu na LCD otřesné ;-).

    Ale stejně pořád nerozumím tomu, proč se lidem nelíbí ClearType na CRT :-).

  • Case napsal:

    Text příspěvku se mi líbí nemálo. Nechce ho to studovat moc zblízka.

    BTW že byly minule ty screenshoty na LCD otřesné nebylo až tak moc divné, psal jsem tehdy, že to je moje nastavení pro CRT.

RSS komentářů k tomuto příspěvku. Zpětné URL


Napište komentář

Používá systém WordPress | Styl: Aeros 2.0 z TheBuckmaker.com