<- ext2fs - Copertina - Indice ->

Articolo


Caratteri TrueType in X-Window

Font TrueType e Debian GNU/Linux 2.0 "Hamm"

Chi ha avuto modo di provare la distribuzione Debian di Linux, versione Hamm, avrà notato che vi sono alcuni programmi sperimentali per l'utilizzo di font TrueType; in particolare c'è un programma che si chiama xfstt, acronimo di X Font Server, True Type. Tramite questo font server è possibile utilizzare i font True Type in X-Window. Vediamo come.

Che cos'è un font server

Non c'è molta documentazione su cosa sia e a cosa serva un font server. Anche le man page sono estremamente scarne:

DESCRIPTION
       Xfs is the X Window System font server.  It supplies fonts
       to X Window System display servers.

è la descrizione che viene data sulla man page di xfs, mentre per xfstt non c'è assolutamente niente!!! Io non sono un esperto di font server, quindi quello che vi fornirò sarà solo un manuale di sopravvivenza. Ricordate inoltre che tutto il software linux per i TTF è ancora in fase di test (alpha o beta), quindi dovete aspettarvi qualche magagna. Per ciò che ci interessa assumeremo che un font server sia una applicazione che fornisce ad un client le caratteristiche dei font che ha a disposizione e, se necessario, anche il font stesso. Il client può essere inteso sia come macchina (un PC con Linux, una workstation...), sia come server X, sia come una applicazione che gira sotto X.

Usare i TTF

Dove copiare i file e quali copiare

Prendete tutti i file con estensione ".ttf" che contengono i font che volete utilizzare e copiateli in /var/ttfonts. Non copiate file con altre estensioni; ad esempio, i file con estensione ".fot" non servono.

Avviare il font server

Al primo avvio il font server crea nella directory /var/ttfonts i suoi cataloghi. Normalmente un font server lavora sulla porta tcp 7100. Poiché questa porta potrebbe essere già occupata dal font server standard, faremo girare xfstt sulla porta 7001. I comandi da dare al primo avvio devono essere eseguiti da root e sono:


xfstt --sync          # Crea il database dei font a partire
                      # dal contenuto della directory /var/ttfonts 
(xfstt --port 7101 &) # Manda in esecuzione (in background e in una
	              # nuova shell) il font server sulla porta 7101
    

Collegare il server X al font server

È una operazione abbastanza semplice, che può essere eseguita anche quando il server X è già in esecuzione: aprite un xterm, anche se non siete superutente, e date il comando xset +fp unix/:7101. Fatto questo provate, ad esempio, ad aprire Netscape e collegarvi ad un sito che sapete usare i TTF. Se vi mancano le idee provate http://www.raisport.rai.it, nella pagine che trattano di Formula 1; negli articoli viene utilizzato molto spesso il font Comic Sans, e potrete quindi notare subito la differenza.

Per scollegarvi dal font server è sufficiente dare il comando xset -fp unix/:7101

Automatizzare le operazioni: caricamento del font server all'avvio del sistema e connessione all'avvio della vostra sessione X

Per quanto riguarda l'apertura del font server insieme al sistema e la sua chiusura nella fase di shutdown occorre:

Lo script, derivato da /etc/init.d/xfs, è:


#!/bin/sh
# /etc/init.d/xfstt: start or stop the X TrueType font server

set -e

PATH=/bin:/usr/bin:/sbin:/usr/sbin
DAEMON=/usr/bin/X11/xfstt
OPTIONS="--port 7101"
#PIDFILE=/var/run/xfstt.pid

test -x $DAEMON || exit 0

test -f /etc/X11/config || exit 0

if grep -q ^xbase-not-configured /etc/X11/config
then
  exit 0
fi

run_xfstt=1

case "$1" in
  start)
    if [ $run_xfstt = 1 ]
    then
      echo -n "Starting X True Type font server: xfstt"
      start-stop-daemon --start --quiet --exec ${DAEMON} -- ${OPTIONS}& # Cannot || echo -n " already running"
      echo "."
    fi
  ;;

  restart)
    $0 stop
    $0 start
  ;;

  reload)
    if [ $run_xfstt = 1 ]
    then
      echo -n "Reloading X font server configuration..."
      start-stop-daemon --stop --signal 10 --quiet --exec ${DAEMON}&
      echo "done."
    fi
  ;;

  force-reload)
    $0 reload
  ;;

  stop)
    if [ $run_xfstt = 1 ]
    then
      echo -n "Stopping X True Type font server: xfstt"
      start-stop-daemon --stop --quiet --exec $DAEMON || echo -n " not running"
      echo "."
    fi
  ;;

  *)
    echo "Usage: /etc/init.d/xfstt {start|stop|restart|reload|force-reload}"
    exit 1
  ;;
