Exibindo um splash durante o boot com Splashy
Autor: Antonio | Publicado: 2010-05-29T08:55:00-03:00

Dando continuidade às minhas pesquisas sobre a criação de LiveCDs, decidi seguir a sequência do boot e pesquisar o componente que seria exibido para o usuário logo após o gerenciador de boot: o splash ("tela de carregamento"). Há no Linux diversos programas que podem ser utilizados para tal finalidade, entre eles o Splashy, cujas instalação, configuração e personalização trataremos nesse artigo.



Vale observar que, apesar da intenção do artigo ser continuar a série de artigos voltados para a criação de LiveCDs, o Splashy também pode ser utilizado em um sistema Linux instalado no disco rígido. Para esse tipo de instalação os passos citados nesse artigo permanecem os mesmos.

O que é o Splashy e como ele funciona?
Nos artigos anteriores, vimos como funciona o processo de boot em um LiveCD: primeiramente, é carregado o gerenciador de boot (bootloader). Os gerenciadores de boot mais conhecidos e utilizados são o GRUB, que abordei no primeiro artigo da série, o ISOLINUX, que também abordei aqui, e o LILO, que não é utilizado em LiveCDs, mas ainda pode ser encontrado em instalações Linux feitas em computadores mais antigos. Qualquer que seja o gerenciador de boot que você estiver utilizando, ele deverá permitir ao usuário escolher o kernel que será carregado logo em seguida.

Vimos também que, como o kernel não pode acessar diretamente o sistema de arquivos em um LiveCD durante o boot, pois o mesmo se encontra compactado, é carregado antes dele um sistema de arquivos mínimo, chamado initramfs. Esse sistema de arquivos mínimo será utilizado pelo kernel para executar os primeiros procedimentos de boot, que incluem detecção de hardware, processamento dos parâmetros passados pelo gerenciador de boot e montagem de sistemas de arquivos. Terminados esses procedimentos, o sistema de arquivos principal poderá ser acessado pelo kernel e o restante do processo de boot é realizado como em uma instalação convencional do Linux feita no disco rígido.

Ora, se desejamos exibir um splash no lugar das mensagens que aparecem na tela durante o boot (nesse caso, um bootsplash, só para usar um termo mais específico), só existe duas opções onde podemos inseri-lo: no initramfs ou no próprio kernel.

A inserção do bootsplash no kernel já foi uma prática muito comum. O programa mais conhecido entre os que se encontram nessa categoria é o Bootsplash. Ele foi utilizado por várias distribuições, como o OpenSUSE, o Mandriva (que na época era na verdade duas distribuições distintas: o Mandrake e o Conectiva) e o Kurumin, só para citar alguns exemplos. O processo de integração do Bootsplash com o kernel, no entanto, era muito complexo, uma vez que exigia configuração manual da barra de progresso, feita pela inclusão de linhas de código nos scripts de inicialização, e recompilação do kernel.

Com o desenvolvimento dos programas de bootsplash, percebeu-se que era mais prático embutir o bootsplash no initramfs, sem prejuízo na funcionalidade. Entre os programas de bootsplash que se enquadram nessa categoria podemos citar o USplash, que já era disponível no Debian Etch e ainda pode ser encontrado nos repositórios do Debian Lenny, o Splashy, disponível no Debian Lenny, e o Plymouth, que se encontra atualmente disponível nos repositórios do Debian Sid e já é utilizado nas versões mais recentes do Ubuntu e do Fedora.

O Splashy é a continuação do projeto Bootsplash e é o programa de bootsplash oficial do Debian Lenny, motivos pelos quais o escolhi para tratar neste artigo. Ele dispensa ao usuário editar os scripts de inicialização ou recompilar o kernel, sendo toda a sua instalação, configuração, personalização e execução feita por programas que se encontram dentro do próprio sistema que se encontra em execução ("in user-space", como você encontra no site do Splashy).

Instalação do Splashy
A instalação do Splashy pode ser feita facilmente no Debian e derivados a partir do pacote splashy que se encontra disponível nos repositórios oficiais do Debian Lenny. Opcionalmente, você pode instalar também os temas para Splashy feitos pela equipe do Debian, disponíveis no pacote splashy-themes:

