[OpenBSD]

Anti-aliasing en TrueType Fonts op OpenBSD

Inhoudsopgave


xterm screenshot

xterm(1) met aliased en anti-aliased lettertypes zij aan zij:
[Standaard en anti-aliased xterm]

Konqueror screenshot

Nog steeds niet overtuigd? Laten we hier eens naar kijken.

De Konqueror Web browser met aliased en anti-aliased lettertypes zij aan zij:

[Standaard en anti-aliased Konqueror]

Hoe werkt het?

Om anti-aliased lettertypes te ondersteunen heeft X in 2001 een nieuwe lettertypemotor geïntroduceerd om lettertypes te renderen aan de client-zijde. De anti-aliasing berekeningen gebeuren door FreeType, een vrije lettertypemotor die wordt gebruikt door een biblitheek genaamd Xft(3), de X FreeType interface. De Render-extensie biedt de berekeningsfuncties die nodig zijn om de sub-pixel lettertypevorm te mengen met de achtergrond van de applicatie.

Tevens gebruikt X.Org de fontconfig(3) bibliotheek om de geïnstalleerde lettertypes te beheren, inclusief hun namen en eigenschappen.

Wat moet er gebeuren om het te laten werken?

Eigenlijk niets. OpenBSD levert X.Org met de X Render-extensie ingeschakeld in alle videokaartstuurprogramma's met 8 bits per pixel of meer.

U kunt controleren of de Render-extensie is ingeschakeld met het commando:

$ /usr/X11R6/bin/xdpyinfo | grep RENDER
RENDER

In aanvulling op de DejaVu lettertypefamilie die met OpenBSD wordt geleverd (OpenBSD gebruikte de Bitstream Vera lettertypefamilie tot en met versie 4.7), is er een collectie van populaire TrueType-lettertypes samengesteld en beschikbaar in de OpenBSD ports tree, in /usr/ports/fonts/msttcorefonts. Ze kunnen geïnstalleerd worden door het volgende te doen:

# cd /usr/ports/fonts/msttcorefonts
# make install

De portscollectie bevat ook andere TrueType-font packaged, met name de liberation-fonts die gebruikt kunnen worden als vervanging van de Microsoft Web fonts van hierboven en worden verspreid met een meer aanvaardbare licentie.

Welke toepassingen kunnen anti-aliased fonts gebruiken?

Gelijk welke toepassing die interfacet met de Xft library kan anti-aliased lettertypes weergeven. Dit omvat alle huidige versies van Qt (gebruikt door KDE) en GTK+ (gebruikt door GNOME). Standaard X programma's die deze interface gebruiken zijn o.m. xterm(1), xclock, en enkele andere.

xterm

xterm kan aangeroepen worden met argumenten die Xft weergave van lettertypes inschakelen:
$ xterm -fa 'Mono' -fs 14
Deze opties zijn:
Optie    Resource         Betekenis
-------------------------------------------
 -fa     XTerm*faceName   Lettertypenaam
 -fs     XTerm*faceSize   Lettertypegrootte
Als alternatief kunnen X resources gebruikt worden. Zij worden standaard geplaatst in $HOME/.Xdefaults en worden beheerd via het xrdb(1) programma.

Sommige TrueType lettertypes (zoals Arial, Georgia en Verdana, bijvoorbeeld) werken niet goed in xterm. Dit is zo omdat xterm de maximale breedte van alle tekens in het gespecificeerde lettertype gebruikt om elk teken weer te geven. Bij een monospace lettertype zijn de breedtes van alle tekens gelijk, en werkt alles. Bij een proportioneel lettertype, zoals degene die net vermeld werden, past xterm elk teken in een cel met de grootte van de maximumbreedte, wat zorgt voor onleesbare grote ruimtes tussen tekens.

QT/KDE toepassingen

Toepassingen die QT 3.x of nieuwer gebruiken, zoals gelijk welke van de KDE 3.5.x toepassingen, waaronder Konqueror, gebruiken standaard Xft.

GTK+ toepassingen

GTK+2 en GTK+3 toepassingen gebruiken ook standaard Xft.

