[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home] [volume] [parte]


Capitolo 116.   Console grafica VGA nei sistemi GNU/Linux

La console di un sistema GNU/Linux è normalmente priva di funzioni grafiche, con una risoluzione di 25 righe per 80 colonne di caratteri. Tuttavia, considerate le dimensioni comuni di uno schermo recente, diventa auspicabile la possibilità di visualizzare una densità maggiore di caratteri.

Tabella 116.1. Riepilogo dei programmi e dei file per intervenire nella risoluzione di una console di un sistema GNU/Linux.

Nome Descrizione
consolechars Definisce i caratteri per lo schermo delle console EGA/VGA.
/usr/share/consolefonts/ Directory dei file di definizione dei caratteri video della console.
SVGATextMode Configura la modalità testo delle schede SVGA.
fbset Configura la risoluzione grafica frame buffer.

In generale, si ritiene consigliabile e necessario solo l'utilizzo delle funzioni di programmazione del tipo di carattere per lo schermo, in modo da poter gestire simboli di alfabeti non latini; tutto il resto, anche la gestione del frame buffer, sarebbe meglio riservarlo alle situazioni in cui dovesse rivelarsi indispensabile.

116.1   Parametri di avvio: «vga=ask»

All'avvio di un kernel Linux in un elaboratore provvisto di adattatore grafico VGA, è possibile utilizzare il parametro vga, per richiedere la visualizzazione sullo schermo della console a una densità maggiore di caratteri:

vga=n
vga=ask

Il valore numerico che si può assegnare al parametro vga dipende dalle caratteristiche dell'adattatore grafico. Pertanto, generalmente si usa assegnare la parola chiave ask, con la quale si ottiene un menù dal quale è possibile selezionare ciò che è disponibile effettivamente.

L'utilizzo con successo di questo parametro di avvio implica che durante il funzionamento del sistema operativo non si modifichino i caratteri predefiniti (si veda la sezione successiva), cosa che però è quasi necessario fare, per poter gestire qualche simbolo in più, oltre a quelli essenziali delle lingue occidentali.

116.2   Modifica dei caratteri

Le console virtuali, che normalmente utilizzano schermi VGA, possono essere configurate in modo da utilizzare un insieme di caratteri differente da quello standard (il famigerato CP437) e anche per permettere la visualizzazione di più righe e più colonne.

In passato, nei sistemi GNU/Linux è stato usato il programma setfont, (1) ora sostituito con consolechars, (2) per l'impostazione dei caratteri da mostrare sullo schermo di una console:

setfont [opzioni] file_di_configurazione
consolechars [opzioni]

È molto importante l'uso di setfont o di consolechars quando si decide di utilizzare un insieme di caratteri esteso, come ISO 8859-1 o meglio ancora come ISO 10646, per poter visualizzare caratteri come le lettere accentate maiuscole, che non fanno parte della codifica standard di un'interfaccia video a caratteri tipica.

Per ottenere il risultato, questi programmi si avvalgono di file di definizione dei caratteri, collocati nella directory /usr/share/consolefonts/.

L'esempio seguente, visto sia per setfont, sia per consolechars, serve a ottenere la visualizzazione di caratteri utili nelle lingue europee, incluso l'arabo e l'ebraico, in uno schermo composto da 25 righe.

setfont /usr/share/consolefonts/LatArCyrHeb-16.psf[Invio]

consolechars -f /usr/share/consolefonts/LatArCyrHeb-16.psf[Invio]

Eventualmente, se la dimensione dei caratteri non è quella desiderata, si possono provare altri file della famiglia LatArCyrHeb-*.psf.

Per approfondire la sintassi di questi programmi, si veda la pagina di manuale setfont(8) oppure consolechars(8); inoltre si veda la sezione 115.3.1.

116.3   SVGATextMode

Per i sistemi GNU/Linux esiste anche un altro programma che, oltre a definire l'insieme di caratteri, consente di sfruttare le caratteristiche della grafica VGA per ridimensionare lo schermo, allo scopo di consentire la visualizzazione di più righe e colonne:

SVGATextMode [opzioni] [Voce_di_configurazione]

SVGATextMode, (3) per funzionare, non richiede il riavvio del sistema, interviene su tutte le console virtuali, però può entrare in conflitto con altri programmi che accedono direttamente alla gestione dell'adattatore grafico VGA. Sotto questo aspetto, sarebbe bene limitare l'uso di questo programma ai sistemi in cui non si usano programmi che richiedono la grafica o che emulano altri sistemi operativi.

È necessaria la configurazione con il file /etc/TextConfig, piuttosto complesso. Generalmente, questo viene fornito già pronto per essere utilizzato con un adattatore grafico VGA standard, con un insieme di caratteri ISO 8859-1 normale.

Questa configurazione potrebbe andare bene, se non fosse che la codifica scelta non permette la visualizzazione dei caratteri pseudo-grafici utilizzati per le cornici nei programmi a tutto schermo come Midnight Commander (mc). Sarebbe il caso di modificare il file di configurazione in modo che contenga le righe seguenti, in pratica ritoccando quelle corrispondenti della configurazione originale.

Option "LoadFont"
FontProg "/usr/bin/consolechars -f"
FontPath "/usr/share/consolefonts"
FontSelect "lat1-16.psf"   8x16 9x16 8x15 9x15 
FontSelect "lat1-14.psf"   8x14 9x14 8x13 9x13
FontSelect "lat1-12.psf"   8x12 9x12 8x11 9x11
FontSelect "lat1-10.psf"   8x10 9x10 8x9  9x9
FontSelect "lat1-08.psf"   8x8  9x8  8x7  9x7

Più avanti, nello stesso file di configurazione sono elencate le varie risoluzioni video a cui si può fare riferimento quando si vuole utilizzare SVGATextMode.