# apt-get install splashy splashy-themes
Lembrando que para ter acesso aos repositórios do Debian Lenny você deve ter as seguintes linhas acrescentadas no arquivo "/etc/apt/sources.list":

deb http://ftp.br.debian.org/debian/ lenny main contrib non-free
deb http://ftp.br.debian.org/debian-security/ lenny/updates main contrib non-free
deb http://ftp.br.debian.org/debian-volatile/ lenny/volatile main contrib non-free
Além disso, é bom lembrar também que antes de instalar ou atualizar programas devemos sempre atualizar a lista de pacotes dos nossos repositórios. Para isso, execute o comando:

# apt-get update
Depois de baixados e instalados os pacotes, abra o arquivo de configuração do GRUB ("/boot/grub/menu.lst") e altere a linha referente ao kernel, acrescentando "vga=791 splash":

TITLE Debian GNU/Linux, kernel 2.6.26-2-686
ROOT (hd0,0)
KERNEL /boot/vmlinuz-2.6.26-2-686 root=/dev/hda1 ro quiet vga=791 splash
INITRD /boot/initrd.img-2.6.26-2-686
Os parâmetros que acrescentamos agora à configuração do GRUB informarão ao kernel que devem ser carregados durante o boot o framebuffer, necessário para a execução do Splashy, com resolução 1024x768 (parâmetro "vga=791"), e o bootsplash ("splash"). Observe que é interessante que o parâmetro "quiet" também seja informado nessa linha, pois se isso não ocorrer o kernel mostrará dezenas de mensagens antes da exibição do Splashy. Se esse parâmetro não existia na sua configuração original do GRUB, acrescente-o.

Observe que é possível configurar o framebuffer para utilizar outras resoluções. Pode ser interessante utilizar a resolução 800x600, passando como parâmetro ao kernel "vga=788". As resoluções suportadas e os códigos correspondentes encontram-se na tabela a seguir, extraída do arquivo readme do Splashy, que você pode encontrar na pasta "/usr/share/doc/splashy/":

                  640x480    800x600    1024x768       1280x1024       1600x1200
 256 colors (8b)    769        771         773            775             796
 32K colors (15b)   784        787         790            793             797
 64K colors (16b)   785        788         791            794             798
 16M colors (24b)   786        789         792            795             799
Salve o arquivo de configuração do GRUB e reinicie o computador. Ao iniciar o Linux, você deve ver agora o tema padrão do Splashy:


Observe que durante a instalação do pacote splashy, o Splashy já é inserido no initramfs. Após quaisquer alterações que fizermos na configuração do Splashy ou no tema do Splashy que estamos utilizando durante o boot deveremos executar o comando a seguir para atualizar a configuração do Splashy dentro do initramfs:

# update-initramfs -u -t -k $(uname -r)
Instalação de programas adicionais
Para configurar e, principalmente, personalizar o Splashy, utilizaremos programas gráficos. Nesse artigo, abordarei dois: o StartUp-Manager, que permite instalar temas e configurar o Splashy, e o Splashy Manager, mais conhecido como GSplashy, que, além disso, permite também criar temas para o Splashy.

O Splashy Manager é o meu preferido por ter mais funcionalidades com relação ao Splashy. O StartUp-Manager, apesar de oferecer menos recursos com relação ao Splashy, possui mais funcionalidades com relação ao processo de boot como um todo, permitindo configurar outros aspectos do processo, como, por exemplo, o gerenciador de boot. Sinta-se a vontade para utilizar o programa que preferir.

A instalação do StartUp-Manager é mais fácil, uma vez que é feita a partir do pacote startupmanager disponível nos repositórios do Debian Lenny. Para instalá-lo, basta executar o seguinte comando no terminal:

# apt-get install startupmanager
Uma vez instalado, o StartUp-Manager encontra-se disponível na seção "Sistema" do "menu K":



A instalação do Splashy Manager é um pouco mais complicada que a do StartUp-Manager, pois teremos que baixar e compilar seu código-fonte, além de criar manualmente um atalho para ele no "menu K".

Primeiramente, devemos instalar as dependências do Splashy Manager. Felizmente, essas dependências possuem pacotes nos repositórios do Debian Lenny e podem ser instaladas facilmente pelo comando:

