Piter Punk's HomePage - Artigos
 
English version
Configurando o X para Framebuffer

Piter PUNK

Existem v�rias placas de v�deo no mercado e � bem complicado para o X ter um bom suporte para todas elas. Algumas at� possuem bons drivers, mas s�o propriet�rios ou precisam de alguns "truques" extras para funcionar. Uma solu��o boa para isto � utilizar o X sobre o framebuffer, o que veremos nesse artigo.

1. Introdu��o

Uma das novidades do kernel 2.2 foi o uso do framebuffer. Gra�as a ele podemos ter um bonito ping�im durante o boot do sistema e muito mais letras no console. Talvez por isso o framebuffer seja t�o popular entre os defensores do modo texto, fica bem mais f�cil programar ou dividir a tela em duas (ou mais) quando se tem mais que 25 linhas por 80 colunas.

Mas o framebuffer possui outras vantagens, com ele, � poss�vel gerar gr�ficos no console, sem a necessidade do X. Isso (obviamente) depende do programa haver sido escrito para usar o framebuffer. Mas voc� tamb�m pode rodar o X sobre o framebuffer!!! Com isso, se o seu kernel estiver com o suporte a framebuffer habilitado e funcionando, voc� ter� o X rodando na sua m�quina! -:) Fica mais lento que usar o driver correto para a sua placa de v�deo, mas � um bom quebra-galho enquanto voc� n�o descobre qual � o driver (ou enquanto ele n�o existe).

Durante todo o artigo irei presumir que o seu kernel j� possui suporte ao framebuffer compilado nele. A maior parte das distribui��es atuais faz isso com o kernel padr�o, espero que seja o caso da sua. O Slackware j� vem com este suporte e um XF86Config j� preparado.

2. Editando o lilo.conf

Presumindo que o seu kernel j� esteja com o framebuffer habilitado, voc� dever� selecionar qual ser� a resolu��o e qual a quantidade de cores que voc� ter� no seu console. Atrav�s de alguns c�lculos enigm�ticos, voc� ir� chegar em uma s�rie de n�meros cabal�sticos. Para facilitar a sua vida, a� vai uma tabelinha:

  640x480 800x600 1024x768 1280x1024
8bpp 769 771 773 775
16bpp 785 788 791 794
24bpp 786 789 792 795

Esta tabela foi retirada do arquivo /etc/X11/XF86Config-fbdev do Slackware 8.1 e levemente adaptada (n�o precisa nem dizer que o Slackware j� vem com tudo prontinho para usar o X no framebuffer). Como cortesia da casa, outra tabelinha com o tanto de mem�ria que voc� precisa para cada uma dessas resolu��es:

  640x480 800x600 1024x768 1280x1024
8bpp 300KB 500KB 800KB 1,5MB
16bpp 600KB 1MB 1,5MB 2,5MB
24bpp 900KB 1,5MB 2,3MB 4MB

Bom... hoje em dia � raro achar uma placa com menos de 16MB de RAM, mas se voc� estiver instalando em um computador com um pouco mais de idade, � importante saber qual a resolu��o m�xima que a mem�ria da placa de v�deo suporta.

Sabendo agora qual a resolu��o que voc� deseja (e que a sua placa suporta) e qual o n�mero cabal�stico utilizar, chegou a hora de editar o /etc/lilo.conf. � muito simples, abra o arquivo no seu editor de textos preferidos e inclua na se��o global uma linha com:

	vga=nnn

Onde nnn � o n�mero cabal�stico. MUITA ATEN��O!!! S� PODE HAVER UMA LINHA COM vga=nnn!!!! Depos de editado o lilo.conf, volte ao prompt e digite o comando:

	# lilo
	Added Linux *

Pronto! Na pr�xima vez que voc� rebootar a sua m�quina, j� estar� na resolu��o correta. Se ocorrer algum problema, digite no prompt do LILO a op��o vga=normal. E verifique novamente a resolu��o, a mem�ria e se a sua placa suporta ou n�o o framebuffer.

3. Editando o /etc/X11/XF86Config

S�o necess�rias poucas modifica��es no /etc/X11/XF86Config (embora sejam mais que no lilo.conf, onde foi uma linha s�). Na se��o Device, voc� deve trocar o Driver de (seja l� o que esteja l�), para fbdev. Ficando mais ou menos assim:

	Section "Device"
		Identifier "VESA Framebuffer" 
		Driver "fbdev" 
	EndSection

E, na se��o Screen, deve haver uma linha com:

	DefaultDepth n