esac

exit 0
    

I link da creare sono invece:

/etc/rc0.d/K80xfstt -> /etc/init.d/xfstt
/etc/rc1.d/K80xfstt -> /etc/init.d/xfstt
/etc/rc2.d/S80xfstt -> /etc/init.d/xfstt
/etc/rc3.d/S80xfstt -> /etc/init.d/xfstt
/etc/rc4.d/S80xfstt -> /etc/init.d/xfstt
/etc/rc5.d/S80xfstt -> /etc/init.d/xfstt
/etc/rc6.d/K80xfstt -> /etc/init.d/xfstt
    

In breve, lo script attiva il font server quando viene chiamato con il parametro start e lo disattiva quando viene chiamato col parametro stop. Sul come questo avvenga non dovete preoccuparvi, è un lavoro che viene eseguito da un programma chiamato start-stop-daemon. Per quanto riguarda invece i link simbolici, dobbiamo premettere che essi vengono utilizzati quando il sistema entra in un certo runlevel (se vi state chiedendo cos'è un runlevel, diciamo che è una modalità o configurazione di esecuzione del sistema, la cui definizione è contenuta nel file /etc/inittab. Ad esempio sulla Debian Hamm il runlevel 2 è quello in cui il sistema parte con il display manager -per intenderci, quando potete effettuare il login direttamente sotto X siete nel runlevel 2-; il runlevel 0 è quello che corrisponde alla fase di spegnimento del sistema. Per maggiori informazioni su questi e su tutti gli altri runlevel vi consiglio di accendere il vostro linux box e aprire due terminali: sul primo eseguite il comando less /etc/inittab e sul secondo man inittab.

Il nome dei link è composto di tre parti: una lettera maiuscola (S oppure K), un numero intero di due cifre (per esempio, 05, 99, 40) e un nome che corrisponde a quello del file linkato dalla directory /etc/init.d. Vediamo il significato di questi nomi:

S/K
hanno il significato di Start/Kill: indicano che lo script linkato deve essere lanciato col parametro start/stop rispettivamente;
01-99
Indica la priorità con cui deve essere eseguita l'azione: più piccolo è il valore, prima viene eseguito lo script in fase di caricamento del runlevel.

Dunque assegnando un valore di 80 a xfstt stiamo dicendo al sistema di eseguire lo script in fase avanzata sia durante l'avvio che durante lo shutdown (viene comunque avviato prima del display manager, xdm, che ha priorità 99 per l'avvio -il più tardi possibile quindi- e la sua chiusura avviene dopo quella di xdm, che ha priorità 01 -il prima possibile-).

Per ciò che riguarda poi la connessione ad xfstt ad ogni vostra sessione X, è sufficiente aggiungere in .xinitrc e .xsession il comando xset +fp unix/:7101. L'unica limitazione è che questa non deve essere l'ultima istruzione dello script!

Troubleshooting minimale

Font su partizione non montata all'avvio

Se non copiate direttamente i font sulla vostra partizione ma li "importate" da una partizione Windows dovete fare attenzione che la partizione sia montata prima dell'avvio di xfstt e che non venga smontata durante il suo funzionamento. Se queste circostanze dovessero verificarsi, il comportamento delle applicazioni che stanno girando in quel momento sotto X diventa imprevedibile.

xfstt e i font di default

La presenza di un font server con font True Type non era prevista quando molte applicazioni sono state create. Come conseguenza, le applicazioni che usano il font di default (quello indicato dalla stringa -*-*-*-*-*-*-*-*-*-*-*-*-*-*, per intenderci) useranno il primo font true type catalogato dal server. Può ben accadere che il font non possieda i caratteri minuscoli o, peggio!, sia composto da simboli: in questi casi il testo delle scritte e dei pulsanti di quelle applicazioni verranno sconvolti. Il trucco è creare un link al font che si vuole assumere come default, dandogli come nome uno che risulti al primo posto in ordine alfabetico, e rifare il sync; ad esempio:

cd /var/ttfonts
ln -s arial.ttf a0.ttf
xfstt --sync

Bibliografia

Come detto all'inizio, non molta:

[1] xfstt --help
[2] man xfs
[3] man xinitrc per quanto riguarda il file .xinitrc, e...
[4] man xdm per quanto riguarda il file .xsession :-)

di Marco Marongiu


<- ext2fs - Copertina - Indice ->