# apt-get install libglade2-dev libsplashy1-dev build-essential
Agora sim vamos baixar e instalar o Splashy Manager. Para isso, execute os seguintes comandos no terminal:

$ wget http://alioth.debian.org/frs/download.php/2243/gsplashy-0.1.tar.gz
$ tar -zxvf gsplashy-0.1.tar.gz
$ cd gsplashy-0.1
$ ./configure
$ make
# make install
Para criar um atalho no menu, usando seu editor de texto preferido (eu escolhi o KWrite), crie um arquivo na pasta "/usr/share/applications/":

# kwrite /usr/share/applications/gsplashy.desktop
Copie e cole o seguinte conteúdo para o editor de texto e salve o arquivo:

[Desktop Entry]
Name=Splashy Manager
Comment=Manage your boot splash
Exec=gksu gsplashy
Icon=/usr/local/share/pixmaps/gsplashy/gsplashy.svg
Terminal=false
Type=Application
Categories=System;Settings;
Feito isso, a partir de agora você poderá acessar o Splashy Manager na seção "Sistema" do "menu K":



Vejamos agora como podemos, utilizando os dois programas vistos no tópico anterior, instalar e criar temas para o Splashy. Depois veremos como editar temas já existentes e, por último, veremos como utilizar o Splashy em um LiveCD.

Instalando novos temas para o Splashy
Vou demonstrar agora como instalar o tema Fingerprint, que pode ser baixado do site oficial do Splashy através do seguinte comando:

$ wget http://splashy.alioth.debian.org/wiki/_media/themes/fingerprint-1.0-theme.tar.gz
Se desejar utilizar outro tema, você pode encontrar mais temas no site oficial do Splashy ou no site do KDE-Look.org. Lembre-se de alterar os comandos que informarei a seguir conforme suas necessidades.

Usando o terminal
Uma vez baixado o tema desejado, execute o seguinte comando no terminal, passando como parâmetro o nome do arquivo que você baixou:

# splashy_config -i fingerprint-1.0-theme.tar.gz
Esse comando copiará o tema para a pasta de temas do Splashy ("/etc/splashy/themes"). Para defini-lo como o tema do Splashy, execute agora o comando:

# splashy_config -s fingerprint
E em seguida atualize o initramfs:

# update-initramfs -u -t -k $(uname -r)
Para testar se o tema foi aplicado corretamente não é necessário reiniciar o computador. Você pode fazer isto através do comando:

# splashy test
A tela do Splashy será exibida da mesma forma como será exibida durante o boot. Pressione ESC para sair dela e finalizar o teste.


Usando o StartUp-Manager
Uma vez baixado o tema desejado, inicie o StartUp-Manager, vá até a aba "Appearance" e clique no botão "Manage splashy themes...", que está na seção "Splashy themes".


A caixa de diálogo que aparece lista todos os temas do Splashy instalados. Clique no botão "Add".


Informe onde está o arquivo .tar.gz (a extensão .tar.bz2 também é aceita) e clique em "Open".


Após isso, você deve fechar a caixa de diálogo, voltando à tela principal do StartUp-Manager. No menu drop-down "Splashy theme" selecione o tema que você deseja que seja exibido durante o boot (nesse caso, o Fingerprint, que você acabou de instalar).


Você pode clicar em "Preview theme" para visualizar o tema. A tela do Splashy será então exibida da mesma forma como será exibida durante o boot. Pressione ESC quando desejar encerrar o teste.

Usando o Splashy Manager
Uma vez baixado o tema desejado, inicie o Splashy Manager. Já na tela principal aparece uma lista com todos os temas do Splashy instalados. Clique no botão "Install a theme".


Informe onde está o arquivo .tar.gz do tema (lembrando que a extensão .tar.bz2 também é aceita) e clique em "Open".

Voltando para a lista de temas do Splashy, clique no tema que você deseja que seja exibido durante o boot (nesse caso, o Fingerprint, que você acabou de instalar). Você será avisado sobre a atualização do initramfs.


Feche o aviso e o Splashy Manager, abra o terminal e execute o comando:

# update-initramfs -u -t -k $(uname -r)
Criando um tema
Para os que gostam de utilizar o terminal, o Splashy tem a sua própria ferramenta para a criação de temas. Para usá-la, execute no terminal o seguinte comando:

