TrueType fontok Linuxon

Cikkünkből kiderül, hogy honnan érdemes TrueType fontokat szerezni Linux rendszerünkhöz, hogyan kell ezeket a fontokat telepíteni, részletes példán bemutatva az installálás folyamatát, különös tekintettel a unicode-os fontokra.

Honnan és milyen fontokat szerezzünk?

Ahhoz, hogy kedvenc rendszerünkön TrueType fontokat használhassunk, először is szereznünk kell ilyen fontokat. A Windows esetén ez nem gond, a rendszerrel együtt adják őket, de a Linuxokon más a helyzet. Az XFree86 grafikus felület többféle fontot ismer, skálázható fontokat (pl. Type1, TrueType, Speedo) és nem skálázható, eszközfüggő bitmapes fontokat (bdf, pcf) egyaránt. Ez persze nem baj, de az már igen, hogy a Linuxokra --alapértelmezett telepítés mellett-- általában nem kerül föl túl sok betűtípus, ami pedig fölkerül, az gyakran bdf vagy pcf formátumú, bitmapes, nem skálázható font, vagy pedig Type1 font. A Type1-esek skálázhatók ugyan, de nem a képernyők 75-100 DPI-s felbontásához lettek kitalálva, a linuxos grafikus felületeken pedig ugyancsak rondán, szőrösen szoktak megjelenni a kb. 30 pixelnél kisebb betűméretekben. Ha tehát minden méretben szépen megjelenő betűket szeretnénk látni a képernyőnkön, érdemes TrueType fontokat beszerezni és beállítani az X-szervert a használatukhoz.

A Trebuchet MS és jellemzői
Trebuchet MS és jellemzői

A legegyszerűbb megoldás a Windowsból lenyúlni a fontokat annak, akinek van legális Windowsa. Ha nincs, akkor igazán kár lenne a szép, tiszta GNU/Linuxunkat mindenféle "szerzett" és "talált" fontokkal elrontani. Mit lehet tenni ez utóbbi esetben? Nos, az interneten jó pár helyről letölthetőek ingyenes illetve szabadon használható fontok. A leginkább használhatóak azok, amelyek a Microsoft oldalairól tölthetők le. Merészkedjünk be bátran az oroszlánbarlangba, az innen letölthető fontok (Andale Mono, Webdings, Trebuchet, Georgia, Verdana, Comic Sans MS, Arial, Arial Black, Impact, Times New Roman, Courier New) a Microsoft Internet Expolrerre építő webes stratégiájának a részei, de profitálhatnak belőle a linuxosok is. Bár a letölthető fájlok kiterjesztése "exe", egyszerűen unzipelhetők. Külön kiemelném, hogy ezen fontok többsége "junikódos", azaz a magyar karakterek is szerepelnek bennük, innen van az egyik kendvenc betűtípusom, a Trebuchet is, amelyet kifejezetten a képernyőről való olvasáshoz terveztek.

Megvizsgálhatjuk a nyomtatónkhoz adott CD-t, ha már linuxos driver nincs rajta, hátha van rajta legalább néhány szebb betűtípus, például az Epson nyomtatókhoz adott lemezekre általában szoktak fontokat tenni, gyakran több formátumban is (Type1, TrueType). A legtöbb disztribúcióba is bekerülnek TrueType csomagok, nekem ezekkel a fontokkal nem voltak túl jó tapasztalataim, egyes fontkezelő/konvertáló programok belefagynak a használatukba, karakterek hiányoznak belőlük... de lehet hogy az újabb csomagok jobb minőségűek.

Hogyan használjuk a fontokat?

A használatbavétel módja attól függ, hogy milyen verziójú a rendszerünkre telepített XFree86. Először lássuk a 4-es XFree-t! A dolog itt meglehetősen egyszerű, hiszen a 4-es verziók már beépített TrueType-támogatással rendelkeznek (ha disztribúciónk összeállítói engedélyezték fordításkor ezt az opciót), a fontok telepítése szinte nem is különbözik a hagyományos eljárástól.

