Repository 32bit  Forum
Repository 64bit  Wiki

Slackware Graphic Boot Splash HOWTO

Da Slacky.eu.

Indice

Disclaimer

L'autore di questa guida, i suoi collaboratori e slacky.eu non si riterranno responsabili di eventuali danni provocati al vostro computer.

Prerequisiti

Questa guida usa come riferimento la distribuzione Slackware GNU/Linux 12.0. I principi in essa esposti comunque sono applicabili a qualsiasi distribuzione GNU/Linux.

Ovviamente, per poter avere successo nell'operazione, è necessario avere una buona conoscenza della distribuzione, una buona padronanza dei comandi di base e della procedura di configurazione e compilazione del Kernel. Per quanto riguarda Slackware, consultare la pagina Compilazione e ricompilazione Kernel su Slackware di questa stessa Wiki.

Più di ogni altra cosa, è necessario aver già configurato la propria installazione Linux per l'utilizzo del framebuffer device. A questo scopo, consultare la pagina Framebuffer Console HOWTO in questa stessa wiki.

Si consiglia caldamente:

  • di stampare la guida prima di procedere al suo utilizzo. In questo modo, se modificando il kernel o lilo si dovessero commettere degli errori, si potrà comunque avere accesso alle informazioni utili a recuperare l'utilizzo del sistema.
  • di conservare sempre un kernel configurato e funzionante, aggiungendo il kernel modificato (nel caso sia necessario) come kernel aggiuntivo ed opzionale, per lo stesso motivo di cui sopra.

Nel corso di questa guida, verranno modificati una serie di file configurazione spesso vitali per l'utilizzo della propria distribuzione, per questo motivo, è cosa saggia effettuare una copia di backup di ognuno di questi file.

Nello specifico, modificheremo:

  • il kernel
cp -p /usr/src/linux/.config /home/home_utente/config.backup
  • il file di configurazione di lilo
cp -p /etc/lilo.conf /home/home_utente/lilo.conf.backup
  • gli script di init
cp -Rp /etc/rc.d /home/home_utente/rc.d.backup
  • l'initrd image
cp -Rp /boot/initrd-tree /home/home_utente/initrd-tree.backup
cp -p /boot/initrd.gz /home/home_utente/initrd.gz.backup

Introduzione

Come è stato ampiamente discusso nell'articolo Framebuffer Console HOWTO in questa stessa Wiki, il kernel Linux supporta la possibilità di utilizzare la console in modalità grafiche superiori a VGA tramite l'utilizzo del frame buffer e degli standard VESA. Questa modalità ci permette non solo di avere un numero decisamente più elevato di caratteri visualizzabili su schermo, ma tra le altre cose ci permette di visualizzare immagini di sfondo sulla console, di visualizzare barre di caricamento all'avvio del kernel e di utilizzare programmi grafici (come mplayer o videogames vari) senza la necessità d'avviare il server X.

Quest'articolo ha lo scopo di spiegare come realizzare, tramite l'utilizzo del framebuffer e di una suite di tool appositi, un avvio completamente grafico (splash) della distribuzione Slackware Linux.

Ecco un esempio di quel che si otterrà seguendo questa guida ed usando il tema "insideslack", un tema realizzato appositamente per Slackware e per la stesura di questo articolo.


fbsplash

I tool che andremo ad utilizzare rispondono al nome di "fbsplash", una serie di tool ed una patch per il kernel mantenuti da Spock, uno sviluppatore Gentoo. Nella fattispecie, il progetto si compone di tre elementi principali:

  • fbcondecor: una patch per il kernel che permette di attivare il supporto alla decorazione delle console framebuffer (ossia la possibilità di caricare immagini di sfondo)
  • splashutils: una suite di tool per il controllo di fbcondecor, fra cui un demone ed uno script per la gestione delle immagini initrd
  • miscsplashutils: un insieme di tool utilizzati dagli script di fbsplash per la gestione della console framebuffer

Esistono ovviamente altri tool che permettono di ottenere risultati simili, alcuni che non richiedono nemmeno di patchare il Kernel, come Splashy.