Onde o n corresponde a quantidade de pixels por ponto (os tais 8, 16 e 24bpp l� em cima). Ap�s essa linha, � conveniente possuir uma SubSection para cada depth, como estas:

	Subsection "Display" 
		Depth 8 
	EndSubsection 
	Subsection "Display" 
		Depth 16 
	EndSubsection 
	Subsection "Display" 
		Depth 24 
	EndSubsection 
	Subsection "Display" 
		Depth 32 
	EndSubsection

Quando voc� est� usando 24bpp no framebuffer, pode usar tanto o 24 quanto o 32 no X. E, com isso, terminamos as configura��es a fazer no X. A �nica coisa que falta � usar -;). Se tiver alguma d�vida, no Ap�ndice est� o XF86Config que uso em um de meus computadores, que na realidade � o XF86Config-fbdev do Slackware levemente adaptado.

Ali�s, se voc� usa Slackware, o mais f�cil � copiar o XF86Config-fbdev e alterar os detalhes na m�o. Se o seu mouse � PS/2, a �nica coisa que vai precisar alterar � a configura��o do teclado, para a acentua��o. A maneira mais f�cil de fazer isso (se os acentos estiverem funcionando no console) � simplesmente apagar as linhas com:

	Option "XkbRules" "xfree86" 
	Option "XkbModel" "pc101" 
	Option "XkbLayout" "us"

E colocar no lugar uma linha contendo:

	Option "XkbDisable"

Assim o X ir� ler o mapa de teclado que voc� estiver usando no console.

4. Conclus�o

Vimos como configurar rapidamente o X para rodar em qualquer placa que possua suporte a framebuffer pelo kernel. Apesar de n�o ser o modo gr�fico com o melhor desempenho, compensa pela simplicidade e pelo suporte a v�rias placas.

Algumas problem�ticas com o X tais como: Trident 3DIm�ge975, SiS530, SiS620, algumas GeForce, etc... podem ser utilizadas sem maiores problemas. E, depois do X rodando, voc� pode navegar na internet em busca de drivers melhores ou mais r�pidos (o que � o caso das GeForce com o driver da pr�ipria nVidia).

Qualquer d�vida, cr�tica ou sugest�o a respeito deste artigo mande e-mail para: [email protected]

Ap�ndice

/etc/X11/XF86Config
Section "Module"
    Load       "dbe"   # Double buffer extension
    SubSection  "extmod"
      Option   "omit xfree86-dga"  # don't initialise the DGA extension
    EndSubSection
    Load       "type1"
    Load       "freetype"
    Load       "speedo"
    Load      "glx"
EndSection

Section "Files"
    RgbPath     "/usr/X11R6/lib/X11/rgb"
    FontPath   "/usr/X11R6/lib/X11/fonts/local/"
    FontPath   "/usr/X11R6/lib/X11/fonts/misc/"
    FontPath   "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled"
    FontPath   "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled"
    FontPath   "/usr/X11R6/lib/X11/fonts/Type1/"
    FontPath   "/usr/X11R6/lib/X11/fonts/Speedo/"
    FontPath   "/usr/X11R6/lib/X11/fonts/100dpi/"
    FontPath   "/usr/X11R6/lib/X11/fonts/75dpi/"
EndSection

Section "InputDevice"
    Identifier  "Keyboard1"
    Driver      "Keyboard"
    Option "AutoRepeat" "500 30"
    Option "XkbRules"   "xfree86"
    Option "XkbModel"   "pc102"
    Option "XkbLayout"  "us_intl"
EndSection

Section "InputDevice"
    Identifier  "Mouse1"
    Driver      "mouse"
    Option "Protocol"   "IMPS/2"
    Option "Device"     "/dev/mouse"
    Option "Buttons" "5"
    Option "ZAxisMapping" "4 5"
EndSection

Section "Monitor"
    Identifier  "My Monitor"
    HorizSync   31.5 - 50.0
    VertRefresh 40-90
EndSection

Section "Device"
    Identifier  "VESA Framebuffer"
    Driver     "fbdev"
EndSection

Section "Screen"
    Identifier  "Screen 1"
    Device      "VESA Framebuffer"
    Monitor     "My Monitor"
    DefaultDepth 16

    Subsection "Display"
        Depth       8
    EndSubsection
    Subsection "Display"
        Depth      16
    EndSubsection
    Subsection "Display"
        Depth      24
    EndSubsection
    Subsection "Display"
        Depth      32
    EndSubsection
EndSection

Section "ServerLayout"
    Identifier  "Simple Layout"
    Screen "Screen 1"
    InputDevice "Mouse1" "CorePointer"
    InputDevice "Keyboard1" "CoreKeyboard"
EndSection

Links Principal Artigos Piter Punk Dicas Programas
 
Powered by Slackware Linux - Written in VIm (the best one!) Last Update: 30 Oct 2004