Hoe kan ik handmatig lettertypes toevoegen?

Een TrueType lettertype toevoegen "aan X" vereist het registreren van het lettertype bij zowel de fontconfig bibliotheek als bij X server aangezien beide afzonderlijk op de hoogte blijven van lettertypes.

Lettertypemotor aan client-zijde

Lettertypes vanuit een package van de ports collectie worden automatisch geregistreerd bij de fontconfig bibliotheek. Fontconfig gebruikt het bestand /etc/fonts/fonts.conf voor zijn systeembrede configuratie, maar aangezien dit bestand bij opeenvolgende upgrades van X wordt vervangen, zou in plaats daarvan /etc/fonts/local.conf gebruikt moeten worden voor systeembrede wijzigingen. Fontconfig zoekt naar lettertypes in alle subdirectories van de directories genoemd in /etc/fonts/fonts.conf. Er is dus geen reden om dit bestand aan te passen als er nieuwe lettertypes worden toegevoegd in deze hiërachieën.

Nadat een directory is toegevoegd moet de lettertype-cache voor de directory opnieuwe gegenereerd worden. Het volgende commando instrueert fontconfig om de lettertype-cache voor alle directories uit zijn configuraties opnieuw samen te stellen:

# /usr/X11R6/bin/fc-cache -v
Deze veranderingen worden effectief in de huidige X sessie, dus X hoeft niet opnieuw gestart te worden, maar lopende toepassingen wel.

Het fc-list commando kan worden gebruikt om een lijst weer te geven van alle lettertypes die bij het systeem bekend zijn. Let op, dit commando geeft internationale lettertypes weer in UTF-8 codering. Het is daarom beter om dit commando te draaien in een terminal emulatieprogramma dat geschikt is voor UTF-8, zoals uxterm.

Het render-systeem aan de server-zijde

Font paths (dit zijn directories die lettertypes bevatten) worden beheerd ofwel rechtstreeks door X, middels /etc/X11/xorg.conf, ofwel door een afzonderlijk programma zoals xfs(1). Om een lettertype toe te voegen, voegt u de directory waar het zich bevindt toe aan /etc/X11/xorg.conf:
Section "Files"
	FontPath	"/usr/X11R6/lib/X11/fonts/TTF/"
	FontPath	"/usr/local/lib/X11/fonts/myfonts/"
	...
EndSection
Of, indien u xfs gebruikt, voegt u de directory toe aan /etc/X11/fs/config:
catalogue = /usr/X11R6/lib/X11/fonts/TTF/,
	    /usr/local/lib/X11/fonts/myfonts/
Vervolgens moet de X server bewust gemaakt worden van het lettertype in de "font index" van die directory, meer bepaald het fonts.dir bestand. Traditioneel werden alle beschikbare groottes van een lettertype opgesomd in de "font index", gegenereerd door het mkfontdir(1) commando. Maar aangezien TrueType lettertypes naar gelijk welke grootte geschaald kunnen worden, is het opsommen van elke mogelijke grootte niet vereist. In plaats daarvan worden schaalbare lettertypes opgesomd in het bestand fonts.scale dat herkend wordt door mkfontdir bij het genereren van fonts.dir indices.

Om een fonts.scale bestand op te bouwen, kan het mkfontscale(1) programma gebruikt worden:

# cd /usr/local/lib/X11/fonts/myfonts
# /usr/X11R6/bin/mkfontscale
# /usr/X11R6/bin/mkfontdir
Tenslotte kan, om de veranderingen toe te passen op de huidige X sessie, in plaats van X te herstarten, het volgende commando gebruikt worden om de momenteel geregistreerde font paths opnieuw na te kijken op veranderingen:
$ xset fp rehash
Of, indien een nieuw font path toegevoegd werd:
$ xset +fp /usr/local/lib/X11/fonts/myfonts
Indien xfs wordt gebruikt, moet in plaats hiervan het volgende commando gebruikt worden:
# pkill -HUP xfs

[terug] www@openbsd.org
$OpenBSD: truetype.html,v 1.7 2012/09/02 10:39:52 ajacoutot Exp $