L'autore di questa guida ha deciso di utilizzare fbsplash in quanto, dopo averli testati tutti, ritiene che con fbsplash sia possibile ottenere i risultati migliori, per quanto sia necessario applicare patch al kernel per il suo utilizzo. Non ultimo dei motivi è che fbsplash non supporta solo l'avvio grafico (splash) del sistema, ma anche la decorazione della console, ossia la possibilità di visualizzare un immagine di sfondo, il che rende decisamente più gradevole l'utilizzo della CLI.

Prima di procedere all'installazione ed alla configurazione di questi tool, comunque, è necessario acquisire alcune nozioni di base.

Nozioni di Base

Per poter capire come realizzare un avvio grafico per la propria installazine di Slackware GNU/Linux, è necessario conoscere e capire le varie fasi attraverso cui passa la distribuzione durante l'avvio. Ognuna di queste fasi richiederà delle operazioni di configurazione per far si che l'avvio del nostro sistema sia completamente grafico.

Il Bootloader

La prima fase è quella in cui il BIOS carica il bootloader secondo la Boot Sequence specificata al suo interno. Generalmente si tratta di un software installato nell'MBR (il primo settore) del primo Hard Disk disponibile. Per quanto riguarda Slackware il bootloader di default è LILO.

In questa fase non è ancora stato caricato nessun kernel, nessun tipo di driver. Per cui le possibilità grafiche a disposizione non sono molte. Nella fattispecie, le uniche modalità grafiche disponibili sono quelle ottenibili con un interrogazione al BIOS, il quale non supporta oltre la modalità VGA standard, ossia 640x480 a 16 o 256 colori massimo.

Di default, LILO non visualizza nessuna "schermata" di avvio, al massimo visualizza un menù di scelta delle immagini/volumi disponibili sotto forma del classico box rosso testuale, ammesso che sia stato configurato per farlo.

E' possibile configurare comunque LILO per visualizzare schermate grafiche in modalità VGA standard, a patto che si abiliti la visualizzazione del menù iniziale. Se non si desidera nessun menù, è inutile configurare lilo per visualizzare qualsivoglia tipo di schermata grafica, in quanto lilo caricherà automaticamente la prima voce del menù (o quella di default) non visualizzando proprio nulla.

LILO accetta diversi parametri per l'avvio da passare al kernel Linux. Nel corso di questa guida spiegheremo dettagliatamente quelli necessari allo scopo di ottenere un avvio completamente grafico.

Passata questa prima fase, il controllo passa al kernel Linux.

Il Kernel

Come si dovrebbe ben sapere, il kernel Linux è modulare. Questo significa che è possibile compilarne delle parti al suo "esterno" sotto forma di moduli, caricandoli ad-hoc a seconda delle esigenze. Molte parti del kernel comunque vengono compilate staticamente, ed il kernel all'avvio innanzitutto inizializza queste sue parti. Finita questa fase d'inizializzazione, all'interno della quale il kernel rileverà l'hardware indispensabile al suo funzionamento come i bus, la CPU, la scheda video, etc, il kernel passerà il controllo ad un processo (demone) chiamato "init", il cui scopo è l'inizializzazione vera e propria del sistema, il caricamento esplicito dei moduli e via dicendo.

Nel caso sia presente un immagine initrd, comunque, la procedura sarà leggermente diversa.

L'initrd image (o initramfs image)

L'"initrd image" (o initramfs, la versione del kernel 2.6) consiste in una piccola immagine compressa di un file system linux minimale che viene caricata dal bootloader dopo il caricamento del kernel e prima della sua esecuzione all'interno della memoria volatile del computer, allo scopo di effettuare operazioni iniziali richieste come il caricamento di alcuni moduli addizionali, oppure l'inizializzazione di volumi LVM o SCSI. L'initrd image dev'essere all'interno di un filesystem leggibile tanto dal bootloader quanto dal kernel senza la necessità d'utilizzare moduli particolari (in pratica il supporto al filesystem su cui è scritta l'initrd dev'essere compilato staticamente all'interno del kernel). Non tutti i sistemi richiedono la presenza di un initrd image, anche se la sua presenza non richiesta comunque non comporta nessun problema particolare ed anzi, permette di effettuare tutta una serie di operazioni aggiuntive molto interessanti.

