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: piterpk@terra.com.br

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