$ splashy_config -c
Várias perguntas serão feitas a você a respeito do tema. Respondendo a essas perguntas, no final do processo será criada uma pasta com os arquivos do tema. Para finalizar, você deve transformar essa pasta em um arquivo .tar.gz, de modo que você possa guardar o tema e instalá-lo usando os passos descritos anteriormente. Para isso, execute o seguinte comando no terminal:

$ tar czf nome_do_tema.tar.gz nome_do_tema
Não entrarei em detalhes a respeito do uso dessa ferramenta visto que é possível usar para a mesma tarefa uma ferramenta gráfica muito mais intuitiva, fácil de usar e com igual funcionalidade: o Splashy Manager.

Para criar um tema com o Splashy Manager, estando ele aberto, clique no botão "Create a theme". Surge então uma caixa de diálogo com quatro abas que agrupam as informações referentes ao tema.

A primeira delas é a aba informações ("Info"). Nela você deve digitar as informações gerais referentes ao seu tema: nome (campo "Name"), versão ("Version"), descrição ("Description"), site ("Url"s) e autor ("Author").


Note que dentre essas informações a mais relevante é a primeira, o nome do tema. Além do próprio tema, a pasta na qual ele será armazenado também receberá esse nome, assim como o arquivo .tar.gz que criaremos no final do processo para que seja possível distribuir e instalar o tema seguindo os passos já vistos. Portanto, é interessante que o nome do tema seja simples, de fácil digitação.

A segunda aba, fundo ("Background"), é dividida em três seções: imagens ("Images"), dimensões ("Dimensions") e efeitos ("FX").


Na primeira delas, você deve especificar quais imagens serão exibidas durante a inicialização ("boot"), o desligamento ("shutdown"), a ocorrência de um erro ("error"), o retorno de uma hibernação ("resume") e o início de uma hibernação ("suspend"). Você pode optar por escolher imagens diferentes ou utilizar a mesma imagem (mais comum) em todas as opções. É importante observar que o Splashy só suporta imagens em formato PNG.

Na segunda, você deve informar qual será a largura ("Width") e altura ("Height") da imagem que será exibida. É recomendável aqui especificar o tamanho 1024 X 768, que é mais comum. É interessante também que a resolução aqui informada coincida com a informada na configuração do gerenciador de boot.

Na terceira e última seção da segunda aba você deve especificar quais efeitos deseja que sejam exibidos. Marque a opção "Verbose on error" se desejar que, caso seja gerada alguma mensagem de erro, esta seja exibida na tela.

Indo para a terceira aba, barra de progresso ("Progress bar"), você irá configurar a barra de progresso, que pode, ou não, ser exibida em todos ou em apenas alguns processos.


Na primeira seção, exibir ("Show"), você deve marcar em quais processos deve ser exibida a barra de progresso: inicialização ("On boot"), desligamento ("On shutdown"), retorno de hibernação ("On resume") e início de hibernação ("On suspend"). Deve informar também, em cada um deles, a direção em que a barra de progresso deve se mover: da esquerda para a direita ("Forward") ou da direita para a esquerda ("Backward"). O mais comum é que durante a inicialização a barra se mova para a direita e durante o desligamento, da direita para a esquerda.

Na segunda seção, dimensões ("Dimensions"), configuraremos a posição - X e Y - e o tamanho da barra de progresso - largura ("Width") e altura ("Height") - em pixels. Observe que a posição é medida a partir do canto superior esquerdo da tela.

Na terceira seção, cor ("Color"), vocë pode definir as cores de frente e de fundo da barra de progresso. Na seção borda ("Border"), você pode definir também se a barra de progresso terá uma borda, marcando a opção habilitar ("Enable") e definindo a cor de fundo. Os campos de texto com valores numéricos ao lado dos seletores de cor definem a opacidade (transparência) da cor, aceitando um valor inteiro entre 0 (invisível) e 255 (totalmente opaca).

Na quarta e última aba, você pode configurar a exibição de uma caixa de texto. A caixa de texto serve para exibir as mensagens que aparecem no terminal. Sua utilização não é muito comum, visto que a maioria das pessoas não gosta das mensagens que aparecem no terminal e preferem ocupar toda a tela com uma imagem. Uma possibilidade interessante é exibi-las juntamente com a barra de progresso.