Per sapere se il nostro sistema fa uso di un immagine initrd, è sufficiente osservare il contenuto del file /etc/lilo.conf. Se la voce relativa l'immagine del kernel che usiamo di default contiene la riga "initrd=...", allora stiamo utilizzando un immagine initrd. Es.:

image = /boot/vmlinuz-2.6.23.8
 initrd = /boot/initrd.gz
 root = /dev/myvg/mylv
 label = Slack-2.6.23.8
 read-only # Partitions should be mounted read-only for checking

Nel caso in cui sia presente, dopo aver caricato il kernel LILO carica innanzitutto l'initrd e quindi esegue il kernel, il quale a sua volta esegue lo script "init" presente all'interno dell'initrd image. Allo scopo di ottenere un avvio completamente grafico, potrebbe essere necessario modificarlo, come vedremo nel corso di questa guida.

Per cui il posto successivo dove "metter mano" per ottenere un avvio del sistema completamente grafico è l'initrd image, se presente.

NB: per realizzare un avvio completamente grafico,
senza nessuna visualizzazione di testo, è indispensabile
l'utilizzo dell'initrd image.

Nel caso si stia utilizzando o si voglia utilizzare un immagine initrd per realizzare un avvio completamente grafico della propria installazione, è necessario innanzitutto copiare tutti i file di supporto all'interno dell'immagine, quindi aggiornarla ed aggiornare il bootloader, tutte operazioni che, come si potrà vedere nel corso di questa guida, sono abbastanza semplici. Slackware come tutte le distribuzioni moderne fornisce un comodo tool per la creazione e la gestione dell'immagine initrd, chiamato "mkinitrd".

Il demone INIT

Una volta avviato il kernel, che si sia passati attraverso un immagine initrd o meno, il controllo passerà completamente ad un demone chiamato INIT (da non confondere con lo script init presente all'interno dell'immagine initrd).

Senza scendere eccessivamente nel dettaglio, si può pensare ad init come al padre di tutti i processi. E' il software responsabile dell'inizializzazione di ogni aspetto del sistema, il software che ne gestisce le varie fasi (o runlevel) d'utilizzo. Ad ognuna di queste fasi o runlevel (in tutto 8), è generalmente associato un nome composto da una lettera singola od un numero. Esistono diverse versioni di Init. La versione utilizzata da Slackware linux è quella BSD ed è l'unica che prenderemo in esame in questa guida.

Su slackware linux, i runlevel sono i seguenti:

  • 0 = arresto del sistema
  • 1 = single user mode
  • 2 = non utilizzato, ma configurato per agire come il runlevel 3
  • 3 = multiuser mode (il runlevel di default)
  • 4 = X11 con KDM/GDM/XDM come gestori delle sessioni
  • 5 = non utilizzato, ma configurato per agire come il runlevel 3
  • 6 = riavvio del sistema
  • S = inizializzazione del sistema

Secondo lo schema BSD, ad ognuno di questi runlevel è (o può essere) associato uno script all'interno della directory /etc/rc.d, spesso dal nome esemplificativo (rc.0, rc.1, rc.S, etc). Il file responsabile dell'associazione fra un runlevel ed il suo script, è il file /etc/inittab. A loro volta, gli script di init possono richiamare altri script per avviare singoli servizi o effettuare operazioni comuni, come il caricamento dei moduli del kernel o l'avvio del server ssh. Su Slackware linux questi script si trovano sempre all'interno della directory /etc/rc.d (rc.modules, rc.shhd, etc).

Per ottenere un avvio grafico, sarà sicuramente necessario modificare gli script di init presenti all'interno di /etc/rc.d, in modo da inizializzare il demone di gestione della decorazione della console, da aggiornare la barra di progresso e via dicendo.

Ricapitolando

Abbiamo analizzato (superficialmente) la boot sequence di Slackware GNU/Linux, comunque non molto dissimile da quella di molti altri sistemi Linux. Volendo riepilogarla e schematizzarla, avremo in assenza di un initrd:

  • caricamento del bootloader
  • selezione dell'immagine/volume
  • caricamento del kernel
  • inizializzazione del kernel
  • esecuzione del demone init
  • esecuzione dei vari script di init