XFree

  1. Miután keservesen megszereztük, szedjük össze egy könyvtárba a ttf fájlokat! (pl. /home/juzer/ttfproba)
  2. Lépjünk be a könyvtárba és futtassuk a ttmkfdir>fonts.dir parancsot! A freetype csomagban található segédprogram elkészíti a fontok listáját. Ha újabb fontjaink vannak, amelyekben nemcsak egyetlen kódtábla karakterei szerepelnek, akkor ugyanaz a fontfájl a fájlból előállítható és a program által ismert összes karaktertáblával fel lesz sorolva a listában. Ezért futtatás után érdemes például a DOS-os vagy akár a cirill KOI8 kódtáblabejegyzéseket tartalmazó sorokat kiszedni a nagyszerű grep program segítségével, mert nem sok hasznát vesszük majd az efféle kódtábláknak. Az iso8859-1 és az iso8859-2-t tartalmazó sorokra vigyázzunk, ezekre szükségünk lesz.
  3. A 4-es X használatának nagy előnye, hogy ez már képes a unicode-os ttf-eket nemcsak 256-os szeletekben (iso8859-1, iso8859-2...) hanem egyben, iso10646-1-ként is kezelni. Ezt az újabb programok, például a KDE2 programjai képesek is kihasználni. Ha vannak unicode-os fontjaink, akkor még egy picit érdemes tehát módosítani a fonts.dir fájlunkon. Minden unicode-os fontunk nevével hozzunk létre még egy bejegyzést, amelynek a végén az "iso10646-1" szerepel a karakterkészlet megnevezéseként.
  4. A következő lépés a FontPath beállítása, ez a 4-es X esetén általában az /etc/X11/XF86Config-4 fájlban való turkálást jelenti. Készítsünk biztonsági másolatot a fájlról mielőtt módosítankánk! Keressünk rá a Section "Files" bejegyzésre! E bejegyzés alatt kell lennie valahol FontPath kezdetű sornak, soroknak. Egyelőre elégedjünk meg annyival, hogy bepötyögünk egy újabb sort: FontPath "/home/juzer/ttfproba"
  5. Végül érdemes az X-nek is szólni, hogy változott a beállítás. A legegyszerűbb az, ha újraindítjuk.

XFontSel
Az xfontsel megmutatja milyen fontjaink vannak

Munkánk eredményességéről meggyőződhetünk, ha futtatjuk az xfontsel programot és kicsit szétnézünk a rendelkésünkre álló betűtípusok között. A FontPath helytelen beállítása azonban könnyen vezethet az X működésképtelenégéhez is. Ha a rendszer nem találja a "fixed" nevű fontot, akkor nem indul el a grafikus felület, ekkor másoljuk vissza a konfigurációs fájlt, és ügyeljünk arra, hogy semmit ne töröljünk ki belőle a következő próba során.

Kicsit nehezebb lesz a dolgunk, ha régebbi, például 3.3.6-os X-et használunk. A régi X-eket úgynevezett fontszerverrel kell kiegészítenünk, ha TrueType fontokat is szeretnénk látni. Az egyik legjobb, amely képes a unicode-os fontokból a magyar karaktereket is megjeleníteni, az xfs nevű fontszerver (a legtöbb disztribúció tartalmazza). A fontszerveres megoldás esetén nem az X belső rutinjai kezelik a fontokat, így egy picit több memóriára (körülbelül plusz 1MB) van szükség. A xfs használata során az X konfigurációs fájljában csak egyetlen FontPath sort szokás szerepeltetni, amely egy portra mutat, ezt a FontPath "unix/:portszám" bejegyzéssel tehetjük meg. Mandrake és RedHat esetén ez a sor így néz ki: FontPath "unix/:-1". A tényleges FontPath-t pedig a fontszerver konfigurációs állományában (/etc/X11/fs/config) kell megadni, a catalogue = után egy vesszővel elválasztott listában kell felsorolni a fontokat tartalmazó könyvtárakat. Továbbá ügyelnünk kell arra, hogy a fontszerver már fusson, amikor az X elindul, különben nem fog működni a grafikus felület.

