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
|