Invece, in presenza di un initrd avremo:

  • caricamento del bootloader
  • selezione dell'immagine/volume
  • caricamento del kernel
  • caricamento dell'initrd
  • inizializzazione del kernel
  • esecuzione dello script init all'interno dell'initrd
  • esecuzione del demone init
  • esecuzione dei vari script di init

Nel resto di questo articolo vedremo come coprire ognuna di queste fasi per poter ottenere un avvio del nostro sistema Slackware GNU/Linux completamente grafico.

Passo 1: Configurazione di Lilo

La configurazione di Lilo è estremamente semplice. E' sufficiente disporre di un immagine BMP in risoluzione 640x480 a 16 o 256 colori. Se non si dispone di un immagine di questo genere, è possibile utilizzare quella del tema di default realizzato per questa guida, chiamato "Inside Slack". E' possibile scaricarla da questo sito.

A questo punto, come utente root, creiamo una cartella in /etc e copiamola al suo interno:

wget http://www.formsframework.org/insideslack/insideslack_lilo.bmp
mkdir -p /etc/splash/insideslack/
mv insideslack_lilo.bmp /etc/splash/insideslack/

Fatto ciò, dobbiamo solo configurare Lilo per l'utilizzo di questa immagine. A tal scopo, editiamo il file /etc/lilo.conf ad aggiungiamo le seguenti righe:

bitmap=/etc/splash/insideslack/insideslack_lilo.bmp
bmp-table=160p,168p,2,9
bmp-colors=232,,255,254,,232
bmp-timer=592p,462p,254,105,232

Il significato dei parametri è il seguente:

  • bitmap: indica a lilo il file da utilizzare
  • bmp-table: indica a lilo a che coordinate e con che dimensioni visualizzare la tabella di selezione delle immagini
  • bmp-colors: indica a lilo che colori utilizzare per la visualizzazione della tabella di selezione delle immagini
  • bmp-timer: indica a lilo dove e con che colori visualizzare il timer per la selezione delle immagini

I colori sono ovviamente da estrapolare dall'immagine stessa. A tal scopo, GIMP è uno strumento più che adatto. Se si vuole ottenere una spiegazione dettagliata dei parametri, consultare la pagina di man di lilo.conf ("man lilo.conf").

Infine, assicuriamoci che all'interno del file lilo.conf siano presenti le due righe:

prompt
timeout = NUMERO

le quali, rispettivamente, indicano a lilo che deve visualizzare il menù di selezione delle immagini e che deve attendere un tot di decimi di secondo prima di selezionare automaticamente quella di default (quindi immettere 50 per un attesa di 5 secondi).

NB: Una volta attivato il menù grafico in lilo, per poter immettere parametri opzionali 
per l'avvio delle immagini sarà sufficiente premere il pulsante "TAB" per riottenere
il classico prompt testuale

Configurato il tutto correttamente, sarà sufficiente digitare "lilo" senza parametri per aggiornare l'MBR. Riavviando il computer, dovremmo vedere la nostra nuova fiammante immagine d'avvio.

Passo 2: Installazione e configurazione di fbsplash

Per ottenere un avvio del sistema completamente grafico, è necessario andare oltre la configurazione di Lilo procedendo all'installazione di fbsplash. A tal scopo, innanzitutto è necessario patchare, configurare e ricompilare il kernel.

Configurazione del kernel

Per poter utilizzare le splashutils è innanzitutto necessario applicare una patch al kernel. Su Slackware, i sorgenti sono contenuti all'interno della directory /usr/src/linux. Pertanto, innanzitutto scarichiamo la patch dal sito di Spock ed applichiamola.

wget http://dev.gentoo.org/~spock/projects/fbcondecor/archive/fbcondecor-0.9.4-2.6.23-rc7.patch
mv fbcondecor-0.9.4-2.6.23-rc7.patch /usr/src/linux
cd /usr/src/linux
patch -p1 < fbcondecor-0.9.4-2.6.23-rc7.patch

Fatto ciò, possiamo procedere a riconfigurare le opzioni necessarie nel kernel, digitando make menuconfig. Le voci interessate sono tutte sotto Device Drivers.

  • sotto Connector, abilitiamo connector compilato staticamente come segue:
