Niech się staną ładne fonty

Stany lękowe XXI wieku mają swoje korzenie w przeróżnych nerwowych aspektach naszego codziennego pędu cywilizacyjnego. Zdarza się czasami, że niepozorne litery słowa pisanego wyświetlane na ekranach naszych monitorów LCD przyprawiają nas o nerwowy tik oka. Po paru głębszych… wdechach, dochodzimy do uspokajającej autodiagnozy, iż to nie nasze oczy są znerwicowane, tylko niestety nowoczesne pulpity niektórych dystrybucji Linuksa nadal dość swobodnie podchodzą do kwestii estetyki wyświetlanych fontów.

Czy ta niefrasobliwość wynika z tego, że niektórzy deweloperzy żyją jeszcze technologią CRT i postrzępione, rachityczne fonty nie rażą ich z taką mocą, jak użytkowników LCD, czy jest to kwestią jakiejś zachowawczej zgodności wstecznej, czy wręcz innymi standardami czytelności – domyślne pulpity Debiana, Archa, Manjaro, OpenSUSE i paru innych dystrybucji, potrafią zaskoczyć (w zależności od używanego środowiska). I to w negatywnym tego słowa znaczeniu, bo odpychający wygląd słabo wypada jako wabik pierwszego kontaktu. Oczywiście, nie u każdego będzie to regułą – z doświadczenia obserwuję, że na laptopach przeważnie uwzględniany jest charakter matrycy LCD i do renderowania fontów zaprzęgane są stosowne opcje dodatkowe. Ale na stacjonarnym komputerze musiałem wykonać parę manewrów, by fonty w Manjaro + XFCE 4.10 przestały denerwować swoim barwnym impresjonizmem.

A w większości przypadków wszystko rozbija się o to, aby zaprzęgnąć do roboty zwykły parametr LCD filter. Niektóre dystrybucje używają tej opcji domyślnie, inne trzeba ręcznie przysposobić do tego zadania. I to w przypadku tych drugich konieczna jest nasza interwencja i aby nie ograniczać się do lokalnego użytkownika, przeprowadzimy zmianę na skalę globalną. Najprościej i najszybciej (jako root) aktywujemy parametr lcdfilter:

ln -s /etc/fonts/conf.avail/11-lcdfilter-default.conf /etc/fonts/conf.d/58-lcdfilter.conf

(conf.avail może zawierać nieco inną numerację XX-lcdfilter-default.conf)

Jeżeli jednak lubimy rozwiązania dosadne i chcemy wiedzieć, co gdzie piszczy, to w tym celu edytujemy (jako root) plik 50-user.conf (lub inny wg. schematu XX-user.conf).

gksu gedit /etc/fonts/conf.d/51-user.conf

Dowiemy się z niego, że w niedalekiej przyszłości załączanie konfiguracji fontów (.fonts.conf) z katalogu domowego użytkownika zostanie porzucone (the following elements will be removed in the future), więc na dobrą sprawę możemy je sobie odpuścić już teraz. Preparujemy odpowiednio plik i otrzymuje on postać:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
	<!-- Load per-user customization file -->
	<include ignore_missing="yes" prefix="xdg">fontconfig/conf.d</include>
	<include ignore_missing="yes" prefix="xdg">fontconfig/fonts.conf</include>
	<!-- the following elements will be removed in the future -->
   <match target="font">
     <edit mode="assign" name="lcdfilter">
       <const>lcddefault</const>
     </edit>
   </match>
</fontconfig>

Jak widać, dodaliśmy parametr lcdfilter z wartością lcddefault (inne możliwe to lcdlight i lcdlegacy). Zapisujemy i udajemy się do ustawień systemowych, bo poprzestawiać nieco wygląd fontów – standardowo dobrze powinny wyglądać już ustawienie: włączony antyaliasing, hinting lekki, wygładzanie podpikselowe RGB, DPI 96 (to wszystko można osiągnąć w XFCE 4.10 w zakładce wygląd->czcionki). I już powinno być lepiej.

Jeżeli ktoś z jakichś przyczyn nie może w samym środowisku graficznym ustawić odpowiednich opcji, poniżej mała ściąga z tego, co można wstawić do pliku .conf dla standardowych, dobrze wyglądających fontów (poza lcdfilter pozostałe parametry są czułe na zmiany w ustawieniach systemu).

   <match target="font" >
     <edit mode="assign" name="rgba" >
       <const>rgb</const>
     </edit>
   </match>
   <match target="font" >
     <edit mode="assign" name="hinting" >
       <bool>true</bool>
     </edit>
   </match>
   <match target="font" >
     <edit mode="assign" name="hintstyle" >
       <const>hintslight</const>
     </edit>
   </match>
   <match target="font" >
     <edit mode="assign" name="antialias" >
       <bool>true</bool>
     </edit>
   </match>
   <match target="font">
     <edit mode="assign" name="lcdfilter">
       <const>lcddefault</const>
     </edit>
   </match>