xfstt konfig
Kedvcsináló az xfs konfigurálásához...

Egy teljes példa

Most, hogy már tudjuk mit kell tennünk, lássunk egy részletes példát, amelyben 4-es XFree-re egy, a Microsoft-tól letöltött betűcsaládot telepítünk. Van egy könyvtárunk, legyen ez a /usr/local/ujfontok néhány ttf fájllal. Első lépésként létre is hozhatjuk a fonts.dir fájlt a ttmkfdir programmal és mivel ezek skálázható fontok, érdemes a fonts.scale fájlt is létrehozni, ehhez elég egy link a fonts.dir-re.

[/usr/local/ujfontok]# ls -la
total 982
drwxr-xr-x    2 root     root         1024 Mar 13 14:49 ./
drwxr-xr-x   14 root     root         1024 Mar 13 14:48 ../
-rw-r--r--    1 root     root       275572 May 11  2000 arial.ttf
-rw-r--r--    1 root     root       286620 May 11  2000 arialbd.ttf
-rw-r--r--    1 root     root       224692 May 11  2000 arialbi.ttf
-rw-r--r--    1 root     root       206132 May 11  2000 ariali.ttf
[/usr/local/ujfontok]# ttmkfdir > fonts.dir
[/usr/local/ujfontok]# ln -s fonts.dir fonts.scale

KMail
A sok vesződés eredménye: a KDE2-ben rengeteg
alkalmazás használja a Unicode-ot, ez itt a KMail

Vizsgáljuk meg mi szerepel a fonts.dir fájlban! Egyelőre annyit tudunk a betűinkről, hogy unicode-osak és a betű neve "Arial", lássuk milyen információkat szedett össze a ttmkfdir!

[/usr/local/ujfontok]# cat fonts.dir
90
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-dosencoding-cp850
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-dosencoding-cp437
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-tcvn-5712
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-viscii1.1-1
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-microsoft-cp1255
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-tatar-cyr
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-microsoft-cp1251
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-koi8-u
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-koi8-r
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-iso8859-9e
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-iso8859-15
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-iso8859-14
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-iso8859-13
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-iso8859-10
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-iso8859-9
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-iso8859-8
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-iso8859-7
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-iso8859-5
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-iso8859-4
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-iso8859-3
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-iso8859-2
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-iso8859-1
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-dosencoding-cp850
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-dosencoding-cp437
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-tcvn-5712
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-viscii1.1-1
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-microsoft-cp1255
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-tatar-cyr
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-microsoft-cp1251
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-koi8-u
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-koi8-r
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-iso8859-9e
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-iso8859-15
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-iso8859-14
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-iso8859-13
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-iso8859-10
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-iso8859-9
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-iso8859-8
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-iso8859-7
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-iso8859-5
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-iso8859-4
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-iso8859-3
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-iso8859-2
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-iso8859-1
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-dosencoding-cp850
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-dosencoding-cp437
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-tcvn-5712
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-viscii1.1-1
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-microsoft-cp1255
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-tatar-cyr
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-microsoft-cp1251
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-koi8-u
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-koi8-r
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-iso8859-9e
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-iso8859-15
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-iso8859-14
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-iso8859-13
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-iso8859-10
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-iso8859-9
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-iso8859-8
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-iso8859-7
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-iso8859-6
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-iso8859-5
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-iso8859-4
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-iso8859-3
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-iso8859-2
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-iso8859-1
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-dosencoding-cp850
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-dosencoding-cp437
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-tcvn-5712
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-viscii1.1-1
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-microsoft-cp1255
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-tatar-cyr
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-microsoft-cp1251
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-koi8-u
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-koi8-r
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso8859-9e
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso8859-15
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso8859-14
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso8859-13
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso8859-10
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso8859-9
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso8859-8
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso8859-7
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso8859-6
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso8859-5
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso8859-4
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso8859-3
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso8859-2
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso8859-1