-- Connector - unified userspace <-> kernelspace linker
   [*]   Report process events to userspace

Quest'opzione è indispensabile per far si che l'helper userspace comunichi con la componente kernelspace.

  • sotto Input device support, abilitiamo l'event dev come segue:
<*>   Event interface 

Quest'opzione è indispensabile per poter controllare con la tastiera le varie modalità di visualizzazione dello splash.

  • sotto Graphics support --> Console display driver support, abilitiamo il supporto alla decorazione della console come segue:
[*]   Support for the Framebuffer Console Decorations
NB: Ricordo che è assolutamente necessario aver configurato precedentemente 
la console in modalità framebuffer come descritto nell'articolo Framebuffer Console HOWTO

Sempre nella sezione Graphics support, ricordiamoci di disattivare le opzioni relative alla visualizzazione del logo (obsolete ed anzi dannose)

[ ] Bootup logo  --->

Se si desidera usare l'initrd image (scelta consigliata), assicurarsi che sotto General Setup (nella pagina principale delle impostazioni del kernel) sia stata selezionata la voce relativa:

[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
()    Initramfs source file(s)

Fatto ciò, sarà sufficiente ricompilare ed installare il kernel, quindi effettuare il riavvio del sistema. Per le procedure di compilazione e reinstallazione del kernel, ricordo di guardare l'articolo Compilazione e ricompilazione Kernel su Slackware in questa stessa Wiki.

Installazione di splashutils e miscsplashutils

come detto precedentemente, per poter utilizzare fbsplash non è sufficiente patchare il kernel. E' anche necessario installare un insieme di tool userspace ottenibili sempre [dal sito di Spock].

La compilazione di questi pacchetti è un operazione abbastanza complicata ed implica la ricompilazione di una serie di librerie di sistema. Pertanto, ho già preparato dei packages nel classico formato Slackware, che è possibile scaricare a questi indirizzi:

Quindi installarli con il classico metodo Slackware:

wget http://www.formsframework.org/insideslack/splashutils-1.5.3.2-i686-1.tgz
wget http://www.formsframework.org/insideslack/miscsplashutils-0.1.8-i686-1.tgz
installpkg splashutils-1.5.3.2-i686-1.tgz
installpkg miscsplashutils-0.1.8-i686-1.tgz

Per poter testare l'avvenuta installazione del pacchetto, è necessario scaricare ed installare almeno un tema. E' possibile usare quello di default utilizzato da quest'articolo.

wget http://www.formsframework.org/insideslack/fbsplash.theme.insideslack-noarch-1.tgz
installpkg fbsplash.theme.insideslack-noarch-1.tgz

A questo punto è possibile testare l'avvenuta installazione digitando:

splash_manager -c demo -t insideslack -m s

per la modalità "silent", ossia quella utilizzata per nascondere l'output della console, oppure:

splash_manager -c demo -t insideslack -m v

per la modalità "verbose", ossia la modalità di decorazione della normale console.

NB: il tema insideslack al momento della stesura di quest'articolo supporta solo
le modalità 1024x768 e 1280x800. Se si dispone di una modalità diversa, splash_manager
darà un errore descrittivo. Al fine di testare l'avvenuta installazione di fbsplash
si consiglia di impostare almeno tempraneamente la risoluzione della console ad una
qualsiasi di queste due. Consultare l'articolo Framebuffer Console HOWTO per
scoprire come.

Configurazione della decorazione della console

Se si desidera impostare "definitivamente" la decorazione per una console, è possibile sempre farlo tramite splash_manager. Ad esempio, per impostare la decorazione per la console virtuale 2:

splash_manager -c set -t insideslack --tty=2

Inserendo qualche riga come questa (una per ogni terminale virtuale) all'interno di rc.M od rc.local, è possibile far si che la decorazione venga impostata all'avvio in modo automatico per tutte le console desiderate.

Con il pacchetto per Slackware è fornito un ulteriore script, /etc/rc.d/rc.fbcondecor. Questo script ha lo scopo d'inizializzare la decorazione su più terminali virtuali in un colpo solo, leggendo dal file di configurazione /etc/rc.d/rc.fbcondecor.conf. E' possibile tanto invocarlo direttamente, quanto inserirlo all'interno di uno degli script di init (rc.M, rc.local, etc), quanto richiamarlo automaticamente direttamente da inittab. Se si vuole utilizzare il "metodo inittab", è sufficiente editare il file /etc/inittab e modificarlo come segue:

...
c5:1235:respawn:/sbin/agetty 38400 tty5 linux
c6:12345:respawn:/sbin/agetty 38400 tty6 linux

# Script to run splash screens.
zc:2345:wait:/etc/rc.d/rc.fbcondecor

# Local serial lines:
#s1:12345:respawn:/sbin/agetty -L ttyS0 9600 vt100
...

In questo modo, la decorazione per le console verrà impostata automaticamente all'avvio del sistema.

Passo 3: Prendere qualche decisione

A questo punto, è indispensabile decidere che tipo di avvio grafico si desidera per la nostra installazione di Slackware. E' possibile tanto ottenere una modalità d'avvio completamente grafica, senza la minima visualizzazione di testo, quanto una modalità d'avvio grafica solo in parte, con una certa quantità di testo visualizzata all'inizio.

La prima modalità richiede qualche passaggio in più, nonchè l'utilizzo forzato d'un immagine initrd. La seconda modalità richiede qualche operazione in meno e si può a tutti gli effetti fare a meno dell'immagine initrd.

Personalmente, ritengo che le operazioni aggiuntive per ottenere una modalità d'avvio completamente grafica siano talmente semplici che non c'è un vero motivo per non desiderarla.

Nel caso in cui non si voglia metter mano all'initrd image, si può saltare a piè pari il passo 4.

Passo 4: Splash grafico tramite l'initrd image

Per potere ottnere un avvio completamente grafico, senza la minima visualizzazione di testo, è necessario disporre di un initrd image. Come spiegato precedentemente, per sapere se il proprio sistema ne fa uso è sufficiente controllare il contenuto del file /etc/lilo.conf e verificare se l'immagine in uso contiene una riga del tipo "initrd=...".

Di default, Slackware memorizza i file necessari all'initrd image dentro la directory /boot/initrd-tree. Nel caso in cui la directory non esista, è possibile crearla con il comando:

mkinitrd -c

Se la cartella esiste od è stata creata, il passo successivo è copiare al suo interno i file necessari ad fbsplash per funzionare. E' sufficiente usare il comando:

splash_geninitramfs -c /boot/initrd-tree TEMA

dove tema è il nome del tema che vogliamo copiare, nel nostro esempio "insideslack". Fatto ciò, è sufficiente aggiornare l'immagine initrd digitando il comando "mkinitrd" privo di parametri. Se tutto è andato correttamente, l'output sarà simile al seguente:

root@nuitari-laptop:~# mkinitrd
12816 blocks
/boot/initrd.gz created.
Be sure to run lilo again if you use it.

A questo punto, è necessario aggiungere la riga "initrd=..." al file /etc/lilo.conf, se non è già presente. Ad esempio:

...
image = /boot/vmlinuz-2.6.23.8
  initrd = /boot/initrd.gz
  root = /dev/myvg/mylv
  label = Slack-2.6.23.8
  read-only # Partitions should be mounted read-only for checking
...

Indipendentemente dal fatto che la riga sia stata aggiunta o che fosse già presente, digitare il comando lilo in modo che l'MBR venga aggiornato con la nuova immagine. E' molto probabile che lilo si "lamenti" che la dimensione dell'initrd è cresciuta un po' troppo. Per evitare il problema, è sufficiente usare il parametro "large-memory".

A questo punto, è possibile utilizzare il parametro di lilo "splash" per decidere se visualizzare uno splash iniziale. Ad esempio, volendo visualizzare lo splash screen in modalità "silent" (che ricordo essere l'immagine usata per nascondere l'output della console), si può utilizzare il parametro:

splash=silent,theme:insideslack

Volendo è possibile visualizzare l'immagine usando un bell'effetto di dissolvenza aggiungendo l'opzione "fadein", ad esempio:

splash=silent,fadein,theme:insideslack

Purtroppo, l'effetto dissolvenza non funziona bene su tutte le combinazioni di schede video/driver. Se il risultato ci piace, possiamo aggiungere l'opzione al file /etc/lilo.conf in modo che venga eseguita ad ogni avvio del sistema. Ad esempio

# LILO configuration file

# Start LILO global section

lba32 # Allow booting past 1024th cylinder with a recent BIOS
boot = /dev/hda
#compact # faster, but won't work on all systems.
prompt
timeout = 50
large-memory

#vga = normal
vga = 791
append="video=radeonfb:1280x800-32 splash=silent,fadein,theme:insideslack"
...

Come potete notare dall'esempio, il parametro può essere mischiato ad eventuali altri parametri presenti all'interno del parametro "append". Riavviando il sistema, se avete installato l'immagine di avvio di lilo noterete che tra la visualizzazione dell'immagine ed il caricamento dell'immagine "silent" il kernel visualizza comunque un certo output testuale. E' possibile eliminare quell'output testuale con due semplici parametri, "bmp-retain" e "loglevel".

bmp-retain forza lilo a conservare l'immagine di selezione iniziale finchè non viene passato il controllo al kernel. L'opzione loglevel invece ci permette d'impostare il grado di "verbosità" del kernel, omettendo tutte le informazioni che non siano errori o messaggi diretti degli script di avvio. Quindi, il nostro file lilo.conf a questo punto potrebbe apparire così:

# LILO configuration file

# Start LILO global section

lba32 # Allow booting past 1024th cylinder with a recent BIOS
boot = /dev/hda
#compact # faster, but won't work on all systems.
prompt
timeout = 50
large-memory

vga = 791
append="video=radeonfb:1280x800-32 splash=silent,fadein,theme:insideslack loglevel=3"

bitmap=/boot/splash/insideslack/insideslack_lilo.bmp
bmp-table=160p,168p,2,9
bmp-colors=232,,255,254,,232
bmp-timer=592p,462p,254,105,232
bmp-retain

Nonostante tutto questo bel lavoro, ad un certo punto il kernel comincerà comunque a scrivere del testo, e questo testo finirà per sovrascrivere l'immagine visualizzata con il parametro "splash=...". Questo accade in parte perchè l'immagine è "statica", ossia non c'è un vero demone in background che si preoccupa di ridisegnare l'immagine quando necessario e gestirla, in parte perchè il kernel ha l'abitudine di scrivere il testo sul terminale correntemente visualizzato. Per ovviare ad entrambi i problemi, proseguire con la lettura del prossimo capitolo.

NB: si ricorda che nella console è sufficiente premere 
la combinazione di tasti CTRL+ALT+F1/F2/F3/.. per visualizzare 
i terminali virtuali da 1 a N

Se il kernel visualizza del testo prima del caricamento dell'immagine, potrebbe dipendere anche dal caricamento di vgacon come system driver. In tal caso, leggere la guida Framebuffer Console HOWTO in questa stessa wiki per capire come inibire il caricamento di vgacon.

Passo 5: Splash grafico tramite il demone

A questo punto della guida, si presuppone che fbsplash sia installato e funzionante. Per ottenere una versione "grafica" dell'avvio del sistema, è sufficiente compiere due operazioni:

  • forzare il kernel a non visualizzare i propri messaggi sulla console utilizzata dal demone
  • caricare il demone all'avvio ed interromperlo al momento giusto

Per il primo passo, è sufficiente passare due parametri al kernel all'avvio, "console" e "CONSOLE". E' possibile farlo tramite l'opzione "append" in /etc/lilo.conf, in modo che siano sempre eseguiti ad ogni avvio:

append="video=radeonfb:1280x800-32 splash=silent,fadein,theme:insideslack loglevel=3 CONSOLE=/dev/tty1 console=tty1"

In questo modo, tanto il kernel quanto gli script di sistema useranno sempre e solamente il primo terminale virtuale per la visualizzazione dell'output. Questo permetterà di non avere un immagine corrotta in visualizzazione.

Per il secondo il discorso è un po' più complesso, e comporta la modifica degli script di init.

Come detto precedentemente, una volta caricato ed inizializzato il kernel, il sistema passa il controllo ad "init", il quale secondo lo schema presente nel file "/etc/inittab" carica una serie di script a seconda del runlevel. Pertanto, considerato che il primo runlevel in cui passa init è "S" ed il file relativo è /etc/rc.d/rc.S, il posto migliore per avviare il demone è la parte iniziale di quello script.

Per avviare il demone, è possibile utilizzare lo script /etc/rc.d/rc.fbsplashd, installato dal package fornito con questo howto. rc.fbsplashd mette a disposizione funzioni di base per la gestione del demone, che possono essere usate in aggiunta a quelle fornite da splash_manager, il tool di default di fbsplash. Fra le altre cose, rc.fbsplashd si preoccupa di gestire la pressione del tasto "F2", il quale permette in ogni momento di passare dalla modalità silent alla modalità verbose, e viceversa.

NB: nel caso si usi un tema diverso da "insideslack"
è necessario cambiare il parametro "theme" all'interno
di rc.fbsplashd

Pertanto, dentro /etc/rc.d/rc.S scriveremo:

#!/bin/sh
#
# /etc/rc.d/rc.S:  System initialization script.
#
# Mostly written by:  Patrick J. Volkerding, <volkerdi@slackware.com>
#

PATH=/sbin:/usr/sbin:/bin:/usr/bin

/etc/rc.d/rc.fbsplashd start

/etc/rc.d/rc.fbsplashd text "Initializing System"
/etc/rc.d/rc.fbsplashd prog 0 5 
...

Nel dettaglio, queste 3 chiamate a rc.fbsplashd rispettivamente servono a:

  • rc.fbsplashd start: avviare il demone
  • rc.fbsplashd text "Initializing System": visualizzare il testo "Initializing System" sopra la barra di caricamento
  • rc.fbsplashd prog 0 5: mostra l'animazione di caricamento della progress bar partendo dallo 0% ed arrivando al 5%

A questo punto, è possibile aggiungere in ogni punto focale di rc.S una chiamata a "text" e "prog" in modo da visualizzare un testo descrittivo dell'operazione in atto ed un animazione sulla barra di progresso.

In uno schema normale, subito dopo rc.S init caricherà rc.M. Quindi è possibile continuare a modificare rc.M per aggiornare la barra di progresso. Dopo rc.M, init smetterà di eseguire script d'inizializzazione, per tanto alla fine di rc.M inseriremo:

...
# All done.
/etc/rc.d/rc.fbsplashd stop

In modo che il demone venga killato e la visualizzazione passi automaticamente alla console di default. Com'è ovvio, una configurazione ottimale degli script d'avvio può richiedere del tempo ed un po' di prove, ma il risultato è garantito.

E' chiaro che se non si utilizza il runlevel 3 (Multiuser) come runlevel di default, è necessario modificare altri script al posto di rc.M. Lo stesso discorso è possibile farlo per i runlevel di restart ed halt, ma al contrario.

Conclusioni

Abbiamo analizzato le varie fasi d'avvio di un sistema Slackware GNU/Linux ed abbiamo visto, con un semplice tool, come è possibile ottenere un avvio del sistema in modalità completamente grafica. L'articolo è tutto fuorchè completo, molto può essere ancora detto e sicuramente molto verrà detto, nel tempo completerò tanto l'articolo quanto i package/script/tema. In ogni caso, l'utente esperto potrà senz'ombra di dubbio ottenere risultati più che soddisfacenti.

FAQ

Q Durante la fase di avvio non vedo più nessun messaggio da parte del kernel.. come mai?

A Probabilmente si è deciso di passare al kernel i due parametri "CONSOLE=/dev/tty1 console=tty1".
  Nel caso in cui si faccia partire il demone all'avvio con /etc/rc.d/rc.fbsplashd, questo non è un problema
  in quanto è sufficiente premere F2 per visualizzare l'output sulla console principale (tty1).
  Nel caso per una qualsiasi ragione il demone non dovesse partire, per rivedere l'output è sufficiente premere
  CTRL+ALT+F1 per switchare su tty1, in quanto di default fbcondecor tenta di visualizzare lo splash su tty8.

Ringraziamenti

Autore: Samuele "Nuitari" Diella - samuele.diella@gmail.com

Links Esterni

Strumenti personali
Namespace

Varianti