Sunteți pe pagina 1din 369

FERRAMENTAS TCNICAS

1
FERRAMENTAS TCNICAS
Prefcio
Captulo 1: Entendendo a estrutura do sistema
Como funciona o suporte a hardware no Linux
Os componentes do sistema
Kernel
Mdulos
Os processos de boot e os arquivos de inicializao
tivando e desativando servios
!
"erenciador de lo#in
!free e !or#
$rvore #eneal#ica das distribui%es
Captulo 2: Configurao, ferramentas e dicas
&ditando o 'etc'fstab
Confi#urando o lilo
(ual)*oot com dois +(s
,sando uma ima#em de fundo
Confi#urando o #rub
Confi#urando o v-deo. 'etc'!//'xor#0conf
K1M via software com o 23ner#3
,sando o hdparm
4ecompilando o Kernel
*aixando os fontes
Confi#urando
Compilando
5nstalando
4ecompilando o Kernel 6 moda (ebian
plicando patches
Criando patches
celerando a compilao com o distcc
Criando pacotes a partir dos fontes com o chec7install
&screvendo scripts de bac7up
,sando o autofs'automount
cessando dispositivos ,2*
Confi#urando manualmente
(evs e hotplu#
&ntendendo o udev
4enomeando interfaces de rede com o udev
8azendo bac7up e recuperando a M*4 e tabela de parti%es
,sando o "part
,sando o 9estdis7
4ecuperando parti%es danificadas
"erenciamento de setores defeituosos como o 4eiser82
2
FERRAMENTAS TCNICAS
Monitorando a sa:de do +( com o 2M49
Copiando dados de +(s ou C(s defeituosos
proveitando mdulos de memria defeituosos
&liminando dados com se#urana
dministrando a memria swap
tivando o suporte a mair de /"* de memria 4M
Clonando parti%es com o ;artima#e
5nstalando
8un%es b$sicas
8azendo uma ima#em de todo o +(
"ravando ima#ens num compartilhamento da rede
2e#urana. detectando root7its
5nstalando o Kurumin < =e outras distros> num pendrive ou carto
2alvando as confi#ura%es
Monitores de temperatura e coolers
"erenciamento de ener#ia
Captulo 3: Instalando drivers adicionais
1erificando lin7s? arquivos e compiladores
Confi#urando softmodems no Linux
id@ia b$sica
(river da 2martlin7
5ntel CA< e 95 5!;
5ntel BC< e BCD
Lucent e #ere
;C)9el ;C5
Modems com chipset Conexant
5nstalando placas wireless
Ediswrapper
C!/FF e C!///
MadGi8i
(Mtec7 (MHI//
4ealte7 H/HF
Orinoco ,2*
*roadcom
5;GI/FF e 5;GIIFF
4alin7 IJFF e IBFF
Linux)wlan)n#
2uporte a webcams
(river apcaBxx
Lo#itech Kuic7Cam
2qcam
Modems (2L ,2*
(river da n1idia
3
FERRAMENTAS TCNICAS
5nstalando manualmente
tivando os recursos especiais
82
Confi#urador #r$fico
9win 1iew
5nstalando 6 moda (ebian
(river para placas com chipset n8orce
tivando o driver de rede
tivando o driver de som
(river C( da 95
5nstalando
Confi#urando e solucionando problemas
9ablets
Confi#urando placas de 91
"ravando
Confi#urando mouses touchpad com fun%es especiais
*ootsplash
Captulo : Programando em s!ell script
O b$sico
8azendo per#untas
Mais dicas sobre o 7dialo#
Controlando aplicativos via (CO;
,sando os servicemenus do K(&
(etectando hardware
lterando arquivos de confi#urao
Corri#indo erros
;acotes auto)instal$veis
Mais exemplos :teis
Criando interfaces no Kommander
Criando scripts para o hotplu#
Criando re#ras para o udev
Captulo ": #emasteri$ando o %urumin e outros live&C's
O b$sico
&xtraindo
8echando a nova ima#em
;ersonalizando o K(& e pro#ramas
2cripts de inicializao
Mudando a lin#ua padro e traduzindo as mensa#ens de boot
Mudando o usu$rio padro
Criando um (1( de recuperao
Criando seus prprios pacotes 0deb
4
FERRAMENTAS TCNICAS
Prefcio
As distribuies Linux esto de um modo geral se tornando muito fceis de usar, at mesmo
mais fceis de usar que o Windows em algumas reas. Mas isso acaba deixando um gosto amargo
na boca. Afinal, onde est o desafio?
Em outros casos as coisas no funcionam to bem assim e o gosto amargo fica por conta do
modem, webcam, placa 3D ou placa wireless que no est funcionando ou outro problema qualquer,
que no pode ser solucionado usando as ferramentas grficas.
Este livro uma coleo de dicas que ensinam a configurar e corrigir problemas "na unha",
manipulando diretamente os arquivos de configurao e mdulos do sistema, sem depender de
nenhum configurador, escrever shell scripts, instalar drivers manualmente e dominar ferramentas de
diagnstico e recuperao do sistema.
ideal para quem gosta de fuar e quer entender melhor como o sistema funciona
internamente, editando arquivos de configurao, compilando mdulos e escrevendo scripts.
Nesta segunda edio, o livro recebeu uma grande quantidade de atualizaes em todos os
captulos e muitas das dicas antigas foram substitudas por novas.
O captulo sobre shell script foi expandido, trazendo mais informaes sobre o
desenvolvimento de scripts grficos, ferramentas de configurao e tambm scripts e regras para o
hotplug e udev, que permitem abrir programas e executar tarefas diversas quando novos dispositivos
so plugados na mquina.
Foi includo tambm um novo captulo, que ensina a desenvolver novas distribuies ou
solues baseadas no Kurumin e outros live-CDs derivados do Knoppix, que permitem colocar em
prtica as dicas aprendidas no restante do livro.
Por ser escrito em uma linguagem simples e didtica e com um nvel crescente de
dificuldade, este livro indicado tanto para usurios avanados, quanto iniciantes que desejam
compreender mais profundamente o sistema.
5
FERRAMENTAS TCNICAS
Captulo 1
Entendendo a estrutura do sistema
Os primeiros sistemas Unix foram desenvolvidos na dcada de 70, com o objetivo de serem
robustos, simples e utilizarem pouca memria, de forma a rodarem com um bom desempenho nos
computadores limitados da poca.
Porm, por serem desenvolvidos tendo em mente os administradores de sistema, que sempre
possuam bons conhecimentos, nem sempre a facilidade de uso era uma prioridade.
O Linux pode ser considerado um sistema Unix, que conserva muitas das caractersticas dos
sistemas originais. Para quem vem do Windows, a organizao das pastas, a instalao de novos
programas e o uso dos arquivos de configurao parece algo esotrico. Mas no fundo as coisas no
so to complicadas assim.
Este captulo uma introduo estrutura do Linux, destinada ao pblico tcnico.
6
FERRAMENTAS TCNICAS
Como funciona o suporte a hardware no Linux?
As distribuies Linux sempre vm de fbrica com suporte a muitos dispositivos, em geral
quase tudo detectado automaticamente. Os maiores problemas so, em geral, os softmodems que
precisam ser instalados manualmente. O mesmo se aplica se voc tiver uma placa de vdeo da
nVidia ou da ATI ou outros dispositivos (como vrias placas de rede wireless), cujos fabricantes
disponibilizam drivers proprietrios.
Mas, afinal, como a instalao destes drivers no Linux? Cad o assistente para a instalao
de novo hardware? Onde que eu aponto a pasta onde esto os arquivos? Calma, vamos chegar l :-).
O suporte a dispositivos no Linux feito atravs de "mdulos" includos no Kernel, arquivos
que ficam dentro da pasta "/lib/modules/verso_do_kernel_usada/". Estes mdulos so a coisa mais
parecida com um "driver" dentro da concepo que temos no Windows. Para ativar suporte a um
certo dispositivo, voc precisa apenas carregar o mdulo referente a ele.
Veja que os mdulos ficam organizados em pastas: a pasta "kernel/drivers/net/" contm
drivers para placas de rede, a pasta "kernel/drivers/usb/" agrupa os que do suporte dispositivos
USB e assim por diante.
At o Kernel 2.4, os mdulos de Kernel utilizavam a extenso ".o", que uma extenso
genrica para objetos em C. A partir do Kernel 2.6, passou a ser usada a extenso ".ko" (kernel
object), que mais especfica.
Quase sempre, os mdulos possuem nomes que do uma idia do dispositivo a que oferecem
suporte. O "8139too.ko" d suporte s placas de rede com o chipset Realtek 8139, o "sis900.ko" d
suporte s placas SiS 900, enquanto o "e100.ko" ativa as placas Intel E100.
7
FERRAMENTAS TCNICAS
Os mdulos podem ser carregados e descarregados a qualquer momento usando os
comandos "modprobe" e "modprobe -r"; no apenas na inicializao do sistema.
Existe tambm o comando "insmod", mais antigo, que tambm permite carregar mdulos. A
diferena entre o "insmod" e o "modprobe" que o modprobe carrega apenas mdulos j instalados,
junto com todas as dependncias, ou seja, outros mdulos de que o primeiro precise para funcionar.
Se voc tentar carregar o mdulo "usb-storage" (que d suporte a pendrives e HDs USB), vai
perceber que sero carregados tambm os mdulos "usbcore" e "ehci-hcd".
O "insmod" muito menos inteligente, carrega apenas o mdulo solicitado, retornando um
erro caso ele precise de outros. A nica vantagem que ele permite carregar mdulos a partir de
qualquer pasta, permitindo que voc teste um mdulo que acabou de compilar, ou que gravou num
pendrive, por exemplo.
Os mdulos so gerados durante a compilao do Kernel. Voc no precisa se preocupar
com isso se no quiser, pois as distribuies quase sempre incluem verses bem completas do
Kernel por padro. Mas, de qualquer forma, existe sempre a possibilidade de recompilar o Kernel,
mexendo nas opes e ativando ou desativando os mdulos que quiser.
Voc pode incluir mdulos para todo tipo de dispositivos, de marcas e modelos diferentes.
Eles no atrapalham em nada, pois apenas alguns deles (os que voc estiver usando no momento)
ficaro carregados na memria. Estes mdulos geralmente so pequenos; um conjunto completo
com os mdulos para todo tipo de dispositivos (que totalizam mais de mil arquivos no Kernel 2.6),
normalmente ocupa de 40 a 50 MB no HD.
8
FERRAMENTAS TCNICAS
Podemos dividir os drivers de dispositivo para o Linux em dois grupos. O primeiro o dos
drivers de cdigo aberto, que podem tanto ser desenvolvidos pelos prprios fabricantes quanto por
voluntrios em cantos remotos do mundo. Desenvolver drivers usando engenharia reversa sem ajuda
dos fabricantes parece ser um passatempo bastante popular :-).
Estes drivers open-source so includos diretamente no Kernel, o que faz com que sejam
includos diretamente nas distribuies e voc no precise se preocupar muito com eles. Sua placa
funciona e todo mundo fica feliz.
A segunda categoria a dos drivers proprietrios, de cdigo fechado, que so desenvolvidos
pelos prprios fabricantes. Em alguns casos os drivers so de livre distribuio e tambm podem ser
includos diretamente nas distribuies. Em outros, voc mesmo precisar baixar e instalar o driver.
aqui que entram os drivers para softmodems, para muitas placas wireless e tambm os drivers
para placas 3D da nVidia e da ATI.
A psicologia para lidar com eles a seguinte: instalar um destes drivers envolve duas tarefas:
baixar e instalar o mdulo propriamente dito e criar um "dispositivo" (device), um atalho que aponta
para o endereo de hardware usado por ele.
Ao instalar um modem Lucent, por exemplo, criado um dispositivo "/dev/ttyLT0" por onde
o modem acessado. Para facilitar esta tarefa, geralmente os drivers vm com algum tipo de
instalador, geralmente um script simples de modo texto que cuida disso para voc.
Os mdulos so parte integrante do Kernel, por isso os mdulos para uma determinada
distribuio no funcionam em outra, a menos que por uma grande coincidncia as duas utilizem
exatamente a mesma verso do Kernel. Isso bastante improvvel j que o Kernel do Linux
atualizado quase que diariamente.
Se voc usar uma distribuio popular, Mandriva, Fedora, SuSE, etc., possvel que voc
encontre um driver pr-compilado para download (que pode ser encontrado com a ajuda do
Google ;). Neste caso, voc s vai precisar instalar um pacote RPM ou executar um arquivo de
instalao. Em outras situaes, voc encontrar apenas um arquivo genrico ainda no compilado,
contendo um instalador que se encarrega de compilar um mdulo sob medida para o Kernel em uso.
Como ele no tem como adivinhar qual distribuio ou Kernel voc est utilizando,
necessrio ter instalados dois pacotes que acompanham qualquer distribuio: kernel-source e
kernel-headers. No Mandriva, por exemplo, voc pode instal-los usando os comandos:
# urpmi kernel-source
# urpmi kernel-headers
Naturalmente, para que ele possa compilar qualquer coisa, voc precisar tambm de um
compilador, o gcc, que tambm acompanha as distribuies. Se voc tiver estas trs coisas, vai
conseguir instalar qualquer driver sem maiores problemas, basta seguir as instrues na pgina de
download ou no arquivo INSTALL ou README dentro do pacote.
Uma grande parte deste livro justamente dedicada a falar sobre a instalao destes drivers
difceis, abordando tambm os problemas de instalao mais comuns.
9
FERRAMENTAS TCNICAS
Um lembrete importante sobre a nomenclatura adotada neste livro e em outros tipos de
documentao que a cerquilha (#) no incio do comando indica que ele deve ser executado como
root, o que necessrio ao instalar programas e editar arquivos de configurao. Os comandos com
um dlar ($) por sua vez devem ser executados usando uma conta de usurio.
Lembre-se de que, em qualquer distribuio, voc pode usar o comando "su" (seguido da
senha) para virar root. No caso do Ubuntu, alm do Kurumin e outras distribuies derivadas do
Knoppix, voc pode usar tambm o "sudo".
Os componentes do sistema
Todas as coisas grandes comeam pequenas e com o Linux no foi diferente. Para entender
melhor os componentes que formam o sistema, nada melhor do que falar um pouco sobre a histria
do Linux, sobre como e por que eles foram introduzidos, e entender o processo de inicializao do
sistema.
Kernel
Tudo comeou em 1991, com a primeira verso do Kernel disponibilizada por Linus
Torvalds. O "Freax" (renomeado para "Linux" pelo responsvel pelo FTP onde o arquivo foi
disponibilizado, uma alma sbia e caridosa :) ainda estava na verso 0.02 e era um sistema
monoltico, um grande bloco de cdigo que, alm do ncleo do sistema, continha drivers de
dispositivos e tudo mais.
Para compilar o cdigo fonte do Kernel, era necessrio usar o Minix, outro sistema baseado
em Unix que na poca era bastante popular entre os estudantes. Voc comeava compilando o
Kernel e em seguida algumas ferramentas bsicas como o gerenciador de boot, o bash (o
interpretador de comandos) e o gcc (o compilador). A partir de um certo ponto, voc podia dar boot
no prprio Linux e compilar os demais programas a partir dele mesmo.
Os primeiros aplicativos a rodarem sobre o Linux foram justamente ferramentas de
desenvolvimento, como o Emacs, e emuladores de terminal, usados para acessar outras mquinas
Unix remotamente.
Nesta poca comearam a surgir as primeiras "distribuies" Linux, na forma de projetos
amadores, onde algum gravava o sistema compilado em um conjunto de disquetes e tirava cpias
para os amigos.
Este procedimento de usar outro sistema operacional instalado para compilar uma instalao
do Linux de certa forma usada at hoje para gerar verses do sistema destinadas a serem usadas
em dispositivos embarcados, como palms e celulares. Neles voc usa uma cpia do Linux instalada
num PC para "montar" o sistema que vai rodar no dispositivo, compilando primeiro o Kernel e
depois os demais aplicativos necessrios, deixando para finalmente transferir para o dispositivo no
10
FERRAMENTAS TCNICAS
final do processo. Isto chamado de "cross-compiling".
Atualmente o Kernel, junto com vrios aplicativos, pode ser compilado para rodar em vrias
plataformas diferentes. O cdigo fonte do Kernel, disponvel no http://kernel.org (e diversos
mirrors), inclui o cdigo necessrio para gerar um Kernel para qualquer arquitetura suportada.
Na verdade, quase 95% do cdigo Kernel independente da arquitetura, por isso portar o
Kernel para uma nova plataforma um trabalho relativamente simples (pelo menos se levarmos em
conta a complexidade do cdigo envolvido). As partes que mudam de uma arquitetura a outra so
organizadas na pasta "/usr/src/linux/arch/".
Ainda assim, e um trabalho complexo e tedioso, muitas coisas precisam ser ajustadas e
necessrio encontrar programas especficos, que se ajustem configurao de hardware da
plataforma alvo. Voc pode rodar Linux num celular com 2 MB de memria, mas com certeza no
vai conseguir rodar o Firefox nele. Vai precisar encontrar um navegador mais leve, que rode
confortavelmente com pouca memria e a tela minscula do aparelho.
Aqui temos um screenshot do Familiar, uma distribuio Linux para o Ipaq, que pode ser
instalado em substituio ao Pocket PC Windows, que vem originalmente instalado. Veja que ele
bem diferente das distribuies para micros PC:
Voc pode entender melhor sobre como isto funciona instalando o "Linux from Scratch",
uma distribuio Linux que pode ser toda compilada manualmente a partir dos pacotes com cdigo
fonte, disponvel no: http://www.linuxfromscratch.org/.
Voltando histria, no incio o projeto ainda no tinha muita utilidade prtica. O conjunto de
aplicativos que rodava no sistema era pequeno. Era muito mais fcil usar o Minix, ou, se voc
tivesse condies financeiras, uma verso comercial do Unix, como o SunOS, que mais tarde deu
origem ao Solaris e ao OpenSolaris.
11
FERRAMENTAS TCNICAS
O que fez com que o Linux crescesse at o ponto em que est hoje foi principalmente o fato
de no apenas o cdigo fonte do sistema ser aberto e estar disponvel, mas tambm a forma aberta
como o sistema foi desenvolvido desde o incio.
normal encontrar muitos problemas e deficincias ao tentar usar um software em estgio
primrio de desenvolvimento. Se voc for um programador, vai acabar dando uma olhada no cdigo
e fazendo algumas modificaes. Se voc estiver desenvolvendo algum projeto parecido, provvel
que voc resolva aproveitar algumas idias e pedaos de cdigo para implementar alguma nova
funo e assim por diante.
No caso do Linux, estas modificaes eram bem-vindas e acabavam sendo includas no
sistema muito rapidamente. Isto criou uma comunidade bastante ativa, gente usando o sistema nos
mais diversos ambientes e ajudando a torn-lo adequado para todo tipo de tarefa.
Inicialmente era tudo um grande hobby. Mas logo o sistema comeou a ficar maduro o
suficiente para concorrer com as vrias verses do Unix e, mais tarde, tambm com o Windows,
inicialmente nos servidores, depois nos dispositivos embarcados e finalmente no desktop. Com isso,
mesmo grandes empresas como a IBM e a Novell comearam a contribuir com o desenvolvimento
do Kernel, a fim de tornar o sistema mais robusto e adicionar recursos necessrios para uso em
diversas tarefas.
Este modelo diferente do adotado pela Microsoft, por exemplo, que vende caixinhas do
Windows e Office. Estas empresas ganham mais vendendo solues, onde fornecido um pacote,
com o sistema operacional, aplicativos, suporte e garantias.
Neste caso, faz sentido contribuir para a construo de uma base comum (o Kernel) pois, no
final, sai muito mais barato do que investir em um sistema prprio. A partir desta base comum, as
empresas podem diferenciar-se das demais investindo nos outros componentes do pacote. Usar
Linux acaba virando ento uma questo de competitividade: outra empresa que resolvesse
desenvolver um sistema prprio sairia em desvantagem, pois precisaria investir muito tempo e
dinheiro para chegar no mesmo nvel dos outros.
Originalmente, o termo "Linux" era usado especificamente com relao ao Kernel
desenvolvido por Linus Torvalds. Mas, hoje em dia, mais comum nos referirmos plataforma
como um todo, incluindo o Kernel, ferramentas e aplicativos. Muitos dos aplicativos que usamos
hoje no Linux vieram de outras verses do Unix e este fluxo continua at hoje, nos dois sentidos.
O Kernel a base do sistema. Ele controla o acesso memria, ao HD e demais
componentes do micro, dividindo os recursos disponveis entre os programas. Todos os demais
programas, desde os aplicativos de linha de comando, at os aplicativos grficos rodam sobre o
Kernel.
Imagine, por exemplo, que voc est desenvolvendo um aplicativo de edio de udio. Voc
precisa incluir no seu programa vrias funes de edio, filtros e assim por diante. Mas, voc no
precisa se preocupar diretamente em oferecer suporte aos diferentes modelos de placas de som que
temos no mercado, pois o Kernel cuida disso.
12
FERRAMENTAS TCNICAS
Ao tocar um arquivo de udio qualquer, o seu programa precisa apenas mandar o fluxo de
udio para o device "/dev/dsp". O Kernel recebe o fluxo de udio e se encarrega de envi-lo placa
de som. Quando preciso ajustar o volume, seu programa acessa o dispositivo "/dev/mixer", e assim
por diante.
Naturalmente, uma Sound Blaster Live e uma placa AC'97 onboard, por exemplo, oferecem
conjuntos diferentes de recursos e se comunicam com o sistema de uma forma particular, ou seja,
falam lnguas diferentes. Por isso o Kernel inclui vrios intrpretes, os drivers de dispositivo.
Driver em ingls significa "motorista" ou, "controlador". Cada chipset de placa de som,
vdeo, rede ou modem possui um driver prprio.
Podemos dizer que os mdulos so as partes do Kernel mais intimamente ligadas ao
hardware. Os mdulos so as partes do Kernel que mudam de mquina para mquina. Depois vem o
bloco principal, "genrico" do Kernel.
Sobre ele roda o shell, o interpretador de comandos responsvel por executar os aplicativos
de modo texto e servidores, como o Samba e o Apache. Estes aplicativos so independentes do
modo grfico, voc no precisa manter o X aberto para instalar e configurar um servidor Samba,
por exemplo, embora as ferramentas grficas possam ajudar bastante na etapa de configurao.
Quando voc executa o comando "cat arquivo.txt", por exemplo, o bash entende que deve
usar o programa "cat" para ler o "arquivo.txt". O Kernel oferece uma srie de servios e comandos
que podem ser usados pelos aplicativos. Neste caso, o bash d a ordem para que o executvel "cat",
junto com o arquivo sejam carregados na memria.
Para que isso acontea, o Kernel precisa ler os dois arquivos no HD e carreg-los na
memria RAM. No processo so usadas chamadas de vrios mdulos diferentes, como o
responsvel pelo acesso porta IDE onde o HD est conectado, o responsvel pelo sistema de
arquivos em que o HD est formatado e o mdulo responsvel pelo suporte ao controlador de
memria da placa-me.
No caso de programas muito grandes, a memria RAM pode ficar lotada, obrigando o
Kernel a usar o subsistema de memria virtual para gravar as informaes excedentes na partio
swap.
S depois de tudo isso que o "cat" pode ser executado e mostrar o contedo do arquivo na
tela (usando mais um comando do Kernel, que aciona a placa de vdeo). Graas ao trabalho do
Kernel, voc no precisa se preocupar com nada disso, apenas com os programas que precisa
executar.
Depois vem o X, o servidor grfico, responsvel por acessar a placa de vdeo e mostrar
imagens no monitor. Ele serve como base para os aplicativos grficos, que podem ser divididos em
duas categorias. Primeiro temos os gerenciadores, como o KDE e o Gnome, que so responsveis
por gerenciar as janelas, mostrar a barra de tarefas e assim por diante. Eles servem como uma base
para que voc possa abrir e controlar os demais aplicativos grficos.
13
FERRAMENTAS TCNICAS
Mesmo dentro do modo grfico, voc continua tendo acesso aos recursos do modo texto.
Programas como o Xterm e o Konsole so usados para rodar uma instncia do bash dentro do modo
grfico, permitindo executar todos os aplicativos de linha de comando e scripts. Ou seja, o X roda
com uma perna no Kernel e outra no interpretador de comandos.
Mdulos
Como vimos, uma das tarefas mais importantes do Kernel oferecer suporte ao hardware da
mquina.
No comeo, a questo era mais simples, pois no existiam perifricos USB, softmodems e
muito menos placas wireless. O Kernel oferecia suporte apenas aos dispositivos mais essenciais,
como HD, placa de vdeo e drive de disquetes.
Com o tempo, foi sendo adicionado suporte a muitos outros dispositivos: placas de som,
placas de rede, controladoras SCSI, e assim por diante. O fato do Kernel ser monoltico comeou a
atrapalhar bastante.
Voc podia escolher os componentes a ativar na hora de compilar o Kernel. Se voc
habilitasse tudo, no teria problemas com nenhum dispositivo suportado, tudo iria funcionar
facilmente. Mas, por outro lado, voc teria um Kernel gigantesco, que rodaria muito devagar no seu
486 com 8 MB de RAM.
Se, por outro lado, voc compilasse um Kernel enxuto e esquecesse de habilitar o suporte a
algum recurso necessrio, teria que recompilar tudo de novo para ativ-lo.
Este problema foi resolvido durante o desenvolvimento do Kernel 2.0, atravs do suporte a
mdulos. Os mdulos so peas independentes que podem ser ativadas ou desativadas com o
sistema em uso. Do Kernel 2.2 em diante, quase tudo pode ser compilado como mdulo.
14
FERRAMENTAS TCNICAS
Isso tornou as coisas muito mais prticas, pois passou ser possvel compilar um Kernel com
suporte a quase tudo, com todas as partes no essenciais compiladas como mdulos. O Kernel em si
um executvel pequeno, que consome pouca RAM e roda rpido, enquanto os mdulos ficam
guardados numa pasta do HD at que voc precise deles.
Voc podia carregar o mdulo para a SoundBlaster 16 (do 486 que voc usava na poca ;-) por
exemplo, com um:
# modprobe sb
E descarreg-lo com um:
# modprobe -r sb
Esta idia dos mdulos deu to certo que usada at hoje e num nvel cada vez mais
extremo. Para voc ter uma idia, no Kernel 2.6 at mesmo o suporte a teclado pode ser desativado
ou compilado como mdulo, uma modificao que parece besteira num PC, mas que til para
quem desenvolve verses para roteadores e outros dispositivos que realmente no possuem teclado.
As distribuies passaram ento a vir com verses do Kernel cada vez mais completas,
incluindo em muitos casos um grande nmero de patches para adicionar suporte a ainda mais
dispositivos, naturalmente quase tudo compilado como mdulos.
Nas distribuies atuais, o hardware da mquina detectado durante a instalao e o sistema
configurado para carregar os mdulos necessrios durante o boot. Isto pode ser feito de duas
formas:
1- Os mdulos para ativar a placa de som, rede, modem e qualquer outro dispositivo "no
essencial" so especificados no arquivo "/etc/modules". Programas de deteco, como o hotplug e
o udev ficam de olho nas mensagens do Kernel e carregam mdulos adicionais conforme novos
dispositivos (uma cmera digital USB, em modo de transferncia, por exemplo) so detectados.
Sua placa de som seria ativada durante o boot atravs de um mdulo especificado no
"/etc/modules", assim como o suporte genrico a dispositivos USB. Mas, o seu pendrive, que voc
pluga e despluga toda hora ativado e desativado dinamicamente atravs da deteco feita pelo
hotplug ou udev.
A deteco de novos perifricos (principalmente ao usar o Kernel 2.6) muito simplificada
graas ao prprio Kernel, que gera mensagens sempre que um novo dispositivo encontrado. Voc
pode acompanhar este log rodando o comando "dmesg". Por exemplo, ao plugar um pendrive USB,
voc ver algo como:
usb 2-2: new high speed USB device using address
scsi1 : SCSI emulation for USB Mass Storage devices
endor: LG CNS Model: !ev: 1"##
$%pe: &irect-'ccess '(SI SCSI revision: #2
SCSI device sda: 2)*+,- ,12-b%te hdwr sectors .128 MB/
sda: 0rite 1rotect is off
sda: Mode Sense: #2 ## ## ##
sda: assuming drive cache: write through
15
FERRAMENTAS TCNICAS
sda: sda1
'ttached scsi removable dis3 sda at scsi14 channel #4 id #4 lun #
'ttached scsi generic sg# at scsi14 channel #4 id #4 lun #4 t%pe #
USB Mass Storage device found at ,
Veja que aqui esto quase todas as informaes referentes a ele. O fabricante (LG), o
dispositivo pelo qual ele ser acessado pelo sistema (sda), a capacidade (128 MB) e at as parties
existentes (neste caso uma nica partio, nomeada "sda1").
Um segundo arquivo, o "/etc/modules.conf" (ou "/etc/modprobe.conf", dependendo da
distribuio usada), especifica opes e parmetros para os mdulos, quando necessrio. Este
arquivo normalmente gerado automaticamente pelas ferramentas de deteco de hardware ou ao
rodar o comando "update-modules", mas pode tambm ser editado manualmente, caso necessrio.
Outra pea importante o arquivo "/lib/modules/2.6.x/modules.dep", que guarda uma tabela
com as dependncias dos mdulos, ou seja, de quais outros mdulos cada um precisa para ser
carregado corretamente. Este ltimo arquivo gerado automaticamente ao rodar o comando
"depmod -a". Em geral, este comando executado de forma automtica durante o boot, sempre que
necessrio. O "2.6.x" neste caso corresponde verso do Kernel usado na sua mquina.
2- Se o suporte a algo essencial nas etapas iniciais do boot no est includo no Kernel,
criado um initrd, uma imagem com os mdulos necessrios, que, diferentemente dos mdulos
especificados no "/etc/modules", so carregados logo no incio do boot. O initrd guardado na pasta
/boot, junto com o executvel principal do Kernel: o arquivo "vmlinuz".
Imagine, por exemplo, que voc est usando uma distribuio onde o suporte ao sistema de
arquivos ReiserFS foi compilado como mdulo, mas quer instalar o sistema justamente numa
partio ReiserFS.
Isso gera um problema do tipo o ovo e a galinha, j que o sistema precisa do mdulo para
acessar a partio, mas precisa de acesso partio para poder ler o mdulo.
Para evitar este tipo de problema, o prprio instalador da distribuio, ao perceber que voc
formatou a partio raiz em ReiserFS, vai se encarregar de gerar o arquivo initrd que, embora no
seja obrigatrio ( possvel compilar tudo diretamente no Kernel), bastante usado.
16
FERRAMENTAS TCNICAS
O processo de boot e os arquivos de inicializao
Quando voc liga o micro, o primeiro software que carregado o BIOS da placa-me, que
faz a contagem da memria RAM, uma deteco rpida dos dispositivos instalados e por fim
carrega o sistema operacional principal a partir do HD, CD-ROM, disquete, rede, ou o que quer que
seja. Este procedimento inicial chamado de POST (Power-on self test)
Seria bom se a funo do BIOS se limitasse a isso, mas na verdade ele continua residente,
mesmo depois que o sistema operacional carregado.
Na poca do MS-DOS era bem conhecida a diviso entre a memria real (os primeiros 640
KB da memria RAM) e a memria extendida (do primeiro MB em diante, englobando quase toda
a memria instalada). O MS-DOS rodava em modo real, onde o processador trabalha simulando um
8088 (o processador usado no XT) que era capaz de acessar apenas 640 KB de memria. Mesmo os
processadores modernos conservam este modo de operao, mas os sistemas operacionais atuais
rodam inteiramente em modo protegido, onde so usados todos os recursos da mquina.
O espao entre os primeiros 640 KB, onde termina a memria real, e os 1024 KB, onde
comea a memria extendida, justamente reservado para o BIOS da placa-me.
Ele originalmente gravado de forma compactada num chip de memria flash instalado na
placa-me. Durante o processo de boot ele descompactado e copiado para este espao reservado
(chamado de shadow RAM), onde fica disponvel.
O BIOS oferece funes prontas para acessar o HD, acionar recursos de gerenciamento de
energia e muitas outras coisas. Mas, os sistemas operacionais quase no utilizam estas funes, pois
existem muitas diferenas na forma como BIOS de diferentes placas-me trabalham e, em muitos
casos, as funes simplesmente no funcionam ou produzem erros inesperados.
Os fabricantes de placas-me disponibilizam upgrades de BIOS freqentemente para corrigir
estes problemas, mas a maior parte dos usurios nem chega a procur-los, fazendo com que exista
um enorme contingente de placas bugadas por a, com problemas no ACPI, DMA e outros recursos
bsicos.
Existe at mesmo um projeto para substituir o BIOS da placa-me por uma verso compacta
do Kernel do Linux, que executa as mesmas funes, mas de uma forma mais confivel e flexvel.
Voc pode obter mais informaes sobre ele no: http://www.linuxbios.org/.
Outra tecnologia (j em uso) que substitui o BIOS o EFI (Extensible Firmware Interface),
usada em placas-me para o Intel Itanium e tambm nos Macs com processadores Intel. O EFI
utiliza uma arquitetura modular, bem mais limpa e eficiente, que permite o uso de mdulos
personalizados para os dispositivos de cada-placa me, mantendo (opcionalmente) compatibilidade
com o sistema antigo.
No caso dos Macs, esta camada de compatibilidade desativada (de forma a dificultar a vida
de quem pretende instalar Linux ou windows em dual boot com o MacOS) mas, no caso de placas
17
FERRAMENTAS TCNICAS
avulsas, o EFI viria com o modo de compatibilidade ativado, permitindo rodar qualquer sistema.
De qualquer forma, depois de fazer seu trabalho, o BIOS carrega o sistema operacional,
lendo o primeiro setor do disco rgido o "Master Boot Record" (MBR), tambm conhecido como
trilha zero ou trilha MBR.
No MBR vai o gerenciador de boot. Os dois mais usados no Linux so o lilo e o grub.
Na verdade, no MBR mesmo vai apenas um bootstrap, um pequeno software que instrui o
BIOS a carregar o executvel do lilo ou grub em um ponto especfico do HD. O MBR propriamente
dito ocupa um nico setor do HD (apenas 512 bytes), de modo que no possvel armazenar muita
coisa diretamente nele.
O gerenciador de boot utiliza os primeiros 446 bytes do MBR. Os 66 bytes restantes so
usados para armazenar a tabela de parties, que guarda informaes sobre onde cada partio
comea e termina. Alguns vrus, alm de acidentes em geral, podem danificar os dados
armazenados na tabela de partio, fazendo com que parea que o HD foi formatado. Mas, na
maioria dos casos, os dados continuam l.
Mais adiante, veremos como fazer um backup da tabela de parties e restaur-la quando
necessrio.
Voltando ao tema inicial, o gerenciador de boot tem a funo de carregar o Kernel e, a partir
dele, todo o restante do sistema. O lilo e o grub podem ser configurados ainda para carregar o
Windows ou outros sistemas instalados em dual boot. Muitas distribuies configuram isso
automaticamente durante a instalao.
Inicialmente, o Kernel um arquivo compactado e somente-leitura, o arquivo
"/boot/vmlinuz". Ele descompactado em uma rea reservada da memria RAM e roda a partir
da, aproveitando o fato de que a memria RAM muito mais rpida que o HD.
Este executvel principal do Kernel nunca alterado durante o uso normal do sistema, ele
muda apenas quando voc recompila o Kernel manualmente ou instala uma nova verso.
Se voc prestou ateno quando citei a necessidade de usar um initrd quando a partio raiz
do sistema est formatada num sistema de arquivos que no est compilado diretamente no Kernel,
deve ter notado uma contradio aqui. Afinal o que est sendo feito at agora.
Nem o BIOS, nem o lilo possuem suporte a ReiserFS e o Kernel precisa ser carregado antes
que ele tenha a chance de carregar o initrd. E, alm do mais, para carregar o initrd, o prprio Kernel
precisaria ler o arquivo dentro da partio.
Isto tudo funciona porque tanto o BIOS quanto o lilo no procuram entender o sistema de
arquivos em que o HD est formatado. Pode ser EXT2, ReiserFS, XFS, ou o que seja: para eles no
faz diferena. Eles simplesmente lem os uns e zeros gravados numa rea especfica do HD e assim
carregam o Kernel e o initrd. Eles no fazem alteraes nos dados gravados, por isso este "acesso
18
FERRAMENTAS TCNICAS
direto" no traz possibilidade de danos s estruturas do sistema de arquivos.
Depois de carregado, a primeira coisa que o Kernel faz montar a partio raiz, onde o
sistema est instalado, inicialmente como somente-leitura. Neste estgio ele carrega o init, o
software que inicia o boot normal do sistema, lendo os scripts de inicializao e carregando os
mdulos e softwares especificados neles.
O arquivo de configurao do init o "/etc/inittab". Ele geralmente o primeiro arquivo de
configurao lido durante o boot. A principal tarefa dele carregar os demais scripts de
inicializao, usados para carregar os demais componentes do sistema e fazer todas as operaes de
checagem, necessrias durante o boot.
No /etc/inittab do Debian por exemplo, voc ver a linha:
5 Boot-time s%stem configuration6initiali7ation script"
si::ssini!:"e!c"ini!#d"rcS
Esta linha executa o script "/etc/init.d/rcS". Se voc examin-lo tambm, vai encontrar o seguinte:
for i in 6etc6rcS"d6S889
do
"""
:i start
""""
done
Os "..." indicam partes dos script que removi para deixar apenas as partes que interessam
aqui. Estas linhas so um shell script, que vai executar os scripts dentro da pasta "/etc/rcS.d/". Esta
pasta contm scripts que devem ser executados sempre, a cada boot, e so responsveis por etapas
fundamentais do boot.
Alguns exemplos de scripts e programas executados nesta etapa so:
keymap.sh: Carrega o layout do teclado que ser usado no modo texto. Voc no gostaria de
encontrar seu teclado com as teclas trocadas para o Russo quando precisar arrumar qualquer
coisa no modo texto, no ? ;-), O KDE possui um configurador prprio, o kxkb, que
configurado dentro do Painel de Controle. O layout usado pelo kxkb subscreve o
configurado pelo keymap.sh dentro do KDE.
checkroot.sh: Este script roda o fsck, reiserfsck ou outro programa adequado para verificar a
estrutura da partio raiz (a partio onde o sistema est instalado), corrigindo erros
causados por desligamentos incorretos do sistema. Este processo anlogo ao scandisk do
Windows. S depois da verificao que a partio raiz passa a ser acessada em modo
leitura e escrita.
modutils: Este o script que l os arquivos "/etc/modules" e "/etc/modules.conf", ativando
a placa de som, rede e todos os outros dispositivos de hardware "no essenciais", para os
quais o suporte no foi habilitado diretamente no Kernel. Atualmente, a maioria das
distribuies inclui alguma ferramenta de deteco de hardware, que executada a cada
boot, fazendo com que o arquivo "/etc/modules" sirva apenas para especificar manualmente
19
FERRAMENTAS TCNICAS
mdulos que ativem perifricos que no estejam sendo detectados automaticamente.
checkfs.sh: Este script parecido com o checkroot.sh. Ele se destina a checar as demais
parties do HD.
mountall.sh: aqui que lido o arquivo "/etc/fstab" e as demais parties, unidades de
rede, e tudo mais que estiver especificado nele ativado. Se voc estiver usando uma
partio home separada ou um compartilhamento de rede via NFS para guardar arquivos,
por exemplo, a partir deste ponto que eles ficaro disponveis.
networking: Ativa a rede, carregando a configurao de IP, DNS, gateway, etc., ou obtendo
a configurao via DHCP. A configurao da rede geralmente armazenada dentro da pasta
"/etc/sysconfig/network-scripts/" ou no arquivo "/etc/network/interfaces", variando de acordo
com a distribuio usada.
De acordo com a distribuio usada, so carregados neste ponto outros servios, para ativar
suporte a placas PCMCIA, placas ISA, ou outros tipos de hardware, ativar o suporte a
compartilhamentos de rede e, assim por diante. possvel executar praticamente qualquer tipo de
comando ou programa nesta etapa, justamente por isso os passos executados durante o boot mudam
de distribuio para distribuio, de acordo com o que os desenvolvedores consideram mais
adequado. A idia aqui apenas dar uma base, mostrando alguns passos essenciais que so sempre
executados.
Depois desta rodada inicial, so executados os scripts correspondentes ao runlevel padro do
sistema, que configurado no "/etc/inittab", na linha:
# The default runlevel.
id:5:initdefault:
O nmero (5 no exemplo) indica o runlevel que ser usado, que pode ser um nmero de 1 a
5. Cada runlevel corresponde a uma pasta, com um conjunto diferente de scripts de
inicializao. uma forma de ter vrios "profiles", para uso do sistema em diferentes situaes.
A configurao mais comum a seguinte:
Runlevel 1: Single user. um modo de recuperao onde nem o modo grfico, nem o
suporte rede, nem qualquer outro servio "no essencial" carregado, de forma a
minimizar a possibilidade de problemas. A idia que o sistema "d boot" para que voc
possa corrigir o que est errado. Atualmente, uma forma mais prtica para corrigir
problemas dar boot com uma distribuio em live-CD (como o Kurumin), onde voc tem
acesso internet e vrios programas e, a partir dele, montar a partio onde o sistema est
instalado e corrigir o problema.
Runlevel 3: Boot em modo texto. Neste modo todos os servios so carregados, com
exceo do gerenciador de boot (KDM ou GDM), que responsvel por carregar o modo
grfico. Este modo muito usado em servidores.
Runlevel 5: o modo padro na maioria das distribuies, onde voc tem o sistema
20
FERRAMENTAS TCNICAS
"completo", com modo grfico e todos os demais servios. Uma exceo importante o
Slackware, onde o modo grfico carregado no runlevel 4.
Usando o runlevel 5, so carregados os scripts dentro da pasta "/etc/rc5.d/", enquanto que,
usando o runlevel 3, so carregados os scripts dentro da pasta "/etc/rc3.d/". Nada impede que voc
modifique a organizao dos arquivos manualmente, de forma a fazer o X carregar tambm no
runlevel 3, ou qualquer outra coisa que quiser. So apenas pastas com scripts e links simblicos
dentro, nenhuma caixa preta.
Ativando e desativando servios
Nas distribuies que seguem o padro do Debian, os executveis que iniciam os servios de
sistema ficam todos dentro da pasta "/etc/init.d/". Para parar, iniciar ou reiniciar o servio ssh, por
exemplo, use os comandos:
# "e!c"ini!#d"ssh s!ar!
# "e!c"ini!#d"ssh s!op
# "e!c"ini!#d"ssh res!ar!
No Kurumin, Mandriva e algumas outras distribuies, existe o comando service, que
facilita um pouco as coisas, permitindo que, ao invs de ter de digitar o caminho completo, voc
possa controlar os servios atravs dos comandos:
# service ssh s!ar!
# service ssh s!op
# service ssh res!ar!
Os scripts que esto na pasta "/etc/init.d/" servem para "chamar" os executveis dos
servidores. Eles apenas fazem as verificaes necessrias e em seguida inicializam ou encerram os
executveis propriamente ditos, que em geral esto na pasta "/usr/bin/" ou "/usr/sbin/".
A pasta "/etc/init.d/" contm scripts para quase todos os servios que esto instalados no
sistema. Quando voc instala o Samba pelo apt-get, por exemplo, criado o script
"/etc/init.d/samba", mesmo que ele no exista anteriormente.
21
FERRAMENTAS TCNICAS
O que determina se o Samba ser executado ou no durante o boot no o script na pasta
"/etc/init.d/", mas sim um link simblico criado dentro de uma das pastas de inicializao.
Por padro, so executados primeiro os links que esto dentro da pasta "/etc/rcS.d/" e, em
seguida, o que estiver dentro da pasta "/etc/rc5.d/" (caso o sistema esteja configurado para
inicializar em runlevel 5, padro na maioria das distribuies) ou na pasta "/etc/rc3.d/" (runlevel 3).
22
FERRAMENTAS TCNICAS
Os nmeros antes dos nomes dos servios dentro da pasta "/etc/rc5.d/" determinam a ordem
em que eles sero executados. Voc vai querer que o firewall seja sempre ativado antes do Samba
por exemplo.
O "S" (start) indica que o servio ser inicializado no boot. A partir da, o sistema vai
inicializando um por vez, comeando com os servios com nmero mais baixo. Caso dois estejam
com o mesmo nmero, eles so executados em ordem alfabtica.
Para que um determinado servio pare de ser inicializado automaticamente no boot, basta
deletar a entrada dentro da pasta, como em:
# rm -$ "e!c"rc%#d"S2&samba
Para que o servio volte a ser inicializado voc deve criar novamente o link, apontando para
o script na pasta /etc/init.d, como em:
# cd "e!c"rc%#d"
# ln -s ##"ini!#d"samba S2&samba
ou:
# ln -s ../init.d/ssh S21ssh
Esta a forma "correta" de criar os links: acessando primeiro a pasta onde eles so criados e
criando os links com as localizaes relativas. Se estamos na pasta "/etc/rc5.d" e criamos o link
apontando para "../init.d/samba", significa que o sistema vai subir um nvel de diretrio (vai para o /
etc) e em seguida acessa a pasta "init.d/".
Nada impede que voc crie o link diretamente, como em:
# ln -s "e!c"ini!#d"ssh "e!c"rc%#d"S21ssh
Ele vai funcionar da mesma forma, mas ferramentas de configurao automtica, como o
"update-rc.d" (do Debian), vo reclamar do "erro" ao atualizar ou remover o link. Este , na
verdade, um daqueles casos em que precisamos contornar manualmente a falta de recursos da
ferramenta.
Existe um utilitrio de modo texto, do Debian, que facilita esta tarefa, o rcconf, que pode ser
instalado via apt-get. Chamando-o com a opo "--now", os servios marcados so inicializados
imediatamente, caso contrrio ele apenas cria os links, de forma que eles fiquem ativos a partir do
prximo boot.
No Fedora, Mandriva e outras distribuies derivadas do Red Hat, voc pode ativar ou
desativar a inicializao dos servios no boot usando o comando "chkconfig", como em:
# chkcon$i' ssh on
.ativa/
# chkcon$i' ssh o$$
.desativa/
23
FERRAMENTAS TCNICAS
Voc pode tambm usar o utilitrio "ntsysv" ou outro configurador disponvel. O Mandriva,
por exemplo, inclui um painel de administrao de servios dentro do Mandriva Control Center.
Muitas distribuies incluem o "services-admin", outro utilitrio grfico que faz parte do pacote
"gnome-system-tools".
X
Diferentemente do que temos no Windows, onde a interface grfica um componente
essencial do sistema, no Linux o modo grfico uma camada independente. Temos um "servidor
grfico", o famoso X que prov a infra-estrutura necessria. ele que controla o acesso placa de
vdeo, l as teclas digitadas no teclado e os clicks do mouse e oferece todos os recursos necessrios
para os programas criarem janelas e mostrarem contedo na tela.
Se voc chamar o X sozinho, a partir do modo texto (o que pode ser feito com o comando
"X" ou "X :2" caso voc queira abrir uma segunda seo do X), voc ver apenas uma tela cinza,
com um X que representa o cursor do mouse. Ou seja, o X apenas uma base, ele sozinho no faz
muita coisa.
Se voc cham-lo com o comando "xinit" ou "xinit -- :2", voc j abrir junto uma janela de
terminal, que poder ser usada para abrir programas. Porm, ao abrir qualquer programa grfico,
voc perceber que algo est estranho. A janela do programa aberta, mas fica fixa na tela, voc
no tem como minimiz-la, alternar para outra janela, nem nenhuma outra opo:

Isto acontece porque estas tarefas so controladas pelo gerenciador de janelas, que (em quase
todas as distribuies) no carregado com o comando xinit. Existem vrios gerenciadores de
janelas, como o KDE, Gnome, Window Maker, Fluxbox, IceWM e assim por diante. A idia
que voc possa escolher qual lhe agrada mais.
Chamando o X atravs do comando "startx", ou configurando o sistema para carregar o X
automaticamente durante a inicializao, finalmente carregamos o conjunto completo, com o X e
algum gerenciador de janelas rodando sobre ele.
O Xfree utiliza uma arquitetura cliente-servidor, onde o X em si atua como o servidor e os
programas como clientes, que recebem dele os clicks do mouse e as teclas digitadas no teclado e
enviam de volta as janelas a serem mostradas na tela.
A grande vantagem deste sistema que alm de rodar programas localmente possvel rodar
programas instalados em outras mquinas da rede. Existem vrias formas de fazer isto. Voc pode,
por exemplo, abrir uma janela de terminal dentro do X, conectar-se outra mquina, via SSH e
comear a chamar os programas desejados. Para isso, use o comando "ssh -X IP_da_maquina",
como em:
5 ssh -( 1)2#1*8#&#1
24
FERRAMENTAS TCNICAS
O parmetro -X ativa a execuo de aplicativos grficos via SSH, que vem desativado por
padro em algumas distribuies. Para usar o ssh, o servio "ssh" deve estar ativo na mquina que
est sendo acessada.
Outra opo usar o XDMCP, o protocolo nativo do X para obter a tela de login da mquina
remota e a partir da carregar um gerenciador de janelas e rodar todos os programas via rede. Neste
caso voc precisaria configurar a outra mquina para aceitar as conexes via XDMCP nos arquivos
kdmrc e Xaccess, que vo dentro da pasta "/etc/kde3/kdm/" ou "/usr/share/config/kdm/kdmrc" (ao
usar o KDM) ou no gdmsetup (ao usar o GDM) e inicializar o X com o comando "X :2 -query
IP_da_maquina" no PC cliente, como em:
# ( :2 -+uer 1)2#1*8#&#1
Muita gente diz que este sistema cliente/servidor do X uma arquitetura ultrapassada, que
responsvel por um desempenho ruim se comparado com outros sistemas operacionais, pois tudo
teria que passar pela rede antes de ir para o monitor.
Esta idia errada, pois, ao rodar localmente, o X se comunica diretamente com a placa de
vdeo, usando todos os recursos de acelerao suportados. Entra a a questo do driver. Se voc
tentar rodar um game 3D qualquer, antes de instalar os drivers 3D (da nVidia) para sua placa
nVidia, por exemplo, ele vai rodar com um desempenho muito baixo, simplesmente porque os
recursos 3D da placa no esto ativados. O driver open-source do X para placas nVidia (o driver
"nv") oferece apenas suporte 2D.
Algumas placas realmente no possuem ainda drivers 3D no X, como, por exemplo, a maior
parte das placas onboard da SiS. Isto tem mais a ver com a boa vontade (ou falta desta) do
fabricante em desenvolver drivers ou pelo menos disponibilizar as especificaes das placas. A SiS
um dos fabricantes mais hostis, o que faz com que suas placas tenham um suporte ruim. Como
sempre questo de pesquisar antes de comprar.
Os comandos de atualizao das janelas e outros recursos usados so transmitidos pelo X
atravs de uma interface de rede local (a famosa interface de loopback), o que num PC moderno tem
um overhead muito pequeno. Os problemas de desempenho em algumas placas esto mais
relacionados qualidade dos drivers.
Gerenciador de login
Antigamente, era muito comum dar boot em modo texto e deixar para abrir o X
manualmente rodando o comando "startx" apenas quando necessrio, pois os PCs eram lentos e o X
demorava para abrir.
Atualmente, o mais comum usar um gerenciador de login, como o KDM (do KDE) ou o
GDM (do Gnome). A funo do gerenciador de login carregar o X, mostrar uma tela de login
grfica e, a partir dela, carregar o KDE, Gnome ou outro gerenciador de janelas escolhido.
Em geral, as distribuies que usam o KDE como interface padro usam o KDM, enquanto
25
FERRAMENTAS TCNICAS
as que usam o Gnome preferem o GDM. Isto tem a ver com o problema das bibliotecas: ao carregar
apenas um programa baseado nas bibliotecas do KDE dentro do Gnome ou vice-versa, so
carregadas todas as bibliotecas correspondentes, no h o que fazer. O programa demora mais para
abrir, e no final, o sistema acaba consumindo muito mais memria.
O gerenciador de login aberto como um servio de sistema, da mesma forma que o Apache
e outros servidores. Voc pode parar o KDM e assim fechar o modo grfico usando o comando
"/etc/init.d/kdm stop" e reabri-lo a partir do modo texto com o comando "/etc/init.d/kdm start".
Como sempre, tudo aberto atravs de um conjunto de scripts. O KDM guarda a base das
configuraes no arquivo "/etc/kde3/kdm/kdmrc" (ou "/usr/share/config/kdm/kdmrc", dependendo
da distribuio) e coloca um conjunto de scripts de inicializao, um para cada interface instalada,
dentro da pasta "/usr/share/apps/kdm/sessions/".
A configurao do kdmrc serve para configurar as opes da tela de login, que vo desde
opes cosmticas, at a opo de aceitar que outras mquinas da rede rodem aplicativos
remotamente via XDMCP. Ao fazer login, executado o script correspondente interface escolhida.
Ao usar o Fluxbox, por exemplo, executado o script "/usr/share/apps/kdm/sessions/fluxbox".
At mesmo o comando startx um script, que geralmente vai na pasta "/usr/X11R6/bin/".
Voc pode alter-lo para carregar o que quiser, mas normalmente ele carrega o gerenciador
especificado no arquivo .xinitrc, dentro da pasta home do usurio.
Xfree x X.org
Atualmente esto em uso no mundo Linux duas verses diferentes do X, o Xfree e o X.org.
O Xfree o projeto mais antigo e tradicional, o grupo que originalmente portou o X para o Linux, e
foi o principal mantenedor do projeto desde ento.
Com o passar do tempo, comearam a surgir crticas, principalmente direcionadas demora
para incluir correes e atualizaes nos drivers existentes. Isto foi se agravando com o tempo, at
que uma deciso dos desenvolvedores em fazer uma pequena mudana na licena em vigor a partir
do Xfree 4.4 foi a gota d'gua para que um consrcio formado por membros de vrias distribuies,
desenvolvedores descontentes com o modo de desenvolvimento antigo, se juntassem para criar um
fork do Xfree, o X.org.
O X.org utilizou como base inicial a ltima verso de desenvolvimento da srie 4.3 do Xfree,
disponibilizada antes da mudana da licena. Desde ento, foram includas muitas atualizaes e
26
FERRAMENTAS TCNICAS
correes, como novos drivers e vrios recursos cosmticos, como, por exemplo, suporte a janelas
transparentes. A pgina oficial a http://x.org.
Inicialmente, as diferenas eram pequenas, mas depois de um certo tempo o X.org passou a
concentrar a maior parte das atualizaes e novos drivers, sendo desenvolvido num ritmo muito
mais rpido. A tendncia que ele substitua completamente o Xfree num futuro prximo.
A partir da verso 7.0, o X.org passou a utilizar uma arquitetura modular, que visa facilitar o
desenvolvimento de novos recursos, que podem ser integrados ao sistema na forma de mdulos, sem
depender do aval prvio dos desenvolvedores do X.org. Esta mudana, que primeira vista parece
simples, tem potencial para intensificar o desenvolvimento de forma radical.
Para quem configura, a principal diferena est nos nomes do arquivo de configurao e
utilitrios. As opes dentro do arquivo continuam as mesmas, incluindo os nomes dos drivers
(radeon, nv, intel, sis, etc.) e possvel inclusive usar um arquivo de configurao de uma
distribuio com o Xfree em outra (instalada na mesma mquina) com o X.org. Aqui vai uma
pequena tabela com algumas diferenas:
- Arquivo de configurao principal:
6etc6;116;<+-Config-) = "e!c"(11",or'#con$
- Utilitrios de configurao:
>f+-cfg = ,or'$'
>f+-config = ,or'con$i'
possvel tambm eliminar estas diferenas criando um conjunto de links apontando para os
nomes trocados. Assim o XF86Config-4 vira um link para o xorg.conf, por exemplo, fazendo com
que usurios desavisados e at utilitrios de configurao consigam encontrar os arquivos sem
muitos problemas.
A rvore genealgica das distribuies
Por causa da filosofia de cdigo aberto e compartilhamento de informaes que existe no
mundo Linux, muito raro que uma nova distribuio seja desenvolvida do zero. Quase sempre as
distribuies surgem como forks ou personalizaes de uma outra distribuio mais antiga e
preservam a maior parte das caractersticas da distribuio original. Isso faz com que distribuies
dentro da mesma linhagem conservem mais semelhanas do que diferenas entre si.
Das primeiras distribuies Linux, que surgiram entre 1991 e 1993, a nica que sobrevive at
hoje o Slackware, que deu origem a algumas outras distribuies conhecidas, como o Vector, Slax
e o College.
O Slax um live-CD, desenvolvido para caber em um mini-CD; o Vector uma distribuio
enxuta, otimizada para micros antigos, enquanto o College uma distribuio desenvolvida com
27
FERRAMENTAS TCNICAS
foco no pblico estudantil, com o objetivo de ser fcil de usar.
Os trs utilizam pacotes .tgz do Slackware e so quase sempre compatveis com os pacotes
do Slackware da verso correspondente. Os utilitrios de configurao do Slackware, como o
netconfig continuam disponveis, junto com vrios novos scripts que facilitam a configurao do
sistema. O Vector, por exemplo, inclui o Vasm, uma ferramenta central de configurao.
O Debian apareceu pouco depois e, ao longo dos anos, acabou dando origem a quase
metade das distribuies atualmente em uso. Algumas, como o Knoppix e o Kurumin, continuam
utilizando os pacotes dos repositrios Debian, apenas acrescentando novos pacotes e ferramentas,
enquanto outras, como o Lycoris e o Ubuntu, utilizam repositrios separados, apenas parcialmente
compatveis com os pacotes originais, mas sempre mantendo o uso do apt-get e a estrutura bsica do
sistema.
Embora o Debian no seja exatamente uma distribuio fcil de usar, o apt-get e o
gigantesco nmero de pacotes disponveis nos repositrios formam uma base muito slida para o
desenvolvimento de personalizaes e novas distribuies.
Um dos principais destaques que, nas verses Testing e Unstable, o desenvolvimento do
sistema contnuo e, mesmo no Stable, possvel atualizar de um release para outro sem reinstalar
nem fazer muitas modificaes no sistema. Voc pode manter o sistema atualizado usando
indefinidamente o comando "apt-get upgrade". Isso permite que os desenvolvedores de distribuies
derivadas deixem o trabalho de atualizao dos pacotes para a equipe do Debian e se concentrem
em adicionar novos recursos e corrigir problemas.
Um dos exemplos de maior sucesso o Knoppix, que chega a ser um marco. Ele se tornou
rapidamente uma das distribuies live-CD mais usadas e deu origem a um universo gigantesco de
novas distribuies, incluindo o Kurumin. Uma coisa interessante que o Knoppix mantm a
estrutura Debian quase intacta, o que fez com que instalar o Knoppix no HD acabasse tornando-se
uma forma alternativa de instalar o Debian. Outro exemplo de sucesso o Ubuntu, uma verso do
Debian destinada a iniciantes e a empresas, que rapidamente se transformou em umas das
distribuies mais usadas no mundo.
As distribuies derivadas do Knoppix muitas vezes vo alm, incluindo novos componentes
que tornam o sistema mais adequado para usos especficos. O Kurumin inclui muitas
personalizaes e scripts destinados a tornar o sistema mais fcil de usar e mais adequado para uso
em desktop. O Kanotix inclui muitos patches no Kernel, com o objetivo de oferecer suporte a mais
hardware e novos recursos, enquanto o Morphix usa uma estrutura modular, que acabou servindo de
base para o desenvolvimento de mais uma safra de distribuies, j bisnetas do Debian.
Mais adiante, teremos um captulo dedicado a explicar o processo de personalizao do
Kurumin e outros live-CDs derivados do Knoppix, permitindo que voc desenvolva suas prprias
solues.
Tanto o Debian quanto o Slackware so distribuies basicamente no comerciais. Mas isso
no impede que distribuies como o Lycoris, Xandros e Linspire sejam desenvolvidas por
empresas tradicionais, com fins lucrativos. Elas procuram se diferenciar das distribuies gratuitas,
28
FERRAMENTAS TCNICAS
investindo em marketing e no desenvolvimento de ferramentas de configurao e facilidades em
geral.
Durante o livro, vou sempre citar muitos comandos que se aplicam ao Debian, lembre-se de
que eles tambm se aplicam outras distribuies derivadas dele, como o Ubuntu, Kurumin e o
Knoppix.
A terceira distribuio "me" o Red Hat, que deu origem ao Mandrake e Conectiva (que
mais tarde se juntaram, formando o atual Mandriva), Fedora e, mais recentemente, a um enorme
conjunto de distribuies menores. As distribuies derivadas do Red Hat no utilizam um
repositrio comum, como no caso do Debian, e nem mesmo um gerenciador de pacotes comum.
Temos o yun do Fedora, o urpmi do Mandriva e tambm o prprio apt-get, portado pela equipe do
Conectiva. Temos ainda vrios repositrios independentes, que complementam os repositrios
oficiais das distribuies.
As distribuies derivadas do Red Hat so, junto com o Debian e derivados, as mais usadas
em servidores. O Fedora, Red Hat e SuSE possuem tambm uma penetrao relativamente grande
nos desktops nas empresas, enquanto o Mandriva tem o maior pblico entre os usurios domsticos.
Embora todas estas distribuies utilizem pacotes rpm, no existe garantia de
compatibilidade entre os pacotes de diferentes distribuies. Os pacotes de uma verso recente do
SuSE na maioria das vezes funcionam tambm numa verso equivalente do Mandriva, por exemplo,
mas isto no uma regra.
O Gentoo inaugurou uma nova linhagem trazendo uma abordagem diferente das demais
distribuies para a questo da instalao de programas e instalao do sistema.
Tradicionalmente, novos programas so instalados atravs de pacotes pr-compilados, que
so basicamente arquivos compactados, contendo os executveis, bibliotecas e arquivos de
configurao usados pelo programa. Estes pacotes so gerenciados pelo apt-get, urpmi, yun ou outro
gerenciador usado pela distribuio. Compilar programas a partir dos fontes quase sempre um
ltimo recurso para instalar programas recentes, que ainda no possuem pacotes disponveis.
O Gentoo utiliza o Portage, um gerenciador de pacotes que segue a idia dos ports do
FreeBSD. Os pacotes no contm binrios, mas sim o cdigo fonte do programa, junto com um
arquivo com parmetros que so usados na compilao. Voc pode ativar as otimizaes que quiser,
mas o processo de compilao e instalao automtico. Voc pode instalar todo o KDE, por
exemplo, com um "emerge kde". O Portage baixa os pacotes com os fontes (de forma similar ao apt-
get), compila e instala.
O ponto positivo desta abordagem que voc pode compilar todo o sistema com otimizaes
para o processador usado na sua mquina. Isso resulta em ganhos de 2 a 5% na maior parte dos
programas, mas pode chegar a 30% em alguns aplicativos especficos.
A parte ruim que compilar programas grandes demora um bocado, mesmo em mquinas
atuais. Instalar um sistema completo, com o X, KDE e OpenOffice demora um dia inteiro num
Athlon 2800+ e pode tomar um final de semana numa mquina um pouco mais antiga. Voc pode
usar o Portage tambm para atualizar todo sistema, usando os comandos "emerge sync && emerge -
29
FERRAMENTAS TCNICAS
u world" de uma forma similar ao "apt-get upgrade" do Debian.
Nas verses atuais do Gentoo, voc pode escolher entre diferentes modos de instalao. No
stage 1 tudo compilado a partir dos fontes, incluindo o Kernel e as bibliotecas bsicas. No stage 2
instalado um sistema base pr-compilado e apenas os aplicativos so compilados. No stage 3 o
sistema inteiro instalado a partir de pacotes pr-compilados, de forma similar a outras
distribuies. A nica exceo fica por conta do Kernel, que sempre precisa ser compilado
localmente, mesmo ao usar o stage 2 ou 3.
O stage 1 naturalmente a instalao mais demorada, mas onde voc pode ativar
otimizaes para todos os componentes do sistema.
J existe um conjunto crescente de distribuies baseadas no Gentoo, como vrios live-CDs,
com games e verses modificadas do sistema, alguns desenvolvidos pela equipe oficial, outros por
colaboradores. Uma das primeiras distribuies a utilizar o Gentoo como base foi o Vidalinux.
Embora seja uma das distribuies mais difceis, cuja instalao envolve mais trabalho
manual, o Gentoo consegue ser popular entre os usurios avanados, o que acabou por criar uma
grande comunidade de colaboradores em torno do projeto. Isto faz com que o Portage oferea um
conjunto muito grande de pacotes, quase tantos quanto no apt-get do Debian, incluindo drivers para
placas nVidia e ATI, entre outros drivers proprietrios, e exista uma grande quantidade de
documentao disponvel, com textos quase sempre atualizados.
Captulo 2: Configurao, ferramentas e dicas
A melhor forma de aprender sempre praticando, certo? Este captulo uma coleo de
dicas sobre os arquivos de configurao, ferramentas e utilitrios teis, que tem o objetivo de
aprofundar seus conhecimentos sobre o sistema. Os tpicos esto organizados por nvel de
dificuldade.
Editando o /etc/fstab
O arquivo "/etc/fstab" permite configurar o sistema para montar parties, CD-ROMs,
disquetes e compartilhamentos de rede durante o boot. Cada linha responsvel por um ponto de
montagem. atravs do "/etc/fstab" que o sistema capaz de acessar o seu CD-ROM, por exemplo.
30
FERRAMENTAS TCNICAS
O fstab um dos arquivos essenciais para o funcionamento do sistema, por isso, antes de edit-lo,
faa sempre uma cpia de segurana:
# cp "e!c"$s!ab "e!c"$s!ab-ori'inal
O fstab um arquivo de texto simples, assim como a maior parte dos arquivos de
configurao do sistema. Voc pode abri-lo usando qualquer editor de textos, mas sempre como
root:
# kedi! "e!c"$s!ab
primeira vista o fstab parece ser mais um daqueles arquivos indecifrveis. Ele possui uma
lgica prpria que parece um pouco complicada no incio, mas relativamente fcil de entender.
Uma vez que voc entenda a sintaxe das opes, voc poder editar o fstab para adicionar um
segundo drive de CD ou fazer com que um compartilhamento de rede seja montado
automaticamente durante o boot, sem depender de configuradores automticos.
Vamos comear dando uma olhada no "/etc/fstab" de uma mquina que est com o Kurumin
instalado na partio hda2:
5 6etc6fstab: files%stem table"
5 files%stem mountpoint t%pe options dump pass
6dev6hda2 6 reiserfs defaults # 1
6dev6hda, none swap sw # #
proc 6proc proc defaults # #
6dev6fd# 6flopp% vfat defaults4user4noauto4showe>ec4umas3=#22 # #
6dev6cdrom 6mnt6cdrom iso*--# defaults4ro4user4noe>ec4noauto # #
5 parti?@es encontradas pelo instalador:
6dev6hda1 6mnt6hda1 reiserfs noauto4users4e>ec # #
6dev6hda2 6mnt6hda2 reiserfs noauto4users4e>ec # #
6dev6hda2 6mnt6hda2 reiserfs noauto4users4e>ec # #
6dev6hda- 6mnt6hda- reiserfs noauto4users4e>ec # #
5 Monta a parti?Ao 6home4 adicionado pelo instalador do Burumin
6dev6hda2 6home reiserfs notail # 2
5 'tiva o USB
usbdevfs 6proc6bus6usb usbdevfs defaults # #
Este o arquivo gerado automaticamente durante a instalao, por isso ele est um pouco
sujo. Vamos comear entendo o que cada linha significa. Lembre-se de que as linhas comeadas
com # no fazem nada, so apenas comentrios.
"dev"hda2 " reiser$s de$aul!s & 1
Esta linha monta o diretrio raiz do sistema. No exemplo, o Kurumin est instalado na
partio /dev/hda2 que est formatada em ReiserFS. O "/" o ponto de montagem, ou seja, onde
esta partio fica acessvel. A barra indica que esta a partio raiz, onde o sistema est instalado.
Se, por acaso, a partio estivesse formatada em outro sistema de arquivos, em EXT3, por exemplo,
a linha ficaria: "/dev/hda2 / ext3 defaults 0 1".
Os dois nmeros depois do "defaults" so instrues para programas externos.
31
FERRAMENTAS TCNICAS
O primeiro nmero usado pelo programa dump, que examina a partio em busca de
arquivos modificados. Esta informao usada por alguns programas de backup, para decidir quais
arquivos devem ser includos num backup incremental. O nmero 0 desativa e o nmero 1 ativa a
checagem.
O dump s trabalha em parties EXT2 ou EXT3, de forma que ao usar uma partio em
ReiserFS ou XFS voc sempre deve usar o nmero 0.
O segundo nmero (1 no exemplo) uma instruo para o fsck, encarregado de examinar os
arquivos dentro da partio quando o sistema desligado incorretamente. Temos trs opes aqui: o
nmero 0 desativa a checagem a cada boot (torna o boot um pouco mais rpido, mas no
recomendvel), enquanto o nmero 1 faz com que a partio seja checada antes das demais.
Usamos o nmero 1 apenas para a partio raiz, onde o sistema est instalado. Para as
demais parties usamos o nmero 2 que indica que a partio deve ser checada, porm s depois
da partio raiz.
"dev"hda% none s-ap s- & &
Esta segunda linha responsvel por ativar a memria swap, que no meu caso a partio
/dev/hda5. Veja que o ponto de montagem para ela "none", pois a partio swap no montada em
nenhuma pasta, ela serve apenas para uso interno do sistema.
"dev"cdrom "mn!"cdrom iso)**& de$aul!s.user.noau!o & &
Esta linha habilita o drive de CD-ROM. O /dev/cdrom o dispositivo do CD-ROM, na
verdade um link que criado durante a configurao inicial do sistema e aponta para a localizao
correta do CD-ROM. De acordo com a porta em que o CD-ROM estiver instalado, o dispositivo real
do CD-ROM pode ser:
/dev/hdc: Um CD-ROM instalado como master na segunda porta IDE da placa-me.
/dev/hdd: CD-ROM instalado como slave na segunda porta IDE
/dev/sda ou /dev/sr0: Em distribuies que usam o Kernel 2.4, os gravadores de CD IDE so
detectados pelo sistema como se fossem discos SCSI. Dependendo da distribuio eles
podem ser detectados como "/dev/sda" ou "/dev/sr0". Caso voc tenha dois gravadores, o
segundo reconhecido como "/dev/sdb" ou "/dev/sr1". No Kernel 2.6, no mais usada a
emulao SCSI, de forma que os gravadores so acessados diretamente atravs dos
dispositivos "/dev/hdc" ou "/dev/hdd".
/dev/sr0 ou /dev/sr1: Leitores e gravadores de CD USB tambm so detectados como CDs
SCSI. Ao plugar um drive externo ligado porta USB, ele ser detectado como "/dev/sr0"
(ou "/dev/sr1", caso a primeira posio j esteja ocupada). No caso dos leitores e gravadores
USB, no importa se est sendo usado o Kernel 2.4 ou 2.6.
Para que os arquivos do CD-ROM fiquem acessveis, ele precisa ser montado em algum
lugar. A prxima entrada da linha o "/mnt/cdrom", que indica a pasta onde ele fica acessvel. O
32
FERRAMENTAS TCNICAS
iso9660 o sistema de arquivos universalmente usado em CD-ROMs de dados, graas a ele que
no existem problemas para ler o mesmo CD no Linux ou Windows.
Em seguida temos trs opes: defaults,user,noauto. Elas fazem o seguinte:
user: Permite que voc monte e desmonte o CD-ROM mesmo sem estar logado como root.
noauto: faz com que o CD-ROM seja montado apenas quando voc for acess-lo e no
automaticamente durante o boot, como no caso da partio raiz, por exemplo.
Caso voc queira ativar um segundo drive de CD, adicionaria uma linha assim:
"dev"hdd "mn!"cdrom1 iso)**& de$aul!s.user.noau!o & &
Veja que mudaram duas coisas: o dispositivo do CD-ROM (/dev/hdd) e a pasta onde ele fica
acessvel (/mnt/cdrom1). Para acessar o segundo CD-ROM, voc digitaria "mount /mnt/cdrom1"
O KDE oferece um recurso muito interessante que a possibilidade de montar e desmontar
as entradas includas no /etc/fstab atravs de cones no desktop, como os usados para acessar as
parties do HD ao rodar o Kurumin do CD.
Para criar um destes cones, clique com o boto direito sobre a rea de trabalho e v em: "Criar
novo", escolha "Disco rgido ou CD-ROM" e aponte a entrada do fstab referente a ele nas
propriedades:

Para montar e acessar os arquivos, basta clicar sobre o cone e para desmontar, clique com o boto
direito e escolha "desmontar".

A linha seguinte do arquivo serve para montar a partio home, que no exemplo foi colocada
em uma partio separada:
"dev"hda/ "home reiser$s no!ail & 2
Traduzindo para o portugus, a linha diz: "Monte a partio /dev/hda3 no diretrio /home.
Esta partio est formatada em reiserfs e voc deve usar a opo notail".
O notail uma opo do sistema de arquivos ReiserFS, que melhora um pouco a velocidade
de acesso ao trabalhar com arquivos grandes. Cada sistema de arquivos possui algumas opes
extras, que podem ser usadas para melhorar o desempenho ou tolerncia a falhas em determinadas
situaes. O parmetro "noatime", por exemplo, faz com que o sistema no atualize as propriedades
dos arquivos conforme eles ao acessados (altera apenas quando eles so modificados). Ela melhora
absurdamente o desempenho do sistema em algumas reas especficas, onde os mesmos arquivos
so acessados continuamente, como nos servidores de banco de dados. muito comum combinar as
duas opes, como em:
"dev"hda/ "home reiser$s no!ail.noa!ime & 2
Usar uma partio home separada permite que voc possa reinstalar o sistema sem perder
33
FERRAMENTAS TCNICAS
seus arquivos e configuraes, o que especialmente interessante no caso do Kurumin e outras
distribuies atualizadas freqentemente.
Usando um diretrio home separado, as reinstalaes tornam-se mais transparentes. Voc
ainda precisa reinstalar os programas, mas todas as configuraes dos aplicativos so preservadas.
Cada programa armazena suas configuraes dentro de uma pasta oculta dentro do seu
diretrio de usurio, como ".mozilla", ".kde", etc. Mesmo ao reinstalar o sistema, estas pastas so
reconhecidas e as configuraes antigas preservadas. Basta tomar o cuidado de guardar tambm
todos os seus arquivos dentro do diretrio home e voc no perder quase nada ao reinstalar.
Continuando, temos as entradas para outras parties que foram encontradas pelo instalador:
5 parti?@es encontradas pelo instalador:
6dev6hda1 6mnt6hda1 reiserfs noauto4users4e>ec # #
6dev6hda2 6mnt6hda2 reiserfs noauto4users4e>ec # #
6dev6hda2 6mnt6hda2 reiserfs noauto4users4e>ec # #
6dev6hda- 6mnt6hda- reiserfs noauto4users4e>ec # #
Veja que as parties "/dev/hda2" e "/dev/hda3" j esto sendo usadas, por isso as duas
linhas referentes a elas so redundantes e podem ser removidas. As linhas para as outras duas
parties, "/dev/hda1" (uma instalao do Mandriva) e "/dev/hda6" (uma partio de arquivos) esto
com a opo "noauto", como no caso do CD-ROM, que faz com que elas sejam montadas apenas
quando voc clica nos cones do desktop. Se voc preferir que elas sejam montadas
automaticamente durante o boot, basta eliminar esta opo. Neste caso as linhas ficariam assim:
"dev"hda1 "mn!"hda1 reiser$s users.e,ec & &
"dev"hda* "mn!"hda* reiser$s users.e,ec & &
Alm de montar as parties e CD-ROMs locais, o fstab pode ser configurado para montar
tambm compartilhamentos de rede. Voc pode tanto configurar para que os compartilhamentos
fiquem acessveis automaticamente durante o boot (no caso de um servidor que fique sempre
ligado) ou mont-los atravs de cones no desktop, como no caso do CD-ROM.
Para montar um compartilhamento de rede NFS, a linha seria:
1)2#1*8#&#1:"home"ar+uivos "mn!"ar+uivos n$s noau!o.users.e,ec & &
Neste exemplo o "192.168.0.1:/home/arquivos" o IP do servidor, seguido pela pasta
compartilhada e o "/mnt/arquivos" a pasta local onde este compartilhamento ficar acessvel.
Voc pode incluir vrias linhas, caso deseje montar vrios compartilhamentos. Caso o
servidor fique sempre ligado e voc queira que o compartilhamento seja montado automaticamente
durante o boot, retire o "noauto", caso contrrio voc pode acessar o compartilhamento usando o
comando:
# moun! "mn!"ar+uivos
Para montar um compartilhamento de rede Windows ou de um servidor Linux
rodando o Samba, a linha seria:
34
FERRAMENTAS TCNICAS
""1)2#1*8#&#1"!es!e "home"!es!e smb noau!o.user.username0maria.pass-ord0abcde & &
Veja que neste caso a sintaxe j um pouco mais complicada. Em primeiro lugar, a entrada
que fala sobre o compartilhamento usa a sintaxe: "//ip_do_servidor/compartilhamento", por isso
voc usa "//192.168.0.1/teste" e no "192.168.0.1:/teste" como seria num compartilhamento NFS.
Em seguida vem a pasta onde o compartilhamento ficar acessvel, "/home/teste" no
exemplo. No se esquea de criar a pasta, caso no exista.
O smb o nome do protocolo usado para acessar os compartilhamentos Windows da rede.
Outra etapa importante colocar o usurio e senha que ser usado para acessar o compartilhamento,
como em: "user,username=maria,password=abcde". Caso o compartilhamento no use senha
(como os compartilhamentos do Windows 95/98), a linha fica mais simples:
""1)2#1*8#&#1"ar+uivos "home"ar+uivos smb noau!o.user & &
Assim como no caso do NFS, para montar o compartilhamento use o comando:
# moun! "home"ar+uivos
Se preferir que ele seja montado durante o boot, basta retirar o "noauto". Neste caso a linha
no fstab ficaria:
""1)2#1*8#&#1"!es!e "home"!es!e smb user.username0maria.pass-ord0abcde & &
Ao colocar as senhas dos compartilhamentos de rede no "/etc/fstab" necessrio tomar uma
precauo de segurana. Rode o comando:
# chmod *&& "e!c"$s!ab
Isto far com que apenas o root possa ler o arquivo e conseqentemente ver as senhas. O
default na maioria das distribuies 644, o que permite que os outros usurios da mquina possam
ler o arquivo, uma grande brecha de segurana neste caso.
Uma coisa que voc deve ter percebido que o KDE s oferece a opo de criar cones para
montar parties, disquetes e CD-ROMs, mas no para criar cones para montar compartilhamentos
de rede. Mas possvel criar os cones manualmente.
Os cones do KDE, incluindo os do desktop e do iniciar, so arquivos de texto comuns, cujo
nome termina com .desktop. Isto faz com que o KDE os veja como cones, e no simples arquivos
de texto. Naturalmente estes arquivos possuem uma sintaxe especial, mas nada to extico.
Em primeiro lugar, o desktop no KDE corresponde pasta Desktop, dentro do seu diretrio
de usurio, como em "/home/kurumin/Desktop". Para criar um novo cone no desktop basta criar
um arquivo de texto, cujo nome termine com ".desktop":
1 kedi! "home"carlos"2esk!op"compar!ilhamen!o#desk!op
Dentro do novo arquivo, vai o seguinte:
35
FERRAMENTAS TCNICAS
C&es3top Dntr%E
$%pe=<S&evice
&ev=1)2#1*8#1#/3:"ar+uivos
Mount1oint="mn!"n$s
<S$%pe=n$s
!eadFnl%=#
Icon=hddGmount
UnmountIcon=hddGunmount
(ame=1*2"1-+"1"2):6arHuivos
O "192.168.1.34:/mnt/hda6" o endereo do compartilhamento e o "nfs" o protocolo. O "/
mnt/nfs" a pasta onde ele ficar acessvel. O texto que vai na opo "Name" o nome que
aparecer no desktop, voc pode usar qualquer texto. No meu caso simplesmente repeti o endereo
do compartilhamento para facilitar a identificao.
Para um compartilhamento Windows o texto seria:
C&es3top Dntr%E
$%pe=<S&evice
&ev=""1)2#1*8#1#/3"ar+uivos
Mount1oint="mn!"samba
<S$%pe=smb
!eadFnl%=#
Icon=hddGmount
UnmountIcon=hddGunmount
(ame=arHuivos
Salvando o arquivo, o cone j aparecer no desktop e se comportar da mesma forma que o
do CD-ROM. Basta clicar para ver os arquivos ou acionar o "desmontar" para desativar:

Configurando o lilo
O lilo e o grub disputam o posto de gerenciador de boot default entre as distribuies Linux.
O lilo o mais antigo e mais simples de configurar, enquanto o grub o que oferece mais opes.
Mas, ao invs de ficar discutindo qual melhor, vamos aprender logo a configurar e resolver
problemas nos dois :-).
O lilo utiliza um nico arquivo de configurao, o "/etc/lilo.conf". Ao fazer qualquer
alterao neste arquivo preciso chamar (como root) o executvel do lilo, o "/sbin/lilo" ou
36
FERRAMENTAS TCNICAS
simplesmente "lilo" para que ele leia o arquivo e salve as alteraes.
Vamos comear entendendo a funo das linhas de uma configurao tpica. Abra o arquivo
"/etc/lilo.conf" da sua mquina e acompanhe opo a opo.
boot=6dev6hda
Esta quase sempre a primeira linha do arquivo. Ela indica onde o lilo ser instalado.
Indicando um dispositivo, como em "/dev/hda", ele instalado na trilha MBR do HD. Indicando
uma partio, como em "/dev/hda1" ele instalado no primeiro setor da partio, sem reescrever a
MBR.
Ao instalar vrios sistemas no HD, seja Linux e Windows ou vrias distribuies diferentes,
apenas um deles deve ter o lilo gravado na MBR. Este ter a funo de inicializar todos os outros,
cujos gerenciadores foram instalados nas respectivas parties.
Ao verificar esta linha, lembre-se de verificar qual o dispositivo do HD na sua instalao.
Um HD serial ATA, por exemplo, ser detectado como "/dev/sda" e no como "/dev/hda".
Se voc tiver dois HDs, e estiver instalando o sistema numa partio do segundo
("/dev/hdb1", por exemplo), e usar a linha "boot=/dev/hdb", o lilo ser instalado no MBR do
segundo HD, no do primeiro. Durante o boot, o BIOS vai continuar lendo o MBR do primeiro HD,
fazendo com que continue sendo carregado o sistema antigo. Se voc quiser que o sistema instalado
no segundo HD passe a ser o principal, use a linha "boot=/dev/hda", que gravar no MBR do
primeiro HD.
bitmap = 6boot63urumin"bmp
bmp-colors = 2,,4*4I*42,,4
bmp-table = -141,41412
bmp-timer = J242*42,,4*
Estas linhas ativam o uso de uma imagem como pano de fundo da tela de boot, ao invs do
feio menu em texto, ainda usado em algumas distribuies. Veremos mais detalhes sobre este
recurso logo a seguir.
vga=J++
Esta uma das linhas mais importantes do arquivo, que ajusta a resoluo de vdeo em modo
texto (usando frame-buffer). Use "vga=785" para 640x480, "vga=788" para 800x600, "vga=791"
para 1024x768 ou "vga=normal" para desabilitar o frame-buffer e usar o modo texto padro.
Quase todas as placas de vdeo suportam frame-buffer, pois ele utiliza resolues e recursos
previstos pelo padro VESA. Apesar disso, algumas placas, mesmo modelos recentes, suportam
apenas 800x600. Ao tentar usar 1024x768 num destes modelos, o sistema exibe uma mensagem no
incio do boot, avisando que o modo no suportado e o boot continua em texto puro. O "vga=788"
um valor "seguro", que funciona em praticamente todas as placas e monitores.
O lilo pode ser configurado para inicializar vrios sistemas operacionais diferentes. A linha
"prompt" faz com que ele mostre um menu com as opes disponveis na hora do boot. Ela quase
sempre usada por padro. A linha "default=" diz qual o sistema padro, o que fica pr-selecionado
37
FERRAMENTAS TCNICAS
na tela de boot.
prompt
compact
default=Kinu>
timeout=1##
A linha "timeout=" indica o tempo de espera antes de entrar no sistema padro, em dcimos
de segundo. O valor mximo 30000 (3.000 segundos). No use um nmero maior que isto, ou o
lilo acusar o erro e no ser gravado corretamente. Ao usar o nmero "0" ou omitir a opo, o lilo
espera indefinidamente. Se, ao contrrio, voc quiser que ele inicie direto o sistema padro, sem
perguntar, voc tem duas opes: usar a timeout=1 (que faz com ele espere s 0.1 segundo,
imperceptvel), ou remover a linha "prompt".
A linha "compact" otimiza a fase inicial do boot (incluindo o carregamento inicial do
Kernel), fazendo com que a controladora do HD leia vrios setores seqenciais em cada leitura.
Normalmente ela reduz o tempo de boot em cerca de 2 segundos. No nada drstico, mas no
deixa de ser um pequeno ganho.
append = Lnomce Huiet noapicL
A linha "append" contm parmetros que so repassados ao Kernel, de forma a alterar o
comportamento padro do sistema e corrigir problemas de inicializao. Voc pode incluir um
nmero indefinido de opes, separando-as com um espao.
A opo mais relevante e mais usada aqui o "acpi=off", que desabilita o uso do ACPI,
resolvendo problemas de travamento ou bugs diversos em muitas placas. Note que o ACPI um
recurso cada vez mais importante, sobretudo em notebooks, onde usado no apenas para
monitorar o estado das baterias, mas tambm para controlar diversas funes e at mesmo fazer o
desligamento da mquina. Use o apci=off" apenas quando realmente necessrio.
Uma variao o "acpi=ht", que ao invs de desabilitar o ACPI completamente, mantm
ativas as funes necessrias para habilitar o suporte a Hyper Treading nos processadores Pentium
4. til em mquinas baseadas neles.
Outra opo comumente usada para solucionar problemas a "noapci", que desabilita a
realocao dinmica de endereos por parte do BIOS, deixando que o sistema operacional assuma a
funo. Inmeros modelos de placas-me possuem problemas relacionados a isso, que podem
causar desde problemas menores, como a placa de som ou rede no ser detectada pelo sistema, at
travamentos durante o boot. Este problemas so solucionados ao incluir o "noapic".
A opo "quiet" faz com que sejam exibidas menos mensagens na fase inicial do boot,
quando o Kernel inicializado; tem uma funo puramente esttica. A opo "apm=power-off" faz
com que sejam usadas as funes do APM para desligar o micro, ao invs do ACPI. Adicionar esta
opo resolve problemas de desligamento em muitas mquinas. Outra opo til a "reboot=b",
que resolve problemas de travamento ao reiniciar em algumas mquinas. As duas podem ser usadas
simultaneamente caso necessrio.
Todas estas opes, quando usadas, so includas dentro da linha append (separadas por
38
FERRAMENTAS TCNICAS
espao), como em:
append = Lnomce Huiet noapic acpi=off apm=power-off reboot=bL
Em seguida, vem a seo principal, responsvel por inicializar o sistema. Ela contm a
localizao do executvel principal do Kernel e do arquivo initrd, caso seja usado um:
image=6boot6vmlinu7-2"-"1)
label=Kinu>
root=6dev6hda1
read-onl%
initrd=6boot6initrd"g7
A linha "root=" indica a partio onde o sistema est instalado, ou seja, onde o lilo vai
procurar os arquivos especificados. O "Label" o nome do sistema, da forma como voc escreve na
opo "default=". Uma observao importante que o nome pode ter no mximo 14 caracteres e
no deve conter caracteres especiais. O lilo bastante chato com relao a erros dentro do arquivo,
se recusando a fazer a gravao at que o erro seja corrigido.
Esta a seo que duplicada ao instalar um segundo Kernel. Caso voc instalasse o pacote
"kernel-image-2.6.15_i368.deb", por exemplo, que criasse o arquivo "/boot/vmlinuz-2.6.15", voc
adicionaria as linhas:
image=6boot6vmlinu7-2"-"1%
label=3ernel-2"-"1,
root=6dev6hda1
read-onl%
initrd=6boot6initrd"g7
Ao reiniciar o micro, voc passaria a escolher entre os dois kernels na hora do boot. Se
quisesse tornar o 2.6.15 a opo padro, bastaria fazer a alterao na linha "default=".
Ao instalar vrios sistemas na mesma mquina, voc pode adicionar linhas extras referentes
a cada um. Neste caso, fazemos uma coisa chamada "chain load", onde o lilo carrega o gerenciador
de boot do outro sistema (instalado na partio) e deixa que ele faa seu trabalho, carregando o
respectivo sistema. A configurao para outros sistemas bem simples, pois voc s precisa indicar
a partio de instalao e o nome de cada um, como em:
other=6dev6hda2
label=Slac3ware
other=6dev6hda2
label=Mandriva
other=6dev6hda,
label=<edora
other=6dev6hda-
label=FpenSuSD
Para referenciar as outras instalaes deste modo, necessrio que o lilo de cada um esteja
instalado no primeiro setor da partio. No lilo.conf do Slackware, por exemplo, haveria a linha
"boot=/dev/hda2". No caso do Windows, voc no precisa se preocupar, pois ele instala o
gerenciador de boot simultaneamente no MBR e na partio.
39
FERRAMENTAS TCNICAS
Existe uma receita simples para alterar e reinstalar o lilo de outras distribuies instaladas no
HD em caso de problemas. Imagine, por exemplo, que voc instalou o Kurumin e acabou instalando
o lilo no MBR, subscrevendo o lilo do Mandriva, que agora no d mais boot.
Isso pode ser solucionado facilmente, editando o "/etc/lilo.conf" do Mandriva, para que ele
seja reinstalado na partio e adicionando as duas linhas que chamam outros sistemas no lilo do
Kurumin.
Voc pode editar o lilo do Mandriva e regrav-lo rapidamente atravs do prprio Kurumin
(ou outra distribuio instalada), ou dando boot com um CD do Kurumin ou Knoppix.
D boot pelo CD e abra um terminal. Defina a senha de root usando o comando "sudo
passwd" e logue-se como root usando o "su". Monte a partio onde o Mandriva est instalado:
# moun! -! reiser$s "dev"hda1 "mn!"hda1
Agora usamos o comando chroot para "entrar" na partio montada, a fim de editar o
lilo.conf e gravar o lilo. Todos os comandos dados dentro do chroot so na verdade executados no
sistema que est instalado na partio.
preciso Indicar o sistema de arquivos em que a partio est formatada ao montar (como
no exemplo acima), caso contrrio o chroot vai dar um erro de permisso.
# chroo! "dev"hda1
Agora use um editor de texto em modo texto, como o mcedit ou o joe para alterar o arquivo
"/etc/lilo.conf" e chame o executvel do lilo para salvar as alteraes. Depois de terminar, pressione
Ctrl+D para sair do chroot.
# mcedi! "e!c"lilo#con$
# lilo
possvel tambm remover o lilo, usando o comando "lilo -u" ("u" de uninstall). Ao ser
instalado pela primeira vez, o lilo faz um backup do contedo da MBR e ao ser removido este
backup recuperado. Esta opo pode ser til em casos onde voc instala o lilo na MBR (sem
querer) e precisa recuperar o sistema anterior.
Dual-Boot com dois HDs
Em casos onde voc realmente no queira saber do menor risco para seus arquivos de
trabalho ao configurar o dual boot, existe ainda a opo de usar dois HDs.
Instale o HD que abrigar as distribuies Linux como master da primeira IDE e o HD com
o Windows como slave. Deixe a segunda IDE reservada para o CD-ROM ou gravador, o que
garantir um melhor desempenho a partir dos dois sistemas.
Detecte ambos os HDs no Setup e instale as distribuies desejadas no primeiro,
40
FERRAMENTAS TCNICAS
configurando o lilo para inicializar todos os sistemas.
Depois de terminar, adicione as linhas que iniciaro o Windows. Como ele est instalado no
segundo HD, usaremos um pequeno truque que troca a posio dos drivers, fazendo o Windows
pensar que o HD onde est instalado continua instalado como primary master:
other=6dev6hdb1
label=0indows
table=6dev6hdb
map-drive = #>+#
to = #>+1
map-drive = #>+1
to = #>+#
Isso funciona com o Windows NT, 2000 e XP. Basicamente as linhas carregam a tabela de
partio do segundo HD e a partir da do boot a partir do drive C: do Windows. As ltimas quatro
linhas so responsveis por trocar a posio dos drives.
Usando uma imagem de fundo
Como voc pde ver no exemplo, a configurao necessria para que o lilo exiba um menu
de boot grfico ocupa apenas 4 linhas no incio do arquivo. Nem todas as distribuies usam este
recurso por padro (como o Slackware), mas simples ativar manualmente.
Em primeiro lugar, voc precisa de uma imagem de 640x480 com 256 cores (indexada),
salva em .bmp. No Gimp existe a opo de codificar a imagem usando RLE, o que diminui muito o
tamanho, sem quebrar a compatibilidade com o lilo. Voc pode baixar algumas imagens prontas no
http://www.kde-look.org, basta salvar a imagem escolhida dentro da pasta /boot.
A localizao do arquivo com a imagem, dentro da partio do sistema, vai na linha "bitmap
=", como em:
bitmap = 6boot6imagem"bmp
O prximo passo definir as cores e coordenadas do menu com a lista dos sistemas
disponveis e da contagem de tempo.
A configurao das cores a parte mais complicada, pois os cdigos variam de acordo com
a paleta usada na imagem escolhida. Abra a imagem no Gimp e clique em "Dilogos > Mapa de
Cores". Isso mostra as cores usadas e o nmero (ndice da cor) de cada uma. As cores usadas no lilo
so definidas na opo "bmp-colors", onde voc define uma cor para a opo selecionada e outra
para as outras opes do menu. Cada uma das duas escolhas tem trs cores, uma para as letras, outra
para o fundo e uma terceira (opcional) para um efeito de sombra no texto, como em: "bmp-
colors = 2,,4*42,I*42,,42,L . Se no quiser usar a sombra, simplesmente omita o
terceiro valor, como em:
bmp-colors = 2,,4*4I*42,,4
41
FERRAMENTAS TCNICAS
Em seguida vem a parte mais importante, que definir as coordenadas e o tamanho da caixa
de seleo dos sistemas disponveis, que ser exibida sobre a imagem. Os dois primeiros valores
indicam as coordenadas (x e y) e os dois valores seguintes indicam o nmero de colunas
(geralmente apenas uma) e o nmero de linhas, que indica o nmero mximo de entradas que
podero ser usadas:
bmp-table = -141,41412
Finalmente, temos a posio do timer, que mostra o tempo disponvel para escolher antes
que seja inicializada a entrada padro. A configurao do timer tem 5 valores, indicando as
coordenadas x e y e as cores (texto, fundo e sombra). Novamente, o valor da sombra opcional:
bmp-timer = J242*42,,4*
Ao terminar, no se esquea de salvar as alteraes, regravando o Lilo. Aqui est um
exemplo de tela de boot, usando estas configuraes:
Configurando o grub
Muitas distribuies permitem que voc escolha entre usar o lilo ou o grub durante a
instalao. Outras simplesmente usam um dos dois por padro. De uma forma geral, o grub oferece
mais opes que o lilo e inclui um utilitrio, o update-grub que gera um arquivo de configurao
bsico automaticamente. Por outro lado, a sintaxe do arquivo de configurao do grub mais
complexa o que o torna bem mais difcil de editar manualmente que o do lilo. O grub inclui ainda
42
FERRAMENTAS TCNICAS
um prompt de comando, novamente nenhum exemplo de amigabilidade.
De resto, os dois possuem a mesma e essencial funo. Sem o gerenciador de boot o sistema
simplesmente no d boot :-).
O grub usa o arquivo de configurao "/boot/grub/menu.lst". Este arquivo lido a cada
boot, por isso no necessrio reinstalar o grub ao fazer alteraes, como no caso do lilo.
Para entender melhor como o grub funciona, vamos a um exemplo de como instal-lo no
Kurumin, substituindo o lilo que usado por padro. Estes mesmos passos podem ser usados em
outras distribuies derivadas do Debian, que utilizem o lilo.
Em primeiro lugar, voc precisa instalar o pacote do grub via apt-get. Ele no possui
dependncias externas, inclui apenas os executveis principais. Voc pode at mesmo arriscar
compilar a verso mais recente, baixada no site do projeto.
5 ap!-'e! ins!all 'rub
Depois de instalar, crie a pasta "/boot/grub/" e use o "update-grub" para gerar o arquivo
"menu.lst". Basta responder "y" na pergunta e o arquivo gerado automaticamente:
# mkdir "boo!"'rub
# upda!e-'rub
$esting for an e>isting M!UB menu"list file"""
Could not find 6boot6grub6menu"lst file" 0ould %ou li3e 6boot6grub6menu"lst
generated for %ou8 .%6(/ %
Searching for splash image""" none found4 s3ipping"""
<ound 3ernel: 6boot6vmlinu7-2"-"1,
<ound 3ernel: 6boot6memtest+-"bin
Updating 6boot6grub6menu"lst """ done
Agora s falta instalar o grub na MBR usando o comando:
# 'rub-ins!all "dev"hda
Ao gravar o grub, ele naturalmente substitui o lilo ou qualquer outro gerenciador de boot que
esteja sendo usado.
Se voc mudar de idia mais tarde e quiser regravar o lilo, subscrevendo o grub, basta
cham-lo novamente:
# lilo
Assim como no caso do lilo, o arquivo de configurao do grub inclui uma seo separada
para cada sistema que aparece no menu de boot. O update-grub no muito eficiente em detectar
outros sistemas instalados, por isso, depois de gerar o arquivo voc ainda precisar adicionar as
linhas referentes a eles no final do arquivo "/boot/grub/menu.lst".
Para que o grub inicialize uma cpia do Windows, instalada na primeira partio, /dev/hda1,
43
FERRAMENTAS TCNICAS
adicione as linhas:
title 0indows
rootnoverif% .hd#4#/
chainloader N1
Elas equivalem opo "other=/dev/hda1" que seria usada no arquivo do lilo. A linha "title"
contm apenas a legenda que mostrada no menu de boot. O que interessa mesmo a linha
rootnoverify (hd0,0), que indica o HD e a partio onde o outro sistema est instalado. O primeiro
nmero indica o HD e o segundo a partio dentro deste. Na nomenclatura adotada pelo grub
temos:
6dev6hda = #
6dev6hdb = 1
6dev6hdc = 2
6dev6hdd = 2
As parties dentro de cada HD so tambm nomeadas a partir do zero:
6dev6hda1 = #4#
6dev6hda2 = #41
6dev6hda2 = #42
6dev6hda) = #42
6dev6hda, = #4)
6dev6hda- = #4,
etc"""
Se voc quisesse que o grub iniciasse tambm uma instalao do Mandriva no /dev/hda3,
cujo lilo (ou grub) foi instalado na partio, adicionaria as linhas:
title Mandriva
rootnoverif% .hd#42/
chainloader N1
A linha "chainloader +1" especifica que o grub vai apenas chamar o gerenciador de boot
instalado na partio e deixar que ele carregue o outro sistema, assim como fizemos ao editar o
arquivo do lilo.
No caso de outras distribuies Linux, instaladas no mesmo HD, voc pode usar o grub para
carregar diretamente o outro sistema, sem precisar passar pelo outro gerenciador de boot. Neste caso
voc usaria as linhas:
title Mandriva
root .hd#42/
3ernel 6boot6vmlinu7-2"-"+ root=6dev6hda2 ro
savedefault
boot
Veja que neste caso voc precisa especificar a localizao do executvel do Kernel dentro da
partio. Voc pode especificar tambm opes para o Kernel e usar um arquivo initrd, se
necessrio, como neste segundo exemplo:
title Mandriva
root .hd#42/
3ernel 6boot6vmlinu7-2"-"+ root=6dev6hda2 ro vga=J*1 acpi=off splash=verbose
initrd 6boot6initrd"g7
44
FERRAMENTAS TCNICAS
savedefault
boot
Assim como no caso do lilo, voc pode usar um CD do Kurumin ou Knoppix para reinstalar
o grub, caso ele seja subscrito por uma instalao do Windows ou outra distribuio Linux.
Para isso, depois de dar boot pelo CD, voc s precisa montar a partio onde o sistema est
instalado, como em:
5 moun! -! reiser$s "dev"hda2 "mn!"hda2
E usar o chroot para obter o prompt de comando do sistema que est recuperando:
5 chroo! "mn!"hda2
No prompt, voc precisa editar o arquivo "/boot/grub/menu.lst", ou ger-lo novamente usando o
comando "update-grub" e reinstalar o grub, usando o comando:
# 'rub-ins!all "dev"hda
Voc pode tambm editar as opes bsicas do grub usando o grubconf, um utilitrio
grfico, disponvel em vrias distribuies e tambm via apt-get:

Configurando o vdeo: /etc/X11/xorg.conf
O suporte a vdeo no Linux provido pelo X, que j vem com drivers para as placas
suportadas. Alm dos drivers open-source includos no X voc pode instalar os drivers binrios
distribudos pela nVidia e ATI.
Como vimos no primeiro captulo, existem duas verses do X em uso: o Xfree, o mais antigo
e tradicional e o X.org, a verso mais usada atualmente.
Antigamente, at a verso 3.x, o Xfree possua vrias verses separadas, com drivers para
diferentes chipsets de vdeo. Isso complicava a configurao e obrigava as distribuies a manterem
instaladas todas as diferentes verses simultaneamente, o que tambm desperdiava muito espao
em disco.
A partir do Xfree 4.0 e em todas as verses do X.org existe apenas uma nica verso
unificada, com drivers para todas as placas e recursos suportados. Melhor ainda, cada driver d
suporte a todas as placas de um determinado fabricante, o "sis" d suporte a todas as placas da SiS,
o "trident" d suporte a todas as placas da Trident e assim por diante. Temos ainda dois drivers
genricos, o "vesa" e o "fbdev", que servem como um mnimo mltiplo comum, uma opo para
fazer funcionar placas novas (ou muito antigas), que no sejam suportadas pelos drivers titulares.
Outro detalhe interessante que toda a configurao do vdeo, incluindo o mouse e o
45
FERRAMENTAS TCNICAS
suporte a 3D, feita atravs de um nico arquivo de configurao, o "/etc/X11/XF86Config-4"
(nas distribuies que usam o Xfree) ou "/etc/X11/xorg.conf" (nas que usam o X.org), que
relativamente simples de editar e funciona em todas as distribuies que utilizam o Xfree 4.0 em
diante ou X.org (ou seja, praticamente todas as usadas atualmente). Isto significa que voc pode
pegar o arquivo de configurao gerado pelo Kurumin e usar no Slackware, por exemplo.
Existem vrias ferramentas de configurao que perguntam ou autodetectam a configurao
e geram o arquivo, como o "mkxf86config" (do Knoppix) "kxconfig", "xf86cfg" entre outros.
Mas, neste tpico vamos ver como configurar manualmente o arquivo, adaptando ou corrigindo as
configuraes geradas pelos configuradores.
O arquivo dividido em sees. Basicamente, temos (no necessariamente nesta ordem)
uma seo "Server", com parmetros gerais, a seo "Files" com a localizao das fontes de tela e
bibliotecas, duas sees "InputDevice", uma com a configurao do teclado e outra com a do
mouse, uma seo "Monitor" e outra "Device", com a configurao do monitor e placa de vdeo e
por ltimo a seo "Screen" onde dito qual resoluo e profundidade de cor usar.
A ordem com que estas configuraes aparecem no arquivo pode mudar de distribuio para
distribuio, mas a ordem no importa muito, desde que estejam todas l.
Como em outros arquivos de configurao, voc pode incluir comentrios, usando um "#"
no incio das linhas. Linhas em branco, espaos e tabs tambm so ignorados e podem ser usadas
para melhorar a formatao do arquivo e melhorar a organizao das informaes.
Vamos a uma descrio geral das opes disponveis, usando como exemplo o modelo de
configurao que uso no Kurumin. Abra o arquivo /etc/X11/xorg.conf ou /etc/X11/XF86config-4 da
sua mquina e acompanhe o exemplo; prestando ateno nas diferenas entre o exemplo e o arquivo
da sua mquina e tentando entender a funo de cada seo:
Section LServerKa%outL
Identifier L;"Frg do BuruminL
Screen # LScreen#L # #
Input&evice LBe%board#L LCoreBe%boardL
Input&evice LUSB MouseL LCore1ointerL
DndSection
Nesta seo vai a configurao geral. Ela uma espcie de "ndice" das sees abaixo. O
campo "Identifier" pode conter qualquer texto, apenas uma descrio. O "USB Mouse" indica o
nome da seo que ser usada. Abaixo deve existir uma seo com este mesmo nome, contendo a
configurao do mouse propriamente dita. Esta organizao permite que voc (ou o utilitrio de
configurao usado) adicione vrias configuraes diferentes, onde voc pode trocar rapidamente
entre elas modificando esta linha.
Nas distribuies que usam o Kernel 2.6, possvel usar a mesma configurao para mouses
PS/2, mouses USB e tambm mouses touchpad (notebooks), pois todos utilizam um driver comum.
possvel at mesmo usar dois mouses simultaneamente (o touchpad do notebook e um mouse
USB externo, por exemplo), sem precisar alterar a configurao. Apenas os antigos mouses seriais
ainda precisam de uma configurao prpria.
46
FERRAMENTAS TCNICAS
O Kurumin usa um arquivo de configurao que vem com vrias configuraes de mouse
prontas (as opes disponveis so: "USB Mouse", "PS/2 Mouse" e "Serial Mouse"), mas apenas a
informada nesta primeira seo usada. Como disse, ao usar um mouse PS/2 ou USB, qualquer
uma das duas entradas funcionar. Mas, caso voc tenha ou pretenda usar um mouse serial, altere a
configurao para:
Input&evice LSerial MouseL LCore1ointerL
Se seu micro tiver mais de um mouse conectado simultaneamente, voc pode duplicar a
configurao do mouse, como abaixo. Isso faz com que o X tente ativar ambos os mouses na
inicializao, ativando apenas os que estiverem realmente presentes:
Section LServerKa%outL
Identifier L;"Frg do BuruminL
Screen # LScreen#L # #
Input&evice LBe%board#L LCoreBe%boardL
Input&evice LUSB MouseL LCore1ointerL
Input&evice LSerial MouseL LCore1ointerL
DndSection
Na seo "ServerFlags" vo opes gerais. aqui que colocamos, por exemplo, a opo que
inicializa o Xinerama, que d suporte a uma segunda placa de vdeo e monitor. Neste exemplo, est
sendo usada apenas a opo "AllowMouseOpenFail" "true" que permite que o modo grfico abra
mesmo que o mouse esteja desconectado.
Section LServer<lagsL
Fption L'llowMouseFpen<ailL LtrueL
DndSection
Seria estpido parar toda a abertura do modo grfico e voltar para o modo texto porque o
mouse no foi detectado, pois voc ainda pode usar o mouse virtual do KDE como uma soluo
temporria at que consiga solucionar o problema. Para ativar o mouse virtual, pressione a tecla
Shift junto com a tecla NumLock do teclado numrico. A partir da as teclas 1, 2, 3, 4, 6, 7, 8 e 9
ficam responsveis pela movimentao do mouse, enquanto a tecla 5 simula o clique do boto
esquerdo (pressionando 5 duas vezes voc simula um duplo clique). Para arrastar e soltar pressione
a tecla 0 para prender e depois a tecla 5 para soltar.
Para simular os outros botes voc usa as teclas "/" (boto direito), "*" (boto central) e "-"
(para voltar ao boto esquerdo), que funcionam como teclas modificadoras. Para desativar o mouse
virtual, pressione "Shift + NumLock" novamente.
Voltando ao arquivo de configurao, temos a seguir as sees "Files" e "Modules", que
indicam respectivamente as pastas com as fontes TrueType, Type 1 e outras que sero usadas pelo
sistema e os mdulos de extenses do Xfree que sero usados.
Section L<ilesL
!gb1ath L6usr6;11!-6lib6;116rgbL
Module1ath L6usr6;11!-6lib6modulesL
<ont1ath L6usr6;11!-6lib6;116fonts6misc:unscaledL
<ont1ath L6usr6;11!-6lib6;116fonts6miscL
<ont1ath L6usr6;11!-6lib6;116fonts6J,dpi:unscaledL
<ont1ath L6usr6;11!-6lib6;116fonts6J,dpiL
<ont1ath L6usr6;11!-6lib6;116fonts61##dpi:unscaledL
47
FERRAMENTAS TCNICAS
<ont1ath L6usr6;11!-6lib6;116fonts61##dpiL
<ont1ath L6usr6;11!-6lib6;116fonts61D;L
<ont1ath L6usr6;11!-6lib6;116fonts6c%rillicL
<ont1ath L6usr6share6fonts6truet%pe6openofficeL
<ont1ath L6usr6;11!-6lib6;116fonts6defoma6CI&L
<ont1ath L6usr6;11!-6lib6;116fonts6defoma6$rue$%peL
DndSection
Section LModuleL
Koad LddcL
Koad LMKcoreL
Koad LdbeL
Koad LdriL
Koad Le>tmodL
Koad Lgl>L
Koad LbitmapL
Koad LspeedoL
Koad Lt%pe1L
Koad Lfreet%peL
Koad LrecordL
DndSection
Estas duas sees geralmente no precisam ser alteradas, a menos que voc instale algum
novo conjunto de fontes TrueType e queira habilit-lo manualmente ou caso instale um novo driver
de vdeo (como o driver da nVidia) e o read-me diga para desativar algum dos mdulos.
Outra possibilidade que voc queira intencionalmente desativar algum recurso, ou tentar
solucionar problemas. O mdulo "dri", por exemplo, habilita o suporte a 3D para a placa de vdeo.
As placas onboard com chipset Intel (i810, MGA 900, etc.), placas ATI Rage e ATI Radeon e as
antigas Voodoo 2 e Voodoo 3 possuem suporte 3D nativo no X.org.
Mas, ao instalar o driver 3D da nVidia voc precisa remover esta opo, pois o driver do
Xfree conflita com o que instalado junto com o driver. Pode ser tambm que por algum motivo
voc queira desabilitar o 3D da sua i810 onboard (para evitar que fiquem jogando TuxRacer durante
o expediente, por exemplo ;). Em qualquer um dos casos, voc poderia comentar a linha "Load
"dri".
Em seguida vem a configurao do teclado. O "abnt2" indica o layout de teclado que ser
usado por padro. No KDE e Gnome, o layout indicado aqui perde o efeito, pois eles possuem
ferramentas prprias para configurar o teclado. No caso do KDE usado o kxkb, que voc
configura na seo Regional & Acessibilidade do Kcontrol. Mas, esta configurao de teclado do X
til para quem usa outras interfaces.
Estes so dois exemplos de configurao para (respectivamente) um teclado ABNT2 e um
teclado US Internacional. Voc s pode incluir uma das duas no arquivo:
5 $eclado 'B($2
Section LInput&eviceL
Identifier LBe%board#L
&river L3bdL
Fption LCoreBe%boardL
Fption L;3b!ulesL L>orgL
Fption L;3bModelL Labnt2L
Fption L;3bKa%outL LbrL
Fption L;3bariantL Labnt2L
DndSection
48
FERRAMENTAS TCNICAS
5 $eclado US Internacional
Section LInput&eviceL
Identifier LBe%board#L
&river L3bdL
Fption LCoreBe%boardL
Fption L;3b!ulesL L>orgL
Fption L;3bModelL Lpc1#,L
Fption L;3bKa%outL Labnt2L
DndSection
Voc deve lembrar que acima, na seo "ServerLayout" informamos que o X iria usar o
"USB Mouse". Este apenas um nome que indica a seo (com a configurao do mouse
propriamente dita) que ser usada. Isso permite que voc tenha vrias sees com configuraes de
mouses diferentes. Basta indicar a correta na seo de cima e as demais sero ignoradas.
Estas so as sees com as configuraes usadas no Kurumin. Dentro de cada seo vai a
porta e driver usados pelo mouse e outras opes necessrias em cada caso. Voc pode us-las
como modelos para configurar o mouse em outras distribuies:
Section LInput&eviceL
Identifier LUSB MouseL
&river LmouseL
Fption L1rotocolL LautoL
Fption L&eviceL L6dev6input6miceL
Fption LSendCoreDventsL LtrueL
Fption LO'>isMappingL L) ,L
Fption LButtonsL L,L
DndSection
Section LInput&eviceL
Identifier LSerial MouseL
&river LmouseL
Fption L1rotocolL LMicrosoftL
Fption L&eviceL L6dev6tt%S#L
Fption LDmulate2ButtonsL LtrueL
Fption LDmulate2$imeoutL LJ#L
Fption LSendCoreDventsL LtrueL
DndSection
A linha "Option "ZAxisMapping" "4 5" ativa a rodinha do mouse, quando disponvel. Do
ponto de vista do sistema operacional, a rodinha um conjunto de dois botes extras (botes 4 e 5)
e os giros da roda correspondem a cliques nos botes extra.
seguro usar esta linha sempre, pois ela ignorada ao usar um mouse sem a rodinha. O
mais importante no caso o protocolo usado. Com relao a mouses PS/2 e USB no Kernel 2.6,
recomendo que use sempre a opo "Option "Protocol" "auto", que detecta corretamente o protocolo
do mouse na grande maioria dos casos.
Em casos especficos, onde o mouse no funcione corretamente, voc pode substituir o
"Option "Protocol" "auto" por "Option "Protocol" "IMPS/2", que o protocolo padro para mouses
de trs botes, com roda, ou "Option "Protocol" "PS/2", que o protocolo para mouses PS/2
antigos, sem roda.
No caso de mouses com 5 botes, com uma ou duas rodas, o protocolo usado muda para
"ExplorerPS/2 e voc precisa especificar a configurao dos botes extras. Para um mouse com 5
49
FERRAMENTAS TCNICAS
botes e uma roda, a seo fica:
Section LInput&eviceL
Identifier LMouseL
&river LmouseL
Fption L1rotocolL LD>plorer1S62L
Fption LO'>isMappingL L) ,L
Fption LButtonsL LJL
Fption L&eviceL L6dev6input6miceL
DndSection
Se a funo dos dois botes extra e da roda ficarem trocadas, substitua a linha "Option
"ZAxisMapping" "4 5" por "Option "ZAxisMapping" "6 7".
No caso dos mouses com duas rodas, a configurao fica:
Section LInput&eviceL
Identifier LMouseL
&river LmouseL
Fption L1rotocolL LD>plorer1S62L
Fption LO'>isMappingL L- J + *L
Fption LButtonsL L*L
Fption L&eviceL L6dev6input6miceL
DndSection
Note que, ao usar o Kernel 2.6, no existe necessidade de especificar se o mouse PS/2 ou
USB, pois a porta "/dev/input/mice" compartilhada por ambos. As verses atuais do Firefox e
outros aplicativos atribuem funes para os botes extras automaticamente. Os dois botes laterais
assumem as funes dos botes para avanar e voltar no Firefox, por exemplo.
Continuando, temos a configurao do monitor e placa de vdeo, que afinal so os
componentes mais importantes neste caso. Ela dividida em trs sees, com a configurao do
monitor, da placa de vdeo e uma seo "screen" que, com base nas duas anteriores indica qual
resoluo e profundidade de cores ser usada.
A configurao do monitor precisa incluir apenas as taxas de varredura horizontal e vertical
usadas por ele. Voc pode encontrar estes dados no manual do monitor ou no site do fabricante. As
opes Identifier, VendorName e ModelName so apenas descritivas, podem conter qualquer texto:
Section "Monitor"
Identifier "Monitor0"
VendorName "GSM"
ModelName "GSM3b60"
HorizSync 30 - 63
VertRefresh 50 - 75
EndSection
Se voc no souber as taxas de varredura usadas pelo seu monitor e quiser alguma
configurao genrica que funcione em qualquer monitor contemporneo, experimente usar esta,
que permite trabalhar a at 1024x768 com 60 Hz de atualizao:
Section LMonitorL
Identifier LMeu MonitorL
Pori7S%nc 21", - ,#"#
50
FERRAMENTAS TCNICAS
ert!efresh )#-*#
DndSection
Em geral, os configuradores incluem vrias sees "Modeline" dentro da seo "Monitor",
com as resolues e taxas de atualizao suportadas pelo monitor.
Estes dados so fornecidos pelo prprio monitor, via DDC (uma espcie de plug-and-play
para monitores) e no necessrio alter-los a menos que voc esteja escrevendo o arquivo
manualmente do zero, o que no muito aconselhvel j que sempre muito mais fcil usar um
arquivo copiado de outro micro como base. Esta configurao dos modelines no obrigatria no
XFree 4.x ou X.org, pois o X capaz de deduzir a configurao a partir das taxas de varredura do
monitor, informadas dentro da seo. Eles so usados atualmente mais como uma forma de corrigir
problemas.
Este um exemplo de configurao para um monitor de 17", incluindo modelines para usar
1280x1024, 1024x768 e 800x600. Note que cada seo "Modeline" ocupa uma nica linha:
Section LMonitorL
Identifier LMonitor#L
endor(am LMSML
Model(ame LMSM2b-#L
Pori7S%nc 2# - -2
ert!efresh ,# - J,
ModeKine L12+#>1#2)L 12,"## 12+# 12*- 1))# 1-++ 1#2) 1#2, 1#2+ 1#-- Nhs%nc Nvs%nc
ModeKine L1#2)>J-+L J+"J, 1#2) 1#)# 112- 1212 J-+ J-* JJ2 +## Nhs%nc Nvs%nc
ModeKine L+##>-##L )*",# +## +1- +*- 1#,- -## -#1 -#) -2, Nhs%nc Nvs%nc
DndSection
Em seguida vem a seo "Device" que indica a configurao da placa de vdeo. As opes
Identifier, VendorName e BoardName so apenas descries, o que interessa mesmo o Driver
usado:
Section L&eviceL
Fption LswGcursorL
Identifier LCard#L
&river LnvL
endor(ame LnidiaL
Board(ame LMe<orce) M;L
DndSection
Os drivers disponveis so:
- fbdev: Este driver usa o recurso de framebuffer suportado pelo Kernel como driver de
vdeo. Neste modo o Kernel manipula diretamente a memria da placa de vdeo, gravando as
imagens que sero mostradas no monitor. O desempenho no dos melhores e a utilizao do
processador maior que nos outros drivers pois no existe acelerao de vdeo
Mas, por outro lado, este um driver que funciona com a maioria das placas de vdeo e o
nico onde voc no precisa se preocupar com a configurao das taxas de atualizao do monitor.
As placas usam sempre uma taxa de atualizao baixa, de 56 ou 60 Hz, que fixa.
Ao usar o fbdev como driver de vdeo, a configurao da resoluo no feita no arquivo
xorg.conf, mas no "/etc/lilo.conf" (pois o parmetro passado diretamente ao Kernel durante o
boot), como vimos anteriormente.
51
FERRAMENTAS TCNICAS
- i740: Usado pelas placas de vdeo (offboard) com chipset Intel i740. Estas placas foram
uma tentativa frustrada da Intel de entrar no ramo de placas 3D. O desempenho era fraco comparado
com as placas da nVidia e ATI, mas o projeto acabou sendo usado como base para os chipsets de
vdeo onboard que passaram a ser usados nos chipsets Intel.
- i810: Este o driver usado por todas as placas de vdeo onboard com chipset Intel. A lista
de compatibilidade inclui quase todos os chipsets para Pentium III, Pentium 4 e Pentium M,
incluindo as placas com o chipset Intel 900 e Intel Extreme.
- nv: o driver genrico para placas nVidia, que oferece apenas suporte 2D. Para ativar os
recursos 3D voc precisa instalar os drivers da nVidia (veja mais detalhes no captulo 3).
- r128: Driver para as placas ATI Rage (a famlia anterior s ATI Radeon). Este driver
oferece um bom suporte 3D, permitindo que estas placas funcionem usando quase todo seu
potencial 3D (que no grande coisa hoje em dia, mas ainda permite rodar vrios jogos).
- radeon / ati: Este o driver open-source para as placas ATI Radeon. Nas verses antigas
do Xfree e do X.org, o driver se chamava "radeon", mas ele passou a se chamar "ati" nas verses
recentes do X.org (a partir do 6.8.2). Voc pode verificar qual a verso do X instalada, usando o
comando "X -version".
Para que a acelerao 3D funcione, necessrio que os mdulos do Kernel que cuidam da
comunicao de baixo nvel com a placa de vdeo estejam carregados. Nem todas as distribuies
carregam estes mdulos automaticamente, mesmo ao detectar a placa corretamente. Se a acelerao
3D no estiver funcionando, apesar da configurao do X estar correta, adicione as linhas abaixo
num dos arquivos de inicializao do sistema:
modprobe agpgart
modprobe ati-agp
modprobe drm
modprobe radeon
Existe uma certa polmica sobre utilizar o driver do X, ou utilizar o driver proprietrio
fornecido pela ATI que, embora no trabalhe em conjunto com algumas placas, oferece um
desempenho 3D superior quando funciona. Veja mais detalhes sobre como instal-lo no captulo 3.
- s3virge: Placas com chipset S3 Virge. Estas placas foram muito usadas por volta da poca
do lanamento do Pentium MMX.
- sis: Este o driver que funciona em todas as placas da SiS suportadas. Caso voc encontre
algum chipset novo, que no funcione com ele, experimente usar o driver vesa ou fbdev.
Uma observao importante que a SiS no desenvolve drivers 3D para o Linux e no
divulga as especificaes tcnicas que permitiriam o desenvolvimento de drivers 3D por parte da
comunidade. Atualmente as placas de vdeo e chipsets da SiS so os com pior suporte no Linux por
causa da falta de cooperao do fabricante e devem ser evitadas na hora da compra.
O driver oferece apenas suporte 2D, as placas funcionam mas no servem para rodar jogos
3D ou trabalhar com aplicativos 3D profissionais, por exemplo. At o Xfree 4.0 existia um esforo
52
FERRAMENTAS TCNICAS
para desenvolver suporte 3D, mas o fabricante divulgava to pouca informao e os chipsets
possuam tantos problemas (o que pode ser percebido pela relativa instabilidade dos prprios drivers
for Windows) que o projeto acabou sendo levado adiante por um nico desenvolvedor. Voc pode
obter mais informaes sobre o status do driver (2D) no:
http://www.winischhofer.at/linuxsisvga.shtml
O X.org inclui um driver 3D precrio, que oferece suporte limitado s placas com chipset
SiS 300, 305, 630 e 730, porm no inclui suporte aos demais modelos. Entre as placas onboard, as
com melhor suporte no Linux so as placas Intel, suportadas pelo driver i810.
- tdfx: Driver para as placas da 3Dfx, as famosas Voodoo, que fizeram muito sucesso a at
meia dcada atrs. Este driver oferece suporte 3D para as placas Voodoo 2 e Voodoo 3.
- trident: Placas de vdeo da Trident. Ele funciona bem com placas Trident Blade e os novos
chipsets usados em notebooks, mas o suporte s antigas 9440 e 9680 ruim e em muitos casos elas
funcionam a apenas 640x480. Pensando nestas placas, algumas distribuies, como o Mandriva
oferecem a opo de usar o driver do antigo Xfree 3.3, que oferecia um suporte mais completo a
elas.
Apesar de brutalmente ultrapassadas, as Trident 9440 e 9680 foram as mais vendidas durante
a maior parte da dcada de 1990 e por isso ainda so usadas em muitos micros antigos.
- vesa: Este o "curinga", um driver genrico que utiliza apenas as extenses do padro vesa
que em teoria suportado por todas as placas de vdeo PCI e tambm pelas antigas placas VLB.
Algumas placas antigas, como as Trident 9680 no funcionam com ele, mas so excees.
omo este driver no suporta acelerao, voc notar que o desempenho em algumas tarefas
ficar abaixo do normal. normal tambm que os vdeos assistidos no Kaffeine ou Xine fiquem
granulados ao serem exibidos em tela cheia. Outra limitao que a resoluo, na maioria das
placas, fica limitada a 1024x768.
- via: Este o driver que d suporte ao chipset Via Unicrome, usado como vdeo onboard na
maior parte das placas-me atuais com chipset Via. Originalmente, este driver era apenas 2D, como
o nv e o sis, mas a partir de abril de 2005 a Via passou a publicar um driver 3D open-source, que
pode ser encontrado nas verses recentes do X.org. Para que a acelerao 3D oferecida por ele
funcione, necessrio que os mdulos "via-agp" e "via" estejam carregados. Adicione as linhas
abaixo num dos arquivos de inicializao do sistema:
modprobe via-agp
modprobe via
- savage: Este driver d suporte s placas S3 Savage e Pro Savage, relativamente populares a
alguns anos atrs. Ele inclui acelerao 3D caso voc esteja utilizando uma verso recente do X.org
(a partir do 6.8.2), em conjunto com o pacote "libgl1-mesa-dri" (que inclui os drivers 3D
desenvolvidos pelo projeto Mesa GL).
Outros drivers, pouco usados so:
53
FERRAMENTAS TCNICAS
- cirrus: A Cirrus Logic fabricou alguns modelos de placas de vdeo PCI, concorrentes das
Trident 9440 e 9680. Elas so encontradas apenas em micros antigos.
- cyrix: Placas com o chipset Cyrix MediaGX, tambm raros atualmente.
- chips: Placas da "Chips and Technologies", um fabricante pouco conhecido.
- glint: Esta uma famlia de placas antigas lanada pela 3D Labs.
- neomagic: Placas com chipset Neomagic, usadas em alguns notebooks antigos.
- rendition: Placas Rendition Verite, da Micron.
- tseng: Placas da Tseng Labs, outro fabricante pouco conhecido.
- vga: Este um driver VGA genrico que trabalha 640x480 com 16 cores. Serve como um
"fail safe" que funciona em todas as placas.
Cada um destes drivers oferece algumas opes de configurao que podem ser usadas em
casos de problemas ou por quem quiser fuar na configurao. Voc pode encontrar mais
informaes sobre cada um no: http://www.xfree86.org/4.4.0/.
Finalmente, vai a configurao da seo "Screen", que indica a resoluo que ser usada. As
vrias sees determinam as resolues disponveis para cada configurao de profundidade
de cor, enquanto a opo "DefaultColorDepth" determina qual ser usada:
Section LScreenL
Identifier LScreen#L
&evice LCard#L
Monitor LMonitor#L
2e$aul!Color2ep!h 23
SubSection L&ispla%L
&epth +
Modes L1#2)>J-+L L+##>-##L L-)#>)+#L
DndSubSection
SubSection L&ispla%L
&epth 1-
Modes L1#2)>J-+L L+##>-##L L-)#>)+#L
DndSubSection
SubSection L&ispla%L
2ep!h 23
Modes 41&23,5*84 48&&,*&&4 4*3&,38&4
DndSubSection
DndSection
Neste exemplo o vdeo est configurado para usar 24 bits de cor. Se voc quisesse usar 16
bits, bastaria mudar o nmero na opo "DefaultColorDepth". Dentro de cada uma das trs sees
(Depth 8, Depth 16 e Depth 24), vai a resoluo que ser usada para cada uma.
54
FERRAMENTAS TCNICAS
Na linha que comea com "Modes" vo as resolues de tela. A primeira da lista (1024x768
no exemplo) a default. As outras duas, 800x600 e 640x480 so usadas apenas se a primeira falhar
(se a placa de vdeo ou monitor no a suportarem) ou se voc alternar manualmente entre as
resolues, pressionando "Ctrl Alt +" ou "Ctrl Alt -" .
Sempre que voc fizer alteraes no arquivo e quiser testar a configurao, reinicie o X
pressionando "Ctrl+Alt+Backspace". No preciso reiniciar o micro.
KVM via software com o Synergy
Um KVM um adaptador que permite ligar dois ou mais micros no mesmo teclado, mouse e
monitor. Voc pode chavear entre eles pressionando uma combinao de teclas, como "Scroll Lock,
Scroll Lock, seta pra cima", o que passa no apenas o controle do mouse e teclado, mas troca
tambm a imagem mostrada no monitor.
O Synergy permite fazer algo semelhante via software, "anexando" telas de outros micros,
de forma a usar todos simultaneamente, com um nico teclado e mouse. Imagine que voc tem um
desktop e um notebook, onde o notebook fica na mesa bem ao lado do monitor do desktop e voc
precisa se contorcer todo quando precisa fazer alguma coisa no notebook.
Usando o Synergy voc pode anexar a tela do notebook ao seu desktop, fazendo com que ao
mover o mouse para a direita (ou esquerda, de acordo com a configurao) ele mude
automaticamente para a tela do notebook. Junto com o mouse, muda o foco do teclado e at mesmo
a rea de transferncia unificada, permitindo que voc copie texto de um micro para o outro. Tudo
feito via rede, com uma baixa utilizao do processador e um excelente desempenho.
No Linux, o Synergy pode tanto ser configurado manualmente, atravs do arquivo
".synergy.conf" (dentro do seu diretrio de usurio), ou do arquivo "/etc/synergy.conf" (que vale
para todos os usurios do sistema), quanto atravs do Quicksynergy, um configurador grfico.
Vamos comear aprendendo como fazer a configurao manualmente.
O primeiro passo , naturalmente, instalar o Synergy nas duas mquinas. Ele um programa
comum, includo em muitas distribuies. Nos derivados do Debian, instale-o via apt-get:
# ap!-'e! ins!all sner'
Caso voc no encontre um pacote para a sua distribuio, voc pode baixar um pacote .rpm
genrico, ou mesmo o pacote com o cdigo fonte no: http://synergy2.sourceforge.net/.
Imagine que voc quer controlar o notebook a partir do desktop e que o desktop est
esquerda e o notebook direita. O nome do desktop na rede "semprao" e o nome do notebook
"kurumin", onde o endereo IP do desktop "192.168.0.10" e o do notebook "192.168.0.48".
2esk!op No!ebook
nome: semprao 3urumin
ip: 1*2"1-+"#"1# 1*2"1-+"#")+
posi?Ao: Q esHuerda Q direita
55
FERRAMENTAS TCNICAS
Estas informaes precisam ser especificadas no arquivo de configurao, ".synergy.conf"
ou "/etc/synergy.conf". Ele um arquivo simples com trs sees, onde so especificados os nomes
das mquinas (conforme definido na configurao da rede, ou no arquivo "/etc/hostname" e
"/etc/hosts"), a posio de cada uma e os respectivos endereos IP. Em caso de dvida sobre o nome
de cada mquina, cheque com o comando "hostname".
Este arquivo criado no PC que controlar os outros, o desktop no nosso caso. No nosso
exemplo o arquivo ficaria:
section: screens
semprao:
3urumin:
end
section: lin3s
semprao:
right = 3urumin
3urumin:
left = semprao
end
section: aliases
3urumin:
1*2"1-+"#")+
end
Note que usei tabs para formatar o arquivo de forma que ele ficasse mais organizado, mas
elas no influenciam a configurao. Como em outros arquivos, voc pode usar tabs, espaos e
quebras de linha extras para formatar o arquivo da maneira que quiser. Use este arquivo como
exemplo, alterando apenas os nomes e endereos IP dos micros.
Na seo "screens", vo os nomes das duas mquinas e na seo "links" especificado quem
fica direita e quem fica esquerda. No caso estou dizendo que o kurumin est direita do
semprao e vice-versa.
Finalmente, na seo "aliases" voc relaciona o nome da mquina que ser acessada a seu
endereo IP.
Com o arquivo criado nas duas mquinas, falta apenas efetuar a conexo. Uma
particularidade do Synergy que o micro principal (o desktop no nosso exemplo) o servidor,
enquanto o micro que vai ser controlado por ele (o notebook) o cliente. por isso que a
configurao feita no desktop e no no notebook.
Para ativar o "servidor" Synergy no desktop, permitindo que o notebook se conecte a ele,
usamos o comando:
1 sner's -$
Para que o notebook se conecte e seja controlado por ele, usamos o comando:
1 sner'c -$ 1)2#1*8#&#1&
...onde o 192.168.0.10 o endereo IP do desktop. Ambos os comandos devem ser sempre
executados usando seu login de usurio, no como root.
56
FERRAMENTAS TCNICAS
Se o notebook estiver em outra posio, esquerda, acima ou abaixo da tela principal, use os
parmetros "left =", "up =" e "down =" na configurao. possvel ainda conectar dois ou mais
micros simultaneamente, especificando a posio de cada um na configurao. Se, por exemplo,
alm do notebook direita, tivermos um segundo desktop chamado "fedora" com o IP
"192.168.0.21" esquerda, o arquivo de configurao ficaria:
section: screens
semprao:
3urumin:
fedora:
end
section: lin3s
semprao:
right = 3urumin
left = fedora
3urumin:
left = semprao
fedora:
right = semprao
end
section: aliases
3urumin:
1*2"1-+"#")+
fedora:
1*2"1-+"#"21
end
Originalmente, o rastro do mouse muda de uma tela para a outra simplesmente por chegar ao
canto da tela. Isso pode ser um pouco desagradvel em muitas situaes, pois justamente nos
cantos da tela que ficam as barras de rolagem, bordas e botes da janela.
A resposta para o problema a opo "switchDelay", que permite especificar um tempo de
espera em milessegundos antes do mouse mudar para outra tela. Ele evita transies involuntrias,
pois voc precisa realmente manter o mouse no canto da tela por uma frao de segundo para mud-
lo para a outra tela.
Para usar a opo inclua-a no final do arquivo, como em:
section: options
switch&ela% = 2,#
end
Como pode ver, ela vai dentro de uma nova seo a "options", que no inclumos antes no
arquivo por que no tnhamos nada a declarar. O "250" o tempo em milessegundos que o synergy
espera antes de fazer a transio de telas, em milessegundos. Este o valor que eu considero mais
confortvel, mas voc pode testar intervalos maiores ou menores at achar o ideal para voc.
Outra configurao til a heartbeat que faz com que seu micro detecte a desconexo dos
outros micros configurados (quando eles forem desligados, por exemplo), desativando o uso das
telas virtuais at que eles se reconectem. Ela pode ser includa dentro da seo "options", junto com
a switchDelay (o 5000 indica o tempo entre as verificaes, no caso 5 segundos):
57
FERRAMENTAS TCNICAS
section: options
switch&ela% = 2,#
heartbeat = ,###
end
Mais uma opo til a "switchCorners", que faz com que o Synergy trave os cantos da tela,
permitindo que voc clique no boto iniciar, nos botes de fechar e redimensionar janelas e outras
funes sem mudar para as telas adjacentes. Ao usar esta opo, o chaveamento feito apenas pelo
espao central da tela, o que torna o sistema bem mais confortvel. Para usar a opo, adicione as
linhas abaixo dentro da seo "options", logo abaixo da linha "heartbeat = 5000":
switchCorners = all
switchCornerSi7e = ,#
O "50"indica o tamanho (em pixels) da rea que ser considerada como canto pelo Synergy.
No caso estou reservando os 50 pixels superiores e inferiores.
Outra opo til, sobretudo ao usar trs telas dispostas horizontalmente, utilizar teclas de
atalho para chavear entre elas. Para isso, voc pode utilizar a opo "keystroke", especificando uma
sequncia de atalho e o nome da tela para a qual ir o cursor, como em:
3e%stro3e.'ltNO/ = switch$oScreen.hp/
3e%stro3e.'ltN;/ = switch$oScreen.semprao/
3e%stro3e.'ltNC/ = switch$oScreen.m,/
Concluindo, ao usar um firewall no "servidor", mantenha aberta a porta "24800", usada pelo
Synergy.
Se voc comear a usar o Synergy regularmente, a melhor forma de simplificar o processo
criar dois cones no desktop do KDE (um no desktop, outro no notebook), que executam os
comandos para estabelescer o link. Outra opo, colocar o cone com o comando na pasta
".kde/Autostart" (dentro do seu diretrio home) de cada um, assim o Synergy passa a ser ativado
automaticamente durante o boot.

Depois de feita a conexo, experimente passear com o mouse entre os dois desktops e abrir
programas. Voc pode tambm colar texto e at mesmo imagens de um desktop para o outro,
usando o Ctrl+C, Ctrl+V, ou usando o boto do meio do mouse. Para transferir arquivos, voc pode
usar o SSH, ou criar um compartilhamento de rede, usando o NFS ou o Samba.
Uma das vantagens do Synergy que ele multiplataforma. Na pgina de download voc
encontra tambm uma verso Windows, que pode ser usada em conjunto com a verso Linux. Voc
pode controlar uma mquina Windows a partir de um desktop Linux e vice-versa.
A verso Windows apresenta inclusive uma vantagem, que o fato de ser configurada
atravs de uma interface grfica, ao invs do arquivo de configurao. Uma opo de interface
grfica para a verso Linux o Quicksynergy, que voc pode baixar no:
http://quicksynergy.sourceforge.net/.
58
FERRAMENTAS TCNICAS
O principal problema com o Quicksynergy que, apesar de ser um programa bastante
simples, ele est disponvel apenas em cdigo fonte e tem uma longa lista de dependncias. Isso faz
com que voc acabe tendo que baixar 30 MB de compiladores e bibliotecas para instalar um
programa de 500 KB.
Se estiver disposto a encarar a encrenca, use o comando abaixo para baixar tudo via apt-get
(Debian Etch). Note que os nomes dos pacotes podem mudar sutilmente em outras distribuies:
# ap!-'e! ins!all au!omake 'cc '66 ib'lade2-dev lib'!k2#&-dev
lib'nomeui-dev
Com as dependncias satisfeitas, voc pode compilar e instalar o Quicksynergy
descompactando o pacote baixado, acessando a pasta criada e rodando os comandos "./configure",
"make" e "make install", este ltimo como root, como em:
1 !ar -7,v$ +uicksner'8&#1#!ar#'7
1 cd +uicksner'-&#1"
1 #"con$i'ure
1 make
1 su 9senha:
# make ins!all
O Quicksynergy possui duas abas: uma para fazer a configurao no servidor e outra para se
conectar a ele a partir do cliente:

Note que a aba com a configurao do servidor permite especificar apenas os nomes dos
clientes, no seus endereos IP. Para que ele funcione, voc deve configurar o arquivo "/etc/hosts"
(no servidor), cadastrando os endereos e nomes de cada cliente. Esse arquivo possui uma sintaxe
bem simples, contendo o nome e IP de cada mquina, uma por linha, como em:
12J"#"#"1 semprao localhost
1*2"1-+"#")+ 3urumin
1*2"1-+"#"21 fedora
Outra opo usar o Kurumin-Synergy, a interface que desenvolvi para uso no Kurumin. Ele
um painel desenvolvido no Kommander, por isso pode ser executado diretamente atravs do
"kmdr-executor", sem precisar ser compilado. Ele est includo no Kurumin, a partir do 5.1 (Iniciar
> Redes e acesso remoto > Acesso Remoto) e voc pode tambm baix-lo no:
http://www.guiadohardware.net/kurumin/painel/kurumin-synergy.kmdr
Para executar, voc precisa ter o pacote "kommander" instalado. Execute-o usando o
comando:
1 kmdr-e,ecu!or kurumin-sner'#kmdr
A interface bem similar do Quicksynergy, com uma aba para ativar o servidor e outra
para conectar os clientes. As diferenas so que ele permite especificar diretamente os endereos IP
dos clientes (sem precisar editar o "/etc/hosts") e que ele oferece a opo de criar um cone no
59
FERRAMENTAS TCNICAS
desktop para reativar a conexo de forma rpida depois.
Lembre-se de que ele apenas a interface. De qualquer forma, voc precisa ter o pacote
"synergy" instalado. Ao estabelecer a conexo, aberta uma janela de terminal, onde voc pode
acompanhar as mensagens. Para fechar a conexo, pressione "Ctrl+C" no terminal.

No captulo sobre shell script, veremos passo a passo como este script do Kurumin Synergy
foi desenvolvido, permitindo que voc inclua melhorias ou desenvolva seus prprios scripts.
Usando o hdparm
O hdparm um utilitrio muito usado, que permite ativar otimizaes para o HD. No se
trata necessariamente de um utilitrio para "turbinar" o seu sistema, mas para descobrir e corrigir
problemas na configurao do HD, que podem comprometer o desempenho.
Logue-se como root e rode o comando:
5 hdparm -c -d "dev"hda
(substituindo o /dev/hda pela localizao correta caso o HD esteja em outra posio)
Voc receber um relatrio como o abaixo:
6dev6hda:
IFGsupport = # .default 1--bit/
usingGdma = # .off/
Este o pior caso possvel. Veja que tanto o acesso de 32 bits quanto o DMA do HD esto
desativados. Voc pode atestar isso atravs do comando:
5 hdparm -! "dev"hda
O relatrio mostra a velocidade de leitura do HD. Neste caso temos um HD Fujitsu de 4.3
GB, um HD extremamente antigo. Mesmo assim, a velocidade de leitura est bem abaixo do
normal, apenas 2.72 MB/s, o que beira o ridculo:
6dev6hda:
$iming buffered dis3 reads: -) MB in 22",J seconds = 2"J2 MB6sec
60
FERRAMENTAS TCNICAS
Podemos melhorar isto ativando os dois recursos, o que pode ser feito atravs do comando:
5 hdparm -c 1 -d 1 "dev"hda
Algumas placas-me antigas, de Pentium 1 ou 486 podem no suportar o modo DMA, mas
quase todas suportaro pelo menos o acesso de 32 bits. Naturalmente em qualquer equipamento
mais atual ambos os recursos devem estar obrigatoriamente habilitados. Rodando novamente o
comando "hdparm -t /dev/hda" vemos que a velocidade de acesso melhorou bastante:
6dev6hda:
$iming buffered dis3 reads: -) MB in 1#"J- seconds = ,"*- MB6sec
Para que a alterao torne-se definitiva, edite o arquivo "/etc/rc.d/rc.local", adicionando a
linha:
hdparm -c 1 -d 1 6dev6hda
Isto far com que a configurao seja ativada a cada reboot. Nas distribuies derivadas
Debian, voc pode adicionar o comando no arquivo "/etc/init.d/bootmisc.sh", j que ele no utiliza o
arquivo "rc.local".
Muitos tutoriais adicionam tambm a opo "-k 1" no comando. Ela faz com que a configurao seja mantida em casos de erros,
onde a controladora do HD realiza um soft reset. Isto ocorre em casos de erros de leitura em setores do HD e outros problemas
relativamente graves. Sem o "-k 1", estes erros fazem com que o DMA seja desativado.
Eu particularmente prefiro esta configurao (sem o -k 1), pois serve como uma espcie de "alarme". Um erro ocorre, o DMA
desativado e, pela lentido do sistema, voc percebe que algo est errado. Usando o comando "dmesg" voc pode verificar o que
ocorreu e decidir se o caso de atualizar os backups ou trocar de HD.
Naturalmente, os resultados no sero to animadores nos casos em que a distribuio se
encarrega de detectar e ativar os recursos durante a instalao, mas no deixa de valer a pena
sempre verificar se est tudo ok.
Verses antigas do Red Hat usavam uma configurao bem conservadora, o que fazia com
que o ultra DMA ficasse desativado em muitas placas, onde ele funciona perfeitamente ao ser
ativado manualmente.
Caso o hdparm no esteja instalado, use o comando "urpmi hdparm" (no Mandriva), "apt-get
install hdparm" (Debian e derivados) ou procure pelo pacote nos CDs da distribuio em uso. Ele
um utilitrio padro do sistema.
Na grande maioria dos casos, simplesmente ativar o DMA e modo de transferncia de 32
bits j fazem com que o HD trabalhe de forma otimizada, pois o hdparm detecta as configuraes
suportadas pela controladora.
Mas, em alguns casos, voc pode conseguir pequenos ganhos ajustando o modo Ultra DMA
usado pelo HD. Neste caso, use os parmetros "-X66" (UDMA 33), "-X68" (UDMA 66) ou "-X69"
(UDMA 100), como em:
# hdparm -(*) "dev"hda
61
FERRAMENTAS TCNICAS
Esta opo deve ser usada apenas em conjunto com HDs IDE, nunca com os HDs serial
ATA, que j operam nativamente a 150, 300 ou 600 MB/s.
Ao tentar forar um modo de transferncia no suportado pelo seu drive, voc recebe uma
mensagem de erro, como em:
# hdparm -(5& "dev"hda
6dev6hda:
setting >fermode to J# .Ultra&M' mode-/
P&IFG&!IDGCM&.set>fermode/ failed: Input6output error
Nestes casos, o padro do hdparm voltar configurao anterior para evitar perda de
dados. Mas, em alguns poucos casos, forar um modo no suportado pode realmente corromper os
dados do HD, por isso uso este recurso com cautela.
Voc pode verificar os modos suportados pelo seu drive usando o comando "hdparm -i drive", na
linha "UDMA Modes:", como em:
# hdparm -i "dev"hda
6dev6hda:
Model=IC2,(#+#'$M!#)-#4 <w!ev=MF)F'&)'4 Serial(o=M!M)#<B)R12JPP
Config=S PardSect (otM<M PdSwT1,uSec <i>ed &$!T1#Mbs U
!awCPS=1-2+261-6-24 $r3Si7e=#4 SectSi7e=#4 DCCb%tes=)
Buff$%pe=&ual1ortCache4 BuffSi7e=J++)3B4 Ma>MultSect=1-4 MultSect=1-
CurCPS=1J)J,61,6-24 CurSects=1-,12+J,4 KB'=%es4 KB'sects=1,-2#1)++
IF!&V=on6off4 t1IF=Smin:2)#4w6IF!&V:12#U4 t&M'=Smin:12#4rec:12#U
1IF modes: pio# pio1 pio2 pio2 pio)
&M' modes: mdma# mdma1 mdma2
;2M< modes: udma& udma1 udma2 udma/ udma3 =udma%
'dvanced1M=%es: mode=#>+# .12+/ 0riteCache=enabled
&rive conforms to: '$'6'$'1I-- $12 1)1#& revision 2a:
9 signifies the current active mode
Com relao ao gerenciamento de energia, voc pode ajustar o tempo de espera, ou seja, o
tempo de inatividade que o sistema espera antes de colocar o HD em modo de economia de energia
usando a opo "-S" seguida por um nmero que vai de 1 a 255.
Esta opo uma notao peculiar, onde os nmeros de 1 a 240 indicam mltiplos de 5
segundos (1 para 5 segundos, 10 para 50 segundos e 240 para 20 minutos) e os nmeros de 241 em
diante indicam mltiplos de 30 minutos (242 indica uma hora, 244 duas horas, e assim por diante).
Para um tempo de espera de 10 minutos, por exemplo, use:
# hdparm -S 12& "dev"hda
Est disponvel tambm a opo "-y", que faz o drive entrar em modo de economia de
energia imediatamente.
Uma opo menos conhecida, mas que bastante til em alguns HDs o gerenciamento
acstico que, quando suportado pelo HD, permite escolher entre um modo de funcionamento
"silencioso", onde o HD gira a uma velocidade mais baixa, produz menos barulho e consome menos
energia, ou um modo "barulhento", onde ele simplesmente funciona com o melhor desempenho
62
FERRAMENTAS TCNICAS
possvel.
Esta opo definida usando o parmetro "-M", seguido de um nmero entre 128 e 254,
onde 128 o modo silencioso e o 254 o modo barulhento. Alguns HDs suportam nmeros
intermedirios, que permitem escolher a melhor relao performance/barulho.
Para descobrir quais os valores suportados pelo seu dive, use o comando "hdparm -I" (i
maisculo), como em:
# hdparm -> "dev"hda ? 'rep acous!ic
!ecommended acoustic management value: 1284 current value: 2,)
Para alterar a configurao, indique o valor desejado, como em:
# hdparm -M128 "dev"hda
Lembre-se de que apenas alguns HDs suportam efetivamente este recurso. Nos demais
modelos, a configurao no altera nada.
O hdparm pode ser usado tambm para limitar a velocidade do CD-ROM, o que pode ser til
em drives muito barulhentos, ou em notebooks, onde voc queira economizar energia. Para isso, use
o parmetro "-B", seguido da velocidade e o drive, como em:
# hdparm -@ 8 "dev"hdc
Todas as configuraes do hdparm no so persistentes. Por isso, lembre-se de incluir os
comandos em algum dos arquivos de inicializao, para que sejam executados durante o boot.
Recompilando o Kernel
O Kernel o corao do sistema, o Linux em si. Todos os demais programas, incluindo at
mesmo o bash, o programa que controla o prompt de comando so softwares que rodam sobre o
Kernel. ele quem cria a ponte entre os programas e o hardware.
O Kernel inclui todos os drivers de dispositivos suportados pelo sistema e at mesmo alguns
programas, como o Iptables, o firewall nativo do Linux a partir do Kernel 2.4. Mesmo alguns
programas "externos" como o VMware e o Qemu (com o mdulo Kqemu) utilizam um mdulo no
Kernel para ter acesso direto ao hardware e assim rodar com um melhor desempenho.
Para manter a compatibilidade com o maior nmero possvel de dispositivos, as distribuies
devem incluir tambm quase todos os drivers de dispositivos disponveis para o Linux. Para evitar
que isto torne o Kernel muito grande, criam um Kernel bsico, com os drivers mais importantes e
incluem os demais drivers como mdulos. Durante a instalao, ou a rodar algum utilitrio de
deteco e configurao de hardware, apenas os mdulos necessrios so carregados.
Os mdulos oferecem mais uma vantagem: podem ser carregados e descarregados conforme
63
FERRAMENTAS TCNICAS
necessrio, sem ficarem o tempo todo consumindo memria RAM e recursos do sistema. Uma
distribuio tpica, com o Kernel 2.6, inclui uma pasta de mdulos com cerca de 50 MB, com pouco
mais de mil mdulos diferentes. Mas, em geral, apenas 15 ou 20 deles ficam carregados durante o
uso.
Recompilar o Kernel lhe d a chance de criar um Kernel adaptado s suas necessidades, ao
contrrio do tamanho nico includo nas distribuies. Voc vai precisar recompilar o Kernel caso
precise adicionar o suporte a algum dispositivo, cujo driver s est disponvel na verso mais
recente. USB 2.0? Wireless? Bluetooth? Estas tecnologias j eram suportadas pelo Linux bem antes
dos primeiros produtos chegarem ao mercado, mas quem possui uma verso antiga do Kernel
precisa atualiz-lo para adicionar o suporte.
possvel adicionar tambm patches com recursos experimentais, ainda no includos no
Kernel oficial, incluindo novos drivers, suporte a novos sistemas de arquivos (como o suporte ao
mdulo Cloop ou UnionFS) ou melhorias de desempenho.
Felizmente, atualizar ou personalizar o Kernel uma tarefa relativamente simples, que pode
se tornar at corriqueira, j que numa mquina atual, um Athlon de 2.0 GHz por exemplo, a
compilao do executvel principal de um Kernel da srie 2.6 demora por volta de 5 minutos. Em
seguida vem a compilao dos mdulos, que bem mais demorada mas no necessria ao fazer
apenas pequenas modificaes no Kernel atualmente em uso.
O processo todo pode ser dividido nos seguintes passos:
1- Baixar o cdigo fonte da verso escolhida.
2- Aplicar patches (opcional).
3- Configurar as opes desejadas, ativando ou desativando componentes e opes, o que feito
atravs dos comandos "make xconfig" ou "make menuconfig".
4- Compilar o executvel principal do Kernel (o arquivo vmlinuz, que vai na pasta boot).
5- Compilar os mdulos.
6- Instalar o novo Kernel, os mdulos e configurar o lilo ou grub para utiliz-lo.
possvel manter vrios Kernels instalados na mesma distribuio e escolher entre eles na
hora do boot. Assim voc pode manter o Kernel antigo instalado e voltar para ele em caso de
problemas com o novo.
Voc pode encontrar detalhes sobre as atualizaes e mudanas includas em cada verso do
Kernel no: http://wiki.kernelnewbies.org/LinuxChanges.
Baixando os fontes
64
FERRAMENTAS TCNICAS
O primeiro passo naturalmente obter o cdigo fonte do Kernel, que iremos compilar. Se
voc quer apenas criar um Kernel personalizado, pode usar como base o cdigo fonte do prprio
Kernel includo na sua distribuio. Durante a instalao, quase sempre existe a opo de instalar o
cdigo fonte do Kernel (o pacote kernel-source) e os compiladores.
Voc pode tambm instal-los posteriormente. No Mandriva, por exemplo, use o comando:
5 urpmi kernel-source
No Debian, existem vrias verses diferentes do Kernel disponveis no apt-get. Voc deve
primeiro checar a verso em uso, usando o comando "uname -a", e em seguida instalar o pacote
correto, como em:
# ap!-'e! ins!all kernel-source-2#*#1%
No Kurumin, Kanotix e em algumas outras distribuies, est disponvel o script "install-
kernel-source-vanilla.sh", desenvolvido pelo Kano, que se encarrega de baixar os fontes do Kernel
atual, junto com um conjunto de patches teis.
sempre muito mais fcil usar como base o fonte e configurao do Kernel que est
instalado na sua mquina, com todos os patches e modificaes. Assim voc comea com uma
configurao que est funcionando e faz apenas as alteraes desejadas, com uma possibilidade
muito menor de surgirem problemas.
Depois de pegar um pouco de prtica, voc pode se aventurar a baixar uma verso "crua" da
ltima verso do Kernel no http://www.kernel.org e fazer uma experincia comeando do zero.
Salve o arquivo no diretrio "/usr/src/" onde por padro ficam armazenados os fontes do
Kernel. No se assuste, o arquivo com o fonte do Kernel mesmo grande, quase 50 MB
(compactado em .tar.gz) nas verses recentes.
Depois de baixar o pacote, voc ainda precisar descompact-lo, usando o comando:
5 !ar -7,v$ linu,-2#*#,#!ar#'7
Se o arquivo tiver a extenso tar.bz2, ento o comando fica:
5 !ar -A,v$ linu,-2#*#,#!ar#b72
Aproveite que est aqui para criar o link "linux", que deve apontar para a localizao da
pasta com o cdigo fonte do novo Kernel:
5 ln -s$ linu,-2#*#, linu,
Em geral, ao instalar o pacote "kernel-source" includo na distribuio, ser apenas copiado
o arquivo compactado para dentro da pasta "/usr/src/". Voc ainda precisar descompactar e criar o
link "/usr/src/linux", como ao baixar manualmente.
Na verdade o link "/usr/src/linux" apenas uma localizao padro, usada por muitas
65
FERRAMENTAS TCNICAS
ferramentas, assim como um discador de internet vai sempre, por padro, tentar acessar o modem
usando o device "/dev/modem". De qualquer forma, todo o trabalho de compilao ser feito dentro
da pasta com o fonte do Kernel, como em: /usr/src/linux-2.6.15/.
Configurando
Acesse o diretrio "/usr/src/" e, dentro dele, a pasta onde est a verso do Kernel que ser
recompilada, como em:
5 cd "usr"src"2#*#,"
Usado o ls, voc vai ver as vrias pastas e arquivos que formam o cdigo do Kernel. Se voc
quer realmente aprender a programar em C, vai aprender bastante examinando o cdigo. Comece
pela pasta "Documentation/", que contm muitas informaes teis sobre os componentes e
mdulos. Um bom livro (em Ingls) para quem quer entender melhor o funcionamento interno do
Kernel o Understanding the Linux Kernel, 3rd Edition, da ed. O'Reilly. Outra boa referncia o
Linux Device Drivers, 3rd Edition, tambm da ed. O'Reilly, voltado para o desenvolvimento de
drivers.
Com o cdigo em mos, o prximo passo definir os componentes que sero includos no
novo Kernel, usando o xconfig (grfico) ou menuconfig (texto), duas opes de ferramentas de
configurao.
O objetivo destas duas ferramentas apenas ajudar a selecionar as opes disponveis e gerar
um arquivo de texto, o ".config", que ser usado durante a compilao. Como todo arquivo de texto,
ele pode ser at mesmo editado manualmente, mas isto no muito prtico num arquivo com quase
3.000 linhas :-).
Mos obra ento:
5 make ,con$i'
66
FERRAMENTAS TCNICAS
No Kernel 2.6 o "make xconfig" chama o Qconf, um utilitrio bem mais amigvel, criado
usando a biblioteca QT. Para us-lo, necessrio ter instalada a biblioteca de desenvolvimento do
QT. No Debian Etch, instale o pacote "libqt3-mt-dev":
# ap!-'e! ins!all lib+!/-m!-dev
Caso necessrio, instale o pacote a partir do Unstable. comum que ele fique quebrado
durante as atualizaes do KDE. Se estiver usando alguma distribuio baseada no antigo Debian
Sarge, use o pacote "libqt3-dev".
No Kernel 2.4 o mesmo comando chama um utilitrio bem mais simples, baseado na biblioteca tk:
67
FERRAMENTAS TCNICAS
Em qualquer um dos casos, ao recompilar o Kernel includo na distribuio, o primeiro
passo carregar o arquivo .config com a configurao atual do Kernel. Isso evita muitos problemas,
pois voc comea com o Kernel configurado com exatamente as mesmas opes atualmente em
uso.
Fica mais fcil localizar e corrigir problemas assim, pois voc precisa se preocupar apenas
com as opes que alterou.
Por padro, o arquivo com a configurao do Kernel vai sempre na pasta /boot, como em: "/
boot/config-2.6.8.14-kanotix-6" ou "/boot/config-2.6.8.1-12mdk".
No Qconf, v em "File > Load" e aponte o arquivo:

As opes esto divididas em categorias, com uma descrio resumida de cada opo no
nvel mais baixo. A esmagadora maioria das opes est relacionada justamente com suporte a
dispositivos.
Para cada mdulo existem trs opes: compilar no executvel principal do Kernel (built-in,
representado por um smbolo de "Ok" no no Qconf ou um "Y" no xconfig antigo), compilar como
mdulo (um ponto no Qconf ou um "M" no antigo) ou desativar.
Compilar o componente na forma de um mdulo faz com que ele seja carregado apenas
quando necessrio, sem inchar o Kernel. Esta a opo ideal para todos os componentes que quiser
manter, mas no tem certeza se sero usados freqentemente.
Coisas como o suporte sua placa de rede, som, suporte a gerenciamento de energia para o
seu notebook podem ser compilados diretamente no Kernel. Mas, no exagere, pois um Kernel
muito grande vai demorar para ser compilado, aumentar o tempo de boot da mquina e ter um
desempenho um pouco inferior. O ideal compilar tudo o que no for essencial como mdulo,
68
FERRAMENTAS TCNICAS
como fazem as principais distribuies.
Uma ressalva importante que voc SEMPRE deve adicionar o suporte ao sistema de
arquivos no qual a partio raiz do sistema est formatada (ReiserFS, EXT3, XFS, etc.) diretamente
no Kernel e no como mdulo, caso contrrio voc cria um problema do tipo o ovo e a galinha: o
Kernel precisa carregar o mdulo reiserfs para acessar a partio, mas precisa acessar a partio
para carregar o mdulo. No final das contas, voc acaba com um Kernel panic.
Os mdulos com o suporte aos sistemas de arquivos principais (EXT, ReiserFS, XFS, JFS,
etc.) esto logo no diretrio principal da seo "File systems" do Qconf.
O suporte a sistemas de arquivos menos comuns esto nos subdiretrios. Voc deve compilar
o suporte a ReiserFS diretamente no Kernel se a partio raiz do sistema est formatada neste
sistema de arquivos, mas pode compilar como mdulo se a partio raiz est formatada em EXT3 e
apenas a partio home est formatada em ReiserFS, por exemplo.
O suporte a FAT, NTFS e outros sistemas "no nativos", pode ser sempre compilado como
mdulo, enquanto o suporte a sistemas menos comuns, que voc nunca vai usar (Minix e Amiga,
por exemplo) pode ser desabilitado.
Como disse, no Qconf um ponto indica que um componente est selecionado como mdulo
e um "ok" diz que ele ser compilado diretamente no Kernel:

Um remendo para este tipo de situao criar um initrd contendo o mdulo necessrio. O
initrd carregado diretamente pelo gerenciador de boot, o que permite que o Kernel tenha acesso ao
mdulo antes de ter acesso partio. Ele um arquivo compactado, contendo uma imagem de
sistema que vai na pasta /boot. Voc pode alterar seu contedo descompactando o arquivo e em
seguida montando-o com o comando "mount -o loop initrd tmp/"
A configurao do initrd a ser usado vai no arquivo de configurao do lilo (/etc/lilo.conf) na
linha:
ini!rd0"boo!"ini!rd#'7
Para ativar o suporte a ACPI, por exemplo, acesse a categoria "Power management options"
e ative o "ACPI Support", junto com os mdulos "AC Adapter" (usado em micros desktop ou
notebooks ligados na tomada) e "Battery" (que monitora o estado da bateria do notebook e ativa os
recursos de economia de energia suportados).
Os outros mdulos adicionam mais funes teis: a opo "Fan" permite diminuir a rotao
dos coolers, o mdulo "Processor" permite diminuir a freqncia do processador para economizar
energia, e assim por diante.

Quase todas as opes possuem descries, mas preciso ter bons conhecimentos de
hardware para entender a funo da maioria delas. A pasta "Documentation/", dentro da pasta com o
fonte, contm descries bem mais completas sobre a funo de cada mdulo. Os textos falam mais
sobre os componentes e recursos suportados por cada mdulo do que sobre programao, por isso
69
FERRAMENTAS TCNICAS
os textos tambm so muito teis para quem est estudando sobre hardware e suporte a dispositivos
no Linux.
A opo mais importante com relao ao desempenho indicar qual processador est sendo
utilizado. Isto far com que o Kernel seja compilado com otimizaes para a arquitetura, o que pode
resultar em um ganho de desempenho de at 10% em alguns casos. Para isto, acesse a seo
"Processador Type and Features" na tela principal do xconfig e clique na opo "Processador
family":
A opo 386 gera um cdigo que funciona em qualquer PC, desde um 386 at um Pentium 4
ou Athlon X2. A opo 486 gera algumas otimizaes para a arquitetura pipelinizada do 486, mas
mantendo a compatibilidade com todos os processadores da em diante.
A opo "586/K5/5x68/6x86/6x86MX" a mais usada, pois gera um Kernel compatvel com
todos os processadores a partir do Pentium, com um nvel de otimizao razovel. Acima desta
temos otimizaes especficas para cada famlia de processadores, que garantiro um nvel mximo
de desempenho, em troca da compatibilidade com os demais. Compilar o Kernel com otimizaes
para o Pentium 4 ir torn-lo incompatvel com mquinas Athlon ou Pentium III, por exemplo. Isto
naturalmente no um problema se voc s utilizar este novo Kernel na sua prpria mquina.
Na verdade, o nvel de otimizao do Kernel tem um efeito pequeno sobre o desempenho
geral da mquina na maioria dos casos, pois o Kernel em si representa apenas uma pequena parte do
70
FERRAMENTAS TCNICAS
sistema. Sobre ele temos pesos pesados com o X, KDE e o OpenOffice. Em geral, otimizar o Kernel
para o seu processador, sem mexer nos demais programas, resulta num ganho mdio de apenas 2 ou
3%.
Outra opo comum ativar o suporte a dois processadores. Esta opo necessria caso
voc esteja usando um micro com dois processadores, ou um Processador Pentium 4 com HT, e
queira que o sistema reconhea o segundo processador lgico.
Em troca, ativar o suporte a multiprocessamento diminui sutilmente o desempenho do sistema em
mquinas com apenas um processador, pois o sistema continua com o cdigo necessrio carregado
na memria. Para ativar, habilite (ainda dentro da seo "Processador Type and Features") a opo:
"Symmetric multi-processing support".
Depois de terminar, clique na opo "Save and Exit" no menu principal para salvar todas as
alteraes.
Alm do xconfig, voc pode utilizar tambm o menuconfig, que oferece basicamente as
mesmas opes, mas numa interface de modo texto. Ele serve como segunda opo caso o xconfig
(que no Kernel 2.6 depende da biblioteca Qt) esteja indisponvel. Para cham-lo, use o comando:
5 make menucon$i'

Tanto faz utilizar o xconfig ou o menuconfig, pois os dois gravam as alteraes no mesmo
arquivo, o .config, dentro do diretrio "/usr/src/linux". Existe ainda uma quarta opo, ainda mais
espartana: o "make config", que chama um programa de modo texto que simplesmente vai
perguntando um a um quais componentes devem ser includos (e exige uma boa dose de
pacincia..:).
Compilando
Depois de configurar o novo Kernel, voc pode compilar e instalar usando os quatro
comandos abaixo. Lembre-se de que, para compilar qualquer programa no Linux, necessrio ter o
compilador gcc instalado.
5 make clean
O "make clean" serve para limpar a casa, removendo restos de compilaes anteriores e
71
FERRAMENTAS TCNICAS
mdulos desnecessrios. Ao recompilar um Kernel da srie 2.4, necessrio rodar tambm o
comando "make dep", que verifica a cadeia de interdependncias do Kernel.
Ao executar o "make clean", todos os mdulos e componentes anteriormente compilados so
removidos, fazendo com que a compilao seja realmente feita a partir do zero. Se voc j compilou
o Kernel anteriormente e fez agora apenas uma pequena modificao (como ativar um mdulo
adicional), pode omitir o "make clean", de forma que os objetos gerados na compilao anterior
sejam aproveitados e a compilao seja muito mais rpida.
5 make b7>ma'e
Este o comando que compila o executvel principal do Kernel, o arquivo que vai na pasta /
boot. O tempo varia de acordo com a velocidade do processador, mas sempre relativamente
rpido, j que estamos falando de um executvel de geralmente 1.5 ou 2 MB. Num PC atual no
demora mais do que 4 ou 6 minutos.
Em mquinas com dois processadores, voc pode reduzir o tempo de compilao usando a
opo "-j4", que faz com que o make processe 4 mdulos de cada vez, ao invs de apenas um como
faria por padro. Isto faz com que o segundo processador realmente fique ocupado, reduzindo em
at 40% o tempo de compilao. Neste caso o comando fica:
# make -A3 b7>ma'e
Este comando tambm pode ser utilizado em mquinas com apenas um processador (ou com
um Pentium 4 com HT), mas neste caso o ganho de performance bem menor. Geralmente voc
ter melhores resultados usando a opo "-j2" (apenas dois mdulos por vez, ao invs de quatro).
Em verses antigas do Kernel, era usado o comando "make zImage" mas ele tem uma
limitao quanto ao tamanho mximo do Kernel a ser gerado, por isso s funciona em Kernels
muito antigos, da srie 2.0. O "bzImage" permite gerar Kernels sem limite de tamanho.
Uma observao importante, que, embora tradicional, o comando "make bzImage" s
usado at o Kernel 2.6.15. A partir do 2.6.16, o comando de compilao foi simplificado, j que, por
causa do limite de tamanho, no existe mais nenhum motivo para algum gerar uma "zImage". O
comando para compilar o executvel do Kernel passou a ser apenas "make", como em outros
programas:
# make
Ao tirar proveito da compilao paralela do make, use:
# make -A3
Em qualquer um dos dois casos, depois de compilar o executvel principal, temos o:
5 make modules
... que conclui o trabalho, compilando todos os componentes marcados como mdulos. Numa
distribuio tpica, esta a etapa mais demorada, pois quase tudo compilado como mdulo,
72
FERRAMENTAS TCNICAS
gerando um total de 40 ou 50 MB de arquivos, o que demora proporcionalmente mais. O tempo de
compilao cai bastante se voc comear a desativar os mdulos que no for usar. Assim como no
comando anterior, voc pode acrescentar o "-j4" ou "-j2" para reduzir o tempo de compilao.
Instalando
O novo Kernel ser gravado no arquivo "/usr/src/linux-2.6.x/arch/i386/boot/bzImage". O
prximo passo copi-lo para o diretrio /boot e em seguida configurar o lilo para inicializar o
novo Kernel ao invs do antigo. Para copiar, use o comando:
# cp "usr"src"linu,-2#*#,"arch"i/8*"boo!"b7>ma'e "boo!"novo8kernel
Substituindo sempre o "linux-2.6.x" pelo nome correto da pasta onde est o Kernel. Isso
tambm renomear o arquivo para "novo_kernel", que pode ser alterado para outro nome qualquer.
Alm do arquivo principal, necessrio instalar tambm os componentes compilados como
mdulos, que ficam armazenados num diretrio separado, na pasta /lib/modules/. Para isto, basta
usar o comando:
5 make modules8ins!all
Concluindo, voc deve copiar tambm o arquivo "System.map", que contm a imagem de
sistema inicial, carregada durante o boot:
5 cp "usr"src"linu,-2#,,"Ss!em#map "boo!"Ss!em#map
O prximo passo configurar o lilo. Para isso, abra o arquivo "/etc/lilo.conf":
# kedi! "e!c"lilo#con$
Aqui esto as opes de inicializao que so dadas durante o boot. O que precisamos
adicionar uma nova opo, que inicializar o novo Kernel. Basta incluir as linhas no final do arquivo
e salv-lo:
image = 6boot6novoG3ernel
label = novoG3ernel
read-onl%
Ao reiniciar o sistema voc ver uma nova opo no menu do lilo, justamente o
"novo_kernel" que acabamos de adicionar, junto com a entrada para inicializar o Kernel antigo.
Teste o novo Kernel e quando tiver certeza de que ele est funcionando adequadamente,
edite novamente o /etc/lilo.conf colocando o nome da entrada referente ao novo Kernel na opo
"default". Isto far com que ele passe a ser inicializado por default. Seu lilo.conf ficar parecido
com este:
boot=6dev6hda
timeout=1##
73
FERRAMENTAS TCNICAS
message=6boot6message
vga=J++
default= novo-3ernel
image = 6boot6novo-3ernel
label = novo-3ernel
root=6dev6hda1
append=LHuiet noapicL
read-onl%
image=6boot6vmlinu7
label=linu>
root=6dev6hda1
initrd=6boot6initrd"img
append=LHuiet noapicL
read-onl%
Voc pode ter quantos Kernels diferentes quiser, basta salvar cada arquivo com um nome
diferente e adicionar uma entrada no arquivo.
Recompilando o Kernel moda Debian
O Debian oferece uma ferramenta chamada kernel-package que facilita bastante a
recompilao do Kernel. Ele cuida de todo o processo de compilao e no final gera um arquivo
.deb com o novo Kernel, que pode ser rapidamente instalado usando o comando "dpkg -i" e,
inclusive, instalado em outros micros.
Como de praxe, o primeiro passo acessar a pasta com os fontes do Kernel. O que muda so
os comandos executados dentro dela. Ao invs do "make bzImage", "make modules" e "make
modules_install", todo o restante do processo automatizado por dois comandos:
# make-kpk' clean
# make-kpk' kernel8ima'e
No final do processo ser gerado um arquivo "kernel-image" dentro da pasta "/usr/src" com
o novo Kernel, como em "/usr/src/kernel-image-2.6.15_10.00.Custom_i386.deb".
Este pacote contm a imagem completa, incluindo o arquivo vmlinuz que vai na pasta /boot,
mdulos e um script de instalao (executado ao instalar o pacote) que automatiza a instalao.
O processo de compilao de um Kernel da srie 2.6 com uma configurao tpica demora
em mdia 45 minutos num Sempron 2200. Por isso, tenha pacincia. Voc pode ir fazendo outras
coisas enquanto isso.
Caso a compilao termine em uma mensagem de erro, experimente comear novamente,
desativando o mdulo que deu problemas. Erros de compilao tambm podem ser causados por
erros de hardware. No Kurumin rode o stress-test (encontrado no Kurumin em Iniciar > Sistema) ou
outro teste de hardware para verificar se a sua mquina est estvel.
Voc pode instalar o pacote gerado rodando o dpkg -i, como em:
74
FERRAMENTAS TCNICAS
# dpk' -i "usr"src"kernel-ima'e-2#*#1%81&#&&#Cus!om8i/8*#deb
Durante a instalao existe uma pegadinha. O instalador pergunta "Do You Whant to stop
Now? (Y/n)". O "Y" o default, ento se voc simplesmente pressionar Enter sem ler, a instalao
ser abortada. Para continuar voc precisa digitar "n" e dar Enter. Leia as outras perguntas com
ateno.
Se voc quer que sejam gerados tambm pacotes com o fonte e os headers do Kernel, use o
comando:
# make-kpk' kernel8ima'e kernel8source kernel8headers
Neste caso, sero gerados trs pacotes no total, contendo o "kit completo" do Kernel gerado.
Isto vai ser muito til se voc pretende distribuir o Kernel o instal-lo em vrias mquinas.
O pacote com o fonte permite que outras pessoas recompilem o seu Kernel, fazendo
alteraes, enquanto os headers so necessrios para instalar drivers de softmodems, os drivers 3D
da nVidia e outros drivers proprietrios.
Aplicando patches
Os patches so muitas vezes o principal motivo para recompilar o Kernel. Muitos novos
recursos demoram a ser includos no Kernel oficial e, enquanto isso (muitas vezes durante vrios
anos), ficam disponveis apenas atravs de patches.
Como exemplo podemos citar o Xen, o Freeswan (VPN), o Bootsplash (boot grfico) e o
OpenMosix (Cluster) entre muitos outros. Lendo muitos howtos voc ver a necessidade de instalar
patches diversos no Kernel para utilizar vrias solues.
Em muitos casos, recursos includos em novas verses do Kernel (o lowlatency e o preempt,
adicionados no Kernel 2.6, para melhorar as respostas do sistema) so disponibilizados como
backports para verses anteriores do Kernel, novamente primeiro na forma de patches.
Para aplicar um patch, comece descompactando o arquivo baixado. Geralmente os patches
possuem a extenso ".patch", mas isso no uma regra. Muitos patches podem ser baixados
diretamente pelo apt-get. Digite "apt-get install kernel-patch" e pressione a tecla TAB duas vezes
para ver todas as opes disponveis.
Como exemplo, vou mostrar como instalar os patches do xen, bluez e debianlogo numa
verso recente do Kernel 2.6. Este ltimo altera o tux que aparece durante o boot pelo logo do
Debian, apenas para voc ter certeza que o novo Kernel foi realmente compilado com os patches.
Para instalar os trs pelo apt-get, use os comandos:
# ap!-'e! ins!all kernel-pa!ch-,en
# ap!-'e! ins!all kernel-pa!ch-2#*-blue7
# ap!-'e! ins!all kernel-pa!ch-debianlo'o
75
FERRAMENTAS TCNICAS
Todos os patches instalados pelo apt-get vo para a pasta "/usr/src/kernel-paches". Em
geral, so instalados vrios arquivos compactados, com verses especficas do patch para vrias
verses do Kernel. Descompacte apenas o arquivo que mais se aproxima da verso do Kernel que
voc est compilando, como em:
1 cd "usr"src"kernel-pa!ches"di$$s"debianlo'o
# 'un7ip debian-lo'o-2#*#2#'7
Para aplicar o patch descompactado, acesse a pasta onde esto os sources do Kernel, como
em:
1 cd "usr"src"kernel-source-2#*#1*"
O prximo passo aplicar o patch usando o comando patch -p1 < localizao_do_patch,
como em:
# pa!ch -p1 9 "usr"src"kernel-pa!ches"di$$s"debianlo'o"debian-
lo'o-2#*#2
Note que este comando deve ser usado apenas dentro da pasta com os sources do Kernel.
Depois de aplicar todos os patches, siga o procedimento normal para gerar o novo Kernel:
# make ,con$i'
# make-kpk' clean
# make-kpk' kernel8ima'e
Um bom lugar para se manter informado sobre as novidades relacionadas ao
desenvolvimento do Kernel, novos patches, etc. o http://kerneltrap.org.
Criando patches
Os patches so largamente usados no apenas no desenvolvimento do Kernel, mas em
praticamente todos os projetos open-source. Um patch nada mais do que um arquivo de texto
contendo as diferenas entre dois arquivos, uma forma prtica de enviar correes e modificaes
para os mantenedores dos projetos.
76
FERRAMENTAS TCNICAS
Por serem pequenos, os patches podem ser facilmente enviados via e-mail e so fceis de
auditar, pois permitem verificar as poucas linhas alteradas, ao invs de checar o cdigo fonte
completo. Enviar um patch pode ser a nica forma de ter sua correo ou melhoria aceita.
Vamos a um exemplo rpido de como criar um patch para um shell script simples, que
instala o Acrobat Reader no Debian:
apt-get install acroread
apt-get install mo7illa-acroread
ln -sf 6usr6lib6'dobe6'crobatJ"#6browser6intellinu>6nppdf"so W
6usr6lib6firefo>6plugins6nppdf"so
Imagine que o script faz parte de um programam maior, que est localizado na pasta
"programa/", dentro do seu diretrio home, junto com outros arquivos. O arquivo do script por
coincidncia se chama "script".
O script original no est funcionando corretamente e voc descobriu que o programa so
dois erros simples nas localizaes das pastas. Depois das modificaes, o script ficou:
apt-get install acroread
apt-get install mo7illa-acroread
ln -sf 6usr6lib6'dobe6'crobatJ"#6Bro-ser6intellinu>6nppdf"so W
6usr6lib6mo7illa-$ire$o,6plugins6nppdf"so
Voc precisa agora gerar um patch e envi-lo para o mantenedor do programa, para que ele
possa aplicar sua correo. Para isso, voc vai precisar de duas pastas, uma contendo o cdigo fonte
do programa original e outra contendo o cdigo fonte depois de suas alteraes. No importa se
voc alterou apenas um arquivo ou se fez alteraes em vrios. O patch conter todas as diferenas
entre as duas pastas.
Imagine que a pasta original se chama "programa" e a pasta com as modificaes se chama
"programa-mod". O comando para gerar o patch seria:
1 di$$ -uNr pro'rama pro'rama-mod"
diff -u(r programa6script programa-mod6script
--- programa6script 2##,-#+-#* 11:2+:,,"######### -#2##
NNN programa-mod6script 2##,-#+-#* 11:2+:)J"######### -#2##
XX -14) N14) XX
apt-get install acroread
apt-get install mo7illa-acroread
-ln -s$ "usr"lib"<dobe"<croba!5#&"bro-ser"in!ellinu,"nppd$#so B
-"usr"lib"$ire$o,"plu'ins"nppd$#so
6ln -s$ "usr"lib"<dobe"<croba!5#&"Bro-ser"in!ellinu,"nppd$#so B
6"usr"lib"mo7illa-$ire$o,"plu'ins"nppd$#so
Veja que ele devolve as diferenas diretamente na tela. Para que ele gere o patch, direcione a
sada do comando para um arquivo:
1 di$$ -uNr pro'rama pro'rama-mod" : pa!ch
isso a :). Seu primeiro patch est pronto, espero que seja o primeiro de muitos outros.
Basta envi-lo por e-mail para o mantenedor do programa, explicando o que foi feito.
77
FERRAMENTAS TCNICAS
Para aplicar seu patch, o mantenedor acessaria a pasta com o fonte do programa (a pasta
programa/ no exemplo) e, dentro dela, usaria o comando:
1 pa!ch -p1 9 "al'um8lu'ar"pa!ch
Neste caso usei como exemplo um shell script, mas os patches podem ser criados a partir de
cdigo fonte em qualquer linguagem, ou at mesmo a partir de arquivos binrios.
Acelerando a compilao com o distcc
Mais uma dica que voc pode utilizar outros micros da rede para reduzir o tempo de
compilao utilizando o distcc. Ele permite que os jobs da compilao (criados usando a opo -j)
sejam processados por diferentes PCs da rede, reduzindo o tempo de compilao quase que
proporcionalmente. Com 5 micros de configurao similar, a compilao realizada em
aproximadamente 1/4 do tempo. Ele usado pelos desenvolvedores de muitos projetos para
diminuir o tempo perdido com cada compilao e assim acelerar o desenvolvimento, sobretudo nas
fases de teste.
Para usar o distcc no necessrio que todos os micros possuam configurao similar, nem
que estejam rodando a mesma distribuio. recomendvel apenas que sejam sempre utilizadas
verses similares do distcc em todos, para evitar problemas inesperados.
Ele est disponvel na maioria das distribuies. Procure pelo pacote "distcc". Nas
distribuies derivadas do Debian ele pode ser instalado atravs do apt-get:
# ap!-'e! ins!all dis!cc
Naturalmente, voc deve instal-lo em todas as mquinas que sero usadas. Como medida de
segurana, mesmo depois de instalado ele fica explicitamente desabilitado no arquivo "/etc/default/
distcc". Para ativar, edite o arquivo e mude a opo "STARTDISTCC="false" para:
S$'!$&IS$CC=LtrueL
A seguir, na opo "ALLOWEDNETS" voc deve especificar quais micros podero usar o
servidor, especificando diretamente o IP ou nome de cada um, ou autorizando diretamente toda a
faixa de endereos da rede local, como em:
'KKF0D&(D$S=L1*2"1-+"1"#62)L
Concluda a configurao, reinicie o servio, em todas as mquinas:
# "e!c"ini!#d"dis!cc res!ar!
A grosso modo, o distcc trabalha enviando trechos de cdigo para as demais mquinas da
rede, juntamente com os parmetros de compilao necessrios e recebe de volta os binrios j
compilados. Apenas o seu micro precisa ter o cdigo fonte do que est sendo compilado, mas todas
as mquinas que forem usadas precisam ter os compiladores necessrios para compil-lo. Ao
78
FERRAMENTAS TCNICAS
instalar o sistema em cada mquina, aproveite para sempre habilitar a categoria de desenvolvimento
na seleo dos pacotes. desejvel tambm que, mesmo que sejam usadas distribuies diferentes,
todas as mquinas tenham instaladas verses idnticas ou pelo menos similares do gcc e g++.
Na hora de compilar, comece criando a varivel "DISTCC_HOSTS" no shell, que especifica
quais mquinas da rede sero utilizadas pelo distcc durante a compilao, como em:
1 e,por! 2>SCCC8DESCS0F125#&#&#1 1)2#1*8#1#// 1)2#1*8#1#1&&
1)2#1*8#1#1%*F
Se preferir, voc pode tornar esta configurao permanente, salvando a lista dentro do
arquivo ".distcc/hosts", no diretrio home do usurio usado nas compilaes. Depois de criar a pasta
.distcc, voc pode usar o comando:
1 echo F125#&#&#1 1)2#1*8#1#// 1)2#1*8#1#1&& 1)2#1*8#1#1%*F :
G"#dis!cc"hos!s
Depois de criada a lista com os hosts, voc pode compilar da forma usual, adicionando os
parmetros "-jX CC=distcc" depois do "make", onde o X o nmero de jobs simultneos que sero
criados. Ao usar o distcc, uma regra geral usar 3 jobs por processador, por mquina. Com 4
mquinas monoprocessadas, -j12 um bom nmero. Em algumas situaes, usar um nmero maior
de jobs pode reduzir um pouco o tempo de compilao e em outras vai simplesmente retardar o
processo.
No caso da compilao do Kernel, os comandos seriam:
1 make -A12 CC0dis!cc b7>ma'e
.ma3e -Y12 CC=distcc no Bernel 2"-"1-4 em diante/
1 make -A12 CC0dis!cc modules
# make modules ins!all
Note que no usei o distcc no "make modules install", pois ele no envolve compilao,
apenas a instalao dos mdulos gerados no comando anterior. O mais correto sempre fazer
compilaes usando um login de usurio e usar o root apenas para rodar os comandos de instalao.
Para fazer isso, necessrio que a conta de usurio tenha sempre permisso de acesso completa
pasta com o cdigo fonte. Se voc est compilando o Kernel, e o fonte est na pasta
"/usr/src/linux/2.6.15/" (que originalmente pertence ao root), voc pode pode usar o comando:
# cho-n -H Aoao#Aoao "usr"src"linu,"2#*#1%"
... para transferir a posse da pasta para o usurio joao, grupo joao, de forma que ele possa fazer a
compilao sem enfrentar problemas de permisso.
Criando pacotes a partir dos fontes com o checkinstall
Todas as distribuies incluem um conjunto generoso de pacotes, seja diretamente nos CDs
79
FERRAMENTAS TCNICAS
de instalao, seja em repositrios disponveis via web. Os repositrios oficiais do Debian, por
exemplo, combinados com o repositrio non-free e mais alguns repositrios no oficiais, podem
facilmente oferecer mais de 22.000 pacotes diferentes.
Mesmo assim, muitos drivers e softwares no esto disponveis nos repositrios e precisam
ser instalados manualmente a partir do cdigo fonte. O checkinstall facilita esta tarefa,
principalmente se voc precisa instalar o mesmo software em vrias mquinas ou quer distribu-lo
para amigos, gerando um pacote .deb, .tgz ou .rpm com o software pr-compilado, que pode ser
rapidamente instalado usando o gerenciador de pacotes.
Para us-lo, comece instalando o pacote atravs do gerenciador de pacotes disponvel. Ele
um pacote bastante comum, que vem includo em todas as principais distribuies. No Debian voc
pode instal-lo pelo apt-get:
# ap!-'e! ins!all checkins!all
O funcionamento do checkinstall simples. Ao instalar qualquer pacote a partir do cdigo
fonte, substitua o comando "make install" pelo comando apropriado do checkinstall. Onde:
# checkins!all -2
(gera um pacote .deb, para distribuies derivadas do Debian)
# checkins!all -H
(gera um pacote .rpm, que pode ser usado em distribuies derivadas do Red Hat)
# checkins!all -S
(gera um pacote .tgz, para o Slackware)
Por exemplo, para gerar um pacote .deb, contendo os mdulos e utilitrios do driver para
modems 537EP, disponvel no http://linmodems.technion.ac.il/packages/, os comandos seriam:
1 !ar -7,v$ in!el-%/5@I-2#*&#8&#&#!'7
1 cd in!el-%/5@I-2#*&#8&#&"
1 make clean
1 make %/5
# checkins!all -2
O checkinstall deve ser sempre executado como root. Ele vai gerar o pacote, salvando-o no
diretrio a partir de onde foi chamado (/home/kurumin/intel-537EP-2.60.80.0/intel-537ep-
2.60.80.0_2.60.80.0-1_i386.deb no meu caso) e em seguida instal-lo na sua mquina.
Durante a gerao do pacote, ele far algumas perguntas, a fim de gerar o arquivo de
controle que contm informaes como o mantenedor do pacote (voc no caso), uma descrio do
pacote (um texto de poucas linhas explicando o que ele faz) e a verso.
Ao gerar seus prprios pacotes, voc pode ter problemas de instalao, caso seu pacote
inclua algum arquivo que tambm exista em outro pacote j instalado no sistema, gerando erros
como:
80
FERRAMENTAS TCNICAS
.Kendo banco de dados """ -+-#+ arHuivos e diretZrios atualmente instalados"/
&escompactando intel-,2Jep-2"-#"+#"# .de """6intel-,2Jep-2"-#"+#"#G2"-#"+#"#-1Gi2+-"deb/ """
dp3g: erro processando 6home63urumin6intel-,2JD1-2"-#"+#"#6intel-,2Jep-2"-#"+#"#G2"-#"+#"#-
1Gi2+-"deb .--install/:
tentando sobrescrever [6lib6modules62"-"+"1-3anoti>-1#6modules"usbmap\4 Hue tamb]m est^ no
pacote Hemu
dp3g-deb: subprocesso paste morto por sinal .Bro3en pipe/
Drros foram encontrados durante processamento de:
6home63urumin6intel-,2JD1-2"-#"+#"#6intel-,2Jep-2"-#"+#"#G2"-#"+#"#-1Gi2+-"deb
Nestes casos voc pode modificar o pacote, para no incluir o arquivo, desinstalar o outro
pacote com quem ele conflita (o qemu no caso) ou, caso perceba que um problema benigno, que
no trar maiores conseqncias, forar a instalao do seu pacote, para que ele subscreva o arquivo
usado por outro.
No caso de um pacote .deb, o comando para forar a instalao seria:
# dpk' -i --$orce-all paco!e#deb
No caso de um pacote do .rpm, o comando seria:
# rpm -iv --replace$iles paco!e#rpm
ou:
5 rpm -iv --$orce paco!e#rpm
No Slackware no existe a necessidade de forar a instalao de pacotes, pois o gerenciador
no checa dependncias ou arquivos duplicados, deixando que voc faa o que bem entender. Isto
ao mesmo tempo uma vantagem (voc pode fazer o que quiser) e uma grande desvantagem (voc
pode destruir o sistema se no souber o que est fazendo).
Existem ainda algumas limitaes gerais com pacotes pr-compilados, que voc deve levar
em considerao:
Em primeiro lugar, o pacote gerado foi compilado para a sua mquina e para a distribuio
atualmente em uso. No existe garantia que o mesmo pacote vai funcionar para distribuies
diferentes, mesmo que elas utilizem o mesmo padro de pacotes.
No caso de pacotes contendo drivers, como o driver para modems 537EP que usei no
exemplo, gerado um mdulo pr-compilado, que vai funcionar apenas em distribuies que
utilizem a mesma verso do Kernel. Ou seja, basicamente apenas na mesma verso da mesma
distribuio que voc est usando. No adianta compilar um pacote no Mandriva 2006 e esperar que
ele funcione no Slackware 10.2, por exemplo.
Voc pode ver mais detalhes sobre a instalao de drivers no Linux no captulo 3 deste livro.
Escrevendo scripts de backup
Durante a dcada de 70, vrios utilitrios foram desenvolvidos para fazer backup de arquivos
armazenados em servidores Linux. Os computadores da poca eram muito limitados, por isso os
81
FERRAMENTAS TCNICAS
utilitrios precisavam ser simples e eficientes, e deveriam existir meios de agendar os backups para
horrios de pouco uso das mquinas.
Sugiram ento utilitrios como o tar e o gzip e mais tarde ferramentas como o rsync. Estes
utilitrios eram to eficientes que continuaram sendo usados ao longo do tempo. Por incrvel que
possa parecer, so usados sem grandes modificaes at os dias hoje.
Naturalmente, existem muitos utilitrios amigveis de backup, como o Amanda (para
servidores) e o Konserve (um utilitrio mais simples, voltado para usurios domsticos). Mas,
internamente, eles continuam utilizando como base o o dump, tar, gzip e outros trigenrios.
Mais incrvel ainda, que estes utilitrios possuem uma penetrao relativamente pequena.
A maior parte dos backups ainda feita atravs de scripts personalizados, escritos pelo prprio
administrador. E, novamente, estes scripts utilizam o tar, gzip, rsync e outros.
justamente sobre estes scripts personalizados que vou falar aqui. Vamos comear com
alguns exemplos simples:
Para compactar o contedo de uma pasta, usamos o tar combinado com o gzip ou bzip2. O
tar agrupa os arquivos e o gzip os compacta. Os arquivos compactados com o gzip usam por padro
a extenso "tar.gz", enquanto os compactados com o bzip2 usam a extenso "tar.bz2". O bzip2
mais eficiente, chega a obter 10% ou mais de compresso adicional, mas em compensao bem
mais pesado: demora cerca de 3 vezes mais para compactar os mesmos arquivos. Voc escolhe entre
um e outro de acordo com a tarefa.
O comando para compactar uma parta similar ao "tar -zxvf" que usamos para
descompactar arquivos. Para compactar a pasta "arquivos/", criando o arquivo "arquivos.tar.gz", o
comando seria:
1 !ar -7cv$ ar+uivos#!ar#'7 ar+uivos"
O "c" indica que o tar deve criar um novo arquivo e o "v" faz com que exiba informaes na
tela enquanto trabalha. Se preferir comprimir em bz2, muda apenas a primeira letra; ao invs de "z"
usamos "j":
1 !ar -Acv$ ar+uivos#!ar#b72 ar+uivos"
Estes comandos seriam ideais para fazer um backup completo, de uma ou vrias pastas do
sistema, gerando um arquivo compactado que poderia ser armazenado num HD externo, gravado
num DVD ou mesmo transferido via rede para outro servidor.
Imagine agora um outro cenrio, onde voc precisa fazer backup dos arquivos de uma pasta
de trabalho diariamente. Os arquivos gerados no so muito grandes e voc tem muito espao
disponvel, mas necessrio que os backups dirios feitos em arquivos separados e sejam guardados
por um certo perodo, de forma que seja possvel recuperar um arquivo qualquer a partir da data.
Ao invs de ficar renomeando os arquivos, voc poderia usar um pequeno script para que os
arquivos fossem gerados j com a data e hora includa no nome do arquivo:
82
FERRAMENTAS TCNICAS
&'$'=[date N_V-_m-_d-_P"_M"_S[
cd 6mnt6bac3up
tar -7cvf trabalho-L:&'$'L"tar"g7 6mnt6hda-6trabalho6
A primeira linha do script cria uma varivel "DATA", contendo o resultado do comando
"date +%Y-%m-%d-%H.%M.%S". O comando date retorna a data e hora atual, como em "Sex Set
16 12:36:06 BRST 2005". A sada padro dele no muito adequada para usar em nomes de
arquivos, por isso usamos as opes para alterar o formato de sada, de modo que o resultado seja
"2005-09-16-12.37" (ano, ms, dia, hora, minuto, segundo). Usamos este valor no nome do arquivo
com o backup, de forma que, cada vez que voc chame o script, seja gerado um arquivo com a data
e hora em que foi gerado, sem a possibilidade de dois arquivos sarem com o mesmo nome.
O prximo passo fazer com que este script de backup seja executado diariamente de forma
automtica, o que pode ser feito usando o cron.
Em primeiro lugar, salve os comandos num arquivo de texto, que vamos chamar de
"backup.sh" e transforme-o num executvel usando o comando "chmod +x backup.sh".
Para que ele seja executado automaticamente todos os dias, copie-o para dentro da pasta
"/etc/cron.daily" e certifique-se de que o servio "cron" esteja ativo:
# cp -a backup-sh "e!c"cron#dail
# "e!c"ini!#d"cron s!ar!
Se preferir que o script seja executado apenas uma vez por semana, ou mesmo uma vez por
hora, use as pastas "/etc/cron.weekly" ou a "/etc/cron.hourly". Por padro, os scripts dentro da pasta
"/etc/cron.daily" so executados pouco depois das 6 da manh (o horrio exato varia de acordo com
a distribuio). Para alterar o horrio, edite o arquivo "/etc/crontab", alterando a linha:
2, - 9 9 9 root test -> 6usr6sbin6anacron `` run-parts --report 6etc6cron"dail%
O "25 6" indica o minuto e a hora. Se quiser que o script seja executado s 11 da noite, por
exemplo, mude para "00 23".
Neste exemplo usei a pasta "/mnt/backup" para salvar os arquivos. Esta pasta pode ser o
ponto de montagem de um HD externo ou de um compartilhamento de rede por exemplo. O seu
script pode conter os comandos necessrios para montar e desmontar a pasta automaticamente.
Imagine, por exemplo, que o backup sempre feito na primeira partio de um HD externo,
ligado na porta USB, que sempre detectada pelo sistema como "/dev/sda1". O script deve ser
capaz de montar a partio, gravar o arquivo de backup e depois desmont-la. Se por acaso o HD
no estiver plugado, o script deve abortar o procedimento. Para isso precisamos verificar se o HD
realmente foi montado depois de executar o comando "mount /dev/sda1 /mnt/sda1". Existem muitas
formas de fazer isso, uma simples simplesmente filtrar a sada do comando "mount" (que mostra
todos os dispositivos montados) usando o grep para ver se o "/mnt/sda1" aparece na lista. Se no
estiver, o script termina, caso esteja, ele continua, executando os comandos de backup:
mount 6dev6sda1 6mnt6sda1
montado=[mount ` grep 6mnt6sda1[
83
FERRAMENTAS TCNICAS
if C -7 L:montadoL EI then
e>it 1
else
&'$'=[date N_V-_m-_d-_P"_M[
cd 6mnt6bac3up
tar -7cvf trabalho-L:&'$'L"tar"g7 6mnt6hda-6trabalho6
umount 6mnt6sda1
fi
A partir da, sempre que voc deixar o HD externo plugado no final do expediente, o backup
feito e estar pronto no outro dia. Se esquecer de plugar o HD num dia, o script percebe e no faz
nada.
Se preferir que o script grave o backup num DVD, ao invs de simplesmente salvar numa
pasta, voc pode usar o "growisofs" para grav-lo no DVD. Neste caso, vamos gerar o arquivo numa
pasta temporria e delet-lo depois da gravao:
&'$'=[date N_V-_m-_d-_P"_M[
rm -rf 6tmp6bac3upI m3dir 6tmp6bac3upI cd 6tmp6bac3up
tar -7cvf trabalho-L:&'$'L"tar"g7 6mnt6hda-6trabalho6
growisofs -speed=2 -Z /dev/dvd -R -J "!mp"backup"!rabalho-412<C<4#!ar#'7
rm -rf 6tmp6bac3up
O "-speed=2" permite que voc especifique a velocidade de gravao do DVD, enquanto o "-
Z" cria uma nova seo. possvel usar o mesmo disco para gravar vrios backups (se o espao
permitir) usando a opo "-M" a partir da segunda gravao, que adiciona novas sees no DVD,
at que o espao se acabe.
O "/dev/dvd" indica o dispositivo do drive de DVD. A maioria das distribuies cria o link /
dev/dvd apontando para o dispositivo correto, mas, em caso de problemas, voc pode indicar
diretamente o dispositivo correto, como, por exemplo, "/dev/hdc". As opes "-R -J" adicionam
suporte s extenses RockRidge e Joilet.
Se o cron for configurado para executar o script todos os dias, voc s precisar se preocupar
em deixar o DVD no drive antes de sair.
Se preferir fazer os backups em CDR ("em que sculo voc vive?" ;), crie uma imagem ISO
usando o mkisofs e em seguida grave-a no CD usando o cdrecord, como em:
m3isofs -r -R -o trabalho"iso 6tmp6bac3up6trabalho-L:&'$'L"tar"g7
cdrecord dev=6dev6hdc trabalho"iso
Este comando do cdrecord funciona em distribuies recentes, que utilizam o Kernel 2.6 em
diante (com o mdulo ide-cd). No Kernel 2.4, era usada emulao SCSI para acessar o gravador de
CD, fazendo com que ele fosse visto e acessado pelo sistema como se fosse um gravador SCSI.
Neste caso, o comando de gravao seria "cdrecord dev=0,0,0 -data trabalho.iso", onde o "0,0,0" o
dispositivo do gravador, que voc descobre atravs do comando "cdrecord -scanbus".
Outro grande aliado na hora de programar backups o rsync. Ele permite sincronizar o
contedo de duas pastas, transferindo apenas as modificaes. Ele no trabalha apenas comparando
arquivo por arquivo, mas tambm comparando o contedo de cada um. Se apenas uma pequena
84
FERRAMENTAS TCNICAS
parte do arquivo foi alterada, o rsync transferir apenas ela, sem copiar novamente todo o arquivo.
Ele uma forma simples de fazer backups incrementais, de grandes quantidades de arquivos,
ou mesmo parties inteiras, mantendo uma nica cpia atualizada de tudo num HD externo ou
num servidor remoto. Este backup incremental pode ser atualizado todo dia e complementado por
um backup completo (para o caso de um desastre acontecer), feito uma vez por semana ou uma vez
por ms.
Para instalar o rsync, procure pelo pacote "rsync" no gerenciador de pacotes. No Debian
instale com um "apt-get install rsync" e no Mandriva com um "urpmi rsync".
Para fazer um backup local, basta informar a pasta de origem e a pasta de destino, para onde
os arquivos sero copiados:
1 rsnc -av "mn!"hda*"!rabalho "mn!"backup"
A opo "-a" (archive) faz com que todas as permisses e atributos dos arquivos sejam
mantidos, da mesma forma que ao criar os arquivos com o tar e o "v" (verbose) mostra o progresso
na tela.
A cpia inicial vai demorar um pouco, mais do que demoraria uma cpia simples dos
arquivos. Mas, a partir da segunda vez, a operao ser muito mais rpida.
Note que neste comando estamos copiando a pasta "trabalho" recursivamente para dentro da
"/mnt/backup", de forma que seja criada a pasta "/mnt/backup/trabalho". Adicionando uma barra,
como em "/mnt/hda6/trabalho/", o rsync copiaria o contedo interno da pasta diretamente para
dentro da "/mnt/backup".
Se algum desastre acontecer e voc precisar recuperar os dados, basta inverter a ordem das
pastas no comando, como em:
1 rsnc -av "mn!"backup"!rabalho "mn!"hda*"!rabalho"
O rsync pode ser tambm usado remotamente. Originalmente ele no utiliza nenhum tipo de
criptografia, o que faz com que ele no seja muito adequado para backups via internet. Mas este
problema pode ser resolvido com a ajuda do SSH, que pode ser utilizado como meio de transporte.
No toa que o SSH chamado de canivete suo, ele realmente faz de tudo.
Neste caso o comando ficaria um pouco mais complexo:
$ rsnc -av --rsh04ssh -C -l !u,4 "mn!"hda*"!rabalho B
!u,J1)2#1*8#&#1:"mn!"backup"
Veja que foi adicionado um parmetro adicional, o --rsh="ssh -C -l tux", que orienta o rsync
a utilizar o SSH como meio de transporte. O "-C" orienta o SSH a comprimir todos os dados
85
FERRAMENTAS TCNICAS
(economizando banda da rede) e a se conectar ao servidor remoto usando o login tux (-l tux).
Naturalmente, para que o comando funcione, preciso que o servidor esteja com o SSH habilitado,
e voc tenha um login de acesso.
Em seguida vem a pasta local com os arquivos, o endereo IP (ou domnio) do servidor e a
pasta (do servidor) para onde vo os arquivos.
Uma observao que usando apenas os parmetros "-av", o rsync apenas atualiza e grava
novos arquivos na pasta do servidor, sem remover arquivos que tenham sido deletados na pasta
local. Por um lado isto bom, pois permite recuperar arquivos deletados acidentalmente, mas por
outro pode causar confuso. Se voc preferir que os arquivos que no existem mais sejam deletados,
adicione o parmetro "--delete", como em:
$ rsnc -av --dele!e --rsh04ssh -C -l !u,4 "mn!"hda*"!rabalho B
!u,J1)2#1*8#&#1:"mn!"backup"
Para recuperar o backup, basta novamente inverter a ordem do comando, como em:
$ rsnc -av --rsh04ssh -C -l !u,4 !u,J1)2#1*8#&#1:"mn!"backup" B
"mn!"hda*"!rabalho
Originalmente, voc vai precisar fornecer a senha de acesso ao servidor cada vez que
executar o comando. Ao usar o comando dentro do script de backup, voc pode gerar uma chave de
autenticao, tornando o login automtico. Esta opo menos segura, pois caso algum consiga
copiar a chave (o arquivo .ssh/id_rsa dentro no home do usurio), poder ganhar acesso ao servidor.
De qualquer forma, para usar este recurso, rode o comando "ssh-keygen -t rsa" (que gera a
chave de autenticao) usando o login do usurio que executar o script de backup, deixando a
passprase em branco. Em seguida, copie-o para o servidor, usando o comando:
1 ssh-cop-id -i G"#ssh"id8rsa#pub !u,J1)2#1*8#&#1
A partir da, o script de backup pode ser executado diretamente, atravs do cron, pois no
ser mais solicitada a senha.
Usando o autofs/automount
O suporte montagem automtica do drive de CD-ROM e disquete usado a tempos em
vrias distribuies Linux. Apesar disso, muitas distribuies no trazem este recurso habilitado por
86
FERRAMENTAS TCNICAS
default, pois automount no o sistema mais estvel do mundo. Ele trava ou se confunde com uma
certa freqncia, fazendo com que seja necessrio ficar forando a montagem ou ejeo do CD
manualmente.
O Kurumin um exemplo de distribuio que no usa o automount por padro. Nele voc
encontra dois cones no Desktop para acessar o CD e ejet-lo.
Este cone para ejetar o CD, encontrado no Kurumin uma soluo para um problema
comum. No Linux voc no consegue desmontar, muito menos ejetar o CD-ROM enquanto existe
algum programa acessando os arquivos. Se voc esquecer uma janela do Konqueror ou uma
instncia do OpenOffice acessando algum arquivo do CD, voc vai ficar com ele preso at se fech-
la ou reiniciar a mquina. Isto irritante s vezes. Em muitos casos voc quer simplesmente uma
forma rpida de ejetar o CD, custe o que custar.
O cone para ejetar o CD roda os comandos: "fuser -k /mnt/cdrom; umount /mnt/cdrom;
eject /mnt/cdrom".
O "fuser" fecha qualquer programa que esteja acessando a pasta /mnt/cdrom, para que o CD-
ROM possa ser desmontado e ejetado. um sistema manual, mas que pelo menos funciona sempre,
de uma forma previsvel.
Mesmo assim, voc pode ativar o suporte montagem automtica de uma forma simples na
maioria dos casos.
O autofs/automount a combinao de um mdulo de Kernel e um conjunto de utilitrios e
arquivos de configurao, que so instalados com o pacote autofs.
Em primeiro lugar, certifique-se que o mdulo "autofs" ou "autofs4" est carregado. Rode o
comando "lsmod" e verifique se ele aparece na lista. Caso no esteja carregado, habilite-o com o
comando "modprobe autofs4" (ou "modprobe autofs", dependendo da distribuio) e adicione a
linha "autofs4" no final do arquivo "/etc/modules", para que ele seja carregado automaticamente
durante o boot.
Se este mdulo no estiver presente, as coisas se complicam, pois voc precisaria recompilar
o Kernel, instalando o patch e ativando o suporte a ele.
O prximo passo instalar o pacote "autofs" usando o gerenciador de pacotes includo na
sua distribuio. Nas derivadas do Debian instale usando o comando:
5 ap!-'e! ins!all au!o$s
No Slackware o pacote est disponvel dentro da pasta "extras", disponvel no segundo CD.
O autofs configurado atravs do arquivo /etc/auto.master. Um exemplo de configurao
para este arquivo :
5 6etc6auto"master
5 Kinha Hue ativa o automount para o C&-!FM:
"mn!"au!o "e!c"au!o#misc --!imeou!0%
87
FERRAMENTAS TCNICAS
A pasta "/mnt/auto" a pasta que ser usada como ponto de montagem quando um CD-
ROM for inserido. Voc pode usar qualquer pasta, como "/autofs" ou "/auto", por exemplo. Porm,
lembre-se de sempre usar uma pasta exclusiva, pois ao configurar o autofs para usar uma pasta com
outros arquivos ou pastas dentro, eles ficaro inacessveis at que ele seja desativado.
A opo seguinte, "/etc/auto.misc" indica um segundo arquivo, onde vo mais opes,
incluindo os drives que sero monitorados. Voc pode alterar o nome do arquivo, o importante seu
contedo. A ltima opo, "--timeout=5" especifica que depois de 5 segundos de inatividade o CD-
ROM ou disquete automaticamente desmontado, permitindo que voc use o boto de ejetar do
drive. Como disse, ele no conseguir ejetar o CD-ROM se houver algum aplicativo acessando o
CD (uma janela do gerenciador de arquivos acessando a pasta /mnt/auto/cdrom, por exemplo). Voc
primeiro ter que fechar tudo para depois conseguir ejetar o CD.
O arquivo "/etc/auto.misc" que estou usando no exemplo contem:
5 6etc6auto"misc
5 Dstas linhas cont]m as instru?@es necess^rias para ativar o
5 autofs para o C&-!FM e flopp%"
cdrom -fst%pe=iso*--#4ro4nosuid4nodev :6dev6cdrom
flopp% -fst%pe=auto4noatime4s%nc4umas3=# :6dev6fd#
Agora falta apenas iniciar o servio do autofs:
5 "e!c"ini!#d"au!o$s s!ar!
O CD-ROM ficar acessvel atravs da pasta "/mnt/auto/cdrom" e o disquete na pasta
"/mnt/auto/floppy", indicadas no segundo arquivo. Lembre-se de criar a pasta "/mnt/auto" caso ela
no exista.
Ao simplesmente acessar a pasta "/mnt/auto/" voc no ver o "cdrom". Para acessar o CD preciso
ir direto ao ponto, acessando a pasta "/mnt/auto/cdrom" diretamente. Para facilitar isso, voc pode
criar um link "cdrom" dentro do diretrio home, ou no desktop. Assim voc clica sobre o "cdrom" e
j vai direto pasta. Para isso, use o comando:
: ln -s "mn!"au!o"cdrom G"cdrom
Acessando dispositivos USB
Graas a todas as melhorias nas funes de deteco no prprio Kernel, alm do udev,
88
FERRAMENTAS TCNICAS
hotplug e outras ferramentas de configurao, acessar um pendrive ou instalar uma impressora ou
qualquer outro perifrico USB suportado uma tarefa simples, muitas vezes automatizada por
scripts includos nas distribuies.
Mesmo assim, importante entender como funciona o processo de deteco e aprender
como configurar dispositivos manualmente, a fim de corrigir problemas e personalizar o sistema.
Vamos em seguida ver como estes passos so automatizados atravs do hotplug e do udev.
Configurando manualmente
O primeiro passo para ativar qualquer dispositivo USB no Linux, carregar o suporte
prpria controladora USB da placa-me. No Kernel 2.6 existem trs mdulos diferentes destinados a
esta funo. O mdulo "ehci-hcd" o mais recente, que d suporte a controladores e dispositivos
USB 2.0 em geral. Ele o mdulo usado na grande maioria dos casos.
No caso de micros antigos, que ainda utilizam controladoras USB 1.1, entram em ao os
mdulos "ohci-hcd" e "uhci-hcd". A diferena entre os dois que o ohci-hcd d suporte aos
controladores usados pela Via e outros fabricantes, enquanto o uhci-hcd d suporte aos
controladores USB usados pela Intel. Em distribuies antigas, baseadas no Kernel 2.4, os mdulos
mudam de nome, passam a ser "usb-ohci" e "usb-uhci".
A diferena entre o USB 1.1 e o 2.0 o brutal aumento na capacidade de transmisso. O
padro USB original foi desenvolvido como um substituto para as portas seriais, com o objetivo de
conectar impressoras, teclados, mouses e similares. Com o tempo, o USB comeou a ser usado para
pendrives, HDs externos, placas de rede, cmeras e outros perifricos "rpidos", capazes de
transmitir dados a muito mais que 12 megabits por segundo.
O USB 2.0 surgiu como um padro "definitivo", que opera a 480 megabits (cerca de 50 MB/
s reais, descontando o overhead do gerado protocolo de comunicao e pacotes de controle). Os
perifricos USB 2.0 so compatveis com placas antigas e vice-versa, mas sempre nivelando por
baixo. Seu pendrive USB 1.1 vai continuar trabalhando a 12 megabits se conectado numa
controladora USB 2.0.
Os trs mdulos so capazes de detectar os controladores a que do suporte e por isso
convivem muito bem entre si. Voc pode tentar simplesmente carregar os trs em seqncia,
comeando pelo "ehci-hcd". Ao encontrar uma controladora antiga, ou que no seja compatvel, ele
vai automaticamente passar o controle a um dos outros dois.
# modprobe ehci-hcd
# modprobe ohci-hcd
# modprobe uhci-hcd
Em seguida entra em ao o mdulo "usbcore" que oferece funes genricas, usadas por
todos os dispositivos USB, incluindo chamadas de sistema para conectar ou desconectar um
dispositivo, reservar banda de transmisso e outras funes.
89
FERRAMENTAS TCNICAS
O mdulo usbcore se encarrega de detectar novos dispositivos USB conforme ele so
conectados, criando uma lista dentro da pasta "/proc/bus/usb", que utilizada por programas de
deteco, como o hotplug e o udev. Caso necessrio, monte-a manualmente, usando o comando:
# moun! -! usb$s "proc"bus"usb "proc"bus"usb
A partir da, voc pode carregar os drivers para os dispositivos conectados:
Os mdulos "usbmouse" e "usbkbd" ativam o suporte genrico a mouses e teclados USB.
Existe tambm um mdulo mais antigo, o "usbhid", que alm de prover comunicao com nobreaks
e alguns outros perifricos, oferece as funes bsicas usadas por mouses e teclados. Completando,
temos o mdulo "joydev", que d suporte a joysticks.
Caso voc tenha um conversor serial/USB, use o mdulo "serial". Os adaptadores USB para
teclados e mouses PS/2 no precisam de drivers adicionais, mas alguns mouses PS/2 no funcionam
em conjunto com eles, pois necessrio a incluso de um circuito adicional.
Em caso de problemas com o teclado ou mouse, verifique tambm se a opo "USB
LEGACY SUPPORT" est desativada no setup. Esta opo ativa uma camada de compatibilidade,
destinada a fazer o teclado e mouse funcionarem no MS-DOS e Windows 9x, que em algumas
placas faz com que o sistema deixe de detectar os dispositivos e ativar os drivers necessrios durante
o boot.
O mdulo usbserial habilita suporte comunicao com Palms, Pocket PCs (com o
Windows CE) e outros dispositivos que transfiram dados atravs da porta USB, usando-a como se
fosse uma porta serial. A comunicao com estes dispositivos (do ponto de vista do sistema) feita
de uma forma diferente que seria com um dispositivo de armazenamento, como um pendrive, por
exemplo. O carto de memria visto como se fosse um HD externo, enquanto no caso do Palm a
porta USB usada como substituta para uma porta serial.
Complementando o usbserial, geralmente necessrio um segundo mdulo, que habilita o
dispositivo. Para fazer sincronismo com um Palm, ative o mdulo "visor" e, para um Pocket PC, o
mdulo "ipaq". Com o mdulo carregado, voc pode usar um programa de sincronismo, como o
Kpilot, ou o SynCE. Os outros drivers disponveis vo na pasta
"/lib/modules/2.6.x/kernel/drivers/usb/serial".
O primeiro dispositivo serial conectado aparece como o dispositivo "/dev/ttyUSB0", o
segundo como "/dev/ttyUSB1" e assim por diante. Configure o programa de sincronismo para
utilizar uma destas portas e tente abrir a conexo.
Uma dica que, no caso dos Palms voc precisa primeiro pressionar o boto de hotsync no
Palm (o que faz com que ele seja detectado), para s depois conseguir estabelecer a conexo dentro
do programa de sincronismo.
Um mdulo similar o "usblp", que ativa o suporte genrico a impressoras USB, que ficam
acessveis atravs dos devices "/dev/usb/lp0", "/dev/usb/lp1", etc. Para o suporte a scanners, existe o
mdulo "scanner", que ativa o device "/dev/usbscanner". Um problema comum que os
90
FERRAMENTAS TCNICAS
dispositivos ficam por padro disponveis apenas para o root. Para imprimir ou usar o scanner
usando um login de usurio, preciso abrir as permisses do dispositivo, como em "chmod 666
/dev/usbscanner".
No caso das webcams, so usados os mdulos "spca5xx", "stv680", "ultracam",
"quickcam", "ibmcam", "konicawc", "sqcam" ou "vicam", de acordo com o modelo. O mdulo
"spca5xx" o que d suporte a maior parte dos modelos, mas ele no vem instalado por padro em
muitas distribuies. Veja como instal-lo manualmente no captulo sobre drivers.
Existem no mercado algumas caixas de som e headsets USB que, ao contrrio das caixas e
microfones ligados na placa de som, so detectados como dispositivos de udio independentes,
como se fossem uma segunda placa de som. Estes dispositivos so, de uma forma geral, bem
suportados no Linux, atravs do mdulo "snd-usb-audio", que faz parte do Alsa.
Alguns drivers mais incomuns so o "aiptek", que d suporte a vrios tablets USB, o
"rt2570", que d suporte s placas wireless USB com chipset RT2500 (Ralink) e o rtl8150, que d
suporte aos adaptadores de rede USB com o chipset de mesmo nome. Voc pode encontrar uma lista
com vrios outros drivers incomuns no: http://www.qbik.ch/usb/devices/drivers.php.
Para acessar pendrives, HDs USB e tambm cmeras e outros dispositivos compatveis com
o protocolo storage, usamos o mdulo "usb-storage". Ele trabalha em conjunto com o mdulo "sg"
(SCSI Generic), que permite que os dispositivos sejam acessados usando o driver de acesso a
dispositivos SCSI. Voc pode pensar no mdulo usb-storage como uma espcie de adaptador, que
faz com que dispositivos de armazenamento USB sejam vistos pelo sistema como HDs SCSI.
O primeiro dispositivo fica acessvel como "/dev/sda", o segundo como "/dev/sdb" e assim
por diante. No caso de adaptadores para cartes de diversos formatos, cada conector visto pelo
sistema como um dispositivo independente. O carto sd pode ficar acessvel atravs do "/dev/sdc" e
o memory stick atravs do "/dev/sdd", por exemplo, mesmo que nenhum dos outros encaixes esteja
sendo usado. Para acessar, basta montar o dispositivo correto, como em:
# moun! "dev"sda1 "mn!"sda1
Uma dica que, no Kernel 2.6, sempre que um pendrive ou carto detectado, criada
automaticamente uma pasta dentro do diretrio "/sys/block", como em "/sys/block/sda". Dentro da
pasta voc encontra o arquivo "size", que contm a capacidade do dispositivo (em blocos de 512
bytes) e uma sub-pasta para cada partio, como "/sys/block/sda/sda1". No captulo sobre shell
script, veremos um exemplo de script que cria um cone no desktop automaticamente, sempre que
um pendrive conectado, baseado justamente nestas informaes.
Voltando explicao inicial, o pendrive ou carto pode ser particionado normalmente,
atravs do cfdisk, gparted ou qualquer outro particionador, como se fosse realmente um HD externo.
O mais comum que seja usada uma nica partio, formatada em FAT32, o que permite
que ele seja acessado tanto no Linux quanto no Windows. Mas nada impede que voc formate seu
pendrive em ReiserFS ou qualquer outro sistema de arquivos. Lembre-se de que voc pode formatar
partio usando os comandos "mkfs.ext3", "mkfs.reiserfs" ou "mkfs.vfat" (para FAT32).
91
FERRAMENTAS TCNICAS
Uma desvantagem que o ReiserFS, EXT3, XFS e JFS consomem uma quantidade de
espao relativamente grande para armazenar a estrutura do sistema de arquivos, deixando menos
espao til disponvel. Eles so mais apropriados para formatar HDs e unidades de maior
capacidade.
Alguns mp3players baratos utilizam um padro de formatao chamado "superfloppy", onde
o dispositivo formatado diretamente em FAT32 (como se fosse um disquete gigante), ao invs de
ser criada uma partio. Nestes casos, voc acessa os arquivos diretamente pelo "/dev/sda", ao invs
do "/dev/sda1".
Se voc tiver a curiosidade de particionar o mp3player, criando uma partio e formatando,
vai perceber que embora consiga montar e acessar os dados normalmente, o mp3player no vai mais
conseguir achar os arquivos das msicas. Para voltar formatao padro, use o comando
"mkfs.vfat -I /dev/sda" onde o "-I" (i maisculo) especifica o tipo de formatao.
Outra dica que, a partir do Kernel 2.6.12 houve uma mudana importante no modo padro
de acesso a pendrives, mp3players e outros dispositivos de armazenamento USB. Para aumentar a
segurana da gravao de dados, muitas distribuies montam os drives usando a opo "sync", que
sincroniza a gravao dos dados, diminuindo a probabilidade de perder arquivos ao remover o
pendrive sem desmontar.
O problema que na nova verso do driver usb-storage, a opo passou ser seguida a risca,
fazendo com que a cada setor gravado, seja feita uma atualizao na tabela de alocao de arquivos
da partio. Isto faz com que a velocidade de gravao fique assustadoramente baixa, algo em torno
de 40 kb/s nos pendrives USB 1.1 e de 200 a 300 kb/s nos 2.0.
A soluo passar a montar os pendrives usando a opo "async", se necessrio via
terminal, usando o comando:
# moun! -o asnc "dev"sda1 "mn!"sda1
Alm do problema da lentido, montar os drives com a opo "sync" pode causar danos
depois de algum tempo de uso, pois as freqentes gravaes aos primeiros setores (onde est a
tabela de alocao) podem rapidamente exceder o limite de gravaes das memrias flash mais
baratas, inutilizando o pendrive, como reportado aqui:
http://readlist.com/lists/vger.kernel.org/linux-kernel/22/111748.html
Note que este "problema" s afeta os Kernels recentes, a partir do 2.6.12. Voc s precisa se
preocupar com isso se est usando uma verso recente e est tendo o problema de lentido ao gravar
dados no pendrive que citei.
92
FERRAMENTAS TCNICAS
Devfs e hotplug
Podemos dividir o processo de ativao de um dispositivo no Linux em trs passos: em
primeiro lugar carregado o mdulo que d suporte a ele, em seguida criado um device (como
"/dev/sda"), um arquivo especial atravs do qual ele acessado e, opcionalmente, executado algum
script ou ao adicional.
Ao plugar uma webcam, seria carregado (por exemplo) o mdulo "spca5xx" e criado o
device "/dev/video0", atravs do qual os programas podem acessar a cmera. Ao plugar um pendrive
seria carregado o mdulo "usb-storage" e, assim por diante. Em muitos casos, preciso carregar
mais de um mdulo. Para sincronizar o Kpilot com um Palm USB, por exemplo, preciso carregar
os mdulos usbserial e visor.
Um device a combinao de dois endereos de Kernel: um major number e um minor
number. O major number usado para indicar uma categoria de dispositivos, enquanto o minor
number identifica o dispositivo em si. Por exemplo, o major number "180" usado em relao a
impressoras USB. A primeira impressora conectada recebe o device "/dev/usb/lp0", que formado
pela combinao do major number "180" e o minor number "1". A segunda impressora conectada
recebe o device "/dev/usb/lp1", que formado pelo major number "180" e pelo minor number "2" e
assim por diante.
Tradicionalmente, o responsvel por criar e manter os devices correspondentes a cada
dispositivo era o devfs. Ele cumpre a funo usando uma abordagem bem simples: o diretrio
"/dev" contm devices prontos para todos os dispositivos suportados, mesmo que poucos deles
estejam realmente em uso. Os devices vo sendo atribudos conforme novos dispositivos so
ativados.
O hotplug entra em cena com a funo de detectar novos dispositivos. ele o responsvel
por carregar os mdulos apropriados, ajustar permisses e executar tarefas diversas sempre que um
novo dispositivo conectado. Sem o hotplug, seu pendrive ainda funciona normalmente, mas voc
passa a ter o trabalho de ter que carregar os mdulos e montar o dispositivo sempre que quiser
acess-lo; sua impressora passa a aparecer no gerenciador de impresso apenas depois que voc
carrega os mdulos apropriados e a configura manualmente atravs do kaddprinterwizard (ou outro
gerenciador), e assim por diante.
O hotplug surgiu originalmente como um script responsvel por detectar e ativar dispositivos
USB conforme eram plugados no micro. Embora tenha um funcionamento interno relativamente
simples, o hotplug se mostrou bastante eficiente e passou a ser expandido para assumir a
configurao de outros dispositivos. Atualmente, o hotplug no se limita a apenas pendrives,
impressoras e cmeras, mas d suporte a todo tipo de dispositivo firewire, PCMCIA, PCI e SCSI.
A partir do Kernel 2.6, o hotplug se tornou um componente padro do sistema. Ele vem pr-
instalado em qualquer distribuio que se preze. Mesmo o Slackware que espartano em termos de
ferramentas automticas de deteco passou a inclu-lo a partir da verso 9.2. Verifique apenas se o
servio "hotplug" est ativo e, se necessrio, ative-o com o comando:
93
FERRAMENTAS TCNICAS
# "e!c"ini!#d"ho!plu' s!ar!
ou
# "e!c"rc#d"rc#ho!plu' s!ar!
(no Slackware)
Os arquivos de configurao do hotplug esto concentrados dentro da pasta "/etc/hotplug".
O hotplug trabalha com os cdigos de identificao dos dispositivos, carregando mdulos ou
executando scripts com funes diversas sempre que dispositivos conhecidos so conectados.
Na maioria das distribuies, includo o arquivo "/etc/hotplug/usb.distmap", que contm
uma grande quantidade de regras pr-configuradas. Voc pode incluir regras adicionais usando o
arquivo "/etc/hotplug/usb.usermap". A possibilidade mais interessante executar scripts
personalizados quando determinados dispositivos so plugados. Isto permite fazer desde coisas
simples, como tocar um som, ou abrir um determinado programa, at incluir scripts mais
complexos, que fazem backups automticos ou outras operaes complicadas. Veremos isso com
mais detalhes no captulo sobre shell script.
Outro arquivo til dentro da configurao do hotplug o "/etc/hotplug/blacklist", onde so
especificados mdulos que no devem ser carregados automaticamente pelo hotplug. Este arquivo
permite solucionar problemas causados por mdulos "mal comportados", que causam travamentos
ou problemas diversos ao serem carregados. Isto relativamente comum com relao a mdulos
proprietrios, como os drivers para softmodems e para algumas placas wireless, que em muitas
situaes chegam a congelar o sistema caso o dispositivo a que do suporte no esteja presente, ou
ao tentarem (incorretamente) ativar um dispositivo similar, mas que no inteiramente compatvel
com ele.
Um exemplo o mdulo "Intel537", que d suporte a modems Intel Ambient. Os modems
Intel Ambient "legtimos" possuem um chip DSP grande, com a marca "Ambient" decalcada.
Existem muitos modems com chips Intel537AA ou 537EA (fceis de reconhecer, pois possuem
chips bem menores) que no so compatveis com o driver. Ao tentar carregar o mdulo Intel537
com um destes modems instalado, o sistema em muitos casos simplesmente trava, mesmo que o
modem nem esteja em uso.
Em geral, as distribuies j vm com o arquivo populado com vrios drivers que
reconhecidamente possuem problemas. No Kurumin, por exemplo, incluo os mdulos dos
softmodems, que podem ser carregados manualmente atravs dos cones no menu:
ltmodem
Intel,2J
pctel
slamr
Alm dos perifricos USB, o hotplug capaz de detectar outros tipos de dispositivos, que
so configurados atravs de arquivos como o pci.agent, scsi.agent, tape.agent, ieee1394.agent,
net.agent e wlan.agent. Todos estes arquivos so na verdade scripts, que so executados durante o
boot e conforme o hotplug encontra novos dispositivos. Individualmente, os scripts so rpidos, mas
execut-los em massa faz com que a inicializao das verses recentes do hotplug seja relativamente
demorada, aumentando o tempo de boot da mquina. Conforme o hotplug cresce em complexidade
94
FERRAMENTAS TCNICAS
e incorpora mais scripts, a tendncia que o tempo se torne cada vez maior.
Isso apontado como um dos pontos negativos do hotplug em relao ao udev, que vem
ganhando espao e substituindo-o em muitas distribuies.
Entendendo o udev
Recentemente, surgiu um terceiro componente, o udev, que substitui o devfs e assume parte
das funes do hotplug, com a opo de se integrar a ele, oferecendo suporte aos scripts e outras
personalizaes, ou substitu-lo completamente, opo adotada por muitas distribuies.
A principal vantagem do udev que nele possvel definir devices "fixos" para cada
perifrico. Sua impressora pode passar a receber sempre o device "/dev/printer/epson" e seu
pendrive o "/dev/pendrive", mesmo que voc tenha outros dispositivos instalados. possvel
tambm executar scripts quando eles so conectados ou removidos, criando um leque muito grande
de opes.
Os devices so criados conforme os perifricos so conectados, fazendo com que o /dev
contenha entrada apenas para os perifricos detectados.
No devfs, o diretrio "/dev" contm devices para todo tipo de componente que suportado
pelo Kernel, resultando num nmero absurdo de pastas e devices dentro do diretrio. Outra
limitao que os perifricos podem ser associados a devices diferentes, de acordo com a ordem em
que so plugados. Digamos que voc tenha um pendrive e um HD externo, ambos USB. Se voc
plugar o pendrive primeiro, ele ser o "/dev/sda", enquanto o HD ser o "/dev/sdb". Mas, se voc
inverter a ordem, o HD que ser o "/dev/sda". Se voc tiver um HD serial ATA, ento o HD ser o
"/dev/sda", o pendrive ser o "/dev/sdb" e o HD externo ser o "/dev/sdc" e, assim por diante. Essa
confuso toda torna complicado fazer um script de backup ou qualquer outra coisa que dependa do
pendrive estar disponvel sempre no mesmo lugar.
Outra vantagem do udev que, por ser escrito em C e ter um funcionamento interno muito
mais simples, ele tambm mais rpido que o hotplug, o que faz diferena em muitas situaes.
A parte em que o udev e o hotplug se sobrepem com relao a automatizao de tarefas.
O hotplug suporta o uso de scripts, que so executados sempre que um dispositivo em particular, ou
algum dispositivo dentro de uma categoria definida, plugado. Estes scripts permitem fazer com
que seja criado um cone no desktop ao plugar um pendrive, fazer com que o configurador de
impressoras seja aberto quando uma nova impressora USB conectada, entre inmeras outras
possibilidades.
O udev suporta o uso de "regras", que, entre outras coisas, tambm permitem o uso de
scripts. Ele oferece compatibilidade com os scripts do hotplug, mas esta funcionalidade no vem
ativada em todas as distribuies. De uma forma geral, o udev est sendo adotado rapidamente em
todas as principais distribuies e, em distribuies que o utilizam, mais recomendado trabalhar
com regras do udev do que com scripts do hotplug. Mais adiante, no captulo sobre shell script,
veremos com mais detalhes como escrever tanto scripts para o hotplug quanto regras para o udev.
95
FERRAMENTAS TCNICAS
Em algumas distribuies, o udev configurado de forma a substituir o hotplug
completamente, enquanto outras optam por integrar os dois. Nestes casos, o hotplug deixa de ser um
servio separado e passa a ser iniciado juntamente com o servio "udev":
# "e!c"ini!#d"udev s!ar!
Uma observao , que ao contrrio do devfs e mesmo do hotplug, o udev independente do
Kernel, ele pode ser instalado, removido e atualizado rapidamente, como qualquer outro programa.
Se algum perifrico no estiver sendo detectado ou voc estiver tendo problemas gerais,
experimente atualizar o pacote "udev" a partir do repositrio com atualizaes para a distribuio
em uso. Nas distribuies derivadas do Debian, voc pode atualiz-lo via apt-get:
# ap!-'e! ins!all udev
Na maior parte das distribuies, voc encontrar vrios arquivos com regras pr-
configuradas dentro do diretrio "/etc/udev", destinados a executar funes previamente executadas
pelo devfs, hotplug e scripts diversos. O arquivo "/etc/udev/devfs.rules", por exemplo, tem a funo
de criar os devices de acesso a diversos dispositivos, incluindo as portas seriais e paralelas, mouses
PS/2, joysticks e muitos outros perifricos no plug-and-play.
O arquivo "/etc/udev/links.conf" permite definir devices adicionais manualmente, de forma
que eles sejam recriados a cada boot. Isto necessrio pois no udev o diretrio /dev dinmico,
fazendo que dispositivos no utilizados sejam perdidos a cada reboot.
Uma configurao comum, adicionar regras que criam os devices utilizados pelo VMware,
de forma que eles no se percam ao reiniciar, como em:
M vmmon --mode --- c 1# 1-,
M vmnet# --mode --- c 11* #
M vmnet1 --mode --- c 11* 1
M vmnet+ --mode --- c 11* +
As regras permitem tambm criar links. Se voc quer que seja criado o link "/dev/modem",
apontando para o modem que est na porta "/dev/ttyS3", adicione:
K modem 6dev6tt%S2
A as letras "L" e "M" no incio das linhas indicam o tipo de dispositivo que ser criado. O
"L" indica que estamos falando de um dispositivo de caracteres (que incluem modems, palms e tudo
que visto pelo sistema como um dispositivo serial) e o "M" indica um dispositivo de bloco, como
uma partio num HD ou pendrive, ou ainda uma interface de rede virtual, como no caso do
VMware. O "--mode" indica as permisses de acesso, enquanto os dois nmeros depois do "c"
indicam o major e minor number, os mesmos endereos que so fornecidos ao criar o dispositivo
manualmente usando o comando "mknod".
96
FERRAMENTAS TCNICAS
Renomeando interfaces de rede com o udev
Os nomes atribudos s placas de rede no Linux sempre causarem uma certa dose de
transtornos para quem utiliza duas ou mais placas, sobretudo se forem duas placas com o mesmo
chipset.
Tradicionalmente, as placas de rede recebem nomes como "eth0" e "eth1", que so
atribudos conforme o sistema detecta as placas durante o boot. Isso significa que, de acordo com a
distribuio usada, as placas podem trocar de posio, sem falar que comum que os nomes
troquem ao reiniciar a mquina, fazendo com que a placa eth1 passe a ser vista como eth0 e vice-
versa, quebrando toda a configurao da rede.
Com a introduo do udev, as trocar de nomes ao reiniciar se tornaram ainda mais comuns.
Cheguei a ver a placa wireless de um notebook Centrino trocar de nome trs vezes em trs reboots:
primeiro eth2, depois eth1, em seguida eth0 e novamente eth1.
Antigamente, a soluo para o problema era criar aliases para as placas de rede no arquivo "/
etc/modules.conf", relacionando cada interface ao driver usado, como em:
alias eth# via-rhine
alias eth1 +12*too
Entretanto, os aliases no ajudavam muito em casos em que eram utilizadas duas placas
iguais, sem falar que esta configurao no funciona mais em distribuies recentes, que utilizam o
udev. Nelas, podemos atribuir os nomes de forma muito mais confivel adicionando regras do udev.
As regras podem ser criadas com base no endereo MAC de cada placa de rede (a forma
mais confivel, j que o MAC s muda ao trocar de placa), ou atravs do mdulo usado por ela.
Voc pode descobrir o endereo MAC das placas rapidamente atravs do comando
"ifconfig". Para descobrir o mdulo, voc pode fazer uma pesquisa no Google, ou usar o comando
"ethtool -i", como em:
# e!h!ool -i e!h1
driver: ip-22&&
version: git-1"1"1
firmware-version: 'BM:*"#"2"- .Mar 22 2##,/
bus-info: ####:#1:#,"#
O ethtool no vem instalado por padro em todas as distribuies, mas normalmente est
disponvel como pacote extra nos repositrios. Nas distribuies derivadas do Debian voc pode
instala-lo via apt-get: apt-get install ethtool.
Agora que j sabe o MAC e o driver de cada uma das placas, crie o arquivo
"/etc/udev/rules.d/z99-network.rules", onde vo as regras.
97
FERRAMENTAS TCNICAS
Para relacionar com base no endereo MAC, adicione linhas como:
SUBSVS$DM==LnetL4 SVS<SSaddressU==L##:1,:##:)b:-+:dbL4
('MD=Lipw#L
Para relacionar com base no mdulo usado (o que s funciona ao usar duas placas diferentes), use
regras como:
SUBSVS$DM==LnetL4 &!ID!==Lipw22##L4 ('MD=Lipw#L
O udev l todos os arquivos dentro da pasta "/etc/udev/rules.d" e processa todas as regras
contidas neles. A opo SUBSYSTEM=="net" especifica que a regra s se aplica a placas de rede.
Usamos em seguida a opo "SYSFS{address}==" ou "DRIVER==" para especificar a informao
que permite ao sistema diferenciar a placa desejada das demais instaladas no sistema. Finalmente, a
opo "NAME=" especifica o nome que passar a ser usado pela placa.
Imagine que voc tem uma placa Realtek e uma SiS900. Para atribuir os nomes baseado no
endereo MAC, voc usaria as regras:
SUBSVS$DM==LnetL4 SVS<SSaddressU==L##:D#:J&:*B:<*:#)L4
('MD=Lrtl#L
SUBSVS$DM==LnetL4 SVS<SSaddressU==L##:11:&+:)1:,2:J+L4
('MD=Lsis#L
Ao atribuir com base no mdulo, voc usaria as regras:
SUBSVS$DM==LnetL4 &!ID!==L+12*tooL4 ('MD=Lrtl#L
SUBSVS$DM==LnetL4 &!ID!==Lsis*##L4 ('MD=Lsis#L
Nos exemplos, usei "ipw0", "rtl0" e "sis0" como nomes para as placas, mas voc pode
atribuir qualquer nome. O nico porm que algumas ferramentas de configurao de rede no
encontram as placas caso elas usem nomes fora do padro. Neste caso, voc pode usar nomes mais
comuns, como "eth2" e "eth3", desde que diferentes dos que as placas usavam anteriormente, para
evitar situaes onde o udev possa tentar atribuir o mesmo nome s duas placas.
Para que a alterao entre em vigor, necessrio recarregar os mdulos das placas, ou
simplesmente reiniciar o micro. Naturalmente, voc precisar reconfigurar a rede, mas em
compensao, s precisar fazer isso uma vez ;).
Fazendo backup e recuperando a MBR e tabela de parties
Ao comprar um novo HD, voc precisa primeiro format-lo antes de poder instalar qualquer
sistema operacional. Existem vrios programas de particionamento, como o qtparted, gparted,
cfdisk e outros.
Os programas de particionamento salvam o particionamento na tabela de partio, gravada
no incio do HD. Esta tabela contm informaes sobre o tipo, endereo de incio e final de cada
98
FERRAMENTAS TCNICAS
partio. Depois do particionamento, vem a formatao de cada partio, onde voc pode escolher o
sistema de arquivos que ser usado em cada uma (ReiserFS, EXT3, FAT, etc.).
Ao instalar o sistema operacional, gravado mais um componente: o gerenciador de boot,
responsvel por carregar o sistema durante o boot.
Tanto o gerenciador de boot quanto a tabela de particionamento do HD so salvos no
primeiro setor do HD, a famosa trilha MBR, que contm apenas 512 bytes. Destes, 446 bytes so
reservados para o setor de boot, enquanto os outros 66 bytes guardam a tabela de partio.
Ao trocar de sistema operacional, voc geralmente subscreve a MBR com um novo
gerenciador de boot, mas a tabela de particionamento s modificada ao criar ou deletar parties.
Caso por qualquer motivo, os 66 bytes da tabela de particionamento sejam subscritos ou
danificados, voc perde acesso a todas as parties do HD. O HD fica parecendo vazio, como se
tivesse sido completamente apagado.
Para evitar isso, voc pode fazer um backup da trilha MBR do HD. Assim, voc pode
recuperar tudo caso ocorra qualquer eventualidade. Para fazer o backup, use o comando:
5 dd i$0"dev"hda o$0backup#mbr bs0%12 coun!01
O comando vai fazer uma cpia dos primeiros 512 bytes do "/dev/hda" no arquivo
"backup.mbr". Se o seu HD estivesse instalado na IDE secundria (como master), ele seria visto
pelo sistema como "/dev/hdc". Basta indicar a localizao correta no comando.
Voc pode salvar o arquivo num disquete ou pendrive, mandar para a sua conta do gmail,
etc. Caso no futuro, depois da ensima reinstalao do Windows XP, vrus, falha de hardware ou de
um comando errado a tabela de particionamento for pro espao, voc pode dar boot com o CD do
Kurumin e regravar o backup com o comando:
5 dd i$0backup#mbr o$0"dev"hda
Lembre-se de que o backup vai armazenar a tabela de particionamento atual. Sempre que voc
reparticionar o HD, no se esquea de atualizar o backup.
99
FERRAMENTAS TCNICAS
Usando o Gpart
Caso o pior acontea, a tabela de particionamento seja perdida e voc no tenha backup,
ainda existe uma esperana. O Gpart capaz de recuperar a tabela de partio e salv-la de volta no
HD na maioria dos casos. Voc pode execut-lo dando boot pelo CD do Kurumin, ou baix-lo no:
http://www.stud.uni-hannover.de/user/76201/gpart/#download.
Baixe o "gpart.linux" que o programa j compilado. Basta marcar a permisso de
execuo para ele:
5 chmod 6, 'par!#linu,
Nas distribuies derivadas do Debian, voc pode instal-lo pelo apt-get:
# ap!-'e! ins!all 'par!
Execute o programa indicando o HD que deve ser analisado:
5 #"'par!#linu, "dev"hda
(ou simplesmente "gpart /dev/hda" se voc tiver instalado pelo apt-get)
O teste demora um pouco, pois ele precisar ler o HD inteiro para determinar onde comea e
termina cada partio. No final, ele exibe um relatrio com o que encontrou:
1rimar% partition.1/
t%pe: ##J.#>#J/.FS62 P1<S4 ($<S4 a(; or 'dvanced U(I;/
si7e: 21),mb 5s.-))2###/ s.-2--))2#-2/
chs: .#6161/-.1#2261,6-2/d .#6161/-.-2*#61)6-1/r
1rimar% partition.2/
t%pe: 121.#>+2/.Kinu> e>t2 files%stem/
si7e: )J+mb 5s.*J**-)/ s.1-J2*J2#-1JJ1*-*2/
chs: .1#2261,6-2/-.1#2261,6-2/d .1--#-61)61/-.1J,J*6#6-2/r
1rimar% partition.2/
t%pe: 12#.#>+2/.Kinu> swap or Solaris6>+-/
si7e: )J+mb 5s.*J*+*-/ s.1JJ1*J,+-1+-**-,2/
chs: .1#2261,6-2/-.1#2261,6-2/d .1J,J*6261/-.1+,,1626,J/r
Se as informaes estiverem corretas, voc pode salvar a tabela no HD usando o parmetro "-W":
5 'par! -K "dev"hda "dev"hda
Veja que preciso indicar o HD duas vezes. Na primeira voc indica o HD que ser
vasculhado e em seguida em qual HD o resultado ser salvo. Em casos especiais, onde voc tenha
dois HDs iguais, por exemplo, voc pode gravar num segundo HD, com em: "gpart -W /dev/hda
/dev/hdc".
O gpart no muito eficiente em localizar parties extendidas (hda5, hda6, etc.). Em boa
parte dos casos ele s vai conseguir identificar as parties primrias (hda1, hda2, hda3 e hda4).
Nestas situaes, voc pode usar o cfdisk ou outro programa de particionamento para criar
100
FERRAMENTAS TCNICAS
manualmente as demais parties (apenas crie as parties e salve, no formate!). Se voc souber
indicar os tamanhos aproximados, principalmente onde cada uma comea, voc conseguir acessar
os dados depois.
Usando o Testdisk
Outra ferramenta "sem preo" para recuperao de parties o Testdisk. Embora a funo
seja a mesma, ele utiliza um algoritmo bastante diferente para detectar parties, o que faz com que
ele funcione em algumas situaes em que o Gpart no detecta as parties corretamente e vice-
versa. Por isso vale a pena ter ambos na caixa de ferramentas.
Lembre-se que ambos so capazes de recuperar parties apenas enquanto as informaes
no so subscritas. Se voc acabou de apagar a sua partio de trabalho, bem provvel que consiga
recuper-la, mas se o HD j tiver sido reparticionado e formatado depois do acidente, as coisas
ficam muito mais complicadas. Sempre que um acidente acontecer, pare tudo e volte a usar o HD s
depois de recuperar os dados.
O Testdisk permite recuperar desde parties isoladas (incluindo as extendidas), at toda a
tabela de partio, caso o HD tenha sido zerado. Ele suporta todos os principais sistemas de
arquivos, incluindo FAT16, FAT32, NTFS, EXT2, EXT3, ReiserFS, XFS, LVM e Linux Raid.
A pgina oficial a http://www.cgsecurity.org/testdisk.html onde, alm da verso
Linux, voc encontra verses para Windows, DOS e at para o Solaris.
Embora no seja exatamente um utilitrio famoso, o Testdisk includo em muitas
distribuies. Nos derivados do Debian, voc pode instal-lo via apt-get:
# ap!-'e! ins!all !es!disk
Para instalar a verso em cdigo fonte, alm dos compiladores bsicos (veja mais detalhes
no captulo 3), necessrio ter instalado o pacote "ncurses-dev" ou "libncurses-dev". A instalao
propriamente dita feita usando a receita tradicional: descompactar o arquivo, acessar a pasta criada
e rodar os comandos "./configure", "make" e "make install".
Vamos a um exemplo prtico de como recuperar duas parties deletadas "acidentalmente".
Onde o cfdisk est mostrando "Free Space" existem na verdade as parties "/dev/hda2" e
"/dev/hda3", que removi previamente:
101
FERRAMENTAS TCNICAS
Comece chamando o Testdisk como root:
# !es!disk
Na tele inicial, selecione o HD que ser analisado, acesse a opo "Analyse" e em seguida
"Proceed", para iniciar a varredura do disco.
O Testdisk verifica a tabela de parties atual e em seguida pesquisa em todos os setores
onde podem existir informaes sobre outras parties que no constem na tabela principal.
Veja que, apenas com o teste rpido, ele j conseguiu localizar as duas parties que haviam
sido deletadas:
102
FERRAMENTAS TCNICAS
Pressionando a tecla "P" voc pode ver os dados dentro da partio, para ter certeza que os
arquivos esto l (a verso disponvel no apt-get no consegue mostrar arquivos dentro de parties
ReiserFS, mas a recuperao funciona normalmente).
Nos raros casos onde ele localize a partio, mas identifique incorretamente o sistema de
arquivos, use a opo "T" para indicar o correto.
Depois de checar se o particionamento detectado est correto, pressione "Enter" mais uma
vez e voc chega tela final, onde voc pode salvar as alteraes, usando a opo "Write". Reinicie
o micro e monte a partio para checar os dados.
Caso a lista no exiba a partio que voc est procurando, use a opo "Search" no lugar do
Write. Isto ativa o teste mais longo, onde ele vasculha todos os setores do HD em busca de parties
deletadas. Este segundo teste demora alguns minutos e, num HD com bastante uso, pode retornar
uma longa lista de parties que foram criadas e deletadas durante a vida til do HD. Neste caso,
preste ateno para recuperar a partio correta.
103
FERRAMENTAS TCNICAS
Todas as parties listadas aqui parecem com o atributo "D", que significa que a partio foi
deletada. Para recuperar uma partio, selecione-a usando as setas para cima/baixo e use a seta para
a direita para mudar o atributo para "*" (se ele for uma partio primria e bootvel, como o drive
C: no Windows), "P" se ela for uma partio primria ou "L" se ela for uma partio lgica.
Lembre-se de que. no Linux, as parties de 1 a 4 so primrias e de 5 em diante so extendidas.
possvel tambm adicionar uma partio manualmente, caso voc saiba os setores de incio e
final, mas isso raramente necessrio.
104
FERRAMENTAS TCNICAS
Pressione "Enter" mais uma vez e ele mostra uma tela de confirmao, com a tabela de
particionamento alterada que ser salva no disco. Use o "Write" para salvar ou volte tela inicial
para comear novamente em caso de erros.
Tenha em mente que o tamanha da partio reportado de acordo com o nmero de setores
de 512 bytes. Uma partio de 5 GB tem pouco mais de 10 milhes de setores.
O ideal que voc faa todo o processo usando um live-CD. O Kurumin vem com o Testdisk
pr-instalado a partir da verso 6.0 e ele pode ser encontrado tambm nas verses recentes do
Knoppix, PLD e Ultimate Boot CD.
Depois de recuperar qualquer partio, importante chec-la usando o utilitrio apropriado,
para que qualquer problema dentro da estrutura do sistema de arquivos seja corrigido.
105
FERRAMENTAS TCNICAS
Gerenciamento de setores defeituosos com o ReiserFS
No Windows, sobretudo ao formatar o HD em FAT, o scandisk oferece a opo de fazer um
teste de superfcie, onde so marcados setores defeituosos (badblocks) do HD. Os badblocks so
defeitos fsicos na superfcie do HD, que no podem ser corrigidos, apenas marcados para que no
sejam mais usados. Uma dvida comum se existe um sistema similar no Linux.
Embora no seja um processo automtico, como o scandisk, voc pode usar o comando
"badblocks". Ele faz um exame de superfcie e mostra uma lista com os setores defeituosos. Para
usar em conjunto com o ReiserFS, voc precisa especificar o tamanho dos blocos (em bytes). Se
voc no usou nenhuma opo especial ao formatar a partio, os blocos tero 1024 bytes. O
comando para verificar a partio /dev/hda1 por exemplo, fica:
5 badblocks -b 1&23 "dev"hda1
(como root)
Isso demora alguns minutos. Se estiver tudo certo, ele no vai retornar nada no final do teste.
Hoje em dia, os HDs so capazes de marcar automaticamente os setores defeituosos, a
prpria controladora faz isso, independentemente do sistema operacional.
Existe uma rea reservada no incio do disco chamada "defect map" (mapa de defeitos) com
alguns milhares de setores que ficam reservados para alocao posterior. Sempre que a controladora
do HD encontra um erro ao ler ou gravar num determinado setor, ela remapeia o setor defeituoso,
substituindo-o pelo endereo de um setor "bom", dentro do defect map. Como a alocao feita
pela prpria controladora, o HD continua parecendo intacto para o sistema operacional.
Os setores s realmente comeam a aparecer quando o HD j possui muitos setores
defeituosos e o defect map j est cheio. Isso um indcio de um problema grave. O HD j deu o
que tinha que dar e o melhor troc-lo o mais rpido possvel para no arriscar perder os dados.
Alguns sintomas de que o HD est desfrutando de seus ltimos dias de vida so:
- Muitos badblocks (causados por envelhecimento da mdia).
- Desempenho muito abaixo do normal (isso indica problemas de leitura, o que faz com que
a cabea de leitura tenha que ler vrias vezes o mesmo setor para finalmente conseguir
acessar os dados).
- Um barulho de click-click (o famoso click da morte, que indica problemas no sistema de
movimentao da cabea de leitura, um indcio de que o HD est realmente nas ltimas).
De qualquer forma, o ReiserFS capaz de marcar via software setores defeituosos que for
encontrando. Isso feito automaticamente, assim como no NTFS do Windows XP. S preciso
marcar setores defeituosos manualmente em sistemas de arquivos antigos, como o FAT32 e o EXT2.
Voc pode ver a lista de setores marcados como defeituosos em uma determinada partio usando o
106
FERRAMENTAS TCNICAS
comando abaixo, que salva a lista no arquivo "bads" dentro do diretrio atual:
# debu'reiser$s -B bads "dev"hda1
Ou seja, para marcar setores defeituosos que por ventura existam, voc s precisa copiar um
monte de arquivos, at encher a partio. Para ver se existem setores defeituosos na partio,
marcados via software, rode o comando:
5 debu'reiser$s "dev"hda1
Caso exista algum erro no sistema de arquivos, causados por desligamentos incorretos, por
exemplo, voc pode corrigir com o comando:
5 reiser$sck "dev"hda1
Este comando deve ser executado com a partio desmontada. O ideal dar boot pelo CD do
Kurumin e rodar a partir dele.
Em casos mais extremos, onde voc tenha um HD cheio de badblocks em mos e queira us-
lo mesmo assim (num micro que no usado para nada importante, por exemplo), voc pode fazer o
seguinte:
Comece enchendo o HD de bits zero, isso vai forar a controladora a escrever em todos os
setores e marcar via hardware os setores defeituosos que conseguir. Isso pode ser feito usando o dd.
Naturalmente isso vai apagar todos os dados. A forma ideal de fazer isso dando boot atravs do
CD do Kurumin:
5 dd i$0"dev"7ero o$0"dev"hda
(onde o /dev/hda o dispositivo do HD. Na dvida, d uma olhada no qtparted)
Reparticione o HD usando o cfdisk e formate as parties em ReiserFS, como em:
5 mkreiser$s "dev"hda1
Monte a partio e copie arquivos (qualquer coisa) para dentro dela at encher. Isso deve
marcar via software os setores defeituosos que sobrarem. A partir da voc pode ir usando o HD at
que ele pife definitivamente.
possvel tambm gerar uma lista dos setores defeituosos usando o comando badblocks e
especificar a lista ao formatar a partio, fazendo com que os setores defeituosos preexistentes
encontrados pelo badblocks sejam marcados para no serem usados pelo mkreiserfs. Esta receita
pode ser til no caso de HDs com alguns setores defeituosos, que estejam "estabilizados", usados
por tempo considervel sem que novos setores apaream.
Para isso, comece gerando o arquivo com a lista dos setores defeituosos da partio desejada:
# badblocks -b 1&23 -o bads#lis! "dev"hda1
Neste caso estamos dizendo ao badblocks que ele deve verificar a partio "/dev/hda1" e
salvar a lista no arquivo "bads.list", salvo no diretrio atual.
107
FERRAMENTAS TCNICAS
De posse do arquivo, formate a partio usando o comando:
# mkreiser$s -B bads#lis! "dev"hda1
Se a partio j estiver formatada e voc quiser apenas adicionar a lista de setores defeituosos, sem
destruir todos os dados, use o comando:
# reiser$sck --rebuild-!ree -B bads#lis! "dev"hda1
Como disse, os setores defeituosos so automaticamente marcados conforme so detectados
pelo sistema de arquivos, por isto este segundo comando raramente necessrio.
Monitorando a sade do HD com o SMART
possvel monitorar os erros de leitura do HD (mesmo antes dos badblocks comearem a
aparecer) usando o SMART, um recurso de monitoramento disponvel em todos os HDs modernos,
onde a prpria controladora monitora o status do HD e disponibiliza um log numa rea reservada,
que pode ser lida pelo sistema operacional.
No Linux, este recurso disponibilizado atravs do "smartmontools", um pacote disponvel
nos repositrios da maioria das distribuies e tambm no http://smartmontools.sourceforge.net/.
O smartmontools baseado no "smartsuite", um pacote mais antigo, que ainda includo em
algumas distribuies (como no Debian), mas que oferece menos funes e no mais desenvolvido
ativamente.
A maior parte das funes podem ser acessadas usando o utilitrio "smartctl", includo no
pacote. Comece usando a opo "-i", seguida do device do HD (como em "smartctl -i /dev/hda")
para ver informaes sobre o drive:
108
FERRAMENTAS TCNICAS
Note que neste caso, embora o SMART seja suportado pelo drive, ele est desativado. Antes
de mais nada, precisamos ativ-lo, usando o comando:
# smar!c!l -s on "dev"hda
Para um diagnstico rpido da sade do drive (fornecido pela prpria controladora), use o
parmetro "-t short", que executa um teste rpido, de cerca de dois minutos, e (depois de alguns
minutos) o parmetro "-l selftest" que exibe o relatrio do teste:
# smar!c!l -! shor! "dev"hda
Sending command: LD>ecute SM'!$ Short self-test routine immediatel% in off-line
modeL"
&rive command LD>ecute SM'!$ Short self-test routine immediatel% in off-line modeL
successful" $esting has begun"
1lease wait 2 minutes for test to complete"
# smar!c!l -l sel$!es! "dev"hda
Este comando exibe um relatrio de todos os autotestes realizados e o status de cada um.
Num HD saudvel, todos reportaro "Completed without error".
Voc pode executar tambm um teste longo (que dura cerca de uma hora) usando o
parmetro "-t long". Ambos os testes no interferem com a operao normal do HD, por isso podem
ser executados com o sistema rodando. Em casos de erros, o campo "LBA_of_first_error" indica o
nmero do primeiro setor do HD que apresentou erros de leitura, como em:
Status !emaining KB'GofGfirstGerror
Completed: un3nown failure *#_ #>fff#####
109
FERRAMENTAS TCNICAS
Nestes casos, execute novamente o teste e verifique se o erro continua aparecendo. Se ele
desaparecer no teste seguinte, significa que o setor defeituoso foi remapeado pela controladora, um
sintoma benigno. Caso o erro persista, significa que no se trata de um badblock isolado, mas sim o
indcio de um problema mais grave.
O parmetro "-H" (health) exibe um diagnstico rpido da sade do drive, fornecido pela
prpria controladora:
# smar!c!l -D "dev"hda
SM'!$ overall-health self-assessment test result: I<SS@2
Neste caso, o SMART informa que no foi detectado nenhum problema com o drive. Em
casos de problemas iminentes, ele exibir a mensagem "FAILING". Este diagnstico da
controladora baseado em vrias informaes, como erros de leitura, velocidade de rotao do
disco e movimentao da cabea de leitura.
Um disco "FAILING" no um local seguro para guardar seus dados, mas em muitos casos
ainda pode funcionar por alguns meses. Se ainda no houver muitos sintomas aparentes, voc pode
aproveit-los em micros sem muita importncia, como estaes que so usados apenas para acessar
a Web, que no armazenam dados importantes. Note que, embora relativamente raro, em muitos
casos o drive pode realmente se perder menos de 24 horas depois de indicado o erro, por isso
transfira todos os dados importantes imediatamente.
Voc pode ver mais detalhes sobre o status de erro do HD usando o parmetro "-A", que
mostra todos os atributos suportados pelo HD e o status de cada um. Na sexta coluna (Type) voc
pode verificar a importncia de cada um; os marcados como "Old_age" indicam sintomas de que o
HD est no final de sua vida til, mas no significam por si s problemas iminentes. Os mais graves
so os "Pre-Fail", que indicam que o HD est com os dias contados.
Na coluna "WHEN_FAILED" (a mais importante), voc v o status de cada opo. Num HD
saudvel, esta coluna fica limpa para todas as opes, indicando que o HD nunca apresentou os
erros:
110
FERRAMENTAS TCNICAS
O nmero de setores defeituosos no drive (no remapeados) pode ser visto nos atributos "197
Current_Pending_Sector" e "198 Offline_Uncorrectable", onde o nmero de badblocks informado
na ltima coluna. Em situaes normais, os badblocks no remapeados contm pedaos de arquivos,
que a controladora muitas vezes tenta ler por muito tempo antes de desistir.
Em casos extremos, onde existam vrios badblocks no marcados, voc pode usar o truque
de encher o HD com zeros, usando o comando "dd if=/dev/zero of=/dev/hda" para forar a
controladora a escrever em todos os blocos e assim remapear os setores (perdendo todos os dados,
naturalmente).
O nmero de setores defeituosos j remapeados, por sua vez, pode ser acompanhado atravs
dos atributos "5 Reallocated_Sector_Ct" e "196 Reallocated_Event_Count".
Naturalmente, no basta executar estes testes apenas uma vez, pois erros graves podem
aparecer a qualquer momento. Voc s ter segurana se eles forem executados periodicamente.
Para automatizar isso, existe o servio "smartd" ("smartmontools" no Debian), que fica
responsvel por executar o teste a cada 30 minutos e salvar os resultados no log do sistema, que
voc pode acompanhar usando o comando "dmesg".
No caso do Debian, alm de configurar o sistema para inicializar o servio no boot, voc
precisa configurar tambm o arquivo "/etc/default/smartmontools", descomentando a linha
"start_smartd=yes".
111
FERRAMENTAS TCNICAS
O padro do servio monitorar todos os HDs disponveis. Voc pode tambm especificar
manualmente os HDs que sero monitorados e os parmetros para cada um atravs do arquivo "/etc/
smartd.conf".
Comece comentando a linha "DEVICESCAN". O arquivo contm vrios exemplos de
configurao manual. Uma configurao comum a seguinte:
6dev6hda -P -l error -l selftest -t -I 1*) -m tu>Xgmail"com
Esta linha monitora os logs do "/dev/hda" (erros e testes realizados) e monitora mudanas
em todos os atributos (incluindo a contagem de badblocks e setores remapeados), com exceo da
temperatura (que muda freqentemente), e envia e-mails para a conta especificada sempre que
detectar mudanas. Para que ele use apenas o log do sistema, sem enviar o e-mail, remova a opo
"-m".
Para que os relatrios via e-mail funcionem, preciso que exista algum MTA instalado na
mquina, como o Sendmail ou o Postfix. O smartd simplesmente usa o comando "mail" (que
permite o envio de e-mails via linha de comando) para enviar as mensagens. No Debian (alm do
MTA) necessrio que o pacote "mailutils" esteja instalado.
Depois de alterar a configurao, lembre-se de reiniciar o servio, usando o comando:
# "e!c"ini!#d"smar!d res!ar!
ou:
# "e!c"ini!#d"smar!mon!ools res!ar!
Caso o SMART indique algum erro grave e o HD ainda esteja na garantia, voc pode
imprimir o relatrio e pedir a troca.
A vida til mdia de um HD IDE de cerca de dois anos de uso contnuo. HDs em micros
que no ficam ligados continuamente podem durar muito mais, por isso saudvel trocar os HDs
dos micros que guardam dados importantes anualmente e ir movendo os HDs mais antigos para
outros micros.
Normalmente, os fabricantes do um ano de garantia para os HDs destinados venda direta
ao consumidor e seis meses para os HDs OEM (que so vendidos aos integradores, para uso em
micros montados, mas que freqentemente acabam sendo revendidos). Uma dica geral na hora de
comprar HDs nunca comprar HDs com apenas trs meses de garantia, que normalmente dada s
para HDs remanufaturados.
112
FERRAMENTAS TCNICAS
Copiando dados de HDs ou CDs defeituosos
difcil copiar arquivos, por meios normais, a partir de um HD com badblocks, ou um CD-
ROM riscado. Os programas fazem a cpia apenas at o ponto em que encontram o primeiro erro de
leitura. Mesmo que exista apenas um setor defeituoso no meio do arquivo, voc nunca conseguir
copiar o arquivo inteiro, apenas a metade inicial.
Existe um utilitrio eficiente para fazer cpias a partir de mdias ruins, o dd_rescue. Ele faz
a cpia das partes boas, ignorando os setores defeituosos. Funciona bem para recuperar arquivos de
texto, imagens, vdeos, msicas, qualquer tipo de arquivo que possa ser aberto mesmo que estejam
faltando alguns pedaos.
Voc pode instalar o dd_rescue pelo apt-get:
5 ap!-'e! ins!all ddrescue
Para us-lo, indique a localizao da partio ou CD-ROM que ser copiado e um arquivo de
destino. Ao copiar uma partio, voc sempre precisa copiar o arquivo para dentro de uma partio
diferente. A partio ou CD-ROM de origem deve sempre estar desmontada.
Para copiar um CD-ROM:
5 dd8rescue "dev"cdrom "mn!"hda*"cdrom#im'
Para copiar uma partio:
5 dd8rescue "dev"hda1 "mn!"hda*"hda1#im'
Para acessar os arquivos dentro da imagem, voc deve mont-la usando a opo "-o loop" do
mount, que monta um arquivo como se fosse um dispositivo:
5 moun! -o loop "mn!"hda*"cdrom#im' "home"kurumin"cdrom
ou:
# mount -o loop /mnt/hda6/hda1.img /home/kurumin/hda1
Voc ver todos os arquivos dentro da pasta, e poder acessar o que foi possvel ler.
Um problema do dd_rescue que ele l cada setor defeituoso vrias vezes, de forma a tentar
obter os dados a qualquer custo. Por um lado, isto positivo, pois ele realmente acaba conseguindo
recuperar vrios setores que falham na primeira leitura, mas por outro lado, faz com que o processo
de recuperao fique extremamente lento em mdias com muitos setores defeituosos.
Isto especialmente problemtico ao recuperar dados em HDs, pois se o teste demora muito,
a possibilidade do drive dar seu ltimo suspiro durante a recuperao, levando consigo os dados
restantes muito maior.
113
FERRAMENTAS TCNICAS
Uma soluo usar o "dd_rhelp", um programa que trabalha em conjunto com o dd_rescue,
otimizando seu comportamento.
Ao usar o dd_rhelp, o processo de recuperao dividido em duas etapas. Na primeira ele
recupera os dados, pulando os setores defeituosos. Quando a recuperao est completa, ele carrega
lista dos setores que falharam na primeira leitura e a sim, passa ao comportamento padro, lendo
cada setor vrias vezes. A diferena que no caso voc j est com os dados seguros.
Voc pode baixar o dd_rhelp no
http://www.kalysto.org/utilities/dd_rhelp/download/index.en.html ou
http://freshmeat.net/projects/dd_rhelp/.
No site est disponvel apenas o pacote com o cdigo fonte, mas ele relativamente simples
de compilar. Descompacte o arquivo, acesse a pasta que ser criada e use os comandos:
# #"con$i'ure
# make
Isto vai criar o executvel dentro da pasta atual. Ao us-lo, a sintaxe a mesma do dd_rescue:
# #"dd8rhelp "dev"cdrom "mn!"hda*"cdrom#im'
Eliminando dados com segurana
Ao "formatar" uma partio, ou ao remover todas as parties do HD, so alterados apenas
os ndices utilizados pelo sistema operacional para encontrar os arquivos. Os dados propriamente
ditos continuam intactos na superfcie magntica do HD, at serem efetivamente apagados
reescritos.
Isso cria um problema para quem precisa vender ou descartar HDs usados. Afinal, voc no
vai querer que seus arquivos pessoais, ou informaes confidenciais da sua empresa sejam dadas
"de brinde" junto com o HD descartado.
Alguns rgos governamentais chegam a manter polticas estritas quanto ao descarte de
HDs. Em muitos casos um HD s pode ser descartado depois de passar por um software de
eliminao de dados e, em outras, os HDs so simplesmente destrudos.
Destruir um HD fcil. "Amacie" usando uma marreta de 20 kg, depois incinere. Se
preferir, voc pode usar o HD como alvo num clube de tiro, ou destruir a superfcie magntica dos
discos com cido. ;)
Claro, nada disso realmente necessrio se voc sabe o que est fazendo. Da mesma
maneira que possvel recuperar dados usando as ferramentas corretas, tambm possvel apag-
los de forma que seja impossvel recuper-los.
A maneira mais rudimentar seria simplesmente reescrever todos os dados. Voc poderia, por
exemplo, encher o HD com zeros, usando o dd, como em:
114
FERRAMENTAS TCNICAS
# dd i$0"dev"7ero o$0"dev"hda
Aqui os dados j no poderiam mais ser recuperados por via normais, mas algumas
empresas de recuperao possuem mquinas (com cabeas de leitura mais sensveis que as
originalmente usadas no HD) que conseguem recuperar a maior parte dos dados. Elas funcionam
lendo a carga residual que sobra nas trilhas. Como este comando simplesmente enche o HD com
zeros, ainda sobra um sinal fraco onde existiam bits 1.
Uma forma mais segura, seria encher o HD com bits aleatrios, modificando o comando
para ler as informaes de entrada a partir do "/dev/urandom", outro dispositivo virtual, que fornece
bits aleatrios:
# dd i$0"dev"urandom o$0"dev"hda
Aqui a recuperao fica muito mais complicada. Mas, em teoria, ainda seria possvel
recuperar alguns trechos dos arquivos usando os processos adequados. A Seagate e alguns outros
fabricantes oferecem este tipo de servio a preos exorbitantes.
Para realmente eliminar qualquer possibilidade de recuperao, voc poderia executar o
comando vrias vezes. A cada passada a chance de recuperar qualquer coisa fica exponencialmente
menor.
Ao invs de fazer isso manualmente, voc pode usar o "shred", um pequeno utilitrio
encontrado na maioria das distribuies. Voc pode us-lo tambm a partir de um CD de boot do
Kurumin.
Um exemplo bem efetivo de uso seria:
# shred -n % -v7 "dev"hda
Usado com estas opes, o shred vai encher o HD com bits aleatrios, repetindo a operao
5 vezes (-n 5) . Como o processo demorado, usamos a opo "-v" (verbose) para que ele exiba um
indicador de progresso, concluindo com o "z", que faz com que, depois de concludo o processo, ele
encha o HD com zeros, para despistar e esconder o fato de que voc fez o apagamento.
Aproveitando mdulos de memria defeituosos
Cada bit de um pente de memria composto por um conjunto de um transstor e um
minsculo capacitor. O transstor usado para gravar e ler o bit de dados, que armazenado na
forma de um impulso eltrico dentro do capacitor. Esta estrutura simples repetida milhes de
vezes em cada chip e estes so finalmente soldados no pente de memria. Uma vez soldados,
muito difcil substituir os chips e (naturalmente) impossvel, por qualquer meio conhecido, reparar
individualmente transstores defeituosos dentro deles.
Este o grande problema. Como no existe como reparar defeitos nos mdulos de memria,
os mdulos defeituosos precisam ser descartados. Muitos chips j nascem com defeitos (nenhum
115
FERRAMENTAS TCNICAS
processo de fabricao perfeito) e so geralmente descartados durante a produo. Outros so
danificados por esttica, picos de tenso ou defeitos na fonte ou reguladores de tenso da placa-me.
Os danos nem sempre so imediatos, as descargas geralmente no destroem os filamentos
dos circuitos, mas apenas causam o aparecimento de falhas microscpicas, que vo aumentando
com o tempo at finalmente romper e inutilizar o componente. Este processo pode demorar meses
ou at anos, mas de qualquer forma abrevia sua vida til.
Estes erros so cruis pois muitas vezes so difceis de perceber, ou aparecem apenas em
determinadas circunstncias. Quando os erros aparecem nos ltimos endereos do pente, podem ser
confundidos com problemas diversos no sistema operacional ou programas (cada vez um programa
diferente trava) ou com problemas de estabilidade da mquina sob grande demanda (pois os
travamentos s acontecem quando muitos programas esto ativos, consumindo toda a memria
disponvel).
Normalmente, estes mdulos de memria precisariam ser descartados, mas possvel
aproveit-los no Linux usando o BadRAM, um patch para o Kernel, que permite especificar
determinados endereos, que so marcados como endereos reservados para uso do Kernel e por
isso mantidos vagos, sem serem usados pelos aplicativos. uma abordagem simples, mas que
funciona muito bem.
O trabalho neste caso feito em duas etapas. Na primeira voc utiliza o Memtest86, para
localizar os endereos defeituosos e, em seguida, usa o BadRAM para que eles no sejam mais
utilizados pelo sistema operacional. como marcar os badblocks do HD.
A grande vantagem do Memtest86 sobre outros testes de memria que alm de pequeno,
gratuito e de cdigo aberto ele quase automtico. Voc precisa apenas gravar um CD ou disquete e
dar boot para que o teste seja iniciado automaticamente. Ele fica num loop eterno, repetindo os
testes e indicando os erros que encontrar at que voc se sinta satisfeito.
Existem duas opes de download. O mais prtico baixar uma imagem ISO, que pode ser
usada para fazer um CD bootvel. O arquivo tem apenas 64 kb compactado e 1.6 MB depois de
descompactado. Voc pode baixar a ltima verso no: http://www.memtest86.com.
No site voc vai encontrar tambm os programas para gerar o disquete de boot no Windows
e Linux. Tanto faz usar o CD ou o disquete, o programa exatamente o mesmo. necessrio dar
boot diretamente no Memtest para que ele possa testar realmente toda a memria do sistema. Se ele
rodasse como um programa sobre o Linux, no teria como acessar reas utilizadas pelo sistema e
programas, e o teste no seria confivel.
O Memtest86 realiza um total de 11 testes. Os 7 primeiros so relativamente rpidos,
demoram cerca de 15 minutos num Celeron 900 com 128 MB. Os outros quatro testas so chamados
de teste estendido, so muito mais rigorosos, capazes de encontrar erros no detectados pelo teste
rpido mas em compensao muito demorados, de 10 a 12 vezes mais. Ou seja, o ideal deixar o
PC ligado de madrugada enquanto voc no for precisar dele.
Por default so feitos apenas os testes bsicos. Pressionando a tecla "C" e depois "2" (test
selection), voc pode ativar os testes avanados ativando a opo "3" (all tests).
116
FERRAMENTAS TCNICAS
Se, por acaso, a tabela inicial do Memtest86 informar incorretamente a quantidade de
memria, acesse a opo "4" (memory sizing) e a opo "3" (probe). Isso far com que o
Memtest86 detecte a memria, desprezando as informaes do BIOS. Na tela principal, pressione a
tecla 5 para ter um sumrio com todos os erros encontrados em cada teste.

Basicamente isto, no existe muita configurao a fazer. A alma do negcio ter pacincia
e deixar ele fazer seu trabalho, se possvel por tempo suficiente para realizar o teste longo.
O tempo necessrio varia de acordo com o desempenho e principalmente da quantidade de
memria instalada. Dobrar a quantidade de memria dobra o tempo do teste. Usar um processador
mais rpido tem pouca influncia, pois o gargalo a velocidade de acesso memria, no o
processamento.
O Memtest86 j vem pr-instalado em muitas distribuies, aparecendo como uma opo de
boot no menu do lilo. Voc pode utilizar tambm o CD de uma verso recente do Kurumin,
utilizando a opo "memtest" na tela de boot.
Para que ele execute o teste devolvendo os endereos defeituosos na forma dos intervalos de
endereos usados pelo BadRAM, pressione a tecla "c" para acessar a configurao e em seguida as
opes, "5" (Error Report Mode), "2" (BadRAM Patterns) e depois "0" duas vezes para voltar ao
teste principal. Deixe o Memtest86 rodando por um bom tempo e anote os endereos reportados na
parte inferior da tela do teste. Ele informa os defeitos j na forma da opo de Kernel que deve ser
usada, como em:
badram0&,1/3)%%*8.&,$$$$$$$.&,1/3)%%*8.&,$$$$$$$c
117
FERRAMENTAS TCNICAS
Uma vez anotados os endereos defeituosos, o prximo passo instalar o BadRAM. Por ser
um projeto relativamente recente, no comum encontr-lo pr-instalado nas distribuies. Quase
sempre voc vai precisar recompilar o Kernel, instalando o patch que ativa o suporte. Para fazer a
instalao manual, siga os passos abaixo:
1- Comece instalando o pacote "kernel-source" e os compiladores necessrios para compilar
o Kernel.
2- Baixe o patch correspondente verso do Kernel em uso no:
http://rick.vanrein.org/linux/badram/download.html
3- Acesse a pasta "/usr/src/linux/", onde fica o cdigo fonte do Kernel e aplique o patch do
BadRAM usando o comando "patch -p1", indicando a localizao do arquivo, como em:
# pa!ch -p1 9 "usr"src"BadH<M-2#*#11#1#pa!ch
4- Ao recompilar o Kernel includo na distribuio, no preciso fazer uma compilao
completa do Kernel, incluindo os mdulos. Voc precisa apenas do executvel principal, gerado
pelo comando "make bzImage". Depois de aplicar o patch do BadRAM, os passos bsicos para
gerar o novo executvel do Kernel e copi-lo para dentro da pasta /boot so:
# cd "usr"src"linu,"
# make ,con$i'
(dentro do configurador grfico, indique o arquivo de configurao do Kernel atual, dentro da pasta
boot, para que seja gerado um Kernel com as mesmas configuraes do atual, adicionando apenas o
patch do BadRAM)
# make b7>ma'e
(compila o novo executvel do Kernel)
# cp -a arch"i/8*"boo!"b7>ma'e "boo!"vmlinu7-badram
(copia o Kernel gerado para a pasta /boot)
5- Depois de gerar o novo Kernel, abra o arquivo de configurao do Lilo (/etc/lilo.conf) e
adicione uma nova seo, incluindo o novo Kernel:
image="boo!"vmlinu7-badram
label=badram
root="dev"hda1
read-onl%
initrd="boo!"ini!rd#'7
append=Lbadram=&,1/3)%%*8.&,$$$$$$$.&,1/3)%%*8.&,$$$$$$$cL
Estamos aqui adicionado a opo de iniciar o novo Kernel, que aparecer na tela de boot
como a opo "badram". Voc deve alterar as linhas "root" (a partio onde o sistema est instalado)
e "initrd" de acordo com a sua instalao. O ideal copiar estas informaes da entrada
correspondente ao Kernel principal. Na opo "badram=" vo os endereos defeituosos, informados
pelo Memtest86.
118
FERRAMENTAS TCNICAS
Depois de editar o arquivo, no se esquea de rodar o comando "lilo" para salvar as
alteraes.
Mas distribuies que incluem o BadRAM por padro, voc pode inicializar o sistema
usando diretamente a opo contendo os endereos defeituosos.
A principal limitao do BadRAM que ele no ajuda em casos onde os endereos
defeituosos esto logo no comeo dos mdulos, nos primeiros 4 ou 6 MB. Nestes casos os
endereos defeituosos caem justamente na rea ocupada pelo Kernel durante o boot. Se o Kernel
corrompido pelos endereos defeituosos, o boot acaba com um "Kernel Panic" antes que ele tenha a
chance de isol-los. Nestes casos, a melhor soluo usar o pente defeituosos sempre em par com
outro. O mdulo bom instalado no primeiro banco (de forma a ser acessado primeiro), de forma
que o Kernel carregado nos primeiros endereos do mdulo bom e tem condies de marcar os
endereos defeituosos do mdulo ruim.
Embora o trabalho de instalar o patch, recompilar o Kernel e fazer toda a configurao possa
no valer a pena para aproveitar um nico mdulo, pode valer a pena se voc trabalha numa
empresa com muitos micros.
Administrando a memria swap
Voc pode acompanhar o uso de memria do sistema atravs do comando "free" que exibe
um relatrio de quanta memria (fsica e swap) est sendo usada e quanto ainda est disponvel.
Um recurso que vem bem a calhar que voc pode criar, a qualquer momento, um arquivo
de memria swap temporrio, usando o espao livre do HD. Isso vai ajudar bastante no dia em que
voc estiver trabalhando com uma partio swap pequena e precisar editar um vdeo ou uma
animao em 3D pesada :).
Para isso, basta usar os comandos abaixo:
5 dd i$0"dev"7ero o$0"s-ap bs01&23 coun!01/1&5&
5 mks-ap "s-ap
5 s-apon "s-ap
Substitua o nmero 131070 pela quantidade de memria swap desejada, em kbytes. 131070
so 128 MB, mas no preciso usar um nmero exato, voc pode usar "250000", por exemplo. O
arquivo temporrio desativado automaticamente ao reiniciar o micro, mas voc pode faz-lo a
qualquer momento usando os comandos:
5 s-apo$$ "s-ap
5 rmdir "s-ap
O Linux tem um comportamento particular ao lidar com falta de memria. Numa situao
de fartura, ao ter, por exemplo, 512 MB de RAM onde apenas 100 MB esto ocupados, ele passa a
utilizar a maior parte da memria disponvel como cache de disco e arquivos. Isso melhora muito o
119
FERRAMENTAS TCNICAS
desempenho do sistema, pois tanto arquivos recentemente acessados, quanto arquivos com uma
grande chance de serem requisitados em seguida j estaro carregados na memria e no precisaro
ser lidos no HD, que centenas de vezes mais lento.
Conforme mais e mais memria fsica vai sendo ocupada, o sistema vai abrindo mo do
cache de disco para liberar memria para os aplicativos. Com o passar o tempo, alguns dados
relacionados a programas que esto ociosos a muito tempo comeam a lentamente serem movidos
para a memria swap, fazendo com que o sistema recupere parte do espao e volte a fazer cache de
disco. O desempenho volta a melhorar. Esta uma tarefa que o Linux desempenha com muita
competncia, pelo menos enquanto houver memria swap disponvel...
Se voc continua abrindo programas e at mesmo a memria swap comece a acabar, o
sistema vai abrir mo primeiro do cache de disco e depois comear a limitar a memria utilizada
pelos aplicativos. Com isto o sistema comear a ficar cada vez mais lento, pois o objetivo passa ser
"sobreviver", ou seja, continuar abrindo os programas solicitados. Isto vai continuar at o limite
extremo, quando finalmente voc receber uma mensagem de falta de memria e ter que comear a
fechar programas.
Tudo isso pode ser acompanhado usando o "free", que mostra com exatido a memria fsica
e swap ocupadas e quanto de memria est sendo destinada ao cache de disco.
No screenshot abaixo temos uma situao em que o sistema comea a ficar lento.

Temos aqui 256 MB de RAM e mais 256 MB de swap e um batalho de programas abertos.
Veja que a poltica de "selecionar os programas mais importantes" j ocupou toda a memria swap,
deixando apenas 72 KB livres. Ainda temos quase 80 MB de memria fsica que esto sendo usados
pelo cache de disco, e apenas mais 5 MB realmente livres. Ou seja, estamos prximos do ponto de
saturao em que o sistema desiste de fazer cache de disco e comea a restringir o uso de memria
dos programas; o Athlon XP est prestes a comear a virar uma carroa. Hora de criar uma
memria swap temporria com os comandos acima.
Moral da histria: para ter um bom desempenho voc precisa ter de preferncia muita
memria RAM ou, pelo menos, uma quantidade suficiente de memria RAM combinada com uma
partio swap de tamanho generoso. Se voc tem um HD de boa capacidade, no faz mal reservar 1
ou 2 GB para a partio swap.
Prefira sempre ter uma partio swap maior do que usar o arquivo temporrio, pois a
partio swap sempre mais rpida, por utilizar um sistema de arquivos prprio, otimizado para a
tarefa.
120
FERRAMENTAS TCNICAS
Outra polmica com relao real necessidade de usar uma partio ou arquivo de swap
em micros com 512 MB de RAM, que so suficientes para a maioria das tarefas. Lembre-se de que,
embora todos os manuais digam para criar uma partio swap durante a instalao do sistema, ela
no obrigatria.
Um dos defensores da idia de que sempre importante usar uma partio swap,
independentemente da quantidade de memria RAM fsica que esteja disponvel, Andrew Morton,
o prprio mantenedor do Kernel 2.6. Numa discusso em 2004 na lista de desenvolvimento do
Kernel, ele concluiu uma mensagem com vrios argumentos tcnicos com a frase:
Lou colocar os dedos nos ouvidos e cantar \la la la\ enHuanto e>istir gente me
di7endo \&esabilitei a memZria swap e isso nAo deu o resultado Hue esperava\"L
A moral da histria que, por contraditrio que possa parecer, o sistema passa a utilizar a
memria virtual apenas em situaes onde isso vai resultar em ganhos de desempenho. Mantendo
mais memria RAM livre, novos programas carregam mais rpido e o sistema tem como fazer
cache de disco.
No Kernel 2.6 estes algoritmos foram bastante refinados. Num micro com 512 MB de RAM,
voc notar que o sistema geralmente s comea a fazer swap depois que mais da metade da
memria RAM est ocupada e, mesmo assim, movendo para ela apenas bibliotecas e componentes
do sistema de uso muito espordico. O uso do swap vai crescendo apenas conforme realmente existe
necessidade.
Ainda assim (ao usar uma distribuio com o Kernel 2.6), voc pode configurar o
comportamento do sistema em relao memria swap atravs de um parmetro do Kernel,
definido atravs do arquivo "/proc/sys/vm/swappiness". Este arquivo contm um nmero de 0 a 100,
que determina a predisposio do sistema para usar swap. Um nmero baixo faz com que ele deixe
para usar swap apenas em situaes extremas (configurao adequada a micros com muita RAM),
enquanto um nmero alto faz com que ele use mais swap, o que mantm mais memria RAM livre
para uso do cache de disco, melhorando o desempenho em micros com pouca memria.
Se voc tem um micro com 1 GB de RAM e quer que o sistema quase nunca use swap, use:
# echo 42&4 : "proc"ss"vm"s-appiness
Em micros com 256 MB ou menos, aumentar o uso de swap mantm mais memria
disponvel para abrir novos aplicativos e fazer cache de disco. O programa que est sendo usado no
momento e novos programas abertos ficam mais rpidos mas, em troca, programas minimizados a
muito tempo so movidos para a swap e demoram mais para responder quando reativados. Para
aumentar o uso de swap, use:
# echo 48&4 : "proc"ss"vm"s-appiness
Para tornar a alterao definitiva, adicione o comando em algum arquivo de inicializao do
sistema, como o "/etc/rc.d/rc.local" ou "/etc/init.d/bootmisc.sh".
121
FERRAMENTAS TCNICAS
Suporte a mais de 1 GB de memria RAM
Tradicionalmente, os processadores x86 utilizam uma tabela de 32 bits para o
endereamento da memria RAM e so por isso capazes de enderear at 4 GB de memria (dois
elevado 32 potncia so 4.294.967.296 endereos, um por byte de memria).
Esta limitao existe desde o 386. Na poca, ningum se importava muito com isso, pois a
memria RAM era muito cara e era incomum algum usar mais do que 8 ou 16 MB.
A partir da dcada de 90, os 4 GB comearam a ser um limitante para servidores de bancos
de dados e outras aplicaes de grande porte, que consomem grandes quantidades de memria.
Surgiu ento o PAE (Physical Address Extension), um hack implementado pela Intel em alguns
processadores a partir do Pentium Pro. O PAE consiste numa segunda tabela de endereos, com 4
bits adicionais, que permitem enderear 16 pginas de memria, cada uma com 4 GB.
Com o PAE, passa a ser possvel enderear at 64 GB de memria. A desvantagem que o
processador continua sendo capaz de acessar apenas 4 GB por vez e o chaveamento entre diferentes
pginas de memria toma um certo tempo, que acaba prejudicando bastante o desempenho.
Mesmo usando o PAE, a maioria dos aplicativos continua tendo acesso a apenas 4 GB. A
vantagem que passa a ser possvel executar vrios aplicativos diferentes, cada um consumindo at
4 GB de memria, sem o uso de memria virtual. Apenas alguns aplicativos cuidadosamente
desenvolvidos so capazes de distribuir dados entre diferentes pginas de memria, realmente
aproveitando a memria adicional.
O PAE pode ser encontrado apenas em alguns processadores Intel de 32 bits destinados a
servidores, basicamente apenas o Pentium Pro e o Xeon. Para que funcione, necessrio que exista
suporte tambm no chipset da placa-me e no sistema operacional usado.
A soluo definitiva para quem precisa de mais de 4 GB de memria usar um processador
de 64 bits, j que eles trabalham com tabelas de endereamento de 64 bits e so por isso capazes de
acessar quantidades praticamente ilimitadas de memria.
Ao utilizar um processador de 32 bits, o Linux oferece suporte nativo a at 4 GB de memria
usando o modo normal de operao do processador e a at 64 GB usando o PAE. Ou seja, ele
simplesmente acompanha o suporte disponvel no hardware, sem nenhuma limitao adicional.
Para melhorar o desempenho do sistema em mquinas antigas, que utilizam 1 GB de
memria ou menos, existe uma terceira opo, onde o Kernel enderea apenas 1 GB de memria,
sendo que 960 MB ficam disponveis para os aplicativos e o restante reservado para uso do
Kernel. Neste modo de operao, o comando "free" vai reportar que existem apenas 960 MB de
memria disponvel, mesmo que voc possua 1 GB ou mais.
possvel escolher entre as trs opes ao compilar o Kernel, na opo "Processor Type and
Features > High Memory Support". At pouco tempo, a maioria das distribuies vinha com o
suporte a apenas 1 GB ativado por padro. Nestes casos voc precisa recompilar o Kernel, usando a
122
FERRAMENTAS TCNICAS
opo "4 GB".
Note que ao recompilar o Kernel padro da distribuio (sem alterar a verso), voc pode
apenas gerar o executvel principal e fazer as modificaes necessrias na configurao do lilo ou
grub para que ele seja inicializvel, sem precisar gerar os mdulos.

A desvantagem de ativar o suporte a 4 GB que o sistema ficar um pouco mais lento em
micros com menos de 1 GB de memria (justamente por isso existe a primeira opo). O suporte a
64 GB s pode ser ativado caso voc esteja usando um Intel Xeon ou outro processador com suporte
ao PAE. Um Kernel gerado com esta opo no vai dar boot em processadores que no so
compatveis com o recurso.
A partir da, o sistema ser capaz de ativar toda a memria instalada. Em caso de problemas,
voc pode forar o uso de toda a memria disponvel adicionando a opo "mem=2048M" (onde o
2048 indica a quantidade de memria instalada) na linha append do "/etc/lilo.conf", juntamente com
as outras opes, como em:
append04mem02&38M. noapic4
Ao usar o grub, use a opo na linha referente ao novo Kernel no arquivo
"/boot/grub/menu.lst", como em:
kernel "boo!"vmlinu7-2#*#1%hm roo!0"dev"hda1 ro mem02&38M
123
FERRAMENTAS TCNICAS
Clonando parties com o Partimage
O Partimage substitui o Norton Ghost, com a vantagem de ser livre e gratuito. Ele pode fazer
imagens de parties do HD e at mesmo de HDs inteiros. interessante tanto para fazer backup,
quanto para clonar HDs quando necessrio instalar o sistema em vrios micros iguais.
Ele possui uma interface de texto e graas a isso ele bem pequeno. A verso estaticamente
compilada, que inclui todas as bibliotecas necessrias no prprio pacote e por isso raramente d
problemas na instalao, tem menos de 1 MB e a verso shared, que depende que um certo conjunto
de bibliotecas esteja instalado no sistema, possui apenas 300 KB.
O fato de rodar em modo texto tambm flexibiliza o uso do Partimage, pois permite us-lo
praticamente em qualquer situao, sem precisar se preocupar em achar alguma distribuio que
consiga configurar o vdeo daquele notebook jurssico ou convencer o administrador a instalar o
Xfree naquele servidor que sempre funcionou muito bem sem ele :). O Partimage pode tambm ser
controlado via script, o que permite criar e restaurar as imagens de forma automatizada, criando, por
exemplo, DVDs de recuperao, como nos micros de grife, que restauram uma imagem do sistema
automaticamente durante a inicializao.
Em 2002 publiquei no Guia do Hardware um artigo sobre o G4U, outra ferramenta similar,
que voc pode ler em: http://www.guiadohardware.net/artigos/215/.
O G4U um disquete bootvel que faz uma cpia completa do HD para um servidor de FTP
habilitado em outro micro da rede ou na internet. Os dois compactam os dados, mas a diferena
fundamental entre o Partimage e o G4U que o Partimage copia apenas os dados dentro da
partio, gerando um arquivo proporcional ao espao ocupado. Se voc tiver uma partio de 40
GB, mas com apenas 600 MB ocupados, o arquivo de imagem (compactado) ter apenas uns 200 e
poucos MB. O G4U j funciona de uma mais parecida com o dd, simplesmente copiando os uns e
zeros do HD, criando imagens muito maiores.
O Partimage tambm capaz de quebrar a imagem em vrios arquivos (voc especifica o
tamanho desejado), permitindo que os backups possam ser facilmente gravados em DVD, mltiplos
CDs, ou at mesmo mini-DVDs de 1.4 GB cada.
124
FERRAMENTAS TCNICAS
Instalando
Existem duas opes para usar o Partimage. Voc pode instal-lo (Linux) como qualquer
outro programa, ou usar um CD bootvel que j venha com ele pr-instalado. A idia do CD
geralmente a mais prtica, pois permite que voc faa e restaure os backups mesmo que s tenha o
Windows instalado no HD.
Os pacotes de instalao do Partimage podem ser baixados no:
http://www.partimage.org/download.en.html
Baixe o "Static i386 binary tarball" que funciona em qualquer distribuio. Esta verso
dispensa instalao, voc s precisa descompactar o arquivo e executar o "partimage" que est
dentro. Se preferir fazer isso via terminal, os comandos so:
# !ar -A,v$ par!ima'e-s!a!ic-i/8*-&#*#2#!ar#b72
# cd par!ima'e-s!a!ic-i/8*-&#*#2
# #"par!ima'e
Se optar por usar um live-CD, pode utilizar o Kurumin, Knoppix, Kanotix ou mesmo o
Gentoo Live-CD.
Modstia parte, o Kurumin a melhor opo neste caso, pois alm do Partimage voc ter
mais ferramentas disposio, como o gparted, que, alm de grfico, permite o
redimensionamento de parties, inclusive NTFS.
Como o Kurumin relativamente pequeno, voc pode criar um DVD com imagens de
sistemas a restaurar, como uma espcie de disco de recuperao. Para chamar o Partimage no
Kurumin, use o comando "sudo partimage", ou o cone em Iniciar > Sistema > Backup.
Funes bsicas
A primeira tela mostra as parties disponveis no HD. Lembre-se de que no Linux, as
parties primrias so numeradas de 1 a 4 e as parties lgicas de 5 em diante, mesmo que
voc possua apenas uma ou duas primrias. fcil identificar as parties dentro do
Partimage, pois ele exibe o tamanho e o sistema de arquivos de cada partio.
125
FERRAMENTAS TCNICAS

Naturalmente, o backup da partio precisa ser gravado em algum lugar. Voc pode usar o
espao livre em uma outra partio disponvel no HD (pode ser at uma partio Windows)
ou fazer o backup via rede. Por enquanto, vamos fazer as coisas localmente.
No screenshot voc pode ver que o HD est dividido em vrias parties. A hda1 contm
uma instalao do Windows, a hda2 tem o Slackware instalado, a hda3 est sendo usada
como swap e a hda5 tem o Kurumin instalado.
Eu poderia guardar o backup de qualquer uma das parties em qualquer outra (com exceo
da partio swap), desde que houvesse espao livre disponvel. Poderia fazer um backup do
Slackware na partio do Windows ou um backup do Windows na partio do Kurumin.
Mas, como tenho mais uma partio, a hda6 que est livre, vou us-la como destino.
Para gravar qualquer coisa numa partio, voc precisa primeiro mont-la dentro de alguma
pasta. Relembrando, o comando "genrico" para montar parties no Linux, o mount
seguido do sistema de arquivos em que a partio est formatada, o dispositivo (comeando
com /dev) e finalmente a pasta onde esta partio ficar disponvel. No meu caso, quero
montar a partio hda6, formatada em reiserfs (informado na tela do Partimage) na pasta
/mnt/hda6. O comando ento seria:
# moun! -! reiser$s "dev"hda* "mn!"hda*
Se fosse montar a partio hda1 do Windows na pasta /mnt/hda1, usaria o comando:
# moun! -! v$a! "dev"hda1 "mn!"hda1
Lembre-se de que o suporte escrita em Parties NTFS no Linux ainda muito limitado.
126
FERRAMENTAS TCNICAS
Muitas distribuies vm com o suporte escrita desabilitado e mesmo nas demais no
recomendvel us-lo. Voc pode perfeitamente usar o Partimage para fazer backup de
parties NTFS do Windows, mas sempre recomendvel salvar os backups em parties
formatadas em outros sistemas de arquivo. No tente salvar o backup em outra partio
NTFS.
De volta tela principal do Partimage, precisamos selecionar a partio fonte, de que ser
feita a imagem e o arquivo destino, onde esta imagem ser copiada. No meu caso estou
salvando uma imagem da partio hda5 do Kurumin no arquivo "/mnt/hda6/kurumin.img".

Esta interface de texto pode parecer estranha para quem no est acostumado. Mas as
funes so simples: a tecla Tab permite navegar entre os campos, as setas alternam entre as
opes e a barra de espao permite marcar e desmarcar opes. Depois de terminar,
pressione F5 para ir para a prxima tela, ou F6 para sair.
Na tela seguinte voc ter vrias opes para a criao da imagem:
127
FERRAMENTAS TCNICAS

- Compression level:
None: Simplesmente no comprime nada. Se houver 600 MB ocupados na partio, a
imagem ter 600 MB.
Gzip: O padro, consegue comprimir de 50 a 65%, em mdia.
Bzip2: Consegue comprimir de 5 a 10% mais que o Gzip, mas em compensao a
compresso bem mais lenta.
- Options:
Check before saving: Executa uma verificao na partio, mostrando o tamanho,
espao ocupado e se existe algum tipo de erro no sistema de arquivos.
Enter description: Descrio que aparece na hora de recuperar a imagem, opcional.
Overwrite without prompt: Se houver um arquivo com o mesmo nome, ele
subscrito automaticamente.
- If finished successfully (Depois de terminar de gerar ou recuperar a imagem):
Wait : No faz nada, exibe uma janela de relatrio e fica esperando voc dar ok.
Halt: Desliga a mquina (bom para fazer os backups de madrugada).
Reboot: Reinicia (bom para discos de recuperao automticos).
Quit: S fecha o programa.
- Image split mode (este um dos recursos mais interessantes do partimage, ele pode
quebrar a imagem em vrios arquivos pequenos, facilitando o transporte):
128
FERRAMENTAS TCNICAS
Automatic split: Este o modo default, ele grava a imagem at que o espao livre na
partio destino se esgote. Quando isso acontece, ele para e pede um novo local para
gravar o restante da imagem.
Into files whose size is: Quebra em vrios arquivos do tamanho especificado, em
kbytes. Se voc quer gravar a imagem em vrios CDs de 700 MB, por exemplo, os
arquivos devem ter 715776 kb (699 MB).
Wait after each volume change: Ao marcar essa opo num backup dividido em
vrias imagens, ele exibe um aviso e espera a confirmao cada vez que for gerar um
novo arquivo. til em casos onde preciso trocar a mdia.
Ao dividir em vrios volumes, o partimage adicionar uma extenso ".000", "001", "002",
etc. aos arquivos, como num arquivo .rar dividido em vrios volumes. Na hora de restaurar a
imagem, voc precisa apenas coloc-los todos no mesmo diretrio e apontar para o
arquivo .000.
Pressionando F5 novamente, voc vai para a tela de criao da imagem. Agora s ir tomar
um caf e voltar depois de alguns minutos.
O principal determinante na velocidade de gerao da imagem o processador. O backup de
uma partio com 1.3 GB ocupados num Athlon de 1.0 GHz com compactao em gzip,
demora cerca de 15 minutos:

129
FERRAMENTAS TCNICAS
O tamanho da imagem varia de acordo com o tipo de arquivos dentro da partio. Se for uma
partio de sistema, com um monte de executveis de programas, ento provavelmente o
partimage conseguir reduzir o tamanho do arquivo a aproximadamente um tero do
original. O backup da partio com 1.3 GB de dados do exemplo resultou num arquivo de
502 MB.
Mas, por outro lado, se a partio estiver cheia de arquivos em .mp3, filmes em divx,
imagens em .jpg ou outros tipos de arquivos j compactados, o ndice de compresso ser
mnimo.
Na hora de restaurar uma imagem, o processo basicamente o mesmo: montar a partio ou
CD/DVD onde est o arquivo e apontar a partio que ser regravada e a localizao do
arquivo de imagem na tela principal do partimage. A diferena que agora voc deve marcar
a opo "Restore partition from an imagefile". O nome do arquivo deve ser fornecido
exatamente como aparece no gerenciador de arquivos, incluindo o ".000" que o partimage
adiciona:

As opes de restaurao, que aparecem na segunda tela so:
Simulation of the restoration: como simular a gravao de um CD. Serve para
testar a velocidade e encontrar alguns erros bvios, mas marcando a opo nada
gravado.
130
FERRAMENTAS TCNICAS
Erase Free Blocks with zero values: Imagine que voc tenha um monte de dados
"confidenciais" na partio que est sendo regravada. Voc quer sumir com todos os
vestgios deles, de modo que seja impossvel recuperar qualquer coisa. Esta opo
preenche todo o espao vago da partio com bits zero, resolvendo o problema.
If finished successfully: As mesmas opes que apareceram no menu de gravao:
esperar, reiniciar o micro, desligar ou apenas fechar o programa depois de terminar.

O prximo passo a gravao da imagem propriamente dita, bem mais rpido do que
quando geramos a imagem, j que mais fcil descompactar um arquivo do que gerar o
arquivo compactado.
131
FERRAMENTAS TCNICAS

Fazendo uma imagem de todo o HD
O partimage no oferece a opo de fazer uma cpia completa do HD, apenas de parties
isoladas. Mas, possvel fazer isso se voc utilizar um comando adicional, para copiar tambm a
trilha MBR e a tabela de partio do HD. Com as trs coisas em mos possvel realmente clonar
um HD inteiro.
Para isso, so necessrios mais dois comandos. Acesse o diretrio onde voc est
armazenando as imagens e execute:
# dd i$0"dev"hda o$0hda#mbr coun!01 bs0%12
Este comando faz uma cpia do setor de boot do HD, aqueles primeiros 512 bytes de
extrema importncia onde fica instalado o gerenciador de boot.
# s$disk -d "dev"hda : hda#s$
Este segundo faz uma cpia da tabela de partio do HD. Se voc restaurar estes dois
arquivos num HD limpo, ele ficar particionado exatamente da mesma forma que o primeiro. Se
depois disto voc restaurar tambm as imagens das parties, ficar com uma cpia idntica de todo
o contedo do HD.
O HD destino no precisa necessariamente ser do mesmo tamanho que o primeiro; voc
132
FERRAMENTAS TCNICAS
pode usar um HD maior sem problemas. Neste caso, o excedente ficar vago e voc poder criar
novas parties depois. Naturalmente, o HD destino no pode ser menor que o original, caso
contrrio voc vai ficar com um particionamento invlido e dados faltando; ou seja, uma receita
para o desastre.
Na hora de restaurar os backups, acesse a pasta onde esto os arquivos e inverta os
comandos, para que eles sejam restaurados:
# dd i$0hda#mbr o$0"dev"hda
# s$disk --$orce "dev"hda 9 hda#s$
Se voc tem um HD dividido em duas parties ("hda1" e "hda2", por exemplo),
necessrio fazer imagens das duas parties usando o Partimage e fazer o backup da MBR e da
tabela de particionamento usando os comandos acima. Na hora de restaurar, comece gravando os
dois arquivos (MBR e tabela de partio), deixando para regravar as imagens das parties por
ltimo.
Um jeito fcil de fazer e recuperar os backups instalar temporariamente um segundo HD
na mquina. Se voc instal-lo como master da segunda IDE, ele ser reconhecido como "hdc" pelo
sistema e a primeira partio aparecer como "hdc1".
Gravando imagens num compartilhamento da rede
O partimage inclui tambm um servidor chamado partimaged, que permite fazer backups
via rede. Este programa j vem includo no "Static i386 binary tarball", que baixamos no incio do
artigo. Basta acessar a pasta onde descompactou o arquivo e chama-lo com o comando:
5 #"par!ima'ed
(sempre como root)
Se voc usa o Kurumin ou outra distribuio baseada no Debian, voc pode instal-lo com o
comando:
# ap!-'e! ins!all par!ima'e-server
No final da instalao ele perguntar sobre o diretrio padro do servidor, aceite o default
que "/var/lib/partimaged". Depois de concluda a instalao, inicialize o servidor com o comando:
# par!ima'ed
Para que o servidor funcione corretamente voc deve criar o usurio "partimag" que voc
usar ao se conectar a partir dos clientes:
133
FERRAMENTAS TCNICAS
# adduser par!ima'
5 pass-d par!ima'
Aproveite para dar permisso para que este novo usurio possa gravar arquivos no diretrio
padro do Partimage:
# cho-n -H par!ima'#par!ima' "var"lib"par!ima'ed
A possibilidade de salvar as imagens no servidor vai ser til principalmente se voc estiver
usando o Kurumin rodando direto do CD. Isto resolve aquele velho problema de fazer backups em
micros de clientes antes de mexer no sistema. Voc pode levar um micro j configurado para isso,
ou um notebook com um HD razoavelmente grande, dar boot com o CD do Kurumin, configurar a
rede, salvar a imagem e depois trabalhar tranqilo, sabendo que, mesmo que alguma tragdia
acontea, ser s restaurar a imagem.
Para se conectar ao servidor, voc deve marcar a opo "Connect to server" e fornecer o
endereo IP do servidor na primeira tela de gerao da imagem. Lembra-se do diretrio padro que
voc escolheu ao instalar o partimage-server? Voc deve inform-lo na linha do "Image file to create
use" seguido do nome do arquivo, como em "/var/lib/partimaged/kurumin.img":
Em seguida o programa pedir login e senha de acesso do servidor. O login o usurio
"partimag" que criamos, seguido da senha escolhida. Voc ter tambm a tela de opes com o tipo
de algoritmo de compresso usado, opo de quebrar o arquivo, entre outras que j vimos. Depois
s ir tomar um caf enquanto a imagem gerada :).
134
FERRAMENTAS TCNICAS
Na hora de restaurar, basta refazer o mesmo procedimento, mas agora marcando a opo
"Restore Partition from a image file" na tela principal.
Usando uma rede de 100 megabits, o gargalo a velocidade com que o processador
consegue comprimir os dados e no a banda da rede. Apesar disso, voc notar que via rede o
processo ser um pouco mais lento que localmente por causa da encriptao dos dados via SSL, que
consome bastante processamento. A encriptao permite que voc faa backups com segurana
mesmo via internet. Seus dados estaro seguros ainda que por ventura algum consiga interceptar a
transmisso.
Outra forma de gravar as imagens remotamente, sem precisar recorrer ao servidor do
Partimage, usar o NFS para compartilhar os arquivos. Este o protocolo de compartilhamento de
arquivos padro do Linux e oferece um excelente desempenho alm de ser relativamente fcil de
usar. A desvantagem que que no existe encriptao dos dados.
Para usar o NFS, voc precisa habilitar os servios necessrios nas duas mquinas. Se voc
marcou a categoria "Estao de internet" e "Servidor de arquivos" durante a instalao do Mandriva
ou Fedora, os servios j devem estar ativos na mquina, mas no custa nada verificar.
Para usar o Mandriva como servidor NFS, voc deve ativar os servios "Netfs", "Portmap"
e "Nfslock" no Mandriva Control Center.
Nos clientes Kurumin voc deve ativar os servios "nfs-common" e "portmap". Se voc
quiser usar uma mquina Kurumin tambm como servidor, ento ative tambm o servio "nfs-
kernel-server".
Para ativar estes trs servios no Kurumin, use os comandos abaixo (como root):
# "e!c"ini!#d"por!map s!ar!
# "e!c"ini!#d"n$s-common s!ar!
# "e!c"ini!#d"n$s-kernel-server s!ar!
... ou use o cone mgico disponvel no Iniciar > Redes e acesso remoto > NFS.
Para que os comandos sejam executados automaticamente durante o boot, voc pode
adicionar adicionar as linhas no final do arquivo "/etc/init.d/bootmisc.sh".
As pastas so compartilhadas editando o arquivo "/etc/exports" no servidor. Basta adicionar
as pastas que sero compartilhadas, uma por linha, seguindo os exemplos abaixo:
Para compartilhar a pasta /home/kurumin/arquivos como somente leitura, para todos os
micros da sua rede local, adicione a linha:
6home63urumin6arHuivos 1*2"1-+"#"9.ro/
5 .onde o 1*2"1-+"#" ] a fai>a de endere?os usada na rede/
Para compartilhar a pasta "/home/kurumin/imagens" com permisso de leitura e escrita (que
voc precisaria para gravar as imagens do Partimage), adicione a linha:
135
FERRAMENTAS TCNICAS
6home63urumin6imagens 1*2"1-+"#"9.rw/
Para compartilhar a pasta /imagens, com apenas o micro 192.168.0.3:
6imagens 1*2"1-+"#"2.rw/
Depois de editar o arquivo, voc deve reiniciar o servidor NFS pra que as alteraes entrem
em vigor. Isso pode ser feito com os comandos:
5 service ne!$s res!ar!
(no Mandriva)
5 "e!c"ini!#d"n$s-kernel-server res!ar!
(no Kurumin e outras distribuies derivadas do Debian)
Os clientes podem montar as pastas compartilhadas atravs do comando:
5 moun! -! n$s 1)2#1*8#&#1:"home"ar+uivos "home"ar+uivos
Onde o "192.168.0.1:/home/arquivos" o endereo do servidor, seguido pela pasta que est
sendo compartilhada e o "/home/arquivos" a pasta local onde o compartilhamento est sendo
montado.
Para que a alterao seja definitiva, voc deve adicionar esta instruo no arquivo
"/etc/fstab". A sintaxe fica um pouco diferente, mas os parmetros so basicamente os mesmos. O
comando acima ficaria assim se adicionado no fstab:
1*2"1-+"#"1:6home6arHuivos 6home6arHuivos nfs defaults # #
Voc pode salvar e restaurar imagens em uma pasta montada via NFS da mesma forma que
faria com um arquivo local, basta indicar a localizao do arquivo dentro da pasta.
Segurana: detectando rootkits
Um tipo de ataque grave e relativamente comum contra mquinas Linux so os famosos
rootkits, softwares que exploram um conjunto de vulnerabilidades conhecidas para tentar obter
privilgios de root na mquina afetada. Existem vrios rootkits que podem ser baixados da Net,
variando em nvel de eficincia e atualizao.
Os rootkits podem ser instalados tanto localmente (quando algum tem acesso fsico sua
mquina) quanto remotamente, caso o intruso tenha acesso via SSH, VNC, XDMCP ou qualquer
outra forma de acesso remoto. Neste caso, ele precisar primeiro descobrir a senha de algum dos
usurios do sistema para poder fazer login e instalar o programa.
O alvo mais comum neste caso so contas com senhas fceis. Qualquer instalao com o
SSH ou telnet ativo e alguma conta de usurio com uma senha fcil (ou sem senha) muito
vulnervel a este tipo de ataque.
136
FERRAMENTAS TCNICAS
A instalao do rootkit em geral o ltimo passo de uma srie de ataques que visam obter
acesso a uma conta de usurio do sistema. A partir do momento que possvel logar na mquina, o
atacante executa o rootkit para tentar obter privilgios de root.
Uma vez instalado, o rootkit vai alterar binrios do sistema, instalar novos mdulos no
Kernel e alterar o comportamento do sistema de vrias formas para que no seja facilmente
detectvel. O processo do rootkit no aparecer ao rodar o "ps -aux", o mdulo que ele inseriu no
Kernel para alterar o comportamento do sistema no vai aparecer ao rodar o "lsmod", e assim por
diante.
Aparentemente vai estar tudo normal, voc vai poder continuar usando a mquina
normalmente, mas existiro outras pessoas com acesso irrestrito a ela, que podero us-la
remotamente da forma que quiserem. Se num desktop isso j parece assustador, imagine num
servidor importante.
Naturalmente tambm existem programas capazes de detectar rootkits. Um dos mais
populares o chkrootkit, que pode ser encontrado no: http://www.chkrootkit.org/.
No site est disponvel apenas o pacote com o cdigo fonte, que voc precisa compilar
manualmente, mas ele um programa bastante popular e vem incluso na maior parte das
distribuies.
No Debian, Kurumin ou derivados, voc pode instal-lo pelo apt-get:
5 ap!-'e! ins!all chkroo!ki!
Ele pergunta se deve ser executado automaticamente todos os dias, atravs do cron. Isso
garante uma proteo adicional, pois ele avisa caso futuramente a mquina seja comprometida.

137
FERRAMENTAS TCNICAS
Para executar o chkrootkit, basta cham-lo no terminal:
5 chkroo!ki!
Ele exibe um longo relatrio, mostrando um por um os arquivos checados. Numa mquina
saudvel, todos retornaro um "nothing found":
Searching for !amen 0orm files and dirs""" nothing found
Searching for Maniac files and dirs""" nothing found
Searching for !B1J files and dirs""" nothing found
Searching for &ucoci root3it""" nothing found
Searching for 'dore 0orm""" nothing found
Searching for ShitC 0orm""" nothing found
Searching for Fmega 0orm""" nothing found
"""
Uma parte importante a checagem das interfaces de rede, que aparece no final do relatrio:
Chec3ing [sniffer\""" lo: not promisc and no pac3et sniffer soc3ets
eth#: not promisc and no pac3et sniffer soc3ets
Os sniffers so usados para monitorar o trfego da rede e assim obter senhas e outras
informaes no apenas do servidor infectado, mas tambm de outras mquinas da rede local. Um
dos sintomas de que existe algum sniffer ativo a placa da rede estar em modo promscuo, onde so
recebidos tambm pacotes destinados a outros micros da rede local.
Alguns programas, como o VMware, o Ethereal e o Nessus colocam a rede em modo
promscuo ao serem abertos, mas caso isso acontea sem que voc tenha instalado nenhum destes
programas, possvel que outra pessoa o tenha feito.
Caso o teste do chkrootkit detecte algo, o melhor desligar o micro da rede, reiniciar usando
um live-CD, salvar arquivos importantes e depois reinstalar completamente o sistema. Da prxima
vez mantenha o firewall ativo, mantenha o sistema atualizado e fique de olho no que outras pessoas
com acesso ao sistema esto fazendo.
Se a intruso for um servidor importante e ele for ser enviado para anlise, simplesmente
desconecte-o da rede. Alguns indcios se perdem ao desligar ou reiniciar a mquina.
Infelizmente o teste do chkrootkit no confivel caso seja executado em uma mquina j
infectada, pois muitos rootkits modificam os binrios do sistema, de forma que ele no descubra as
alteraes feitas.
A nica forma realmente confivel de fazer o teste dar boot em algum live-CD e executar o
teste a partir dele, um sistema limpo.
Neste caso, monte a partio onde o sistema principal est instalado e execute o chkrootkit
usando o parmetro "-r", que permite especificar o diretrio onde ser feito o teste:
5 moun! "dev"hda1 "mn!"hda1
5 chkroo!ki! "mn!"hda1
O Knoppix inclui o chkrootkit instalado por padro. Voc pode tambm remasterizar o
138
FERRAMENTAS TCNICAS
Kurumin para inclu-lo.
Instalando o Kurumin 7 (e outras distros) num pendrive ou carto
Os cartes de memria flash sempre foram dispositivos caros, restritos a palmtops e
dispositivos embarcados e, mesmo neles, quase sempre em pequenas quantidades, sempre
combinados com memria RAM ou ROM (mais baratas). Na maioria dos palmtops, voc encontra
uma pequena quantidade de memria flash, que armazena o sistema operacional e uma quantidade
maior de memria SRAM, que alm de ser usada pelo sistema, armazena todos os aplicativos e
arquivos. Apenas recentemente um nmero expressivo de palmtops passou a usar memria flash
como meio primrio de armazenamento.
A memria flash um tipo de memria de estado slido constituda por clulas que
"aprisionam" um impulso eltrico, preservando-o por anos, sem necessidade de alimentao
eltrica. S necessrio energia na hora de ler ou escrever dados.
Por no ter partes mveis, a resistncia mecnica muito boa. Se voc comeasse a espancar
seu computador impiedosamente, o carto de memria seria provavelmente um dos ltimos
componentes a ser danificado ;).
As limitaes da memria flash so o custo por megabyte e uma vida til relativamente
curta, estimada em 1 milho ciclos de leitura ou gravao, o que restringe seu uso em algumas
reas. Voc nunca deve usar um carto de memria flash para armazenar uma partio swap, por
exemplo.
O custo por megabyte sempre ser muito mais alto que o de um HD. A diferena que o
custo unitrio do HD mais ou menos fixo, enquanto num pendrive ou carto o custo
proporcional capacidade. Nenhum HD (novo) custa menos que uns 80 dlares, o que evolui a
capacidade. Por outro lado, em fevereiro de 2007, um carto SD de 2 GB j podia ser comprado por
R$ 80, bem menos que um HD.
139
FERRAMENTAS TCNICAS
Desde o incio do milnio, o custo memria flash tem cado pela metade a cada ano,
esmagado pelas melhorias no processo de fabricao e novas tecnologias, que permitiram que cada
clula passasse a armazenar mais de um bit. Atualmente a memria flash j custa bem menos que a
memria RAM e j comea a substituir os HDs em alguns nichos, onde a portabilidade e o baixo
consumo so importantes. Alm disso, os cartes de memria substituram rapidamente os
disquetes como meio de armazenamento, hoje em dia quase todo mundo tem um :).
A grande maioria das placas-me recentes so capazes de dar boot atravs de um pendrive
ou leitor de cartes plugado na porta USB, como se fosse um HD removvel. No Linux, estes
dispositivos so detectados como se fossem HDs SCSI: um pendrive detectado como "/dev/sda" e,
num leitor com vrias portas, cada tipo de carto visto como um dispositivo diferente. No meu,
por exemplo, o carto SD visto como "/dev/sdc", o carto compact-flash visto como "/dev/sda" e
o memory-stick como "/dev/sdd".
Existem ainda adaptadores, que permitem ligar um carto compact-flash diretamente a uma
das portas IDE da placa-me, fazendo com que ele seja detectado como um HD. Neste caso, ele ser
detectado pelo sistema como "/dev/hda" ou "/dev/hdc", por exemplo.

A novidade que voc pode instalar Linux no pendrive ou carto e dar boot diretamente
atravs dele. Voc pode usar esta idia para ter um sistema porttil, que pode transportar para
qualquer lugar, ou para montar micros sem HD, que usam memria flash como mdia de
armazenamento.
Existem duas opes. Voc pode instalar diretamente o sistema no pendrive, como se fosse
um HD, ou instalar a imagem de um live-CD, como o Kurumin ou o Damn Small, e usar o espao
excedente para armazenar arquivos.
Fazer uma instalao "real" a opo mais simples. Voc precisa apenas escolher uma
distribuio razoavelmente atual, cujo instalador seja capaz de detectar o pendrive, e fazer uma
instalao normal, particionando e instalando. Por outro lado, esta a opo mais dispendiosa, pois
o sistema instalado consume bem mais espao que a imagem compactada usada no CD.
140
FERRAMENTAS TCNICAS
Um segundo problema que a instalao serviria apenas para o PC usado durante a
instalao. Sempre que fosse usar o pendrive em outro micro, voc teria que reconfigurar o sistema
para trabalhar na nova configurao, um trabalho pouco agradvel :-).
A segunda opo, instalar a imagem de um live-CD, mais econmica do ponto de vista do
espao e permite usar o pendrive em vrios micros diferentes, pois o sistema detecta o hardware
durante o boot, como ao rodar a partir do CD. Se voc tem um pendrive ou carto de 2 GB, pode
rodar praticamente qualquer distribuio live-CD, ficando ainda com mais de 1 GB de espao livre
para guardar arquivos. Voc pode tambm remasterizar o CD, de forma a deixar o sistema mais
enxuto, ou usar uma distribuio mais compacta, como o Slax ou o Damn Small.
Vou usar como exemplo o Kurumin 7, mas esta mesma receita pode ser usada no Knoppix e
(com pequenas adaptaes) em praticamente qualquer outra distribuio em live-CD.
Para melhorar a compatibilidade, vamos utilizar o grub como gerenciador de boot. Ele
oferece uma boa flexibilidade e apresenta menos problemas de compatibilidade com placas
diversas. Note que apenas placas-me relativamente recentes realmente suportam boot atravs da
porta USB. Muitas chegam a oferecer a opo no setup, mas falham na hora H.
Esta receita realmente funciona. Se voc seguir todos os passos corretamente e ainda assim
receber um "Grub: Disk error" ou "Error 21", provavelmente o problema com o BIOS da placa
me. Em alguns casos, atualizar o BIOS pode resolver, mas em outros voc vai ter que esperar at
conseguir trocar de placa.
Os problemas de compatibilidade so justamente o principal problema dos pendrives
bootveis; se voc quer algo que funcione em qualquer micro, melhor continuar usando o CD-
ROM :p.
Comece particionando o pendrive. Voc pode tambm usar um carto com a ajuda de um
leitor USB. Ambos so reconhecidos pelo sistema da mesma forma. Se voc tem um pendrive de 2
GB, o ideal deixar uma partio FAT no incio, para guardar arquivos e criar uma partio de 600
ou 700 MB (de acordo com o tamanho da distribuio que for utilizar) para a imagem do sistema. A
partio FAT no incio permite que voc continue acessando o pendrive normalmente atravs do
Windows.
A imagem do Kurumin 7 tem 604 MB. Como precisaremos de algum espao adicional para
os arquivos do grub e sempre algum espao perdido ao formatar, recomendvel criar uma
partio de 650 MB para o sistema. Ao usar outras distribuies, calcule o espao necessrio de
acordo com o tamanho do sistema.
Os pendrives j vem formatados de fbrica, com uma grande partio FAT. Voc pode usar o
gparted para redimension-la e criar uma partio EXT2 para o sistema. Naturalmente, voc poderia
usar outro sistema de arquivos, mas o EXT2 suficiente para o que precisamos.
Num pendrive de 2 GB, ficaria assim:
sda1: 1"2 MB .<'$/
sda2: -,# MB .D;$2/
141
FERRAMENTAS TCNICAS
Para formatar as parties pelo terminal, use os comandos:
# mk$s#v$a! "dev"sda1
# mk$s#e,!2 "dev"sda2
(onde o /dev/sda o dispositivo referente ao pendrive)
O primeiro passo montar o CD-ROM ou o arquivo ISO do sistema e copie todos os
arquivos para dentro da segunda partio do pendrive, deixando-a com a mesma estrutura de pastas
que o CD-ROM:

Originalmente, o Kurumin utiliza o isolinux como gerenciador de boot ao rodar atravs do
CD. Embora at possa ser utilizado, o isolinux possui muitas limitaes com relao a outras
mdias, por isso vamos substitu-lo pelo grub. Para isso, voc vai precisar ter o Kurumin 7 instalado
em alguma partio do HD.
D boot na instalao do Kurumin. Monte a segunda partio do pendrive e crie a pasta
"/boot/grub" dentro dela. Em seguida, copie os arquivos da pasta "/boot/grub" da instalao do
Kurumin no HD para a pasta /boot/grub" do pendrive, que acabou de criar. Crie tambm um arquivo
de texto vazio chamado "teste" (na pasta "/boot/grub" do pendrive), que utilizaremos no passo
seguinte.
No final voc ficar com uma estrutura como esta no pendrive:
142
FERRAMENTAS TCNICAS

Simplesmente copiar os arquivos do grub para dentro do pendrive no basta. Precisamos
agora instalar o grub no setor de boot do pendrive, de forma que ele se torne bootvel. Para isso,
usaremos o prompt do grub. Para acess-lo use (a partir da instalao do Kurumin 7 no HD) o
comando "grub" (como root). Voc ver um prompt como este:
M(U M!UB version #"*J .-)#B lower 6 2#J2B upper memor%/
C Minimal B'SP-li3e line editing is supported" <or the first word4 $'B
lists possible command completions" 'n%where else $'B lists the possible
completions of a device6filename" E
grubT
O grub utiliza uma nomenclatura peculiar para nomear os drives. aqui que o arquivo
"teste" vazio nos vai ser til. Podemos utiliz-lo para descobrir como o grub identificou o pendrive.
Para isso, use o comando "find /boot/grub/teste" no prompt do grub:
grubT find 6boot6grub6teste
Lhd1.1M
A resposta indica que (na nomenclatura usada pelo grub) o arquivo foi encontrado na
partio 1 do hd1. O grub nomeia os dispositivos e parties a partir do zero, de forma que isso
equivale segunda partio, do segundo HD, ou seja, a segunda partio do pendrive :).
Falta agora s instalar o grub na partio indicada. Preste ateno nesta etapa, pois instalar
no dispositivo errado pode ser desastroso :). Use os comandos "root (hd1,1)", "setup (hd1)",
"setup (hd1,1)" e "quit", substituindo os endereos, caso diferentes no seu caso. Note que instalei o
grub duas vezes, uma no raiz do pendrive e outra na partio. Isto no realmente necessrio
(instalar no raiz suficiente), fao apenas por desencargo:
grubT roo! Lhd1.1M
143
FERRAMENTAS TCNICAS
<iles%stem t%pe is e>t2fs4 partition t%pe #>+2
grubT se!up Lhd1M
Chec3ing if L6boot6grub6stage1L e>ists""" %es
Chec3ing if L6boot6grub6stage2L e>ists""" %es
Chec3ing if L6boot6grub6e2fsGstage1G,L e>ists""" %es
!unning Lembed 6boot6grub6e2fsGstage1G, .hd1/L""" 1, sectors are embedded"
Succeeded
!unning Linstall 6boot6grub6stage1 .hd1/ .hd1/1N1, p .hd141/6boot6grub6stage2
6boot6grub6menu"lstL""" succeeded
&one"
grubT se!up Lhd1.1M
Chec3ing if L6boot6grub6stage1L e>ists""" %es
Chec3ing if L6boot6grub6stage2L e>ists""" %es
Chec3ing if L6boot6grub6e2fsGstage1G,L e>ists""" %es
!unning Lembed 6boot6grub6e2fsGstage1G, .hd141/L""" failed .this is not fatal/
!unning Lembed 6boot6grub6e2fsGstage1G, .hd141/L""" failed .this is not fatal/
!unning Linstall 6boot6grub6stage1 .hd141/ 6boot6grub6stage2 p 6boot6grub6menu"lst
L""" succeeded
&one"
grubT +ui!
A esta altura, voc ter uma estrutura similar a esta no pendrive:
6boot6grub
6boot6isolinu>
6B(F11I;
A pasta "/boot/isolinux" contm os arquivos de boot originais do sistema (como o Kernel e o
arquivo initrd.gz), enquanto a pasta "/KNOPPIX" contm a imagem compactada do sistema. O
prximo passo justamente adaptar a cpia do grub que criamos para utilizar estes arquivos.
Acesse a parta "/boot/grub" (no pendrive) e delete o arquivo "device.map", ele contm um
cache dos dispositivos disponveis na mquina, que deletamos para que o grub detecte tudo a cada
boot, j que o pendrive ser utilizado em vrias mquinas diferentes.
Abra agora o arquivo "menu.lst". Apague todo o seu contedo e substitua pelas linhas
abaixo:
default #
timeout *
title Burumin Kinu>
root .hd#41/
3ernel 6boot6isolinu>6linu>2- ramdis3Gsi7e=1##### init=6etc6init vga=J*1 Huiet lang=us
initrd 6boot6isolinu>6minirt"g7
title BFF$ pelo P&
root .hd1/
chainloader N1
Independentemente de como o grub tenha detectado o pendrive na etapa anterior, quando
voc d boot atravs dele, o grub sempre o v como "(hd0)". O sistema est instalado na segunda
144
FERRAMENTAS TCNICAS
partio, o que nos leva ao endereo "(hd0,1)", que usamos na opo principal, responsvel por
carregar o sistema instalado no pendrive. Se por acaso voc estiver usando uma nica partio no
pendrive, substitua o "(hd0,1)" por "(hd0,0)"
Note que as opes "/boot/isolinux/linux26" e "/boot/isolinux/minirt.gz" indicam a
localizao da imagem de Kernel e o arquivo initrd que sero utilizados. O nome dos arquivos pode
mudar de distribuio para distribuio, por isso sempre importante confirmar.
A segunda opo (title BOOT pelo HD) oferece a opo de dar um boot normal, carregando
o sistema instalado no HD, sem que voc precise remover o pendrive.
Com isto, voc j tem um pendrive ou carto bootvel, basta configurar o setup para
inicializar atravs dele e testar. Procure pela opo "First Boot Device" e configure-a com a opo
"Generic USB Flash", "USB-HDD" ou "Removable Devices", de acordo com o que estiver
disponvel. Algumas placas (mesmo alguns modelos relativamente recentes), so problemticas com
relao ao boot atravs de pendrives. Numa Asus A7N8X-X que testei, por exemplo, o pendrive s
era detectado pelo BIOS caso a opo "APIC Function" (que no tem nada a ver com a histria)
estivesse habilitada.

Uma pegadinha que o BIOS s aceita inicializar atravs do pendrive se voc ativar a flag
"bootable" para a partio (do pendrive) onde salvou a imagem do sistema. Sem isso, o boot para
uma uma mensagem reclamando de que o dispositivo no bootvel.
Para fazer isso atravs do gparted, clique com o boto direito sobre a partio "/dev/sda2" e
acesse a opo "Manage Flags". No menu, marque a opo "boot":
145
FERRAMENTAS TCNICAS

No cfdisk, selecione a partio e ative a opo "[Bootable]". Inicialmente a tela de boot
bastante simples, contendo apenas um menu de texto com as duas opes definidas no arquivo
"menu.lst", mas voc pode melhor-la adicionando uma imagem de fundo ou cores. A configurao
visual no muda em relao a uma instalao normal do grub.

O interessante que isto pode ser feito com outros dispositivos compatveis com o padro
usb-storage (onde o carto visto pelo sistema como se fosse um pendrive), como cmeras e at
mesmo palms. Ou seja, com um carto de capacidade suficiente, sua cmera pode, alm de tirar
fotos e guardar arquivos, servir como sistema de boot.
Mais um detalhe importante com relao velocidade da porta USB e tambm
velocidade do pendrive, carto ou cmera usada. As portas USB 1.1 tm a velocidade de
transferncia limitada a cerca de 800 KB/s, o que torna o carregamento do sistema lento, quase
como se desse boot a partir de um CD-ROM 6x.
As portas USB 2.0 so muito mais rpidas, fazendo com que o limitante seja a velocidade do
carto ou pendrive usado. Os de fabricao recente tm geralmente tem uma velocidade de leitura
entre 20 e 40 MB/s, o que j oferece um desempenho satisfatrio.
O grande problema fica por conta de algumas cmeras e pendrives antigos, onde a taxa de
transferncia muito mais baixa, muitas vezes menos de 300 kb/s. Nada o impede de utiliz-los,
mas o desempenho do sistema ser muito ruim.
146
FERRAMENTAS TCNICAS
Salvando as configuraes
At aqui, o sistema d boot como se estivesse rodando a partir do CD, nenhuma grande
vantagem. Podemos incrementar isso usando o espao livre para criar imagens de loopback, para
armazenar configuraes e programas instalados. Fazendo isso, o sistema lembra as suas
configuraes e permite a instalao de programas adicionais, praticamente como se estivesse
instalado.
No Kurumin 7, voc pode utilizar as opes disponveis no "Iniciar > Configurao do Sistema":

Os dois scripts so complementares. O que salva o home, se encarrega de salvar os arquivos
e configuraes salvos na sua pasta de usurio, enquanto o do UnionFS salva os programas
instalados e outras configuraes do sistema. Ambos criam imagens de loopback, arquivos
especialmente formatados, que permitem criar um sistema de arquivos Linux dentro de um arquivo
armazenado numa partio FAT.
Monte a primeira partio do pendrive (a formatada em FAT), execute os dois scripts e salve
ambas as imagens dentro da partio. Se voc est usando um pendrive de 2 GB, e tem 1.3 GB
disponveis na primeira partio, poderia reservar, por exemplo, 500 MB para a imagem do
UnionFS, 300 MB para o home e deixar o restante do espao disponvel para salvar arquivos gerais.
Voc pode criar e deletar arquivos no pendrive normalmente, desde que no mexa nestes dois
arquivos:
147
FERRAMENTAS TCNICAS

Depois de criar as duas imagens, edite novamente o arquivo "/boot/grub/menu.lst" (do
pendrive), adicionando as opes de boot necessrias para carreg-las (informadas ao executar os
scripts) na linha com as opes do Kernel, como em:
3ernel 6boot6isolinu>6linu>2- ramdis3Gsi7e=1#####
init=6etc6init vga=J*1 nomce Huiet lang=us
union0"dev"sda1"union#im' home0"dev"sda1"kurumin#im'
(tudo numa nica linha)
Voc pode tambm adicionar outras opes de boot que quiser usar, especificando qual
resoluo usar, desativando a acelerao 3D ou suporte a impresso (para economizar memria), e
assim or diante. Se voc usa a opo de boot "kurumin screen=1024x768 xmodule=i810 nocups",
por exemplo, a linha completa ficaria:
3ernel 6boot6isolinu>6linu>2- ramdis3Gsi7e=1#####
init=6etc6init vga=J*1 nomce Huiet lang=us
union=6dev6sda16union"img home=6dev6sda163urumin"img
screen=1#2)>J-+ >module=i+1# nocups
A partir da, o sistema passa a inicializar usando as imagens do home e UnionFS por padro,
preservando suas configuraes e programas instalados, rodando quase que da mesma forma que
um sistema instalado.
O Knoppix, Kanotix e vrias outras distribuies oferecem opes similares para salvar as
configuraes no pendrive, que podem ser usadas da mesma maneira, sempre gerando a imagem
com as configuraes e adicionando a opo de boot apropriada no arquivo "/boot/grub/menu.lst"
do pendrive, para que ela seja executada a cada boot.
Monitores de temperatura e coolers
A partir da poca do Pentium II, as placas-me passaram a vir com sensores de temperatura
para o processador e, mais tarde, com sensores para o chipset e tambm monitores de rotao dos
coolers.
Como os processadores dissipam cada vez mais calor, os sensores acabam sendo um recurso
148
FERRAMENTAS TCNICAS
importante. Se o processador trabalha a uma temperatura alta mesmo nos dias frios, significa que
provavelmente vai comear a travar nos dias mais quentes. Com o tempo os coolers acumulam
sujeira, que com o tempo faz com que girem mais devagar, perdendo eficincia. Com os sensores
voc pode tomar conhecimento deste tipo de problema antes que seu micro comece a travar.
No Linux, o suporte aos sensores da placa-me provido por dois projetos, o I2C e o LM-
sensors. At o Kernel 2.4 era necessrio baixar os pacotes e compil-los manualmente, mas, a partir
do 2.6, eles foram includos oficialmente no Kernel, o que facilitou as coisas. Usando uma
distribuio atual voc j encontrar os mdulos pr-instalados.
Os pacotes para distribuies antigas, baseadas no Kernel 2.4 ou anterior, podem ser
baixados no:
http://secure.netroedge.com/~lm78/download.html.
Com os mdulos disponveis, falta apenas instalar o pacote "lm-sensors" que contm os
utilitrios de configurao e arquivos necessrios. Ele inclui o script "sensors-detect", que ajuda na
configurao inicial, detectando os sensores presentes na placa-me e dizendo quais mdulos devem
ser carregados para habilitar o suporte:
# sensors-de!ec!
Ele faz vrias perguntas, e exibe vrios textos explicativos. Voc pode simplesmente ir
aceitando os valores defaults, que fazem ele executar todos os testes.
Caso os sensores da sua placa-me sejam suportados, ele exibir no final um relatrio com
os passos necessrios para ativ-los, oferecendo a opo de fazer as alteraes necessrias
automaticamente:
$o ma3e the sensors modules behave correctl%4
add !hese lines !o "e!c"modules:
5----cut here----
5 I2C adapter drivers
i2c-n$orce2
5 I2C chip drivers
asb1&&
-8/l58%!s
eeprom
5----cut here----
&o %ou want to add these lines to 6etc6modules
automaticall%8 .%es6(F/
No meu caso, preciso apenas carregar os mdulos i2c-nforce2, asb100, w83l785ts e
eeprom, o que pode ser feito manualmente, usando o comando "modprobe", ou de forma definitiva,
adicionado as linhas no final do arquivo "/etc/modules", o que orienta o sistema a carreg-los
durante o boot.
Outra opo incluir os comandos que carregam os mdulos no final do arquivo
"/etc/rc.d/rc.local" ou "/etc/init.d/boomisc.sh" (no Debian e derivados), o que tambm far com que
os mdulos sejam carregados no boot. Neste caso, as linhas a serem inseridas so:
149
FERRAMENTAS TCNICAS
modprobe i2c-n$orce2
modprobe asb1&&
modprobe -8/l58%!s
modprobe eeprom
Voc pode ver uma lista dos chips suportados por cada mdulo no:
http://secure.netroedge.com/~lm78/supported.html.
Com os sensores habilitados, voc pode ver um relatrio com as informaes disponveis
usando os comandos:
# sensors -s
1 sensors
O primeiro precisa ser executado como root e calibra os valores dos sensores usando uma
srie de parmetros especficos para cada chipset. A partir da, voc pode usar o segundo comando
como usurio, para verificar os valores j calibrados.

No muito prtico ficar abrindo o terminal cada vez que quiser checar a temperatura. Voc
pode resolver isso instalando um monitor grfico, como o Ksensors e o Gkrellm, instalados atravs
dos pacotes de mesmo nome. O Ksensors interessante para quem usa o KDE, pois permite usar
um cone com a temperatura ao lado do relgio, enquanto o Gkrellm tem seu pblico fiel graas ao
bom design.
Em ambos os casos, voc precisa ativar os sensores que sero exibidos na janela de
configurao. No Ksensors existe a opo de exibir cada mostrador ao lado do relgio (Dock) ou na
barra do programa (Panel).
150
FERRAMENTAS TCNICAS

Na configurao, existe uma opo para que o Ksensors seja aberto durante a inicializao
do KDE. Mas, em verses antigas do programa, esta opo no funciona, fazendo com que voc
precise sempre inicializ-lo manualmente. Se for o caso, adicione manualmente uma entrada para
ele dentro da pasta "/home/$USER/.kde/Autostart/", onde ficam cones de atalho para todos os
programas que sero inicializados durante o boot.
Existem ainda vrios tipos de scripts, painis do Superkaramba e diversos pequenos
programas que monitoram a temperatura e oferecem funes diversas. Estes scripts so fceis de
escrever, pois simplesmente utilizam as informaes exibidas pelo comando "sensors". Um exemplo
o pequeno script abaixo, que gera um arquivo chamado "/tmp/cpu" e o atualiza a cada dois
segundos com a temperatura do processador. O texto deste arquivo poderia ser exibido numa barra
do Superkaramba ou postado numa pgina web, por exemplo.
while C 1 = 1 EI do
sensors ` grep \temp:\ ` sed -r \s6 N6 6g\ ` cut -d L L -f2 T 6tmp6cpu
sleep 2
done
Em alguns casos, os sensores vm de fbrica desativados, de forma que funcionam apenas
em conjunto com o driver for Windows. Este o caso de, por exemplo, algumas placas-me da Asus
e alguns notebooks da Toshiba, como o A70 e A75. Nestes casos no existe uma forma simples de
ativar os sensores no Linux.
Outra forma de acompanhar a temperatura (que funciona em muitos notebooks que no so
compatveis com o lm-sensors) usar o comando "acpi -V", que mostra informaes sobre o status
da bateria e tambm a temperatura do processador e placa-me, como em:
1 acpi -N
151
FERRAMENTAS TCNICAS
Batter% 1: charged4 1##_
$hermal 1: activeC2E4 -2"# degrees C
$hermal 2: o34 )*"# degrees C
$hermal 2: o34 21"# degrees C
'C 'dapter 1: on-line
Veja que neste caso o notebook tem trs sensores de temperatura: para o processador, chipset
da placa-me e HD.
Com relao bateria, voc pode encontrar algumas informaes interessantes tambm
dentro da pasta "/proc/acpi/battery/". Dentro da pasta, voc encontra subpastas para cada bateria
disponvel e, dentro de cada uma, o arquivo de texto "info". Voc pode listar todos de uma vez
usando o comando:
1 ca! "proc"acpi"ba!!er"="in$o
present: %es
desi'n capaci!: /588 m<h
las! $ull capaci!: /588 m<h
batter% technolog%: rechargeable
design voltage: 1#+## m
design capacit% warning: 1*# m'h
design capacit% low: 2+ m'h
capacit% granularit% 1: 1## m'h
capacit% granularit% 2: 1## m'h
model number: 1rimar%
serial number: ,J2,2 2##,6#261*
batter% t%pe: L>on
FDM info: Pewlett-1ac3ard
Por aqui voc sabe que o notebook usa uma bateria Li-Ion (do tipo que no tem problemas
com o efeito memria) e que a bateria est em bom estado, j que na ltima carga ela atingiu a carga
mxima. Quando a bateria comea a ficar viciada, a carga mxima atingida vai ficando cada vez
mais abaixo da mxima, acompanhado por uma reduo ainda maior na autonomia. Por estas
informaes voc tem como verificar a sade da bateria sem precisar ficar carregando e
descarregando para cronometrar o tempo de autonomia.
Alm de usar os sensores do ACPI, possvel acompanhar a temperatura do HD atravs do
"hddtemp". Ele um pacote extremamente pequeno, que est disponvel na maioria das
distribuies. No Debian voc pode instalar via apt-get:
# ap!-'e! ins!all hdd!emp
Com ele instalado, use o comando "hddtemp" para checar a temperatura do HD desejado, como em:
1 hdd!emp "dev"hda
6dev6hda: S'MSU(M S112#2(: 2*bC
Muitos programas de monitoramento, como o Gkrellm e vrios temas do Superkaramba, so
capazes de acompanhar o relatrio do hddtemp, exibindo a temperatura em tempo real.
152
FERRAMENTAS TCNICAS
Gerenciamento de energia
Voc saberia dizer qual o aplicativo mais usado atualmente, considerando todas as
categorias de aplicativos existentes, incluindo os jogos e aplicativos profissionais? Se voc
respondeu que o Word, ou o OpenOffice, errou, o aplicativo mais usado ainda o jogo de
pacincia (em suas vrias verses), competindo com os navegadores.
Apesar dos processadores estarem cada vez mais poderosos, a maioria dos usurios passa o
dia rodando aplicativos leves, ou jogando pacincia, utilizando apenas uma pequena parcela do
poder de processamento do micro.
Prevendo isso, quase todos os processadores atuais oferecem recursos de economia de
energia, que reduzem a freqncia, tenso usada, ou desligam componentes do processador que no
esto em uso, reduzindo o consumo enquanto o processador sub-utilizado.
Naturalmente, estes recursos de gerenciamento tambm podem ser ativados no Linux.
Vamos a um resumo das opes disponveis.
O primeiro passo instalar o pacote "powernowd", o daemon responsvel por monitorar o
processador, ajustando a freqncia e recursos de acordo com a situao. Nas distribuies
derivadas do Debian, instale-o via apt-get, como em:
# ap!-'e! ins!all po-erno-d
No Ubuntu e Kubuntu o comando o mesmo, voc deve apenas ter o cuidado de
descomentar a linha referente ao repositrio "Universe" dentro do arquivo "/etc/apt/sources.list".
No Mandriva, instale-o usando o comando "urpmi powernowd". No Fedora e outras
distribuies que no o incluam nos repositrios padro, voc pode instalar a partir do pacote com
os fontes, disponvel no: http://www.deater.net/john/powernowd.html.
O powernowd trabalha em conjunto com um mdulo de kernel, responsvel pelo trabalho
pesado. O mdulo varia de acordo com o processador usado:
speedstep-centrino: Este o mdulo usado por todos os processadores Intel atuais,
incluindo todos o Core Solo, Core Duo, Pentium M e Pentium 4 Mobile. A exceo fica por
conta do Celeron M (veja mais detalhes abaixo), que tem o circuito de gerenciamento
desativado.
powernow-k8: Este o mdulo usado pelos processadores AMD de 64 bits (tanto os Athlon
64, quanto os Turion), que oferecem suporte ao PowerNow!. O driver tambm oferece
suporte aos Semprons, que oferecem uma opo mais limitada de gerenciamento.
153
FERRAMENTAS TCNICAS
powernow-k7: Antes do Athlon 64, a AMD produziu diversas verses do Athlon XP
Mobile, uma verso de baixo consumo destinada a notebooks. Este mdulo d suporte a eles.
No caso dos Athlons e Durons antigos, voc pode usar o "athcool", que apresento mais
adiante.
longhaul: Este mdulo d suporte aos processadores Via C3, baseados no core Nehemiah.
Ele encontrado em placas me mini-ITX e em alguns notebooks.
Para ativar o powernowd, voc comea carregando o mdulo "acpi" (caso j no esteja
carregado), seguido do mdulo "freq_table" (que obtm a lista das frequncias suportadas pelo
processador) e um dos 4 mdulos que descrevi acima. A partir da a base est pronta e o powernowd
pode ser finalmente ativado.
Se voc usasse um Athlon 64, por exemplo, os comandos seriam:
# modprobe acpi
# modprobe $re+8!able
# modprobe po-erno--k8
# "e!c"ini!#d"po-erno-d res!ar!
Para um Core 2 Duo, os comandos seriam os mesmos, mudando apenas o mdulo referente
ao processador. Ao invs do "powernow-k8", seria usado o "speedstep-centrino":
# modprobe acpi
# modprobe $re+8!able
# modprobe speeds!ep-cen!rino
# "e!c"ini!#d"po-erno-d res!ar!
Ao instalar o pacote do powernowd, ele ficar configurado para ser carregado durante o
boot. Mas, ainda falta fazer com que o sistema carregue os mdulos necessrios. Para isso, adicione
a lista dos mdulos no final do arquivo "/etc/modules" (sem o "modprobre"), como em:
acpi
$re+8!able
po-erno--k8
Voc pode acompanhar a freqncia de operao do processador atravs do comando
"cpufreq-info". Caso ele no esteja disponvel, procure pelo pacote "cpufrequtils" no gerenciador
de pacotes.
1 cpu$re+-in$o
cpufreHutils ##2: cpufreH-info .C/ &omini3 Brodows3i 2##)-2##-
!eport errors and bugs to linu>Xbrodo"de4 please"
anal%7ing C1U #:
driver: po-erno--k8
C1Us which need to switch freHuenc% at the same time: #
hardware limits: 1### MP7 - 2"## MP7
available $re+uenc s!eps: 2#&& GD7. 1#8& GD7. 1&&& MD7
available cpufreH governors: powersave4 performance4 userspace
154
FERRAMENTAS TCNICAS
current polic%: freHuenc% should be within 1### MP7 and 2"## MP7"
$he governor LuserspaceL ma% decide which speed to use
within this range"
curren! CI; $re+uenc is 1&&& MD7 .asserted b% call to hardware/"
Neste exemplo, estou usando um Athlon 64 3000+, que opera nativamente a 2.0 GHz.
Apesar disso, o processador suporta tambm 1.8 e 1.0 GHz (com variaes na tenso usada). O
chaveamento entre as trs frequncias feito de forma muito rpida, de acordo com a carga de
processamento exigida. Na maior parte do tempo, o processador trabalha a apenas 1.0 GHz, onde
consome menos de 10 watts (algo similar a um Pentium 133).
O fato da freqncia de operao do processador nunca cair abaixo de 1.0 GHz e o
chaveamento entre as freqncias ser muito rpido, faz com que seja realmente difcil de perceber
qualquer diferena de desempenho com o gerenciamento ativado ou desativado.
Ao usar um notebook, voc pode ativar tambm os perfis de performance do cpufreq. Eles
permitem que voc escolha o perfil de gerenciamento a utilizar, alternando entre eles conforme
desejado.
Para isso, carregue tambm os trs mdulos abaixo, usando o modprobe:
cpufreHGondemand
cpufreHGperformance
cpufreHGpowersave
Adicione-os tambm no final do arquivo "/etc/modules", de forma que sejam carregados
durante o boot.
Originalmente, voc alternaria entre eles usando o comando "cpufreq-set -g", o que,
convenhamos, no uma opo muito prtica.
Mas, se voc usa o KDE, pode configurar o Klaptop, de forma a alternar entre eles clicando
no cone da bateria. Para isso, clique com o boto direito sobre o cone da bateria ao lado do relgio
e acesse a opo "Configurar Klaptop":

Dentro da janela, acesse a aba "Configurar ACPI" (a ltima) e clique no boto "Definir
Aplicao Auxiliar". Fornea a senha de root, e, de volta janela principal, marque todas as opes
e clique no "Aplicar":
155
FERRAMENTAS TCNICAS

Para alternar entre os perfis de performance, clique com o boto direito sobre o cone da
bateria e clique na opo desejada dentro do menu "Perfil de Performance". No modo "powersave"
o processador prioriza a autonomia da bateria, mantendo o processador na freqncia mnima e
demorando mais tempo para subir a freqncia de operao, enquanto o modo "performance" o
oposto:

Uma observao que em alguns casos o cpufreq pode ajustar incorretamente a freqncia
mxima de operao do processador, fazendo com que ele opere um degrau abaixo da freqncia
mxima.
Num HP NX6310, com um Core Duo T2300E (1.66 GHz) que testei, ele mantinha a
freqncia do processador sempre a no mximo 1.33 GHz, ao invs de 1.66 GHz. Para corrigir o
problema manualmente, usei o comando:
# cpu$re+-se! --ma, 1*5&&&&
156
FERRAMENTAS TCNICAS
O nmero indica a freqncia mxima do processador (em khz, por isso o monte de zeros),
corrigindo o problema.
Finalmente, chegamos ao caso do Celeron M, que a exceo regra. Embora seja baseado
no mesmo ncleo do Pentium M, ele tem o circuito de gerenciamento desativado, de forma a no
concorrer diretamente com os processadores mais caros. Trata-se de uma castrao intencional, que
no pode ser revertida via software.
Voc at pode reduzir a freqncia de operao do processador usando o cpufreq-set (como
em "cpufreq-set -f 175000", que fora o processador a trabalhar a 175 MHz). O comando
executado sem erros e usando o comando "cpufreq-info" ele realmente informa que o processador
est trabalhando a 175 MHz. Porm, esta informao irreal. Na verdade o que acontece que o
processador continua funcionando na freqncia mxima, porm inclui ciclos de espera entre os
ciclos usados para processar instrues. Ou seja, no Celeron M, o que o comando faz
simplesmente limitar artificialmente o desempenho do processador, sem com isto reduzir de forma
substancial o consumo. Ao forar uma freqncia baixa, o notebook vai ficar extremamente lento,
mas vai continuar esquentando quase da mesma maneira e a carga da bateria durando praticamente
o mesmo tempo.
No caso dos notebooks baseados no Celeron M, as nicas formas de realmente economizar
energia de forma considervel so reduzir o brilho da tela e desativar o transmissor da placa
wireless. A idia da Intel justamente que voc leve para casa um Pentium-M ou Core Duo, que so
seus processadores mais caros.
Uma ltima dica com relao aos Athlons e Durons antigos, que no so compatveis com o
powernowd. No caso deles, voc pode usar o athcool, que utiliza instrues HLT e outros recursos
disponveis para reduzir o consumo e aquecimento do processador.
Us-lo bastante simples, basta instalar o pacote e rodar o comando:
# a!hcool on
Para desativar, use:
# a!hcool o$$
Na hora de instalar, procure pelo pacote "athcool", que encontrado em todas as principais
distribuies. Se ele no estiver disponvel, voc pode tambm recorrer opo de baixar o pacote
com o cdigo fonte, disponvel no:
http://members.jcom.home.ne.jp/jacobi/linux/softwares.html
O athcool funciona perfeitamente em mais de 90% dos casos, mesmo em algumas das piores
placas da PC-Chips. Entretanto, em algumas placas, o athcool pode causar irregularidades no som
(deixando o udio cortado), ou ao assistir vdeos. Algumas poucas placas travam quando ele
ativado e, embora muito raro, ele pode causar perda de arquivos se usado em algumas placas com o
chipset SiS 640, como a Asus L3340M.
157
FERRAMENTAS TCNICAS
Captulo 3: Instalando drivers adicionais
Alm dos drivers open-source includos no Kernel, existe um conjunto de drivers
proprietrios ou semi-proprietrios, na maioria dos casos desenvolvidos pelos prprios fabricantes.
Muitos fabricantes receiam que abrindo as especificaes das suas placas de vdeo, modems e
placas de rede, os concorrentes tero mais facilidade em fazer engenharia reversa para descobrir
seus segredos e us-los em seus prprios produtos.
Muitos destes drivers precisam tambm do firmware do dispositivo para funcionar. O
firmware o responsvel pela comunicao entre o driver e o hardware e um dos componentes do
driver for Windows, que vem includo no CD de drivers que acompanha a placa.
Por no terem cdigo aberto, estes drivers no so includos diretamente no Kernel e pelo
mesmo motivo geralmente tambm no so includos nas distribuies, deixando para o dono o
trabalho de baixar e instal-los manualmente. Em alguns casos a instalao pode ser um pouco
trabalhosa, por isso este captulo inteiro dedicado ao tema.
Verificando links, arquivos e compiladores
Uma das coisas mais chatas com relao a estes drivers que os mdulos gerados durante a
instalao funcionam apenas numa verso especfica do Kernel. Ao atualizar o Kernel, ou reinstalar
uma distribuio diferente, voc precisar sempre reinstalar os drivers.
Existem muitas coisas que podem dar errado na hora de compilar estes drivers. Vamos a um
checklist dos problemas mais comuns:
- Kernel Headers: Os headers do Kernel so um pr-requisito para instalar qualquer driver. Os
arquivos vo na pasta "/usr/src/kernel-headers-2.6.x/" ou "/usr/src/linux-headers-2.6.x/".
Os headers, ou cabealhos, incluem um conjunto de endereos e comandos, necessrios para
que o instalador do driver conhea o Kernel em que est trabalhando e consiga gerar um mdulo sob
medida para ele, mesmo sem ter o cdigo fonte completo. como um marceneiro que constri
mveis sob medida apenas com as medidas dos cmodos da casa.
Dentro da pasta devem existir pelo menos as pastas "arch/", "include/" e "scripts/":
158
FERRAMENTAS TCNICAS
Geralmente, o pacote "kernel-headers" includo nas distribuies inclui apenas a pasta
"include", que no suficiente para instalar muitos drivers, incluindo o VMware, por exemplo.
Nestes casos voc precisar instalar tambm o pacote "kernel-source" que contm o cdigo fonte
completo do Kernel, copiando as outras duas pastas de que precisamos a partir da pasta
"/usr/src/linux/2.6.x".
Outra coisa importante a verificar o contedo da pasta "arch/". Ela deve conter a pasta
"i386" e dentro desta, um conjunto com vrias pastas e arquivos. Em muitas distribuies, a pasta
arch vem vazia dentro do pacote kernel-headers e o contedo movido para dentro do pacote
kernel-source. Nestes casos voc precisa mesmo ter instalados os dois pacotes.
- Kernel Source: O cdigo fonte completo do Kernel vai na pasta "/usr/src/linux-2.6.x/" ou
em alguns casos na pasta "/usr/src/kernel-source-2.6.x", onde o "2.6.x" a verso do Kernel.
Em muitos casos, como no Debian por exemplo, ao instalar o pacote kernel-source ser
apenas copiado um arquivo compactado em .tar.bz2 para a pasta "/usr/src/". Para concluir a
instalao, voc ainda precisar descompact-lo com o comando "tar -jxvf kernel-source-2.6.x".
Dentro da pasta "/usr/src/linux-2.x.x" devem existir as pastas "arch/", "include/" e
"scripts/", juntamente com vrios outras que contm o restante do cdigo fonte. Em alguns casos, o
source no contm a pasta include/. Neste caso, copie-a a partir da pasta com os headers.
Desde que as trs pastas estejam em ordem, o source completo substitui a pasta com os
headers e pode ser usado no lugar deles na hora de compilar drivers.
159
FERRAMENTAS TCNICAS
- O link "/usr/src/linux": Em geral, os scripts de instalao dos drivers no se preocupam
em tentar descobrir em qual pasta esto os headers do Kernel. No lugar disso eles simplesmente
acessam a pasta "/usr/src/linux", que na verdade um link simblico que deve apontar a pasta
correta, com os headers ou o source do Kernel.
Em alguns casos, ele criado automaticamente a instalar os pacotes com os headers ou o
fonte do Kernel, em outros voc dever cri-lo manualmente, apontando ou para a pasta com os
headers, ou para a pasta com o fonte completo.
Lembre-se de que os links simblicos so criados com o comando "ln -s pasta_destino link",
como em "ln -s /usr/src/linux-headers-2.6.14-kanotix-6 /usr/src/linux".
- O link /lib/modules/2.x.x/build: Muitos scripts checam outro link, o build, dentro da pasta
com os mdulos do Kernel, que tambm deve apontar para os headers ou os fontes do Kernel. Caso
seja necessrio cri-lo manualmente, rode o comando:
# ln -s "usr"src"kernel-headers-2#*#, "lib"modules"2#*#,"build
No se esquea de substituir o "2.6.x" em todos os exemplos pela verso do Kernel instalada
na sua mquina.
- A verso do gcc: O compilador mais usado no Linux o gcc. Ele compila no apenas
cdigo fonte em C mas tambm em vrias outras linguagens.
Infelizmente, o gcc possui um histrico de incompatibilidades entre suas diferentes verses,
o que faz com que o mesmo cdigo fonte compilado em verses diferentes gere binrios diferentes e
em muitos casos at mesmo incompatveis entre si.
Os desenvolvedores conhecem bem estes problemas, por isso sempre recomendam que voc
sempre use a mesma verso do gcc que foi usada para compilar o Kernel para compilar qualquer
mdulo ou driver que seja instalado posteriormente. Mdulos compilados com verses diferentes do
gcc muitas vezes no funcionam ou apresentam problemas diversos.
Normalmente as distribuies incluem sempre a mesma verso do gcc que foi usada para
compilar o Kernel. Mas, caso voc tenha atualizado o gcc ou atualizado o Kernel, vai acabar com
verses diferentes.
A partir da, muitos drivers no vo mais compilar, reclamando que a verso do gcc instalada
diferente da usada para compilar o Kernel.
Nestes casos, a soluo ideal procurar a verso correta do gcc e instal-la. Mas, se por
qualquer motivo no for possvel fazer isso, voc pode forar os instaladores a usarem a verso
instalada configurando a varivel CC do sistema para apontar para a verso atual do CC. Este
comando deve ser dado no terminal, antes de chamar o instalador. Ele no persistente, voc deve
us-lo antes de cada instalao:
160
FERRAMENTAS TCNICAS
5 e,por! CC0"usr"bin"'cc-3#&
(onde o "/usr/bin/gcc-4.0" a localizao do executvel do gcc atualmente instalado)
Caso isso no seja suficiente, configure a varivel IGNORE_CC_MISMATCH com o valor
1, o que faz com que a checagem da verso do GCC seja desativado completamente:
5 e,por! >GNEH@8CC8M>SM<CCD01
- Outros compiladores: Alm do gcc, alguns drivers podem precisar de outros
compiladores ou bibliotecas, como o g++ e o libc6-dev. Por isso sempre interessante marcar a
categoria "compiladores" durante a instalao da distribuio. Isso assegura que voc possui o
conjunto completo. No Kurumin voc pode usar o cone mgico "instalar-compiladores".
Configurando softmodems no Linux
Apesar de serem tecnicamente inferiores, por diminurem o desempenho do processador
principal, proporcionarem conexes menos estveis, etc., os softmodems so muito mais baratos e
justamente por isso so a esmagadora maioria hoje em dia.
Como, apesar do avano do ADSL e outras variedades de banda larga, quase 60% dos
brasileiros ainda acessam via modem e destes provavelmente mais de trs quartos utilizam
softmodems, inegvel que o suporte a eles no Linux essencial. Mesmo quem acessa via banda
larga, normalmente possui algum tipo de softmodem instalado no desktop ou notebook, que usa de
vez em quando, seja ao viajar, seja em casos de problemas com o ADSL.
Infelizmente, poucas distribuies Linux contam com suporte nativo a softmodems. No
Mandriva, Fedora, SuSE, e na maioria das outras distribuies, o modem precisa ser instalado
manualmente. Mas, isso no significa que eles no sejam compatveis com o sistema. Pelo
contrrio, alm de atualmente a maior parte dos modelos ser compatvel, muitos apresentam um
melhor desempenho e uma menor utilizao do processador no Linux.
Antes de mais nada, voc precisa descobrir qual o chipset do seu modem. No importa se
ele Clone, Genius, Aoca, ou qualquer outra marca, apenas o chipset utilizado. Para isso, basta dar
uma boa olhada no modem. O chipset chip principal e o nome do fabricante estar decalcado
sobre ele. Se voc estiver com o Windows instalado, uma olhada no gerenciador de dispositivos
tambm pode ajudar.
No Linux a forma mais rpida de descobrir o modelo do modem utilizando o comando:
5 lspci
Ele retorna uma lista com todas as placas PCI e PCMCIA encontradas no micro:
00:00.0 Host bridge: Silicon Integrated Systems [SiS] 740 Host (rev 01)
00:01.0 PCI bridge: Silicon Integrated Systems [SiS] SiS 530 Virtual PCI-to-PCI bridge (AGP)
00:02.0 ISA bridge: Silicon Integrated Systems [SiS] 85C503/5513 (rev 10)
00:02.5 IDE interface: Silicon Integrated Systems [SiS] 5513 [IDE] (rev d0)
161
FERRAMENTAS TCNICAS
00:02.7 Multimedia audio controller: Silicon Integrated Systems [SiS] SiS7012 PCI Audio Accelerator (rev a0)
00:03.0 Ethernet controller: Silicon Integrated Systems [SiS] SiS900 10/100 Ethernet (rev 90)
00:05.0 Communication controller: Conexant HSF 56k HSFi Modem (rev 01)
00:07.0 FireWire (IEEE 1394): VIA Technologies, Inc. IEEE 1394 Host Controller (rev 46)
00:08.0 USB Controller: VIA Technologies, Inc. USB (rev 50)
00:08.1 USB Controller: VIA Technologies, Inc. USB (rev 50)
00:08.2 USB Controller: VIA Technologies, Inc. USB 2.0 (rev 51)
01:00.0 VGA compatible controller: Silicon Integrated Systems [SiS] SiS650/651/M650/740 PCI/AGP VGA Display Adapter
No nosso caso a linha mais interessante a:
##:#,"# Communication controller: Cone>ant PS< ,-3 PS<i Modem .rev #1/
Que indica que o modem um Conexant HSF. Este modem encontrado nos desknotes da
PC-Chips e alguns modelos de notebooks.
O Kurumin j vem com a maior parte dos drivers disponveis pr-instalados, disponveis
direto do CD. Voc pode us-lo para testar o seu modem e verificar com qual driver ele funciona.
Voc pode testar vrios e se por acaso um driver incorreto fizer o micro congelar na hora de discar,
basta reiniciar e tentar de novo
O objetivo deste captulo tanto ajudar os usurios de outras distribuies, cujos
desenvolvedores no tm o cuidado e ateno de adicionar suporte aos softmodems, ou servir de
fonte de consulta para quando voc quiser atualizar os drivers includos no Kurumin. Os drivers
disponveis no Kurumin 5.x e 6.0 (que utilizam o Kernel 2.6) so os seguintes:

A idia bsica
O suporte a dispositivos no Linux obtido atravs de mdulos do Kernel. Estes mdulos
tm uma funo semelhante aos drivers de dispositivos do Windows. As distribuies j incluem
muitos mdulos prontos para a maioria dos dispositivos de hardware. por isso que geralmente a
sua placa de som, rede, etc., so detectadas sem problemas.
No caso dos modens, tudo o que precisamos fazer para que eles possam ser usados baixar o
driver, gerar o mdulo para a verso do Kernel includa na sua distribuio e finalmente instal-lo.
Os mdulos so arquivos instalados na pasta "/lib/modules/2.6.x/", onde o "2.6.x" a verso do
Kernel instalado.
Durante o processo de instalao criado um arquivo (device) dentro do diretrio "/dev",
162
FERRAMENTAS TCNICAS
por onde o modem acessado. No caso dos modem com chipset Lucent e Agere, por exemplo, o
dispositivo "/dev/ttyLT0", O passo final criar um link "/dev/modem" apontando para o
dispositivo do modem.
A partir da voc pode usar o modem normalmente, discando atravs do kppp, pppconfig,
wvdial, ou outro discador de sua preferncia. O programa acessa o link "/dev/modem", que a
localizao padro do modem no Linux, o link aponta para o dispositivo e da em diante o prprio
Kernel cuida de tudo, com a ajuda do mdulo.
Veja que a idia no complicada. O maior obstculo que os mdulos precisam ser
gerados para cada verso de cada distribuio. Um pacote compilado para o Mandriva 2006 s
funcionar nele mesmo, outro compilado para o Fedora 4 s funcionar no Fedora 4, e assim por
diante.
Se voc no encontrar um pacote especfico para a distribuio que est usando (o que
muito comum), a segunda opo baixar o pacote .tar.gz com o cdigo fonte e compil-lo voc
mesmo. Esta a forma mais segura de instalar, pois gerar um mdulo produzido sob medida para o
seu Kernel. Esta tambm ser a nica opo caso voc esteja usando um Kernel personalizado,
diferente do que veio originalmente na distribuio, ou alguma distribuio Linux menos famosa.
Para compilar qualquer driver de modem voc precisa ter instalados os pacotes de
desenvolvimento, necessrios para compilar qualquer programa distribudo em cdigo fonte, alm
dos pacotes kernel-source e kernel-headers, que contm o cdigo fonte do Kernel usado.
Estes pacotes devem estar no CD da distribuio, basta instal-los da forma usual. Lembre-
se, voc deve usar os pacotes do CD da distribuio, eles precisam ser iguais ao Kernel que est
instalado.
Esta a idia bsica, daqui em diante o processo de instalao varia de acordo com o
modem usado.
Driver da Smartlink
A Smartlink um fabricante de modems com chipset PC-Tel. Os drivers desenvolvidos por
eles possuem uma boa qualidade e so os drivers "oficiais" para todo tipo de modem com chipset
PC-Tel, tanto onboard, quanto em verso PCI.
A lista de modems suportados por este driver inclui:
a) Quase todos os modems PC-Tel onboard e AMR, incluindo os das placas M810, M812, e outros
modelos da PC-Chips/ECS, alm de vrios notebooks. O driver permite usar a placa de som
onboard ao mesmo tempo que o modem.
b) Modems PCI com chipset PC-Tel recentes, como os LG-Netodragon. Estes modems possuem um
chipset relativamente grande, com a marca "Smartlink" decalcada.
163
FERRAMENTAS TCNICAS

c) Alguns modems com chipset Intel. O driver da Smartlink era usado nestes casos como uma
soluo precria, at que a prpria Intel lanou seus drivers.
A pgina de download dos drivers a http://www.smlink.com/ (Support > Drivers Download
> Linux Drivers). Um link alternativo o http://linmodems.technion.ac.il/packages/smartlink/, que
contm um arquivo com vrias verses do driver.
Antigamente, existiam duas verses do driver, o "slmdm" era o driver antigo, que funcionava
nas distribuies com Kernel 2.4, enquanto o "slmodem" era a verso recente, que funcionava no
Kernel 2.6. Mas, as verses recentes do slmodem passaram a funcionar tanto no Kernel 2.6, quanto
no antigo 2.4, tornando o outro driver obsoleto.
Para instalar, comece descompactando o arquivo baixado, como em:
1 !ar -7,v$ slmodem-2#)#1&#!ar#'7
Acesse a pasta que ser criada:
1 cd slmodem-2#)#1&"
Leia o arquivo README que contm vrias informaes sobre o driver e os modems
suportados por ele, alm das instrues de instalao.
O procedimento bsico de instalao rodar o comando "make" (dentro da pasta) que vai
compilar o driver e em seguida o comando "make install" (que faz a instalao propriamente dita,
como root).
O prprio instalador se encarrega de adicionar a linha necessria no arquivo
"/etc/modules.conf", criar o device, criar o link "/dev/modem" apontando para ele e adicionar uma
entrada para o mdulo "slamr" no arquivo "/etc/modules.conf", para que ele seja carregado durante
o boot.
164
FERRAMENTAS TCNICAS
A maior parte dos problemas de instalao deste driver ocorrem por falta da instalao dos
compiladores ou por falta do pacote kernel-source. Na maioria das distribuies, especialmente no
caso do Mandriva, apenas o pacote kernel-headers no suficiente, voc precisa instalar mesmo o
pacote kernel-source. Ele grande, mas necessrio neste caso.
Entre os compiladores, verifique especialmente se o pacote de desenvolvimento do glibc est
instalado. No Debian, o pacote se chama "libc6-dev" e est disponvel via apt-get. Em outras
distribuies, procure pelo pacote "glibc-devel" ou "glibc-dev".
A verso atual do driver da Smartlink (slmodem) trabalha de uma forma um pouco diferente
das antigas. importante entender como o driver funciona, j que muito comum aparecerem
problemas diversos ao tentar conectar.
Ao instalar, alm dos mdulos do Kernel, copiados para a pasta "/lib/modules/2.x.x/extra",
instalado um aplicativo de gerenciamento, o "/usr/sbin/slmodemd", que cria uma pasta de logs, a
"/var/lib/slmodem".
Estes so os passos para ativar o driver manualmente caso necessrio:
a) Criar os dispositivos:
# mknod -m *&& "dev"slamr& c 212 & O mknod -m *&& "dev"slamr1 c
212 1 O mknod -m *&& "dev"slamr2 c 212 2 O mknod -m *&&"dev"slamr/
c 212 /
b) Carregar o mdulo do modem:
# modprobe slamr
c) Ativar o slmodemd. Ele precisa ficar ativo, pois ao fech-lo o modem deixa de funcionar. Por isso
o executamos incluindo o "&":
# slmodemd --coun!r0BH<P>L "dev"slamr& Q
d) Ao abrir o slmodemd criado o dispositivo /dev/ttySL0. Crie o link /dev/modem apontando para
ele:
# ln -s$ "dev"!!SL& "dev"modem
O driver oferece suporte tambm a modems PC-Tel USB (raros aqui no Brasil). Caso voc
tenha um destes, use o mdulo "slusb" no lugar do "slamr".
Em casos de problemas na hora de discar, experimente abrir o kppp como root. Isso evita
muitos problemas relacionados a permisses de acesso a dispositivos e arquivos de configurao.
165
FERRAMENTAS TCNICAS
Caso a conexo seja efetuada normalmente, mas voc no consiga navegar, verifique se o
endereo do servidor DNS do provedor (ou qualquer outro DNS vlido) foi adicionado corretamente
ao arquivo "/etc/resolv.conf". Isto muito comum quando o kppp aberto com um login normal de
usurio.
Se o problema persistir, pode ser que o sistema no esteja usando o modem como rota
padro (isso comum se voc tiver tambm uma placa de rede). Para ajustar isso manualmente, use
o comando:
# rou!e add de$aul! ppp&
Em verses antigas, era necessrio usar o comando "route del default" (que remove a rota
padro anterior) antes do "route add default ppp0" (que indica o uso do modem). Atualmente apenas
o segundo comando basta.
Este procedimento bsico se aplica a todas as verses do Kernel 2.6, at o 2.6.12. A partir do
2.6.13, as coisas se complicaram um pouco, pois restries no acesso s funes internas do Kernel
impostas a mdulos que no so GPL fizeram com que o driver deixasse de funcionar.
O driver no compila acusando um erro no arquivo "modem.c" e, mesmo depois que o erro
dentro do cdigo manualmente corrigido, ele continua no funcionando, exibindo um erro ao
carregar o mdulo:
insmod: error inserting \6lib6modules62"-"1)-3anoti>--6misc6slamr"3o\:
-1 Un3nown s%mbol in module
Este erro conhecido e afeta todas as distribuies recentes, baseadas no Kernel 2.6.13 em
diante. A Smartlink ainda no disponibilizou uma verso corrigida do driver e nem existe previso
para isto, j que a ltima verso do driver foi lanada em abril de 2005, quando o problema j
existia.
Mesmo na lista do Kernel, a nica referncia sobre o problema esta mensagem, que
simplesmente recomenda o uso dos drivers open-source includos recentemente no Alsa (veja a
seguir), sem indicar uma soluo para o driver original:
http://www.kernel-traffic.org/kernel-traffic/kt20041019_278.txt
Pesquisando mais a fundo, encontrei dois patches distintos, um postado na lista do Fedora e
outro no Linux-on-Laptops. Isoladamente, nenhum dos dois corrige o problema, mas combinando
ambos possvel chegar a uma verso corrigida do driver, que funciona perfeitamente no Kernel
2.6.14 e, possivelmente, qualquer outra verso recente onde o driver regular apresenta o problema.
http://forums.fedoraforum.org/showthread.php?t=60278
http://linux-on-laptops.com/forum/archive/index.php/t-3.html
Aplicar os patches envolve modificar o cdigo fonte da camada do driver que faz a juno
com o Kernel, o que trabalhoso. O primeiro patch pode ser aplicado diretamente usando o
166
FERRAMENTAS TCNICAS
comando "patch" (que aprendemos a usar no captulo 2), enquanto o outro precisa ser aplicado
manualmente. Outro problema que, para que o driver funcione, necessrio alterar a linha com a
licena para "GPL".
Isso mais problemtico (do ponto de vista legal) do que pode parecer primeira vista. Nas
verses atuais do Kernel, muitas funes esto disponveis apenas para uso de mdulos marcados
como GPL. A alterao da licena dentro do cdigo do driver burla isso, fazendo com que o driver
da Smartlink seja tratado como se fosse um mdulo GPL pelo Kernel, embora seja um mdulo
proprietrio.
Tecnicamente, isto uma violao tanto da licena da Smartlink quanto da prpria licena
GPL, sob a qual distribudo o Kernel.
Embora voc possa aplicar a modificao e gerar o mdulo para uso pessoal, no
permitido redistribuir o mdulo modificado. Voc pode ver mais detalhes sobre esta parte legal
aqui: http://www.ussg.iu.edu/hypermail/linux/kernel/0511.0/0285.html.
Este parece ser o principal motivo de no existir at hoje uma verso atualizada do driver.
Para no violar a GPL, a Smartlink precisaria ou disponibilizar o cdigo, transformando-o num
mdulo GPL, ou modificar o driver de forma que ele no utilize nenhuma das funes restritas do
Kernel (o que seria trabalhoso e provavelmente demorado).
A nica soluo imediata que cada um aplique as modificaes e compile o mdulo
localmente, sem redistribuir o mdulo gerado. Voc pode ensinar seu amigo a compilar o driver,
pode escrever um script para fazer isso automaticamente para ele, mas ele quem deve apertar o
boto. Bem, voc j deve ter entendido o esprito da coisa ;).
Voltando parte tcnica, baixe o arquivo "slmodem-2.9.10.tar.gz" aqui:
http://www.guiadohardware.net/kurumin/download/slmodem-2.9.10.tar.gz
Baixe o patch com as modificaes aqui, salvando-o na mesma pasta que o driver:
http://www.guiadohardware.net/kurumin/download/slmodem-2.9.10.patch
Descompacte o arquivo do driver:
1 !ar -7,v$ slmodem-2#)#1&#!ar#'7
Aplique o patch (voc deve ter o pacote "patch" instalado):
1 pa!ch -p& 9 slmodem-2#)#1&#pa!ch
Acesse agora a pasta com o driver e compile da forma usual:
1 cd slmodem-2#)#1&
1 make
# make ins!all
Isto conclui a instalao normal do driver. Fica faltando apenas iniciar o slmodemd com o
comando que vimos a pouco e discar usando o Kppp ou outro discador. O default dos discadores
167
FERRAMENTAS TCNICAS
j utilizar o "/dev/modem", por isso voc s precisa se preocupar em criar a conexo com o
provedor.
Caso o Kppp no exiba o modem na lista "Modems", adicione-o manualmente, clicando no
"Modems > Novo...". D um nome qualquer e marque a opo "/dev/modem" no campo
"Dispositivo de Modem".
Voc pode usar a funo "Perguntar o Modem" para verificar se o modem est respondendo
sem precisar realmente discar.

Intel AC'97 e ATI IXP
Recentemente, comearam a surgir alguns drivers open-source para modems onboard, como
uma derivao dos drivers para placas de som includos no Alsa. At certo ponto, um modem tem
uma funo similar de uma placa de som: ele transforma sinais digitais em sinais analgicos e
vice-versa. Um modem inclui muitas funes adicionais, como modulao de dados, compresso e
correo de erros, mas os desenvolvedores tm conseguido superar as dificuldades.
- Intel AC'97: As verses recentes do Kernel, a partir do 2.6.11, incluem o mdulo "snd-
intel8x0m", que d suporte a modems Intel onboard, usados em notebooks de fabricao recente
(como o HP NX6110), que no so compatveis com o driver do Intel 537, e tambm aos modems
onboard encontrados em placas-me com chipset nForce, que apesar de no parecer, so bem
similares. O mesmo driver d suporte tambm a vrios modems com chipset PC-Tel, substituindo
parcialmente o driver da Smartlink.
168
FERRAMENTAS TCNICAS
- ATI IXP: Este outro driver open-source, que faz parte do Alsa. Ele d suporte aos
modems onboard encontrados em notebooks com o chipset ATI IXP, como o Toshiba A70. Ele
carregado atravs do driver "snd-atiixp-modem".
Esto disponveis tambm os drivers "snd-via82xxx-modem" (que do suporte aos modems
onboard encontrados em placas-me recentes, com chipset Via) e tambm o "snd-ali5451-modem"
(ainda em estgio primrio de desenvolvimento) que visa oferecer suporte aos modems encontrados
em placas com chipset ALI 5451.
Todos estes drivers funcionam em conjunto com o driver da Smartlink. Ao us-los, procure
uma verso com um Kernel recente, de preferncia o 2.6.14 ou mais atual. Em verses anteriores
estes drivers no eram estveis, conflitavam com a placa de som ou simplesmente no funcionaram.
A primeira parte carregar o mdulo que d suporte ao modem (carregado no lugar do
slamr), como em:
# modprobe snd-in!el8,&m
.ou snd-atii>p-modem4 snd-via+2>>>-modem ou snd-ali,),1-modem4 de
acordo com o modem usado/"
Para que ele passe a ser carregado automaticamente durante o boot, adicione o mdulo no
final do arquivo "/etc/modules".
O passo seguinte compilar o executvel "/usr/sbin/slmodemd" com suporte aos mdulos
Alsa. Para isso, baixe o pacote "slmodem-2.9.9d-alsa.tar.gz" (ou a verso mais recente no momento
em que estiver lendo) no http://linmodems.technion.ac.il/packages/smartlink/. Note que voc precisa
baixar um dos arquivos com "alsa" no nome.
Descompacte o arquivo, acesse a pasta que ser criada e rode os comandos:
1 cd modem"
1 make S;IIEHC8<LS<01
# make ins!all
Para compilar o driver com suporte a Alsa, alm dos compiladores de praxe, voc precisar
do pacote "libasound2-dev". Lembre-se tambm de que ao instalar uma verso do driver anterior
2.9.11 num Kernel recente, voc precisar primeiro instalar o patch para o driver Smartlink, que
citei anteriormente.
Como neste caso voc precisa apenas do executvel do slmodem e no dos mdulos slamr e
slusb, voc pode em muitos casos utilizar os pacotes includos nas distribuies, ao invs de precisar
compilar dos fontes. Nas distribuies derivadas do Debian, instale o pacote "sl-modem-daemon":
# ap!-'e! ins!all sl-modem-daemon
Em outras distribuies, procure pelo pacote "slmodem" ou "sl-modem".
Com o "/usr/sbin/slmodemd" instalado, execute-o, especificando o parmetro "--alsa", que
169
FERRAMENTAS TCNICAS
especifica que ele deve usar o driver do alsa, ao invs do slamr:
# "usr"sbin"slmodemd --coun!r0BH<P>L --alsa modem:1
O "modem:1" especifica o dispositivo do modem (da forma como referenciado pelo
driver). Dependendo da verso do driver usada, o modem pode ser visto como "modem:1", "hw:1",
"modem:0" (atribudo geralmente ao ATI IXP) ou "hw:0". Voc pode testar as 4 possibilidades at
encontrar o correto no seu caso.
Ao executar o comando, voc ver uma mensagem como:
SmartKin3 Soft Modem: version 2"*"*d Sep 2J 2##, ##:##:1+
s%mbolic lin3 [6dev6tt%SK#\ -T [6dev6pts6)\ created"
modem [modem:1\ created" $$V is [6dev6pts6)\
Use ["dev"!!SL&\ as modem device4 CtrlNC for termination"
Como pode ver, o slmodemd um programa que fica residente. Ao fech-lo, o acesso ao
modem desativado. Se no quiser que ele obstrua o terminal, use o "&" no final do comando.
O "/dev/ttySL0" o dispositivo por onde o modem acessado. Crie o link "/dev/modem"
apontando para ele, assim fica muito mais fcil localizar o modem dentro do programa de discagem:
# ln -s$ "dev"!!SL& "dev"modem
Ao usar o pacote do Debian, voc pode ativar o driver de uma forma mais simples, usando o
comando "/etc/init.d/sl-modem-daemon start". Ele se encarrega de ativar o slmodemd e criar o
link "/dev/modem" apontando para o dispositivo correto.
A partir da, voc pode discar usando o KPPP. Este o resultado do relatrio gerado pelo
"perguntar ao modem" do KPPP de um Intel AC'97 usado no HP NX6110. Como pode ver, ele
detectado como se fosse um modem Smartlink, por causa do uso do slmodemd. A pista para o
driver que est realmente sendo usado a linha "modem:1 alsa modem driver".

170
FERRAMENTAS TCNICAS
Intel 537 e 536
A Intel tem feito um trabalho razovel com relao ao suporte para seus modems no Linux.
Existe suporte oficial tambm para as placas IPW2100 e IPW2200, usadas nos notebooks Intel
Centrino e, de forma geral, para quase todos os chipsets e outros perifricos produzidos por eles.
Com relao aos modems, existem trs drivers diferentes que podem ser usados sob o Kernel
2.6. Os dois drivers mais usados so o "intel-537EP" e o "intel-537", usados pelos modems Intel
Ambient vendidos atualmente. Voc pode diferenciar os dois usando o comando "lspci". O 537
aparece como "Intel Tigerjet" enquanto o 537ep aparece como "Intel Ambient".

Os modems Ambient com chip TigerJet so os mais comuns, na dvida experimente
primeiro o driver "intel-537". Caso o kppp trave no "Procurando Modem" ou ao tentar estabelecer a
conexo, tente o "537EP".
Os dois drivers esto disponveis no: http://linmodems.technion.ac.il/packages/Intel/537/.
A pgina um arquivo com vrias verses do driver, incluindo verses antigas, que s
funcionam no Kernel 2.4. Enquanto escrevo, as verso mais recentes dos drivers para o Kernel so
ainda os arquivos "intel-537-2.60.80.0.tgz" e "intel-537EP-2.60.80.0.tgz", lanados em outubro de
2004.
O terceiro driver o "intel-536ep", que d suporte aos modems Intel 536EP, um modelo de
modem relativamente comum por volta do incio de 2003. No chipset vem escrito "Intel Han".
O driver para ele est disponvel no http://linmodems.technion.ac.il/packages/Intel/536/.
Ao instalar em qualquer distribuio com o Kernel 2.6, baixe o arquivo "intel-536EP-
2.56.76.0.tgz" (ou mais recente).
171
FERRAMENTAS TCNICAS
A instalao dos trs drivers similar. Depois de baixar o arquivo correspondente,
descompacte-o e acesse a pasta criada, como em:
1 !ar -7,v$ in!el-%/5-2#*&#8&#&#!'7
1 cd cd in!el-%/5-2#*&#8&#&"
Compile e instale o driver usando os comandos:
1 make %/5
# make ins!all
No caso do driver para o Intel 536EP, o segundo comando "make 536". Isso vai gerar o
mdulo "Intel537.ko" (ou Intel536.ko), que ser instalado na pasta /lib/modules/2.6.x.x/misc/", de
forma automtica.
Assim como o driver da Smartlink, os trs drivers da Intel possuem um pequeno problema
com o Kernel 2.6.11 (em diante), onde o driver simplesmente no compila. Este parece ser um
problema generalizado com relao a drivers proprietrios, que quase nunca so atualizados na
mesma velocidade do Kernel.
Para corrigir o problema, baixe e descompacte o arquivo, acesse a pasta que ser criada e,
antes de rodar os comandos "make 537" e "make install", rode o comando:
1 sed -i -e Fs"IM8S<N@8SC<C@"IM8S;SI@N28M@M"'F coredrv"coredrv#c
Como voc pode ver, ele faz uma pequena alterao no arquivo coredrv/coredrv.c, que
resolve o problema. Depois disso, execute o comando "make 537" e o driver compilar
normalmente.
Esta mesma dica serve para os trs drivers, sem nenhuma alterao no comando.
O instalador tenta carregar os drivers no final do processo. Caso voc esteja instalando o
driver correto, o modem j estar pronto para usar.
Os passos para carregar os mdulos manualmente em casos de problemas com a instalao
esto abaixo. Para us-los, voc deve ter, pelo menos, conseguido compilar o mdulo.
# insmod -$ >n!el%/5#ko
# rm -$ rm "dev"hamO rm -$ "dev"modem
# mknod "dev"ham c 23& 1
# ln -s "dev"ham "dev"modem
# chmod *** "dev"modem
Voc pode encontrar as verses mais recentes dos drivers para modems Intel tambm no:
http://developer.intel.com/design/modems/support/drivers.htm. A pgina desorganizada, mas o
melhor lugar para encontrar as ltimas verses dos pacotes, antes que eles sejam publicados no
Linmodems e outros sites.
172
FERRAMENTAS TCNICAS
Lucent e Agere
Os modems Lucent esto entre os primeiros softmodems a serem suportados no Linux. O
driver "ltmodem" est entre os melhores desenvolvidos, com atualizaes freqentes, incluindo
adaptaes necessrias para que o driver continue funcionando corretamente em novas verses do
Kernel. O hardware em si tambm de boa qualidade, recebendo em geral recomendaes por parte
dos usurios.
Se os modems Lucent originais ainda fossem fabricados, a pergunta "qual o melhor
softmodem para usar no Linux?" teria uma resposta fcil. O problema que eles deixaram de ser
fabricados por volta do final de 2002, quando foram substitudos pelos modems SV92, SV92B e
SV92P fabricados pela Agere, que so incompatveis com o driver original. Neles, o driver
carregado normalmente e detecta o modem, mas no consegue abrir a linha, fazendo com que voc
fique num eterno "sem tom de discagem".
O cdigo do modelo vem decalcado no chip do modem. Esta uma foto do chipset de um
SV92P, um dos modems que no funcionam:

O driver para os modems Lucent antigos pode ser baixado no:
http://linmodems.technion.ac.il/packages/ltmodem/kernel-2.6/
Para instalar, comece descompactando o arquivo e acessando a pasta que ser criada:
173
FERRAMENTAS TCNICAS
$ tar -zxvf ltmodem-8.31b1.tar.gz
$ cd ltmodem-8.31b1/
Leia o arquivo 1ST-READ que contm as instrues de instalao. O programa de
instalao bem explicativo, funciona como uma espcie de wizard, orientando durante a instalao
e avisando sobre problemas comuns que podem ocorrer. Os trs comandos que fazem a instalao
propriamente dita so:
1 #"build8module
# #"l!ins!2
# #"au!oload
O primeiro comando gera os mdulos "ltmodem.ko" e "ltserial.ko", o segundo copia-os para
a pasta de mdulos do Kernel e gera o link "/dev/modem" apontando para o dispositivo correto,
enquanto o terceiro gera um script que se encarrega de carregar os mdulos durante o boot.
Existe um driver antigo que d suporte a uma variao do Agere SV92, usado como modem
onboard em alguns notebooks IBM Thinkpad. Este um driver especfico, que no d suporte aos
SV92 encontrados em verso PCI: http://linmodems.technion.ac.il/packages/ageresoftmodem/.
PC-Tel PCI
O driver para modems Pctel PCI (HSP, Micromodem) foi portado para o Kernel 2.6 apenas
em agosto de 2005.
Ele pode ser baixado no: http://linmodems.technion.ac.il/pctel-linux/welcome.html.
Enquanto escrevo, a verso mais atual o arquivo: pctel-0.9.7-9-rht-4c.tar.gz.
Para instal-lo, descompacte o arquivo, acesse a pasta "pctel-0.9.7-9-rht-4c/src/" e rode o
comando "./configure -manual", como root:
1 !ar -7,v$ pc!el-&#)#5-)-rh!-3c#!ar#'7
1 cd pc!el-&#)#5-)-rh!-3c"src"
# #"con$i'ure -manual
O instalador pergunta o chipset para o qual ser gerado o mdulo. Responda "pct789", que
o usado no PC-Tel Micromodem. Os outros mdulos ainda no funcionam no Kernel 2.6, pelo
menos nesta verso do driver.
please enter %our hal t%pe
choose one of: pctJ+*4 cm+J2+4 i+>>4 sis4 via-+-a
hal t%pe: pctJ+*
Se voc tem um PC-Tel onboard numa PC-Chips M748, por exemplo, que usa a opo
cm8738, vai precisar esperar mais um pouco. Os outros tipos so atendidos pelo driver da
174
FERRAMENTAS TCNICAS
Smartlink, por isso talvez nunca sejam portados.
Falta agora apenas compilar o mdulo e concluir a instalao, usando os comandos make e
make install. Como de praxe, voc precisa ter os headers do Kernel e um conjunto bsico de
compiladores para que a instalao seja bem-sucedida:
# make
# make ins!all
No meu caso, a primeira tentativa voltou um erro numa funo no declarada dentro de um
dos arquivos, um erro simples, que pode ser corrigido sem muita dificuldade:
ma3eC1E: Dntering director% [6usr6src63ernel-headers-2"-"1)-3anoti>--\
K& 6home63urumin6tmp6pctel-#"*"J-*-rht-)6src6built-in"o
CC CME 6home63urumin6tmp6pctel-#"*"J-*-rht-)6src6linmodem-2"-"o
pctel-#"*"J-*-rht-)6src6linmodem-2"-"c:
In function[linmodemGconfigGport\:8
pc!el-&#)#5-)-rh!-3"src"linmodem-2#*#c:1##): error:
RMC<8busFundeclared .first use in this function/
ma3eC2E: 99 Cpctel-#"*"J-*-rht-)6src6linmodem-2"-"oE Drro 1
ma3eC1E: 99 Cpctel-#"*"J-*-rht-)6srcE Drro 2
ma3eC1E: Keaving director% [6usr6src63ernel-headers-2"-"1)--\
ma3e: 99 CallE Drro 2
Como pode ver pela mensagem de erro, o instalador est reclamando de uma funo
chamada "MCA_bus", dentro do arquivo "linmodem-2.6.c". Abrindo o arquivo, e usando a funo
de procura do editor de texto, encontrei este trecho:
5ifdef CF(<IMGMC'
69
9 &on\t probe for MC' ports on non-MC' machines"
96
if .p-Tport"flags c U1<GBFF$GF(KVMC' cc dMC'Gbus/
returnI
5endif
Como esta apenas uma funo de verificao (nada essencial), voc pode simplesmente
apagar toda a funo e salvar o arquivo. Isto fez o mdulo passar a compilar sem erros, instalando os
arquivos "linmodem.ko", "pctel.ko" e "pctel_hw.ko" dentro da pasta "/lib/modules/2.6.x/misc/".
Para ativar o modem necessrio carregar os trs mdulos e criar o link "/dev/modem"
apontando para o dispositivo que ser criado:
# modprobe linmodem
# modprobe pc!el coun!r8code0//
# modprobe pc!el8h-
# rm -$ "dev"modem
# ln -s$ "dev"!!S8ICC@L& "dev"modem
# chmod *** "dev"modem
Depois s abrir o KPPP, testar o modem e tentar discar. Para que o carregamento dos
175
FERRAMENTAS TCNICAS
mdulos seja feito automaticamente durante o boot, inclua os comandos no final do arquivo
"/etc/init.d/bootmisc.sh" ou "/etc/rc.d/rc.local".
Modems com chipset Conexant
Os modems Conexant tambm so bem suportados. Eles podem ser encontrados tanto em
verso PCI, quanto onboard em alguns modelos de placas da PC-Chips, ECS e alguns outros
fabricantes e tambm em alguns dos Desknotes da PC-Chips.
Estes drivers so "semi-abertos", a Conexant disponibilizou um mdulo binrio, que
controla as funes bsicas do modem e o restante do driver passou a ser desenvolvido pela
Linuxant, de modo que a parte open-source independente da parte proprietria.
A Linuxant, desenvolve os drivers e d suporte a eles, sem apoio do fabricante. O problema
que o driver vendido por US$ 19, com a opo de uma verso de demonstrao limitada a 14.4k.
O driver pode ser baixado no: http://www.linuxant.com/drivers/hsf/full/downloads.php.
Para instalar, descompacte o arquivo e, dentro da pasta, execute os comandos:
# make ins!all
# hs$con$i'
O primeiro faz a instalao do driver e o segundo detecta o modem instalado, compila o
mdulo e faz a configurao necessria. nesta parte que voc precisa fornecer a chave de
instalao, obtida ao comprar o driver. Sem a chave, o driver funciona em modo "demo", com a
velocidade limitada a 14.4k.
Embora o driver seja de boa qualidade, o valor s justificvel para quem tem um notebook
com o modem onboard e realmente o usa. Para quem tem um desktop, sai mais barato trocar o
modem por um dos modelos suportados.
Por causa da limitao, estes drivers no so includos nas verses recentes do Kurumin.
Acesso discado j lento; a 14.4 ento, melhor nem perder tempo ;).
176
FERRAMENTAS TCNICAS
Instalando placas wireless
Depois dos modems, as placas wireless so provavelmente a categoria de perifricos que
mais causam dores de cabea no Linux. Quase todas as placas funcionam no Linux de uma forma
ou de outra, mas muitas usam drivers ou firmwares binrios, que, assim como no caso dos
softmodems, precisam ser instalados manualmente.

O nmero de chipsets, assim como o nmero de drivers disponveis cresceram
assombrosamente do incio de 2004 para c. Ao usar qualquer placa relativamente atual,
importante, antes de mais nada, usar uma distribuio recente, de preferncia com o Kernel 2.6.11
em diante.
Tenho colocado bastante nfase na verso do Kernel, pois ela o quesito mais importante
com relao a suporte a dispositivos. Novas verses do Kernel trazem sempre novos drivers e
atualizaes dos drivers antigos, que do suporte a novos modelos. sempre uma briga de gato e
rato.
Com relao aos drivers, as placas wireless podem ser divididas em dois grupos. O primeiro
o das placas com drivers nativos, como as com chipset Prism, Lucent Wavelan (usado, por
exemplo, nas placas Oricono), Atmel, Atheros, Intel IPW2100 e IPW2200, ACX100 e 111 e,
recentemente, tambm as Ralink e Realtek 8180. O segundo grupo o das placas que no possuem
drivers nativos, mas podem ser usadas atravs do Ndiswrapper, que permite ativar a placa usando o
driver do Windows.
177
FERRAMENTAS TCNICAS
Note que o fato da placa ter um driver disponvel no significa que ele venha pr-instalado
em qualquer distribuio. Muitos dos drivers so parcialmente proprietrios, outros so
completamente abertos, mas precisam do arquivo de firmware da placa, que por sua vez
proprietrio. Muitas distribuies incluem um conjunto bastante reduzido de drivers por padro,
outras incluem os drivers, mas no incluem os firmwares, que so igualmente necessrios.
Isso faz com que muita gente que possui placas com drivers nativos acabe utilizando-as em
conjunto com o Ndiswrapper, muitas vezes com um desempenho ou estabilidade inferiores aos que
teriam usando o driver nativo. Este mais um campo em que conhecer e saber como instalar cada
um dos drivers disponveis pode poup-lo de muita dor de cabea.
Uma observao importante que, para usar qualquer placa wireless no Linux, voc deve ter
instalado o pacote "wireless-tools", que contm os comandos necessrios para configurar a placa,
como o iwconfig. Hoje em dia, quase todas as distribuies o instalam por padro, mas no custa
verificar.
Os comandos "de baixo nvel" para configurar os parmetros da rede wireless so:
# i-con$i' -lan& essid minharede
(configura o ESSID da rede)
# i-con$i' -lan& channel 1&
(configura o canal usado)
5 i-con$i' -lan& ke res!ric!ed 12/3%*58)<
ou
# iwconfig wlan0 key restricted s:qwert
(configura a chave de encriptao da rede, ao usar WEP. O primeiro comando usa uma chave em
hexa e o segundo uma chave ASCII).
Depois de definir os parmetros da rede, rode o comando "iwconfig". Ele mostra os detalhes
da rede e o endereo MAC do ponto de acesso ao qual a placa est associada:
ath# IDDD +#2"11g DSSI&:LminharedeL
Mode:Managed <reHuenc%:2")-2 MP7 'ccess 1oint: ##:,#:,#:+):21:),
Bit !ate:11 Mb6s $>-1ower:1+ dBm Sensitivit%=#62
!etr%:off !$S thr:off <ragment thr:off
1ower Management:off
Kin3 aualit%=,26*) Signal level=-)2 dBm (oise level=-*, dBm
!> invalid nwid:# !> invalid cr%pt:# !> invalid frag:#
$> e>cessive retries:# Invalid misc:# Missed beacon:,
A partir da, a conexo wireless configurada da mesma forma que uma cabeada, com a
definio do endereo IP, mscara de sub-rede, gateway e DNS. Praticamente todas as distribuies
trazem ferramentas para configurar a rede de forma mais prtica; as duas mais genricas so o
"wireless-config" (do Gnome) e o "Kwifimanager" (do KDE).
178
FERRAMENTAS TCNICAS

Naturalmente, s possvel configurar a rede wireless depois que a placa detectada pelo
sistema e, para isso, necessrio que o driver adequado esteja instalado e o mdulo correspondente
carregado.
Ndiswrapper
O Ndiswrapper uma espcie de Wine para drivers de placas de rede wireless. Ele funciona
como uma camada de abstrao entre driver e o sistema operacional, permitindo que placas
originalmente no suportadas no Linux funcionem usando os drivers do Windows.
Em alguns casos o prprio driver para Windows XP que acompanha a placa funcionar. Em
outros preciso usar alguma verso especfica do driver. Voc pode encontrar vrias dicas sobre
placas testadas por outros usurios do Ndiswrapper no:
http://ndiswrapper.sourceforge.net/wiki/index.php/List
Os drivers para Windows so arquivos executveis, que servem de intrpretes entre a placa e
o sistema operacional. Eles contm o firmware da placa e outras funes necessrias para faz-la
funcionar.
Cada placa diferente; por isso, os drivers de uma no funcionam na outra. Mas, todos os
drivers conversam com o sistema operacional usando uma linguagem especfica de comandos. Ou
seja, do ponto de vista do sistema operacional todos os drivers so parecidos.
O Ndiswrapper consegue executar o driver e "conversar" com ele usando esta linguagem. Ele
179
FERRAMENTAS TCNICAS
trabalha como um intrprete, convertendo os comandos enviados pelo Kernel do Linux em
comandos que o driver entende e vice-versa. O Kernel acha que est conversando com uma placa
suportada, o driver acha que est rodando dentro de um sistema Windows e a placa finalmente
funciona, mesmo que o fabricante no tenha se dignado a escrever um driver nativo.
O Ndiswrapper no funciona com todas as placas e, em outras, alguns recursos como o WPA
no funcionam. Apesar disso, na maior parte dos casos ele faz um bom trabalho.
A pgina do projeto a: http://ndiswrapper.sourceforge.net.
Muitas distribuies j trazem o Ndiswrapper instalado por padro. Nestes casos, voc pode
pular este tpico sobre a instalao e ir direto para a configurao. Procure pelo pacote
"ndiswrapper" no gerenciador de pacotes ou veja se o mdulo e o comando "ndiswrapper" esto
disponveis.
- Instalando: Na pgina voc encontrar apenas um pacote com o cdigo fonte. Como o
Ndiswrapper precisa de um mdulo instalado no Kernel, seria complicado para os desenvolvedores
manter verses para muitas distribuies diferentes. Assim como no caso dos softmodems, para
compilar o pacote voc precisa ter instalados os pacotes kernel-headers e/ou kernel-source e os
compiladores. A verso mais recente pode ser baixada no:
http://sourceforge.net/projects/ndiswrapper/
Descompacte o arquivo e acesse a pasta que ser criada. Para compilar e instalar, basta rodar
o comando:
# make ins!all
(como root)
O Ndiswrapper composto de basicamente dois componentes. Um mdulo, o
ndiswrapper.ko (ou ndiswrapper.o se voc estiver usando uma distribuio com o Kernel 2.4), que
vai na pasta "/lib/modules/2.x.x/misc/" e um executvel, tambm chamado "ndiswrapper", que
usado para configurar o driver, apontar a localizao do driver Windows que ser usado, etc.
Se voc estiver usando uma distribuio que j venha com uma verso antiga do
Ndiswrapper instalada, voc deve primeiro remover o pacote antes de instalar uma verso mais
atual. Caso a localizao do mdulo ou do executvel no pacote da distribuio seja diferente, pode
acontecer de continuar sendo usado o driver antigo, mesmo depois que o novo for instalado.
- Configurando: Depois de instalar o Ndiswrapper, o prximo passo rodar o comando
"depmod -a" (como root) para que a lista de mdulos do Kernel seja atualizada e o novo mdulo
seja realmente instalado. Isto normalmente feito automaticamente pelo script de instalao,
apenas uma precauo.
Antes de ativar o Ndiswrapper, voc deve apontar a localizao do arquivo ".inf" dentro da
pasta com os drivers para Windows para a sua placa. Em geral os drivers para Windows XP so os
que funcionam melhor, seguidos pelos drivers para Windows 2000. Voc pode usar os prprios
180
FERRAMENTAS TCNICAS
drivers includos no CD de instalao da placa. Se eles no funcionarem, experimente baixar o
driver mais atual no site do fabricante, ou pesquisar uma verso de driver testada no ndiswapper no:
http://ndiswrapper.sourceforge.net/wiki/index.php/List
Para carregar o arquivo do driver, rode o comando "ndiswrapper -i", seguido do caminho
completo para o arquivo, como em:
5 ndis-rapper -i "mn!"hda*"2river"Kin(I"GIL;S#in$
Rode agora o comando "ndiswrapper -l" para verificar se o driver foi mesmo ativado. Voc
ver uma lista como:
Installed ndis drivers:
'plus driver present4 hardware present
Com o driver carregado, voc j pode carregar o mdulo usando o modprobe:
5 modprobe ndis-rapper
Se tudo estiver ok, o led da placa ir acender, indicando que ela est ativa. Agora falta
apenas configurar os parmetros da rede wireless.
Se a placa no for ativada, voc ainda pode tentar uma verso diferente do driver. Neste voc
precisa primeiro descarregar o primeiro driver. Rode o ndiswrapper -l para ver o nome do driver e
em seguida descarregue-o com o comando "ndiswrapper -e".
No meu caso o driver se chama "gplus" ento o comando fica:
5 ndis-rapper -e 'plus
Para que a configurao seja salva e o Ndiswrapper seja carregado durante o boot, voc deve
rodar o comando:
5 ndis-rapper -m
E em seguida adicionar a linha "ndiswrapper" no final do arquivo "/etc/modules", para que
o mdulo seja carregado durante o boot.
Voc pode tambm fazer a configurao utilizando o "ndisgtk", um utilitrio grfico,
disponvel nos repositrios do Debian, no Ubuntu e em outras distribuies.
181
FERRAMENTAS TCNICAS
ACX100 e ACX111
Os chipsets ACX100 e ACX111, fabricados pela Texas Instruments, so usados em placas de
vrios fabricantes, incluindo modelos da DLink, LG, Siemens, Sitecom e 3Com. Eles esto entre os
chipsets wireless mais baratos atualmente, por isso so encontrados sobretudo nas placas de baixo
custo.
Uma coisa importante a notar que no existe uma nomenclatura rgida entre os modelos
das placas e os chipsets usados. Por exemplo, as placas Dlink DWL-650 inicialmente vinham com
chipsets PRISM (que possuem um excelente driver nativo a partir do Kernel 2.6), depois passaram a
vir com o chipset Atheros (que funciona usando o Driver MadWiFi ou o Ndiswrapper) e,
finalmente, passaram a vir com o chipset ACX100. Depois sugiram as placas DWL650+, que usam
o chipset ACX111. Ou seja, dentro de um mesmo modelo foram fabricadas placas com 4 chipsets
diferentes!
A nica forma confivel de verificar qual o chipset usado na placa checando a
identificao do chipset, o que pode ser feito usando o comando lspci.
Exemplos de IDs de placas com o chipset ACX so:
#2:##"# (etwor3 controller: Ce,as >ns!rumen!s <C( 111 ,)Mbps 0ireless Interface ##:#+"#
(etwor3 controller: Ce,as >ns!rumen!s <C( 1&& 22Mbps 0ireless Interface
Estas placas funcionam tambm usando o Ndiswrapper, mas usando o driver nativo a
utilizao do processador mais baixa e existem menos relatos de problemas de estabilidade.
Recomendo que voc experimente primeiro o driver nativo e deixe o Ndiswrapper como segunda
alternativa.
A pgina oficial do driver : http://acx100.sourceforge.net/.
182
FERRAMENTAS TCNICAS
A pgina de download dos pacotes com cdigo fonte a:
http://rhlx01.fht-esslingen.de/~andi/acx100/.
Para instalar, descompacte o arquivo tar.gz, acesse a pasta que ser criada e rode os
tradicionais:
5 make
5 make ins!all
Isto copiar o mdulo "acx_pci.ko" para a pasta "/lib/modules/2.6.x/net/". Para garantir que
o mdulo foi instalado corretamente, rode tambm o comando "depmod -a".
Para que a placa funcione, alm do mdulo necessrio ter o arquivo com o firmware da
placa. O firmware o software com as funes que controlam o hardware. Sem o firmware, a placa
um pedao intil de metal e silcio.
O driver acx_pci open-source, mas o firmware no. Embora o arquivo (o firmware) possa
ser redistribudo, assim como um freeware qualquer, muitas distribuies no o incluem por no
concordarem com os termos da licena.
Para baixar o firmware da placa, rode o script "fetch_firmware" que est dentro da pasta
scripts/, na pasta onde foi descompactado o arquivo com o driver:
5 ""$e!ch8$irm-are
Ele perguntar:
Kocating a suitable download tool"""
Searching for 'C;1>> cards on this s%stem"""
0hich firmware files pac3age would %ou li3e to download8
a/ for 'C;1## .$(D$011##/ chipset based cards
b/ for 'C;111 .$(D$0112#6122#/ chipset based cards
c/ for both chipsets
d/ none
Use a opo "C", assim ele j baixa de uma vez os arquivos para os dois chipsets. Isto feito
baixando o driver do Windows e extraindo os arquivos que compem o firmware para a pasta
firmware/, novamente dentro da pasta do driver. Voc deve copi-los para pasta "/usr/share/acx/",
que a localizao padro, onde o mdulo procurar por eles ao ser carregado. Crie a pasta caso
necessrio:
5 mkdir "usr"share"ac,"
5 cp -a "!mp"ac,1&&-&#2#&pre88plus8$i,es8/5"$irm-are"= "usr"share"
ac,"
Feito isso, voc j pode experimentar carregar o mdulo para ativar a placa. Antes de
carregar qualquer mdulo de placa wireless, voc deve carregar o mdulo "wlan", que contm os
componentes genricos:
183
FERRAMENTAS TCNICAS
5 modprobe -lan
5 modprobe ac,8pci
A partir da o led da placa acender indicando que a placa est funcionando e est faltando
apenas configurar a rede.
Para que o mdulo seja carregado automaticamente durante o boot, adicione as linhas
"wlan" e "acx_pci" no final do arquivo "/etc/modules".
Em algumas placas em que testei, o led simplesmente no acende ao ativar o driver, embora
a placa funcione normalmente.
As placas D-Link DWL-650+, que utilizam o chipset ACX111 usam um firmware
especfico. No caso delas, voc deve usar o firmware includo no CD de drivers da placa. Copie o
arquivo "Driver/Drivers/WinXP/GPLUS.bin" do CD para a pasta "/usr/share/acx/" e o renomeie
para FW1130.BIN, substituindo o antigo.
Eventualmente, voc pode encontrar outras placas ACX111 que no funcionam com o
firmware padro. Neste caso, experimente a receita de pegar o arquivo .BIN dentro da pasta de
drivers para Windows XP, copiar para a pasta "/usr/share/acx/" e renomear.
Caso voc tenha copiado os arquivos do firmware para outra pasta, pode especificar isso na
hora de carregar o driver, com o parmetro "firmware_dir=", como em:
5 modprobe ac,8pci $irm-are8dir0"home"carlos"$irm-are"
184
FERRAMENTAS TCNICAS
MadWiFi
O MadWiFi d suporte a placas com chipset Atheros, usado em placas da D-link (como a
DWL-G520), AirLink, 3Com, Linksys, Netgear, AT&T e outros. Este chipset tambm muito
usado em placas mini-PCI, para notebooks. Ele pode ser encontrado, por exemplo, nos Toshiba A70
e A75.
Assim como no caso das placas com chipset ACX, muitos dos modelos com o chip Atheros
possuem variantes com outros chipsets. Por exemplo, a D-Link DWL-G520 usa o chip Atheros,
enquanto a DWL-G520+ usa o chip ACX100.
A melhor forma de checar se voc tem em mos uma placa com o chip Atheros, rodar o
lspci. Voc ver uma linha como:
#2:##"# Dthernet controller: <!heros Communica!ions4 Inc" '!,212 +#2"11abg (IC .rev #1/
A pgina do projeto a: http://madwifi.sourceforge.net/.
O driver pode ser baixado no: http://snapshots.madwifi.org/.
Assim como o driver para placas ACX100, o Madwifi dividido em dois componentes: o
driver propriamente dito e o firmware. A diferena que o firmware j vem includo no pacote; no
necessrio baix-lo separadamente.
Recentemente, o driver recebeu uma grande quantidade de novos recursos, incluindo suporte
a virtual APs (onde um PC configurado para atuar como um ponto de acesso), HAL, WDS e
outros recursos. Como as modificaes so profundas e radicais, os desenvolvedores decidiram
dividir o projeto em dois drivers, atualizados separadamente.
O novo driver chamado de "madwifi-ng" (ng de "new generation"), enquanto o driver
antigo passou a ser chamado "madwifi-old". Geralmente, ningum gosta de usar coisas "velhas",
mas atualmente (maro de 2006) o driver antigo ainda muito mais estvel, por isso a opo
recomendada. Caso no futuro voc tenha problemas com ele, ou caso realmente precise de algum
dos novos recursos, experimente o madwifi-ng.
Para instalar, descompacte o arquivo "madwifi-old-r1417-20060128.tar.gz" (ou mais recente)
e acesse a pasta que ser criada. Rode os comandos de sempre:
5 make
5 make ins!all
Depois de instalado, voc pode carregar os mdulos com os comandos:
5 modprobe -lan
5 modprobe a!h8hal
5 modprobe a!h8pci
185
FERRAMENTAS TCNICAS
O mdulo wlan contm os componentes genricos que do suporte a placas wireless no
Linux. O ath_hal contm o firmware da placa e o ath_pci contm o driver propriamente dito, que
deve ser sempre carregado depois dos dois.
Ao carregar os mdulos, o led da placa j ir acender, indicando que ela est ativa. Para que
eles sejam carregados automaticamente durante o boot, adicione as linhas "wlan", "ath_hal" e
"ath_pci" no final do arquivo "/etc/modules".
Este outro link ensina a compilar pacotes .deb com os drivers, procedimento ideal para quem
usa distribuies derivadas do Debian, como o Kurumin. Lembre-se de que os pacotes gerados
contero os mdulos compilados para o Kernel usado na sua instalao, e no funcionaro em
instalaes com verses diferentes do Kernel. http://www.marlow.dk/site.php/tech/madwifi.
ADMteck ADM8211
Este mais um chipset wireless de baixo custo, encontrado tanto em placas PC-Card quanto
PCI, incluindo alguns modelos da 3Com e D-link e algumas placas PCI baratas, sem pedigree.

fcil reconhecer estas placas pelo chipset, que trs decalcado o modelo. Rodando o
comando lspci voc ver algo como:
##:#+"# (etwor3 controller: Kin3s%s <2M!ek <2M8211 +#2"11b 0ireless Interface .rev 11/
O driver para elas pode ser baixado no: http://aluminum.sourmilk.net/adm8211/.
Enquanto escrevo, a verso mais recente a "adm8211-20051031.tar.bz2". Durante um certo
tempo, este driver foi desenvolvido de forma bastante ativa, com novas verses sendo lanadas
praticamente a cada semana, depois entrou num perodo de manuteno, com atualizaes mais
esparsas, destinadas basicamente a acompanhar mudanas no Kernel.
186
FERRAMENTAS TCNICAS
Para instalar, basta descompactar o arquivo, acessar a pasta e rodar o comando:
5 make ins!all
A instalao consiste em gerar o mdulo "adm8211.ko" e copi-lo para a pasta "/lib/modules/
2.6.x/kernel/drivers/net/wireless/". O script de instalao cuida de tudo automaticamente.
Para ativar a placa, carregue o mdulo com os comandos:
5 modprobe -lan
5 modprobe adm8211
Para que o mdulo seja carregado automaticamente durante o boot, adicione as linhas
"wlan" e "adm8211" no final do arquivo "/etc/modules". Depois falta s configurar os parmetros
da rede.
Embora o driver seja de boa qualidade, as placas em si possuem problemas freqentes
relacionados ao rdio. Algumas captam muita interferncia, outras simplesmente usam
transmissores baratos, ou antenas de baixa potncia, o que faz com que a qualidade do sinal fique
muitas vezes comprometida. De uma forma geral, no so muito recomendveis.
Realtek 8180
Este chipset encontrado em alguns modelos de placas PCI, principalmente em modelos
vendidos pela LG. Embora seja mais raro, voc tambm encontrar algumas placas PCMCIA e at
algumas placas-me com ela onboard.
A Realtek chegou a disponibilizar um driver for Linux, mas ele funciona apenas em
distribuies com Kernel 2.4.18 ou 2.4.20: http://www.realtek.com.tw/downloads/.
Existe um driver open-source, o "rtl8180-sa2400" (desenvolvido de forma independente),
este sim atualizado. O nome surgiu porque originalmente este driver dava suporte apenas a um
pequeno conjunto de placas, que utilizavam o transmissor de rdio Philips sa2400. Com o tempo, o
conjunto de placas suportadas cresceu bastante e atualmente ele j suporta quase todas as placas
baseadas no chipset Realtek 8180, produzidas por vrios fabricantes.
Ele funciona tanto em distribuies com o Kernel 2.4 quanto com o 2.6, e est disponvel no:
http://rtl8180-sa2400.sourceforge.net/
Para instalar, descompacte o arquivo e rode o comando "make" dentro da pasta. Ele vai gerar
4 mdulos: ieee80211_crypt-r8180.ko, ieee80211_crypt_wep-r8180.ko, ieee80211-r8180.ko e
r8180.ko, que precisam ser carregados usando o comando insmod, nesta ordem:
# insmod ieee8&2118crp!-r818&#ko
# insmod ieee8&2118crp!8-ep-r818&#ko
# insmod ieee8&211-r818&#ko
# insmod r818&#ko
187
FERRAMENTAS TCNICAS
Para facilitar, voc pode simplesmente rodar o script "module_load" dentro da pasta do
driver, que automatiza estes quatro comandos.
Para realmente instalar os drivers, de forma a poder carreg-los usando o comando
modprobe, copie-os para dentro da pasta "/lib/modules/2.6.x/misc/" e rode o comando "depmod -a"
para que o sistema atualize a base de mdulos instalados.
A partir da, voc pode incluir as linhas abaixo no final do arquivo "/etc/modules" para que
eles sejam carregados automaticamente durante o boot:
ieee+#211-r+1+#Gcr%pt-r+1+#
ieee+#211Gcr%ptGwep-r+1+#
ieee+#211-r+1+#
r+1+#
Estas placas funcionam tambm usando o Ndiswrapper, que pode ser usado como segunda
opo em caso de problemas com o driver nativo.
Orinoco-USB
Este driver destinado s placas USB com o chipset Prism, como as Compaq WL215 e
W200, encontradas principalmente em notebooks Compaq Evo. Este driver foi durante um bom
tempo desenvolvido como um driver separado, at ser incorporado ao driver Orinoco principal.
Se voc est usando uma distribuio recente, baseada no Kernel 2.6.8 em diante, provvel
que sua placa funcione simplesmente carregando o mdulo "orinoco":
# modprobe orinoco
Caso voc esteja usando uma distribuio antiga, que ainda utilize o driver orinoco sem
suporte aos modelos USB, voc pode instalar manualmente o driver antigo, disponvel no:
http://orinoco-usb.alioth.debian.org
Na pgina esto disponveis pacotes para o Debian e o Red Hat, mas lembre-se de que os
pacotes s funcionam nas verses do Kernel para que foram compilados. Eles s sero teis se voc
estiver usando um Kernel padro das distribuies.
A forma mais rpida de obter o cdigo fonte do driver para instala-l manualmente via
CVS. mais fcil do que parece. Em primeiro lugar, voc precisar instalar o pacote "cvs"
encontrado na distribuio em uso, com um "apt-get install cvs" ou "urpmi cvs" por exemplo. Com
o CVS instalado, rode os comandos:
# e,por! CNS8HSD04ssh4
# cvs -7/
-d:pserver:anonmousJcvs#savannah#non'nu#or':"sources"orinoco co
orinoco
Isso criar uma pasta "orinoco" no diretrio atual. Acesse-a e rode os comandos:
188
FERRAMENTAS TCNICAS
5 make
5 make ins!all
Para que o driver funcione, voc precisar tanto dos mdulos instalados pelo "make; make
install" quanto do firmware da placa. Ainda dentro da pasta com o cdigo fonte, acesse a sub-pasta
"firmware" e execute o script "get_ezusb_fw", que baixa o firmware destinado s Prism USB:
# cd $irm-are"
# #"'e!8e7usb8$-
Isto gerar o arquivo "orinoco_ezusb_fw", que deve ser copiado para a pasta
"/usr/lib/hotplug/firmware/", ou "/lib/firmware" (nas distribuies que utilizam o udev).
Isto ser suficiente para que o hotplug passe a detectar e ativar a placa no boot. Caso seja
necessrio ativa-la manualmente, rode o comando:
# modprobe orinoco8usb
Broadcom
O chipset Broadcom pode ser encontrado em vrios notebooks (como o HP nx6110 e outros
modelos similares) e tambm em diversas placas PCMCIA. Este um chipset de boa qualidade, que
at recentemente no possua um driver nativo, embora funcione bem atravs do Ndiswrapper, na
maioria dos casos.
Em novembro de 2005, um grupo de desenvolvedores conseguiu obter as especificaes do
chipset via engenharia reversa, permitindo que fosse iniciado o projeto de desenvolvimento de um
driver nativo, disponvel no: http://bcm43xx.berlios.de/.
O driver ainda est em estgio inicial de desenvolvimento, mas como existe uma demanda
grande para um driver para estas placas, possvel que ele evolua muito rpido.
IPW2100 e IPW2200
Os chipsets IPW2100 e IPW2200 so fabricados pela Intel e vendidos na forma de
placas mini-PCI destinadas a notebooks. Elas so encontradas em notebooks com a tecnologia
Centrino.
Trata-se na verdade de um golpe de marketing da Intel para vender mais placas, chipsets e
processadores. Para usar a marca "Centrino", um notebook precisa usar um processador Pentium M,
um chipset Intel e uma placa wireless IPW2100 ou IPW2200. Os fabricantes acabam comprando
ento os trs componentes da Intel, ao invs de usar uma placa wireless ou chipset de outro
fabricante. Note que existem muitos notebooks com processadores Pentium M ou Celeron M e
placas wireless de outros fabricantes, mas eles no so "Centrino".
189
FERRAMENTAS TCNICAS
Embora raro, possvel comprar as placas separadamente para uso em outros modelos que
possuam um slot mini-PCI livre (neste caso, as placas so vendidas sem a marca "Centrino").
Embora a foto no d uma boa noo de perspectiva, as placas mini-PCI so realmente pequenas,
quase do tamanho de uma caixa de fsforos.

Voc pode verificar o modelo correto usando o lspci e em seguida baixar o driver no:
http://ipw2100.sourceforge.net/
ou
http://ipw2200.sourceforge.net/
Em ambos os casos, voc precisar de dois arquivos. O driver propriamente dito e o
firmware, novamente um arquivo separado. Como de praxe, os drivers so de cdigo aberto mas o
firmware no.
O driver em si j vem pr-instalado na maioria das distribuies e foi includo oficialmente
no Kernel a partir do 2.6.14, de forma que voc j o encontrar pr-instalado em praticamente
qualquer verso atual.
De qualquer forma, se voc precisar instal-lo ou atualiz-lo manualmente, basta baixar e
descompactar o arquivo e rodar os comandos:
5 make
5 make ins!all
Isto gerar e copiar os mdulos ipw2200.ko, ieee80211.ko, ieee80211_crypt.ko e
ieee80211_crypt_wep.ko para a pasta "/lib/modules/2.6.x/kernel/drivers/net/wireless/".
Em seguida vem o passo que quase sempre necessrio: baixar o arquivo com o firmware
("ipw2200-fw-2.4.tgz", no meu caso), descompactar e copiar os arquivos para dentro da pasta
"/lib/firmware" (em distribuies que usam o udev) ou "/usr/lib/hotplug/firmware/" (nas
distribuies que ainda usam o hotplug), como em:
190
FERRAMENTAS TCNICAS
5 cp -a ip-22&&-$--2#3#!'7 "lib"$irm-are"
5 cd "lib"$irm-are"
5 !ar -7,v$ ip-22&&-$--2#3#!'7
A partir da, a placa deve ser ativada automaticamente durante o boot. Caso voc queira
ativar e desativar o suporte manualmente, use os comandos:
5 modprobe ip-22&&
(para carregar)
5 modprobe -r ip-22&&
(para desativar)
Caso no tenha certeza sobre o uso do hotplug ou udev, no existe problema em copiar os
arquivos para ambas as pastas, ou criar um link apontando para a outra. Ao ser carregado, o mdulo
procura os arquivos na pasta correta. Outra observao que nas verses recentes voc deve manter
o arquivo "ipw2200-fw-2.4.tgz" compactado dentro da pasta "/lib/firmware", pois o mdulo procura
diretamente por ele, ao invs dos arquivos descompactados.
Uma pegadinha, que existem vrias verses do firmware disponveis no
http://ipw2200.sourceforge.net/firmware.php, acompanhando as diferentes verses do driver. A
verso 2.4 funciona em conjunto com o driver de verso 1.07 at 1.10 (usado no Kurumin 6.0, por
exemplo), enquanto o firmware verso 3.0 funciona em conjunto com o 1.11 em diante. Ao instalar
uma nova verso do driver, lembre-se tambm de checar e, se necessrio, atualizar tambm o
firmware.
Voc pode checar qual a verso instalada usando o comando:
# modin$o ip-22&&
(ou modinfo ipw2100)
Ao instalar uma nova verso do firmware, tome sempre o cuidado de primeiro remover os
arquivos da anterior, pois em muitos casos os nomes dos arquivos mudam de uma verso para a
outra, fazendo com que os arquivos fiquem duplicados ao instalar por cima.
Se voc estiver usando uma distribuio recente, que utilize o udev, pode existir um
complicador a mais. O hotplug carrega automaticamente o firmware a partir da pasta
"/usr/lib/hotplug/hotplug/firmware" quando o mdulo carregado. O udev tambm pode fazer isso
automaticamente, desde que exista uma regra apropriada dentro do diretrio "/etc/udev/rules.d" e
que o executvel "/sbin/firmware_helper" esteja disponvel.
O grande problema que muitas distribuies, com destaque para o Debian, propositalmente
no incluem os dois componentes, talvez com o objetivo de dificultar a vida de quem quer carregar
os "firmwares proprietrios do mal". Neste caso, voc vai precisar instalar manualmente.
191
FERRAMENTAS TCNICAS
Comece baixando o cdigo fonte do udev no
http://www.us.kernel.org/pub/linux/utils/kernel/hotplug/. No meu caso, baixei o arquivo "udev-
081.tar.gz".
Descompacte o arquivo e, dentro da pasta que ser criada, rode o comando:
# make @(CH<S0e,!ras"$irm-are
Isso vai compilar apenas o firmware_helper, dentro da pasta "extras/firmware/", sem compilar o
udev inteiro. O prximo passo copi-lo para dentro da pasta "/sbin/".Verifique tambm se ele est
com a permisso de execuo ativa:
# cp -a e,!ras"$irm-are"$irm-are8helper "sbin"
# chmod 6, "sbin"$irm-are8helper
Falta agora criar a regra que instrui o udev a us-lo. Acesse a pasta "/etc/udev/rules.d" e crie
o arquivo "z99_firmware", contendo a linha:
'C$IF(==LaddL4 SUBSVS$DM==LfirmwareL4 !U(N=L6sbin6firmwareGhelperL
Esta regra diz que sempre que for encontrado um dispositivo cujo mdulo precise carregar
um determinado firmware, o udev deve executar o "/sbin/firmware_helper", que se encarrega de
fazer o carregamento. Para que a regra entre em vigor, reinicie o udev com o comando
"/etc/init.d/udev/restart".
Um ltimo complicador, desta vez no relacionado com o driver que em muitos notebooks
o atalho de teclado para ativar e desativar o transmissor wireless controlado via software e s
funciona em conjunto com um driver especfico. Voc encontra uma lista detalhada dos notebooks
problemticos e dicas para ativar o transmissor em cada um no: http://rfswitch.sourceforge.net/?
page=laptop_matrix.
Em alguns casos, necessrio carregar um mdulo adicional, em outros necessrio alterar
manualmente algum parmetro do ACPI, enquanto em alguns (como no Asus M5) a nica opo
dar um boot no Windows e ativar o transmissor usando o utilitrio do fabricante. Estranhamente,
neste caso a configurao salva em algum lugar no CMOS, tornando-se definitiva.
Com os arquivos do firmware no local correto e o hotplug/udev funcionando corretamente, o
driver vai funcionar corretamente. Voc pode verificar as mensagens de inicializao usando o
comando "dmesg | grep ipw", como em:
# dmes' ? 'rep ip-
ipw22##: Intel.!/ 1!F60ireless 22##62*1, (etwor3 &river4 1"#"+
ipw22##: Cop%right.c/ 2##2-2##, Intel Corporation
ipw22##: &etected Intel 1!F60ireless 22##BM (etwor3 Connection
Se, por outro lado, o comando exibir algo como:
ipw22##: Intel.!/ 1!F60ireless 22##62*1, (etwor3 &river4 1"#"+
ipw22##: Cop%right.c/ 2##2-2##, Intel Corporation
ipw22##: &etected Intel 1!F60ireless 22##BM (etwor3 Connection
192
FERRAMENTAS TCNICAS
ipw22##: Unable to load ucode: --2
ipw22##: Unable to load firmware: --2
ipw22##: failed to register networ3 device
ipw22##: probe of ####:#1:#,"# failed with error -,
... rode os comandos abaixo para recarregar o driver:
# echo 1&& : "ss"class"$irm-are"!imeou!
# modprobe -r ip-22&&
# modprobe ip-22&&
A partir da a placa passar a funcionar normalmente. Voc pode incluir os comandos no
final do arquivo "/etc/init.d/bootmisc.sh", ou "/etc/rc.d/rc.local" para que eles sejam executados
automaticamente durante o boot.
O primeiro comando aumenta o tempo de espera do Kernel na hora de carregar o firmware.
O default so 10 milessegundos, o que no suficiente em algumas verses do driver. Aumentando
o tempo de espera, o driver passa a carregar corretamente.
Ralink 2400, 2500 e RT61
A Ralink um fabricante relativamente novo, que fabrica os chipsets rt2400 e rt2500, dois
chips de baixo custo, que esto sendo usados em muitas placas, muitas vezes substituindo os chips
acx111 e rtl8180, que so mais caros do que eles.
Muita gente utiliza (com sucesso) o ndiswrapper para ativar estas placas, mas tambm existe
um driver nativo, que pode ser baixado no: http://prdownloads.sourceforge.net/rt2400/.
Nele voc encontrar os arquivos "rt2400-1.x.x.tar.gz" (o driver antigo, que d suporte s
rt2400) e o "rt2500-1.x.x.tar.gz", que d suporte s rt2500. Voc pode verificar qual dois dois
chipsets usado na sua placa usando o comando "lspci", ou verificar uma lista de placas baseadas
nos dois chipsets no: http://ralink.rapla.net/.
Para instalar o "rt2400-1.x.x.tar.gz", descompacte o arquivo e acesse a pasta que ser criada.
Dentro dela, acesse a pasta "Module" e rode os comandos "make" e "make install". Ser instalado
o mdulo "rt2400". Ao carreg-lo usando o modprobe, a placa ser vista pelo sistema como
"/dev/ra0", ao invs de "/dev/wlan0" como seria mais comum.
Para o "rt2500-1.x.x.tar.gz", o procedimento de instalao o mesmo, rodar os comandos
"make" e "make install" dentro da pasta "Module". A nica diferena que neste caso instalado o
mdulo "rt2500".
Para as placas Ralink RT61, use o driver "rt61-1.1.0-b1.tar.gz" (ou mais recente). Ele
instalado da mesma forma que os outros, usando os comandos "make" e "make install". Isto gerar o
mdulo "rt61", que deve ser carregado para ativar a placa.
193
FERRAMENTAS TCNICAS
Voc encontrar na pgina tambm o arquivo "rt2x00-2.0.0-xx.tar.gz", que um driver novo
e experimental, escrito do zero, com o objetivo de dar suporte s duas placas simultaneamente. Ele
est disponvel apenas para testes. Mas, por estar concentrando a maior parte do desenvolvimento,
este novo driver tende a se tornar a melhor opo assim que estiver concludo.
Duas ltimas observaes:
Sempre que atualizar um destes drivers, use o comando "locate" para verificar se j no
existe uma verso antiga do driver instalada em outra pasta dentro da rvore do Kernel. Caso exista,
primeiro remova o mdulo antigo.
Em casos onde a placa de rede wireless fique trocando de posio a cada boot, crie um
arquivo de texto chamado "/etc/udev/rules.d/001-network.rules" e adicione as trs linhas abaixo.
Elas orientam o sistema a usar o device "ra0" para a rede wireless, sempre que for encontrada uma
placa Ralink:
SUBSVS$DM==LnetL4 &!ID!S==Lrt2,##L4 ('MD=Lra#L
SUBSVS$DM==LnetL4 &!ID!S==Lrt2,J#L4 ('MD=Lra#L
SUBSVS$DM==LnetL4 &!ID!S==Lrt-1L4 ('MD=Lra#L
Linux-wlan-ng
O pacote linux-wlan-ng inclui suporte a vrias variaes do chipset Prism, incluindo o
Prism2. Este pacote vem includo na maior parte das distribuies, por ser completamente open-
source.
Ele (nas distribuies) geralmente dividido em dois pacotes. O pacote "linux-wlan-ng"
inclui os scripts e utilitrios, enquanto o pacote "linux-wlan-ng-modules" contm os mdulos de
Kernel das placas suportadas. Algumas distribuies incluem apenas os scripts e utilitrios, mas no
os mdulos do Kernel. Caso voc precise instal-los manualmente, baixe o pacote no:
ftp://ftp.linux-wlan.org/pub/linux-wlan-ng/.
A instalao similar aos outros drivers que vimos at aqui. Descompacte o arquivo e rode o
comando:
5 make con$i'
O script confirma a localizao do cdigo fonte do Kernel e pergunta quais dos mdulos
devem ser gerados. Existem trs drivers disponveis, o "prism2_plx" (para placas Prism2
PLX9052), "prism2_pci" (para placas com chipset Prism2 em verso PCI ou PC-Card) e
"prism2_usb" (a verso para placas USB).
Em seguida rode os comandos:
5 make all
5 make ins!all
194
FERRAMENTAS TCNICAS
... que concluiro a instalao. Os mdulos so carregados automaticamente durante o boot pelo
hotplug, mas se for necessrio carregar manualmente, use os comandos: "modprobe prism2_pci",
"modprobe prim2_usb" ou "modprobe prim2_plx".
Suporte a webcams
Assim como no caso dos softmodems e placas wireless, existe suporte no Linux para a maior
parte das webcams que podem ser encontradas no mercado. A maioria dos drivers so includos
diretamente no Kernel, com duas importante excees: o spca5xx e o qc-usb, que do suporte
vrios modelos de cmeras comuns. Algumas distribuies j trazem estes dois drivers pr-
instalados, em outras preciso instal-los manualmente.
Uma vez que os mdulos estiverem instalados, o hotplug (ou udev) passa a detectar a cmera
automaticamente, assim que ela plugada porta USB.
O programa de videoconferncia mais famoso (embora longe de ser o mais usado) o
GnomeMeeting (apt-get install gnomemeeting). Ele compatvel com o Microsoft Netmeeting,
porm no com o sistema usado no MSN, que esmagadoramente mais popular.
A partir do Amsn 0.95, do Mercury 1710, do Kopete 0.11 (lanado juntamente com o KDE
3.5) e do Gaim 2.0 (final), todos os principais mensageiros passaram a oferecer suporte a webcam
no MSN de forma quase que simultnea, embora com nveis variados de sucesso.
Entre eles, o Mercury (pelo menos por enquanto) o mais limitado, pois ele utiliza o JMI,
um plug-in Java para acesso webcam, que no compatvel com um nmero muito grande de
modelos, mesmo que a cmera esteja funcionando perfeitamente em outros aplicativos. Nos demais,
a compatibilidade similar: basta que a cmera seja detectada pelo sistema.
195
FERRAMENTAS TCNICAS
Voc pode tambm colocar as imagens da webcam dentro de uma pgina web, de forma que
elas sejam atualizadas automaticamente com uma certa freqncia. Uma boa forma de saber o que
anda acontecendo em casa quando voc no est :-p.
196
FERRAMENTAS TCNICAS
Vrios programas suportam este recurso, entre eles o camstream e o camorama. Dentro do
programa procure a opo "ftp to server" e fornea o endereo do ftp, login e senha para upload das
imagens.

197
FERRAMENTAS TCNICAS
Driver spca5xx
Este driver uma espcie de curinga, suporta quase 100 modelos diferentes de webcams,
com combinaes de vrios chipsets e sensores diferentes. A lista dos modelos suportados est
disponvel no: http://mxhaard.free.fr/spca5xx.html.
A pgina de download a: http://mxhaard.free.fr/download.html.
O driver atualizado com muita freqncia. Enquanto escrevo, a verso mais atual o
arquivo "spca5xx-20050328.tar.gz".
Como de praxe, para instal-lo necessrio ter instalados os compiladores e o cdigo fonte
do Kernel. Descompacte o arquivo com o comando "tar -zxvf spca5xx-20050328.tar.gz", acesse a
pasta spca5xx-20050328 que ser criada e rode os comandos:
: make
5 make ins!all
O script vai compilar o mdulo spca50x.ko e copi-lo para a pasta
"/lib/modules/2.x.x/kernel/drivers/usb/media"
Para carreg-lo manualmente, use o comando "modprobe spca50x". Para fazer com que ele
seja carregado automaticamente durante o boot, adicione a linha "spca50x" no final do arquivo
"/etc/modules".
Teste a cmera no Kopete, Gnomemeeting, Camstream, Camorama, Gqcam ou outro
programa de conferncia ou captura.
Logitech QuickCam
Segundo o desenvolvedor, este driver suporta as cmeras Logitech Quickcam Express (o
modelo antigo), Logitech Quickcam Web, LegoCam, Dexxa Webcam, Labtec Webcam e alguns
modelos da Logitech QuickCam Notebook.
Para instal-lo, o primeiro passo baixar o driver disponvel no: http://qce-ga.sourceforge.net/.
198
FERRAMENTAS TCNICAS

O driver mais atual o "qc-usb", que oferece os mesmos recursos do driver antigo, o qce-ga,
mas com vrias atualizaes.
Para instalar, descompacte o pacote, acesse a pasta que ser criada e gere o arquivo do
mdulo com o comando:
5 make all
Ative o mdulo com o comando:
5 insmod mod8+uickcam#ko
Por ltimo, rode o script que instala o mdulo e os utilitrios:
5 #"+uickcam#sh
Para que o mdulo seja carregado automaticamente durante o boot, adicione a linha
"quickcam" no final do arquivo /etc/modules.conf.
Sqcam
Mais um driver pouco conhecido o Sqcam, que d suporte s BreezeCam e outras cmeras
baratas, que funcionam tambm como webcam, baseadas no chipset SQ905 e variantes. Baixe a
verso mais recente do driver no: http://prdownloads.sourceforge.net/sqcam/.
No meu caso, baixei o arquivo "sqcam_driver_for_kernel_2_6-0.1b.tar.gz". Depois de
descompactar e acessar a pasta criada, compile o mdulo usando o comando:
# make
Caso a compilao falhe com um erro como "*** Warning: "remap_page_range"
[sqcam_driver_for_kernel_2_6/sqcam.ko] undefined!", abra o arquivo "sq905.c" (o arquivo que gera
o erro) e substitua a linha:
199
FERRAMENTAS TCNICAS
if .remapGpageGrange.vma4 start4 page4 1'MDGSIOD4 1'MDGSP'!D&// S
por:
if .remapGpfnGrange.vma4 start4 pageTT1'MDGSPI<$4 1'MDGSIOD4 1'MDGSP'!D&// S
Este erro (descrito no http://dev.openwengo.com/trac/openwengo/trac.cgi/wiki/SqCam)
acontece devido a mudanas nas funes internas do Kernel, a partir da verso 2.6.11. Ele deve ser
corrigido em futuras verses do driver.
Depois de rodar o "make" novamente, ser gerado o arquivo "sqcam.ko", que voc deve
copiar para a pasta "misc/", dentro da pasta de mdulos do kernel, como em:
# cp s+cam#ko "lib"modules"2#*#13-kano!i,-*"misc"
Rode o comando "depmod -a" para atualizar a lista dos mdulos disponveis e carregue o
novo mdulo:
# modprobe s+cam
Modems ADSL USB
Os modems ADSL podem ser divididos em trs categorias. Os modems bridge, os que
podem ser configurados como router e os modems USB, que so os modelos mais baratos, simples
e de um modo geral de mais baixa qualidade.
Os modems que so conectados na placa de rede so muito simples de configurar, pois
conversam com o sistema operacional usando um protocolo padro, o prprio protocolo Ethernet.

Os modelos atuais podem ser configurados como bridge ou router. Em modo bridge (ponte)
o modem serve apenas como um ponto de comunicao entre sua placa de rede e o roteador
instalado na central telefnica. Para se conectar voc precisa utilizar um utilitrio de autenticao,
200
FERRAMENTAS TCNICAS
como o pppoeconf ou o rp-pppoe e informar seu login e senha de acesso, fornecidos pelo provedor.

Ao configurar o modem como roteador, sua vida fica muito mais simples, pois o prprio
modem faz a autenticao e compartilha a conexo com o seu micro. Voc precisa apenas
configurar a rede via DHCP para navegar. O modem pode ainda configurar a conexo com vrios
micros e serve como firewall para a rede.
A configurao do modem pode ser alterada atravs de uma interface de configurao
acessvel via navegador. O modem vem configurado de fbrica com um IP como 10.0.0.138 ou
192.168.1.254 e um login e senha padro, informaes que voc encontra no manual. Voc precisa
apenas acessar este endereo padro usando o navegador, a partir do micro conectado no modem.
Os modems USB por sua vez so uma espcie que trabalha de forma muito mais precria.
Em primeiro lugar, eles precisam de um driver para funcionar, o que nos faz cair no mesmo
problema dos softmodems: os drivers so muitas vezes proprietrios, muitas vezes contm bugs e
no vm pr-instalados na maioria das distribuies.
Alm do driver, necessrio o arquivo do firmware correspondente ao seu modem. O
firmware um software que carregado no prprio modem quando ele ativado e responsvel
por controlar o hardware, permitindo que ele se comunique com o driver instalado na sua mquina.
Sem o firmware correto, o modem simplesmente no funciona.
Se voc tem a opo de escolher, troque imediatamente seu modem ADSL USB por um
modelo completo, ligado na placa de rede. Sua vida ser muito mais longa e feliz. Caso contrrio,
aceite minhas condolncias e continue lendo... :-P.
O driver para o Speedtouch USB (que inclui suporte para o Speedtouch 330 da Alcatel), o
modelo USB mais popular aqui no Brasil, pode ser encontrado no:
http://sourceforge.net/projects/speedtouch/.
Este aquele modelo pequeno, que parece uma pulga em cima do monitor. Ele foi bastante
popular numa certa poca, quando a diferena de preo entre ele e os modems roteadores ainda era
grande. Hoje em dia os modems ADSL de uma forma geral caram muito de preo e deixou de
existir uma diferena significativa.
201
FERRAMENTAS TCNICAS

Voc precisa baixar dois arquivos. O driver propriamente dito est enquanto escrevo na
verso 1.3 e pode ser baixado no: http://prdownloads.sourceforge.net/speedtouch/speedtouch-
1.3.tar.gz.
Na pgina esto disponveis tambm alguns pacotes pr-compilados para o Fedora e
Mandriva.
O segundo arquivo o firmware do modem, o arquivo SpeedTouch330_firmware_3012.zip
que pode ser baixado no: http://www.speedtouch.com/driver_upgrade_lx_3.0.1.2.htm.
Para instalar o driver, descompacte o arquivo, acesse a pasta que ser criada e rode os
comandos de sempre:
1 #"con$i'ure
1 make
1 su 9senha:
# make ins!all
Depois de instalado o driver, copie o arquivo do firmware para a pasta /etc/speedtouch/,
criada durante a instalao.
A configurao do modem feita pelo comando:
5 speed!ouch-se!up
Nesta etapa voc precisa informar os valores VPI e VCI usados pela operadora. Estes valores
so necessrios para configurar todo tipo de modem, por isso voc pode obt-los com o suporte
tcnico ou no Google. Para a Telefonica, por exemplo, o VCI 35 e o VPI 8.
202
FERRAMENTAS TCNICAS
Para conectar, chame o comando
5 speed!ouch-pppoe s!ar!
Num certo ponto ele pedir a localizao do firmware do modem. No passo anterior foram
criados dois arquivos dentro da pasta /etc/speedtouch, o KQD6_3.012 (usado pelo Speedtouch 330
Rev 0200) e o ZZZL_3.012 (Speedtoch 330 Rev 0400). O Rev 0400 o mais comum nas
instalaes da Telefonica; na dvida tente ele primeiro.
Se o driver estiver corretamente instalado, o script vai fazer o upload do firmware para o
modem e ativ-lo. As luzes ficam piscando por pouco mais de um minuto e a conexo finalmente
efetuada.
Para desconectar, use o comando:
5 speed!ouch-pppoe s!op
Se voc quer um utilitrio de configurao mais amigvel para conectar e desconectar, pode
experimentar o gnome-ppx, disponvel no: http://gnome-ppx.berlios.de/.
Na seo de download dentro da pgina clique no "Download Installer version". Isso baixa
um script baseado no autopackage, que baixa e instala o pacote automaticamente, como os cones
mgicos do Kurumin.
Basta dar permisso de execuo a ele e execut-lo com o comando:
# #"'nome-pp,-&#*#1#packa'e
Depois de instalado, chame o programa com o comando:
5 pppoe8dialer

203
FERRAMENTAS TCNICAS
Outro modelo que precisa de drivers adicionais o Zyxel630, que muito popular em
Portugal, vendido geralmente como "Octal a360". Este modelo no to comum no Brasil, mas
possvel encontr-lo venda em algumas lojas online.
O driver pode ser baixado no: http://sourceforge.net/projects/zyxel630-11.
Uma outra pgina dedicada a prestar suporte a este modem, que inclusive disponibiliza um
driver alternativo a: http://gulest.est.ips.pt/octal/.
Enquanto escrevo, a verso mais recente o arquivo "amedyn-2004-08-04-src.tgz". Este
driver foi declarado estvel, por isso no mais atualizado com tanta freqncia.
Descompacte o pacote e, dentro da pasta amedyn/ que ser criada, rode o comando:
# make
Este driver pode ser problemtico de instalar em algumas distribuies. Em vrias, o script
de instalao simplesmente no funciona, terminando com vrios erros. Nestes casos voc pode
compilar apenas o mdulo e copiar o script de inicializao manualmente:
1- Acesse a pasta "amedyn/module/" e rode os comandos:
# #"con$i'ure
# make
Copie os mdulos "amedyndbg.ko" e "amedyn.ko" que sero gerados para a pasta
"/lib/modules/2.x.x/extra/" e rode o comando "depmod -a".
2- Acesse agora a pasta "amedyn/scripts/" e instale-os com o comando:
# make
Edite agora o arquivo /etc/amedyn, onde vai a configurao do protocolo e do provedor. Ele
ficar:
1!F$FCFKGMF&D=)
1I=+
CI=2,
Substitua os valores VPI e VCI pelos do seu provedor. Para conectar, voc precisa carregar
os dois mdulos que do suporte ao modem, usando o modprobe e executar o script que ativa o
modem:
# modprobe amedn
# modprobe amedndb'
5 ams!ar!#sh
O prximo passo configurar a conexo, com as informaes do provedor, login e senha e
conectar. Voc pode usar "gnome-ppx", que citei no tpico anterior, que o programa grfico mais
usado atualmente.
204
FERRAMENTAS TCNICAS
Outros programas, mais antigos, mas que ainda podem ser usados so o "gpppoe-conf" e o
comando "adsl-setup". Ao usar um dos dois, deixe para executar o comando amstart.sh depois de
configurar a conexo.
Driver da nVidia
As placas 3D da nVidia so atualmente as melhores placas 3D para uso no Linux. Elas so
as melhores suportadas dentro do Cedega/WineX e nos games e aplicativos 3D for Linux em geral.
Apesar de ter o cdigo fonte fechado, o driver 3D da nVidia distribudo com uma licena
liberal, que permite sua livre distribuio, desde que no sejam feitas alteraes nem engenharia
reversa.
Graas a isto, um grande nmero de distribuies vem com o driver pr-instalado, ou
disponibilizam scripts ou pacotes prontos, o que bom tanto para os usurios, quanto para a prpria
nVidia, que tem a chance de vender mais placas graas ao bom suporte por parte das distribuies.
Instalando manualmente
A nVidia disponibiliza um instalador genrico, que usa uma interface de modo texto simples
e consegue ser compatvel com quase todas as distribuies sem precisar de qualquer modificao.
O driver pode ser baixado na seo "Download Drivers > Linux and FreeBSD drivers" no
http://www.nvidia.com.
Na pgina de download esto disponveis verses para processadores x86 (Pentium, Athlon,
Duron, etc.), o Linux IA32, uma verso para processadores AMD64 (Linux AMD64/EM64T) e at
uma verso para PCs com processadores Intel Itanium (Linux IA64):
205
FERRAMENTAS TCNICAS
Nas primeiras verses, os drivers eram bem mais complicados de instalar e eram
disponibilizados pacotes separados para cada principal distribuio. A partir da verso 1.0-4349
(maro de 2003), o driver foi unificado, e o mesmo executvel passou a atender todas as
distribuies.
Este arquivo executvel substitui os dois arquivos com o o GLX e o Kernel driver, que
precisavam ser instalados separadamente nas verses antigas do driver. Um instalador simples, em
modo texto, cuida da maior parte do trabalho.
A segunda grande mudana ocorreu a partir do 1.0-7664 (junho de 2005). At o 1.0-7174, o
driver dava suporte a toda a famlia nVidia, das antigas TNT e TNT2, s placas mais recentes.
A partir do 1.0-7664 foi removido o suporte s placas TNT e TNT2 (incluindo as Vanta, Pro
e Ultra), alm das GeForce 256, GeForce DDR, GeForce2 GTS, Ti e Ultra, que passaram a ser
consideradas placas "de legado". Se voc tem uma, a nica opo continuar usando o antigo driver
1.0-7174, que continua disponvel no arquivo:
http://www.nvidia.com/object/linux_display_archive.html.
Enquanto escrevo, a verso mais atual a 1.0 release 8178, o que faz com que o arquivo se
chame NVIDIA-Linux-x86-1.0-8178-pkg1.run.
Este um arquivo binrio, diferente dos pacotes .RPM ou .DEB a que estamos acostumados.
Voc no precisa usar nenhum gerenciador de pacotes, basta rod-lo diretamente em qualquer
distribuio.
206
FERRAMENTAS TCNICAS
Como de praxe, para execut-lo voc precisa antes de mais nada dar permisso de execuo
para ele, o que pode ser feito com o comando:
: chmod 6, NN>2><-Linu,-,8*-1#&-8158-pk'1#run
Por precauo, o instalador exige que voc o execute em modo texto puro. O problema todo
que se voc j estiver usando uma verso anterior dos drivers da nVidia, ele no ter como
substituir os mdulos antigos enquanto eles estiverem em uso (ou seja, enquanto o modo grfico
estiver aberto). Para fechar o X e poder iniciar a instalao do driver, necessrio parar o KDM ou
GDM, voltando para o modo texto. Dependendo da distribuio usada, voc pode usar um dos
comandos abaixo para fechar o gerenciador de login:
5 "e!c"ini!#d"kdm s!op
# "e!c"ini!#d"'dm s!op
# service dm s!op
... ou usar o comando telinit (ou init) para mudar para o runlevel 3, que no inclui a abertura do
modo grfico:
5 !elini! /
5 ini! /
No terminal, logue-se como root, acesse a pasta onde o arquivo foi baixado e finalmente
execute-o com o comando:
5 "6NN>2><-Linu,-,8*-1#&-8158-pk'1#run
Antes de mais nada, voc precisa aceitar o bom e velho contrato de licena. Muita gente se
pergunta por que a nVidia no abre de uma vez o cdigo fonte do driver para que ele j seja includo
diretamente nas distribuies.
Bem, o problema todo tem trs letras: ATI. Atualmente a ATI est frente da nVidia do
ponto de vista do hardware. As placas so na maioria dos casos mais rpidas. O problema que a
ATI no consegue fazer drivers to bons quanto a nVidia, o que mantm as duas mais ou menos em
p de igualdade. Abrir os drivers neste caso poderia beneficiar a ATI, j que o cdigo fonte do
driver diz muito sobre como a placa funciona e que tipo de otimizaes e truques foram
implementados.
207
FERRAMENTAS TCNICAS

A maior parte da instalao consiste em simplesmente copiar alguns arquivos e bibliotecas.
Mas, existe um componente que precisa ser gerado sob medida para o seu sistema, que o mdulo
de Kernel, que permite que o driver tenha acesso de baixo nvel ao hardware.
O instalador j traz vrios mdulos pr-compilados para vrias distribuies, incluindo
Mandriva, SuSe, Fedora e outras. Ao usar uma delas, ele simplesmente vai instalar o que j tem sem
fazer mais perguntas. Caso contrrio, ele verificar se existe algum mdulo disponvel no FTP da
nVidia onde mantido um banco constantemente atualizado.

Se voc estiver usando uma distribuio mais incomum, ou tenha compilado seu prprio
Kernel, ele recorrer ao ltimo recurso, que compilar localmente um mdulo adequado para a sua
mquina. Neste caso, voc precisar ter os pacotes kernel-sources, kernel-headers e gcc instalados,
da mesma forma que ao compilar um dos drivers para softmodems ou placas wireless.
Estes pacotes precisam ser obrigatoriamente os que vm nos CDs da sua distribuio.
preciso que as verses batam com o Kernel que est instalado no seu sistema. De resto s deixar o
prprio programa se encarregar do resto:

208
FERRAMENTAS TCNICAS
Depois de concluda a instalao, use o comando "telinit 5" ou "/etc/rc.d/kdm start" para
reabrir o modo grfico. Tudo continuar exatamente do mesmo jeito que antes, pois os drivers foram
instalados mas ainda no foram ativados :-).
Para finalmente instalar os drivers voc precisa editar o arquivo de configurao do X, nada
muito complicado.
Antes de mais nada, faa uma cpia do arquivo original, assim se algo der errado e o X no
abrir mais voc poder voltar para a sua configurao antiga:
5 cp "e!c"(11",or'#con$ "e!c"(11",or'#con$#ori'
Agora abria o arquivo e mos obra:
5 kedi! "e!c"(11",or'#con$
Dentro do arquivo, perto do incio comente (ou apague) as linhas Load "GLcore" e Load
"dri" e verifique se a linha "Load "glx" est descomentada:

As opes "GLcore" e "dri" ativam o sistema de suporte a grficos 3D includo no X.
Precisamos desabilitar ambas as linhas justamente para desabilitar este recurso e utilizar
diretamente os recursos do driver.
209
FERRAMENTAS TCNICAS
Mais abaixo, procure pela linha que comea com "Driver". Ela pode estar como Driver "nv",
Driver "fbdev" ou Driver "vesa" de acordo com a sua configurao. Geralmente estar logo abaixo
da linha "Section Device":
Section "Device"
Identifier "Card0"
Driver "nv"
Para ativar o driver da nVidia, voc deve alterar o valor para Driver "nvidia", indicando que
o X deve usar o novo driver:

Depois destas trs alteraes, a configurao est completa. Pressione Ctrl+Alt+Backspace
ou reinicie o micro e voc ver o splash da nVidia indicando que tudo est certo. Experimente rodar
o "glxgears", ou testar algum game ou aplicativos 3D. Em caso de problemas, basta desfazer as
alteraes para desativar o driver e voltar a usar o driver "nv".
Se voc estiver usando o Debian, ou outra distribuio derivada dele, como o Knoppix,
Kurumin, Lycoris, Linspire, etc., voc precisar dar mais dois comandos (como root) para concluir a
instalao:
# echo 4alias char-maAor-1)% nvidia4 :: "e!c"modules#con$
# echo 4alias char-maAor-1)% nvidia 4 :: "e!c"modu!ils"aliases
Uma terceira alterao que pode ser necessria dependendo do modelo da sua placa-me
desabilitar o double buffer extension. Procure pela linha:
Koad LdbeL 5 &ouble buffer e>tension
210
FERRAMENTAS TCNICAS
e comente-a, deixando:
5Koad LdbeL 5 &ouble buffer e>tension
Desabilitar esta opo vai causar uma pequena queda no desempenho. Deixe para desativ-la
apenas caso ocorram travamentos ou instabilidade ao rodar games 3D.
Outra configurao que causa problemas freqentemente a "NvAGP", que indica qual
driver AGP o driver ir utilizar. Existem trs opes:
NvAGP "0": desativa o uso do AGP. Isto faz com que a placa de vdeo seja acessada como
se fosse uma placa PCI, sem armazenar texturas na memria e outros recursos permitidos pelo AGP.
O desempenho naturalmente cai, principalmente nos games mais pesados ou ao usar resolues
mais altas, mas os problemas so minimizados.
NvAGP "2": usa o driver "agpgart", que o driver AGP padro, includo no prprio Kernel.
Este um driver genrico, que ativa todas as funes do barramento AGP, sem nenhuma otimizao
em especial.
NvAGP "1": usa o driver AGP interno da nVidia, uma verso fortemente otimizada,
includa no prprio driver. Esta a opo mais rpida (de 10 a 20% mais que ao usar o agpgart),
porm a mais problemtica, pois apresenta incompatibilidades diversas com um grande nmero de
placas-me.
Para usar esta opo, o mdulo "agpgart" no deve ser carregado durante o boot. Muitas
ferramentas de deteco o carregam automaticamente, o que faz com que o driver AGP da nVidia
no funcione corretamente e o driver trave durante a abertura do X. Para evitar esse problema,
adicione a linhas:
modprobe -r agpgart
modprobe nvidia
... no final do arquivo "/etc/init.d/bootmisc.sh" ou "/etc/rc.d/rc.local".
preciso tambm que a placa-me usada seja compatvel com o driver. Isso voc descobre
apenas testando. Se o driver travar na abertura do X, mude para o NvAGP "2" ou NvAGP "0".
NvAGP "3": este o valor default do driver, um valor "seguro", onde a placa testa ambos os
drivers, tentando primeiro usar o agpgart e passando para o nVidia AGP caso possvel. Colocar esta
opo no arquivo redundante, j que ela usada por padro quando a linha omitida. Voc precisa
se preocupar apenas ao usar um dos outros valores.
211
FERRAMENTAS TCNICAS
A opo NvAGP adicionada dentro da seo "Device", acima da linha Driver "nvidia",
como em:
Section L&eviceL
Ep!ion 4Nv<GI4 4&4
Identifier LCard#L
&river LnvidiaL
endor(ame L'llL
Board(ame L'llL
DndSection
Em teoria, todas as placas-me deveriam suportar pelo menos o uso da opo NvAGP "2",
onde usado o agpgart. Mas, na prtica, um nmero relativamente grande de placas (sobretudo as
com alguns chipsets da SiS) s funciona em conjunto com a NvAGP "0". Se o driver travar durante
a abertura do X, adicione a linha e teste novamente.
Em muitos casos, voc pode resolver problemas de estabilidade causados por problemas da
placa-me reduzindo a freqncia do barramento AGP no setup. Usar "AGP 2x" ou mesmo "AGP
1x" ao invs de "AGP 4x" reduz os problemas em muitos casos e no tem um impacto to grande no
desempenho quanto usar a opo NvAGP "0".
Em alguns casos, os travamentos nos jogos podem tambm ser causados por problemas com
os drivers da placa de som ou do modem, j que no incomum que ao travar o driver leve junto
todo o sistema.
Outras possveis causas de instabilidade so superaquecimento da placa de vdeo (neste caso
experimente comprar um slot cooler, ou instalar um exaustor prximo placa de vdeo, melhorando
a ventilao) ou problemas com a fonte de alimentao do micro (muitas fontes de baixa qualidade
no so capazes de fornecer energia suficiente para a placa de vdeo).
Algumas placas-me da PC-Chips utilizam capacitores baratos, que fazem com que o slot
AGP no consiga fornecer energia suficiente para a placa 3D. Como estas placas so
freqentemente usadas em conjunto com fontes de baixa qualidade (uma economia leva outra),
acabam sendo uma fonte freqente de problemas.
Mais uma coisa que deve ser levada em considerao que existem placas de vrios
fabricantes com chipsets nVidia. Mesmo placas com o mesmo chipset muitas vezes possuem
diferenas na temporizao da memria, ou mesmo na freqncia do chipset (alguns fabricantes
vendem placas overclocadas para diferenciar seus produtos dos concorrentes) e assim por diante.
Cada fabricante tenta fazer suas placas serem mais rpidas ou mais baratas que as dos concorrentes,
com resultados variados. Estas diferenas podem levar a incompatibilidades diversas com alguns
modelos de placas-me
212
FERRAMENTAS TCNICAS
tivando os recursos especiais
Os drivers permitem ativar tambm o TwinView, o suporte a dois monitores na mesma
placa, disponvel em alguns modelos, suporte a FSAA, etc. A configurao pode ser feita "no
muque" direto nos arquivos de configurao, ou usando o nvidia-settings, o configurador grfico
includo nas verses recentes do driver. Vamos dar uma olhada geral nas opes disponveis:
FSAA
Para ativar o suporte a FSAA nas placas GeForce, basta dar um nico comando no terminal,
como root:
5 e,por! 88GL8SS<<8ME2@03
O nmero 4 pode ser substitudo por outro nmero de 0 a 7, que indica a configurao
desejada, que varia de acordo com o modelo da placa.
Aqui vai uma compilao das tabelas divulgadas pela nVidia:
Me<orce) M;4 Me<orce) )>> Mo .noteboo3s/4
auadro) 2+#4,,#4,+# ;MK e auadro) (S
--------------------------------------------------
#: <S'' desativado
1: 2> Bilinear Multisampling
2: 2> auincun> Multisampling
2: <S'' desativado
): 2 > 2 Supersampling
,: <S'' desativado
-: <S'' desativado
J: <S'' desativado
Me<orce24 auadro &CC4 Me<orce) $i4 Me<orce) )2## Mo
auadro) J##4J,#4J+#4*##4*+# ;MK
--------------------------------------------------------------
#: <S'' desativado
1: 2> Bilinear Multisampling
2: 2> auincun> Multisampling
2: <S'' desativado
): )> Bilinear Multisampling
,: )> Maussian Multisampling
-: 2> Bilinear Multisampling por )> Supersampling
J: <S'' desativado
Me<orce <;4 Me<orce ->>>4 Me<orce J>>>4 auadro <;
---------------------------------------------------------------
#: <S'' desativado
1: 2> Bilinear Multisampling
2: 2> auincun> Multisampling
2: <S'' desativado
): )> Bilinear Multisampling
213
FERRAMENTAS TCNICAS
,: )> Maussian Multisampling
-: 2> Bilinear Multisampling por )> Supersampling
J: )> Bilinear Multisampling por )> Supersampling
Voc deve chamar o comando antes de abrir o jogo ou aplicativo. Se voc tem uma GeForce
FX e quer rodar o Doom 3 com FSAA 4x Bilinear, por exemplo, os comandos seriam:
: e,por! 88GL8SS<<8ME2@0*
: doom/
Este comando temporrio, vale apenas para a seo atual. Se voc quiser tornar a
configurao definitiva, adicione-o no final do arquivo "/etc/profile". Voc pode usar tambm o
configurador grfico da nVidia (veja a seguir).
O FSAA suaviza os contornos em imagens, adicionando pontos de cores intermedirios. Isto
diminui muito aquele efeito serrilhado em volta dos personagens e objetos nos jogos. Este um
recurso cada vez mais utilizado nos jogos 3D, com o objetivo de melhorar a qualidade de imagem,
sobretudo ao se utilizar baixas resolues.
Isto obtido atravs de uma "super-renderizao". A placa de vdeo simplesmente passa a
renderizar uma imagem 2 ou 4 vezes maior do que a que ser exibida no monitor e em seguida
diminui seu tamanho, aplicando um algoritmo de anti-aliasing, antes de exibi-la. Com isto as
imagens ganham muito em qualidade mas em compensao o desempenho cai drasticamente.
O FSAA ideal para jogos mais leves, como o Quake III, Counter Strike ou outros ttulos
antigos, onde a placa consiga exibir um FPS mais que suficiente mesmo a 1024x768. Com o FSAA
voc pode transformar este excesso de desempenho em mais qualidade de imagem. Em geral, os
games ficam mais bonitos visualmente usando 800x600 com o FSAA ativo, do que a 1024x768.
Configurador grfico
A partir da verso 1.0 do driver da nVidia, voc pode usar o configurador oficial, o nvidia-
settings, que facilita o acesso a diversas opes, que antes precisavam ser ativadas manualmente no
arquivo de configurao do X, ou via linha de comando.
Voc pode us-lo para ajustar o gama e equilbrio de cores, ativar o FSAA e o Anisotropic
Filtering, entre outras opes, que variam de acordo com a placa instalada.
Com o driver da nVidia instalado, basta cham-lo num terminal. No preciso abri-lo como
root, poi ele salva as configuraes no arquivo ".nvidia-settings-rc", dentro do home.
1 nvidia-se!!in's
214
FERRAMENTAS TCNICAS
Entre as opes oferecidas, est o ajuste do FSAA (Antialiasing Settings) e do Anisotropic
Filtering. O FSAA faz com que a placa renderize os grficos 3D numa resoluo maior que a
mostrada na tela e em seguida reduza a imagem, usando um algoritmo de antialiasing para suavizar
os contornos, melhorando perceptivelmente a qualidade dos grficos, em troca de uma grande
reduo do frame-rate.
Em games onde o FPS estiver abaixo de 60 ou 70 quadros, voc ter melhores resultados
ativando a opo "Sync to VBlank" (VSync), que sincroniza a atualizao dos quadros com a taxa
de atualizao do monitor. Ativando-a, a placa passa a gerar um novo quadro precisamente a cada
duas atualizaes do monitor. Se voc estiver usando 70 Hz, por exemplo, ter 35 FPS.
primeira vista, parece um mau negcio, pois voc est reduzindo ainda mais o FPS, mas
na prtica o resultado visual acaba sendo melhor. Se o monitor est trabalhando a 70 Hz e a placa
roda o game com a 55 FPS, por exemplo, significa que em algumas atualizaes do monitor
mostrado um novo quadro e em outras no, gerando uma movimentao irregular. Com o VSync,
voc tem 35 FPS, mas exibidos de forma uniforme. Lembre-se de que os filmes so gravados com
apenas 24 quadros, e isso considerado satisfatrio pela maioria das pessoas.
Outro recurso interessante o anisotropic filtering, que melhora a qualidade das texturas
aplicadas sobre superfcies inclinadas. O exemplo mais clssico o texto de abertura dos filmes do
StarWars.
Em geral, o efeito melhor percebido em jogos de primeira pessoa, nas paredes e objetos
215
FERRAMENTAS TCNICAS
mais prximos. Pense no Anisotropic Filtering como uma espcie de evoluo dos velhos bilinear e
trilinear filtering que encontramos nas configuraes de quase todos os games.
Essa imagem mostra bem o conceito: do lado esquerdo temos o texto aplicado usando o
velho trilinear filtering e do lado direito temos o mesmo feito com nvel mximo de qualidade do
anisotropic filtering, o que tornou o texto mais legvel:

A perda de desempenho mais difcil de estimar, pois os algoritmos usados tanto das placas
da nVidia quanto nas placas da ATI so adaptativos, ou seja, eles utilizam um nmero de amostras
proporcional ao ganho que pode ser obtido em cada cena. Isso faz com que a perda de desempenho
seja maior nos jogos em que existe maior ganho de qualidade.
difcil traar um padro, pois a perda de desempenho varia muito de game para game.
Pode ser de 10% ou de 30% dependendo do ttulo. A melhor tcnica simplesmente experimentar
ativar o recurso e ver se voc percebe uma melhora na qualidade ou perda perceptvel no
desempenho e depois pesar as duas coisas na balana.
Assim como no caso do FSAA, possvel ajustar a configurao do anisotropic filtering
tambm via terminal, executando o comando antes de executar o comando que abre o game:
: e,por! 88GL82@S<;LC8LEG8<N>SE01
Nas GeForce3 em diante, existem trs nveis de detalhe. O 1 o nvel mais baixo, 2 o nvel
mdio e 3 o nvel mximo. Voc pode tornar a alterao definitiva adicionando o comando no
final do arquivo "/etc/profile".
216
FERRAMENTAS TCNICAS
Muitas placas, principalmente as GeForce MX, suportam overclocks generosos, dada a
freqncia relativamente baixa com que muitos modelos operam. Voc pode aproveitar este
"potencial oculto" usando o NVClock, que permite ajustar a freqncia de operao da placa,
fazendo overclock. Ele est disponvel no http://www.linuxhardware.org/nvclock.
No site est disponvel apenas a verso com cdigo fonte. Para instalar, descompacte o
arquivo e instale usando os comandos "./configure", "make", "make install".
Nas verses atuais, o NVClock possui duas opes de interface, o "nvclock_gtk" e o
"nvclock_qt". Alm do visual, os dois possuem opes ligeiramente diferentes, por isso convm
testar ambos. Ao compilar, voc precisa ter instaladas tanto as bibliotecas de desenvolvimento do
QT, quanto do GTK, caso contrrio o instalador vai gerar apenas a verso em modo texto.
Se voc estiver usando o Debian (e derivados), Knoppix ou Kurumin pode instal-lo mais
facilmente atravs do apt-get. Ao usar outra distribuio, cheque se o repositrio (da distribuio)
inclui os trs pacotes.
# ap!-'e! ins!all nvclock
# ap!-'e! ins!all nvclock-'!k
# ap!-'e! ins!all nvclock-+!
Ao ser aberto, ele detecta o modelo da sua placa de vdeo e oferece um intervalo de
freqncias compatveis com ela. Caso tenha dvidas, voc pode ver algumas informaes sobre a
placa nas abas "Card Info" e "AGP Info". Comece sempre fazendo pequenos overclocks e v
subindo a freqncia aos poucos, em intervalos de 1 ou 2 MHz. Se o vdeo travar, significa que voc
atingiu o limite da placa. Reinicie e ajuste novamente, desta vez com uma freqncia um pouco
mais baixa.
Note que apesar de danos serem muito raros, os overclocks aumentam a dissipao de calor e
o consumo eltrico da placa, o que pode reduzir a estabilidade geral do micro e, a longo prazo,
reduzir a vida til da placa. O ideal que voc ative o overclock apenas ao rodar algum game
pesado.
A partir da verso 0.8, o NVClock permite ajustar manualmente a velocidade de rotao dos
coolers (em placas compatveis) e ativar os sensores de temperatura e rotao dos coolers,
disponveis nas placas mais recentes. De posse destas informaes, voc pode acompanhar melhor
como a placa est reagindo ao overclock e definir o melhor valor.
217
FERRAMENTAS TCNICAS
Outro uso comum, principalmente entre os usurios de notebooks, usar o NVClock
para reduzir a freqncia de operao da placa, a fim de diminuir o aquecimento e o consumo. Se
voc fica navegando e usando aplicativos 2D na maior parte do tempo e resolve jogar s de vez em
quando, isso faz bastante sentido, pois, mesmo em underclock, a placa vai oferecer um desempenho
mais do que satisfatrio para estas tarefas bsicas. Na hora de jogar, s abrir o NVClock
novamente e aumentar a freqncia.
A configurao feita atravs das duas interfaces no persistente; voc precisa abrir e
aplicar novamente os ajustes a cada boot. Para criar uma configurao persistente, a melhor opo
usar a interface de linha de comando do NVClock, adicionando o comando num dos arquivos de
inicializao. Use o comando "nvclock", seguido pelas opes "-n clock" (para ajustar o clock da
GPU) e "-m clock" (para ajustar a freqncia da memria), como em:
# nvclock -n 25% -m /%&
Tome sempre o cuidado de testar a freqncia desejada antes de adicionar o comando num
dos arquivos de inicializao; caso contrrio, voc pode chegar a uma situao em que o micro trava
durante o boot e a nica opo dar boot com um live-CD para montar a partio e remover o
comando.
218
FERRAMENTAS TCNICAS
TwinView
O TwinView um recurso disponvel em muitas placas GeForce2 MX em diante. A placa de
vdeo possui dois conectores, permitindo que voc tenha um sistema dual monitor usando uma
nica placa. algo muito semelhante ao dual head encontrado nas placas da Matrox.
O TwinView interessante, pois pode ser encontrado mesmo em placas relativamente
baratas. Voc acaba gastando bem menos do que se fosse comprar duas placas 3D separadas.
Para ativar este recurso no Linux, teremos que novamente recorrer edio do
"/etc/X11/xorg.conf". No read-me dos drivers est dito para incluir as seguintes linhas na seo
"Device":
Fption L$winiewL
Fption LSecondMonitorPori7S%ncL Lehs%nc range.s/TL
Fption LSecondMonitorert!efreshL Levrefresh range.s/TL
Fption LMetaModesL Lelist of metamodesTL
Vamos entender o que isso significa.
O Option "TwinView" a opo que ativa o recurso, enquanto o Option
"SecondMonitorHorizSync" e o Option "SecondMonitorVertRefresh" indicam as taxas de
atualizao vertical e horizontal suportadas pelo segundo monitor, informaes que voc pode
conferir no manual. Finalmente, a opo "Metamodes" indica as resolues de vdeo que sero
usadas em ambos os monitores.
Esta configurao do TwinView no interfere com a configurao do monitor principal. Isso
permite que voc use dois monitores diferentes, at mesmo com resolues e taxas de atualizao
diferentes.
Ento vamos a um exemplo prtico. Estas linhas poderiam ser usadas por algum que est
usando dois monitores de 17":
Fption L$winiewL L$rueL
Fption L$winiewFrientationL L!ightFfL
Fption LUseDdid<reHsL L$rueL
Fption LMetaModesL L12+#>1#2)4 12+#>1#2)L
Fption LSecondMonitorPori7S%ncL L21",-*,L
Fption LSecondMonitorert!efreshL L,#-1,#
Se voc estiver usando dois monitores iguais, pode simplesmente copiar as freqncias do
primeiro monitor, que j est configurado. Procure pelas linhas "HorizSync" e "VertRefresh" que
esto mais acima no arquivo de configurao. Caso contrrio, voc pode descobrir os valores usados
pelo segundo monitor atravs do manual, ou ligando-o em outra mquina e dando boot com um CD
do Kurumin para que ele detecte as configuraes do vdeo e voc possa copiar os valores a partir
do arquivo "/etc/X11/xorg.conf".
219
FERRAMENTAS TCNICAS
Os meta modes indicam as resolues que sero usadas. O "1280x1024,1280x1024;
1024x768,1024x768" que coloquei no exemplo especifica dois modos. O X primeiro tentar usar
1280x1024 nos dois monitores e, se por algum motivo os monitores no suportarem esta resoluo,
ele usar 1024x768 em ambos.
Se voc estiver usando dois monitores de tamanhos diferentes, provavelmente vai precisar
usar resolues diferentes em ambos. Neste caso a linha ficaria assim:
Option "MetaModes" "1280x1024,1024x768; 1024x768,800x600"
Agora o segundo monitor estar sempre um degrau abaixo. Se for usado 1280x1024 no
primeiro, o segundo usar 1024x768. Caso seja usado 1024x768 no primeiro, o segundo usar
800x600.
A opo "TwinViewOrientation" indica a posio do segundo monitor em relao ao
primeiro. O "RightOf" indica que ele est a direita (que o default). Voc pode substituir o valor
por "LeftOf" ( esquerda), "Above" (acima) ou "Below" (abaixo), como em:
Fption L$winiewFrientationL LKeftFfL
Existe uma ltima opo que a "Clone". Neste caso o segundo monitor simplesmente
exibir uma cpia da imagem exibida no primeiro. Pode ser til para apresentaes por exemplo,
mas neste caso seria mais fcil simplesmente comprar um daqueles cabos Y que permitem ligar dois
monitores na mesma placa de vdeo.
As linhas que ativam o TwinView vo no final do arquivo "/etc/X11/xorg.conf", dentro da
seo "Screen", logo abaixo da sub-seo "Display", como no exemplo abaixo:
220
FERRAMENTAS TCNICAS
A partir da verso 0.8, o nvclock_qt oferece uma aba de configurao para o TwinView, que
pode ser usada no lugar da configurao manual.
Instalando moda Debian
Em distribuies derivadas do Debian, o driver da nVidia pode ser instalado tanto do jeito
"normal", baixando o driver binrio do site da nVidia e executando o instalador no modo texto, ou
instalando o driver atravs do apt-get.
O driver dividido em duas partes: um mdulo no Kernel, que precisa ser compilado
durante a instalao do driver (j que o mdulo diferente para cada verso do Kernel) e uma
coleo de bibliotecas e utilitrios que so independentes da verso do Kernel.
A instalao do driver pode ser problemtica em alguns casos, pois necessrio ter
instalados os compiladores e os headers do Kernel, alm de que a verso do gcc instalada precisa ser
a mesma que foi usada para compilar o Kernel.
221
FERRAMENTAS TCNICAS
A minha idia aqui ensinar como criar pacote pr-compilados que podem ser distribudos
ou includos em personalizaes do sistema. Distribuir um pacote pr-compilado elimina a
necessidade de ter os headers e compiladores (para quem vai instalar) e minimiza os possveis
problemas de instalao.
Por outro lado, o pacote pr-compilado s vai funcionar no Kernel especfico para que foi
compilado, o que limita o pblico alvo.
Para gerar um pacote .deb com o mdulo pr-compilado:
# ap!-'e! ins!all module-assis!an! nvidia-kernel-common
# module-assis!an! au!o-ins!all nvidia
No final da instalao voc ver que gerado um pacote .deb com o mdulo compilado para
o Kernel atual:
&one with 6usr6src6nvidia-3ernel-2"-"1,G1"#"+1J+-1N1Gi2+-"deb "
Selecionando pacote previamente nAo selecionado nvidia-3ernel-2"-"1,"
.Kendo banco de dados """ +2,-1 arHuivos e diretZrios atualmente instalados"/
&escompactando nvidia-3ernel-2"-"1,
.de """6nvidia-3ernel-2"-"1,G1"#"+1J+-1N1Gi2+-"deb/ """
Instalando nvidia-3ernel-2"-"1, .1"#"+1J+-1N1/ """
Voc pode instalar este pacote em outras mquinas, que estejam rodando a mesma verso do
sistema, ou pelo menos estejam utilizando a mesma verso do Kernel. O pacote .deb gerado fica
disponvel na pasta "/usr/src/".
Falta agora instalar o restante do driver, incluindo as bibliotecas 3D. Estes componentes
fazem parte do pacote nvidia-glx, que tambm pode ser instalado pelo apt-get:
5 ap!-'e! ins!all nvidia-'l,
A partir da, basta distribuir o pacote "nvidia-kernel-2.6.15" gerado, junto com o pacote "nvidia-
glx".
A segunda maneira reempacotar o driver binrio da nVidia, incluindo o mdulo para a
verso atual do Kernel. Para isso, baixe a verso mais atual do driver no http://www.nvidia.com e
execute-o com a opo "--add-this-kernel", como em:
5 #"NN>2><-Linu,-,8*-1#&-8158-pk'1#run --add-this-kernel
Isto vai gerar um novo pacote com o mdulo para o Kernel atual includo. Ao instalar voc
verificar que ele simplesmente usar o mdulo pr-compilado, sem tentar compilar novamente.
Em qualquer um dos dois casos, depois de instalar o pacote ainda necessrio fazer as
mudanas no arquivo de configurao do vdeo. Isso pode ser automatizado atravs de um script,
usando o sed ou o awk para alterar os campos necessrios no arquivo /etc/X11/xorg.conf. Veja mais
detalhes de como fazer isso no captulo sobre shell script.
222
FERRAMENTAS TCNICAS
Driver para placas com chipset nForce
Alm do driver para placas 3D, a nVidia disponibiliza tambm um driver para o som e rede
onboard das placas-me com chipset nForce e nForce2.
O nForce um chipset desenvolvido para competir com a Via e SiS tambm no ramo das
placas-me, complementando o negcio das placas 3D. O som e a rede onboard utilizam uma
arquitetura prpria, otimizada para games, com uma baixa utilizao do processador e tempos de
latncia mais baixos, que ajudam a melhorar os tempos de resposta nos jogos em rede.
Opcionalmente, as placas podem incluir tambm vdeo GeForce onboard, usando memria
compartilhada. Para diminuir a perda de desempenho do vdeo usado o Twin Bank, um recurso
onde dois pentes de memria DDR espetados na placa so acessados simultaneamente, dobrando a
velocidade de acesso.

Para o vdeo, usamos os drivers 3D normais, que vimos a pouco. No Kernel 2.6 j existe
suporte tambm para o som (inclusive suporte a 6 canais ao usar o Alsa) e para a rede onboard.
Mesmo assim, os drivers da nVidia ativam algumas otimizaes que no existem nos drivers
padro. Voc tambm vai precisar instal-los se estiver usando uma distribuio antiga, baseada no
Kernel 2.4. Uma observao que at o 2.4.26 no existe suporte rede onboard e o suporte ao som
deficiente.
Os drivers para o nForce esto disponveis no site da nVidia, na mesma pgina dos drivers
3D. Baixe o "nForce Drivers > Linux IA32 Drivers".
223
FERRAMENTAS TCNICAS
A partir da verso 1.0, temos um arquivo executvel, assim como no caso do driver 3D.
Basta dar permisso de execuo (chmod +x) e em seguida executar o arquivo com um:
# #"NSEHC@-Linu,-,8*-1#&-&/&1-pk'1#run
A instalao muito parecida com a do driver 3D. O pacote inclui mdulos pr-compilados
para o Mandriva, SuSE e Fedora. Em outras distribuies ele compila os mdulos automaticamente,
voc precisa apenas ter os headers do Kernel e o GCC instalados.
A maior dificuldade que as distribuies muitas vezes detectam a rede e som usando os
drivers nativos. Para usar os novos drivers preciso alterar manualmente os arquivos de
configurao, trocando os mdulos usados. aqui que a coisa fica um pouco complicada, pois voc
precisa entender um pouco sobre os arquivos de inicializao da distribuio que est usando.
Ativando o driver de rede
Para ativar o driver de rede preciso fazer o sistema usar o mdulo "nvnet" (o driver da
nVidia) ao invs do mdulo "forcedeth", que o driver open-source, includo no Kernel.
Comece editando o arquivo "/etc/modules". Caso exista a linha "forcedeth", comente-a e
adicione a linha "nvnet" logo abaixo.
A prxima parada o arquivo "/etc/modules.conf". Comente a linha "alias eth0 forcedeth"
(caso exista) e adicione a linha "alias eth0 nvnet" logo abaixo dela.
Caso a distribuio em uso execute algum utilitrio de deteco de hardware na hora do boot, esta
configurao vai ser sempre perdida. Neste caso voc tem duas opes:
1: A primeira opo desativar a deteco de hardware no boot. Para desativar a deteco no
Mandriva desative o servio "harddrake" no Painel de Controle. No Fedora desative o Kudzu e no
Kurumin desative o script "/etc/rcS.d/S36hwsetup". Naturalmente, isso pode fazer com que alguns
perifricos deixem de funcionar, por isso nem sempre uma boa idia.
2: A segunda opo criar o script para carregar o mdulo nvnet a cada boot. Para isso,
adicione as linhas abaixo no final do arquivo "/etc/rc.d/rc.local" ou "/etc/init.d/bootmisc.sh":
modprobe -r forcedeth
modprobe nvnet
6etc6init"d6networ3ing restart
Tenha em mente que, de dependendo da distribuio, o servio responsvel pela
configurao da rede pode se chamar tambm "network" ou "internet". Nestes casos altere a ltima
linha do script para que seja chamado o script correto.
224
FERRAMENTAS TCNICAS
Naturalmente, tudo isso se aplica apenas s distribuies baseadas no Kernel 2.6 ou no
Kernel 2.4.26 em diante, que incluem o mdulo forcedeth. Em distribuies mais antigas a
instalao fica muito mais simples: voc precisar apenas adicionar a linha "nvnet" no arquivo "/etc/
modules" e a linha "alias eth0 nvnet" no final do arquivo /etc/modules.conf.
Ativando o driver de som
Para ativar o driver de som, edite o arquivo "/etc/modprobe.d/sound" ou
"/etc/modprobe.conf" e comente as linhas referentes ao mdulo "snd-intel8x0", substituindo-as
pelas linhas abaixo, que carregam o nvsound, que o driver da nVidia:
5alias snd-card-# snd-intel+>#
5alias sound-slot-# snd-intel+>#
5 install snd-intel+># 6sbin6modprobe --ignore-install snd-intel+>#
5 usr6lib6alsa6modprobe-post-install snd-intel+>#
alias snd-card-# nvsound
alias sound-slot-# nvsound
install nvsound 6sbin6modprobe --ignore-install nvsoundI sleep 1
6usr6bin6nvmi>-reg -f 6etc6nvmi>rc -K T6dev6null 2Tc1 `` :
remove nvsound S 6usr6bin6nvmi>-reg -f 6etc6nvmi>rc -S T6dev6null 2Tc1 `` : I U
6sbin6modprobe -r --ignore-remove nvsound
Caso exista a linha "snd-intel8x0" no arquivo /etc/modules, comente-a a adicione a linha
"nvsound".
Voc pode configurar vrias opes relacionadas ao som no utilitrio "nvmixer", instalado
junto com o driver
Driver 3D da ATI
As placas da ATI sempre foram relativamente bem suportadas pelo Xfree. Tanto as antigas
Riva 128 quanto as Radeon possuem drivers nativos a partir do Xfree 4.3 e em todas as verses do
X.org, atravs dos drivers "r128" e "ati" (ou "radeon", nas verses anteriores do X).
Estes drivers oferecem um desempenho 3D razovel, em parte graas prpria ATI, que
contribuiu no desenvolvimento e abriu parte das especificaes das placas, de forma a facilitar o
trabalho da equipe de desenvolvimento.
Porm, em 2003, a ATI resolveu seguir o mesmo caminho da nVidia, passando a desenvolver
um driver 3D proprietrio e parou de contribuir com o desenvolvimento do driver open-source.
Apesar disso, o driver aberto continuou evoluindo, incluindo suporte a novas placas e melhorias no
desempenho, embora o driver proprietrio seja mais rpido, j que desenvolvido pela equipe da
ATI que tem acesso a todas as especificaes das placas.
225
FERRAMENTAS TCNICAS
Se voc usa apenas aplicativos em 2D, filmes, msica, e games 3D leves, no vai perceber
muita diferena, pois os drivers abertos oferecem um desempenho mais que satisfatrio para tarefas
gerais.
Mas, se voc roda games 3D pesados, ou usa aplicativos de modelagem em 3D, como o
Blender ou o PovRay, vai ver que a diferena significativa. O desempenho dos drivers
proprietrios da ATI chega a ser de 2 a 3 vezes maior que o do driver open-source, mas eles
possuem sua dose de problemas.
O driver da nVidia apresenta problemas em conjunto com algumas combinaes de placas
de vdeo e placas-me baratas, principalmente em placas com chipset SiS. Em algumas voc s
consegue usar o 3D configurando o vdeo com a opo Option "NvAgp" "0", que desativa o uso do
barramento AGP, diminuindo brutalmente o desempenho da placa, e em outras o 3D simplesmente
no funciona (muitas vezes nem no Windows) por limitaes eltricas da placa-me.
No caso dos drivers da ATI, alm dos mesmos problemas de compatibilidade de hardware
com algumas placas-me, temos sempre um conjunto de deficincias relacionadas com o prprio
driver, incluindo problemas de estabilidade em conjunto com algumas verses do X e alguns games.
O driver for Linux tambm no oferece suporte completo a todas as instrues do padro
OpenGL, o que causa pequenos problemas visuais em diversos games, principalmente alguns ttulos
do Windows executados atravs do Cedega (WineX). O prprio desempenho do driver fica abaixo
do obtido no Windows.
Honestamente falando, se o driver do X est funcionando corretamente, no existe muita
vantagem em mudar para o driver binrio da ATI, dada a baixa qualidade do driver e os diversos
problemas. Ele oferece um desempenho 3D superior em conjunto com muitas placas, mas ainda
muito inferior ao desempenho do driver Windows. Em resumo, se voc quer estabilidade, fique com
o driver padro do X e, se est preocupado com o desempenho ou qualidade grfica, compre uma
placa da nVidia, que oferece drivers melhores.
Voc pode encontrar um comparativo entre a diferena de desempenho entre os drivers
Linux e Windows da ATI e da nVidia (no mesmo hardware) nestes dois links:
http://www.phoronix.com/scan.php?page=article&item=357
http://www.phoronix.com/scan.php?page=article&item=359
Outros dois links (bem mais antigos), com benchmarks comparativos:
http://www.anandtech.com/printarticle.aspx?i=2229
http://www.anandtech.com/printarticle.aspx?i=2302
Depois dessa "seo choradeira", vamos ao que interessa, que a instalao do driver
propriamente dito.
importante lembrar que ele s tem o funcionamento garantido nas placas off-board
Radeon 8500 em diante. Ele no funciona em muitos notebooks com placas ATI onboard (muitos
fabricantes alteram a programao ou o barramento dos chipsets, tornando-os incompatveis com o
226
FERRAMENTAS TCNICAS
driver), nem em conjunto com as placas antigas. Se voc possui uma, utilize o driver "ati" do X.org,
que oferece suporte 3D s placas onboard e a quase todos os modelos antigos.
Se voc chegar a instalar o driver num equipamento incompatvel e o sistema passar a travar
durante a abertura do X, d boot com um CD do Kurumin e desfaa as alteraes feitas no
"/etc/X11/xorg.conf", voltando a usar o driver "ati".
Instalando
Inicialmente, o driver da ATI estava disponvel apenas em verso RPM e o pacote precisava
ser convertido usando o alien ou rpm2tgz para ser instalado em outras distribuies. Nas verses
recentes, a ATI passou a disponibilizar um instalador grfico "universal", que tornou a instalao
muito mais simples.
Antes de comear, tenha em mente que o driver da ATI no simples de instalar. Ele possui
um instalador grfico "bonitinho mas ordinrio", que faz apenas parte do trabalho. Para que o driver
funcione, necessrio que o mdulo do Kernel esteja carregado, o "/dev/shm" esteja montado e
toda a configurao dentro do "/etc/X11/xorg.conf" ou "XF86Config-4" esteja correta. Se voc
esquecer de uma nica opo, vai acabar com uma tela preta ou com caracteres coloridos
embaralhados. Por isso, siga com ateno todos os passos.
Se tiver duas mquinas, deixe o servidor SSH ativado, assim voc poder usar a outra para
se conectar na primeira e revisar a configurao caso o X deixe de abrir. Se tiver apenas uma, use
um CD do Kurumin para dar boot, montar a partio e assim alterar a configurao.
Para finalmente instalar, baixe o "ATI driver installer" no http://www.ati.com, na seo
"Drivers & Software > Linux Display Drivers". A partir da verso 8.21.7, o tamanho do pacote foi
reduzido brutalmente, de quase 70 MB para 35 MB. Como de praxe, o primeiro passo marcar a
permisso e executa-lo como root:
1 chmod 6, a!i-driver-ins!aller-8#21#5-i/8*#run
# #"a!i-driver-ins!aller-8#21#5-i/8*#run
Ao contrrio do driver da nVidia, voc no precisa fechar o X, pois o instalador da ATI roda
tanto em modo grfico quanto texto. No se anime, pois como ele precisa compilar o mdulo para o
Kernel, est sujeito aos mesmos problemas relacionados aos compiladores e headers do Kernel que
os outros drivers que vimos at aqui. Para que ele funcione corretamente, necessrio que esteja
tudo em ordem.
preciso prestar ateno tambm nas verses do X suportadas pelo driver e eventuais
problemas com verses recentes do Kernel. A ATI no particularmente rpida em lanar
atualizaes. Enquanto escrevo este tpico (fevereiro de 2006), por exemplo, ainda no existe
suporte ao X.org 6.9, que foi lanado no incio de Dezembro e (dependendo dos patches
adicionados pela distribuio) nem mesmo ao 6.8.2, lanado bem antes. O pior que o driver no
detecta se a verso do X suportada ou no, fazendo com que voc s perceba depois de fazer todas
as alteraes. Voc pode checar qual verso do X est instalada usando o comando "X -version".
227
FERRAMENTAS TCNICAS
Assim como no caso do driver da nVidia, possvel gerar um pacote pr-compilado para a
distribuio em uso, o que facilita as coisas em casos onde voc precisa instalar o driver em vrias
mquinas. Para isso, use a opo "Generate Distribution Specific Driver Package". Os pacotes
gerados por essa opo podem ser instalados em qualquer mquina que esteja rodando a mesma
distribuio e verso.
Configurando e solucionando problemas
Com o driver instalado, falta fazer as alteraes no xorg.conf, alterando o driver de "ati" ou
"radeon" para "fglrx", e incluindo as opes apropriadas. O driver inclui o "aticonfig", um
assistente de modo texto que automatiza a configurao. Faa sempre um backup do arquivo
"/etc/X11/xorg.conf" antes de us-lo, pois ele edita diretamente o arquivo existente, gerando muitas
vezes uma configurao invlida.
228
FERRAMENTAS TCNICAS
Para usar a configurao automtica, execute-o usando a opo "--initial":
# a!icon$i' --ini!ial
Voc pode tambm forar o uso de uma determinada resoluo, como em:
# a!icon$i' --ini!ial --resolu!ion01&23,5*8
O comando suporta diversas outras opes. Voc pode ver uma lista resumida chamando o
comando "aticonfig" sem parmetros. Para que ele gere uma configurao para dois monitores
(numa placa com duas sadas), onde o segundo est direita do primeiro, por exemplo, use:
# a!icon$i' --ini!ial0dual-head --screen-laou!0ri'h!
Caso ele reclame que o arquivo de configurao atual tem opes invlidas, voc pode usar a
opo "-f", que fora a alterao do arquivo. Note que neste caso pode ser que voc precise fazer
algumas alteraes manualmente depois, por isso importante salvar um backup do arquivo
original.
# a!icon$i' --ini!ial --resolu!ion01&23,5*8 -$
Voc pode alterar as configuraes da sada de TV e do segundo monitor usando o
"fireglcontrolpanel", um utilitrio grfico instalado juntamente com o driver:

Tenha em mente que, ao fazer qualquer alterao, necessrio reiniciar o X para que as
modificaes entrem em vigor.
229
FERRAMENTAS TCNICAS
Para que a acelerao 3D funcione, necessrio que o mdulo "fglrx" esteja carregado. Ele
conflita com os mdulos "radeon" e "drm", que fazem parte do mdulo open-source. Se ao tentar
carreg-lo voc receber uma mensagem como:
# modprobe $'lr,
FATAL: Error inserting fglrx (/lib/modules/2.6.12/kernel/drivers/char/drm/fglrx.ko): Operation not permitted
Significa que os dois mdulos esto carregados. Neste caso, desative-os e tente novamente:
# modprobe -r radeon
# modprobe -r drm
# modprobe $'lr,
Caso necessrio, adicione os trs comandos no final do arquivo "/etc/rc.d/rc.local" ou
"/etc/init.d/bootmisc.sh" para que eles sejam executados a cada boot. Isso necessrio em muitas
distribuies, pois muitas ferramentas de deteco carregam os dois mdulos sempre que uma placa
ATI est instalada. Caso o mdulo "fglrx" no esteja disponvel, significa que algo deu errado
durante a instalao do driver, provavelmente relacionado aos headers do Kernel ou aos
compiladores. Verifique tudo e tente novamente.
Outro recurso utilizado pelo driver o device "/dev/shm" (que ativa o suporte ao padro
POSIX de memria compartilhada), que deve estar disponvel e montado. Para isso, adicione a linha
abaixo no final do arquivo "/etc/fstab":
tmpfs 6dev6shm tmpfs defaults # #
Para que ele seja montado sem precisar reiniciar, use o comando:
# moun! "dev"shm
Vamos entender melhor as alteraes que precisam ser feitas no arquivo de configurao do
X, para que voc saiba como faz-las manualmente e corrigir os freqentes problemas criados pelo
aticonfig. Lembre-se de que voc pode localizar as linhas que precisam ser alteradas mais
rapidamente usando a funo "localizar" do editor de textos.
F primeiro passo ] alterar a se?Ao L&eviceL4 Hue indica Hual
driver de vfdeo ser^ usado e permite incluir configura?@es para
ele" Substitua a linha &river LatiL4 &river LradeonL ou &river
LvesaL por:
2river 4$'lr,4
Fption LUseInternal'M1M'!$L LnoL
Fption LideoFverla%L LonL
Fption LFpenMKFverla%L LoffL
Fption LMonitorKa%outL L'U$F4 'U$FL
A opo "MonitorLayout" "AUTO, AUTO" especialmente importante. Sem ela, o driver se
embanana com as sadas de vdeo em placas com duas sadas ou sada de TV e o vdeo no abre.
Existem mais opes relacionadas a esta opo, que veremos a seguir. Comente tambm a linha
Option "sw_cursor", caso esteja inclusa no arquivo.
230
FERRAMENTAS TCNICAS
Um exemplo da seo "Device" completa :
Section L&eviceL
Identifier LCard#L
&river Lfglr>L
endor(ame L'llL
Board(ame L'llL
Fption LUseInternal'M1M'!$L LnoL
Fption LideoFverla%L LonL
Fption LFpenMKFverla%L LoffL
Fption LMonitorKa%outL L'U$F4 'U$FL
DndSection
A seo "Module" do arquivo de configurao deve ficar similar a esta:
Section LModuleL
Koad LddcL
Load 4dbe4
Load 4dri4
SubSec!ion 4e,!mod4
Ep!ion 4omi! ,$ree8*-d'a4
@ndSubSec!ion
Load 4'l,4
Koad LbitmapL 5 bitmap-fonts
Koad LspeedoL
Koad Lt%pe1L
Koad Lfreet%peL
Koad LrecordL
DndSection
As linhas referentes s fontes podem mudar de uma distribuio para outra, mas as sete
linhas em negrito devem estar sempre presentes. Note que ao contrrio da configurao para o
driver da nVidia, voc no deve comentar a linha "Load dri". Note tambm que o driver precisa da
opo "omit xfree86-dga" (dentro da subseo), que precisa ser includa manualmente.
Dentro da seo "Monitor" verifique se as taxas de varredura esto corretas (compare com o
arquivo de configurao antigo, ou outro arquivo que esteja funcionando) e remova todas as linhas
com modelines. Elas no so usadas pelo driver da ATI e podem causar problemas em muitos casos.
Um exemplo de seo "Monitor" funcional :
Section LMonitorL
Identifier LMonitor#L
Pori7S%nc 2+"# - *-"#
ert!efresh ,#"# - J,"#
Fption L&1MSL LtrueL
DndSection
Por ltimo, verifique a seo "Screen". O driver da ATI no suporta o uso de 16 bits de cor
(usado por padro em muitas distribuies), por isso necessrio usar sempre 24 bits de cor. Se
encontrar a linha "DefaultColorDepth 16" e mude-a para "DefaultColorDepth 24""
A seo "screen" especialmente importante dentro do arquivo, pois ela "junta tudo",
fazendo com que o X use a configurao da placa de vdeo, monitor, teclado e mouse para abrir o
servidor grfico.
231
FERRAMENTAS TCNICAS
Cada uma das outras sees dentro do arquivo recebe um nome. No nosso exemplo, a placa
de vdeo recebeu como nome "Card0" e o monitor recebeu "Monitor0". No nome no importa
muito, mas preciso que voc indique-os corretamente dentro da seo "Screen", junto com a
configurao de cor e resoluo que ser usada, como em:
Section LScreenL
Identifier LScreen#L
&evice LCard#L
Monitor LMonitor#L
2e$aul!2ep!h 23
SubSec!ion 42ispla4
2ep!h 23
Modes 41&23,5*84
@ndSubSec!ion
DndSection
Ao usar pedaos retirados de outros arquivos de configurao, lembre-se sempre de verificar
e alterar os nomes de cada seo ou as referncias dentro da seo "Screen".
Depois de testar pela primeira vez, experimente mudar a opo "UseInternalAGPGART"
"no" para "yes". Isso ativa o uso do driver AGP includo no driver, desenvolvido pela equipe da
ATI, ao invs de utilizar o driver agpgart genrico, aproveitando melhor os recursos da placa.
Note que ativar esta opo pode causar travamentos em algumas placas. Neste caso basta
desfazer a alterao e reiniciar o X. Se necessrio, voc pode fazer isso dando boot com um CD do
Kurumin e editando o arquivo dentro da partio.
Um problema bastante comum que, depois de iniciar, a imagem fique simplesmente preta.
Isso pode acontecer em casos em que o driver incompatvel com a verso do X.org instalada, ou
em casos de placas com sada de TV, onde o driver usa a sada errada para enviar o sinal. No
segundo caso, o problema fcil de resolver, adicione a opo abaixo dentro da seo "Device",
logo depois do Option "OpenGLOverlay" "off":
Fption L<orceMonitorsL LnotvL
Caso voc tenha uma placa com duas sadas (VGA e DVI) e a primeira opo no resolva,
experimente substituir a linha Option "MonitorLayout" "AUTO, AUTO" por uma das duas linhas
abaixo. Use a primeira caso voc tenha um monitor LCD ligado na sada DVI e a segunda caso
tenha um CRT ou LCD ligado na sada VGA:
Fption LMonitorKa%outL L$M&S4 (F(DL
Fption LMonitorKa%outL LC!$4 (F(DL
Estas duas opes so includas automaticamente ao chamar o aticonfig usando a opo "--
force-monitor=crt1,notv", como em:
# a!icon$i' --$orce-moni!or0cr!1.no!v
232
FERRAMENTAS TCNICAS
Caso mesmo depois de testar todas as opes o X continuar no abrindo, experimente alterar
tambm as configuraes relacionadas ao AGP no setup da placa-me, reduzindo a velocidade do
barramento AGP e aumentando a quantidade de memria reservada para pelo menos 64 MB
(algumas placas s funcionam corretamente com 128 MB) na opo "AGP Aperture".
Caso voc queira ativar o FSAA, adicione as linhas abaixo na seo "driver" (onde vai a
linha Driver "fglrx") do arquivo de configurao, logo depois da linha "Option "OpenGLOverlay"
"off":
Fption L<S''DnableL L%esL
Fption L<S''ScaleL L)L 5 .escolha entre #4 24 ) e -/
A linha Option "FSAAScale" "4" indica o nvel de FSAA usado. Neste exemplo estou
usando o FSAA 4x. Na verso atual, o driver ainda no oferece suporte a FSAA 8x e tambm a
nenhum nvel de Anisotropic Filter. A linha "Screen 0" indica para qual tela o FSAA ser ativado,
no caso de uma configurao com dois ou mais monitores.
Uma observao que algumas distribuies, como o Ubuntu e o Mandriva oferecem
pacotes pr-compilados com driver da ATI, que reduzem as possibilidades de problemas.
Nas distribuies derivadas do Debian, voc pode utilizar tambm o script "install-radeon-
debian.sh" desenvolvido pelo Kano, do Kanotix, que est disponvel no: http://kanotix.com/files/.
Este script deve ser executado com o sistema em texto puro (assim como o instalador da nVidia) e
necessrio que o pacote "alien" esteja instalado.
Tablets
Outra classe de dispositivos que est se popularizando so os tablets, usados principalmente
pelo pessoal da rea grfica. O tablet permite que voc "desenhe" sobre uma superfcie retangular,
com o trao da caneta sobre a superfcie do tablet controlando o movimento do mouse.

O driver wizard-pen d suporte maioria dos modelos, incluindo toda a linha Wizard Pen e
Mouse Pen da Genius (modelos USB) e diversos modelos de outros fabricantes, que so na verdade
fabricados pela Genius e revendidos em regime OEM.
O driver pode ser obtido no http://www.stud.fit.vutbr.cz/~xhorak28/ (clique no link WizardPen
Driver). Como ele um mdulo para o X, e no um mdulo para o Kernel, como no caso dos
drivers de modems e placas wireless, os requisitos de instalao so um pouco diferentes da maioria
233
FERRAMENTAS TCNICAS
dos drivers.
Alm dos compiladores bsicos, voc precisar tambm dos pacotes de desenvolvimento do
X. Nas distribuies derivadas do Debian, instale os pacotes "x-dev", "libx11-dev", "libxext-dev" e
"xutils-dev". Nas distribuies derivadas do Red Hat, procure pelo pacote "xserver-xorg-dev".
Com os pacotes instalados, descompacte o arquivo do driver, acesse a pasta e execute o
comando "xmkmf":
1 !ar -7,v$ -i7ardpen-driver-&#%#&#!ar#'7
1 cd -i7ardpen-driver-&#%#&
1 ,mkm$
No meu caso ele retornava um erro, reclamando da falta de um arquivo temporrio:
"6Ima3efile:,: error: 6usr6;11!-6lib6;116config6Server"tmpl:
'rHuivo ou diretZrio nAo encontrado
Na verdade, o problema que a pasta "/usr/X11R6/lib/X11/config" no existia, e por isso ele
no conseguia criar o arquivo. Resolvi criando a pasta manualmente e em seguida criando um
arquivo vazio dentro dela:
# mkdir -p "usr"(11H*"lib"(11"con$i'"
# !ouch "usr"(11H*"lib"(11"con$i'"Server#!mpl
Depois de conseguir rodar o "xmkmf" sem erros, rode o comando "make" para finalmente
compilar o driver:
1 make
Ser gerado o arquivo "wizardpen_drv.o" (o driver em si), que precisa ser copiado para a
pasta com mdulos de entrada do X, que normalmente a "/usr/lib/xorg/modules/input/" ou "/usr/
X11R6/lib/modules/input/".
Com o driver instalado, falta fazer a configurao do X, para que o tablet seja usado como
mouse. Note que muitas distribuies j vem com o mdulo "wizardpen_drv.o" instalado; nestes
casos voc pode pular toda esta parte de instalao e ir direto para a configurao.
Comece carregando os mdulos "acecad" e "evdev", que adicionam suporte ao tablet no
Kernel. Adicione os dois no final do arquivo "/etc/modules", de forma que sejam carregados na hora
do boot:
# modprobe acecad
# modprobe evdev
# echo FacecadF :: "e!c"modules
# echo FevdevF :: "e!c"modules
234
FERRAMENTAS TCNICAS
Precisamos agora descobrir como o sistema detectou o tablet. Normalmente ele aparecer
como "/dev/input/event2", mas no custa verificar. Rode o comando "cat /proc/bus/input/devices"
e procure a seo referente ao tablet, como em:
I: Bus=###2 endor=,,)2 1roduct=###) ersion=####
(: (ame=L $'BKD$ &DICDL
1: 1h%s=usb-####:##:1#"2-16input#
P: Pandlers=mouse1 even!2
B: D=1f
B: BDV=)## # 2f#### # # # # # # # #
B: !DK=2#2
B: 'BS=Jf## 1#####2
B: MSC=1#
Note o "event2" que aparece na quarta linha. justamente ele que indica o dispositivo usado.
Em muitos casos pode ser "/dev/input/event3" ou mesmo "/dev/input/event1".
Abra o arquivo ""e!c"(11",or'#con$". Comece adicionando as linhas abaixo no final
do arquivo (ou em qualquer outro ponto, desde que voc saiba o que est fazendo ;). Lembre-se de
substituir o "event2" pelo dispositivo correto no seu caso:
Section LInput&eviceL
Identifier LtabletL
&river Lwi7ardpenL
Fption L&eviceL L6dev6input6event2L
DndSection
Dentro da seo "ServerLayout" (geralmente logo no comeo do arquivo) procure a linha
referente ao mouse (como em: InputDevice "USB Mouse" "CorePointer") e adicione a linha
referente ao tablet logo abaixo, como em:
Section LServerKa%outL
Identifier L;"orgL
Screen # LScreen#L # #
Input&evice LBe%board#L LCoreBe%boardL
Input&evice LUSB MouseL LCore1ointerL
InputDevice "tablet" "AlwaysCore"
EndSection
Um ltimo problema que em alguns casos o tablet pode conflitar com o mouse, deixando-o
impreciso. Para corrigir isso, procure pela linha abaixo dentro do arquivo, que indica o dispositivo
usado pelo mouse:
Fption L&eviceL L6dev6input6miceL
Substitua o "/dev/input/mice" por "/dev/input/mouse0", como em:
Ep!ion 42evice4 4"dev"inpu!"mouse&4
O problema aqui que o "/dev/input/mice" agrupa sinais recebidos de todos os mouses
conectados ao micro. Isso muito bom, pois permite que seu mouse USB seja detectado
automaticamente e funcione em conjunto com o touchpad do notebook sem precisar de nenhuma
235
FERRAMENTAS TCNICAS
configurao especial. O problema que, ao ativar o tablet, ele tambm visto pelo sistema como
mouse, entrando na dana.
Como de praxe, depois de fazer as alteraes no arquivo xorg.conf, voc precisa reiniciar o
X, pressionando "Ctrl+Alt+Backspace" para que elas entrem em vigor.
Alguns programas grficos podem oferecer opes especficas relacionados com o tablet. No
Gimp, por exemplo, clique no Arquivo > Preferncias > Dispositivos de Entrada > Configurar
Dispositivos de Entrada Estendidos.
Configurando placas de TV
As placas de captura melhor suportadas no Linux so as suportadas pelo mdulo bttv, que
incluem a maior parte das placas PCI de baixo custo, como as Pixelview PlayTV e Pixelview
PlayTV Pro, Pinnacle PCTV Studio/Rave e vrios outros modelos. Voc pode ver uma lista
completa das placas suportadas por este driver no link abaixo:
http://linuxtv.org/v4lwiki/index.php/Cardlist.BTTV
Veja um resumo de outros chipsets suportados no Linux aqui:
http://tvtime.sourceforge.net/cards.html
Atualmente, existe uma oferta relativamente grande de placas de captura USB, como as
Pinnacle Studio PCTV USB. Elas so suportadas atravs do driver "usbvision", mas ele ainda um
trabalho preliminar, que oferece um conjunto muito pobre de recursos e no funciona em conjunto
com muitos programas. Um conselho geral que evite estes modelos.
Algumas placas PCI recentes utilizam o chip Conexant 2388x, que tambm bem
suportado, atravs do mdulo cx88xx. Porm, estas placas so geralmente mais caras.
A dica bsica para comprar uma placa de TV bem suportada no Linux e pagar pouco :
compre apenas placas PCI, baseadas nos chipset Brooktree Bt848, Bt848A, Bt849, Bt878 ou
Bt879. Estes chipsets so fabricados pela Conexant, algumas vezes sob nomes diferentes. O
"Conexant Fusion 878A" (usado nas PixelView PlayTV por exemplo), na verdade o Bt878.
Ao dar boot com o Kurumin num micro com uma destas placas e rodar o comando "lspci",
que identifica os componentes, voc ver uma linha como:
####:##:#+"1 Multimedia video controller: Broo3tree Corporation Bt+J+ ideo
Capture
Em geral, a placa inclui as entradas de vdeo para antena, Composite e S-Video e uma sada
de udio que independente da placa de som.
236
FERRAMENTAS TCNICAS

Voc pode ligar as caixas de som direto na placa de captura, ou lig-las na entrada de udio
da placa de som, usando o cabo que acompanha a placa. No se esquea de ativar e ajustar o volume
das opes "line" e "capture" no kmix ou aumix. Se o volume ficar muito baixo, experimente a
entrada do microfone, que amplificada (porm mono).
Algumas placas incluem duas entradas coaxiais, uma para antena e outra para sintonizar
estaes de rdio. O controle remoto includo em alguns modelos suportado no Linux atravs do
Lirc. Voc pode baixar o pacote com o cdigo fonte no: http://www.lirc.org/.
Para instal-lo, voc vai precisar ter instalados os compiladores e os headers do Kernel.
Descompacte o arquivo e rode os comandos "./configure", "make" e "make install", este ltimo
como root.
Durante a instalao, escolha "TV Card" e em seguida o modelo da placa. O Lirc um
programa genrico que oferece suporte a todo tipo de controle remoto no Linux, por isso ele um
pouco trabalhoso de configurar.
Para ativar sua placa voc precisa apenas carregar o mdulo bttv, incluindo a opo correta
de tuner, o componente da placa responsvel pela sintonia de canais. Existem vrios modelos de
tuners no mercado, com muitas variaes mesmo entre as placas que usam o mesmo chipset.
Para uma PixelView PlayTV Pro, por exemplo, voc usaria a opo "card=37 tuner=2" na
hora de carregar o mdulo.
237
FERRAMENTAS TCNICAS
A maioria das distribuies conseguem detectar a placa durante o boot, mas nem sempre
com as opes corretas. Por isso acaba sendo necessrio descarregar o mdulo bttv para depois
carrega-lo novamente com as opes corretas:
# modprobe -r b!!v
# modprobe -r !uner
# modprobe b!!v card0/5 !uner02
Para que estes comandos sejam executados automaticamente durante o boot, basta coloc-los
no final do arquivo "/etc/rc.d/rc.local" ou "/etc/init.d/bootmisc.sh".
Estes so os nmeros referentes s placas mais comuns aqui no Brasil. Voc pode ver a lista
completa, incluindo os modelos de tuner no link que coloquei acima, o:
http://linuxtv.org/v4lwiki/index.php/Cardlist.BTTV
card=, - &iamond &$2###
card=11 - MI!F 1C$ pro
card=1- - 1i>elview 1la%$ .bt+J+/
card=1J - Keadte3 0iniew -#1
card=2+ - $erratec $erra$N
card=2# - <l%ideo *+
card=21 - i1ro$
card=22 - Intel Create and Share 1CI
card=22 - $erratec $erra$alue
card=2) - Keadte3 0in<ast 2###
card=2J - 1i>eliew 1la%$ pro
card=2+ - $iew** C1P#-;
card=2* - 1innacle 1C$ Studio6!ave
card=,# - 1rolin3 1-B$+J+1N)D 6 1i>eliew 1la%$ 1'B 6 Kenco M;$-*,J+ C1
card=,2 - 1innacle 1C$ Studio 1ro
card=-2 - '$I $-0onder
card=-) - '$I $-0onder D
card=-, - <l%ideo 2###S
card=J2 - 1rolin3 1-B$+J+1N*B .1la%$ 1ro rev"*B <MN(IC'M/
Entre os tuners, o mais comum o Philips NTSC (modelo 2). O nome do fabricante do
Tuner vem quase sempre marcado sobre a chapa de metal ou pelo menos escrito na etiqueta,
facilitando bastante a identificao.
Voc pode tambm encontrar a opo correta pesquisando pelo modelo da sua placa no
Google, que acaba sendo a opo mais rpida na maioria dos casos.
Para as placas com o chipset Conexant 2388x, podem ser usados os mdulos cx88xx ou
cx8800. Voc pode testar os dois para ver qual suporta sua placa.
O mais complicado fica por conta do modelo do tuner. Na verdade, o tuner um mdulo
separado, que usado independentemente do mdulo para o chipset principal da placa. Por isso, as
mesmas opes de tuner para as placas com o bttv servem tambm para as com o chipset 2388x e
outros modelos.
238
FERRAMENTAS TCNICAS
Por exemplo, numa Hauppauge WinTV 401 os comandos seriam:
# modprobe -r c,88&&
# modprobe -r !uner
# modprobe c,88&& !uner03/
Depois de ativada a placa, falta escolher o programa de visualizao. A melhor opo hoje
em dia o Tvtime, que est se tornando extremamente popular e por isso j faz parte das principais
distribuies. Voc pode instal-lo no Debian via apt-get (apt-get install tvtime), no Fedora via Yun,
no Mandriva via urpmi, e assim por diante.
Em ltimo caso voc pode baix-lo no: http://tvtime.sourceforge.net/.
Dentro do Tvtime, comece configurando a opo de sintonia no menu "Input
Configuration > Television Standard". Lembre-se de que o padro usado no Brasil o Pal-M. Na
opo "Change Video Source", escolha "US Broadcast".
Acesse a opo "Channel Configuration > Scan channels for signal" para que ele localize
os canais disponveis na TV aberta. Se voc tem TV a cabo, basta sintonizar o canal 3.
Em ltimo caso voc pode chamar o comando "tvtime-scanner", que faz uma busca longa,
testando todas as freqncias possveis em busca de canais.

O TVtime ignora por padro canais com sinal muito ruim, o que pode ser um problema se
voc no usa uma antena externa. Para ver todos os canais, marque a opo "Channel Management
> Disable Signal Detection".
Se voc tem um DVD Player ou videogame que usa um cabo Composite ou S-Video, ajuste
em: "Input Configuration > Change Video Source".
239
FERRAMENTAS TCNICAS
O TVtime inclui vrias opes de filtros, usados para melhorar a qualidade da imagem.
Lembre-se de que o monitor utiliza uma resoluo e taxa de atualizao maiores que uma TV, onde
temos uma imagem relativamente ruim, com 486 linhas horizontais e uma taxa de atualizao de 60
Hz entrelaados (onde apenas metade das linhas so atualizadas de cada vez). O software precisa
compensar tudo isso para exibir uma imagem de boa qualidade no monitor.
Voc pode configurar o filtro usado no "Video configuration > Deinterlacer
Configuration". O filtro "Television Full Resolution" combina uma boa qualidade de imagem com
relativamente pouca utilizao do processador. A opo "Blur Vertical" desfoca um pouco a
imagem, o que d a impresso de uma melhor qualidade, sobretudo em cenas com pouco
movimento.
Outro filtro interessante o "Video Processing > Input filters > 2-3 pulldown inversion".
Os filmes gravados em pelcula utilizam 24 por segundo, um padro usado tambm em muitos
formatos de vdeo digital. Como a TV utiliza 30 quadros por segundo (29,97 para ser exato) so
includos mais 6 frames por segundo (telecinagem), para compatibilizar o sinal. O filtro remove
estes frames artificiais, melhorando a fluidez das cenas quando exibidas no monitor.
Voc pode tambm configurar as opes via linha de comando, o que interessante para uso
em scripts. Para abrir em tela cheia, use o comando "tvtime -m", para abrir no canal 12 use: tvtime
--channel=12. Veja mais detalhes na pgina oficial:
http://tvtime.sourceforge.net/usage.html.
Uma observao importante, que o TVtime precisa que a placa de vdeo oferea suporte ao
YUY2, um recurso de acelerao de vdeo, que faz com que a placa de vdeo renderize a imagem da
TV, diminuindo bruscamente a utilizao do processador principal. Este um recurso bsico,
suportado por quase todas as placas de vdeo, com uma exceo importante: as Via VT8378 (S3
UniChrome), usadas como vdeo onboard em muitas das placas-me recentes, com chipset Via
KM333 ou KM400. Nestas placas o TVtime simplesmente no abre, exibindo um erro no terminal.
Se voc utiliza uma destas placas, a nica soluo para rodar o TVtime espetar uma placa
de vdeo externa. O mesmo acontece ao usar o Vesa ou FBdev como driver de vdeo, ambos
tambm no oferecem acelerao, independentemente da placa de vdeo usada.
Em abril de 2005 a Via liberou um driver de cdigo aberto, que resolve o problema de
suporte para suas placas de vdeo. Este driver vem includo por padro a partir do X.org 6.9,
resolvendo o problema nas distribuies recentes.
Outros dois programas de sintonia de TV, disponveis no apt-get so o Zapping e o Xawtv.
O zapping um programa baseado na biblioteca GTK, tambm bastante amigvel, porm sem o
mesmo desempenho e qualidade de imagem do TVtime. Originalmente ele capaz de gravar
usando a biblioteca rte (os arquivos gerados no possuem uma qualidade to boa), mas o pacote
disponvel no apt-get vem com este recurso desativado.
O xawtv um programa mais antigo, com uma interface bem mais rudimentar. Ele oferece a
opo de gravar trechos de vdeo, porm com baixa qualidade. No existem muitos motivos para
us-lo hoje em dia.
240
FERRAMENTAS TCNICAS
Gravando
O TVtime no oferece a opo de gravar programas, voc pode no mximo tirar screenshots.
Embora seja uma sugesto freqente, os desenvolvedores esto mais concentrados em melhorar a
qualidade dos filtros de recepo do que implementar um sistema de gravao.
Outros programas grficos, como o Xawtv e o Zapping oferecem opes de gravao, mas a
qualidade no boa.
Uma opo mais elaborada o Mythtv (http://www.mythtv.org/), que cria um VPR
domstico similar a um TiVO. A idia usar o micro como um centro de entretenimento, onde voc
pode agendar a gravao de programas, ouvir CDs de msica e muito mais. O problema que o
MyTV tambm muito complicado de instalar, com muitas dependncias. No um programa para
instalar e usar casualmente.
Entre os programas de modo texto, o mencoder o que oferece melhor qualidade. Ele uma
espcie de curinga dos programas de converso de vdeo, usado como base por uma srie de
programas grficos. A lenda diz que ele permite obter vdeo ou udio de qualquer lugar e converter
para qualquer formato ;-).
O problema que o mencoder possui tantas opes que um simples comando para gravar a
Sesso da Tarde se transforma rapidamente em uma novela mexicana. O comando para gravar a
programao do canal 12 da TV aberta durante uma hora seria:
1 mencoder tv:66 -tv driver=v)l2:input=#:normid=):channel=12:chanlist=us-
bcast:width=-)#:height=)+#:device=6dev6video#:adevice=6dev6dsp#:audiorate=22###:fo
rceaudio:forcechan=2:buffersi7e=-) -Huiet -oac mp2lame -lameopts preset=medium
-ovc lavc -lavcopts vcodec=mpeg):vbitrate=2###:3e%int=122 -vop pp=lb -endpos
#1:##:## -o 6home63urumin6video"avi
Este comando grava os vdeos com resoluo de 640x480, j compactados em divx4.
Mesmo assim, os arquivos gerados so relativamente grandes, consumindo cerca de 700 MB por
hora de gravao na resoluo mxima. Certifique-se de ter espao suficiente no HD.
A possibilidade de gravar os programas, j compactados, permite transformar seu PC num
gravador digital (VPR), aposentando de vez o videocassete. A qualidade muito superior e um
DVD-R permite gravar mais de 3 horas de programao na qualidade mxima, com a vantagem de
no mofar com o tempo :-).
A principal desvantagem do mencoder que no possvel gravar e assistir no TVtime ao
mesmo tempo, mas nada impede que voc use o micro para gravar e a boa e velha TV para assistir.
O grande problema que o comando necessrio simplesmente gigante. Se voc um
usurio normal, vai querer gravar seu programa sem ter que digitar antes um comando com 348
caracteres e, se um hacker, vai ter mais o que fazer.
241
FERRAMENTAS TCNICAS
No prximo captulo veremos como desenvolver um programa de gravao, misturando uma
interface em QT, desenhada no Kommander com comandos em shell script para automatizar isto.
Continue lendo :-).
Configurando mouses touchpad com funes especiais
Os mouses touchpad usados em notebooks so sempre reconhecidos
pelo sistema como mouses PS/2 de dois botes. Mas, muitos dos notebooks
atuais usam touchpads com funes especiais e botes de scroll.
Um toue sobre o touchpad eui!ale a um cliue no boto esuerdo, um
toue usando tr"s dedos #ou dois, dependendo da confi$urao% eui!ale a
pressionar o boto direito e assim por diante.
O mouse & sempre detectado durante a instalao, mas as funes
especiais muitas !e'es precisam ser ati!adas manualmente.
(os touchpads mais simples, com apenas dois botes, $eralmente basta
adicionar uma opo no arui!o de confi$urao do lilo para ue o dri!er do
mouse se)a carre$ado corretamente durante o boot e os toues passem a
funcionar.
*bra o arui!o /etc/lilo.conf e procure pela linha +append+, ue cont&m
instrues para o ,ernel, lidas no in-cio do boot. *dicione a opo
+psmouse.proto=imps+, sem modificar as outras, como neste e.emplo/
append = Lpsmouse#pro!o0imps apm=power-off nomce noapic devfs=mountL
*ntes de reiniciar, & preciso sal!ar a no!a confi$urao, chamando o
e.ecut0!el do lilo como root/
5 lilo
Outros touchpads, especialmente os ue incluem botes de scroll
funcionam com um dri!er especial, o S1naptics 2ouchPad 3ri!er. Ori$inalmente
este dri!er da!a suporte a um mouse especial, desen!ol!ido pela S1naptics
#http///444.s1naptics.com/products/touchpad.cfm%, mas atualmente ele
suporta !0rios tipos de mouses deri!ados dele.
3ois e.emplos so os touchpads com boto de scroll usados em !0rios
dos desknotes da P565hips/75S e o touchpad usado no 8P n.9::; #e outros
modelos similares%, onde o scroll & feito passando o dedo na borda direita do
touchpad. 7m ambos os casos, o scroll s< funciona usando o dri!er s1naptics/
242
FERRAMENTAS TCNICAS

Para saber se o mouse do seu note & compat-!el com o dri!er, rode o comando/
5 ca! "proc"bus"inpu!"devices
7ste comando lista os perif&ricos instalados. * identificao do mouse
aparecer0 no meio das informaes, como em/
I: Bus=##11 endor=###2 1roduct=###J ersion=####
(: (ame=LSnIS"2 Snap!ics CouchIadL
1: 1h%s=isa##-#6serio)6input#
P: Pandlers=mouse# event# ts#
B: D=b
B: BDV=-)2# # -J#### # # # # # # # #
B: 'BS=11#####2
7ste & um dri!er para o =free #ou =.or$%, no um m<dulo para o ,ernel,
como os dri!ers para softmodems, por isso a instalao & mais simples.
Se !oc" esti!er usando uma distribuio deri!ada do 3ebian, pode
instal06lo pelo apt6$et/
5 ap!-'e! ins!all ,$ree8*-driver-snap!ics
5aso !oc" no encontre o m<dulo )0 compilado para a sua distribuio,
pode bai.ar um pacote $en&rico no/ http///tu.mobil.or$/soft4are/s1naptics/.
3entro do pacote !oc" encontrar0 o arui!o +snyaptics_drv.o+, ue & o
m<dulo )0 compilado. 7le de!e ser copiado para a pasta de m<dulo do =,
$eralmente a +/usr/X11R6/lib/modules/input/+. 7ste dri!er funciona no =free
>.2, >.?, >.> e tamb&m no =.or$.
(a pior das hip<teses, !oc" pode compilar o m<dulo manualmente.
3escompacte o arui!o e rode o comando +make+ para $erar um no!o m<dulo.
@oc" !ai precisar ter os compiladores e as bibliotecas de desen!ol!imento do
=. Procure pelos pacotes ue terminam com +6de!+, como +.libs6de!+ ou
+.freeA96de!".
O pr<.imo passo & abrir o arui!o de confi$urao do =, o
+/etc/=::/=BA95onfi$6>+ ou +/etc/=::/.or$.conf+.
243
FERRAMENTAS TCNICAS
3entro do arui!o, procure pela seo +Module+ e adicione a linha
+Load "synaptics+ #antes do 7ndSection%, sem apa$ar as demais/
Section LModuleL
Koad LddcL
Koad LdbeL
Koad Le>tmodL
Koad Lgl>L
Koad LbitmapL 5 bitmap-fonts
Koad LspeedoL
Koad Lt%pe1L
Koad Lfreet%peL
Koad LrecordL
Load 4snap!ics4
DndSection
Balta a$ora a confi$urao do mouse. *dicione as linhas abai.o no final do
arui!o/
Section LInput&eviceL
Identifier LMouse S%napticsL
&river Ls%napticsL
Fption L&eviceL L6dev6psau>L
Fption L1rotocolL Lauto-devL
Fption LKeftDdgeL L1J##L
Fption L!ightDdgeL L,2##L
Fption L$opDdgeL L1J##L
Fption LBottomDdgeL L)2##L
Fption L<ingerKowL L2,L
Fption L<ingerPighL L2#L
Fption LMa>$ap$imeL L1+#L
Fption LMa>$apMoveL L22#L
Fption LertScroll&eltaL L1##L
Fption LMinSpeedL L#"#*L
Fption LMa>SpeedL L#"1+L
Fption L'ccel<actorL L#"##1,L
Fption LSPMConfigL LonL
DndSection
*$ora falta apenas o Cltimo passo, ue & di'er para o = usar a
confi$urao ue adicionamos. Procure a linha com a confi$urao do mouse,
dentro da seo Section "ServerLayout", ue $eralmente !ai perto do in-cio
do arui!o. Deralmente ser0/
Input&evice L1S62 MouseL LCore1ointerL
Substitua o +PS/2 Mouse+ por +Mouse S1naptics+, ue far0 com ue o = passe a
usar a confi$urao ue adicionamos. * linha ficar0/
Input&evice LMouse S%napticsL LCore1ointerL
O dri!er precisa ue o m<dulo +evdev+ do ,ernel este)a carre$ado para
funcionar. Se ele no esti!er carre$ado, o = simplesmente dei.ar0 de carre$ar
ao ati!ar o dri!er/
5 modprobe evdev
Para ue ele se)a sempre carre$ado durante o boot e !oc" no tenha
244
FERRAMENTAS TCNICAS
mais dor de cabea, adicione a linha +e!de!+ no final do arui!o
+/etc/modules".
*$ora basta sal!ar o arui!o e reiniciar o =, pressionando
5trlE*ltEFackspace. Se tudo deu certo, as funes especiais do mouse )0
estaro funcionando.
Muitas das funes podem ser personali'adas. O pro$rama mais
ami$0!el para isso & o synaptics, ue !oc" pode instalar pelo apt6$et/
5 ap!-'e! ins!all ksnap!ics
@oc" pode encontrar pacotes para outras distribuies na p0$ina do
pro)eto/
http///s1naptics.sourcefor$e.net/dl.html.
3epois de instalado, ele aparecer0 como um m<dulo no do painel de
controle do ,37, dentro da seo +Perif&ricos+/

Se !oc" usa o Dnome, ou prefere um pro$rama standalone, pode instalar
o !synaptics, ue pode ser bai.ado na mesma p0$ina ou instalado !ia apt6
$et.
245
FERRAMENTAS TCNICAS
Bootsplash
O bootsplash substitui o boot em modo texto por uma tela grfica, que pode conter
uma barra de progresso ou mesmo servir de fundo para as mensagens de inicializao. Ele
permite melhorar o visual da inicializao do sistema, criando um visual mais profissional e
reduzindo o impacto negativo das "mensagens indecifrveis" durante o boot.
Ele um recurso puramente cosmtico, que ainda por cima d um trabalho para instalar
(sem falar no desenvolvimento do tema). Mesmo assim, ele j conquistou uma legio de
usurios fiis e foi rapidamente adotado pelas principais distribuies.
Para muita gente j uma espcie de vcio. Depois que voc comea a desenvolver temas
para o bootsplash, os dedos comeam a coar e voc no consegue mais parar :-p.

Por no ser exatamente um recurso prioritrio, ele no vem includo por padro no Kernel,
mas fica disponvel como um patch a ser instalado manualmente. Para ativar o bootsplash
numa distribuio que no traga o patch por padro, como o Slackware, voc vai precisar
recompilar todo o Kernel.
Alm do patch, preciso instalar o pacote com os binrios e temas, alterar o arquivo initrd
para que contenha o tema escolhido e fazer uma alterao na configurao do lilo ou grub
para que ele seja executado durante o boot.
246
FERRAMENTAS TCNICAS
A pgina oficial do bootsplash a http://www.bootsplash.org. Voc pode baixar o patch para
o Kernel no http://www.bootsplash.org/kernel.html e novos temas no:
http://www.bootsplash.org/themeinfo.html.
Esto tambm disponveis vrios pacotes com temas, distribudos na forma de pacotes .deb
no: http://www.bootsplash.de/.
Procure por uma verso adequada ao Kernel que est sendo recompilado. Se voc tem em
mos o cdigo do Kernel 2.6.15, por exemplo, baixe o arquivo bootsplash-3.1.6-2.6.15.diff.
Note que a verso do Kernel est sempre includa no nome do arquivo. Os patches
freqentemente no funcionam em verses diferentes do Kernel, mesmo que muito
prximas.
Para aplicar o patch, acesse a pasta com o fonte do Kernel, (como em "/usr/src/linux-
2.6.15/") e use o comando "patch -p1 <", informando a localizao do arquivo baixado,
como em:
# pa!ch -p1 9 "usr"src"boo!splash-/#1#*-2#*#1%#di$$
Depois disso entramos no processo normal de recompilao do Kernel. Comeando com o
comando "make xconfig".
Na tela de configurao, habilite o bootsplash marcando a opo: "Device Drivers >
Graphics Support > Bootsplash configuration > Bootup splash screen".
Em seguida, marque tambm a opo: "Device Drivers > Graphics Support > VESA VGA
Graphics Support".
Ela habilita o suporte a frame-buffer, usado pelo bootsplash para mostrar imagens no
terminal logo a partir do incio do boot, muito antes de qualquer componente do X ser
carregado. Esta opo vem habilitada por padro em quase todas as distribuies, mas no
custa checar.
Na mesma seo esto disponveis drivers de frame-buffer otimizados para vrias placas de
vdeo. Eles fazem diferena apenas para quem realmente utiliza muito o terminal, ou
configura o X para usar o mdulo "fbdev". Eles no interessam no nosso caso, pois usar um
deles no lugar do mdulo VESA padro far com que o frame-buffer funcione apenas em
mquinas com a placa de vdeo em questo.
247
FERRAMENTAS TCNICAS
O prximo passo compilar e instalar o novo Kernel, usando os comandos "make clean",
"make bzImage" (ou apenas "make", a partir do 2.6.16), "make modules" e "make modules
install", como vimos no captulo 2 deste livro.
A alterao no Kernel apenas o primeiro passo. Para o bootsplash funcionar necessrio
instalar o pacote "bootsplash" e configurar o sistema para usar o tema desejado.
Nas distribuies derivadas do Debian, adicione a linha abaixo no arquivo
"/etc/apt/sources.list":
deb http:66www"bootsplash"de6files6debian6 unstable main
Rode agora os comandos:
# ap!-'e! upda!e
# ap!-'e! ins!all boo!splash
O script de instalao includo no pacote vai perguntar a localizao do arquivo initrd da sua
instalao (por padro o /boot/initrd ou /boot/initrd.gz), a resoluo de vdeo que ser
usada pelo boot splash durante o boot e no final indicar as linhas que devem ser alteradas no
lilo ou grub para que o bootsplash seja ativado. Ou seja, ele automatiza todo o processo de
instalao.
248
FERRAMENTAS TCNICAS
Caso no encontre uma verso do pacote para a sua distribuio, use o arquivo genrico:
ftp://ftp.openbios.org/pub/bootsplash/rpm-sources/bootsplash/bootsplash-3.0.7.tar.bz2
Em qualquer um dos dois casos, so instalados um conjunto de arquivos de configurao e
temas dentro da pasta /etc/bootsplash. Voc pode baixar temas adicionais no prprio
bootsplash.org, ou em diversos outros sites.
Para usar um novo tema, descompacte os arquivos dentro da pasta "/etc/bootsplash/themes/",
como em "/etc/bootsplash/themes/kurumin/".
Cada tema contm pelo menos um arquivo de configurao. Muitos possuem um para cada
resoluo suportada: um para 800x600 e outro para 1024x768, por exemplo. Neste caso, ao
usar a linha "vga=791" no lilo ou grub, usado o tema para 1024x768 e ao usar "vga=788"
usado o tema para 800x600. Ao usar uma resoluo no suportada pelo tema, ou usar a
opo "vga=normal", que desabilita o frame-buffer, o bootsplash desativado e o sistema
exibe as mensagens normais de boot.
Para incluir o tema escolhido dentro do arquivo initrd, use o comando a abaixo, indicando o
arquivo de configurao do tema e o arquivo initrd que ser alterado ou criado, como em:
# splash -s -$ "e!c"boo!splash"!hemes"curren!"con$i'"8&&,*&&#c$' :
"boo!"ini!rd#splash
Lembre-se de que o arquivo initrd contm mdulos necessrios durante o boot. Ao trocar o
tema do bootsplash, voc nunca deve substituir o arquivo initrd que vem por padro na
distribuio; apenas instale o tema no arquivo initrd existente.
Crie um novo arquivo initrd apenas se voc compilou seu prprio Kernel e tem certeza que
adicionou o suporte ao sistema de arquivos no qual a partio raiz est formatada, junto com
outros mdulos que podem ser necessrios no boot diretamente no executvel principal do
Kernel.
Em seguida vem a configurao do gerenciador de boot. A maioria dos temas inclui duas
opes, o modo "verbose", onde as mensagens normais de boot so mostradas sob o fundo
grfico e o modo "silent", onde mostrada apenas uma barra de progresso. Voc deve
especificar o modo desejado, juntamente com o arquivo initrd que ser usado.
No lilo adicione as linhas abaixo no final da sesso referente ao Kernel principal:
initrd=6boot6initrd-splash
append=Lsplash=verboseL
A seo toda ficar assim:
image=6boot6vmlinu7-2"-"1,
label=Burumin
root=6dev6hda1
read-onl%
ini!rd0"boo!"ini!rd-splash
append04splash0verbose4
249
FERRAMENTAS TCNICAS
No grub, a seo ficaria:
title Burumin
root .hd#4#/
3ernel 6boot6vmlinu7-2"-"1, root=6dev6hda1 ro vga=J++ splash0verbose
initrd "boo!"ini!rd-splash
savedefault
boot
Para usar o modo silent, basta trocar o "splash=verbose" por "splash=silent". Para que a
barra de progresso funcione, necessrio que o servio "bootsplash" esteja ativo. ele que
monitora a inicializao do sistema, atualizando a barra de progresso. Ele no necessrio
se voc est usando o modo verbose, ou se optou por um tema esttico, sem a barra.
Captulo 4: Programando em shell script
Quase tudo no Linux pode ser feito via linha de comando. possvel baixar e instalar
programas automaticamente, alterar qualquer tipo de configurao do sistema, carregar programas
ou executar operaes diversas durante o boot, entre muitas outras possibilidades. Dentro do KDE
possvel at mesmo controlar programas grficos, minimizando uma janela, abrindo um novo e-
mail, j com o corpo da mensagem preenchido no kmail, exibir uma mensagem de aviso, criar ou
eliminar cones no desktop, e assim por diante.
Um script um arquivo de texto, com uma seqncia de comandos que so executados linha
a linha. Dentro de um script, voc pode utilizar qualquer comando de terminal (incluindo programas
grficos e parmetros para eles) e tambm funes lgicas suportadas pelo shell, que incluem
operaes de tomada de deciso, comparao, etc. Voc pode at mesmo acessar bancos de dados
ou configurar outras mquinas remotamente.
Assim como o perl, python e o lua, o shell script uma linguagem interpretada, onde o
prprio script, escrito num editor comum o executvel. Voc pode alter-lo rapidamente e execut-
lo logo em seguida para testar a mudana. Nas linguagens tradicionais, o cdigo fonte precisa ser
recompilado a cada modificao, o que toma tempo.
A princpio, o shell script lembra um pouco os arquivos .bat do DOS, que tambm eram
arquivos de texto com comandos dentro; da mesma forma que um ser humano e uma ameba
conservam muitas coisas em comum, como o fato de possurem DNA, se reproduzirem e
sintetizarem protenas. Mas, assim como um humano muito mais inteligente e evoludo que uma
ameba, um shell script pode ser incomparavelmente mais poderoso e elaborado que um simples .bat
do DOS.
possvel escrever programas complexos em shell script, substituindo aplicativos que
demorariam muito mais tempo para ser escritos em uma linguagem mais sofisticada. Seus scripts
podem tanto seguir a velha guarda, com interfaces simples de modo texto (ou mesmo no ter
interface alguma e serem controlados atravs de parmetros), de forma a desempenhar tarefas
simples, quanto possuir uma interface grfica elaborada, escrita usando o kommander e funes do
kdialog.
250
FERRAMENTAS TCNICAS
Isso vai de encontro idia que muitas pessoas, incluindo at mesmo usurios Linux
tarimbados, possuem. O uso de scripts pode ir muito alm de simples scripts de configurao. Voc
pode desenvolver programas bastante complexos se usar as ferramentas certas.
Um exemplo de trabalho desenvolvido em shell script o painel de controle do Kurumin,
que utiliza um conjunto de painis grficos, criados usando o Kommander, que ativam um
emaranhado de scripts para desempenhar as mais diversas tarefas.

O programa de instalao do Kurumin tambm escrito em shell script, assim como a maior
parte dos programas encarregados de configurar o sistema durante o boot, os painis para instalar
novos programas, configurar servidores e tudo mais.
O principal motivo para uso de scripts em shell ao invs de programas escritos em C ou C+
+, por exemplo, a rapidez de desenvolvimento, combinada com a facilidade de editar os scripts
existentes para corrigir problemas ou adicionar novos recursos. Voc vai encontrar uma grande
quantidade de scripts em qualquer distribuio Linux, incluindo os prprios scripts de inicializao.
251
FERRAMENTAS TCNICAS
O bsico
Um shell script um conjunto de comandos de terminal, organizados de forma a
desempenhar alguma tarefa. O bash extremamente poderoso, o que d uma grande flexibilidade na
hora de escrever scripts. Voc pode inclusive incluir trechos com comandos de outras linguagens
interpretadas, como perl ou python, por exemplo.
O primeiro passo para escrever um script descobrir uma forma de fazer o que precisa via
linha de comando. Vamos comear um um exemplo simples:
O comando "wget" permite baixar arquivos; podemos us-lo para baixar o ISO do Kurumin,
por exemplo:
1 -'e! -c h!!p:""$isica#u$pr#br"kurumin"kurumin-*#&#iso
(o "-c" permite continuar um download interrompido)
Depois de baixar o arquivo, importante verificar o md5sum para ter certeza que o arquivo
est correto:
1 md%sum kurumin-*#&#iso
Estes dois comandos podem ser usados para criar um script rudimentar, que baixa o Kurumin e
verifica o md5sum. Abra o kedit ou outro editor de textos que preferir e inclua as trs linhas abaixo:
5d6bin6sh
wget -c http:66fisica"ufpr"br63urumin63urumin--"#"iso
md,sum 3urumin--"#"iso
O "#!/bin/sh" indica o programa que ser usado para interpretar o script, o prprio bash. Por
norma, todo script deve comear com esta linha. Na verdade, os scripts funcionam sem ela, pois o
bash o interpretador default de qualquer maneira, mas no custa fazer as coisas certo desde o
incio. Existe a possibilidade de escrever scripts usando outros interpretadores, ou mesmo
comandos, como o sed. Neste caso o script comearia com "#!/bin/sed", por exemplo.
Note que a tralha, "#", usada para indicar um comentrio. Toda linha comeada com ela
ignorada pelo bash na hora que o script executado, por isso a usamos para desativar linhas ou
incluir comentrios no script. A linha "#!/bin/sh" a nica exceo para esta regra.
Ao terminar, salve o arquivo com um nome qualquer. Voc pode usar uma extenso como
".sh" para que outras pessoas saibam que se trata de um shell script, mas isto no necessrio.
Lembre-se de que, no Linux, as extenses so apenas parte do nome do arquivo.
Marque a permisso de execuo para ele nas propriedades do arquivo, ou use o comando:
: chmod 6, bai,ar-kurumin#sh
252
FERRAMENTAS TCNICAS
Execute-o colocando um "./" na frente do nome do arquivo, o que faz o interpretador
entender que ele deve executar o "baixar-kurumin.sh" que est na pasta atual. Caso contrrio ele
tenta procurar nas pastas "/bin/", "/usr/bin" e "/usr/local/bin" que so as pastas onde ficam os
executveis do sistema e no acha o script.
: #"bai,ar-kurumin#sh
O md5sum soma os bits do arquivo e devolve um nmero de 32 caracteres. No mesmo
diretrio do servidor onde foi baixado o arquivo, est disponvel um arquivo de texto com o
md5sum correto do arquivo. O resultado do md5sum do arquivo baixado deve ser igual ao do
arquivo, caso contrrio significa que o arquivo veio corrompido e voc precisa baixar de novo.
Voc j deve estar cansado de baixar as novas verses do Kurumin, e j sabe de tudo isso.
Podemos aproveitar para ensinar isso ao nosso script, fazendo com que, depois de baixar o arquivo,
ele verifique o md5sum e baixe o arquivo de novo caso ele esteja corrompido.
Isto vai deixar o script um pouco mais complexo:
5d6bin6sh
versao=L-"#L
mirror=Lhttp:66fisica"ufpr"br63urumin6L
wget -c L:mirrorL63urumin-L:versaoL"iso
md,sum=[md,sum 3urumin-L:versaoL"iso[
wget -c L:mirrorL63urumin-L:versaoL"md,sum"t>t
md,sumFB=[cat 3urumin-L:versaoL"md,sum"t>t[
if C L:md,sumL d= L:md,sumFBL EI then
echo L'rHuivo corrompido4 vou deletar e come?ar novamente"L
rm -f 3urumin-L:versaoL"iso
sleep 12#
"6bai>ar-3urumin"sh
else
echo LF arHuivo foi bai>ado corretamente"L
fi
Voc vai perceber que ao executar este segundo script, ele vai tentar baixar o arquivo
novamente sempre que o md5sum no bater, se necessrio vrias vezes. Para isso, comeamos a
utilizar algumas operaes lgicas simples, que lembram um pouco as aulas de pseudo-cdigo que
os alunos de Cincias da Computao tm no primeiro ano.
Em primeiro lugar, este segundo script usa variveis. As variveis podem armazenar
qualquer tipo de informao, como um nmero, um texto ou o resultado de um comando. Veja que
no incio do script estou definindo duas variveis "versao" e "mirror", que utilizo em diversas partes
do script.
Ao armazenar qualquer texto ou nmero dentro de uma varivel, voc passa a poder utiliz-
la em qualquer situao no lugar no valor original. A vantagem de fazer isso que, quando precisar
alterar o valor original, voc s vai precisar alterar uma vez. O mesmo script poderia ser adaptado
para baixar uma nova verso do Kurumin, ou para baix-lo a partir de outro mirror simplesmente
alterando as duas linhas iniciais. Usar variveis desta forma permite que seus scripts sejam
253
FERRAMENTAS TCNICAS
reutilizveis, o que a longo prazo pode representar uma grande economia de tempo.
No script anterior, usamos o comando "md5sum kurumin-6.0.iso". Ele simplesmente mostra
o md5sum do arquivo na tela, sem fazer mais nada. No segundo script, esta linha ficou um pouco
diferente: md5sum=`md5sum kurumin-$versao.iso`. A diferena que, ao invs de mostrar o
mds5um na tela, armazenamos o resultado numa varivel, chamada "md5sum".
O sinal usado aqui no o apstrofo, como mais comum em outras linguagens, mas sim a
crase (o mesmo do ""). O shell primeiro executa os comandos dentro das crases e armazena o
resultado dentro da varivel, que podemos utilizar posteriormente.
Por padro, os mirrors com o Kurumin sempre contm um arquivo ".md5sum.txt" que
contm o md5sum da verso correspondente. Para automatizar, o script baixa tambm este segundo
arquivo e armazena o contedo numa segunda varivel, a "md5sumOK".
Neste ponto, temos uma varivel contendo o md5sum do arquivo baixado, e outra contendo
o md5sum correto. As duas podem ser comparadas, de forma que o script possa decidir se deve
baixar o arquivo de novo ou no.
Para comparar duas variveis (contendo texto) num shell script, usamos o smbolo "!=" (no
igual, ou seja: diferente). Para saber se o arquivo foi baixado corretamente, comparamos as duas
variveis: [ "$md5sum" != "$md5sumOK" ].
Alm do "!=", outros operadores lgicos que podem ser usados so:
= : Igual.
-z : A varivel est vazia (pode ser usada para verificar se determinado comando gerou
algum erro, por exemplo).
-n : A varivel no est vazia, o oposto do "-z".
Estas funes permitem comparar strings, ou seja, funcionam em casos onde as variveis
contm pedaos de texto ou o resultado de comandos. O bash tambm capaz de trabalhar com
nmeros e inclusive realizar operaes aritmticas. Quando precisar comparar duas variveis
numricas, use os operadores abaixo:
-lt : (less than), menor que, equivalente ao <.
-gt : (greather than), maior que, equivalente ao >.
-le : (less or equal), menor ou igual, equivalente ao <=.
-ge : (greater or equal), maior ou igual, equivalente ao >=.
-eq : (equal), igual, equivale ao =.
-ne : (not equal) diferente. Equivale ao != que usamos a pouco.
Mas, apenas comparar no adianta. Precisamos dizer ao script o que fazer depois. Lembre-se
de que os computadores so burros, voc precisa dizer o que fazer em cada situao. Neste caso
temos duas possibilidades: o md5sum pode estar errado ou certo. Se estiver errado, ele deve baixar
o arquivo de novo, caso contrrio no deve fazer nada.
254
FERRAMENTAS TCNICAS
Usamos ento um "if" (se) para criar uma operao de tomada de deciso. Verificamos o
mds5um, se ele for diferente do correto, ento (then) ele vai deletar o arquivo danificado e comear
o download de novo. Caso contrrio (else) ele vai simplesmente escrever uma mensagem na tela.
if C L:md,sumL d= L:md,sumFBL EI then
echo L'rHuivo corrompido4 vou deletar e come?ar novamente"L
rm -f 3urumin-L:versaoL"iso
sleep 12#
"6bai>ar-3urumin"sh
else
echo LF arHuivo foi bai>ado corretamente"L
fi
Veja que dentro da funo "then" usei o comando para deletar o arquivo e depois executei de
novo o "./baixar-kurumin.sh" que vai executar nosso script de novo, dentro dele mesmo.
Isso vai fazer com que o script fique em loop, obsessivamente, at conseguir baixar o
arquivo corretamente. Uma coisa interessante nos scripts que eles podem ser executados dentro
deles mesmos e alterados durante a execuo. O script pode at mesmo deletar a si prprio depois
de rodar uma vez, uma espcie de script suicida :-P.
preciso tomar cuidado em situaes como esta, pois cada vez que o script executa
novamente a si mesmo para tentar baixar o arquivo, aberta uma nova seo do shell, o que
consome um pouco de memria. Um script que entrasse em loop poderia consumir uma quantidade
muito grande de memria, deixando o sistema lento. Para evitar isso, inclu um "sleep 120", que faz
o script dar uma pausa de 120 segundos entre cada tentativa.
Os scripts so muito teis para automatizar tarefas, que demorariam muito para serem
realizas automaticamente. Imagine que voc tem uma coleo de arquivos MP3, todos encodados
com 256k de bitrate. O problema que voc comprou um MP3Player xing-ling, que s capaz de
reproduzir (com qualidade) arquivos com bitrate de no mximo 160k. Voc decide ento reencodar
todas as msicas para 128k, para ouvi-las no MP3player.
Existem vrios programas grficos que permitem fazer a converso, entre eles o Grip. Mas, esse o
tipo de coisa que mais rpido de fazer via linha de comando, usando o lame, como em:
1 lame -b 128 musica#mp/ 128k-musica#mp/
Aqui gerado o arquivo "128k-musica.mp3" (na mesma pasta), encodado com 128k de
bitrate, sem modificar o arquivo original.
Para fazer o mesmo com todos os arquivos no diretrio, voc poderia usar o comando "for",
que permite realizar a mesma operao em vrios arquivos de uma vez. Ele muito usado para
renomear ou converter arquivos em massa, baseado em determinados critrios. No nosso caso ele
poderia ser usado da seguinte forma:
for arHuivo in 9"Smp24M12U
do lame -b 12+ L:arHuivoL L12+3-:arHuivoL
done
255
FERRAMENTAS TCNICAS
Aqui, a regra se aplica a todos os arquivos dentro do diretrio atual que tiverem extenso
".mp3" ou ".MP3". Para cada um dos arquivos executado o comando 'lame -b 128 "$arquivo"
"128k-$arquivo"', onde o "$arquivo" substitudo por cada um dos arquivos dentro do diretrio.
Estes dois exemplos so scripts simples, que simplesmente executam alguns comandos, sem
oferecer nenhum tipo de interatividade. Se voc quisesse que o primeiro script baixasse outro
arquivo, teria que edit-lo manualmente.
Fazendo perguntas
Voc pode incluir perguntas no script, para coletar as informaes necessrias para montar e
executar algum comando complicado.
Por exemplo, o mais legal de ter uma placa de recepo de TV poder gravar programas
usando o micro como um DVR. Porm, programas grficos como o Xawtv e o Zapping no
oferecem uma boa qualidade de gravao.
Entre os programas de modo texto, o mencoder o que oferece melhor qualidade, mas ele
oferece muitas opes e por isso no exatamente um exemplo de amigabilidade. Como vimos no
captulo 3, o comando para gravar a programao do canal 12 da TV aberta durante uma hora,
compactando em Divx4, seria:
1 mencoder tv:66 -tv W
driver=v)l2:input=#:normid=):channel012:chanlist=us-bcast:width=-)#:height=)+#:W
device=6dev6video#:adevice=6dev6dsp#:audiorate=22###:forceaudio:forcechan=2:buffersi7e=-
) W
-Huiet -oac mp2lame -lameopts preset=medium -ovc lavc -lavcopts W
vcodec=mpeg):vbitrate=2###:3e%int=122 -vop pp=lb -endpos &1:&&:&& W
-o "home"1;S@H"video#avi
As partes do comando que mudariam de uma chamada a outra seriam o canal (channel=12)
o tempo de gravao ("-endpos 01:00:00", para uma hora) e o arquivo que ser gerado (/home/
$USER/video.avi). O "$USER" uma varivel interna, que contm sempre o nome do usurio
atual, muito til em scripts.
Podemos fazer com que nosso script pergunte estas informaes, armazenando tudo em
variveis e no final monte o comando. Isto transformaria um comando indigesto, de quase 400
caracteres num script amigvel que sua av poderia usar.
Existem vrias formas de exibir uma pergunta na tela e armazenar a resposta numa varivel.
A forma mais simples seria usar o comando "echo" para mostrar a pergunta e o comando "read"
para ler a resposta, como em:
256
FERRAMENTAS TCNICAS
echo Laual canal gostaria de gravar8 .e>: 12/L
read canal
echo Laual o tempo de grava?Ao8 .e>: #1:##:##/L
read tempo
echo LDm Hual arHuivo o vfdeo ser^ salvo8 .e>: 6home6:USD!6video"avi/L
read arHuivo
O "read" faz com que o script pare e fique esperando uma resposta. Ao digitar qualquer coisa
e pressionar enter, ele vai para a prxima pergunta e assim por diante at executar o ltimo
comando. Teramos ento trs variveis, "canal", "tempo" e "arquivo" que poderamos utilizar para
montar o comando principal, que, dentro do script, ficaria:
mencoder tv:66 -tv driver=v)l2:input=#:normid=):channel01canal:chanlist=usW
-bcast:width=-)#:height=)+#:device=6dev6video#:adevice=6dev6dsp#:audiorate=22###:W
forceaudio:forcechan=2:buffersi7e=-) -Huiet -oac mp2lame -lameopts preset=medium W
-ovc lavc -lavcopts vcodec=mpeg):vbitrate=2###:3e%int=122 -vop pp=lb -endpos B
1!empo -o 1ar+uivo
Veja que, ao criar uma varivel, simplesmente a chamamos pelo nome, mas ao utiliz-la
depois precisamos usar um smbolo de dlar, "$". isso que faz o bash diferenciar a varivel
"arquivo" da palavra (ou comando) "arquivo".
Isto j seria o suficiente para ter um script funcional. A desvantagem neste caso que o
script roda em modo texto e possui um visual muito pobre (note que ao ser executado, o script
trocou o "$USER" por "kurumin").

Existem programas que permitem incrementar o script, transformando as perguntas em
janelas grficas. Os trs mais usados so o dialog, o Xdialog e o kdialog.
O dialog o mais antigo e tradicional. Ele no gera geralmente uma janela grfica, mas sim
uma janela de modo texto, que lembra os tempos do Clipper. A vantagem que ele permite que o
script seja executado em modo texto puro ou remotamente (via ssh ou telnet), mesmo em conexes
lentas.
Por exemplo, para mostrar um aviso na tela, o comando seria:
dialog --msgbo> LSeu micro est^ pegando fogoL 1# ,#
O "10 50" indica o tamanho da janela, em caracteres. O dialog capaz de exibir vrios tipos
de janelas, para abrir e salvar arquivos, escolher entre opes, etc. Voc pode ver todas as opes
atravs do "man dialog".
257
FERRAMENTAS TCNICAS
No nosso caso, precisamos ler a resposta, por isso usamos o parmetro "--inputbox" do
dialog:
dialog --inputbo> LCanal a gravar .e>: 12/L 1# -# L12L 2T 6tmp6resposta"tmp
canal=[cat 6tmp6resposta"tmp[
O "10 60" indica o tamanho da janela, como j vimos. O "12" que vem a seguir o valor
default, que assumido caso voc simplesmente pressione Enter. importante sempre usar um
valor padro nas perguntas, pois ele serve ao mesmo tempo como um exemplo do que deve ser
respondido e como uma garantia que a resposta no vir em branco.
O "2> /tmp/resposta.tmp" faz com que a resposta seja gravada num arquivo de texto. Em seguida,
o "canal=`cat /tmp/resposta.tmp`" cria a varivel "canal", com a resposta.
O comando cat serve para listar o contedo de um arquivo de texto. Originalmente ele
simplesmente escreveria na tela. Mas, usado desta forma, a sada do cat (o texto dentro do arquivo)
armazenado na varivel, sem ser mostrado na tela.
O resultado o mesmo do exemplo anterior, mas desta vez com uma interface um pouco
melhor:
258
FERRAMENTAS TCNICAS
O Xdialog possui quase as mesmas opes e sintaxe do dialog, mas gera janelas grficas. O
maior problema que nem todas as distribuies trazem o Xdialog instalado por padro. Nestes
casos voc pode baixar a verso mais recente no: http://xdialog.dyns.net/.
Em distribuies derivadas do Debian, voc pode instal-lo via apt-get; o pacote est
disponvel nos servidores principais. No caso das distribuies que usam pacotes rpm procure no
http://www.rpmfind.net/linux/RPM/.
Veja que as opes so exatamente iguais ao exemplo anterior; muda apenas o comando:
;dialog --inputbo> LCanal a gravar .e>: 12/L 1# -# L12L 2T 6tmp6resposta"tmp
canal=[6tmp6resposta"tmp[

Outras funes muito usadas no Xdialog e no dialog so:
--radiolist: Esta funo permite exibir um menu de opes, que uso freqentemente nos
scripts dos cones mgicos do Kurumin. Veja, por exemplo, o script "instalar-bluefish",
disponvel dentro da pasta "/usr/local/bin/" no Kurumin, ou no
http://www.guiadohardware.net/kurumin/scripts/.
--yesno: Permite fazer perguntas. A resposta armazenada automaticamente na varivel
"$?", que voc pode checar em seguida. Se a resposta foi "sim", a varivel fica com o valor
"1" e se for "no", fica com o valor "0". Um exemplo de uso seria:
259
FERRAMENTAS TCNICAS
;dialog --%esno L$em certe7a Hue deseYa instalar o programa8L 1, -#
if C L:8L = L#L E I then
comandos"""
fi
--fselect: Abre um menu de seleo de arquivos. Pode ser usado ao abrir um arquivo, por
exemplo. Este um exemplo rpido que permite escolher um arquivo e tenta abri-lo usado o
mplayer:
;dialog --fselect "6 2# J, 2T 6tmp6resposta"tmp
video=[cat 6tmp6resposta"tmp[I rm -f 6tmp6resposta"tmp
mpla%er L:videoL
--dselect: similar ao --fselect, mas abre um menu para escolher um diretrio.
O kdialog, por sua vez, um componente do KDE e por isso o ideal para ser usado em
distribuies que trazem o KDE como desktop principal. As janelas seguem o padro visual do
KDE, respeitando as configuraes de cor, fontes e cones definidas no Centro de Controle do KDE,
o que deixa os scripts com uma aparncia muito mais profissional.
A principal desvantagem que, justamente por ser baseado nas bibliotecas do KDE, ele fica
mais lento e pesado ao ser usado no Gnome ou outras interfaces, pois para abrir uma simples janela
de aviso ser preciso carregar as bibliotecas do KDE.
Para abrir a mesma janela em kdialog, o comando seria:
canal=[3dialog --title LMravar-$L --inputbo> LCanal a gravar .e>: 12/L L12L[
Veja que aqui estou atribuindo o resultado do comando (a resposta) diretamente varivel
(como no exemplo do md5sum), ao invs de ter que salvar num arquivo e depois l-lo. Leramos:
canal igual ao resultado de kdialog --title "Gravar-TV" --inputbox "Canal a gravar (ex: 12)" "12".
Isso funciona no kdialog e no no dialog ou Xdialog, pois o kdialog envia a resposta para a
sada padro (que seria exibida no terminal), enquanto o Xdialog envia para a sada de erro. Se voc
quisesse fazer como nos exemplos anteriores, salvando num arquivo e lendo-o em seguida, haveria
uma pequena mudana no comando:
3dialog --inputbo> LCanal a gravar .e>: 12/L L12L : 6tmp6resposta"tmp
canal=[6tmp6resposta"tmp[
Note que, ao invs de usar "2> /tmp/resposta.tmp", usei "> /tmp/resposta.tmp. O "2>" serve
para direcionar a sada de erro, enquanto o ">" direciona a sada padro, fazendo com que ao invs
de mostrar na tela, o comando salve o texto dentro do arquivo.
possvel usar ainda o "&>", que direciona simultaneamente ambas as sadas. Por exemplo,
comum que os programas do KDE exibam vrias mensagens ao serem abertos num terminal,
"sujando" a tela. Uma forma de resolver o problema direcionar ambas as sadas para o /dev/null,
como em:
1 kon+ueror h!!p:""'uiadohard-are#ne! Q:"dev"null
260
FERRAMENTAS TCNICAS
O parmetro "--title" permite especificar o texto do ttulo da janela. Este parmetro tambm
existe no dialog e Xdialog. Note que desta vez no especifiquei as dimenses da janela. No kdialog
isto no necessrio, pois a janela dimensionada de acordo com o contedo. Voc pode ter um
efeito similar no Xdialog colocando as dimenses como "0 0". Nossa janela em kdialog fica:

Este o script completo, que desenvolvi para o Kurumin usando janelas em kdialog. O script
est dividido em vrias partes, intercaladas com explicaes:
5d6bin6sh
5 Mravar-$
5 Script para gravar $ usando uma placa de captura"
5 Dscrito por Carlos D" Morimoto emorimotoXguiadohardware"netT para o Burumin
3dialog --title LMravar-$L --msgbo> LDste script permite gravar programas de $4
usando uma placa de captura" 'o gravar4 vocg precisa fechar o $time ou HualHuer
outro programa de sintonia de $ Hue esteYa aberto"
Fs vfdeos sAo gravados com resolu?Ao de -)#>)+#4 compactados em div>)4 com uma
Hualidade prZ>ima Q do &&" CertifiHue-se de ter espa?o suficiente no P&" Cada
hora de grava?Ao gera um arHuivo de apro>imadamente 1"2 MBL
var1=[3dialog --title LMravar-$L --inputbo> LCanal a gravar .e>: 12/L L12L[
var2=[3dialog --title LMravar-$L --inputbo> L&ura?Ao da grava?Ao .##:#1:## = 1
minuto/L L##:#1:##L[
A opo --getsavename do kdialog, usada na funo abaixo abre uma janela do gerenciador
de arquivos, para que o usurio aponte a pasta e o nome do arquivo. A opo :label1 faz com que a
janela mostre apenas arquivos com as extenses ".avi, .mpg e .wmf", ou seja, apenas arquivos de
vdeo. Esta mesma funo pode ser usada em outras situaes, onde voc escrever scripts que
precisam salvar ou abrir arquivos de formatos especficos.
As quebras de linha dentro do texto da opo fazem com que o texto fique formatado da
mesma maneira dentro da janela. Este mais um ponto de discrdia entre o kdialog e o Xdialog. No
primeiro, ao quebrar o texto dentro do script, ele automaticamente includo da mesma forma na
janela, enquanto no Xdialog necessrio especificar as quebras de linha manualmente usando o
"\n".
var2=[3dialog --getsavefilename :label1 L9"avi 9"mpg 9"wmf `'rHuivos de vfdeoL[
var)=[3dialog --combobo> L1adrAo de sintonia:
us-bcast = $ aberta
us-cable = $ a caboL Lus-bcastL Lus-cableL[
261
FERRAMENTAS TCNICAS
A opo "--passivepopup" (disponvel apenas no Kdialog) mostra um aviso que some depois
do tempo especificado (neste caso depois de 6 segundos), ou ao clicar sobre a janela:
3dialog --title LMravandoL --passivepopup LMravando o canal :var1
por: :var2 horas
no arHuivo: :var2
<eche a Yanela de terminal para abortarL - cT6dev6null c
Aqui vai o comando de gravao, montado usando todas as informaes coletadas acima.
Depois do comando de gravao, ou seja, depois que a gravao termina, mostrada mais uma
janela de texto, usando o "--passivepopup", desta vez sem o nmero que especifica o tempo de
exibio. Isto faz com que a janela fique no canto da tela at receber um clique se confirmao.
mencoder tv:66 -tv driver=v)l2:input=#:normid=):channel=:var1:chanlist=:var):W
width=-)#:height=)+#:device=6dev6video#:adevice=6dev6dsp#:audiorate=22###:W
forceaudio:forcechan=2:buffersi7e=-) -Huiet -oac mp2lame -lameopts preset=W
medium -ovc lavc -lavcopts vcodec=mpeg):vbitrate=2###:3e%int=122 -vop pp=lb W
-endpos :var2 -o :var2
3dialog --title LMravar-$L --passivepopup LF3d
' grava?Ao terminou"L
e>it #
O "exit" um comando que denota o fim do script. O "0" o status de sada, que pode ser
lido por programas executados em seguida, no mesmo terminal. O 0 indica que o script terminou
normalmente, mas voc pode incluir vrios "exit" dentro de condicionais e partes especficas do
scripts, permitindo que ele "termine de forma elegante" em caso de erros, com um cdigo de sada
que permita verificar o que aconteceu.
Este outro script, tambm escrito para o Kurumin, serve para montar compartilhamentos de
rede em NFS. Diferentemente do script de gravar TV, ele foi escrito para funcionar tanto dentro do
modo grfico (usando janelas em Xdialog) ou em modo texto puro, usando o dialog. Uma funo no
incio do script se encarrega de detectar se o modo grfico est aberto ou no.
Voc pode encontrar todos os scripts desenvolvidos para o Kurumin dentro da pasta
/usr/local/bin/ do sistema, ou online no: http://www.guiadohardware.net/kurumin/bin/.
Eles so intencionalmente escritos de forma simples, at elementar para facilitar o
entendimento. Tudo comea com o "#!/bin/sh", que denota que se trata de um shell script. de
praxe incluir tambm uma descrio do programa e o nome do autor:
5d6bin6sh
5 Monta um compartilhamento (<S
5 por Carlos D" Morimoto
Esta varivel ativa o modo de compatibilidade do Xdialog, que melhora a aparncia das
janelas. Ela opcional, mas complicado acertar o texto dentro das janelas sem ela, pois o Xdialog
no ajustar automaticamente o texto dentro da janela (faa um teste e veja a diferena).
interessante us-la em qualquer script que use o Xdialog.
e>port ;&I'KFMGPIMPG&I'KFMGCFM1'$=1
262
FERRAMENTAS TCNICAS
Este script corresponde ao cone "NFS - Montar Compartilhamento" no iniciar. Ele facilita o
acesso a compartilhamentos NFS que normalmente so uma tarefa um tanto quanto indigesta para
os iniciantes.
Ele comea perguntando ao usurio qual compartilhamento ser montado. Aqui estamos
usando as opes "--ok-label" e "--cancel-label" do Xdialog, que alteram o texto dos botes,
ajustando-os melhor ao seu script. A opo "--inputbox" faz com que a janela seja exibida como
uma pergunta, onde voc deve informar o endereo IP do servidor e a pasta compartilhada. Os
nmeros "21 70" definem as dimenses da janela (em caracteres) e o '192.168.0.1:/arquivos' o texto
padro, que aparece no campo de resposta da pergunta. Como disse anteriormente, importante
incluir sempre uma resposta default na pergunta, o que previne erros e enganos. O "\n" adiciona
uma quebra de linha, permitindo formatar o texto.
;dialog --title L'cessar compartilhamento (<SL W
--o3-label LContinuarL --cancel-label LSairL W
--inputbo> LF (<S ] um protocolo Hue permite compartilhar arHuivos facilmente
entre
m^Huinas Kinu>"
Dste script ] um cliente Hue permite acessar compartilhamentos em outras m^Huinas"
Wn
1ara isso vocg precisa apenas informar o endere?o I1 do servidor4 seguido da pasta
Hue ele est^ compartilhando4 como em: 1*2"1-+"#"1:6arHuivosL W
2& 5& \1*2"1-+"#"1:6arHuivos\ 2: "!mp"n$s1
O "2> /tmp/nfs1" faz com que a resposta seja escrita num arquivo (ao invs de ser mostrada
na tela). Fazemos com que este arquivo seja lido usando o cat e atribumos a resposta varivel
"SHARE", que inclui o texto digitado na janela.
SD<H@=[cat 6tmp6nfs1[
Alm de saber qual compartilhamento ser montado, preciso saber onde ele ser montado.
Esta pergunta inclui a pasta "/mnt/nfs" como resposta padro, que seria um local adequado. Caso o
usurio no precise montar num local especfico, ele vai simplesmente pressionar Enter, fazendo
com que a pergunta no incomode.
;dialog --title L'cessar compartilhamento (<SL W
--o3-label LContinuarL --cancel-label LSairL W
--inputbo> L1reciso saber agora em Hual pasta local vocg deseYa Hue o
compartilhamento fiHue acessfvel" Um recurso interessante do (<S ] Hue os arHuivos
ficam acessfveis como se fossem arHuivos locais4 vocg pode at] mesmo gravar um C&
diretamente a partir da pasta com o compartilhamento"WnWn
ocg pode usar HualHuer pasta dentro do seu diretZrio de usu^rio" Se a pasta nAo
e>istir4 vou tentar cri^-la para vocg"L W
1+ J# \6mnt6nfs\ 2T 6tmp6nfs2
LEC<L=[cat 6tmp6nfs2[
Temos agora mais uma varivel, agora armazenando o texto com o diretrio local onde o
compartilhamento ser montado.
Esta funo verifica se o local informado existe e realmente um diretrio (-d) e faz uma
dupla checagem: se ele existe, usado o comando umount, para ter certeza de que no existe outro
compartilhamento ou partio j montada na pasta. Caso ela no exista, o script usa o mkdir para
cri-la. sempre saudvel incluir este tipo de checagem em seus scripts, tentando antecipar erros e
263
FERRAMENTAS TCNICAS
dificuldades comuns por parte de quem vai usar e incluindo aes apropriadas para cada um.
if C -d :KFC'K EI then
umount :KFC'K
else
m3dir :KFC'K
fi
Vamos agora iniciar alguns servios necessrios para o NFS funcionar. No sabemos se eles
vo estar ou no abertos na mquina alvo, por isso melhor ter certeza.
Ao mesmo tempo em que os comandos so executados, eles so escritos na tela, o que tem
uma funo didtica. O sleep 1 faz com que o script pare por um segundo ao executar cada um dos
comandos, dando tempo para que qualquer mensagem de erro seja notada.
echo LD>ecutando comando:L
echo L6etc6init"d6portmap6startL
6etc6init"d6portmap startI sleep 1
echo LD>ecutando comando:L
echo L6etc6init"d6nfs-common startL
6etc6init"d6nfs-common startI sleep 1
As duas variveis que foram lidas acima so usadas para montar o comando que acessa o
compartilhamento:
echo LD>ecutando comando:L
echo Lmount -o soft -t nfs :SP'!D :KFC'KL
mount -o soft -t nfs :SP'!D :KFC'K
sleep 2
Esta linha remove os arquivos temporrios que foram usados. importante deixar a casa
limpa, at para evitar problemas caso o script seja executado vrias vezes em seguida. Veja mais
adiante a dica de como criar arquivos temporrios dinmicos.
rm -f 6tmp6nfs1I rm -f 6tmp6nfs2
Concluindo, abrimos uma janela do Konqueror j mostrando os arquivos do
compartilhamento, provendo gratificao imediata. O "&" no final do comando permite que o script
continue, mesmo que a janela permanea aberta, enquanto o "&>/dev/null" esconde os avisos e
erros que o Konqueror costuma exibir, evitando que ele suje o terminal:
3onHueror :KFC'K cT6dev6null c
sleep 2
O "&>/dev/null um redirecionador, que envia qualquer mensagem ou erro que seria
mostrado no console para o /dev/null, o "buraco negro" do sistema. Isso importante no caso de
programas como o Konqueror, que sujam a tela com um sem nmero de mensagens.
Uma outra forma de fazer a mesma coisa, colocar o comando que deve ser "silenciado"
dentro de ":``", como em ":`konqueror $LOCAL`". O ":" , por estranho que parea, um comando
do shell, que simplesmente no faz nada. Usado desta forma, ele recebe as mensagens exibidas pelo
comando e no faz nada. Este um dos casos em que voc pode fazer a mesma coisa usando um
comando mais longo, porm mais legvel, ou escrever da forma com menos caracteres.
264
FERRAMENTAS TCNICAS
5 Dsta fa7 o mesmo Hue a linha acima:
5 :[3onHueror :KFC'K[
Depois de montar o compartilhamento, entra em ao a segunda parte do script, que oferece
a opo de adicionar uma entrada no fstab e criar um cone no desktop para montar o
compartilhamento. A varivel "$?" armazena a resposta da pergunta. Se a resposta for sim, ela
armazena o valor "0"; e se for no, armazena "1". O script checa o valor e continua apenas se for 0.
;dialog --title L'cessar compartilhamento (<SL W
--o3-label LSimL --cancel-label L(AoL W
--%esno Locg gostaria de adicionar uma entrada no \6etc6fstab\ e um fcone no
des3top4 para Hue este compartilhamento possa ser acessado mais tarde com mais
facilidade8 'o responder %es vocg poder^ acessar os arHuivos posteriormente apenas
clicando no fcone Hue ser^ criado no des3top"L 1) -#
if C L:8L = L#L E I then
Da mesma forma que usado para escrever na tela, o "echo" pode ser usado para adicionar
linhas em arquivos de configurao. Neste caso usamos os redirecionadores (>>), especificando o
arquivo. O echo "" adiciona uma linha em branco no final do arquivo, o que uma regra no caso do
fstab.
Existe a possibilidade da mesma linha ser adicionada mais de uma vez ao fstab, caso o script
seja executado novamente com as mesmas opes. Para evitar isso, o script primeiro checa se a
linha j no existe (usando o grep) e adiciona a linha apenas se o resultado for negativo. Veremos
mais exemplos do uso do grep, sed e outras ferramentas para filtrar e modificar arquivos mais
adiante. Faa uma nota mental de voltar a este exemplo depois de terminar de ler todo o captulo.
CPDCB=[cat 6etc6fstab ` grep L:SP'!D :KFC'K nfs noauto4users4e>ec4soft # #L[
if C -7 L:CPDCBL E4 then
echo \5 'cessa compartilhamento nfs4 adicionado pelo nfs-montar:\ TT 6etc6fstab
echo L:SP'!D :KFC'K nfs noauto4users4e>ec4soft # #L TT 6etc6fstab
echo LL TT 6etc6fstab
fi
Por fim, criado um cone no desktop permitindo montar o mesmo compartilhamento
facilmente depois. Os cones do KDE so apenas arquivos de texto comuns, por isso podem ser
facilmente criados atravs de scripts.
Aqui temos mais um problema: Se forem criados vrios cones para compartilhamentos,
cada um precisar ter um nome de arquivo diferente. Seria possvel pedir para que fosse digitado um
nmero, por exemplo, e us-lo como nome para o arquivo, mas nada impediria que o usurio
simplesmente digitasse o mesmo nmero repetidamente, o que no resolveria nosso problema.
Uma soluo usar o comando "date", que informa a hora atual, para gerar um nmero que
pode ser usado como nome do arquivo. O que aparece escrito no desktop no o nome do arquivo,
mas sim o campo "Name" dentro do texto. Usado com os parmetros abaixo, o date retorna algo
como "20060228952". O "fi" usado aqui fecha o "if" aberto anteriormente e o "exit 0" indica o final
do script:
265
FERRAMENTAS TCNICAS
(FMD=[date N_V_m_d_P_M[
echo LC&es3top Dntr%EL T h6&es3top6:nome
echo L$%pe=<S&eviceL TT h6&es3top6:nome
echo L&ev=:SP'!DL TT h6&es3top6:nome
echo LMount1oint=:KFC'KL TT h6&es3top6:nome
echo L<S$%pe=nfsL TT h6&es3top6:nome
echo L!eadFnl%=#L TT h6&es3top6:nome
echo LIcon=hddGmountL TT h6&es3top6:nome
echo LUnmountIcon=hddGunmountL TT h6&es3top6:nome
echo L(ame=:SP'!DL TT h6&es3top6:nome
fi
e>it #
Uma dvida freqente sobre o uso das aspas. Num script voc pode tanto utilizar aspas
duplas ("), quanto aspas simples ('), mas as duas possuem funes ligeiramente diferentes.
As aspas duplas fazem com que o contedo seja interpretado literalmente, isso permite
incluir nomes de arquivos com espaos entre outras coisas. As aspas simples fazem o mesmo, mas
de uma forma mais estrita, sem interpretar variveis.
Por exemplo, o comando: echo "mount -o soft -t nfs $SHARE $LOCAL" do script anterior
usa duas variveis. Ao executar o script elas so substitudas pelos valores correspondentes, fazendo
com que seja mostrado na tela algo como: "mount -t nfs 192.168.0.1/arquivos /mnt/nfs".
Porm, se usssemos aspas simples, como em: echo 'mount -t nfs $SHARE $LOCAL', o
resultado do comando seria diferente. O bash escreveria a frase literalmente, sem interpretar as
variveis e veramos na tela: "mount -t nfs $SHARE $LOCAL".
Ou seja, s usamos aspas simples quando realmente queremos usar um bloco de texto que
no deve ser interpretado de forma alguma nem conter variveis. No restante do tempo, usamos
sempre aspas duplas.
No final do script, escrevo o cone do desktop linha a linha, usando aspas duplas. Note que
na primeira linha usei um ">" ao invs de ">>" como nas seguintes. Assim como no caso das aspas,
o redirecionador simples tem um efeito diferente do duplo.
O simples (>) apaga todo o contedo anterior do arquivo, deixando apenas a linha
adicionada. Ele usada em situaes onde voc quer ter certeza de que o arquivo est vazio ao invs
de deletar e criar o arquivo novamente. O redirecionador duplo, por sua vez, simplesmente adiciona
texto no final do arquivo, sem modificar o que j existe.
Continuando, uma opo interessante do comando "read" que vimos a pouco o "-t" (timeout), que
permite especificar um tempo mximo para a resposta. Se nada for digitado, o script continua.
266
FERRAMENTAS TCNICAS
Esta opo pode ser usada para incluir opes do tipo "Pressione uma tecla dentro de 5
segundos para acessar a janela de configuraes", onde o script deve continuar se no receber
nenhuma resposta. Um exemplo seria:
echo L1ressione uma tecla em 2 segundos para abrir a configura?Ao"L
read -t 2 resposta
if C -n L:respostaL EI then
configura-programa
fi
abrir-programa
Este o tipo de funo que pode ser usada na abertura do programa, por exemplo. A funo
"if [ -n "$resposta" ]" verifica se a varivel resposta contm alguma coisa. Caso contenha, significa
que foi digitado alguma coisa, o que dispara o comando que abre o menu de configurao. No final,
sempre executado o comando que abre o programa, tenha sido aberta a janela de configurao ou
no.
Ao invs de usar o if, voc pode incluir operaes de verificao de forma mais compacta
usando o "&&" (que testa se uma condio verdadeira) e o "||" (que testa se ela falsa). Por
exemplo, ao invs de usar:
if C -n L:respostaL EI then
configura-programa
fi
Voc poderia usar:
C -n L:respostaL E cc configura-programa
Aqui ele verifica se a varivel resposta est vazia (-n) e, caso esteja, executa o comando
"configura-programa". Como pode ver, ele tem a mesma funo que o "then" do if.
O "||" por sua vez, verifica se a condio falsa, tendo uma funo similar do "else". A
principal vantagem que ele pode ser usado diretamente, sem necessidade de incluir um if inteiro,
como em:
md,sum=[md,sum 3urumin-L:versaoL"iso[
C L:md,sumL = L:md,sumFBL E `` echo LF arHuivo veio corrompidoL
Aqui ele verifica se o md5sum do arquivo est correto e mostra a mensagem apenas quando
ele no bater.
Tanto o && quanto o || podem ser usados tambm para testar comandos, avisando caso o
comando seja executado corretamente, ou caso surja algum erro, como em:
modprobe snd-emu1#31 cc echo LF mZdulo foi carregadoL `` echo LDrro no
carregamentoL
267
FERRAMENTAS TCNICAS
Mais dicas sobre o kdialog
O Kdialog oferece uma quantidade generosa de opes de caixas de dilogo. Alm do
--msgbox, temos tambm o "--sorry" e "--error", que podem ser usados de acordo com o contexto
da mensagem, como em:
1 kdialo' --sorr 42esculpe. nTo $oi possUvel criar o ar+uivo. veri$i+ue as permissVes
da pas!a#4

1 kdialo' --error 4E ar+uivo es!W corrompido# @,perimen!e bai,W-lo novamen!e4

Outra opo til o "--passivepopup", que exibe uma caixa num dos cantos da tela que
desaparece sozinha depois de um tempo determinado (ou ao ser clicada), ideal para avisos de rotina
sem tanta importncia. Ao usar o passivepopup, alm do texto da mensagem, voc deve especificar
o tempo de exibio da mensagem, em segundos. Para que o script continue depois de exibir a
janela, sem esperar ela desaparecer, acrescente um "&", como em:
1 kdialo' --passivepopup 4@s!a Aanela some so7inha depois de * se'undos#4 * Q
A opo "--yesno" permite fazer perguntas. A resposta armazenada na varivel "$?". Se a
resposta for "sim", ela assume o valor 0, caso seja "no", ela armazena o valor 1. Se por acaso a
janela for de alguma forma fechada, sem uma resposta (ao mat-la usando o xkill, por exemplo), a
varivel tambm fica com o valor 1:
1 kdialo' --esno 4Sua cone,To X mui!o len!aY < a!uali7aZTo do sis!ema vai demorar duas
semanas# [uer con!inuar mesmo assim\ :-I4
268
FERRAMENTAS TCNICAS

Como temos apenas duas possibilidades, voc pode usar um if para especificar o que o script
deve fazer em cada caso:
resposta=:8
if C L:respostaL = L#L EI then
apt-get upgrade
fi
if C L:respostaL = L1L EI then
3dialog --msgbo> LF34 abortando"""L
fi
Aqui usei dois "if", um para o sim e outro para o no. Voc pode economizar algumas linhas
usando um "else" (seno):
resposta=:8
if C L:respostaL = L#L EI then
apt-get upgrade
else
3dialog --msgbo> LF34 abortando"""L
fi
O else deve ser usado com um pouco mais de cuidado, pois ele se aplica a qualquer caso
onde a resposta for diferente de 0 e no apenas no caso de ela ser 1, como ao usar um segundo if.
Em algumas situaes isso pode abrir margem para acidentes, caso seu script seja usado num
contexto diferente do que ele foi projetado.
Existe uma pequena variao do --yesno que a opo "--warningcontinuecancel", onde a
legenda dos botes muda para continuar/cancelar, mas sem alterar o comportamento da janela.
Outra variao a opo "--yesnocancel" que mostra uma caixa com trs opes. Respondendo
"Sim" ou "No", a varivel "$?" assume o valor "0" ou "1", mas respondendo "Cancelar" ela
assume o valor "2".

269
FERRAMENTAS TCNICAS
A opo "Cancelar" pode ser usada para fechar o script, atravs do comando "exit", que
encerra a execuo, sem processar o resto dos comandos. Isto pode ser til num script longo, com
muitos passos.
importante que nestes casos voc encontre uma forma de desfazer as alteraes feitas nas
opes anteriores, deixando tudo como estava antes de executar o script. Uma boa medida nestes
casos armazenar todas as respostas em variveis e deixar para fazer todas as operaes de uma
vez, no final do script.
Como agora temos trs possibilidades de resposta, podemos utilizar a funo "case", que
permite especificar aes para um nmero indefinido de opes.
3dialog --%esnocancel LSua cone>Ao ] muito lentad ' atuali7a?Ao do sistema vai
demorar duas semanas" auer continuar mesmo assim8 :-1L
resposta=:8
case 1respos!a in
&/ apt-get upgrade II
1/ 3dialog --msgbo> LF34 abortando"""L II
2/ e>it # II
9/ 3dialog -- msgbo> LFps4 isto nAo deveria acontecer""" :-/L II
esac
Depois do "case $resposta in", voc adiciona cada uma das possibilidades de valor para a
varivel, seguida de um parnteses. No final de cada linha vai obrigatoriamente um ponto-e-vrgula
duplo, que faz o bash entender que deve passar para a prxima opo. Se precisar colocar vrios
comandos dentro de uma mesma opo, voc pode separ-los por um nico ponto-e-vrgula como
em:
1) apt-get -f install; apt-get update; apt-get upgrade ;;
O "*)" funciona da mesma forma que o else, uma opo "default" que executada se
nenhuma das outras for vlida. No meu exemplo, a resposta vem de uma janela com apenas trs
opes, numeradas de 0) a 2). Ou seja, a menos que algo de muito estranho acontea, a opo
default (*) nunca ser usada.
Lembre-se de que os comandos "if" e "case" devem ser sempre fechados, respectivamente
pelo "fi" e pelo "esac", indicando onde a condicional termina.
O kdialog oferece trs opes de dilogos para abrir, salvar arquivos e selecionar pastas.
Vimos uma delas no script gravar-tv, o "--getsavefilename". As outras duas opes so o "--
getopenfilename" (para selecionar um arquivo a ser aberto) e o "--getexistingdirectory" (para
selecionar um diretrio).
As trs opes so semelhantes no sentido de que permitem escolher um arquivo ou
diretrio; muda basicamente a forma como o dilogo apresentado na tela.
270
FERRAMENTAS TCNICAS
A sintaxe um pouco diferente da das caixas de dilogo. Voc pode especificar uma pasta
padro e tambm um filtro, com os formatos de arquivos que sero mostrados. O dilogo pode
mostrar apenas arquivos de imagem e salvar com a extenso .png, por exemplo.
Um dilogo simples seria:
1 ar+uivo0Rkdialo' --'e!save$ilename 4"home"kurumin"2esk!op4 B
4=#!,! ?<r+uivos de !e,!o4R

A varivel "$arquivo" criada com o nome escolhido, como
"/home/kurumin/Desktop/teste.txt". O dilogo no vai reclamar caso voc tente salvar o arquivo
num diretrio onde o usurio de sistema atualmente em uso no tem permisso de escrita. preciso
que o prprio script verifique isso na hora de realmente criar ou modificar o arquivo, caso
necessrio.
Uma forma de fazer isso seria usar um if com a opo "-w", que verifica se o usurio atual
possui permisso de escrita no arquivo:
if C -- L:arHuivoL EI then
echo Lo3"L
else
3dialog --msgbo> Locg nAo tem permissAo de escrita para o arHuivo escolhido"L
fi
O "*.txt |Arquivos de texto" permite especificar os formatos de arquivo que sero mostrados
na janela, e a legenda do filtro. Para mostrar apenas arquivos de imagem, deixando a extenso .png
como padro, voc poderia utilizar algo como "*.png *.jpg *.gif *bmp |Arquivos de Imagem".
Como v, voc s precisa citar as extenses de arquivo permitidas, separadas por espao e incluir a
legenda depois do "|".
271
FERRAMENTAS TCNICAS
A opo --getexistingdirectory mais simples, voc s precisa especificar um diretrio
padro, como em:
1 pas!a0Rkdialo' --'e!e,is!in'direc!or 4"home"1;S@H4R

Como no exemplo anterior, a varivel "$pasta" ser criada armazenando o diretrio escolhido.
Existem ainda trs opes diferentes de menus de seleo, criados usando as opes: "--
menu", "--checklist" e "--combobox".
Na opo "--menu" mostrado um menu com as opes, onde voc s pode escolher uma,
como em:
: operacao=[3dialog --menu LF Hue vocg gostaria de fa7er8L W
a L!edimensionar a imagemL W
b LMirar a imagemL W
c L&eletar a imagemL W
d LConverter para outro formatoL[

272
FERRAMENTAS TCNICAS
A varivel "$operacao" assume um dos 4 valores possveis, a, b, c ou d. Voc pode usar um
case para especificar os comandos referentes a cada uma das opes, como neste script de exemplo:
imagem=[3dialog --getopenfilename L6home63urumin6L L9"png 9"gif 9"Ypg 9"bmp W
`'rHuivos de ImagemL[
operacao=[3dialog --menu LF Hue vocg gostaria de fa7er8L W
a L!edimensionar a imagemL W
b LMirar a imagemL W
c L&eletar a imagemL W
d LConverter para outro formatoL[
case 1operacao in
a/ mv :imagem :imagem-FK&I
tamanho=[3dialog --inputbo> L!edimensionar para Hual tamanho8L L-)#>)+#L[I
convert -si7e :tamanho L:imagemL-FK& :imagem II
b/ Ypegorient N*# :imagem II
c/ rm -f :imagem II
d/ formato=[3dialog --inputbo> LConverter a imagem para Hual formato8L L"YpgL[I
convert :imagem L[echo :imagem ` perl -pe \s6W"Ci"EN:66\[:formatoL II
9/ 3dialog -- msgbo> LCanceladoL II
esac
Este script usa um pouco de cada coisa que j aprendemos, junto com algumas funes
novas. O convert permite realizar vrias operaes com imagens via linha de comando, ideal para
uso em scripts. Ele possui muitas opes, que voc pode ver no manual (man convert). O convert,
junto com o jpegorient (que permite girar imagens) e outros comandos de manipulao de imagem
fazem parte do pacote "imagemagick".
Na opo d usei uma funo em perl, que copiei do script de um dos servicemenus do
Konqueror, que voc pode encontrar no arquivo
/usr/share/apps/konqueror/servicemenus/imageconverter.desktop.
Tenha em mente que a melhor fonte de aprendizado e pesquisa para desenvolver scripts so
justamente outros scripts.
A opo --combobox similar, mas as opes so mostradas dentro de uma caixa de
seleo. A sintaxe tambm muda. Ao invs de especificar as opes, a, b, c, d. etc., voc pode
especificar diretamente as opes desejadas:
1 operacao0Rkdialo' --combobo, 4E +ue deseAa $a7er\4 4'irar4
4redimensionar4 B
4dele!ar4 4conver!er4R

273
FERRAMENTAS TCNICAS
A terceira opo, --checklist permite que seja escolhida mais de uma opo, ideal para
fornecer um menu de alternativas que no conflitam entre si e podem ser escolhidas
simultaneamente:
1 $a7er0Rkdialo' --checklis! 4E +ue 'os!aria de $a7er\4 1
4>ns!alar o pro'rama4 o$$ 2 4Ler o manual4 on / 4<cessar o $]rum4
o$$R

A varivel "$fazer" vai armazenar uma linha contendo todas as opes selecionadas.
Marcando as opes 2 e 3 como no screenshot, ela assume o valor: "2" "3"
Um ltimo exemplo, tambm til, a opo --textbox, que exibe arquivos de texto. Ela
diferente de abrir o arquivo dentro do kedit, por exemplo, pois no permite editar, apenas ler. Serve
como um "extrato para simples conferncia", til para exibir arquivos de log, por exemplo.
Voc pode us-lo tambm para exibir a sada de comandos de modo texto, como o
"ifconfig", que mostra as configuraes da rede. Diferente das outras opes do kdialog, ao usar o
"--textbox" voc deve especificar tambm as dimenses da janela, em pixels. Veja um exemplo:
ifconfig T 6tmp6ifconfig"t>t
3dialog --te>tbo> 6tmp6ifconfig"t>t ,## 22#

274
FERRAMENTAS TCNICAS
Controlando aplicativos via DCOP
Dentro do KDE voc pode utilizar mais um recurso interessante, o DCOP. Ele permite que o
script envie sinais para os programas grficos abertos.
Por exemplo, para abrir o kmix e logo em seguida minimiz-lo ao lado do relgio, voc pode usar o
comando:
1 kmi, Q
1 dcop kmi, kmi,-main-indo-#1 hide
O dcop oferece muitas funes, com o tempo voc acaba decorando as mais usadas, mas no
incio a melhor forma de aprender ir vendo e testando as opes disponveis para cada programa.
Abra o aplicativo que deseja controlar e rode o comando "dcop" num terminal, sem
argumentos. Ele mostrar uma lista dos programas do KDE, que suportam chamadas via DCOP
atualmente abertos:
1 dcop
3win
3ic3er
3ded
3notif%
3ioGuiserver
3coo3ieYar
3onsole-1-2-,
3launcher
3onHueror-21+#-
3hot3e%s
3des3top
3smserver
Veja que alguns aplicativos, como o konqueror e o konsole aparecem com nmeros ao lado.
Estes so aplicativos que podem ser abertos vrias vezes, por isso a necessidade dos nmeros, que
permitem identificar cada instncia.
Usar funes do dcop para eles um pouco mais complicado, pois cada vez que so abertos
usam um nmero diferente. Nestes casos uso um "filtro" para obter o nome da primeira instncia,
seja qual for o nmero de identificao, e coloc-lo (o nome da instncia) numa varivel, que posso
usar depois:
3onHueror=[dcop ` grep 3onHueror ` head -n 1[
Outra opo seria aplicar a mesma ao a todas as janelas abertas, caso exista mais de uma.
Neste caso, voc poderia usar um "for", como em:
for i in [dcop ` grep 3onsole[I do
dcop :i 3onsole-mainwindow51 minimi7e
done
275
FERRAMENTAS TCNICAS
Executando o comando dentro do script, acabo com o valor "konqueror-21806", a
identificao do konqueror atual carregada dentro da varivel. Note que isto resolve o problema caso
exista apenas uma instncia do programa aberta. A varivel vai sempre assumir a primeira instncia
do konqueror que aparecer na lista do DCOP.
Para ver uma lista das opes disponveis para um determinado aplicativo, rode o comando
dcop seguido do aplicativo, como em:
1 dcop 1kon+ueror
Ht
BBoo3mar3Manager-6home63urumin6"3de6share6apps63onHueror6boo3mar3s">ml
BBoo3mar3(otifier
B&ebug
BIF::Scheduler
BonH<avIconMgr
BonHPistor%Manager
BonHUndoManager
BonHuerorIface .default/
Main'pplication-Interface
html-widget1
html-widget2
html-widget2
3onHueror-mainwindow51
3s%coca
Cada uma destas opes possui uma lista de funes. Por exemplo, a opo konqueror-
mainwindow#1 controla a janela principal do konqueror. Para ver as funes relacionadas a ela,
rode o comando:
1 dcop 1kon+ueror kon+ueror-main-indo-#1
Este comando retorna uma longa lista de opes. Voc pode fazer de tudo, desde esconder a
janela at mudar a fonte, ttulo, pgina exibida ou cone na barra de tarefas. Algumas opes bsicas
so:
: dcop :3onHueror 3onHueror-mainwindow51 ma>imi7e
: dcop :3onHueror 3onHueror-mainwindow51 minimi7e
: dcop :3onHueror 3onHueror-mainwindow51 hide
: dcop :3onHueror 3onHueror-mainwindow51 reload
: dcop :3onHueror 3onHueror-mainwindow51 show
Este exemplo parece complicado, mas a maioria dos aplicativos suporta a opo "default"
que permite que voc v direto funo desejada. Por exemplo, para fazer uma janela aberta do
kmail baixar novas mensagens, use o comando:
1 dcop kmail de$aul! checkMail
Voc pode ver os comandos DCOP disponveis em cada um dos aplicativos abertos de uma
forma mais conveniente usando o "kdcop". Abra-o a partir do terminal, seguido dos aplicativos que
deseja controlar. Na janela principal, so exibidos todos os aplicativos abertos que suportam
chamadas DCOP, com as chamadas organizadas numa estrutura de rvore. Clicando numa das
chamadas, ela executada, maximizando ou minimizando a janela do aplicativo, por exemplo. Isso
permite que voc veja rapidamente o que cada uma faz.
276
FERRAMENTAS TCNICAS
Usando os servicemenus do KDE
Mais uma aplicao interessante para os shell scripts so os menus de contexto do KDE, que
aparecem ao clicar com o boto direito sobre arquivos e pastas.
Uma determinada operao pode aparecer para todos os arquivos, todas as pastas, ou apenas
para alguns formatos de arquivos especficos. Ao clicar sobre uma pasta, voc tem a opo de criar
um CD de dados no K3B, ao clicar num arquivo .zip voc tem a opo de descompact-lo, e assim
por diante. Voc pode adicionar servicemenus para todo tipo de tarefa.
Os scripts dos servicemenus vo na pasta "/usr/share/apps/konqueror/servicemenus":
277
FERRAMENTAS TCNICAS
Todos os arquivos dentro da pasta so scripts, que seguem um padro prprio, comeando
pelo nome, que deve sempre terminar com ".desktop".
Por exemplo, o servicemenu responsvel pela opo "Acessar arquivos dentro do ISO", que
aparece apenas ao clicar sobre um arquivo com a extenso .iso, o arquivo "montar-iso.desktop",
que tem o seguinte contedo:
C&es3top Dntr%E
'ctions=montar
Dncoding=U$<-+
Service$%pes=application6>-iso
C&es3top 'ction montarE
D>ec=acessar-iso-servicemenu ^u
Icon=cdromGunmount
(ame='cessar arHuivos dentro do ISF
A linha "ServiceTypes=application/x-iso" importante neste caso, pois nela que voc
especifica a que tipos de arquivos o servicemenu se destina. por isso que eles tambm so
chamados em portugus de "Menus de contexto", pois so mostradas opes diferentes para cada
tipo de arquivo. Voc pode ver todos os formatos de arquivos reconhecidos pela sua instalao do
KDE, e adicionar novas extenses caso necessrio no Centro de Controle do KDE, em
"Componentes do KDE > Associaes de arquivos".
278
FERRAMENTAS TCNICAS
Veja que no incio do script voc especifica as aes disponveis no parmetro "Actions".
Mais adiante, voc cria uma seo para cada ao especificada contendo o nome (da forma como
aparecer no menu) cone e o comando que ser executado ao acionar a ao no menu.
Neste exemplo executado o comando "acessar-iso-servicemenu %u". O "%u" uma
varivel, que contm o nome do arquivo clicado. Este parmetro pode ser usado apenas nos scripts
dos servicemenus, no em scripts regulares. O KDE oferece um conjunto de variveis que podem
ser utilizadas nos servicemenus:
%u: Esta a varivel que estamos utilizando no script acessar-iso. Ela contm o caminho
completo para o arquivo selecionado (como em "file:/home/joao/kurumin.iso").
%U: Tambm armazena os caminhos completos para os arquivos, a diferena que o "%u"
permite selecionar apenas um arquivo (se voc selecionar vrios na janela do Konqueror ao
executar o script, ele vai ficar apena com o ltimo), enquanto o "%U" permite selecionar
vrios arquivos. O "%U" pode ser usado em servicemenus que permitem manipular vrios
arquivos de uma vez, renomeando arquivos ou convertendo de .mp3 para .ogg, por exemplo.
%n: Contm apenas o nome do arquivo selecionado, sem o caminho completo. Faz par com
a varivel "%N", que permite selecionar vrios arquivos.
%d: Esta varivel armazena um diretrio. Pode ser usada em scripts que manipulem de uma
279
FERRAMENTAS TCNICAS
vez todos os arquivos dentro de um diretrio, como no caso de um script que gerasse
thumbmails de todas as imagens dentro dele. Mesmo que voc selecione um arquivo, o KDE
remove o nome do arquivo e fica apenas com a pasta. Existe tambm a varivel "%D", que
permite selecionar vrios diretrios de uma vez. A "%D" poderia ser usada para criar um
script que permite criar um CD de dados incluindo o contedo de vrias pastas, por
exemplo.
O "acessar-iso-servicemenu" um script separado, que pode ir em qualquer uma das pastas
de executveis do sistema: "/usr/local/bin/", "/usr/bin/", "/bin", ou em outra pasta adicionada
manualmente no patch.
Este script contm os comandos para montar o arquivo .iso numa pasta e abrir uma janela do
Konqueror mostrando o contedo. Ao fechar a janela do Konqueror, o arquivo desmontado, para
evitar problemas caso o usurio tente montar vrios arquivos em seqncia:
5d6bin6sh
3desu Lm3dir 6mnt6isoI umount 6mnt6isoI mount -t iso*--# -o loop :1 6mnt6isoL
clear
3onHueror 6mnt6iso
3desu umount 6mnt6iso
O kdesu um componente do KDE que permite executar comandos como root. Ao executar
um "kdesu konqueror", por exemplo, ele pede a senha de root numa janela e depois executa o
comando, abrindo uma janela do Konqueror com permisses de root. Voc pode executar uma
seqncia de comandos dentro de uma nica instncia do kdesu (para que ele pea a senha apenas
uma vez), colocando os comandos entre aspas, separados por ponto-e-vrgula, como no exemplo.
possvel tambm utilizar o sudo, caso ativado.
Note que neste segundo script no uso a varivel "%u" (que pode ser usada apenas dentro
do script do servicemenu), mas sim a varivel "$1".
Quando voc executa um comando qualquer, via linha de comando, a varivel "$1" o
primeiro parmetro, colocado depois do comando em si. Para entender melhor, vamos criar um
script "teste", com o seguinte contedo:
5d6bin6sh
echo :1
echo :2
echo :2
Execute o script, incluindo alguns parmetros e voc ver que ele vai justamente repetir
todos os parmetros que incluir.
280
FERRAMENTAS TCNICAS
Quando clicamos sobre um arquivo chamado "kurumin.iso" e acionamos o servicemenu, a
varivel "%u" contm o nome do arquivo, ou seja, "kurumin.iso". O servicemenu por sua vez
chama o segundo script, adicionando o nome do arquivo depois do comando, o que
automaticamente faz com que a varivel "$1" tambm contenha o nome do arquivo. Ou seja, as
variveis "%u" e "$1" neste caso vo sempre possuir o mesmo contedo, muda apenas o contexto
em que so usadas.
Voc pode usar este tipo de troca de parmetro para desmembrar seus scripts, criando
"mdulos" que possam ser usados em outros scripts.
Por exemplo, os cones mgicos do Kurumin utilizam o sudo para executar comandos como
root (como ao usar o apt-get para instalar um programa), sem ficar pedindo a senha de root a todo
instante. O sudo pode ser ativado e desativado a qualquer momento, fornecendo a senha de root, de
forma que voc pode mant-lo desativado, e ativar apenas ao executar algum script que precisa
deles.
Para que isso funcione, os scripts sempre executam uma funo, que verifica se o sudo est
ativado. Caso esteja, eles so executados diretamente, sem pedir senha, caso contrrio eles pedem a
senha de root.
Isto foi implementado incluindo esta funo no incio de cada script:
sudo-verificar
if C L:8L = L2L EI then e>it #I fi
O script "sudo-verificar", chamado por ela, tem o seguinte contedo:
5d6bin6sh
sudoativo=[sudo whoami[
if C L:sudoativoL d= LrootL EI then
3dialog --warning%esno LF script Hue vocg e>ecutou precisa utili7ar o sudo para
e>ecutar altera?@es no sistema" 'tualmente o Burumin est^ operando em modo seguro4
com o sudo desativado para o usu^rio atual"
ocg gostaria de mudar para o modo root4 ativando o sudo8 1ara isso ser^
necess^rio fornecer a senha de root" Caso prefira abortar a instala?Ao4 responda
(Ao" ocg pode tamb]m e>ecutar o script deseYado diretamente como root"L
281
FERRAMENTAS TCNICAS
retval=:8
if C L:retvalL = L#L EI then
sudo-a!ivar
fi
if C L:retvalL = L1L EI then
e,i! 2
fi
fi
Este script verifica se o sudo est ativo usando o comando "whoami", que retorna o nome do
usurio que o chamou. Caso o sudo esteja ativo, ento o "sudo whoami" executado pelo root e
retorna "root". uma estratgia simples, mas que funciona.
Caso o retorno no seja "root", significa que o sudo est desativado, o que dispara a
pergunta. Respondendo "sim", ele executa o script "sudo-ativar", que pede a senha de root. Caso
seja respondido "no" ou caso a janela com a pergunta seja fechada, ele roda o comando "exit 2".
O comando "exit" usado para terminar o script. Voc pode incluir um parmetro depois do
exit, (no nosso caso o "2") que um status de sada, repassado ao primeiro script. Isto permite que
os scripts "conversem".
Como vimos, depois de chamar o "sudo-verificar", o primeiro script verifica o status de
sada do comando "sudo-verificar", usando a funo: "if [ "$?" = "2" ]; then exit 0; fi".
Ou seja, se o status de sada do sudo-verificar for "2", o que significa que o sudo est
desativado e o usurio no quis fornecer a senha de root, ento o primeiro script roda o comando
"exit" e tambm finalizado.
Ok, demos uma grande volta agora. Mas, voltando aos servicemenus, possvel incluir
vrias aes dentro de um mesmo script, que se aplicam a um mesmo tipo de arquivo. Voc pode,
por exemplo, adicionar uma opo de redimensionar imagens, colocando vrias opes de tamanho,
ou uma opo para converter arquivos de udio para vrios outros formatos.
Este um exemplo de script com vrias aes, que permite redimensionar imagens:
C&es3top Dntr%E
Service$%pes=image69
'ctions=resi7eJ,Iresi7e--Iresi7e,#Iresi7e22Iresi7e2,I
;-B&D-Submenu=!edimensionar a imagem
C&es3top 'ction resi7eJ,E
(ame=!edimensionar para J,_ do tamanho original
Icon=thumbnail
D>ec=img-resi7e J, _u
C&es3top 'ction resi7e--E
(ame=!edimensionar para --_ do tamanho original
Icon=thumbnail
D>ec=img-resi7e -- _u
C&es3top 'ction resi7e,#E
(ame=!edimensionar para ,#_ do tamanho original
Icon=thumbnail
D>ec=img-resi7e ,# _u
282
FERRAMENTAS TCNICAS
C&es3top 'ction resi7e22E
(ame=!edimensionar para 22_ do tamanho original
Icon=thumbnail
D>ec=img-resi7e 22 _u
C&es3top 'ction resi7e2,E
(ame=!edimensionar para 2,_ do tamanho original
Icon=thumbnail
D>ec=img-resi7e 2, _u
Veja que nas primeiras linhas necessrio especificar que ele s se aplica a imagens
(ServiceTypes=image/*), e depois especificar todas as aes disponveis, adicionando uma seo
para cada uma mais adiante. No existe limite para o nmero de aes que podem ser adicionadas
neste caso, s depende da sua pacincia :).
Como no exemplo anterior, este script chama um script externo, o "img-resize", para
executar as operaes. Ele um script simples, que usa o "convert" (que vimos ao estudar sobre o
Kommander) para fazer as converses:
5d6bin6sh
echo LConvertendo :2 para :1_ do tamanho original"L
echo LBac3up da imagem original salvo em: :2"originalL
cp :2 :2"original
convert -Hualit% *# -sample :1_>:1_ :2 :2-out
rm -f :2I mv :2-out :2I sleep 1
echo LF3dL
Os parmetros "$1" e "$2" so recebidos do script do servicemenu. O $1 a percentagem de
redimensionamento da imagem, enquanto o $2 o nome do arquivo.
Voc pode ainda chamar funes de aplicativos do KDE dentro dos servicemuenus, usando
funes do dcop, que estudamos anteriormente. Este o script do servicemenu que permite
adicionar arquivos na playlist do Kaffeine:
Service$%pes=all6all
'ctions=3affeineGappendGfile
Dncoding=U$<+
C&es3top 'ction 3affeineGappendGfileE
(ame='ppend to Baffeine 1la%list
(ameChuE=<elvjktel a Baffeine KeYjlts7jmlistjlba
(ameCdeE=Our Baffeine Stjnc3liste hin7ufjngen
(ameCsvE=Kjogg till i Baffeine spellista
D>ec=dcop 3affeine BaffeineIface appendU!K _u
Icon=3affeine
283
FERRAMENTAS TCNICAS
Veja que ele usa a funo " dcop kaffeine KaffeineIface appendURL %u" para contatar o
Kaffeine e instru-lo a adicionar o arquivo na playlist.
Os servicemenus podem ser internacionalizados, com tradues das legendas para vrias
lnguas. Para adicionar a traduo para o portugus neste servicemenu do Kaffeine, basta adicionar
a linha "Name[pt_BR]=Adicionar na Playlist do Kaffeine".
Para que a opo seja exibida apenas ao clicar sobre arquivos de vdeo, e no mais sobre
qualquer arquivo, substitua a linha "ServiceTypes=all/all" por "ServiceTypes=video/*".
Detectando Hardware
A forma como o suporte a dispositivos no Linux implementado atravs de mdulos,
combinada com ferramentas como o pciutils (includo por padro em todas as distribuies),
facilita bastante as coisas para quem escreve ferramentas de deteco.
Hoje em dia, quase todas as distribuies detectam o hardware da mquina durante a
instalao ou durante o boot atravs de ferramentas como o kudzu (do Red Hat), drakconf (do
Mandriva) Yast (SuSE) e hwsetup (do Knoppix).
Estas ferramentas trabalham usando uma biblioteca com as identificaes dos dispositivos
suportados e os mdulos e parmetros necessrios para cada um.
A biblioteca com as identificaes de uso comum e faz parte do pacote pciutils. Voc pode
checar os dispositivos instalados atravs dos comandos lspci (para placas PCI e AGP), lsusb e
lspnp (para placas ISA com suporte a plug-and-play):
1 lspci
####:##:##"# Post bridge: nidia Corporation n<orce2 'M1 .different version8/ .rev c1/
####:##:##"1 !'M memor%: nidia Corporation n<orce2 Memor% Controller # .rev c1/
####:##:##"2 !'M memor%: nidia Corporation n<orce2 Memor% Controller ) .rev c1/
####:##:##"2 !'M memor%: nidia Corporation n<orce2 Memor% Controller 2 .rev c1/
####:##:##") !'M memor%: nidia Corporation n<orce2 Memor% Controller 2 .rev c1/
####:##:##", !'M memor%: nidia Corporation n<orce2 Memor% Controller , .rev c1/
####:##:#1"# IS' bridge: nidia Corporation n<orce2 IS' Bridge .rev a)/
####:##:#1"1 SMBus: nidia Corporation n<orce2 SMBus .MC1/ .rev a2/
####:##:#2"# USB Controller: nidia Corporation n<orce2 USB Controller .rev a)/
####:##:#2"1 USB Controller: nidia Corporation n<orce2 USB Controller .rev a)/
####:##:#2"2 USB Controller: nidia Corporation n<orce2 USB Controller .rev a)/
####:##:#)"# Dthernet controller: nidia Corporation n<orce2 Dthernet Controller .rev a1/
####:##:#+"# 1CI bridge: nidia Corporation n<orce2 D>ternal 1CI Bridge .rev a2/
####:##:#*"# I&D interface: nidia Corporation n<orce2 I&D .rev a2/
####:##:1e"# 1CI bridge: nidia Corporation n<orce2 'M1 .rev c1/
####:#1:#J"# Multimedia video controller: Broo3tree Corporation Bt+J+ ideo Capture .rev 11/
####:#1:#J"1 Multimedia controller: Broo3tree Corporation Bt+J+ 'udio Capture .rev 11/
####:#1:#a"# Multimedia audio controller: Creative Kabs SB Kived DMU1#31 .rev #+/
####:#1:#a"1 Input device controller: Creative Kabs SB Kived MI&I6Mame 1ort .rev #+/
####:#2:##"# M' compatible controller: nidia Corporation (1J CMe<orce) M; ))#E .rev a2/
1 lsusb
Bus 002 Device 009: ID 043d:009a Lexmark International, Inc.
Bus 002 Device 003: ID 058f:9254 Alcor Micro Corp. Hub
284
FERRAMENTAS TCNICAS
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 005: ID 05e3:0760 Genesys Logic, Inc. Card Reader
Bus 001 Device 004: ID 0458:003a KYE Systems Corp. (Mouse Systems)
Bus 001 Device 001: ID 0000:0000
1 lspnp
lspnp: /proc/bus/pnp not available
Os PCs novos no possuem mais suporte ao barramento ISA (que nas placas antigas
implantado como uma extenso do barramento PCI, atravs de um circuito adicional, includo na
ponte sul do chipset), por isso a mensagem de erro ao rodar o "lspnp" no meu caso.
Voc pode escrever scripts para detectar automaticamente componentes que no so
originalmente detectados, ou para softmodems, placas wireless e outros mdulos avulsos que tenha
instalado manualmente. Isto muito fcil quando voc sabe de antemo qual a sada do comando
lspci, lsusb ou lspnp referente ao dispositivo e quais so os mdulos e parmetros necessrios para
ativ-los.
Por exemplo, as placas de vdeo onboard, com chipset Intel precisam que o mdulo "intel-
agp" esteja ativo, para que o suporte a 3D no Xfree funcione corretamente.
Num micro com uma placa destas, o lspci retorna algo similar a:
0000:00:02.0 VGA compatible controller: Intel Corp. 82852/855GM Integrated Graphics Device (rev 02)
A identificao do modelo muda de acordo com a placa usada, mas o "VGA compatible
controller: Intel Corp." no. Um exemplo simples de script para detectar e ativar o mdulo intel-agp
caso necessrio poderia ser:
intelonboard=[lspci ? 'rep 4NG< compa!ible con!roller: >n!el Corp#4[
if C -n L:intelonboardL EI
then
modprobe intel-agp
fi
O grep permite filtrar a sada do comando lspci, mostrando apenas linhas que contenham a
string definida entre aspas. Ou seja, o comando s vai retornar alguma coisa em micros com placas
de vdeo Intel.
Carregamos a resposta numa varivel. O "if [ -n" permite testar se existe algum valor dentro
da varivel (-n = no nulo), sintoma de que uma placa Intel est presente e ento carregar o mdulo
apropriado.
Outras condicionais que voc pode usar para testar valores so:
-e: Usado para verificar se um arquivo existe, como em:
if C -e L6etc6fstabL EI then ecomandosTI fi
-f: similar ao -e. Tambm serve para verificar se um arquivo existe, mas ele aceita apenas
arquivos normais, deixando de fora links, diretrios e dispositivos.
285
FERRAMENTAS TCNICAS
-d: Tambm similar ao -e, serve para verificar se um diretrio existe.
-L: Usado para verificar se o arquivo um link simblico, que aponta para outro arquivo.
-s: Para testar se o arquivo maior que zero bytes, ou seja, se o arquivo est em branco ou se
possui algum contedo. possvel criar arquivos vazios usando o comando "touch".
-r: Verifica se o usurio atual (que executou o script) tem permisso de leitura para o
arquivo.
-w: Testa se o usurio tem permisso de escrita para o arquivo. Esta opo boa para
funes de verificao, onde o script pode pedir a senha de root para mudar as permisses de
acesso do arquivo caso o usurio atual no tenha permisso para execut-lo, como em:
if C -w L:arHuivoL E then echo Lo3"LI else 3desu Lchmod ---
:arHuivoLI fi
-x: Verifica se o arquivo executvel.
-ef: EqualFile, permite verificar se dois arquivos so iguais, como em:
if C L6etc6fstabL -ef L6etc6fstab"b3L E then ecomandosTI fi
Voc pode ainda usar o parmetro "-a" (E) para incluir mais de uma condio dentro da
mesma funo, como em:
if [ "$cdrom1" != "$cdrom2" -a "$cdrom2" != "/etc/sr0" ] ; then <comandos>; fi
Aqui os comandos so executados apenas caso a varivel "$cdrom1" seja diferente da
"$cdrom2" E a $cdrom2 no seja "/dev/sr0".
Outra possibilidade usar o "-o" (OU) para fazer com que os comandos sejam executados
caso qualquer uma das condies seja verdadeira.
Em muitas situaes, a nica forma de detectar um determinado componente via "fora
bruta", testando vrias possibilidades ou endereos para ver se ele est presente. Um exemplo so os
leitores de cartes de memria USB. Se voc plugar o carto de memria no leitor e depois plugar o
leitor na porta USB, ele ser detectado como se fosse um pendrive, permitindo que os scripts
includos nas distribuies criem um cone no desktop ou executem outra funo do gnero.
Mas, caso voc deixe o leitor plugado o tempo todo (como muita gente faz, principalmente
no caso dos maiores, com entradas para vrios cartes) e plugar/desplugar apenas o carto em si,
no gerado nenhum tipo de evento. O hotplug no detecta o carto, no includa nenhuma nova
entrada no dmesg, nada. Este um exemplo onde um mtodo "fora bruta" pode ser usado.
286
FERRAMENTAS TCNICAS
Embora os cartes no sejam detectados pelo hotplug, possvel "detect-los" usando o
comando "fdisk -l", que verifica e lista as parties disponveis num determinado dispositivo, como
em:
5 fdis3 -l 6dev6sda
&is3 6dev6sda: ,2) MB4 ,2)#2,+,- b%tes
1J heads4 ,* sectors6trac34 1#2# c%linders
Units = c%linders of 1##2 9 ,12 = ,12,2- b%tes
&evice Boot Start Dnd Bloc3s Id S%stem
6dev6sda1 9 1 1#2# ,11,##N b 0*, <'$22
Seria possvel detectar o carto usando um script que testasse um a um os dispositivos "/dev/
sda", "/dev/sdb", "/dev/sdc", etc., que so atribudos a pendrives e cartes de memria, como em:
5d6bin6sh
m3dir 6tmp6leitorcdI cd 6tmp6leitorcd
for part in 6dev6sdCabcdefEI do
1'!$IC'F=[sudo fdis3 -l :part ` grep L:partL1 ` grep <'$[
if C -n L:1'!$IC'FL EI then
&D=[echo :part ` cut -d L6L -f 2[
tamanh=[sudo fdis3 -s L:partL1[I tamanho=[echo L:tamanhL 6 1### ` bc[
3dialog --%esno L&etectado o dispositivo L:partL14 com :tamanho MB" Mostaria de
criar um fcone para acessar os arHuivos no des3top8L
if C L:8L = L#L EI then
sudo m3dir 6mnt6L:&DL1
echo LC&es3top Dntr%EL T 6home6:USD!6&es3top6L:&DL1"des3top
echo LD>ec=sudo mount -t vfat -o umas3=### 6dev6L:&DL1 6mnt6L:&DL1I 3onHueror
6mnt6L:&DL1I sudo umount 6mnt6L:&DL1I s%ncL TT 6home6
:USD!6&es3top6L:&DL1"des3top
echo LIcon=usbpendriveGunmountL TT 6home6:USD!6&es3top6L:&DL1"des3top
echo L(ame=L:&DL1L TT 6home6:USD!6&es3top6L:&DL1"des3top
echo L$%pe='pplicationL TT 6home6:USD!6&es3top6L:&DL1"des3top
fi
fi
done
Neste script usamos um "for" para testar os dispositivos de "/dev/sda" at "/dev/sdf". Para
cada um, ele executa o comando "sudo fdisk -l $part | grep "$part"1 | grep FAT" e atribui o
resultado varivel "$PARTICAO". Usado desta forma, a sada do fdisk filtrada, de forma que a
varivel contenha alguma coisa apenas se existir a partio "/dev/sd?/1" e ela estiver formatada em
FAT. A idia aqui evitar falsos positivos, j que esta de longe a formatao mais comum usada
em cartes de memria.
287
FERRAMENTAS TCNICAS
Sempre que uma partio vlida encontrada, ele faz uma pergunta usando o kdialog, e,
caso a resposta seja afirmativa, cria um cone no desktop contendo um "mini-script", que monta a
partio, abre uma janela do konqueror mostrando os arquivos e sincroniza os dados e desmonta a
partio quando a janela fechada, permitindo que o carto seja removido com segurana.
As linhas:
&D=[echo :part ` cut -d L6L -f 2[
tamanh=[sudo fdis3 -s L:partL1[I tamanho=[echo L:tamanhL 6 1### ` bc[
... so usadas para remover as partes indesejadas do texto, deixando apenas o nome da partio,
como "sda", e calcular seu tamanho, em MB. Aqui estou usando o cut, o grep e o bc, comandos que
vou explicar com mais detalhes a seguir.
Alterando arquivos de configurao
Caso sejam executados pelo root, os scripts podem tambm alterar arquivos de configurao
do sistema, modificando entradas existentes ou incluindo novas configuraes. O comando mais
usado para fazer substituies o sed. Para simplesmente adicionar linhas no final do arquivo, voc
pode usar o echo, o mesmo comando que usamos para escrever mensagens na tela.
Por exemplo, um erro comum ao acessar parties do Windows formatadas em NTFS a
partio ser montada com permisso de leitura apenas para o root. Voc s consegue ver os arquivos
abrindo o gerenciador de arquivos como root, o que desconfortvel.
Isto acontece porque o default do mount montar parties NTFS e FAT com permisso de
acesso apenas para o root. Para que outros usurios possam visualizar os arquivos, necessrio
montar incluindo a opo "umask=000".
A tarefa relativamente simples, basta abrir o arquivo "/etc/fstab" e adicionar a opo na
linha referente partio.
Ao invs de:
6dev6hda1 6mnt6hda1 auto noauto4users4e>ec # #
Ficaramos com:
6dev6hda1 6mnt6hda1 auto noauto4users4e>ec4umask0&&& # #
At a tudo bem. O problema que este parmetro pode ser usado apenas em parties FAT
ou NTFS. Se voc usar em parties formatadas em ReiserFS ou EXT, elas no montam.
Ou seja, ao fazer isso via script, precisamos primeiro ter certeza de que a partio est
formatada em NTFS, antes de alterar o "/etc/fstab".
288
FERRAMENTAS TCNICAS
Uma forma de fazer isto verificando a sada do comando "fdisk -l", que mostra detalhes
sobre as parties, como em:
5 $disk -l "dev"hda
&is3 6dev6hda: 2#"# MB4 2###2++#*-# b%tes
2,, heads4 -2 sectors6trac34 2)22 c%linders
Units = c%linders of 1-#-, 9 ,12 = +22,2+# b%tes
&evice Boot Start Dnd Bloc3s Id S%stem
6dev6hda1 9 1 )#1 2221##1 J P1<S6($<S
6dev6hda2 )#2 1#)2 ,1)++22N +2 Kinu>
6dev6hda2 111- 2)22 1#,J++#2N , D>tended
6dev6hda) 1#)2 111, ,+-2J2N +2 Kinu>
6dev6hda, 111- 11-) 2*2,-1 +2 Kinu> swap 6 Solaris
6dev6hda- 11-, 2)22 1#1+,1J+N +2 Kinu>
Podemos ento usar o grep para filtrar a sada e carregar o resultado dentro de uma varivel,
de modo que ela contenha alguma coisa apenas se a partio testada estiver formatada em NTFS,
como em:
winntfs=[fdis3 -l 6dev6hda ` grep hda1 ` grep ($<S[
Note que aqui estamos usando trs comandos diferentes, ligados por pipes. Esta uma
prtica comum na hora de filtrar a sada de comandos, j que difcil chegar a um nico comando
que faa de uma vez tudo o que voc precisa. Neste exemplo, o "grep hda1" vai remover todas as
linhas, deixando apenas a linha referente partio "/dev/hda1". O "grep NTFS" verifica a linha e
deixa-a passar apenas se a partio estiver formatada em NTFS, visto que, caso ela esteja formatada
em outro sistema, a string com a identificao do sistema de arquivos ser outra.
Usamos em seguida uma funo que verifica se a varivel no nula (-n). Por causa dos dois
comandos do grep, ela s conter algum texto se o /dev/hda1 estiver formatado em NTFS. Usamos
ento um if com o comando do sed para alterar a linha no "/etc/fstab" caso positivo:
if C -n L:winntfsL EI then
5 F gigantesco comando abai>o forma uma pnica linha:
sed -e Fs"B"devB"hda1 B"mn!B"hda1 au!o noau!o.users.e,ec & &"B"devB"hda1
B"mn!B"hda1 au!o noau!o.users.e,ec.umask0&&& & &"'F "e!c"$s!ab : "!mp"$s!ab2
rm -f 6etc6fstabI mv 6etc6fstab2 6etc6fstab
fi
Veja que a linha do sed um pouco longa. A sintaxe bsica para fazer substituies :
1 sed -e Fs"!e,!o"novo-!e,!o"'F ar+uivo : novo-ar+uivo
Ele sempre gera um novo arquivo com as alteraes, por isso depois do comando voc ainda
precisa remover o arquivo original e renomear o novo arquivo. Caso dentro da string de texto a
substituir existam barras ou caracteres especiais, use barras invertidas (\) como no exemplo, para
demarc-los. As barras invertidas indicam que o caractere seguinte no deve ser interpretado.
289
FERRAMENTAS TCNICAS
O comando "sed -e 's/texto/novo-texto/g' arquivo > novo-arquivo" que vimos, simplesmente
substitui todas as instncias da palavra "texto" por "novo-texto". Voc precisa certificar-se que a
palavra s existe dentro do contexto que imagina, caso contrrio, o comando pode facilmente causar
acidentes. O ideal que voc seja sempre o mais especfico possvel.
Para deletar uma linha, use o comando "sed -e '/texto/D' arquivo > novo-arquivo, como em:
1 sed -e F"Load 4dri4"2F "e!c"(11",or'#con$ : "!mp",or'#con$#ne-
O sed suporta tambm alguns caracteres especiais. O "^", por exemplo, indica o incio da
linha. Para remover todas as linhas que comeam com "#" (ou seja, linhas com comentrios), use:
1 sed -e F"_B#"2F "e!c"lilo#con$ : "!mp"lilo#con$#ne-
Note que precisei incluir uma barra invertida antes do "#". Para remover todas as linhas em
branco de um arquivo, use:
1 sed -e F"_1"2F "e!c"(11",or'#con$ : "!mp",or'#con$#ne-
possvel tambm combinar vrios comandos do sed usando o pipe, fazendo com que a
sada de um passe tambm pelo outro antes de ser escrita no arquivo final. Para remover todas as
linhas com comentrios e todas as em branco, o comando seria:
1 sed -e F"_B#"2F "e!c"lilo#con$ ? sed -e F"_1"2F "e!c"lilo#con$ : "!mp"lilo#con$#ne-
Para eliminar espaos repetidos num arquivo (til caso voc queira filtrar alguma informao
usando o cut):
1 sed -r Fs" 6" "'F "e!c"(11",or'#con$ : "!mp",or'#con$#ne-
Para substituir todos os espaos por quebras de linha (representadas pelo "\n" dentro do sed):
1 sed -e Fs" "Bn"'F "!mp"m$re+ :: "!mp"m$re+2
Para remover todas as quebras de linhas de um arquivo, fazendo com que tudo fique numa
nica linha (o que pode ser til para facilitar a localizao de determinadas informaes, que
originalmente estavam em vrias linhas separadas), use esta funo inventada pelo Thobias Salazar:
1 sed F:aO1YNOs"Bn""O!aOF G"#sner'#con$ : "!mp"sner'#con$
Voc pode us-la junto com a funo sed 's/^/ /', que adiciona um caracter no incio de cada
linha. Ao usar esta funo ('s/^/ /'), voc pode substituir o espao entre a segunda e terceira barra por
outro caracter, ou conjunto de caracteres, como em sed 's/^/\&\&/'. Veja um exemplo de uso dos
dois combinados, que formata o arquivo ".synergy.conf" (usado pelo Synergy, que vimos no
captulo 2):
1 ca! #sner'#con$ ? sed Fs"_" "F ? sed F:aO1YNOs"Bn""O!aOF
section: screens 3urumin: semprao: end section: lin3s semprao: right = 3urumin
3urumin: left = semprao end section: aliases 3urumin: 1*2"1-+"1"1#2 end
290
FERRAMENTAS TCNICAS
O sed, aliado ao grep, pode ser usado tambm para criar scripts inteligentes, que verificam a
configurao do sistema e, se necessrio alteram as linhas necessrias.
Por exemplo, para instalar o FreeNX server no Debian, seguindo o tutorial que publiquei no
Guia do Hardware (http://www.guiadohardware.net/tutoriais/109/), necessrio adicionar uma linha
no "/etc/apt/sources.list", com o repositrio do Kanotix que possui os pacotes. Estes pacotes
possuem algumas dependncias do Unstable, de forma que o sources.list precisa conter tambm a
linha correspondente.
Este o trecho do script do cone mgico que escrevi para o Kurumin, que verifica e altera o
arquivo caso necessrio:
5 erifica se o sources"list cont]m entradas para o unstable4
5 se nAo tiver adiciona:
unstable=[sed \6i:6d\ 6etc6apt6sources"list ` sed \656d\ W
` grep Lunstable main contribL[
i$ ` -7 41uns!able4 aO !hen
echo Ldeb http:66ftp"us"debian"org6debian unstable W
main contrib non-freeL TT 6etc6apt6sources"list
remover=L1L
$i
5 'diciona o repositZrio do freen>
3ano=[sed \6i:6d\ 6etc6apt6sources"list W
` sed \656d\ ` grep LproYect63anoti>6unstable6L[
i$ ` -7 41kano4 aO !hen
echo \deb http:66debian"tu-bs"de6proYect63anoti>6unstableW
6 "6\ TT 6etc6apt6sources"list
remover3ano=L1L
$i
5 Instala o freen> a partir do unstable do Bano
apt-get update
apt-get install -t unstable freen>
n>setup --install --setup-nomachine-3e%
5 !emove o unstable e6ou o repositorio do 3ano4 se adicionado:
i$ ` 41remover4 0 414 aO !hen
rm -f 6tmp6sources"list
sed -e F"deb h!!p:B"B"$!p#us#debian#or'B"debian uns!able main con!rib non-
$ree"2F B
"e!c"ap!"sources#lis! : "!mp"sources#lis!
rm -f 6etc6apt6sources"list
cp 6tmp6sources"list 6etc6apt6sources"list
apt-get update
$i
i$ ` 41removerkano4 0 414 aO !hen
rm -f 6tmp6sources"list
sed -e F"deb h!!p:B"B"debian#!u-bs#deB"proAec!B"kano!i,B"uns!ableB" B#B""2F B
"e!c"ap!"sources#lis! : "!mp"sources#lis!
rm -f 6etc6apt6sources"list
cp 6tmp6sources"list 6etc6apt6sources"list
apt-get update
$i
291
FERRAMENTAS TCNICAS
Logo no incio do script so definidas duas variveis, "unstable" e "kano" que so usadas
para verificar se as linhas dos repositrios de que o script precisa esto ou no disponveis no script.
Esta informao usada para decidir se se elas devem ser adicionadas ou no.
Localizar linhas no arquivo pode ser um pouco complexo. Como explicar para o script que
ele deve ignorar a linha caso esteja comentada e como fazer ele ignorar pequenas variaes nas
linhas (como os cdigos de pas nas linhas dos repositrios do Debian)?
Prevendo isso, estou usando um "super pipe", que usa dois comandos do sed para remover as
linhas em branco (sed \6i:6d\), as linhas comentadas (sed \656d\) e em seguida o grep
para filtrar apenas a linha que estou procurando. Para tornar o script mais flexvel, fao a busca por
apenas parte da linha, isso evita que a funo deixe passar uma entrada similar, mas com outro
mirror:
unstable=[sed \6i:6d\ 6etc6apt6sources"list ` sed \656d\ W
` grep Lunstable main contribL[
Caso as variveis estejam vazias (-z), significa que as linhas no existem no arquivo. Neste
caso, entram em ao as funes que coloco em seguida, que adicionam as linhas necessrias e
criam mais duas variveis ("remover" e "removerkano") que so usadas para que o script "lembre"
que fez as alteraes e remova as linhas no final, deixando o arquivo da forma como estava
originalmente.
A funo para remover as linhas usa novamente o sed, desta vez numa sintaxe mais simples,
que simplesmente deleta as linhas (sed -e '/texto/D') anteriormente adicionadas. O sed no capaz
de salvar as alteraes diretamente no arquivo, por isso sempre necessrio salvar num arquivo
temporrio e depois substituir o arquivo original por ele.
Voc pode ver mais dicas e exemplos do uso do sed na pgina do Aurlio: http://aurelio.net/sed/.
292
FERRAMENTAS TCNICAS
Corrigindo erros
Quase todos os programas geram uma sada erro caso algo anormal ocorra. Esta sada erro
pode ser monitorada pelo script, de forma a corrigir problemas comuns de forma automtica, ou
pelo menos, avisar o usurio de que algo de errado ocorreu.
Por exemplo, ao gravar o lilo com sucesso, ele exibir uma mensagem como esta:
5 lilo
'dded Burumin 9
'dded memtest+-
Caso exista algum erro no arquivo de configurao, ele avisa do problema e por segurana
no salva as alteraes:
# lilo
'dded Burumin 9
'dded memtest+-
<atal: <irst sector of 6dev6hda) doesn\t have a valid boot signature
Em alguns casos, um comando que no faz sua parte dentro do script pode causar uma
pequena tragdia. Por exemplo, durante a instalao do Kurumin, exibida a opo de revisar a
configurao do arquivo, visualizando diretamente o arquivo de configurao. Caso alguma coisa d
errado, o lilo simplesmente no gravado e o sistema no d boot depois de instalado.
Uma forma simples de monitorar a sada de erro usar um "2>>" para direcion-la para um
arquivo de texto, que pode ser vasculhado pelo grep em busca de mensagens de erro.
O programa de instalao do Kurumin usa a funo abaixo para detectar erros de gravao
do lilo. Toda funo roda dentro de um while, de forma que repetida at que o problema seja
solucionado.
-hile ` 41lilo'ravado4 Y0 414 aO do
clear
5 !emove o arHuivo tempor^rio usado
rm -f 6tmp6lilo"t>t
lilo -t -r :$! 2TT 6tmp6lilo"t>t
testelilo=[cat 6tmp6lilo"t>t ` grep <atal[
if C -n L:testeliloL EI then
B$=LInstalador do BuruminL
M1=LD>iste um erro no arHuivo de configura?Ao do lilo Hue est^ impedindo a
instala?Ao" ou abrir novamente o arHuivo para Hue vocg possa revis^-lo" 1rocure
por erros de digita?Ao e em ultimo caso e>perimente desfa7er as altera?@es
feitas"WnWn
'o fechar a Yanela do Bedit4 vou tentar gravar o lilo novamente e avisar caso o
erro persista" F erro informado ]:WnWn
:testeliloL
:&I' --bac3title L:B$L --title LKiloL --msgbo> L:M1L 1+ J-
293
FERRAMENTAS TCNICAS
3edit :$!6etc6lilo"conf cT6dev6null
elseI lilogravado=L1LI fi
done
O script comea gravando o lilo, direcionando a sada de erros para um arquivo temporrio.
A varivel "$TR" (usada dentro do script de instalao do Kurumin) contm o diretrio de
instalao do sistema, onde est montada a partio escolhida no incio da instalao.
Com a sada salva no arquivo, o grep usado para verificar se o arquivo contm a palavra
"Fatal", sintoma de que o lilo no foi gravado.
Caso a palavra seja encontrada, executado o restante do script, que exibe a mensagem de
erro e pede que o usurio edite novamente o arquivo de configurao do lilo. Depois disso o script
executado novamente. Quando finalmente o lilo gravado sem erros, a varivel "lilogravado"
assume o valor 1, encerrando o loop do while.
Em alguns casos, voc pode querer que o script salve a sada de texto de uma operao para
verificar erros, mas ao mesmo tempo mostre a sada normalmente na tela. Voc pode fazer isso
usando o comando "tee".
Por exemplo, um erro comum ao tentar instalar programas via apt-get a partir do testing ou
unstable (onde os pacotes so atualizados com muita freqncia) o apt tentar baixar verses
antigas dos pacotes, que no esto mais disponveis. Isso corrigido facilmente rodando o "apt-get
update" que baixa a lista com as verses atuais.
Mas, nosso script pode detectar este erro e se oferecer para rodar o apt-get automaticamente
quando necessrio. Vamos chamar nosso script de "apt-get". Ele vai ser apenas um "wrapper", que
vai repassar os comandos para o apt-get "real" que est na pasta "/usr/bin". Ou seja, quando voc
chamar o "./apt-get install abiword" vai estar usando nosso script, que vai direcionar os parmetros
para o apt-get e em seguida verificar se houve o erro:
5d6bin6sh
rm -f 6tmp6apt
5 D>ecuta o apt-get LrealL4 passando os parqmetros recebidos:
apt-get :1 :2 ` tee 6tmp6apt
5 erifica se algum pacote nAo prde ser bai>ado:
erro1=[cat 6tmp6apt ` grep L)#) (ot <oundL[
if C -n L:erro1L EI then
3dialog --%esno L'lguns pacotes nAo puderam ser bai>ados" Isto significa Hue
provavelmente a lista de pacotes do apt-get est^ desatuali7ada" Mostaria de rodar
o apt-get update para atuali7ar a lista e repetir a instala?Ao8L
resposta=:8
if C L:respostaL = L#L EI then
apt-get update
apt-get :1 :2 ` tee 6tmp6apt
5 erifica novamente4 caso o erro persista e>ibe uma segunda mensagem:
erro1=[cat 6tmpI6apt ` grep L)#) (ot <oundL[
if C -n L:erro1L EI then
294
FERRAMENTAS TCNICAS
3dialog --msgbo> LF erro se repetiu" Isto significa Hue ou o pacote nAo est^ mais
disponfvel4 o servidor est^ fora do ar4 ou sua cone>Ao com a web est^ com
problemas"L
fi
fi
fi
Ao executar um "./apt-get install abiword", usando nosso script num micro com a lista de
pacotes desatualizada, voc ver a mensagem:
A partir da voc poderia ir incluindo mais funes para corrigir outros problemas comuns.
Este tipo de script pode ser muito til em migraes, para aparar as arestas nos programas em que
os usurios estejam tendo dificuldades, tornando o sistema mais inteligente.
Pacotes auto-instalveis
Muitos programas, como o Java distribudo pela Sun, o VMware e vrios games, como o
Quake 3, so distribudos na forma de arquivos auto-executveis. Voc marca a permisso de
execuo para o arquivo, executa, e um instalador (grfico, ou em modo texto) cuida do resto. Estes
pacotes so uma forma genrica de distribuir programas, pois podem ser instalados em qualquer
distribuio, independentemente do sistema de pacotes usado. Eles so o que temos de mais
prximo aos .exe do Windows, dentro do mundo Linux.
Na verdade, estes pacotes so muito simples de criar. Tudo comea com um arquivo
compactado, que contm os arquivos que sero instalados. No comeo deste arquivo vai um shell
script, que se encarrega de descompactar o arquivo, fazer perguntas e executar os comandos
necessrios para concluir a instalao.
Lembre-se de que um shell script sempre executado seqencialmente. No final usamos o
comando "exit", que faz com que o bash termine a execuo do script, mesmo que exista mais texto
adiante. Escrevemos ento um script que ao ser executado remove o comeo do arquivo (o prprio
script), deixando apenas o arquivo compactado e, em seguida, o descompacta e executa os demais
passos necessrios.
Comece reunindo os arquivos do programa, como se fosse criar um pacote .rpm ou .deb.
Imagine, por exemplo, que o programa ser instalado dentro da pasta "/usr/local/programa/" e
colocar alguns arquivos de configurao dentro da pasta "/etc/programa". Naturalmente, o
programa deve ser escrito ou compilado de forma a incluir as bibliotecas e executveis necessrios,
295
FERRAMENTAS TCNICAS
para que possa ser executado em vrias distribuies. No adianta nada criar um pacote genrico se
o programa s funciona no Debian Sarge, por exemplo.
Voc criaria ento uma pasta, contendo a pasta "usr/local/programa" e a pasta
"etc/programa", e colocaria dentro delas os arquivos, mantendo a estrutura que ser copiada para o
sistema.
Compacte o contedo desta pasta usando o tar, como em:
# !ar -7cv$ pro'rama#!ar#'7 usr" e!c"
Agora temos um arquivo .tar.gz que, se descompactado no diretrio raiz, vai copiar os
arquivos do programa para os locais corretos. O prximo passo incluir o script que far a
instalao.
linhas0*
tail -n N:linhas :# ` tar -7>vf - -C 6
ln -s 6usr6local6programa6programa"sh 6usr6bin6programa"sh
3dialog --msgbo> LInstala?Ao conclufda" Use o comando
\programa"sh\L
e,i! &
Ao ser executado, o script precisa remover as 5 primeiras linhas do arquivo antes de
descompact-lo. Para isso, usamos o comando tail. Nosso script tem 5 linhas, por isso dizemos que
o tail deve escrever a partir da sexta linha do arquivo (por isso o "linhas=6" e no 5). Normalmente,
o tail escreveria tudo na tela, por isso usamos o pipe, que direciona a sada (as linhas vlidas do
arquivo compactado) para o tar.
O parmetro "-" faz com que ele descompacte o fluxo de dados que est recebendo atravs
do pipe e o "-C /" faz com que o arquivo seja descompactado no diretrio raiz.
Em seguida temos o resto do script de instalao, com uma linha para criar um link para o
executvel do programa na pasta "/usr/bin/" e um comando para abrir uma mensagem de texto,
avisando que a instalao foi concluda. Esta parte cabe a voc melhorar ;).
O passo final juntar o script e o arquivo compactado, criando o arquivo de instalao, o
que pode ser feito usando o cat:
# ca! scrip!#sh pro'rama#!ar#'7 : pro'rama#sh
296
FERRAMENTAS TCNICAS
Mais exemplos teis
A funo "for" pode ser usada para executar tarefas repetitivas, como por exemplo:
for arHuivo in 9"mp2
do
lame -b -) L:arHuivoL L-)3-:arHuivoL
done
Isto vai gerar uma cpias de todos os arquivos mp3 da pasta atual encodados com bitrate de
64k, gerando arquivos menores, teis para escutar num MP3 Player com pouca memria, por
exemplo.
Se voc precisar formatar de uma vez vrias parties do HD, criadas atravs do cfdisk,
poderia usar:
for part in S142424,4-4JU
do
m3reiserfs 6dev6hda:part
done
Especificamos aqui um conjunto, que inclui os nmeros 1, 2, 3, 4, 6 e 7, correspondentes s
parties que queremos formatar em ReiserFS. Para cada um dos nmeros no conjunto, o for
executa o comando mkreiserfs, formatando cada uma das parties.
Voc pode fazer com que o mesmo comando seja executado vrias vezes, usando uma
varivel incremental com o comando "seq", como em:
for numero in :.seH 1 1#/
do
touch arHuivo:numero"t>t
done
Isto vai fazer com que sejam criados 10 arquivos de texto em branco, numerados de 1 a 10.
O comando cut outro recurso muito usado e til. Ele permite "filtrar" a sada de outros
comandos, de forma a obter apenas a informao que interessa.
Imagine, por exemplo, que voc precisa descobrir o sistema de arquivos que uma
determinada partio do sistema est formatada, de forma a usar a informao mais adiante no
script.
O comando "mount" mostra todas as parties montadas:
: moun!
6dev6hda1 on 6 t%pe reiserfs .rw4noatime/
none on 6proc t%pe proc .rw4nodiratime/
6s%s on 6s%s t%pe s%sfs .rw/
6dev6hda2 on 6home t%pe reiserfs .rw4noatime4notail/
297
FERRAMENTAS TCNICAS
6dev6hda2 on 6home t%pe e>t2 .rw/
6dev6hda- on 6mnt6hda- t%pe reiserfs .rw/
Digamos que voc esteja interessado apenas na partio hda2. O grep permite eliminar as
outras linhas, deixando apenas a referente a ela. Use um pipe ( | ) depois do mount para direcionar a
sada para o grep:
: moun! ? 'rep "dev"hda2
6dev6hda2 on 6home t%pe reiserfs .rw4noatime4notail/
Mas, como queremos apenas o sistema de arquivos em que a partio est formatada,
podemos usar mais um pipe para direcionar a sada para o cut, de forma que ele elimine o resto da
linha. Veja que inclu tambm a funo do sed que elimina espaos repetidos. importante sempre
us-la em funes que usem o cut para procurar por campos especficos, pois muitos comandos
usam espaos de forma no padronizada.
: moun! ? 'rep "dev"hda2 ? sed -e F"_1"2F ? cu! -d 4 4 -$ %
reiserfs
A opo "-f' do cut permite especificar os campos que sero mostrados, enquanto a opo "-
d" permite especificar o separador entre os campos. No exemplo usei um -d " " para especificar que
um espao separa cada campo e que quero apenas o quinto campo, que onde est a informao
sobre o sistema de arquivos. Da enorme sada do mount, sobra apenas "reiserfs" que a informao
que queremos.
Voc pode utilizar qualquer caracter ou string de caracteres como delimitador ao invs do
espao, permitindo localizar campos e expresses dentro de arquivos de configurao.
Usando a opo "-c", o cut exibe apenas os caracteres indicados. Ela bem menos usada que
o "-f", pois na prtica complicado se basear em caracteres ao procurar informaes em arquivos,
mas ela pode ser til em algumas funes, como quando o script fizer uma pergunta e a resposta
fornecida pelo usurio tiver um tamanho limite, como em:
3dialog --inputbo> L&igite seu cZdigo com , caracteresL ` cut -c 1-, T
6tmp6resposta
Aqui, o arquivo de resposta receber apenas os 5 primeiros caracteres da resposta, no
importa o que for digitado.
Mais alguns exemplos teis:
cut -c 5-: Exibe do quinto caracter em diante, independentemente de quantos existam.
cut -d " " -f 5-: Exibe do quinto campo em diante, usando o espao como delimitador.
cut -d "/" -f 1-3: Exibe os trs primeiros campos, usando a barra como delimitador (na
verdade os dois, pois o cut conta a partir de antes da primeira barra). bom para filtrar
localizao de arquivos, por exemplo, ficando apenas com os primeiros campos. Se o texto
original "/mnt/hda6/arquivos/backup", depois de passar pelo cut fica apenas "/mnt/hda6".
cut -c -7: Exibe do comeo at o stimo caracter, o mesmo que "cut -c 1-7".
298
FERRAMENTAS TCNICAS
Uma limitao do cut que ele no possui uma opo para exibir do final da string at um
determinado caracter ou delimitador (apenas do comeo at certo ponto), mas possvel burlar isso
usando outro comando, o "rev", que inverte a ordem dos caracteres. Voc pode us-lo para inverter
a string, procurar a partir do incio usando o cut e depois inverter de novo. Este um exemplo de
uso, um script que escrevi para baixar arquivos .torrent:
'!a1=[3dialog --getopenfilename L6home6:USD!L L9"torrent `'rHuivos "torrentL[
'!a2=[echo :arH ` sed -r \s6 6WWW 6g\[
A primeira linha abre uma janela do kdialog, pedindo o arquivo .torrent a ser baixado. Por
causa do "|Arquivos .torrent" a janela s mostra os arquivos com a extenso, o que d um efeito
mais profissional e ajuda e evitar enganos. A segunda linha substitui todos os espaos no nome do
arquivo por "\ "; ou seja, adiciona as barras invertidas, permitindo que usemos os arquivos
diretamente no comando do bittorrent, sem precisar usar aspas.
echo :'!a2 T 6tmp6bt1
rev 6tmp6bt1 ` cut -f 2- -d L6L T 6tmp6bt2
1'S$'=[rev 6tmp6bt2[
rm -f 6tmp6bt1 6tmp6bt2
Esta a parte do script que usa o cut e o rev. A varivel "$PASTA", precisa conter apenas a
pasta, sem o nome do arquivo. Como no sei quantos caracteres tem o nome do arquivo, nem posso
filtrar a partir do final usando o cut, salvo o contedo da varivel com o arquivo num temporrio,
inverto a ordem dos caracteres usando o rev, removo o nome do arquivo usando o sed, desta vez
procurando a partir do comeo e usando a barra como delimitador e, no final, inverto novamente o
contedo do arquivo usando o rev.
Se o arquivo original era "/home/morimoto/ANIMES/[Lunar] Bleach - 62 .avi.torrent", no
final sobra apenas "/home/morimoto/ANIMES/", que a pasta onde o arquivo ser baixado.
No final, usada mais uma janela do kdialog, desta vez para perguntar a taxa de upload, e as
trs variveis so usadas para montar o comando que baixa o arquivo. Note que o comando
executado dentro de uma janela do Xterm, de forma que basta fechar a janela quando o download
for concludo.
U1KF'&=[3dialog --inputbo> L$a>a ma>ima de uploadL +[
>term -e Lcd :1'S$'I btdownloadcurses --ma>GuploadGrate :U1KF'& :'!a2L c
Vamos a mais um exemplo. Imagine que voc precisa de um script para listar os usurios
cadastrados no sistema. Voc poderia usar o sed para filtrar o contedo do arquivo "/etc/shadow", o
arquivo que contm a lista de usurios e senhas do sistema.
Um exemplo (reduzido) do contedo deste arquivo seria:
# cat /etc/shadow
root:!!1PD1%!$fDBo:12+)#:#:*****:J:::
daemon:9:11),2:#:*****:J:::
bin:9:11),2:#:*****:J:::
pro>%:9:11),2:#:*****:J:::
3urumin:gMBa!<MpR>+-c:12+)#:#:*****:J:::
299
FERRAMENTAS TCNICAS
saned:d:12J--:#:*****:J:::
Veja que a lista inclui tambm os usurios ocultos do sistema, usados por programas e
servios, que no interessam neste caso. As linhas referentes a estes usurios ocultos possuem
sempre um "!" ou um "*" depois do primeiro ":". Podemos usar o sed para filtrar o arquivo, de
forma que sobrem apenas as linhas dos usurios vlidos (no caso root e kurumin), usando a opo
"D" para deletar as linhas que contenham "!" ou "*".
Um exemplo de script para fazer isso seria:
5 !emove as linhas com L9L
sed -e \W696&\ 6etc6shadow T 6tmp6usuarios1
5 !emove as linhas com LdL
sed -e \W6d6&\ 6tmp6usuarios1 T 6tmp6usuarios2
5 !emove o restante da linha4 dei>ando apenas o nome do usu^rio"
5 .o cut mostra apenas o primeiro campo da linha4 antes do L:L
cat 6tmp6usuarios2 ` cut -d: -f1 TT 6tmp6usuarios
5 'Hui temos duas vari^veis com os nomes dos usu^rios4 Hue podem ser
5 usadas de acordo com a situa?Ao"
5 ' primeira4 LusuariosL mant]m as Huebras de linha4 com um usu^rio por
5 linha enHuanto a LuserlistL cont]m todos os usu^rios na mesma linha"
usuarios=[cat 6tmp6usuarios[
userlist=[echo :usuarios[
5 !emove os arHuivos tempor^rios
rm -f 6tmp6usuarios 6tmp6usuarios1 6tmp6usuarios2
5 Uma mensagem de aviso:
3dialog --msgbo> LFs usu^rios atualmente cadastrados no sistema sAo:
:userlistL
Ao filtrar a sada de comandos que incluam espaos repetidos, use o comando do sed que remove
espaos duplicados, como nesta funo que diz o nmero de blocos da partio "/dev/hda1",
filtrando a sada do comando "fdisk -l":
# $disk -l "dev"hda ? 'rep hda1 ? sed -r Fs" 6" "'F ? cu! -d 4 4 -
$ %
Sempre que precisar fazer operaes aritmticas dentro de um script, use o comando "bc".
Ele uma calculadora de modo texto, que permite realizar todo tipo de operaes.
Para multiplicar o nmero dentro da varivel $numero por trs, o comando seria:
: echo 41numero = /4 ? bc
Para dividir $numero por 4:
: echo 41numero " 34 ? bc
Por default, o bc trabalha apenas com nmeros inteiros, sempre arredondando os valores das
respostas. Para adicionar suporte a casas decimais, ative o matlib, adicionando a opo "-l", como
em:
300
FERRAMENTAS TCNICAS
: echo 41numero " 3#%*4 ? bc -l
O bc oferece um nmero assustador de opes, se voc quiser ir alm das quatro operaes
bsicas, d uma olhada no "man bc".
Outra forma de realizar operaes aritmticas usar o comando "let". Ele no to
poderoso quanto o bc (trabalha apenas com nmeros inteiros e as operaes bsicas), mas mais
simples de usar e por isso til para realizar operaes simples.
Para aumentar em 1 o valor de uma varivel numrica (no caso de um contador, por exemplo):
1 le! 4numero0numero614
Para multiplicar o valor por dois:
1 le! 4numero0numero=24
O comando "import" pode ser usado para tirar screenshots da tela via linha de comando ou
via script. Ele pode ser usado, por exemplo, em situaes onde voc precisar ver o que est
acontecendo na tela para fins de suporte. Para tirar um screenshot, o comando simplesmente:
# impor! --indo- roo! screen#pn'
Para que o comando funcione, necessrio que ele seja executado dentro da seo grfica
desejada. Um script que ficasse tirando screenshots peridicos da tela, por exemplo, precisaria ser
iniciado a partir da pasta ".kde/Autostart" dentro do home do usurio, e no a partir do
"/etc/rc.d/rc.local", por exemplo.
Mais um problema no caso do script para tirar screenshots que ele precisaria usar nomes
de arquivos com nome diferente para cada screenshot, incluindo informaes sobre a data em que
foram tirados. Isto pode ser feito usando o comando "date".
Em seu formato mais simples, o comando date retorna a data no formato: "Ter Fev 21
13:01:06 BRT 2006". Mas, possvel configur-lo para devolver a data num formato mais propcio
para ser usada em nomes de arquivos, como "2006-02-21-13.01" (neste caso o comando seria "date
+%Y-%m-%d-%H.%M"), atribuir o valor contendo a data corrente a uma varivel e us-la no nome
do arquivo. Um script destinado a tirar um screenshot da tela de 1 em 1 minuto, poderia conter:
&'$'=[date N_V-_m-_d-_P"_M[
import -window root screen-:&'$'"png
sleep -#
Os screenshots poderiam ser salvos num compartilhamento do servidor, montado em NFS,
por exemplo, e removidos no final do dia para no ocuparem muito espao.
Um problema clssico nos scripts com relao aos arquivos temporrios. Ao usar nomes
fixos, necessrio que voc sempre remova ou verifique se os arquivos j no existem no comeo
do script. Existe ainda uma pequena possibilidade de algum programa malicioso tentar modificar os
arquivos temporrios, de forma a alterar o comportamento do seu script.
301
FERRAMENTAS TCNICAS
Uma forma de solucionar ambos os programas usar arquivos temporrios com nomes
aleatrios, criados usando o comando "mktemp". No incio do script, crie uma varivel contendo
um arquivo criado atravs dele:
$M1=[m3temp 6tmp6arH";;;;;;[
Os "XXXXXX" sero substitudos por caracteres aleatrios, fazendo com que o nome do
arquivo seja algo como "/tmp/rarq.iutCkB". Para salvar informaes dentro do arquivo, use sempre a
vari^vel L$M1L4 como em:
cat 6etc6fstab ` grep 6dev6hda1 TT :$M1
No se esquea de remover o temporrio no final do script, usando um "rm -f $TMP" para
evitar deixar lixo para trs.
Criando interfaces no Kommander
O Kommander permite criar interfaces grficas para shell scripts, usando a biblioteca Qt do
KDE. Ele dividido em duas partes: o "kmdr-editor" o editor que permite criar as interfaces,
enquanto o "kmdr-executor" executa os arquivos gerados por ele.
Ao instalar o pacote do Kommander, voc obtm os dois componentes. Nas distribuies
derivadas do Debian voc pode instal-lo com um "apt-get install kommander". Pacotes rpm para
vrias distribuies podem ser encontrados no http://www.rpmfind.net/.
Em ltimo caso, voc pode baixar uma verso genrica no:
http://kde-apps.org/content/show.php?content=12865
A interface do kmdr-editor lembra um pouco a do VB ou Delphi, mas mais simples por
conter muito menos funes. Lembre-se de que o objetivo do Kommander desenvolver interfaces
para scripts, ele prov relativamente poucas funes por si s.
Ao criar um novo projeto, no "Arquivo > Novo", voc tem a opo de criar um dilogo ou
um assistente. Um dilogo cria uma interface simples, com botes e abas, do tipo onde voc escolhe
entre um conjunto de opes e clica no "Ok" para acionar o script. J o assistente permite criar uma
seqncia de telas interligadas, til para criar programas de instalao, por exemplo.
Os arquivos gerados no kmdr-editor no so binrios, mas sim arquivos em XML, que so
interpretados e executados pelo kmdr-executor. Estes arquivos contm os "fontes" da interface. No
possvel criar diretamente um binrio atravs do Kommander, sempre necessrio ter o kmdr-
executor para executar os arquivos.
Voc pode ver os fontes do Painel de Controle do Kurumin, junto com outros painis que
desenvolvi usando o Kommander, dentro da pasta "/etc/Painel" no Kurumin.
302
FERRAMENTAS TCNICAS
Vamos a um exemplo rpido. Que tal criar uma interface mais amigvel para aquele script
para gravar programas de TV que havamos criado usando o kdialog? Usando o kommander
poderamos criar uma interface muito mais elaborada e profissional para ele.
Abra o kmdr-editor e crie um dilogo:
Vou criar um script simples, com um conjunto de opes para escolher o canal, tempo de
gravao e o arquivo que ser criado, que armazenaro as informaes em um conjunto de variveis
e um boto que executa o script principal, montando o comando gigante do mencoder. Para
dificultar um pouco, vou acrescentar mais uma opo, que permite escolher a qualidade da
gravao.
Para as opes de escolha do canal e tempo de gravao, vou usar o widget "Line Edit", que
cria uma linha editvel. Vou usar dois, um para cada opo, junto com dois "TextLabel", duas
legendas simples de texto.
Voc pode escolher o texto padro das opes dando um duplo clique sobre elas. Na janela
de propriedades, voc pode configurar opes como o tipo e tamanho das fontes, cores, alinhamento
do texto, etc. Estas opes mudam de acordo com o widget usado.
Por enquanto no estou me preocupando com o visual, apenas em adicionar as opes.
mais fcil se preocupar primeiro com a parte tcnica e deixar para cuidar da parte visual depois que
o script estiver funcionando.
303
FERRAMENTAS TCNICAS
O texto dentro das duas caixas precisa ser armazenado em variveis para que possamos
utiliz-los mais tarde dentro do script principal. Para que isso acontea, clique com o boto direito
sobre cada uma das caixas e acesse a opo "Edit Text Associations". No campo, digite
"@widgetText".
Isso faz com que o kommander crie uma varivel contendo o texto digitado dentro da caixa.
Esta varivel tem o mesmo nome do widget, nome este que voc escolhe nas propriedades. Para
facilitar a minha vida depois, vou nomear as duas caixas como "canal" e tempo", indicando
exatamente o que ambas fazem:
304
FERRAMENTAS TCNICAS
preciso incluir tambm um widget para salvar o arquivo. O Kommander oferece uma
funo bem similar ao "--getsavefilename" do kdialog, o widget "File Selector". Adicione um ao
programa, como fizemos com as duas caixas de texto.
O File Selector pode ser usado para abrir um arquivo, escolher uma pasta ou salvar um
arquivo. Precisamos indicar a funo do nosso nas propriedades. Para isso, configure a opo
"selectionType" como "Save" (indicando que a janela servir para salvar um arquivo).
Veja que aproveitei tambm para configurar a opo "selectionFilter" como "*.avi *.mpg
*.wmf", que faz com que a janela do gerenciador de arquivos mostre apenas arquivos de vdeo, com
as trs extenses especificadas e salve os arquivos com a extenso .avi, mesmo que o usurio no
especifique a extenso. A opo "selectionCaption" permite escolher o ttulo da janela para salvar.
No se esquea de configurar a opo "Edit Text Associations" do widget como
"@widgetTex" como fizemos com as duas caixas de texto e escolher um nome nas propriedades.
No meu caso deixei o nome como "arquivo".
Voc pode ver um preview da interface que est editando, clicando no "Visualizao >
Preview Form". Isto perfeito para ir testando cada opo conforme for adicionando, sem deixar
que os erros se acumulem.
305
FERRAMENTAS TCNICAS
Falta incluir a opo para escolher a qualidade de gravao, neste caso dois parmetros que
podem ser especificados na linha de comando do mencoder. Vou criar dois botes separados, um
para escolher a resoluo do vdeo (640x480 ou 320x240) e outro para escolher o bitrate, que
determina a qualidade e tamanho final do arquivo.
No caso da resoluo, vou oferecer apenas duas opes, por isso uso o widget
"RadioButton", criando dois botes. Estes botes precisam ser exclusivos, ou seja, apenas um deles
pode ser selecionado de cada vez. Para isso, vou precisar coloc-los dentro de um "ButtonGroup",
outro widget que uma espcie de moldura, que permite agrupar vrios botes de forma que eles se
comportem da forma desejada.
Isto vai envolver um nmero maior de passos. Primeiro crie o ButtonGroup do tamanho
desejado e coloque dois botes dentro dele. Nas propriedades, escolha nomes para os trs. No meu
caso, coloquei "resolucao" (para o ButtonGroup), "resolucao1" e "resolucao2" para os botes.
Nas propriedades do ButtonGroup, configure a opo "RadioButtonExclusive" como
"Verdadeiro". Isso faz com que apenas um dos botes dentro dele possa ser marcado de cada vez.
Dentro das propriedades do primeiro boto, deixe a opo "Checked" como "Verdadeiro".
Isso faz com que ele fique marcado por padro.
Ao desenvolver uma interface, importante fazer com que todas as opes sempre tenham
algum valor padro. Isso diminui a possibilidade de erros por parte do usurio, j que o script vai
funcionar mesmo que ele no configure todas as opes.
Falta agora configurar o "Edit Text Associations" dos dois botes, para armazenar o
contedo da varivel que ser criada caso cada um deles seja pressionado. Desta vez no vou usar o
"@widgetText" pois os botes no contm texto algum. Vou indicar manualmente um valor padro
para cada um dos dois botes.
Um deles conter o valor "width=640:height=480" e o outro o valor
"width=320:height=240", que so as opes que podero ser includas na linha de comando do
mencoder que ser criada ao executar o programa. Lembre-se de que apenas um dos dois botes
pode ser marcado de cada vez, por isso apenas uma das duas opes ser usada.
306
FERRAMENTAS TCNICAS
Os dois botes esto dentro do ButtonGroup e apenas um deles pode ser marcado de cada
vez. O valor da varivel do ButtonGroup ("@resolucao" no meu caso) passa a ser o valor padro do
boto que for selecionado. Ou seja, se for marcado o primeiro boto, a varivel "@resolucao"
receber o valor "width=640:height=480".
Para que isso funcione, preciso configurar o "Edit Text Associations" do ButtonGroup
como "@widgetTex".
Na hora de usar a varivel, uso a varivel "@resolucao", correspondente ao ButtonGroup e
no as variveis dos botes.
Esta a moral da histria de usar o ButtonGroup ao invs de botes isolados. Voc pode
colocar vrios botes dentro dele, fazer com que apenas um boto possa ser clicado de cada vez,
determinar um valor padro para cada boto e fazer com que a varivel do ButtonGroup contenha
apenas o valor do boto que foi selecionado.
Para escolher o bitrate que ser usado ao gerar o arquivo, vou usar um "SpinBoxInt", um
widget que cria uma caixa onde voc pode escolher um valor numrico usando duas setas. Nas
propriedades, voc escolhe um valor mximo, um valor mnimo, um valor padro e o "lineStep",
que determina quanto o nmero aumenta ou diminui cada vez que um dos botes pressionado.
No "Edit Text Associations" do SpinBox, coloque "@widgetTex", como sempre. Isso faz
com que a varivel contenha o nmero escolhido. No se esquea de escolher um nome para ele nas
propriedades. No meu caso escolhi "bitrate".
Para melhorar o visual, coloquei o SpinBox dentro de um "GroupBox", que cria um
quadrado, similar ao "ButtonGroup", mas com funo puramente esttica.
307
FERRAMENTAS TCNICAS
Como disse acima, o bitrate determina a qualidade do vdeo gerado, especificando o nmero
de kbits que sero reservados para cada segundo de vdeo. Um bitrate de 1500 kbits gera arquivos
com cerca de 11 MB por minuto de vdeo, quase 700 MB por hora. O tamanho do arquivo aumenta
ou diminui proporcionalmente de acordo com o bitrate. Um bitrate muito alto resultaria num
arquivo gigantesco e um muito baixo resultaria num arquivo tosco, com uma qualidade muito ruim.
Por isso usamos o SpinboxInt para determinar uma margem de valores razoveis.
Voc poderia adicionar mais um SpinBoxInt para oferecer tambm a opo de alterar o
bitrate do som, mas no meu caso no vou incluir isto, pois o udio comprimido em MP3 representa
uma percentagem pequena do tamanho do arquivo.
Depois dessa trabalheira toda, temos as variveis: @canal, @tempo, @arquivo,
@resolucao e @bitrate, que usaremos para gerar a linha de comando do mencoder.
Precisamos agora de um gatilho, um boto que executa o comando final. Vamos usar um
simples "ExecButton".
Dentro do "Edit Text Associations" (do boto), vo as linhas:
verificador=LXarHuivoL
if C -7 L:verificadorL EI then
3dialog --msgbo> Locg esHueceu de indicar o arHuivo onde o vfdeo ser^ salvo I-/L
e>it #
fi
3dialog --title LMravandoL --passivepopup LMravando o canal :var1
por: Xtempo horas
no arHuivo: XarHuivo
<eche a Yanela de terminal para abortarL - c
>term -e Lmencoder tv:66 -tv
driver=v)l2:input=#:normid=):channel=Xcanal:chanlist=us-
bcast:Xresolucao:device=6dev6video#:adevice=6dev6dsp#:audiorate=)+###:forceaudio:f
orcechan=2:buffersi7e=-) -Huiet -oac mp2lame -lameopts preset=medium -ovc lavc
-lavcopts vcodec=mpeg):vbitrate=Xbitrate:3e%int=122 -vop pp=lb -endpos Xtempo -o
XarHuivo L
3dialog --title LMravar-$L --passivepopup LF3d
' grava?Ao terminou"L , c
Veja que so os mesmos comandos que usamos no primeiro script, foi preciso apenas
adaptar o uso das variveis. Num script em shell normal as variveis so identificadas por um dlar,
"$", enquanto as variveis criadas atravs da interface no Kommander so identificadas por uma
arroba, "@".
308
FERRAMENTAS TCNICAS
A funo que acrescentei no incio do arquivo verifica se foi escolhido o arquivo onde salvar
o arquivo, a varivel "@arquivo" do Kommander. As funes condicionais do bash (if, case, etc.)
em algumas situaes no entendem as variveis do Kommander diretamente, por isso, por
segurana, criei primeiro a varivel "verificador", com o contedo da varivel "@arquivo" do
Kommander.
O "-z" um comparador, significa " nula", ou seja, ela serve para verificar se a varivel est
vazia. Caso esteja, exibida uma mensagem na tela e o script fechado, graas ao "exit 0". Como o
script executado pela janela principal do Kommander, o script fecha, mas a janela principal
continua aberta, permitindo que o usurio corrija o erro e execute novamente.
Voc pode usar funes do kdialog, funes lgicas e outros comandos que usaria num
script tradicional. O Kommander apenas acrescenta algumas possibilidades novas.
Depois de revisar tudo, voc pode finalmente testar o programa, executando-o no kmdr-executor:
: kmdr-e,ecu!or 'ravar-!v#kmdr
A segunda parte do trabalho envolve dar uma melhorada no aspecto visual. Voc pode
acrescentar imagens e cones usando o widget "PixmapLabel".
Os cones do sistema vo por padro dentro da pasta "/usr/share/icons", e so um bom
ponto de partida. Voc pode usar tambm imagens e cones personalizados, salvos em .png. Todas
as imagens usadas so salvas como parte do arquivo, como se fosse um documento do OpenOffice.
Voc no precisa se preocupar em distribuir as imagens junto com o programa, a nica dependncia
o kmdr-executor, junto com os comandos usados dentro do script.
309
FERRAMENTAS TCNICAS
Uma dica que o Kommander sempre degrada a qualidade das imagens com mais de 256
cores. Para melhor qualidade, prefira usar imagens com 256 cores, com paleta indexada (que podem
ser tratadas usando o Gimp).
A maioria dos widgets, como as etiquetas de texto, caixas, etc., possuem vrias opes de
cores e fontes dentro das propriedades, que permitem fazer um bom trabalho. Esta a verso inicial
do script, que desenvolvi para uso no Kurumin:

Outro recurso interessante do Kommander e vem sendo melhorado rapidamente nas novas
verses so as conexes. Elas permitem adicionar elementos dinmicos na interface, um textLabel
cujo contedo muda quando voc clica num boto ou mostra informaes sobre um arquivo
escolhido num File Selector e assim por diante.
Para usar este recurso, certifique-se de ter instalada uma verso recente do Kommander, de
preferncia da 1.2 em diante, pois antes disso o suporte ainda era incipiente e mudanas eram feitas
a cada nova verso.
Para seguir este exemplo, voc precisa estar usando pelo menos o Kommander 1.0 final. Nas
verses antigas o sistema de conexes ainda no estava terminado, muitas opes ainda no
existiam.
Vamos usar algumas conexes para criar um editor de imagens primitivo. Comece criando
um novo projeto e desenhe uma interface contendo um FileSelector, um textLabel, um PixmapLabel
e quatro botes que usaremos para adicionar algumas funes de edio. Por enquanto no inclu
310
FERRAMENTAS TCNICAS
cdigo algum, apenas desenhei os widgets:
O objetivo fazer com que o arquivo de imagem escolhido no FileSelector seja exibido no
PixmapLabel, ao mesmo tempo em que a localizao e nomes completos do arquivo so mostrados
no textLabel. As duas coisas atualizadas automaticamente, sem que seja necessrio pressionar
nenhum boto.
Os botes vo conter mais algumas funes estticas para deletar a imagem, girar e limpar
os dois campos (novamente usando conexes).
Vamos comear fazendo com que a imagem seja exibida no PixmapLabel. Procure a
"Ferramenta de conexo" na interface principal. Clique primeiro sobre o FileSelector e arraste at
o PixmapLabel. Isso cria uma conexo entre eles, indicada pelos dois quadrados rosa que aparecem.
Na janela de propriedades que ser aberta, voc ver duas janelas, uma com os sinais
disponveis no FileSelector e do outro lado as propriedades do PixmapLabel que podem ser
alteradas quando o sinal selecionado emitido.
Marque a opo "widgetTextChanged(const QString)" do lado do FileSelector e a opo
"setWidgetText(const QString)" do lado do PixmapLabel. Clique no "Conectar" para efetivar a
conexo:
311
FERRAMENTAS TCNICAS
O que fizemos aqui foi especificar que quando o texto dentro do FileSelector for alterado (ou
seja, quando for escolhido algum arquivo) o contedo do PixmapLabel muda, exibindo o contedo
do arquivo. Se fosse uma caixa de texto, seria mostrado o contedo do arquivo na forma de texto;
mas, como estamos usando uma caixa de imagem, ser mostrado um preview da imagem.
Crie agora uma nova conexo, ligando o FileSelector e o textLabel. Na janela de
propriedades, marque a opo "widgetTextChanged(const QString)" para o FileSelector (o mesmo
do passo anterior) e a opo "Populate()" para o textLabel.
312
FERRAMENTAS TCNICAS
O textLabel est originalmente vazio, sem contedo algum. A funo Populate vai "popul-
lo" com o resultado de um comando que definiremos no passo a seguir. Isso disparado sempre que
o contedo do FileSelector muda. Sempre que escolhido um arquivo diferente, o comando
executado novamente e o contedo do textLabel muda.
Para definir o comando, clique com o boto direito sobre o textLabel e acesse a opo
"Editar texto do Kommander". Dentro da janela, acesse a opo "Texto para: Population" que
est no canto superior direito.
313
FERRAMENTAS TCNICAS
O comando comea com o "@exec", com o comando propriamente dito entre parnteses.
Dentro dos parnteses voc pode separar uma seqncia de comandos por ponto-e-vrgula, usar o
pipe e outros componentes de um shell script normal.
Neste exemplo, estou usando o comando:
Xe>ec.identif% LXarHuivo"te>tL ` cut -d L L -f 2-1#/
O identify um comando de texto que exibe as propriedades da imagem, como formato e
resoluo. Nas propriedades do meu FileSelector mudei o nome para "arquivo", logo o
"@arquivo.text" se refere ao contedo do FileSelector, ou seja, o nome do arquivo que foi escolhido.
O "| cut -d " " -f 2-10" opcional, ele serve apenas para "limpar" a sada do identify, retirando o
nome do arquivo e deixando apenas as propriedades da imagem.
Uma observao importante que o Kommander no muito bom em executar scripts
complexos desta forma. Em muitos casos o Kommander entra em loop ao clicar no boto, ou retorna
um valor inesperado, mesmo que que a funo usada funcione perfeitamente se executada no
terminal.
Embora este seja mais um fator que vem melhorando nas novas verses, aconselhvel que
sempre que precisar incluir qualquer coisa mais elaborada, principalmente ao usar muitos pipes e
redirecionamentos, prefira criar um script e cham-lo dentro da funo do Kommander, ao invs de
tentar colocar todos os comandos diretamente dentro dos parnteses.
Por exemplo, num dos meus scripts uso uma funo para popular um campo de texto com
uma lista dos compartilhamentos NFS ativos. Isto feito lendo e filtrando o contedo do arquivo
"/etc/exports", de forma que apenas as linhas referentes aos compartilhamentos sejam exibidas no
campo. A atualizao feita ao clicar sobre um boto na interface.
Se coloco algo como: @exec(sed '/^$/d' /etc/exports | sed '/#/d') ou mesmo: @exec(cat
/etc/exports | sed '/^$/d' | sed '/#/d') como funo para o boto, o Kommander entra em loop ao
clicar sobre ele e o campo com os compartilhamentos ativos nem chega a ser atualizado.
Para solucionar isso, criei um pequeno script com os comandos necessrios e o executo
dentro do boto. Embora os comandos executados sejam os mesmos, o boto passa a funcionar
perfeitamente, pois o Kommander executa o script dentro de um shell separado e apenas "popula" o
campo de texto com o resultado do comando. Ou seja, quem executa os comandos neste caso o
bash, no o Kommander.
O script (salvo como /etc/Painel/servidor-nfs.sh) fica:
5d6bin6sh
sed \6i:6d\ 6etc6e>ports ` sed \656d\ T 6tmp63e>ports
cat 6tmp63e>ports
E a funo dentro das propriedades do boto, na interface do Kommander, fica:
Xe>ec.6etc61ainel6servidor-nfs"sh/
314
FERRAMENTAS TCNICAS
Voltando ao exemplo original, salve o arquivo e clique no "Executar > Executar dilogo"
para ver um preview dele funcionando. Veja que ao escolher um arquivo de imagem no FileSelector
a imagem realmente exibida no PixmapLabel, enquanto o textLabel mostra as informaes
fornecidas pelo identify:
Apesar disso, ainda existe um pequeno bug: est sendo exibido apenas um pedao da
imagem. Para que seja exibido um preview reduzido da imagem, acesse as propriedades do
PixmapLabel e mude a opo "scaledContents" para verdadeiro (true). A partir da a imagem
passa a ser redimensionada corretamente.
Falta agora s dar funes aos botes de edio, que a parte mais fcil.
Dentro do boto "Deletar a imagem" (boto direito > Editor texto do Kommander) inclua a funo:
3dialog --%esno L$em certe7a8L
retval=:8
if C L:retvalL = L#L EI then
rm -f XarHuivo"te>t
fi
315
FERRAMENTAS TCNICAS
Lembre-se de que a varivel "@arquivo.text" contm o caminho completo para o arquivo.
Usando "rm -f @arquivo.text" no script, deletamos o arquivo, e no o contedo da varivel.
Nos botes Girar no sentido horrio e girar no sentido anti-horrio, inclua (respectivamente)
as funes:
Ypegorient N*# XarHuivo"te>t
Ypegorient N2J# XarHuivo"te>t
O jpegorient mais um comando de edio de imagem em modo texto, que faz parte do
pacote ImageMagik. Ele permite justamente girar a imagem no sentido desejado. No muito
prtico para usar no dia-a-dia, mas muito usado em scripts.
O ltimo boto, "Limpar", vai servir apenas para limpar o contedo do PixmapLabel e do
textLabel. Para isso, crie uma conexo entre o boto e o PixmapLabel. Marque de um lado a opo
"Pressed" e do outro a opo "clear()". Faa o mesmo entre ele e o textLabel.

Nosso programinha est quase pronto, existe apenas um ltimo "bug": ao clicar nos botes
de girar, a imagem alterada, mas no automaticamente atualizada na janela do programa.
Se voc for perfeccionista e quiser resolver isso, crie uma conexo entre cada um dos dois
botes de girar e o PixmapLabel. Marque a opo "Pressed()" para o boto e "Populate()" para o
PixmapLabel.
316
FERRAMENTAS TCNICAS
Acesse agora as propriedades do PixmapLabel e, dentro do "Texto para: Population",
coloque "@arquivo.text". Isso far com que cada vez que um dos dois botes for pressionado, a
nova conexo dispare uma atualizao da imagem:
Assim como no exemplo para gravar programas de TV, o Kommander pode ser usado para
criar interfaces para diversos programas que originalmente so acessveis apenas via linha de
comando. Mais um exemplo o "Kurumin-synergy", a interface para o Synergy que comentei no
segundo captulo.
Antes de continuar lendo, eu recomendo que releia o tpico do Synergy e teste o programa,
j que para escrever uma interface necessrio, antes de mais nada, conhecer bem o programa alvo.
Em primeiro lugar, o Synergy pode ser usado como servidor (o micro principal, que controla
os demais) ou como cliente (o micro que controlado). A idia que o script possa ser usado nas
duas situaes, por isso ele foi criado com duas abas independentes.
317
FERRAMENTAS TCNICAS
A aba do servidor de longe a mais complexa. Ela possui 4 checkboxes, que podem ser
acionadas de forma independente, nomeadas como "cima", "baixo", "esquerda" e "direita". Para
cada checkbox, existem dois Line Edits (oito no total), nomeados como "cima_ip", "cima_nome",
"baixo_nome", "nome_ip", "esquerda_nome", "esquerda_ip", "direita_nome" e "direita_ip". Existe
ainda um ckeckbox extra, chamado "desk_icon", que responde pela funo "Criar atalho no
desktop".
Nas propriedades de cada um dos 4 checkboxes, certifique-se que a opo "Texto para:
checked" est com o valor "1", j que nisso que o script vai se basear para decidir quais conexes
devem ser ativadas. Por segurana, atribu tambm o valor "0" para a opo "unchecked" de cada
um.
318
FERRAMENTAS TCNICAS
Esta parte de criao da interface relativamente simples, embora trabalhosa. O principal
nesta fase checar se todos os nomes e propriedades dos campos esto corretos, j que num painel
com vrios campos fcil se esquecer de algum.
O principal vai dentro do boto "Ativar o Synergy", que contm o script que verifica o status
de cada um dos campos, gera a configurao (salva no arquivo "/home/$USER/.synergy.conf") e
ativa o servidor Synergy com as opes selecionadas. Baixe o script completo no
http://www.guiadohardware.net/kurumin/painel/kurumin-synergy.kmdr.
Este script um pouco longo, ento vamos por partes.
Na configurao do Synergy preciso incluir o nome do servidor. No coloquei isso como
mais um campo na janela principal, pois esta uma informao fcil de descobrir atravs do
comando "hostname". Na primeira linha do script, crio uma varivel "server" contendo o resultado
do comando, ou seja, o nome da mquina, como em "semprao". As linhas seguintes fecham o
Synergy caso aberto (ele no pode ser aberto duas vezes), deleta o arquivo de configurao, caso
exista (j que o script cria um novo) e, s para garantir, cria um novo arquivo vazio usando o
comando touch.
server=[hostname[
3illall s%nerg%s
rm -f 6home6:USD!6"s%nerg%"conf
touch 6home6:USD!6"s%nerg%"conf
Em seguida, comeamos a escrever o arquivo, iniciando pela seo "screens", que contm os
nomes do servidor e de cada um dos clientes que podero se conectar a ele. O nome do servidor est
dentro da varivel "$server" e os nomes de cada cliente foram escritos nos campos "cima_nome",
319
FERRAMENTAS TCNICAS
"baixo_nome", "esquerda_nome" e "direita_nome".
O arquivo deve conter apenas os campos que foram selecionados. Se foram marcados apenas
os checkboxes "esquerda" e "direita", ele deve incluir somente os campos "esquerda_nome" e
"direita_nome", ignorando os demais.
Uma forma simples de fazer isso criar um if para cada um dos 4 checkboxes, incluindo
cada um dos campos apenas caso ele esteja com o valor "1" (sintoma de que est selecionado). O
script fica ento:
echo \section: screens\ TT 6home6:USD!6"s%nerg%"conf
right=LXdireitaL
if C L:rightL = L1L EI then
rightGnome=LXdireitaGnome"te>tLI rightGip=LXdireitaGip"te>tL
echo L:rightGnome:L TT 6home6:USD!6"s%nerg%"confI fi
left=LXesHuerdaL
if C L:leftL = L1L EI then
leftGnome=LXesHuerdaGnome"te>tLI leftGip=LXesHuerdaGip"te>tL
echo L:leftGnome:L TT 6home6:USD!6"s%nerg%"confI fi
up=LXcimaL
if C L:upL = L1L EI then
upGnome=LXcimaGnome"te>tLI upGip=LXcimaGip"te>tL
echo L:upGnome:L TT 6home6:USD!6"s%nerg%"confI fi
down=LXbai>oL
if C L:downL = L1L EI then
downGnome=LXbai>oGnome"te>tLI downGip=LXbai>oGip"te>tL
echo L:downGnome:L TT 6home6:USD!6"s%nerg%"confI fi
echo L:server:L TT 6home6:USD!6"s%nerg%"conf
echo LendL TT 6home6:USD!6"s%nerg%"conf
echo LL TT 6home6:USD!6"s%nerg%"conf
Veja que aproveitei para criar uma srie de variveis, armazenando os textos dos campos.
Este passo no realmente necessrio, pois voc pode continuar usando diretamente as variveis do
Kommander.
O resultado deste trecho do script ser algo como:
section: screens
toshiba:
fedora:
semprao:
end
O prximo passo acrescentar a seo "links" dentro do script, que contm a posio de
cada um dos clientes em relao ao servidor e a posio do prprio servidor em relao a cada um.
320
FERRAMENTAS TCNICAS
Vamos comear com a seo referente ao servidor. Note que o script inclui apenas os
clientes que esto realmente ativados, novamente checando se o valor de cada um dos 4 checkboxes
"1":
echo Lsection: lin3sL TT 6home6:USD!6"s%nerg%"conf
echo L:server:L TT 6home6:USD!6"s%nerg%"conf
if C L:rightL = L1L EI then
echo Lright = :rightGnomeL TT 6home6:USD!6"s%nerg%"confI fi
if C L:leftL = L1L EI then
echo Lleft = :leftGnomeL TT 6home6:USD!6"s%nerg%"confI fi
if C L:upL = L1L EI then
echo Lup = :upGnomeL TT 6home6:USD!6"s%nerg%"confI fi
if C L:downL = L1L EI then
echo Ldown = :downGnomeL TT 6home6:USD!6"s%nerg%"confI fi
Em seguida, necessrio especificar a posio de cada cliente em relao ao servidor.
Novamente, estou adotando a filosofia do "mais longo, porm mais fcil", criando um if para cada
um:
if C L:rightL = L1L EI then
echo L:rightGnome:L TT 6home6:USD!6"s%nerg%"conf
echo Lleft = :serverL TT 6home6:USD!6"s%nerg%"confI fi
if C L:leftL = L1L EI then
echo L:leftGnome:L TT 6home6:USD!6"s%nerg%"conf
echo Lright = :serverL TT 6home6:USD!6"s%nerg%"confI fi
if C L:upL = L1L EI then
echo L:upGnome:L TT 6home6:USD!6"s%nerg%"conf
echo Ldown = :serverL TT 6home6:USD!6"s%nerg%"confI fi
if C L:downL = L1L EI then
echo L:downGnome:L TT 6home6:USD!6"s%nerg%"conf
echo Lup = :serverL TT 6home6:USD!6"s%nerg%"confI fi
echo LendL TT 6home6:USD!6"s%nerg%"conf
echo LL TT 6home6:USD!6"s%nerg%"conf
Esta seo do script produz algo como:
section: lin3s
semprao:
right = toshiba
left = fedora
toshiba:
left = semprao
fedora:
right = semprao
end
321
FERRAMENTAS TCNICAS
Finalmente, falta criar a seo "aliases" do arquivo, que relaciona o endereo IP de cada
cliente a seu nome. Ela mais simples que as anteriores, j que temos todas as variveis em mos:
echo Lsection: aliasesL TT 6home6:USD!6"s%nerg%"conf
if C L:rightL = L1L EI then
echo L:rightGnome:L TT 6home6:USD!6"s%nerg%"conf
echo L:rightGipL TT 6home6:USD!6"s%nerg%"confI fi
if C L:leftL = L1L EI then
echo L:leftGnome:L TT 6home6:USD!6"s%nerg%"conf
echo L:leftGipL TT 6home6:USD!6"s%nerg%"confI fi
if C L:upL = L1L EI then
echo L:upGnome:L TT 6home6:USD!6"s%nerg%"conf
echo L:upGipL TT 6home6:USD!6"s%nerg%"confI fi
if C L:downL = L1L EI then
echo L:downGnome:L TT 6home6:USD!6"s%nerg%"conf
echo L:downGipL TT 6home6:USD!6"s%nerg%"confI fi
echo LendL TT 6home6:USD!6"s%nerg%"conf
echo LL TT 6home6:USD!6"s%nerg%"conf
Com o arquivo criado, chegou a hora de criar o cone no desktop, caso o checkbox
"desk_icon" esteja marcado. O cone contm o mesmo comando executado no final do script. Ao ser
aberto, o synergys l o arquivo de configurao e carrega com as opes adequadas. A partir da, o
Synergy pode ser ativado simplesmente clicando sobre o cone no desktop. S necessrio abrir o
painel novamente quando for necessrio alterar a configurao.
O trecho do script que cria o cone fica:
icon=LXdes3GiconL
if C L:iconL = L1L EI then
echo \C&es3top Dntr%E
D>ec=>term -e s%nerg%s -f
Meneric(ame='tivar o S%nerg%
Icon=3rdc
(ame='tivar o S%nerg%
$%pe='pplication
;-B&D-SubstituteUI&=false\ T 6home6:USD!6&es3top6'tivarW oW S%nerg%"des3top
fi
Como estou usando aspas simples, o echo escreve tudo literalmente, incluindo as quebras de
linha. Em situaes onde preciso incluir variveis dentro do comando ou nome do cone,
necessrio escrever linha a linha, usando aspas duplas, como em:
echo LMeneric(ame=Conectar ao servidor :serverL TT 6home6
:USD!6&es3top6server"des3top
Finalmente, temos a ltima linha do script, o mesmo comando includo no cone, que abre o
servidor. Note que estou usando o comando "xterm -e", que roda o comando dentro de uma janela
do terminal. A idia aqui que ele fique visvel e possa ser encerrado ao fechar a janela.
>term -e s%nerg%s -f
322
FERRAMENTAS TCNICAS
A segunda aba do script, referente ao cliente, bem mais simples, contendo apenas um line
edit onde vai o IP do servidor e um checkbox para o atalho no desktop.
Alm das linhas que criam o cone no desktop, o boto contm apenas a linha que ativa o
cliente Synergy:
server=XipGserver"te>t
if C -n L:serverL EI then
>term -e s%nerg%c -f :server
fi
Em muitas situaes, preciso criar scripts mais dinmicos, que obtenham e exibam
informaes automaticamente ao serem abertos e no apenas depois de clicar num boto. possvel
fazer com que o script execute comandos e exiba os resultados na forma de opes dentro de um
ComboBox, ou um label de texto. Isso permite criar scripts mais inteligentes, que exibem apenas as
opes que se aplicam situao.
Vamos usar como exemplo um script que cria uma interface para o cpufreq-set, (um
comando que faz parte do pacote "cpufrequtils"), que permite ajustar a freqncia do processador
em notebooks ou desktops com processadores Intel que suportam speed-step.
Ele ativado carregando os mdulos "p4_clockmod", "freq_table", "speedstep_lib",
"cpufreq_powersave", "cpufreq_ondemand" e "cpufreq_userspace". A partir da, voc pode ver as
freqncias suportadas pelo processador, junto com a freqncia atual usando o comando "cpufreq-
info", como em:
# cpu$re+-in$o
cpufreHutils #"2: cpufreH-info .C/ &omini3 Brodows3i 2##)
!eport errors and bugs to linu>Xbrodo"de4 please"
anal%7ing C1U #:
driver: p)-cloc3mod
C1Us which need to switch freHuenc% at the same time: #
hardware limits: 1J, MP7 - 1")# Mh7
available $re+uenc s!eps: 15% MD7. /%& MD7. %2% MD7. 5&& MD7. 85% MD7. 1#&% GD7.
1#2/ GD7. 1#3& Gh7
available cpufreH governors: ondemand4 powersave4 userspace
current polic%: freHuenc% should be within 1J, MP7 and 1")# Mh7"
$he governor LuserspaceL ma% decide which speed to use within this range"
323
FERRAMENTAS TCNICAS
curren! CI; $re+uenc is 1#3& GD7 .asserted b% call to hardware/"
Pela sada do comando sei que o processador (um Celeron M, por isso o baixo clock) suporta
vrias freqncias entre 175 MHz e 1.4 GHz e que ele est atualmente operando na freqncia
mxima.
Para ajustar a freqncia do processador, voc usa o comando "cpufreq-set -f", seguido pela
freqncia desejada (em kHz), como em:
# cpu$re+-se! -$ 1&%&
Existe ainda a opo "-g ondemand", onde a freqncia ajustada dinamicamente, de
acordo com a utilizao do processador.
Vamos a um exemplo de script que poderia apresentar estas opes de uma forma mais
agradvel. Aqui estou usando dois ComboBox (um deles est escondido atrs do texto, vamos ver o
porqu em seguida), um TextLabel e dois botes. O restante so caixas de texto explicativas e outros
elementos cosmticos que voc poderia usar ou no, de acordo com o pblico ao qual o script se
destina:
324
FERRAMENTAS TCNICAS
O TextLabel exibe a freqncia atual, detectada no momento em que o script aberto,
enquanto o primeiro ComboBox mostra uma lista das freqncias suportadas. Ambas as coisas so
extradas da sada do comando "cpufreq-info" usando o grep e o cut.
Tudo comea com um "script auxiliar", que executado primeiro. Ele carrega os mdulos
que ativam o cpufreq, filtra a sada do cpufreq-info e salva as informaes que vamos precisar exibir
dentro do script em dois arquivos de texto e no final carrega o script principal. Note que por causa
da necessidade de carregar mdulos, preciso que o script seja executado com permisso de root,
atravs do kdesu ou sudo:
modprobe p)Gcloc3mod
modprobe freHGtable
modprobe speed stepGlib
modprobe cpufreHGpowersave
modprobe cpufreHGondemand
modprobe cpufreHGuserspace
rm -f 6tmp6m%freHI rm -f 6tmp6freH
availablefreH=[cpufreH-info ` grep LfreHuenc% stepsL ` sed -r \s6 N6 6g\ ` cut -f
,-1## -d L L[
m%freH=[echo :availablefreH ` sed -e \s6WW"66g\ ` sed -e \s6 MP76####6g\ ` sed -e
\s6 MP76###6g\ ` sed -e \s6466g\[
echo :m%freH ` sed -e \s6 6Wn6g\ ` sed -e \s6 66g\ TT 6tmp6m%freH
cpufreH-info ` grep Lcurrent C1U freHuenc% isL ` sed -r \s6 N6 6g\ ` cut -f --J -d
L L TT 6tmp6freH
3mdr-e>ecutor 3-cpufreHd"3mdr
No final, temos dois arquivos temporrios, "/tmp/myfreq" e "/tmp/freq". O primeiro contm
as freqncias suportadas pelo processador, que sero exibidas dentro do ComboBox, j convertidas
para kHz, como em "175000 350000 525000 700000 875000 1050000 1230000 1400000" (um
nmero por linha), enquanto o segundo contm a freqncia atual, como em "1.40 GHz".
Para fazer com que estas informaes sejam includas no script principal durante sua
abertura, clique com o boto direito sobre uma rea vazia do painel principal e em "Editar Texto do
Kommander". Dentro da janela, acesse a opo "Texto para: initialization:".
325
FERRAMENTAS TCNICAS
Aqui voc pode acrescentar comandos que sero executados na abertura do painel.
procintel=[cat 6proc6cpuinfo ` grep Intel[
if C -7 L:procintelL EI then
3dialog --msgbo> L&esculpe4 por enHuanto este script funciona apenas em
processadores Intel Hue suportam o speed-step"L
3ill Xpid
fi
XfreH"insertItems.Xe>ec.\cat 6tmp6m%freH\/4#/
XComboBo>2"insertItems.Xe>ec.\cat 6tmp6freH\/4#/
XKabel1"set$e>t.LXComboBo>2"te>tL/
Acrescentei aqui uma verificao rpida para detectar se o PC possui um processador Intel e
encerrar o script caso negativo. O "@pid" uma varivel interna do Kommander que armazena o
nmero do processo da janela atual. Ele til quando voc precisa fazer com que o script feche
sozinho em determinado ponto, como neste caso. Outra observao importante que, para usar os
dois ComboBox desta maneira, preciso ajustar a opo "Editable" como "Verdadeiro" nas
propriedades de ambos.
Como vimos anteriormente, possvel fazer com um widget do Kommander exiba o
resultado de um comando. Uma forma simples de colocar as freqncias suportadas pelo
processador dentro do primeiro ComboBox ("freq" no meu script) atribuir a ele o resultado do
326
FERRAMENTAS TCNICAS
comando "cat /tmp/myfreq". Veja que gerei o arquivo j formatando os dados de forma que fossem
entendidos pelo Kommander, colocando um nmero por linha.
Cada widget suporta um conjunto prprio de funes. Voc pode ver uma lista clicando
sobre o boto "Funo..." no canto da janela. No caso do ComboBox usamos a funo "insertItems",
obtendo um menu de seleo com os valores.
Para mostrar a freqncia atual no textLabel, usamos a funo "setText". O problema que
(pelo menos no Kommander 1.2) no possvel atribuir o resultado de um comando, preciso
escrever diretamente o texto que ser exibido ou usar uma varivel do Kommander. por isso que
adicionei o segundo ComboBox escondido. Ele permite fazer uma escala. Primeiro atribuo o
resultado do comando a ele e, em seguida, atribuo o valor dele ao textLabel.
Esta a parte complicada do script. Fica faltando apenas definir os comandos dentro dos
dois botes, ajustando a freqncia de acordo com o escolhido e fazendo com que a configurao
seja restabelecida na hora do boot.
Para o boto "Ajustar a freqncia manualmente", escrevi o seguinte:
cpufreH-set -f XfreH"te>t
3dialog --%esno LMostaria Hue esta configura?Ao seYa restabelecida durante o boot8
Isto criar^ o arHuivo \6etc6rcS"d6SJ#cpufreH\4 Hue e>ecutar^ os comandos
necess^rios durante o boot" !esponder \(Ao\ desativa uma configura?Ao salva
anteriormente"L
if C L:8L = L#L EI then
rm -f 6tmp6SJ#cpufreH 2T6dev6null
cat eeDF< T6tmp6SJ#cpufreH
modprobe p)Gcloc3mod
modprobe freHGtable
modprobe speedstepGlib
modprobe cpufreHGpowersave
modprobe cpufreHGondemand
modprobe cpufreHGuserspace
cpufreH-set -f XfreH"te>t
DF<
327
FERRAMENTAS TCNICAS
rm -f 6etc6rcS"d6SJ#cpufreH
mv 6tmp6SJ#cpufreH 6etc6rcS"d6SJ#cpufreH
chmod N> 6etc6rcS"d6SJ#cpufreH
else
rm -f 6etc6rcS"d6SJ#cpufreH
fi
Para o boto "Ajustar Dinamicamente" a nica coisa que muda o comando "cpufreq-set -f
@freq.text", que passa a ser "cpufreq-set -g ondemand".
Os exemplos que dei at aqui so de scripts relativamente complexos. Mas o Kommander
tambm serve bem como interface para scripts simples. incrvel como um simples painel, com
algumas instrues bsicas sobre o uso do script e um boto "executar" podem valorizar seu
trabalho.
Para finalizar, este um exemplo de painel simples, que serve como interface para o script
para baixar arquivos bittorrent que citei anteriormente. Ele tem apenas dois botes de funes e um
boto para fechar. O restante o trabalho visual e a organizao dos botes, que do um visual mais
profissional a um script que originalmente passaria despercebido.
328
FERRAMENTAS TCNICAS
Criando scripts para o hotplug
O hotplug se orienta com base em diversos arquivos organizados dentro do diretrio
"/etc/hotplug" para carregar os mdulos adequados conforme novos dispositivos so plugados.
Para os dispositivos USB, por exemplo, so usados os arquivos "usb.distmap" (que contm
um conjunto de regras pr-definidas) e o arquivo "usb.usermap" permite definir regras adicionais.
Em muitas distribuies o segundo arquivo no existe por padro, mas basta cri-lo usando o
comando "touch /etc/hotplug/usb.usermap".
Note que estes arquivos s existem em distribuies que realmente utilizam o hotplug. Atualmente, est havendo uma espcie de
movimento migratrio em relao ao udev (que abordo a seguir). Embora o udev possa conviver com os scripts do hotplug, muitas
distribuies preferem realmente elimin-lo, mantendo apenas o udev. Quase todas as regras do hotplug podem ser reescritas usando
funes do udev, mas interessante entender os dois sistemas, para que voc possa utilizar um sistema ou outro de acordo com o
sistema usado.
Ambos os arquivos so formados por um conjunto de regras, como a abaixo:
usb-s!ora'e #>###f #>#2ee #>#### #>#### #>#2), #>## #>## #>## #>## #>## #>## #>########
O primeiro campo, "usb-storage", indica um script que ser executado (ou um mdulo que
ser carregado) quando um dispositivo que se encaixa nas regras descritas nos campos seguintes for
encontrado.
A maioria das distribuies traz um conjunto de scripts dentro da pasta "/etc/hotplug/usb/",
que so executados quando determinados dispositivos so plugados. Isso faz com que seja criado
um cone no desktop ao ser plugado um pendrive e outras aes do gnero.
Um dos recursos mais interessantes do hotplug que voc pode criar aes adicionais,
fazendo com que sejam executadas aes diversas quando voc plugar dispositivos USB
especificados. Voc pode fazer com que seja executado um script de backup automaticamente
quando plugar seu HD USB, fazer com que o Amarok ou outro aplicativo seja aberto quando plugar
seu MP3Player, fazer com que um determinado game seja aberto ao plugar o joystick, ou qualquer
outra coisa que tenha em mente.
O primeiro passo plugar o dispositivo e rodar o comando "lsusb". Procure a linha com a
identificao do dispositivo a que deseja atribuir a ao, como em:
Bus ##2 &evice #22: I& &%e/:&5&2 Menes%s Kogic4 Inc" USB 2"#
I&D 'dapter
Aqui estou usando uma gaveta de HD, um adaptador que permite ligar um HD de notebook
direto na porta USB, fazendo com que ele seja reconhecido como um pendrive. O mais importante
o "ID 05e3:0702", que contm o cdigo do dispositivo, que usaremos na regra. O primeiro nmero
(05e3) o cdigo do fabricante, enquanto o "0702" o modelo.
329
FERRAMENTAS TCNICAS
Abra os arquivos "/etc/hotplug/usb.distmap" e "/etc/hotplug/usb.usermap". D uma
olhada nos exemplos includos no "usb.distmap" e copie algum deles para o "usb.usermap", como
exemplo.
Como estou fazendo um script para uma gaveta de HD, vou dar um exemplo de como fazer
com que seja executado um script que faz automaticamente backup de algumas pastas sempre que
ela plugada.
As linhas adicionadas no "usb.usermap" seguem uma sintaxe especial, com vrios campos.
No prtico escrever tudo manualmente, justamente por isso copiamos uma linha do outro arquivo
e vamos apenas modific-la.
Como disse, o primeiro campo indica o script (dentro da pasta "/etc/hotplug/usb/") que ser
executado. No exemplo, estou indicando o script "gaveta". O terceiro e o quarto campo contm os
nmeros de identificao do dispositivo, os dois nmeros que apareceram no lsusb. atravs deles
que o hotplug saber diferenciar a gaveta de outros dispositivos USB. Note que necessrio
adicionar um "0x" antes de cada um dos dois nmeros, como em:
'ave!a &,&&&/ &,&%e/ &,&5&2 #>#### #>#### #>## #>## #>## #>## #>## #>## #>########
O segundo campo (chamado "match_flags") indica como a regra ser aplicada. O "0x0003"
o cdigo "padro" para regras personalizadas, que diz que a regra se aplica apenas a dispositivos
com os dois cdigos de identificao. A regra vai ser disparada se voc plugar uma outra gaveta,
exatamente igual primeira, mas no se plugar um pendrive, por exemplo.
Existem outros cdigos, menos usados, que permitem definir regras mais gerais. Usando
"0x0000" voc cria uma regra que se aplica a qualquer dispositivo USB plugado,
independentemente do que seja e o "0x000f", que permite definir excees, ou seja, dispositivos
especficos que no disparam uma regra mais genrica. Mexer com estes cdigos permite criar
regras mais abrangentes (como as usadas no usb.distmap), que permitem coisas como, por exemplo,
disparar uma ao quando qualquer pendrive ou scanner conectado (independente do fabricante).
Mas, trabalhar com eles um pouco mais complicado, pois voc precisa conhecer bem os cdigos
de identificao dos dispositivos e as regras que podem ser usadas, e ambas as coisas no so bem
documentadas.
Para manter as coisas simples, vou me concentrar na criao de regras especficas, usando
sempre o " 0x0003" no segundo campo.
Na linha do exemplo, especifiquei que o script "/etc/hotplug/usb/gaveta" deve ser executado
sempre que o dispositivo com o cdigo "0x05e3 0x0702" for plugado. O arquivo um shell script
normal, com os comandos que voc quer que sejam executados.
330
FERRAMENTAS TCNICAS
Este seria um exemplo de script simples, que faria backup da pasta
"/mnt/hda6/ARQUIVOS/":
5d6bin6sh
umount 6mnt6sda1I sleep 1
mount 6dev6sda1 6mnt6sda1
montado=[mount ` grep 6mnt6sda1[
if C -7 L:montadoL EI then
e>it 2
else
rs%nc -av 6mnt6hda-6'!aUIFS6 6mnt6sda16'!aUIFS
s%nc
umount 6mnt6sda1
fi
touch 6tmp6deuGcerto
Por segurana, o script primeiro tenta montar a partio de dados da gaveta e roda o
comando de backup apenas se ela realmente foi montada. No exemplo estou usando o "rsync", pois
a idia fazer um backup incremental, rpido. O comando "sync" sincroniza os buffers de dados,
gravando qualquer informao no salva. importante execut-lo sempre antes de desplugar
qualquer dispositivo de dados, caso contrrio voc quase sempre vai perder as ltimas alteraes.
Da forma como est, o nico feedback de que o script foi realmente executado a criao do
arquivo "/tmp/deu_certo". Mesmo que o script seja apenas para uso pessoal, seria interessante
melhorar o sistema de feedback, para que voc saiba quando o backup terminou.
fcil fazer perguntas e mostrar mensagens de aviso usando o kdialog. O maior problema
que os scripts executados pelo hotplug so executados num shell separado, fora do modo grfico.
como se voc pressionasse Ctrl+Alt+F1 para mudar para o modo texto e executasse os comandos a
partir de l. Isso faz com que, originalmente, nenhum programa grfico possa ser usado.
Para resolver isso, adicione o comando "export DISPLAY=:0" no incio do script. Isto
explica que ele deve usar a tela principal do X para exibir qualquer programa grfico chamado
adiante.
Dependendo da distribuio usada, necessrio tambm copiar o arquivo ".Xauthority" de
dentro do home do usurio que est usando o X para dentro do "/root", de forma que o root possa
usar a seo aberta.
Se voc usa sempre o mesmo usurio, isso no problema, basta incluir o comando "cp -f
/home/usuario/.Xauthority /root". Mas, se o script vai ser usado por outras pessoas, necessrio
torn-lo mais "inteligente", faz-lo descobrir sozinho qual o usurio logado e copiar o arquivo.
Ao usar o KDE, sempre criado um arquivo "/tpm/kde-usuario". Se usarmos o comando
"ls /tmp/", deixando s as linhas que contiverem "kde-" (removendo um eventual "kde-root") e, em
seguida remover o "kde-" da linha que vai sobrar, ficaremos s com o nome do usurio.
usuario=[ls 6tmp6 ` grep L3deL ` sed -s \6root6&\ ` cut -f L2L -d L-L[
331
FERRAMENTAS TCNICAS
A limitao aqui que o script s vai funcionar adequadamente quando houver apenas um
usurio do KDE. Para o caso de mquinas que aceitam logins remotos, como um servidor LTSP, por
exemplo, sugiro que voc use use a sada do comando "w" (que lista os usurios remotos), para
deixar na lista apenas o usurio local.
Adicionando a funo, nosso script ficaria:
5d6bin6sh
usuario=[ls 6tmp6 ` grep L3deL ` sed -s \6root6&\ ` cut -f L2L -d L-L[
cp -f 6home6:usuario6";authorit% 6root6
e,por! 2>SIL<b0:&
3dialog --%esno L<a7er o bac3up8L
resposta=:8
if C L:respostaL = L#L EI then
umount 6mnt6sda1I sleep 1
mount 6dev6sda1 6mnt6sda1
montado=[mount ` grep 6mnt6sda1[
if C -7 L:montadoL EI then
e>it 2
else
rs%nc -av 6mnt6hda-6'!aUIFS6 6mnt6sda16'!aUIFS
s%nc
umount 6mnt6sda1
3dialog --msgbo> LBac3up completoL
fi
fi
Veja que adicionei tambm duas caixas de dilogo. A primeira confirma se voc quer fazer o
backup e a segunda avisa quando ele concludo.
Seguindo esta idia de abrir aplicativos grficos ao plugar dispositivos USB, podemos criar
uma regra que abre o Epsxe (que voc pode trocar por outro game ou emulador qualquer), sempre
que um joystick USB plugado.
Seguindo o exemplo anterior, o primeiro passo adicionar a linha contendo o cdigo de
identificao do Joystick no arquivo "/etc/hotplug/usb.usermap":
Aopad &,&&&/ &,&3*d &,c2&c #>#### #>#### #>## #>## #>## #>## #>## #>## #>########
Aqui especifiquei que ser executado o script "/etc/hotplug/usb/joypad". Dentro do script vai
a funo para rodar aplicativos grficos, seguida do comando que abre o emulador:
5d6bin6sh
usuario=[ls 6tmp6 ` grep L3deL ` sed -s \6root6&\ ` cut -f L2L -d L-L[
cp -f 6home6:usuario6";authorit% 6root6
e>port &IS1K'V=:#
sudo -u :usuario eps>e
332
FERRAMENTAS TCNICAS
O comando "sudo -u $usuario epsxe" faz com que o comando seja executado pelo usurio
logado, ao invs do root, o que daria margem para problemas de segurana diversos. Este comando
pode ser usado sempre que voc quiser abrir um programa dentro do ambiente grfico (como, por
exemplo, uma janela do konqueror mostrando os arquivos de um pendrive ou cmera), mas de forma
que o programa seja executado dentro das permisses de acesso do usurio.
Criando regras para o udev
A partir do Kernel 2.6, houve uma pequena revoluo com relao deteco de dispositivos
no Linux. Graas ao sysfs, sempre que um novo dispositivo plugado, como um pendrive, ou uma
impressora, adicionada uma entrada dentro da pasta "/sys".
No caso de um pendrive, por exemplo, criada a pasta "/sys/block/sda" e, dentro dela, uma
subpasta para cada partio dentro do pendrive, como "/sys/block/sda/sda1". A pasta criada
quanto o pendrive detectado, e removida quando ele desconectado do sistema. Graas a isso, um
script de deteco precisa apenas monitorar o contedo da pasta /sys, no mais preciso se
preocupar em detectar quando o pendrive conectado ou desconectado, pois o prprio Kernel (com
a ajuda do hotplug ou udev) se encarrega disso.
Este um exemplo de script que "detecta" pendrives e HDs externos ligados na porta USB,
criando e removendo os cones no desktop conforme eles so plugados e removidos. Ele funciona de
forma "independente", baseado apenas nas entradas do diretrio /sys, sem utilizar o hotplug nem o
udev:
5d6bin6sh
5 Script para detectar pendrives e cart@es4 criando e removendo fcones no des3top
5 &eve ser e>ecutado pelo root ou por um usu^rio com o sudo ativo
5 1or Carlos D" Morimoto
detecta./S
cd 6s%s6bloc36
for i in [ls ` grep sd[I do
cd :iI ls ` grep :iI cd 6s%s6bloc36
done
U
while C 1 = 1 EI do
5 'diciona fcones
for i in [detecta[I do
Yae>iste=[ls 6home6:USD!6&es3top6 ` grep :i[
if C -7 L:Yae>isteL EI then
sudo m3dir 6mnt6:i cT6dev6null
arg=\\
<'$=[sudo fdis3 -l ` grep :i ` grep <'$[
C -n L:<'$L E cc arg=\-t vfat -o umas3=###\
($<S=[sudo fdis3 -l ` grep :i ` grep ($<S[
C -n L:($<SL E cc arg=\-t ntfs -o umas3=###4ro\
echo LC&es3top Dntr%EL TT 6home6:USD!6&es3top6:i"des3top
echo LD>ec=sudo mount :arg 6dev6:i 6mnt6:iI 3onHueror 6mnt6:iI sudo umount 6mnt6:iI s%ncL TT
6home6:USD!6&es3top6:i"des3top
echo LIcon=usbpendriveGunmountL TT 6home6:USD!6&es3top6:i"des3top
echo L(ame=:iL TT 6home6:USD!6&es3top6:i"des3top
echo LStartup(otif%=trueL TT 6home6:USD!6&es3top6:i"des3top
echo L$%pe='pplicationL TT 6home6:USD!6&es3top6:i"des3top
echo L;-B&D-SubstituteUI&=falseL TT 6home6:USD!6&es3top6:i"des3top
333
FERRAMENTAS TCNICAS
echo L;-B&D-Username=L TT 6home6:USD!6&es3top6:i"des3top
fi
done
5 !emove fcones
for i in [ls 6home6:USD!6&es3top6 ` grep sd ` cut -d L"L -f 1[I do
presente=[ls 6s%s6bloc36sd9 ` grep :i[
C -7 L:presenteL E cc rm -f 6home6:USD!6&es3top6:i"des3top
done
sleep -
done
Note que este script dividido em duas sees: a primeira adiciona cones para dispositivos
"detectados" e a segunda remove cones de dispositivos que foram desplugados, assim que percebe
que a entrada correspondente no "/sys" foi removida. Este script executado diretamente com o seu
login de usurio e fica em loop, atualizando os cones freqentemente. O "sleep 6" no final do script
determina a periodicidade com que ele executado.
Na verdade, inclu este script apenas como um exemplo de como, graas ao trabalho feito
pelo prprio Kernel, simples detectar novos perifricos e executar aes apropriadas. justamente
isso que faz o hotplug e, mais recentemente, o udev.
Embora o udev no substitua diretamente o hotplug, as regras para ele permitem fazer quase
tudo que era antes possvel atravs dos scripts do hotplug (entre muitas possibilidades novas), o que
explica a migrao de muitas distribuies. Vamos entender ento como cri-las e o que possvel
fazer com elas.
As regras do udev vo por padro na pasta "/etc/udev/rules.d/". Os arquivos dentro da pasta
so executados em ordem numrico-alfabtica, de uma forma similar aos arquivos de inicializao
dentro da pasta "/etc/rcS.d", em distribuies baseadas no Debian.
O arquivo "025_libgphoto2.rules" executando antes do "050_linux-wlan-ng.rules", por
exemplo. Normalmente, os arquivos so links para arquivos dentro da pasta "/etc/udev/", mas na
prtica tanto faz seguir o padro, ou colocar os arquivos diretamente dentro da pasta
"/etc/udev/rules.d/".
Quando um novo dispositivo plugado, o udev vasculha todos os arquivos, na ordem
especificada, at encontrar alguma regra que se aplique a ele. Ele pra assim que encontra a
primeira, de forma que, se o mesmo dispositivo for referenciado em duas ou mais regras diferentes,
vale a primeira. por isso que a ordem dos arquivos importante.
Para adicionar suas regras, crie um novo arquivo dentro da pasta, como
"/etc/udev/rules.d/01-regras.rules". O importante que o arquivo use a extenso ".rules" (caso
contrrio ele no ser processado) e comece com um nmero mais baixo que os demais, para que
seja processado primeiro. Isso garante que suas regras no sejam ignoradas em favor das regras
padro includas na distribuio.
Dentro do arquivo, cada regra forma uma nica linha. Este um exemplo de regra, que
executa um script sempre que um pendrive ou HD USB conectado:
BUS=LusbL4 'C$IF(==LaddL4 BD!(DK==Lsd88L4 ('MD=L_3L4 !U(N=L6usr6local6bin6detectar-usbL
334
FERRAMENTAS TCNICAS
Os parmetros usados so os seguintes:
BUS="usb": Define que a regra se aplica apenas a dispositivos USB. Voc pode usar
tambm BUS="scsi", BUS="ide" e BUS="pci" para criar regras para outros tipos de
dispositivos. Usando o BUS="pci", por exemplo, voc pode criar devices personalizados
para sua placa de som, rede ou modem PCI.
ACTION=="add": A regra se aplica quando um dispositivo for conectado. Existe tambm
o parmetro "remove", que se aplica quando o dispositivo desconectado. Sem especificar o
ACTION, a regra executada apenas quando o dispositivo conectado, ou assim que o udev
o detecta durante o boot, mas nada feito quando ele desconectado.
KERNEL="sd??": Aqui estamos sendo mais especficos. A regra se aplica apenas a
dispositivos cujo device comece com "sd", seguido por duas letras/nmeros, como
"/dev/sda1" ou "/dev/sdb2". Como especificamos que a regra s se aplica a dispositivos
USB, ela no vai ser disparada caso seja conectado um HD serial ATA ou SCSI, por
exemplo.
NAME="%k": O parmetro "NAME" responsvel por criar o device dentro da pasta
"/dev", atravs do qual o dispositivo ser acessado. O parmetro "%k" corresponde ao nome
dado pelo Kernel, e pode ser usado quando voc no quiser mudar o nome do dispositivo. Se
a partio no pendrive vista como "sda1", o dispositivo ser simplesmente "/dev/sda1",
como de costume.
Se, por outro lado, voc quiser que seu pendrive seja visto como "/dev/pendrive", ou
qualquer outro nome especial, indique isso na regra, como em: NAME="pendrive". Se
quiser que o device seja "/dev/block/pendrive", use: NAME="block/pendrive".
RUN+=: Aqui especificamos uma ao para a regra. Neste caso estou usando o parmetro
"RUN+=", que executa um script externo, que pode se encarregar de montar o dispositivo,
adicionar um cone no desktop ou outra ao qualquer.
Voc pode tambm usar o parmetro "SYMLINK=" para criar "apelidos" para os
dispositivos, fazendo com que alm do device padro, ele responda tambm por outro definido por
voc. Voc pode usar, por exemplo os parmetros NAME="%k" SYMLINK="pendrive" para fazer
com que, alm de ficar acessvel pelo dispositivo "/dev/sda1", seu pendrive possa ser acessado pelo
"/dev/pendrive".
Esta a regra irm da primeira, que executa outro script quando o dispositivo
desconectado. Ela pode ser usada para reverter os passos executados pelo primeiro script, como, por
exemplo, remover o cone no desktop criado pelo primeiro. A regra para remover deve vir sempre
antes da regra para adicionar:
'C$IF(==LremoveL4 BD!(DK==Lsd9L4 !U(N=L6usr6local6bin6remover-usbL
Note que a regra para remover tem menos parmetros que a para adicionar. Aqui estou
especificando que o script "/usr/local/bin/remover-usb" deve ser executado sempre que algum
dispositivo cujo nome comece com "sd" (sda, sdb, etc., incluindo todas as parties) for removido.
335
FERRAMENTAS TCNICAS
Vamos ento a um exemplo prtico, com as regras e scripts que usei no Kurumin 6.0, para
que detectasse pendrives e HDs USB, criando cones no desktop quando eles so plugados e
removendo os cones automaticamente.
O primeiro passo criar um arquivo com as regras. No meu caso, criei o arquivo "/etc/udev/
usb-storage.rules" e o link "/etc/udev/rules.d/010-storage.rules" apontando para ele.
Estas so as duas regras adicionadas no arquivo:
'C$IF(==LremoveL4 BD!(DK==Lsd9L4 !U(N=L6usr6local6bin6detectar-cartao2L
BUS=LusbL4 'C$IF(==LaddL4 BD!(DK==Lsd88L4 ('MDSallGpartitionsU=L_3L4
!U(N=L6usr6local6bin6detectar-cartao2L
Como pode ver, o script "/usr/local/bin/detectar-cartao3" executado tanto quando um
pendrive inserido quanto removido, pois optei por colocar as duas funes dentro do mesmo
script.
A opo NAME{all_partitions}="%k" faz com que o udev crie os dispositivos "/dev/sdx1"
at "/dev/sdx15", incluindo o "/dev/sdx", ao invs de criar apenas devices para as parties
encontradas. Sem isso, o udev criar o device "dev/sdx1", mas no o "/dev/sdx" (ou vice-versa, de
acordo com a regra usada), fazendo com que voc consiga acessar os dados na partio, mas no
consiga usar o cfdisk ou outro particionador para reparticionar o dispositivo.
O script executado pela regra bem similar ao que inclu no incio do tpico, mas ele agora
inclui uma funo para detectar os usurios logados e criar um cone para o pendrive no desktop de
cada um. Ao ser clicado, o cone executa um script separado, o "montar-pendrive" (que incluo a
seguir) que detecta se o usurio est com o sudo ativado e monta o pendrive usando o sudo ou o
kdesu.
5d6bin6sh
5 1or Carlos D" Morimoto
5 Dsta ] a fun?Ao Hue lista os dispositivos e parti?@es presentes4 gerando uma lista como:
5 sda1 sda2 sdb1 sdc1 .um por linha/
detecta./S
cd 6s%s6bloc36
for p in [ls ` grep sd[I do
cd :pI ls ` grep :pI cd 6s%s6bloc36
done
U
5 <un?Ao Hue lista os usu^rios logados no B&D:
userfu./S
ls 6tmp6 ` grep L3deL ` sed -s \6root6&\ ` cut -f L2L -d L-L
U
5 Cria o fcone no des3top de cada usu^rio logado no 3de:
for u in [userfu[I do
usuario=L:uL
for i in [detecta[I do
Yae>iste=[ls 6home6:usuario6&es3top6 ` grep :i[
m3dir 6mnt6:i cT6dev6null
chmod JJJ 6mnt6:i cT6dev6null
336
FERRAMENTAS TCNICAS
m%fs=\\
5 &etecta se a parti?Ao ] <'$ ou ($<S
de=[echo :i ` cut -c 1-2[
<'$=[fdis3 -l 6dev6:de ` grep :i ` grep <'$[
C -n L:<'$L E cc m%fs=\fat\
($<S=[fdis3 -l 6dev6:de ` grep :i ` grep ($<S[
C -n L:($<SL E cc m%fs=\ntfs\
5 Cria o fcone apenas se ele Y^ nAo e>istir
if C -7 L:Yae>isteL EI then
echo LC&es3top Dntr%EL TT 6home6:usuario6&es3top6:i"des3top
echo LDncoding=U$<-+L TT 6home6:usuario6&es3top6:i"des3top
echo LD>ec=montar-pendrive :i :m%fsI s%ncI s%ncL TT 6home6:usuario6&es3top6:i"des3top
echo LIcon=usbpendriveGunmountL TT 6home6:usuario6&es3top6:i"des3top
echo L(ame=:iL TT 6home6:usuario6&es3top6:i"des3top
echo LStartup(otif%=trueL TT 6home6:usuario6&es3top6:i"des3top
echo L$%pe='pplicationL TT 6home6:usuario6&es3top6:i"des3top
echo L;-B&D-SubstituteUI&=falseL TT 6home6:usuario6&es3top6:i"des3top
echo L;-B&D-Username=L TT 6home6:usuario6&es3top6:i"des3top
fi
done
5 !emove fcones de dispositivos removidos4 do des3top de cada usu^rio:
for i in [ls 6home6:usuario6&es3top6 ` grep sd ` cut -c 1-2[I do
presente=[ls 6s%s6bloc36 2T6dev6null ` grep :i[
C -7 L:presenteL E cc rm -f 6home6:usuario6&es3top6:i9"des3top
done
done
5 F 3-s%nc sincroni7a os dados periodicamente4 evitando perda de dados
5 se o pendrive ] removido sem desmontar"
3illall 3-s%nc
3-s%nc c
e>it #
Este o cdigo do script "montar-pendrive"
5d6bin6sh
5 Usado pelo script detectar-cartao2
5 1ermite montar uma parti?Ao em um pendrive" &etecta se o sudo est^ ativo ou nAo"
5 Usa o 3desu Huando o sudo est^ desativado"
5 D>emplo de uso: Lmontar pendrive sda1 fatL
5 1or Carlos D" Morimoto
sudoativo=[sudo whoami[
if C L:sudoativoL d= LrootL EI then
arg=\\
C L:2L = LfatL E cc arg=\-t vfat -o umas3=###\
C L:2L = LntfsL E cc arg=\-t ntfs -o umas3=###4ro\
3desu Lmount :arg 6dev6:1 6mnt6:1LI 3onHueror 6mnt6:1I s%ncI 3desu Lumount 6mnt6:1L
else
arg=\\
C L:2L = LfatL E cc arg=\-t vfat -o umas3=###\
C L:2L = LntfsL E cc arg=\-t ntfs -o umas3=###4ro\
sudo mount :arg 6dev6:1 6mnt6:1I 3onHueror 6mnt6:1I s%ncI sudo umount 6mnt6:1
fi
E este o do k-sync, que simplesmente executa o comando "sync" a cada 30 segundos:
5d6bin6sh
while C L1L d= L2L EI do
s%ncI sleep 2#
done
337
FERRAMENTAS TCNICAS
Voc pode fazer tambm com que as regras ativem servios de sistema, quando
determinados dispositivos so conectados. Por exemplo, instalando os pacotes "bluez-utils", "bluez-
firmware" e "kdebluetooth" voc passa a ter um suporte bastante completo a dispositivos bluetooth
de uma maneira geral. Mas, para que tudo funcione, necessrio que o servio "bluez-utils" esteja
ativado. A regra abaixo faz com que o servio seja automaticamente ativado quando algum
dispositivo bluetooth conectado:
'C$IF(==LaddL4 BD!(DK==LbluetoothL4 !U(N=L6etc6init"d6blue7-utils startL
Assim como no hotplug, voc pode tambm criar regras que se aplicam a dispositivos
especficos. Neste caso, ao invs de criar uma regra genrica, que se aplica a qualquer dispositivo
USB, qualquer device que comece com "sd", ou qualquer coisa do gnero, usamos alguma
informao que seja especfica do dispositivo em questo.
Por exemplo, sempre que conecto a gaveta de HD USB que usei no exemplo do hotplug,
criada a entrada "/sys/block/sda", contendo vrias informaes sobre o dispositivo, incluindo as
parties e capacidade de cada uma. No arquivo "/sys/block/sda/device/model" aparece o modelo
"ATMR04-0".
Voc pode ver de uma vez todas as informaes disponvel sobre o dispositivo usando o
comando "udevinfo -a -p", seguido da pasta no diretrio "/sys/block" ou "/sys/class" criada quando
ele conectado, como em:
1 udevin$o -a -p "ss"block"sda"
Se souber qual o device usado por ele, voc pode fazer a busca por ele, como em "udevinfo
-q path -n /dev/sda". Este comando devolve o caminho para ele dentro do diretrio "/sys".
O udevinfo retorna sempre uma grande quantidade de informaes. Todas elas esto
disponveis dentro do diretrio /sys, o udevinfo apenas as rene num nico lugar. No meu caso,
algumas linhas interessantes so:
&!ID!==Lusb-storageL
SVS<SSproductU==LUSB $F I&DL
SVS<SSsi7eU==L11J21#2)#L
SVS<SSserialU==L####:##:12"2L
Ao plugar um joystick USB, criada a pasta "/sys/class/input/js0". Ao rodar o comando
"udevinfo -a -p /sys/class/input/js0" para ver as propriedades, aparecem (entre vrias outras coisas),
as linhas:
SVS<SSmanufacturerU==LKogitechL
SVS<SSproductU==L0ingMan 1recision USBL
Como pode ver, sempre fcil encontrar alguma informao que se aplica apenas ao
dispositivo em particular, como o model, product ou serial. Qualquer uma delas pode ser usada para
compor a regra.
338
FERRAMENTAS TCNICAS
Esta uma regra simples para o joystick, que cria o link "/dev/joypad", apontando para o
dispositivo real do joystick.
BUS=LusbL4 SVS<SSproductU==L0ingMan 1recision USBL4 ('MD=L_3L4 SVMKI(B=LYo%padL
No caso da gaveta, poderamos criar uma regra um pouco mais complexa, que alm de criar
um link, executaria um script de backup sempre que ela conectada:
BUS=LusbL4 SVS<SSproductU==LUSB $F I&DL4 BD!(DK=Lsd81L4 ('MD=L_3L4
SVMKI(B=LgavetausbL !U(N=L6usr6local6bin6bac3upL
Note que aqui, alm do "SYSFS{product}", que identifica a gaveta USB, estou usando
tambm o parmetro KERNEL="sd?1". Isso faz com que o link aponte para a primeira partio do
HD (como "/dev/sda1"), ao invs de simplesmente apontar para o dispositivo ("/dev/sda"). No caso
de HDs e pendrives, isso importante, pois voc sempre monta a partio, no o dispositivo em si.
Sempre que a gaveta plugada, a regra executa o script "/usr/local/bin/backup". Poderamos
usar o mesmo script de backup que vimos no tpico sobre o hotplug, modificando apenas o device.
Ao invs de acessar o HD na gaveta atravs do "/dev/sda1", passaramos a usar o link
"/dev/gavetausb", que o endereo personalizado.
A principal diferena aqui que, mesmo que existam outros pendrives e outros HD USB
plugados no micro, o device da gaveta ser sempre "/dev/gavetausb", de forma que o script de
backup poder ser executado com bem mais segurana. Esta possibilidade de ter links
personalizados e fixos justamente a maior vantagem do udev.
No caso de dispositivos com vrias parties, voc pode usar o parmetro
"NAME{all_partitions}="%k" que comentei anteriormente. Ele faz com que o udev crie devices
para todas as parties possveis dentro do dispositivo, permitindo que voc monte-as manualmente,
moda antiga.
Mais uma dica que, normalmente, novos dispositivos so criados com permisso de escrita
somente para o root, at que voc as modifique manualmente, usando o comando "chmod". O udev
permite ajustar as permisses, modificando o dono, grupo e permisses de acesso do dispositivo.
Isso pode ser usado para que scanners e outros dispositivos fiquem automaticamente acessveis para
todos os usurios do sistema, evitando dores de cabea em geral, ou fazer com que um pendrive ou
outro dispositivo em particular fique disponvel apenas para um determinado usurio, mas no para
os demais.
Para fazer com que um palm fique disponvel apenas para o "joao", voc poderia usar a regra:
SVS<SSid1roductU==L##daL4 SVS<SSmanufacturerU==L1almGInc"L4 ('MD=L_3L4
SVMKI(B=LpendriveL4 F0(D!=LYoaoL4 MF&D=L#-##L
Voc pode encontrar mais alguns documentos sobre o tema, incluindo mais exemplos no:
http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html.
339
FERRAMENTAS TCNICAS
Captulo 5: Remasterizando o Kurumin e
outros live-CDs
O Knoppix uma das distribuies mais bem sucedidas. Alm de ser uma das distribuies
mais populares, ele deu origem a um sem nmero de distribuies especializadas, que juntas
possuem um nmero de usurios provavelmente maior do que qualquer outra distribuio.
Isso foi possvel pois, alm de ser fcil de usar como um live-CD, o Knoppix pode ser
personalizado, o que permite desenvolver novas distribuies e solues. Voc pode escolher entre
comear a partir do Knoppix original ou usar o Kurumin (ou outra das muitas distribuies
derivadas dele), corrigindo problemas, adicionando novos recursos ou personalizando o que quiser.
O Kurumin mantm a deteco de hardware, possibilidade de personalizao e outras
caractersticas positivas do Knoppix original, adicionando diversos scripts, personalizaes, drivers
e ferramentas de configurao que tornam o sistema mais fcil e agradvel de usar. Enquanto o
Knoppix um sucesso entre o pblico tcnico, o Kurumin conseguiu crescer rapidamente entre os
usurios finais, um terreno que at ento parecia difcil de conquistar.
Os exemplos deste captulo se concentram na remasterizao do Kurumin (que , afinal, uma
das solues mais usadas aqui no Brasil), mas os mesmos passos podem ser usados em outras
distribuies recentes, derivadas do Knoppix. uma uma boa oportunidade de colocar em prtica o
que aprendemos at aqui.
O bsico
O Knoppix uma distribuio baseada no Debian, que utiliza o mdulo cloop para rodar a
partir de uma imagem compactada. Alm de dar boot diretamente atravs do CD, DVD ou pendrive,
sem alterar os arquivos no HD, ele inclui uma srie de utilitrios, com destaque para o hwsetup, que
se encarrega de detectar todo o hardware da mquina durante o boot.
340
FERRAMENTAS TCNICAS
No importa qual seja a configurao do PC: se os componentes forem compatveis com a
verso do Kernel usada, ele funciona sem nenhuma interveno do usurio. Os scripts de
inicializao podem ser editados, de forma a incluir suporte a componentes adicionais, que no
sejam detectados pelo script padro, ou executar funes adicionais diversas, como salvar as
configuraes em um pendrive ou num compartilhamento de rede.
Alm do Kurumin, existem hoje em dia algumas centenas de distribuies baseadas no
Knoppix ou distribuies "netas", desenvolvidas a partir do Kurumin ou outra das distribuies
"filhas". As vantagens em relao a outras distribuies so:
1- Ele detecta e configura o hardware automaticamente, dispensando a configurao manual
em cada mquina
2- Alm de ser usado como live-CD, ele pode ser instalado no HD, mantendo a configurao
e a deteco de hardware feita durante o boot. O prprio instalador pode oferecer opes
adicionais e fazer modificaes onde necessrio.
3- Voc pode instalar novos programas a partir dos repositrios do Debian, usando o apt-get,
sem precisar manter pacotes ou um repositrio externo.
4- O contedo do CD compactado, o que permite instalar quase 2 GB de programas num
CD de 700 MB, mais do que suficiente para uma distribuio completa. Os mesmos passos
descritos aqui podem ser usados caso seja necessrio desenvolver um sistema maior,
destinado a ser gravado em DVD, ou uma distribuio compacta, destinada a ser gravada em
um mini-CD.
5- possvel instalar drivers para softmodems e outros tipos de hardware no suportados por
default, programas binrios ou comerciais, e assim por diante. Voc pode at mesmo usar o
Wine para rodar alguns aplicativos Windows.
341
FERRAMENTAS TCNICAS
Existem inmeras aplicaes para a idia. Voc pode criar uma distribuio padro para ser
instalada em todos os PCs da empresa e, ao mesmo tempo, us-la como uma forma de
introduzir o Linux aos funcionrios, mantendo o Windows instalado no HD. possvel criar
CDs bootveis com softwares diversos para apresentar a seus clientes; criar CDs para
aplicaes especficas, como discos de recuperao, CDs com documentao, e assim por
diante. S depende da sua criatividade.
Dentro da imagem do CD, voc encontra apenas alguns arquivos pequenos, incluindo a
pgina html exibida no final do boot, que variam de acordo com a distribuio. Dentro da pasta
/KNOPPIX, vai o arquivo compactado com o sistema, que ocupa quase todo o espao do CD.
Este arquivo nada mais do que uma imagem compactada da partio raiz do sistema. O
mdulo cloop "engana" o Kernel, fazendo-o pensar que est acessando uma partio EXT2 no HD,
quando, na verdade, os dados dentro da imagem vo sendo descompactados de forma transparente,
conforme so requisitados.
Algumas pastas do sistema que precisam de suporte a escrita, como, por exemplo, os
diretrios "/home" e "/var", so armazenadas num ramdisk de 2 MB criado no incio do boot. Este
ramdisk pode crescer conforme necessrio, desde que exista memria suficiente. Como nem todo
mundo tem 256 MB de RAM ou mais, o sistema usa parties Linux swap, ou arquivos de troca
encontrados em parties Windows, caso exista um HD instalado. Na falta dele, o sistema roda
inteiramente na memria RAM, lendo os arquivos a partir do CD.
O mdulo cloop foi originalmente desenvolvido por Andrew Morton, que atualmente o
mantenedor do Kernel 2.6. Na poca ele achou que o mdulo no serviria para nada interessante e o
descartou. Algum tempo depois ele foi redescoberto pelo Klaus Knopper, que acabou o utilizando
como um dos componentes base do Knoppix. um bom exemplo sobre como as coisas funcionam
dentro do open-source.
Nas verses recentes, o ramdisk usado tambm para armazenar as alteraes feitas com a
ajuda do UnionFS. O diretrio raiz contm um conjunto de links que apontam para diretrios dentro
da pasta "/UNIONFS", que composta pela combinao do ramdisk (leitura e escrita) e da pasta "/
KNOPPIX", onde montada a imagem compactada do CD (somente leitura).
342
FERRAMENTAS TCNICAS
Para gerar uma verso customizada, precisamos descompactar esta imagem numa pasta do
HD, fazer as modificaes desejadas, gerar uma nova imagem compactada e finalmente, gerar o
novo arquivo .iso, que pode ser gravado no CD ou DVD.
Para isso, voc precisar de uma partio Linux com 2.5 GB de espao livre (no caso do
Kurumin) ou 3.5 GB caso esteja remasterizando o Knoppix ou outra distribuio com 700 MB. No
caso das verses em DVD, necessrio um espao proporcionalmente maior. Calcule um espao 5
vezes maior que o tamanho do sistema original, pois a imagem descompactada ocupa 3 vezes mais
espao e vai ser necessrio guardar tambm a nova imagem compactada e o arquivo .iso final.
necessrio ter tambm uma partio Linux swap (ou um arquivo swap) de 1 GB, menos a
quantidade de RAM do PC. Se voc tem 512 MB de RAM, por exemplo, vai precisar de pelo menos
mais 512 MB de swap. O problema neste caso que o sistema usa a memria para armazenar a
imagem compactada enquanto ela est sendo processada, copiando o arquivo para o HD apenas no
final do processo.
Note que a quantidade de memria varia de acordo com o tamanho da imagem gerada. Ao
gerar uma imagem maior, destinada a ser gravada em DVD, voc vai precisar de uma quantidade
proporcional de memria ou swap.
Todo o processo de remasterizao pode ser feito a partir do prprio CD do Kurumin, ou da
distribuio que est sendo modificada. Todas as ferramentas necessrias esto inclusas no prprio
CD.
Uma observao importante que preciso usar a mesma verso do mdulo cloop instalada
no sistema de desenvolvimento para fechar o arquivo compactado. Em outras palavras, se voc est
fazendo um remaster do Kurumin, com uma verso personalizada do Kernel 2.6.16, por exemplo,
voc vai precisar instalar a mesma imagem do Kernel numa instalao do Kurumin no HD e fechar
o novo ISO usando esta instalao.
Se voc estiver rodando verses diferentes do Kernel, ou estiver usando outra distribuio, as
verses do cloop sero diferentes e o novo CD simplesmente no vai dar boot.
343
FERRAMENTAS TCNICAS
Extraindo
O primeiro passo dar boot com o CD do Kurumin ou da distribuio em que vai trabalhar.
Monte a partio que ser usada para extrair o sistema. Voc pode aproveitar tambm a partio de
uma distribuio Linux j existente no HD, desde que ele possua espao livre suficiente.
Um detalhe importante que (no Kurumin) voc deve montar a partio via terminal e no
usando os atalhos no desktop. Eles montam as parties adicionando o parmetro "nodev", que
impede que os scripts direcionem suas sadas para o "/dev/null", causando uma srie de erros. Vou
usar como exemplo a partio "/dev/hda6".
5 moun! -! reiser$s "dev"hda* "mn!"hda*
O prximo passo criar duas pastas, uma para abrigar a imagem descompactada e outra para
guardar os arquivos que iro no CD (fora da imagem compactada), como os arquivos de boot e os
manuais. Lembre-se de que os arquivos dentro da imagem compactada ficam acessveis apenas
dando boot pelo CD, enquanto os arquivos fora da imagem podem ser acessados a partir de qualquer
sistema operacional, como se fosse um CD-ROM comum.
Na poca em que comecei a desenvolver o Kurumin, a nica referncia (embora bem
resumido) era o "Knoppix how-to" do Eadz. Em homenagem, continuo at hoje usando os nomes de
pastas indicados nele:
5 mkdir "mn!"hda*"kn,mas!er
5 mkdir "mn!"hda*"kn,source
# mkdir /mnt/hda6/knxsource/KNOPPIX
A pasta "knxmaster" usada para armazenar uma cpia simples dos arquivos do CD, usada
para gerar o ISO final. A pasta "knxsource/KNOPPIX" por sua vez armazena a cpia
descompactada do sistema, onde fazemos as modificaes.
Comece fazendo a cpia completa dos arquivos do CD para dentro da pasta "knxmaster/".
Ao dar boot pelo CD, os arquivos ficam disponveis dentro da pasta "/cdrom":
# cp -a "cdrom"= "mn!"hda*"kn,mas!er"
Em seguida, vamos criar a imagem descompactada do sistema na pasta
knxsource/KNOPPIX/. Para o comando abaixo voc deve ter dado boot a partir do CD; ele nada
mais do que uma forma de copiar o sistema de arquivos montado durante o boot para a pasta
indicada:
5 cp -Rp /KNOPPIX/* /mnt/hda6/knxsource/KNOPPIX/
Esta etapa demora um pouco, pois alm de ler os arquivos no CD, o processador tem o
trabalho de descompactar tudo, como se estivesse instalando o sistema no HD. Terminada a cpia,
voc ver a rvore de diretrios do sistema dentro da pasta:
344
FERRAMENTAS TCNICAS
Voc deve estar se perguntando se o prximo passo ser acessar a pasta e sair editando os
arquivos de configurao e instalando aplicativos manualmente. Bem, isso at seria possvel para
algum sem muito o que fazer, mas existe uma forma muito mais fcil de trabalhar dentro da pasta
de desenvolvimento, utilizando o comando "chroot". Ele permite transformar a pasta no diretrio
raiz do sistema, de modo que voc possa instalar programas, instalar e remover pacotes e at mesmo
abrir o KDE e sair alterando suas configuraes. Tudo o que voc fizer dentro da janela do chroot
alterar seu novo CD bootvel. Para ativ-lo, use o comando:
5 chroo! "mn!"hda*"kn,source"cNEII>("
.como root/
A partir da, a pasta passa a ser vista pelo sistema como se fosse o diretrio raiz, fazendo
com que todos os comandos sejam executados dentro do seu sistema de desenvolvimento:
Antes de comear a trabalhar, monte o diretrio /proc dentro do chroot. Sem isso a
funcionalidade ser limitada e voc receber erros diversos ao instalar programas:
5 moun! -! proc "proc proc
345
FERRAMENTAS TCNICAS
Nas verses recentes, que utilizam o udev (usado a partir do Kurumin 6.0), necessrio
montar tambm a pasta "/sys" e o "/dev/pts". Sem os dois, voc no conseguir carregar o modo
grfico, como explico adiante:
# moun! -! ss$s ss "ss
# moun! -! devp!s "dev"p!s "dev"p!s
Para acessar a internet de dentro do chroot e assim poder usar o apt-get para instalar
programas, edite o arquivo "/etc/resolv.conf", colocando os endereos dos servidores DNS usados
na sua rede, como em:
nameserver 2##"1**"2#1"22
nameserver 2##"1JJ"2,#"12+
A partir da, voc pode instalar novos pacotes via apt-get, como se fosse um sistema
instalado. Se precisar instalar pacotes manualmente, copie os arquivos para dentro de uma pasta no
diretrio e instale usando o comando "dpkg -i". No Kurumin, por exemplo, uso a pasta "/knxsource/
KNOPPIX/packages/", que vista como "/packages" dentro do chroot.
Inicialmente, o chroot permite usar apenas comandos de modo texto. Voc pode editar
arquivos manualmente usando editores de modo texto, como o mcedit e o vi e usar o apt-get, mas
no tem como usar ferramentas grficas ou mudar configuraes no centro de controle do KDE, por
exemplo.
possvel carregar o modo grfico de dentro do chroot, configurando a varivel DISPLAY
do sistema para que seja usado um servidor X externo. Isso permite carregar o KDE ou outros
ambientes grficos, til principalmente quando voc precisar alterar as opes visuais do sistema,
editar o menu do KDE ou alterar a configurao dos aplicativos.
at possvel fazer isso via linha de comando (eu fao ;) editando os arquivos de
configurao do KDE (que vo dentro da pasta ".kde/", no home) mas muito mais simples atravs
do Kcontrol.
Existem duas opes aqui. Voc pode abrir um segunda seo do X, ou usar o Xnest (a
opo mais simples, porm mais precria), que abre uma instncia do X dentro de uma janela.
Para abrir o servidor X "real", use o comando:
# ( -dpi 5% :1
Isso abrir um X "pelado", com a tela cinza e o cursor do mouse. Volte para o X principal
pressionando "Ctrl+Alt+F7" e retorne para ele pressionando "Ctrl+Alt+F8".
Para abrir o Xnest, use (neste caso com seu login de usurio, no o root), os comandos:
1 ,hos! 6
1 (nes! :1
346
FERRAMENTAS TCNICAS
Em ambos os casos, voc ter aberta uma segunda seo do X (:1), que podemos usar de
dentro do chroot.
Existem algumas consideraes antes de continuar. Inicialmente, voc est logado como root
dentro do chroot. Ao alterar as configuraes do sistema (configuraes visuais, menu, programas
que sero carregados na abertura do KDE, etc.) precisamos fazer isso como o usurio usado por
padro no sistema, "knoppix" no Knoppix ou "kurumin" no Kurumin.
As configuraes padro vo inicialmente na pasta "/etc/skel". O contedo copiado para a
pasta home durante o boot, criando a pasta "/home/kurumin" ou "/home/knoppix". Precisamos
refazer esse processo artificialmente, de forma a carregar o ambiente grfico (e com o usurio
certo ;) a partir do chroot.
Comece (ainda como root) copiando os arquivos para a pasta home do usurio desejado. Vou
usar como exemplo o usurio kurumin. Lembre-se de que tudo isso feito dentro da janela do
chroot:
# cd "home
# cp -H "e!c"skel kurumin
# cho-n -H kurumin#kurumin kurumin"
# rm -r$ "var"!mp"=
Agora logue-se como o usurio kurumin (ainda dentro do chroot) e abra o KDE na instncia
extra do X que abrimos anteriormente:
5 su kurumin
: cd "home"kurumin"
: e,por! 2>SIL<b0localhos!:1
: s!ar!kde
Isso abrir o KDE dentro da segunda seo do X. Se precisar carregar outra interface,
substitua o "startkde" pelo comando adequado.
347
FERRAMENTAS TCNICAS
Ao usar o Xnest, normal que sejam exibidas mensagens de erro diversas (no terminal)
durante a abertura do KDE. Alguns aplicativos podem ser comportar de forma estranha, o que
tambm normal j que ele no oferece todos os recursos do servidor X "real". Pense nele como
uma forma rpida de alterar as configuraes do sistema que est sendo remasterizado e no como
algo livre de falhas.
Depois de alterar todas as configuraes desejadas, feche o KDE pelo "Iniciar > Fechar
Sesso > Finalizar sesso atual" e, de volta ao terminal do chroot, copie os arquivos modificados do
"/home/kurumin" de volta para o "/etc/skel", sem se esquecer de restabelecer as permisses
originais:
: e,i!
5 cd "home
5 cp -H$ kurumin"= "e!c"skel"
5 cho-n -H roo!#roo! "e!c"skel
# rm -rf /home/kurumin
348
FERRAMENTAS TCNICAS
Fechando a nova imagem
Depois de fazer a primeira rodada de alteraes, hora de fechar a nova imagem e testar.
Evite fazer muitas modificaes de uma vez, pois assim fica mais difcil de detectar a origem dos
problemas. O ideal fazer algumas alteraes, fechar uma nova imagem, testar, fazer mais algumas
alteraes, fechar outro, e assim por diante. Salve as imagens anteriores, elas podem ser usadas
como pontos de recuperao. Com elas, voc pode recuperar o sistema a partir de qualquer ponto,
caso acontea qualquer problema estranho que no consiga resolver sozinho.
Caso, mais adiante, voc faa alguma alterao que quebre o sistema, basta dar boot com o
ltimo CD gerado, deletar o contedo da pasta "/knxsource/KNOPPIX" e extrair a imagem
novamente. Voc ter seu sistema de volta da forma como estava quando gravou o CD.
Para fazer os testes, voc tem duas opes: gravar os CDs e dar boot num segundo micro ou
usar uma mquina virtual, configurada para usar o arquivo .iso gerado como CD-ROM (a melhor
opo se voc tem apenas um PC). Evite gravar as imagens em CD-RW para testar, pois eles
apresentam muitos erros de leitura, que podem levar a problemas estranhos no sistema, causados
por falta de arquivos. Eles podem fazer voc perder muito tempo procurando por problemas que na
verdade so causados pela mdia. Use CD-R normais, ou use diretamente os arquivos .iso dentro da
VM.
Ao fechar as imagens, comece limpando o cache de pacotes do apt-get dentro do chroot. O
apt conserva uma cpia de todos os pacotes baixados, o que desperdia bastante espao.
# ap!-'e! clean
Voc pode tambm deletar a base de dados dos pacotes disponveis (que gerada ao rodar o
"apt-get update"), reduzindo o tamanho da imagem final em quase 10 MB:
# rm -$ "var"lib"ap!"lis!s"=
(no delete a pasta "/var/lib/apt/lists/partial", apenas os arquivos)
Outro comando til, que ajuda a liberar espao o "deborphan", que lista bibliotecas rfs,
que no so necessrias para nenhum programa instalado. Elas vo surgindo conforme voc instala
e remove programas.
# deborphan
Os pacotes listados por ele podem ser removidos com segurana usando o "apt-get remove".
Delete tambm o histrico de comandos do root, que contm os comandos que voc
executou durante o processo de personalizao; no existe necessidade de divulg-los ao mundo.
Aproveite para eliminar tambm o diretrio .rr_moved:
5 rm -$ "home"roo!"#bash8his!or
# rm -rf /.rr_moved
349
FERRAMENTAS TCNICAS
Finalmente chegou hora de dar adeus ao chroot e gerar a nova imagem. Comece
desmontando o "/dev/pts", o "/sys" e o diretrio "/proc" que montamos no incio do processo, caso
contrrio todo o contedo da memria e do diretrio /dev ser includo na imagem, gerando um
arquivo gigante:
# umoun! "dev"p!s
# umoun! "ss
# umoun! "proc
Agora pressione CTRL+D para sair do chroot.
O prximo passo gerar o novo arquivo compactado. Esta etapa demora um pouco j que o
sistema precisa compactar todo o diretrio knxsource.
Antes de tentar gerar a imagem, use o comando free para verificar se a memria swap est
ativada. Se necessrio, formate novamente a partio swap e reative-a com os comandos "mkswap /
dev/hda2" e "swapon /dev/hda2", substituindo o "hda2" pela partio correta.
Depois de tudo verificado, o comando para gerar a imagem :
# mkiso$s -H -N 4Meu8C24 -hide-rr-moved -pad
"mn!"hda*"kn,source"cNEII>( B
? "usr"bin"crea!e8compressed8$s - *%%/* :
"mn!"hda*"kn,mas!er"cNEII>("cNEII>(
(As duas linhas formam um nico comando)
Ele um pouco longo mesmo, dado o nmero de parmetros necessrios. Aqui vai uma
explicao mais detalhada da funo de cada um:
mkisofs: Este o programa usado para gerar imagens ISO no Linux. Ele utilizado
originalmente por programas de gravao de CD. Graas aos parmetros extras, ele "adaptado"
para gerar a imagem compactada do sistema.
-R: Ativa as extenses Rock-Ridge, que adicionam suporte a nomes longos no Linux.
-V "Kurumin": O nome do volume. Voc pode substituir o "Kurumin" por qualquer outro
nome.
-hide-rr-moved: Esconde o diretrio RR_MOVED caso encontrado. Apenas uma
precauo.
-pad: Para prevenir problemas de leitura, o tamanho total da imagem deve ser sempre um
mltiplo de 32 KB. Este parmetro verifica isso e adiciona alguns bits zero no final da imagem para
completar os ltimos 32 KB, caso necessrio.
/mnt/hda6/knxsource/KNOPPIX: Este o diretrio fonte, onde est a imagem
descompactada do sistema. No se esquea de substituir o "hda6" pela partio correta.
350
FERRAMENTAS TCNICAS
| /usr/bin/create_compressed_fs - 65536: Este o grande truque. O pipe direciona toda a
sada do comando para o programa "create_compressed_fs" (includo no sistema), que se encarrega
de compactar os dados. Note que por causa do uso deste comando, voc s poder gerar a imagem
compactada a partir do Kurumin ou outra distribuio baseada no Knoppix, de preferncia uma
instalao do prprio sistema que est remasterizando. Voc no conseguir fazer a partir do
Mandriva (por exemplo), pois ele no inclui o executvel citado aqui.
> /mnt/hda6/knxmaster/KNOPPIX/KNOPPIX: O redirecionamento (>) faz com que o
fluxo de dados gerado pelos comandos anteriores seja salvo no arquivo que especificamos aqui,
gerando a imagem compactada do sistema, que ser usada no novo arquivo .iso.
Depois de gerar a imagem voc notar que o seu micro ficar um pouco lento, pois o
processo consome toda a memria RAM disponvel. Isso normal, mova um pouco o mouse e
clique nas janelas que ele logo volta ao normal.
Com a nova imagem compactada gerada, falta agora apenas fechar o .iso do CD, usando os
arquivos da pasta knxmaster. Este comando usado nas verses recentes, que utilizam o Kernel 2.6:
5 cd "mn!"hda*"kn,mas!er
# mkiso$s -pad -l -r -d -v -N 4curumin4 -no-emul-boo! -boo!-load-
si7e 3 B
-boo!-in$o-!able -b boo!"isolinu,"isolinu,#bin -c
boo!"isolinu,"boo!#ca! B
-hide-rr-moved -o "mn!"hda*"kurumin#iso "mn!"hda*"kn,mas!er
No final ser gerado o arquivo "kurumin.iso" dentro da pasta "/mnt/hda6". Voc pode alterar
o nome do arquivo destino de acordo com a necessidade.
O comando gera um CD bootvel usando o isolinux, um sistema de boot que tem uma
funo similar do lilo e grub, mas otimizado para uso em CD-ROMs. Os arquivos vo dentro da
pasta "boot/isolinux" no raiz do CD. O comando indica o caminho para o executvel do isolinux,
que ser includo no CD (boot/isolinux/isolinux.bin).
As verses antigas, com o Kernel 2.4, usavam uma imagem de um disquete de 1.44 como
sistema de boot. Este o sistema mais compatvel com placas antigas, mas tem uma sria limitao:
o sistema de boot precisa ter menos que 1.44 MB, a capacidade do disquete. Com todas as
novidades e melhorias, o Kernel 2.6 ficou muito maior, tornando quase impossvel criar um sistema
de boot funcional em apenas 1.44 MB.
Caso voc precise remasterizar uma verso antiga, ainda com o Kernel 2.4, os passos e
comandos para remasterizar so os mesmos, mas o comando para fechar o ISO fica:
# mkiso$s -pad -l -r -d -v -N 4Meu8C24 -b cNEII>("boo!#im' -c B
cNEII>("boo!#ca! -hide-rr-moved -o "mn!"hda*"kurumin#iso
"mn!"hda*"kn,mas!er
351
FERRAMENTAS TCNICAS
Ao remasterizar o Kanotix, ou outra distribuio live-CD que utilize o grub como
gerenciador de boot, o comando fica:
# mkiso$s -pad -l -r -d -v -N 4cano!i,4 -b
boo!"'rub"iso)**&8s!a'e18% -c B
boo!#ca! -no-emul-boo! -boo!-load-si7e 3 -boo!-in$o-!able -hide
-rr -moved B
-o "mn!"hda*"kano!i,#iso "mn!"hda*"kn,mas!er
Existem duas variveis dentro do script de instalao (o arquivo "/usr/local/bin/kurumin-
install"), que devem ser alteradas de acordo com o tamanho do sistema. Voc pode verificar isso a
partir do prprio Konqueror, ou usando o comando "du -sh", como em:
1 du -sh "mn!"hda*"kn,source"
Logo no comeo do script, voc encontra a funo responsvel pela barra de progresso
exibida durante a cpia dos arquivos. Altere o valor de acordo com o tamanho do sistema informado
pelo du:
progressbar./
S
S
$F$'K=12##
Um pouco mais abaixo, pela varivel que determina o espao mnimo necessrio para fazer a
instalao do sistema. O script aborta a instalao caso a partio destino seja menor que o valor
especificado aqui:
<SMI(=12##
' Personalizando o KDE e programas
Personalizar a configurao padro do sistema, ajustando o comportamento dos programas,
organizando o menu iniciar e arrumando a parte visual acaba sendo uma das partes mais
importantes ao desenvolver um sistema destinado a usurios no tcnicos, j que necessrio criar
um ambiente familiar, bonito e fcil de usar.
O Kurumin armazena as preferncias padro do usurio kurumin (o usado por default) na
pasta "/etc/skel". O contedo desta pasta copiado para a pasta "/ramdisk/home/kurumin" durante o
boot e (ao rodar o sistema a partir do CD) todas as alteraes so perdidas quando o micro
desligado.
Para alterar as configuraes default preciso ir direto ao ponto, editando diretamente os
arquivos da pasta "/etc/skel" dentro do chroot. Navegando dentro dela voc encontrar pastas com as
preferncias do KDE e vrios outros programas. No se esquea de marcar a opo "marcar
352
FERRAMENTAS TCNICAS
arquivos ocultos" no Konqueror.
recomendvel dar uma garimpada nestes arquivos de vez em quando, pois voc sempre vai
encontrar algumas opes de configurao que no esto disponveis no Kcontrol. Uma dica, caso
voc queira estudar mais sobre a edio manual dos arquivos usar a funo "Procurar por arquivos
modificados > Nos ltimos xx minutos" dentro do kfind para localizar os arquivos modificados
depois de cada alterao feita pelo Kcontrol. Embora no parea primeira vista, os arquivos de
configurao do KDE so bastante organizados e legveis.
O menu iniciar do KDE gerado a partir da combinao dos links do diretrio
"/usr/share/applications/", onde a maior parte dos pacotes instalados coloca seus cones e do
diretrio "/usr/share/applnk", onde voc pode colocar cones personalizados, que ficam disponveis
para todos os usurios.
Os cones do KDE so arquivos de texto normais, salvos com a extenso .desktop. Abrindo-
os num editor de texto, voc ver uma estrutura como esta:
353
FERRAMENTAS TCNICAS
O mais importante aqui so as linhas "exec", que contm o comando que executado ao
clicar sobre o cone, a linha "Icon" que contm o cone usado (os arquivos disponveis esto dentro
da pasta /usr/share/icons) e as linhas "Name" e "GenericName" que contm o nome e descrio, da
forma como so exibidos no menu iniciar.
Alm das pastas "/usr/share/applications" e "/usr/share/applink", que formam o iniciar
"principal" do sistema, existe um iniciar "particular" para cada usurio, que vai dentro da pasta
".kde/share/applnk/", dentro do home.
O iniciar montado a partir da juno do contedo das trs pastas. Quando existe algum
"conflito", como um cone configurado de forma diferente nas duas pastas, vale o que est na pasta
do usurio.
Dentro das pastas voc encontrar um arquivo .directory que contm o nome e descrio da
pasta (com suporte a internacionalizao) e o cone usado ao exib-la no iniciar:
354
FERRAMENTAS TCNICAS
Ao editar o iniciar utilizando o kmenuedit, as alteraes so salvas nas pastas ".config" e
".local", novamente dentro do home de cada usurio.
Os cones que aparecem no Desktop do KDE ao dar boot vo na pasta "/etc/skel/Desktop".
Estes cones seguem o mesmo padro dos cones do iniciar. Voc pode incluir tambm sub-pastas:
Finalmente, os aplicativos que so executados durante o boot (como a janela do Konqueror
exibindo o index.html do CD), so configurados atravs de cones colocados na pasta
"/etc/skel/.kde/Autostart". A sintaxe dos arquivos .desktop a mesma em todas estas pastas, voc
pode arrastar um cone da pasta "/usr/share/applnk" diretamente para ela, por exemplo:
355
FERRAMENTAS TCNICAS
Assim como o KDE, os demais programas sempre criam pastas de configurao dentro do
home. As configuraes do XMMS por exemplo, vo dentro da pasta ".xmms", as do gMplayer vo
dentro da ".mplayer", e assim por diante. As configuraes dos aplicativos do KDE ficam
centralizadas dentro da pasta ".kde/share/apps", tambm dentro do home. Todas estas pastas que
comeam com um ponto so vistas pelo sistema como pastas ocultas: para v-las, voc precisa
marcar a opo "mostrar arquivos ocultos" no Konqueror.
Esta edio manual dos arquivos interessante para conhecer melhor o sistema e ter mais
controle sobre o que est acontecendo. Mas, por outro lado, ela trabalhosa e demora at que voc
consiga dominar um nmero grande de opes.
A forma mais rpida de personalizar estas configuraes abrir o chroot, logar-se como o
usurio desejado copiar as pastas do /etc/skel, rodar o KDE e alterar as configuraes desejadas
dentro da janela do Xnest e depois salvar as alteraes, como vimos anteriormente. A edio
manual pode ser usada para corrigir pequenos detalhes e eventuais problemas.
356
FERRAMENTAS TCNICAS
Scripts de inicializao
Depois de instalado, o Kurumin passa a se comportar de forma semelhante a uma instalao
do Debian, com os servios iniciados atravs de links ou scripts nas pastas "/etc/rcS.d" e
"/etc/rc5.d".
Mas, ao rodar a partir do CD, um nico script cuida de toda a configurao do sistema, o
"/etc/init.d/knoppix-autoconfig". Ele roda o "/usr/bin/hwsetup" (a ferramenta de deteco de
hardware), executa o "/usr/sbin/mkxf86config" (que faz a configurao do vdeo) e verifica os
parmetros passados durante o boot (como o "noacpi", "bootfrom=", "noscsi", "xserver=vesa" etc.).
No final do script "/etc/init.d/knoppix-autoconfig", vai o comando "/etc/init.d/kdm start" que
inicia o carregamento do modo grfico. Neste ponto executado o script
"/etc/X11/Xsession.d/45xsession", que verifica os parmetros de boot relacionados com o ambiente
grfico (desktop=fluxbox ou desktop=gnome, por exemplo), copia o diretrio "/etc/skel" para o
"/home/kurumin", criando o diretrio home do usurio padro do sistema e, por ltimo, carrega o
KDE ou outro ambiente grfico escolhido.
No Knoppix original e em outras distribuies derivadas dele, o carregamento do modo
grfico no disparado pela abertura do KDM, mas sim diretamente atravs de uma entrada no
arquivo "/etc/inittab". Na prtica isso no faz muita diferena, pois o script
"/etc/X11/Xsession.d/45xsession" executado da mesma forma.
A instalao do Kurumin feita pelo script "/usr/local/bin/kurumin-install", que copia os
arquivos do sistema para a partio, define senhas e faz outras alteraes necessrias.
Ao personalizar o sistema, importante conhecer a funo de cada um destes scripts, pois
eles permitem modificar o comportamento do sistema durante o boot e faz-lo executar funes
adicionais. Vamos a alguns exemplos:
Quando voc precisar fazer alguma alterao no processo inicial de boot, alterar o
comportamento de uma das opes de boot ou criar uma nova (como o "kurumin union=" que
adicionei no Kurumin 5.1), alterar a configurao padro do teclado ou linguagem, ou executar
algum comando em especial durante o boot, altere o "/etc/init.d/knoppix-autoconfig".
Por exemplo, esta a seo do script que verifica se o parmetro "kurumin noalsa" foi
passado no boot e decide se executar ou no os comandos que detectam e ativam a placa de som:
if chec3bootparam LnoalsaLI then
echo L'bortando a detec?Ao da placa de som4 como solicitado no boot"L
else
if C -n L:USDG'KS'L -a -> 6etc6init"d6alsa-autoconfig EI then
touch 6tmp6modules"dep"temp
C -n L:SFU(&G&!ID!L E cc rmmod -r L:SFU(&G&!ID!L T6dev6null 2Tc1
case L:'KS'GC'!&L in auto9/ 'KS'GC'!&=LLII esac
'KS'GC'!&=L:'KS'GC'!&L 6etc6init"d6alsa-autoconfig
C d -r 6etc6modules"conf E cc W
ln -sf 6B(F11I;6etc6modules"conf 6etc6modules"conf
fi
357
FERRAMENTAS TCNICAS
6etc6init"d6alsa start
5 Unmuta o som
aumi> -w +# cI aumi> -v +# cI aumi> -m 2# cI aumi> -c +# cI aumi> -l ,# c
5 'bre as permiss@es do som para outros usu^rios:
chmod --- 6dev6dsp
chmod --- 6dev6mi>er
fi
Quando voc precisa verificar ou alterar algo relacionado com a configurao do vdeo, com
a cpia dos arquivos do "/etc/skel" para o "/home/kurumin" ou com as opes de boot que permitem
especificar o gerenciador de janelas padro (kurumin desktop=fluxbox, kurumin desktop=gnome,
etc.) procure no "/etc/X11/Xsession.d/45xsession".
Este um exemplo de configurao, a parte do script que verifica se foi dada alguma opo
no boot para usar o fluxbox, gnome ou outro desktop e, caso contrrio, carrega o KDE:
C -f 6etc6s%sconfig6des3top E cc " 6etc6s%sconfig6des3top
e>port a&DSB$F1=:.cat :PFMD6"wmrc/
if CC -n :a&DSB$F1 cc :a&DSB$F1 d= LdefaultL EEI then
&DSB$F1=:a&DSB$F1
else
5 3de is the default
C -7 L:&DSB$F1L E cc &DSB$F1=L3deL
fi
Quando precisar alterar algo relacionado com o processo de instalao do sistema, como
fazer com que ele se comporte de forma diferente depois de instalado, ou adicionar algum passo
adicional na instalao, voc pode modificar o instalador, que no caso do Kurumin o script
"/usr/local/bin/kurumin-install".
Ele uma evoluo do "knx-hdinstall", o antigo instalador do Knoppix. Atualmente o
Knoppix utiliza um novo instalador, que faz um "live-install", fazendo com que a instalao no HD
se comporte da mesma forma que do CD, com o procedimento de deteco de hardware feito a cada
boot. uma idia diferente de instalao, com alguns pontos positivos e outros negativos.
As verses recentes do Kanotix introduziram um instalador grfico, com uma interface mais
bonita e vrias mudanas, que acabou sendo incorporado ao Knoppix como instalador alternativo.
Como pode ver, existem outras opes de instaladores, que voc pode utilizar na sua personalizao.
Como comentei no incio deste captulo, voc pode incluir funes adicionais para detectar
componentes que no sejam automaticamente ativados pelos scripts padro. Isto importante em
muitas situaes, pois comum que empresas possuam lotes de impressoras, placas de vdeo ou
outros componentes que precisem de alguma configurao adicional para funcionarem. Ao invs de
fazer as modificaes mquina por mquina, mais eficiente escrever um script que as faa
automaticamente durante o boot do CD.
Voc pode encontrar alguns exemplos de funes diversas que uso no Kurumin no arquivo "/
usr/local/bin/hwsetup-kurumin", executado no final do boot, atravs do comando includo no final
do arquivo "/etc/init.d/knoppix-autoconfig".
358
FERRAMENTAS TCNICAS
Este arquivo no muito longo, pois normalmente as entradas antigas vo sendo removidas
com o tempo, conforme vo sendo usadas novas verses do hwsetup, com suporte aos novos
componentes.
Como vimos no captulo sobre shell script, uma forma simples de detectar componentes
durante o boot atravs da sada do comando "lspci". Veja um trecho da identificao que no
mude de um modelo de placa para outra e filtre usando um pipe e o grep, de forma a carregar o
mdulo apropriado caso a entrada seja encontrada. Estes so dois exemplos que usei no Kurumin
5.1 para detectar placas CMI 8738 e a placa de som virtual usada pelo VMware:
cmi=[lspci ` grep LCM+J2+L[
if C -n L:cmiL EI then
6sbin6modprobe snd-cmipci
fi
ensonic=[lspci ` grep LDnsoniH DS12J1L[
if C -n L:ensonicL EI then
6sbin6modprobe snd-ens12J1
fi
No caso de placas de vdeo, necessrio fazer alteraes no arquivo "/etc/X11/xorg.conf",
modificando a linha com o driver usado. No caso de placas com suporte 3D, muitas vezes
necessrio tambm carregar um mdulo de Kernel.
A deteco do vdeo feita pelo script "/usr/sbin/mkxf86config". Ele detecta a placa de
vdeo, monitor e outras informaes necessrias e gera o arquivo de configurao do vdeo. Quando
ele no conhece a identificao de uma determinada placa de vdeo, normal que ele use o driver
"vesa" que, como vimos, um driver genrico, que possui um baixo desempenho.
Voc pode incluir funes no final do script para detectar a placa usando a sada do lspci e
substituir a linha com o driver usando o sed. Este um exemplo que usei para detectar as placas
Intel Extreme, usadas no HP NX6110 e outros notebooks. Colocado no final do arquivo, ele troca o
driver de "vesa" para "i810" quando a placa detectada. Se o driver j estiver correto, ele no faz
nada:
5 &etecta as Intel D>treme
5 .mais adiante4 o prZprio script renomeia o arHuivo para >org"conf/
vidintel=[lspci ` grep LIntel Corp" Mobile MraphicsL[
vidintel2=[lspci ` grep LIntel Corporation MobileL[
vidintel2=[lspci ` grep L*1,MM6MMSL[
if C -n L:vidintelL -o -n L:vidintel2L -o -n L:vidintel2L EI then
sed -e \s6vesa6i+1#6g\ 6etc6;116;<+-Config-) T 6etc6;116;<+-Config-)"1
rm -f 6etc6;116;<+-Config-)I mv 6etc6;116;<+-Config-)"1 6etc6;116;<+-Config-)
fi
Em alguns casos, detalhes aparentemente simples podem fazer voc perder um bom tempo.
Um problema que tive nas verses recentes do Kurumin foi com relao com medidor de bateria do
KDE. Voc configura se ele deve ser ativado ou no durante o boot atravs da opo "Controle de
energia > Bateria do Laptop" dentro do Painel de Controle do KDE e a configurao salva no
arquivo ".kde/share/config/kcmlaptoprc" (dentro do home).
359
FERRAMENTAS TCNICAS
O problema que ele s til em notebooks. Se voc simplesmente o deixar ativo na
configurao, ele vai ser aberto sempre, mesmo em desktops, onde ele no tenha serventia alguma.
Uma forma que encontrei para tornar a deteco mais inteligente, fazendo com que ele seja
habilitado apenas em notebooks, foi incluir uma funo dentro do arquivo
"/etc/X11/Xsession.d/45xsession" (que, como vimos, o responsvel pela abertura do X e
carregamento do KDE), que verifica se o mdulo "battery" est ativo (indcio que o sistema est
rodando num notebook, com bateria) e altera o arquivo de configurao, desativando o medidor de
bateria quando necessrio:
bateria=[lsmod ` grep batter%[
if C -7 :bateria EI then
cd 6ramdis36home63urumin6"3de6share6config6
sed -e \s6Dnable=true6Dnable=false6g\ 3cmlaptoprc T 3cmlaptoprc2
rm -f 3cmlaptoprcI mv 3cmlaptoprc2 63cmlaptoprc
fi
Em alguns casos mais especficos, voc pode precisar incluir novas opes de boot. Vimos
um exemplo no tpico sobre como instalar o Kurumin e outras distribuies em pendrives,
incluindo uma opo de boot para que o sistema usasse uma imagem para salvar as alteraes do
UnionFS.
Mudando a lingua padro e traduzindo as mensagens de boot
Hoje em dia, quase todos os programas que usamos no dia-a-dia incluem suporte a
internacionalizao.
No caso do KDE, as tradues para todos os aplicativos base so agrupadas nos pacotes
"kde-i18n", como em "kde-i18n-ptbr" ou "kde-i18n-es" (espanhol), que podem ser instalados via
apt-get. Os pacotes no conflitam entre si, de forma que voc pode manter vrios deles instalados e
definir qual ser a lngua padro dentro do Kcontrol, junto com a configurao do teclado e outros
detalhes.
O suporte a ingls norte-americano vem instalado por padro e usado quando configurado,
ou quando nenhum outro pacote de internacionalizao estiver instalado.
Os demais programas, so configurados atravs do pacote "locales". Neste caso, cada
programa inclui diretamente as tradues disponveis e voc determina qual ser utilizada por
padro e quais outras ficaro instaladas. As demais podem ser removidas automaticamente usando o
comando "localepurge", o que economiza um bocado de espao.
Para alterar a configurao do locales, use o comando:
# dpk'-recon$i'ure locales
Para remover os arquivos de internacionalizao que no esto sendo usados, execute o:
# localepur'e
360
FERRAMENTAS TCNICAS
Alm dos aplicativos, existem tambm as mensagens do sistema, exibidas durante o boot
quando o sistema roda a partir do CD-ROM.
Para traduzi-las, voc precisa ir diretamente nos dois scripts executados durante o boot, o
"linuxrc", que fica dentro da imagem compactada de boot (o arquivo "boot/isolinux/minirt26.gz") e
o arquivo "/etc/init.d/knoppix-autoconfig", dentro da imagem principal.
Para chegar ao "linuxrc", acesse a pasta "/mnt/hda6/knxmaster/boot/isolinux". Descompacte
o arquivo minirt26.gz, crie uma pasta temporria e monte-a dentro da pasta. O "linuxrc" fica logo
no diretrio raiz. Ao terminar, faa o processo inverso, desmontando e compactando a imagem
novamente:
# cd "mn!"hda*"kn,mas!er"boo!"isolinu,"
# 'un7ip minir!2*#'7
# mkdir !mp"
# moun! -o loop minir!2*#'7 !mp"
# kedi! !mp"linu,rc
# umoun! !mp"
# '7ip minir!2*
Para traduzir as mensagens nos dois arquivos, pesquise dentro do arquivo por "echo", usado
para escrever a grande maioria das mensagens exibidas na tela.
Mudando o usurio padro
O usurio padro do Knoppix o "knoppix", que foi trocado pelo usurio "kurumin" nas
verses recentes do Kurumin.
Os passos bsicos para trocar o usurio padro do sistema ao remasterizar o CD so:
1- Edite o arquivo "/etc/passwd", troque o "kurumin" e o "home/kurumin" pelo nome e o
diretrio home do novo usurio
2- Edite o arquivo "/etc/shadow" e novamente troque o "kurumin" pelo novo usurio. Este
o arquivo de senhas, que pode ser visto e editado apenas pelo root.
3- Troque o login tambm no "/etc/sudoers", que o arquivo com a configurao do sudo.
4- preciso trocar o nome do usurio tambm no arquivo "/etc/kde3/kdm/kdmrc" (para
manter o autologin do KDE) e no arquivo /etc/X11/Xsession.d/45xsession.
5- No se esquea de mudar todas as ocorrncias do login no arquivo "/etc/group" e no
arquivo "linuxrc", dentro da imagem compactada carregada durante a etapa inicial do boot (o
arquivo "boot/isolinux/minirt.gz", que vimos a pouco). Existem tambm referencias a serem
trocadas no script "/etc/init.d/knoppix-autoconfig"
361
FERRAMENTAS TCNICAS
Estas alteraes trocam o usurio no sistema, mas falta tambm fazer as modificaes no
"/usr/local/bin/kurumin-install", que o instalador, assim como em mais alguns scripts dos cones
mgicos. Use o kfind para localizar os arquivos que precisam ser modificados com mais facilidade,
procurando por linhas que contenham a string "kurumin".
Criando um DVD de recuperao
Ao alterar os scripts de inicializao, voc pode mudar radicalmente o comportamento do
sistema, fazendo com que ele execute aes especficas durante o boot. Isso permite criar todo tipo
de soluo, como CDs de demonstrao que rodam programas especficos, CDs de diagnstico,
mini-distribuies com conjuntos personalizados de programas, e assim por diante.
Vamos a um exemplo de como criar um DVD de recuperao, que restaura automaticamente
uma imagem previamente criada usando o Partimage, de forma a restaurar o sistema originalmente
instalado na mquina, como nos micros de grife. Este DVD de recuperao no se limita a restaurar
instalaes do Linux: voc pode restaurar tambm instalaes do Windows, ou instalaes com dois
ou mais sistemas em dual boot. A nica limitao a capacidade da mdia usada. Dependendo do
tamanho da imagem, o sistema de recuperao pode ser gravado num mini-DVD, ou at mesmo
num CD-R.
Comece instalando e configurando o sistema normalmente no micro alvo. Depois de
terminar, use o Partimage para gerar uma imagem de cada partio do HD, junto com o backup da
MBR e da tabela de particionamento, como vimos no captulo 2.
Coloque todos os arquivos que sero usados dentro da pasta "knxmaster/" na sua partio de
trabalho. Voc pode colocar tudo dentro de uma sub-pasta para manter as coisas organizadas, como
"knxmaster/image/". Lembre-se de que os arquivos colocados na "knxmaster/" no so compactados
ao fechar a imagem. Por isso, no se esquea de ativar a compactao do Partimage ao ger-los.
O prximo passo fazer com que o DVD passe a restaurar a imagem automaticamente
durante o boot, sem interveno do usurio. A idia que o sistema de recuperao seja o mais
simples possvel, de forma que seja possvel restaurar a imagem rapidamente em caso de problemas.
Uma dica que, ao invs de fazer um DVD de recuperao que chega "chutando o balde",
formatando o HD e deletando todos os arquivos, voc pode fornecer os micros com o HD dividido
em duas parties: uma com o sistema e outra para dados. O DVD de recuperao pode ento
restaurar apenas a partio do sistema, sem mexer na partio de dados, dando tambm a opo de
fazer uma restaurao completa.
Para que o DVD restaure a imagem durante o boot, precisamos alterar o contedo do script
"knxsource/KNOPPIX/etc/init.d/knoppix-autoconfig", dentro da partio de trabalho.
Como vimos, este o script responsvel por toda a etapa inicial do boot, onde o hardware
detectado e o KDE carregado.
362
FERRAMENTAS TCNICAS
O que vamos fazer colocar os comandos para gravar a imagem e reiniciar o micro no final
deste arquivo. Isso far com que o sistema entre em loop. Ele comea o boot, faz a gravao da
imagem de recuperao e em seguida reinicia a mquina, sem nem chegar a abrir o KDE. Voc pode
incrementar este script adicionando mais opes.
O comando que chama o partimage e regrava a imagem sem perguntar nada ao usurio :
partimage -f action=2 -b restore 6dev6hda1 6cdrom6image6sistema"img"###
shutdown -h now
O Partimage possui vrias opes de linha de comando, que voc pode estudar atravs do
"man partimage". O "-b" faz com que o processo todo seja feito automaticamente, sem pedir
confirmao e o "-f action=2" reinicia o micro depois da gravao. O "/dev/hda1" a partio onde
a imagem ser escrita, enquanto o "sistema.img.000" o arquivo de imagem colocado dentro da
pasta knxmaster. Note que ao dar boot via CD, todo o contedo da pasta "knxmaster/" fica acessvel
atravs da pasta "/cdrom", mantendo a mesma estrutura de diretrios.
O "shutdown -h now" abaixo da primeira linha s pra garantir que o micro vai mesmo
reiniciar depois de terminar a gravao. Na verdade ele nem chega a ser usado, pois o prprio
comando do Partimage se encarrega de reiniciar no final do processo.
Voc pode adicionar as linhas prximo do final do arquivo, logo abaixo das linhas abaixo,
que marcam o final da parte de deteco e configurao inicial do sistema:
echo L-L T 6proc6s%s63ernel6print3
5 !e-enable signals
trap 2 2 11
O final do arquivo ficar assim:
echo L-L T 6proc6s%s63ernel6print3
5 !e-enable signals
trap 2 2 11
partimage -f action=2 -b restore 6dev6hda1 6cdrom6image6sistema"img"###
shutdown -h now
5 """ seguido pelo restante do script"
Para uma restaurao completa do HD, incluindo a MBR e a tabela de particionamento, os
comandos seriam:
dd if=6cdrom6image6hda"mbr of=6dev6hda
sfdis3 --force 6dev6hda e 6cdrom6image6hda"sf
partimage -f action=2 -b restore 6dev6hda1 6cdrom6image6sistema"img"###
shutdown -h now
... onde o "hda.mbr" o arquivo com a cpia dos primeiros 512 bytes do HD, gerado usando o dd e
o "hda.sf" a tabela de particionamento, gerada pelo sfdisk; ambas as coisas includas na pasta
"image/", junto com a imagem principal.
363
FERRAMENTAS TCNICAS
Note que esta restaurao completa vai restaurar o particionamento original do HD,
apagando todos os dados. importante exibir um aviso e pedir duas ou mais confirmaes antes de
realmente comear o processo. Voc pode exibir as mensagens e confirmaes usando o dialog, j
que elas sero exibidas com o sistema em modo texto.
Caso o HD tenha mais de uma partio (mesmo que vazias), voc deve gerar e restaurar a
imagem de cada uma usando o partimage.
Depois da modificao, feche o novo ISO, grave o DVD e faa o teste dando boot no micro
alvo. Voc pode tambm testar dentro de uma mquina virtual do VMware.
No caso da idia de oferecer a opo de restaurar apenas a partio do sistema ou fazer a
restaurao completa, voc pode usar um script como o abaixo, que pergunta e executa os comandos
apropriados:
dialog --msgbo> LBem vindo o && de recupera?Ao do sistema"L + ,#
dialog --%es-label LSistemaL --no-label LCompletaL --%esno Locg deseYa apenas
restaurar a instala?Ao do sistema4 ou fa7er uma restaura?Ao completa4 apagando
todos os dados do P&8 Wn
!esponda \Sistema\ para restaurar o sistema ou \Completa\ para fa7er a restaura?Ao
completa"L 1# ,#
if C L:8L = L#L EI then
partimage -f action=2 -b restore 6dev6hda1 6cdrom6image6sistema"img"###
shutdown -h now
elif C L:8L = L1L EI then
dialog --%esno LIsto vai restaurar o particionamento original4 apagando todos os
dados do P&d $em certe7a Hue Huer continuar8L
if C L:8L = L#L EI then
dd if=6cdrom6image6hda"mbr of=6dev6hda
sfdis3 --force 6dev6hda e 6cdrom6image6hda"sf
partimage -f action=2 -b restore 6dev6hda1 6cdrom6image6sistema"img"###
shutdown -h now
else
shutdown -h now
fi
fi
O Partimage copia apenas os dados dentro da partio para a imagem e ainda compacta tudo.
Isso faz com que seja possvel colocar uma partio com cerca de 3 GB ocupados (suficiente para
uma instalao completa do Ubuntu, Fedora ou Mandriva, ou uma instalao do Windows XP,
incluindo alguns programas extras e atualizaes) dentro de uma imagem de pouco mais de 1 GB.
Mesmo incluindo a imagem do Kurumin, voc ainda fica com bastante espao livre no DVD.
Outra possibilidade deixar uma partio no final do HD reservada s para armazenar a
imagem. As parties Linux no so enxergadas pelo Windows, de modo que o usurio em muitos
casos nem vai perceber. Neste caso voc precisaria apenas fazer algumas modificaes naquelas
duas linhas que vo no arquivo /etc/init.d/knoppix-autoconfig. Se voc estiver usando a partio
"hda5" para armazenar o backup e ela estiver formatada em ReiserFS, as linhas ficariam:
mount -t reiserfs 6dev6hda, 6mnt6hda,
partimage -f action=2 -b restore 6dev6hda1 6mnt6hda,6win;1"img"###
reboot
364
FERRAMENTAS TCNICAS
Ao gerar verses especializadas, voc pode reduzir o tamanho da imagem principal do
sistema, deixando mais espao livre ou tornando-o mais leve, removendo os pacotes e componentes
que no sero utilizados, o que pode ser feito atravs do prprio apt-get.
A forma mais rpida de remover grandes grupos de pacotes (todo o KDE, todas as
bibliotecas do Gnome, todos os programas grficos, etc.) procurar por "pacotes ncora", ou seja,
pacotes que so dependncias de grandes grupos de pacotes. Removendo o pacote inicial, voc
remove de uma vez todos os pacotes que se apiam sobre ele.
Para remover de uma vez quase todo o KDE e aplicativos, por exemplo, remova o pacote
"kdelibs-data":
# ap!-'e! remove kdelibs-da!a
Para remover todos os aplicativos do Gnome e outros aplicativos baseados na biblioteca
GTK2 (til caso voc queira fazer uma personalizao com apenas programas do KDE), remova o
pacote "libgtk2.0-0" (note que o nmero da verso varia), como em:
# ap!-'e! remove lib'!k2=
Muitos aplicativos aparentemente "independentes", como o Firefox, Thunderbird, Acrobat
Reader e Mplayer utilizam o GTK2 e so removidos juntamente com ele, por isso analise bem a
lista de pacotes que sero removidos antes de continuar.
Para remover de uma vez todos os programas grficos, remova o pacote "xlibs-data". Esta
medida extrema pode ser til em casos especficos, onde usado apenas algum utilitrio de modo
texto especfico, como no nosso exemplo do DVD de recuperao com o partimage.
# ap!-'e! remove ,libs-da!a
Criando seus prprios pacotes .deb
Em muitas situaes, preciso instalar softwares compilados manualmente, adicionar
firmwares ou arquivos diversos necessrios para ativar determinados componentes, expandir a
funcionalidade de alguns programas especficos, modificar o contedo de pacotes j instalados no
sistema, ou mesmo instalar novos scripts e utilitrios em geral.
Embora a soluo mais simples seja sair copiando diretamente os arquivos e modificando o
que for necessrio, esta no exatamente uma boa idia do ponto de vista da manteneabilidade.
Com o tempo, voc vai esquecer parte das alteraes feitas, fazendo com que o sistema fique cheio
de arquivos e configuraes que no so mais usados, ou que conflitem com outros componentes
instalados.
365
FERRAMENTAS TCNICAS
A melhor forma de adicionar novos componentes sempre atravs de pacotes, instalados
atravs do apt-get ou dpkg. Quando o componente no mais necessrio, voc simplesmente
remove o pacote e todos os arquivos relacionados a ele so apagados, de forma rpida e limpa. Em
algumas situaes, pode ser necessrio tambm modificar o contedo de um pacote existente, seja
para corrigir dependncias marcadas incorretamente, ou mesmo para corrigir eventuais problemas
com os arquivos contidos nele, modificando o contedo de pacotes gerados atravs do checkinstall,
por exemplo.
Os pacotes do Debian, nada mais so do que arquivos compactados, que contm a rvore de
arquivos e diretrios que sero instalados e um conjunto de arquivos de controle, que contm
informaes sobre o pacote e (opcionalmente) scripts que so executados antes e depois da
instalao ou remoo. Quando o pacote instalado, o apt-get ou dpkg simplesmente descompacta o
arquivo e copia os arquivos para o diretrio raiz, mantendo a mesma estrutura de pastas usada no
pacote.
A moral da histria que muito mais pratico instalar programas atravs de um pacote .deb
do que seguir uma receita no estilo "descompacte, copie o arquivo, x para a pasta y, depois edite o
arquivo k". um formato muito mais prtico para disponibilizar programas e atualizaes.
Ao criar seus pacotes, o primeiro passo criar uma pasta contendo a estrutura de diretrios e
arquivos que fazem parte do pacote. Ferramentas como o checkinstall e o dpkg-deb fazem isso
automaticamente.
Tome cuidado para no incluir arquivos que faam parte de outros pacotes, pois (alm da
mensagem de erro exibida ao instalar), ao remover seu pacote, todos os arquivos referentes a ele so
deletados, deixando o sistema desfalcado. Caso seu programa precise de arquivos externos, prefira
sempre colocar os pacotes que os provm como dependncias.
Dentro da pasta com os arquivos do pacote, existe tambm uma pasta DEBIAN (em
maisculas mesmo), que armazena os arquivos de controle. O principal (cuja presena obrigatria
em qualquer pacote .deb) o arquivo "control" onde vo as informaes de controle do pacote.
Este o arquivo "control" do pacote mozilla-firefox:
1ac3age: mo7illa-firefo>
ersion: 1","dfsgN1","#"1-1
Section: web
1riorit%: optional
'rchitecture: all
&epends: firefo>
Installed-Si7e: *-
Maintainer: Dric &orland eericXdebian"orgT
Source: firefo>
&escription: $ransition pac3age for firefo> rename
1ac3age to ease upgrading from older mo7illa-firefo> pac3ages to the
new firefo> pac3age"
"
$his pac3age can be purged at an%time once the firefo> pac3age has
been installed"
366
FERRAMENTAS TCNICAS
Destes campos, os nicos realmente obrigatrios so "Package" (que contm o nome do
pacote, que no pode conter pontos ou outros caracteres especiais), "Version" (a verso),
"Archteture" (a plataforma a que se destina, geralmente i386), Maintainer (o nome e e-mail do
mantenedor do pacote, no caso voc), "Depends" (a lista de dependncias do pacote, com os nomes
dos pacotes separados por vrgula e espao) e "Description", onde voc coloca um texto dizendo
resumidamente o que ele faz.
O campo "version" um dos campos importantes, pois por ele que o apt-get vai se orientar
na hora de instalar o pacote. Se voc lanar uma atualizao do pacote mais tarde, o campo deve ser
alterado. Um pacote com verso "1.1" visto como uma atualizao para o pacote de verso "1.0",
por exemplo.
Tome cuidado ao usar o campo "Depends", pois marcar as dependncias incorretamente
pode trazer problemas para quem vai utilizar seu pacote. Deixar de marcar pacotes que so
necessrios, vai fazer com que muita gente instale seu pacote sem ter alguns dos outros
componentes necessrios, fazendo com que ele no funcione. Por outro lado, incluir um nmero
grande de dependncias vai fazer com que seu pacote seja problemtico de instalar, ou mesmo seja
removido em futuras atualizaes do sistema, quando algum dos outros pacotes de que depende
ficar indisponvel, ou mudar de nome.
Ao indicar uma dependncia, voc pode exigir uma verso mnima, como em:
&epends: 3onHueror .T= ):2","#-1/4 p%thon
Neste exemplo, o pacote exige a presena do Konqueror 3.5.0-1 ou mais recente, junto com
qualquer verso do Python, o que muito diferente de usar:
&epends: 3onHueror .= ):2","#-1/4 p%thon .= 2"2",/
Neste caso, voc est exigindo verses especficas dos dois pacotes, o que faz com que seu
pacote seja automaticamente removido caso um dos dois seja atualizado para uma verso mais
recente.
Se o usurio realmente precisar do seu pacote, vai acabar forando a reinstalao, ou vai
tentar reinstalar as verses antigas do Konqueror e/ou Python, o que vai acabar levando a problemas
muito mais graves. Ou seja, a menos que absolutamente necessrio, jamais exija uma verso
especfica; use sempre o ">=" para indicar uma verso mnima, ou apenas o nome do pacote, para
deixar a verso em aberto.
Voc pode adicionar tambm os campos "Section" (que diz a seo, dentro do gerenciador
de pacotes em que o pacote ser classificado) e "Priority" (o nvel de prioridade do pacote, entre
extra, optional, standard, important e required). Normalmente, qualquer pacote "no essencial"
marcado como "extra" ou "optional".
367
FERRAMENTAS TCNICAS
Este mais um exemplo de arquivo control, usado no pacote dos cones mgicos do Kurumin:
1ac3age: icones-magicos
1riorit%: optional
ersion: -"#
'rchitecture: i2+-
Maintainer: Carlos D" Morimoto emorimotoXguiadohardwarwe"netT
&epends: 3ommander4 >dialog
&escription: 1ain]is e scripts do Burumin"
Para criar um pacote manualmente, contendo, scripts, firmwares, documentao ou arquivos
diversos, crie uma pasta contendo todos os arquivos que sero copiados, reproduzindo a estrutura de
pastas da forma como sero copiadas para o diretrio raiz, crie a pasta "DEBIAN" e inclua o
arquivo control com as informaes sobre ele.
Depois de preencher o arquivo "DEBIAN/control" e verificar se todos os arquivos esto nos
lugares corretos, use o comando "dpkg-deb -b" para gerar o pacote. Basta fornecer o diretrio onde
esto os arquivos do pacote e o nome do arquivo que ser criado, como em:
5 dpk'-deb -b >conesMa'icos" icones-ma'icos8*#&#deb
Ao examinar o arquivo gerado usando o Kpackage ou outro gerenciador, voc ver que a
descrio os arquivos correspondem justamente ao que voc colocou dentro da pasta.
Voc pode tambm alterar um pacote j existente, o que especialmente til para "arrumar"
pacotes gerados automaticamente atravs do checkinstall, corrigindo a localizao de arquivos ou
alterando a descrio ou lista de dependncias do pacote.
Para extrair um pacote, use o comando "dpkg -x", informando o pacote e a pasta destino, como em:
# dpk' -, mo7illa-$ire$o,81#%#d$s'61#%#&#1-18all#deb $ire$o,"
Este comando extrai apenas os arquivos do programa, sem incluir os arquivos de controle.
Para extra-los tambm, crie a pasta "DEBIAN" dentro da pasta destino e use o comando "dpkg -e",
como em:
# dpk' -e mo7illa-$ire$o,81#%#d$s'61#%#&#1-18all#deb
368
FERRAMENTAS TCNICAS
$ire$o,"2@B><N"
A partir da, voc tem a rvore original do pacote dentro da pasta. Depois de fazer as
alteraes desejadas, gere o pacote novamente, usando o "dpkg -b":
# dpk' -b $ire$o," mo7illa-$ire$o,#deb
FIM
369

S-ar putea să vă placă și