Hát... szép, szép, de mire való ez a sok butaság, ha felét sem használjuk? Elég, ha csak a nyugat- és kelet-európai kódtáblákra vonatkozó sorokat hagyjuk meg, ugyanakkor még hiányzik az iso10646-1. Az esetek többségében ez a három (iso8859-1, iso8859-2, iso10646-1) bőven elég, akinek nem, az pedig úgyis pontosan tudja, hogy melyik az a kódlap, ami kell még neki. Célszerű egy kis beavatkozással lecsökkenteni a fonts.dir méretét, csak arra figyeljünk, hogy a fájl egy számmal kezdődik, ez a fájlban szereplő bejegyzések száma, ha bejegyzéseket törlünk, akkor módosítani kell e számot is. A feladatot elvégzi nekünk példának okáért a következő parancssor: sed s/koi8-r/iso10646-1/ fonts.dir | grep -E "iso8859-1$|iso8859-2$|iso10646-1$" > fonts.dir.uj

[/usr/local/ujfontok]# cat fonts.dir.uj
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-iso10646-1
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-iso8859-2
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-iso8859-1
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-iso10646-1
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-iso8859-2
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-iso8859-1
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-iso10646-1
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-iso8859-2
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-iso8859-1
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso10646-1
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso8859-2
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso8859-1

Egy dolog hiányzik még a fájlunkból, a bejegyzések száma, ez itt most 12 lesz, hiszen mindegyik fájlunk háromszor szerepel a végleges listában. Tehát a fonts.dir.uj elejére írjuk be a sorok számát, majd nevezzük át fonts.dir-re. Az eredmény:

[/usr/local/ujfontok]# cat fonts.dir
12
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-iso10646-1
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-iso8859-2
ariali.ttf -monotype-Arial-medium-i-normal--0-0-0-0-p-0-iso8859-1
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-iso10646-1
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-iso8859-2
arialbi.ttf -monotype-Arial-bold-i-normal--0-0-0-0-p-0-iso8859-1
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-iso10646-1
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-iso8859-2
arialbd.ttf -monotype-Arial-bold-r-normal--0-0-0-0-p-0-iso8859-1
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso10646-1
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso8859-2
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso8859-1

[/usr/local/ujfontok]# ls -la
total 983
drwxr-xr-x    2 root     root         1024 Mar 13 15:50 ./
drwxr-xr-x   14 root     root         1024 Mar 13 14:48 ../
-rw-r--r--    1 root     root       275572 May 11  2000 arial.ttf
-rw-r--r--    1 root     root       286620 May 11  2000 arialbd.ttf
-rw-r--r--    1 root     root       224692 May 11  2000 arialbi.ttf
-rw-r--r--    1 root     root       206132 May 11  2000 ariali.ttf
-rw-r--r--    1 root     root          790 Mar 13 15:49 fonts.dir
lrwxrwxrwx    1 root     root            9 Mar 13 15:49 fonts.scale

A fontokat tartalmazó könyvtár előkészítésén túl is vagyunk, már csak az X-et kell beállítanunk, és működnek a szép új fontok. Az /etc/X11/XF86Config-4 fájlban keressük meg a Section "Files" részt, ez általában a fájl legelején szokott lenni, és adjuk hozzá a most előkészített könyvtárat a FontPath-hoz! A fájl nagyjából így fog kinézni a kérdéses helyen, de valószínűleg kicsit más FontPath-okkkal:

Section "Files"
    RgbPath     "/usr/X11R6/lib/X11/rgb"
    FontPath    "/usr/local/fonts/Default:unscaled"
    FontPath    "/usr/local/fonts/TrueType"
    FontPath    "/usr/local/ujfontok"
EndSection

Ha ez megvan, indítsuk újra az X-et... és készen is vagyunk. Ezek után elkezdhetjük átállítgatni a különböző programjainkat az új fontok használatára... Megérte, igaz?