"80x25x8"          25.2   640  680  776  800    400  412  414  449 font  8x16
"80x25x9"          28.3   640  680  776  800    400  412  414  449 font  9x16

"80x28x8"          25.2   640  680  776  800    392  412  414  449 font  8x14
"80x28x9"          28.3   640  680  776  800    392  412  414  449 font  9x14

"80x29x8"          25.2   640  680  776  800    464  490  492  525 font  8x16
"80x29x9"          28.3   640  680  776  800    464  490  492  525 font  9x16

"80x30x8"          25.2   640  680  776  800    480  490  492  525 font  8x16
"80x30x9"          28.3   640  680  776  800    480  490  492  525 font  9x16

In base a quanto mostrato, si può tentare di visualizzare una schermata di 80 caratteri per 30 righe, con il comando seguente:

SVGATextMode 80x30x8[Invio]

In generale, non è conveniente modificare la definizione delle risoluzioni disponibili; tuttavia, per approfondire il significato delle righe che compongono l'esempio di configurazione mostrato poco sopra, occorre conoscere in che modo si configura X, in particolare la sezione Monitor, come descritto nel capitolo 226.

Per approfondire l'uso di questo programma, si vedano le pagine di manuale SVGATextMode(8) e TextConfig(5).

116.4   Console VGA e «frame buffer»

Il kernel Linux è in grado di gestire graficamente la console, attraverso ciò che viene chiamato frame buffer. In pratica, nel kernel vengono incluse delle funzionalità apposite, assieme al codice specifico per l'adattatore grafico da controllare, di solito in forma di moduli (si veda eventualmente la sezione 67.2.18).

In pratica, è consigliabile che queste funzioni risiedano all'interno di moduli, in modo da poter attivare esattamente ciò che serve al proprio adattatore grafico. Il primo modulo da attivare per mettere in funzione il frame buffer è fbcon:

modprobe fbcon[Invio]

lsmod | grep fbcon[Invio]

fbcon                  37024  0 
tileblit                2688  1 fbcon
font                    8320  1 fbcon
bitblit                 5376  1 fbcon

Dopo il caricamento di questo modulo, non si dovrebbe osservare alcun cambiamento per quanto riguarda l'aspetto dello schermo. La fase successiva richiede il caricamento del modulo specifico per l'adattatore grafico, che prima va identificato:

lspci | grep VGA[Invio]

0000:01:00.0 VGA compatible controller: nVidia Corporation NV5M64 \
  \[RIVA TNT2 Model 64/Model 64 Pro] (rev 15)

Quindi si cerca il modulo nella directory /lib/modules/versione/kernel/drivers/video/:

uname -a[Invio]

Linux nanohost 2.6.15.6 #1 PREEMPT Mon Mar 6 16:05:13 CET 2006 i686 GNU/Linux

cd /lib/modules/2.6.15.6/kernel/drivers/video[Invio]

find . -name \*fb\* -print[Invio]

./cyber2000fb.ko
./arcfb.ko
./aty/aty128fb.ko
./aty/atyfb.ko
...
./neofb.ko
./nvidia/nvidiafb.ko
./pm2fb.ko
...
./vga16fb.ko
./vfb.ko

Intuitivamente, si opta per il modulo nvidiafb:

modprobe nvidiafb[Invio]

lsmod | grep fb[Invio]

nvidiafb               48284  1 
fbcon                  37024  73 
tileblit                2688  1 fbcon
font                    8320  1 fbcon
bitblit                 5376  1 fbcon

Se si dispone del programma fbset, si può tentare di modificare al volo la risoluzione. Per farlo, occorre conoscere leggere prima il contenuto del file /etc/fb.modes:

grep ^mode /etc/fb.modes[Invio]

mode "640x480-60"
mode "640x480-72"
mode "640x480-75"
mode "640x480-90"
mode "640x480-100"
mode "768x576-75"
mode "800x600-48-lace"
mode "800x600-56"
mode "800x600-60"
mode "800x600-70"
mode "800x600-72"
mode "800x600-75"
mode "800x600-90"
mode "800x600-100"
mode "1024x768-43-lace"
mode "1024x768-60"
mode "1024x768-70"
mode "1024x768-72"
mode "1024x768-75"
mode "1024x768-90"
mode "1024x768-100"
mode "1152x864-43-lace"
mode "1152x864-47-lace"
mode "1152x864-60"
mode "1152x864-70"
mode "1152x864-75"
mode "1152x864-80"
mode "1280x960-75-8"
mode "1280x960-75"
mode "1280x960-75-32"
mode "1280x1024-43-lace"
mode "1280x1024-47-lace"
mode "1280x1024-60"
mode "1280x1024-70"
mode "1280x1024-74"
mode "1280x1024-75"
mode "1600x1200-60"
mode "1600x1200-66"
mode "1600x1200-76"

Si tenta di utilizzare una risoluzione di 800x600-60:

fbset 800x600-60[Invio]

L'utilizzo del frame buffer ha degli inconvenienti: pur usando i moduli, una volta caricati, non è più possibile ritornare alla gestione normale; se si commettono degli errori, si rischia di rendere invisibile e inutilizzabile la console.


1) Linux console font and keytable utilities   dominio pubblico, salva la licenza particolare di alcuni tipi speciali di carattere

2) Linux console tools   GNU GPL

3) SVGATextMode   GNU GPL


Appunti di informatica libera 2008 --- Copyright © 2000-2008 Daniele Giacomini -- <appunti2 (ad) gmail·com>


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome console_grafica_vga_nei_sistemi_gnu_linux.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [home]

Valid ISO-HTML!

CSS validator!

Gjlg Metamotore e Web Directory