Se você desejar exibir a caixa de texto, a primeira coisa que você deve fazer é marcar a opção habilitar ("Enable"). A partir daí, as outras opções estarão disponíveis para edição. São semelhantes às opções da aba anterior. Só há uma seção nova, fonte do texto ("Text font"), que configura o tipo, o tamanho e a cor da fonte que aparecerá na caixa de texto.

Uma vez que você terminou de configurar seu tema, clique no botão "Apply". O Splashy Manager armazenará o tema dentro de uma pasta com o mesmo nome do tema em "/etc/splashy/themes" e configurará o Splashy para utilizar este tema.

Se você deseja que ele seja exibido já no próximo boot, no terminal, execute o comando:

# update-initramfs -u -t -k $(uname -r)
Para finalizar, se quiser distribuir o tema, você deve transforma-lo em um arquivo .tar.gz. Para isso, execute o seguinte comando no terminal:

$ cd /etc/splashy/themes
# tar czf nome_do_tema.tar.gz nome_do_tema
Modificando um tema
Nem sempre nós acertamos todas as configurações durante a criação de um tema. Infelizmente, o Splashy Manager, utilizado no tópico anterior para criar o tema, não permite modificar um tema já existente. É bom saber, no entanto, que isso é possível e que, apesar de ser um processo manual, não é difícil de forma alguma.

Para modificar um tema do Splashy já existente vá até a pasta onde estão os temas do Splashy, "/etc/splashy/themes", abra a pasta do tema que você deseja editar e abra utilizando um editor de texto o arquivo "theme.xml".

Se você examinar esse arquivo, perceberá que ele contém as informações que nós passamos para o Splashy Manager durante a criação do tema. Você pode alterar esses valores como desejar e depois salvar o arquivo "theme.xml" e gerar um novo arquivo .tar.gz com o tema atualizado.

Quando acabar a edição, salve o arquivo, feche o editor de texto, e gere um novo arquivo .tar.gz com o tema atualizado:

$ cd /etc/splashy/themes
# tar czf nome_do_tema.tar.gz nome_do_tema
Se desejar aplicar as mudanças para que elas já sejam exibidas na próxima inicialização, execute os seguintes comandos no terminal:

# splashy_config -s nome_do_tema
# update-initramfs -u -t -k $(uname -r)
Utilizando no LiveCD
Nos artigos anteriores, Criando um LiveCD a partir de uma instalação do Debian Lenny e Guia de referência do ISOLINUX, durante a inicialização dos LiveCDs que criamos apareciam mensagens na tela, mostrando os processos e serviços que estavam sendo carregados. A maioria dos usuários, no entanto, prefere saber o andamento do boot em termos de porcentagem e não de processos iniciados. Veremos agora como personalizar o boot do LiveCD com o Splashy.

Assim como fiz no artigo Guia de referência do ISOLINUX, citarei apenas as alterações que devem ser feitas no artigo original. Este, portanto, é de leitura obrigatória para a execução do passo-a-passo que descreverei a seguir.

Recomendo que antes de começar a criação do LiveCD o tema que será aplicado já esteja pronto, dispensando a instalação de programas no LiveCD apenas para criar um tema para o Splashy. Se este tema estiver na Internet (você pode obter temas bem interessantes no site do KDE-Look.org ou no próprio site do Splashy), você poderá baixá-lo enquanto estiver dentro do sistema de trabalho. Se estiver no seu computador, você deverá passá-lo de alguma forma para o sistema de trabalho. 

Uma sugestão é copiar o arquivo .tar.gz do tema para a pasta "/tmp" do seu sistema (não do sistema de trabalho). Essa pasta será utilizada durante a criação do LiveCD mas não será mantida no mesmo. Perceba que na Etapa C, imediatamente antes de entrarmos no sistema de trabalho, nós a "emprestamos" ao sistema de trabalho (por isso passamos o parâmetro --bind ao programa mount) e no final da Etapa D, ao desmontá-la nós a "tomamos de volta".

Terminadas as recomendações, vamos ao passo-a-passo. Se você decidiu seguir minha recomendação de copiar o arquivo .tar. gz do tema para a pasta "/tmp" do seu sistema, deve fazê-lo em qualquer momento antes de entrar no sistema de trabalho na Etapa C. Sendo esta a primeira alteração, a Etapa A e a Etapa B não têm modificações.

Na Etapa C, após entrar no sistema de trabalho, instale o Splashy usando o comando:

# apt-get install splashy
Agora, ainda na Etapa C e dentro do sistema de trabalho, vamos instalar o tema do Splashy. Se você vai baixar um tema da internet, deve fazê-lo agora. De posse do tema, vá até a pasta onde o mesmo se encontra e execute os comandos a seguir. Lembre-se de que você deve alterar esses comandos conforme o tema que esteja instalando:

# splashy_config -i avmlinux-theme-1.0.tar.gz
# rm avmlinux-theme-1.0.tar.gz
# splashy_config -s AvmLinux
# update-initramfs -u -t -k $(uname -r)
A última alteração ocorre na Etapa E, quando da configuração do gerenciador de boot. A seguir, apresento exemplos dos arquivos de configuração do GRUB e do ISOLINUX.

Configuração do GRUB ("/boot/grub/menu.lst"):
DEFAULT 0
TIMEOUT 30
COLOR cyan/blue white/blue

TITLE Iniciar o Linux em modo grafico
KERNEL /boot/vmlinuz BOOT=live boot=live nopersistent rw quiet splash vga=791
INITRD /boot/initrd.gz    

TITLE Iniciar o Linux em modo texto
KERNEL /boot/vmlinuz BOOT=live boot=live nopersistent textonly rw quiet vga=791
INITRD /boot/initrd.gz    

TITLE Testar a memoria 
KERNEL /boot/memtest86+.bin    

TITLE Iniciar a partir do disco rigido
ROOT (hd0)    
CHAINLOADER +1
Configuração do ISOLINUX ("/boot/isolinux/isolinux.cfg"):
DEFAULT vesamenu.c32
TIMEOUT 300
PROMPT 0

LABEL live
  MENU LABEL ^Iniciar o Linux em modo grafico
  KERNEL /boot/vmlinuz
  INITRD /boot/initrd.gz
  APPEND boot=live nopersistent rw quiet splash vga=791

LABEL text_only
  MENU LABEL Iniciar o Linux em modo ^texto
  KERNEL /boot/vmlinuz
  INITRD /boot/initrd.gz
  APPEND boot=live nopersistent textonly rw quiet vga=791

LABEL memtest
  MENU LABEL Testar a ^memoria
  KERNEL /boot/memtest86
  APPEND -

LABEL hd
  MENU LABEL Iniciar a partir do ^disco rigido
  LOCALBOOT 0x80
  APPEND -
Executados todos os passos, durante o teste do LiveCD você deverá ver o Splashy em execução durante o boot. Veja como ficou o tema que eu criei como exemplo desse tutorial:


Nesse artigo vimos como personalizar o LiveCD em mais um de seus vários aspectos: o bootsplash. O mais interessante dessa personalização é que ela pode ser aplicada não só ao LiveCD, como também ao sistema que está instalado no disco rígido. Isso nos permite visualizar nosso tema antes mesmo que o LiveCD esteja criado.

À medida em que for pesquisando e experimentando mais possibilidades escreverei mais artigos aqui no blog. Espero que estejam gostando dos artigos e que me acompanhem nas minhas pesquisas, corrigindo meus erros, enviando sugestões e compartilhando suas experiências.

Um abraço a todos e até a próxima.

Fontes
http://maketecheasier.com/create-install-your-own-usplash-theme-in-ubuntu/2009/01/25http://packages.debian.org/lenny/splashyhttp://packages.debian.org/lenny/startupmanagerhttp://sourceforge.net/projects/startup-manager/http://splashy.alioth.debian.org/wiki/how_it_workshttp://splashy.alioth.debian.org/wiki/installationhttp://splashy.alioth.debian.org/wiki/themeshttp://www.bootsplash.org/http://www.guiadohardware.net/artigos/bootsplash/http://www.vivaolinux.com.br/artigo/Boot-grafico-no-ArchLinux