Sunteți pe pagina 1din 367

Linux: Ferramentas tcnicas 2 edio

Capa

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.
Por ser escrito em uma linguagem simples e didtica e com um nvel crescente de dificuldade,
este livro indicado tanto para usurios avanados que querem expandir seus conhecimentos,
quanto para iniciantes que desejam compreender mais profundamente o sistema.
Autor: Carlos E. Morimoto
Pginas: 312
Formato: 23 x 16 cm
Editora: GDH Press e Sul Editores
ISBN: 85-205-0401-9
Lanado em: Maro de 2006

Descrio
As distribuies Linux esto de um modo geral se tornando muito fceis de usar, em algumas
reas at mesmo mais fceis de usar que o Windows. 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 dicas sobre o desenvolvimento de
scripts grficos e tambm scripts e regras para o hotplug e udev, que permitem abrir
programas e executar outros scripts quando determinados dispositivos so plugados na
mquina.
Foi includo tambm um novo captulo, que ensina a desenvolver solues baseadas no
Kurumin e outros live-CDs baseados no 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.
Carlos E. Morimoto o criador do http://www.hardware.com.br, o maior site tcnico do pas.
Seu trabalho inclui mais de dois mil artigos, dicas e tutoriais publicados, projetos de
desenvolvimento em Linux, cursos, palestras e a publicao de 17 livros tcnicos sobre
hardware, redes, servidores e Linux, entre eles os livros Hardware, o Guia Definitivo; Redes,
Guia Prtico; Servidores Linux, Guia Prtico; Smartphones, Guia Prtico; Linux, Entendendo o
Sistema e Linux, Ferramentas Tcnicas.


Prefcio ................................ ................................ ................................ ................................ ... 7
Captulo 1: Entendendo a estrutura do sistema................................ ................................ ....... 7
Como funciona o suporte a hardware no Linux................................ ................................ ..... 8
Os componentes do sistema................................ ................................ ............................... 11
Kernel ................................ ................................ ................................ ................................ 11
Mdulos................................ ................................ ................................ ............................. 16
Os processos de boot e os arquivos de inicializao................................ ............................ 18
Ativando e desativando servios................................ ................................ ......................... 22
X ................................ ................................ ................................ ................................ ........ 25
Gerenciador de login ................................ ................................ ................................ .......... 27
Xfree e Xorg ................................ ................................ ................................ ....................... 27
A rvore genealgica das distribuies ................................ ................................ ............... 28
Captulo 2: Configurao, ferramentas e dicas ................................ ................................ ...... 31
Editando o /etc/fstab ................................ ................................ ................................ ......... 31
Configurando o lilo ................................ ................................ ................................ ............. 38
Dual-Boot com dois HDs ................................ ................................ ................................ . 42
Usando uma imagem de fundo................................ ................................ ....................... 43
Configurando o grub ................................ ................................ ................................ .......... 44
Configurando o vdeo: /etc/X11/xorg.conf................................ ................................ .......... 48
KVM via software com o Synergy................................ ................................ ........................ 59
Usando o hdparm................................ ................................ ................................ ............... 65
Recompilando o Kernel ................................ ................................ ................................ ...... 69
Baixando os fontes ................................ ................................ ................................ ......... 70
Configurando................................ ................................ ................................ .................. 71
Compilando ................................ ................................ ................................ .................... 77
Instalando ................................ ................................ ................................ ...................... 79
Recompilando o Kernel moda Debian ................................ ................................ .......... 80
Aplicando patches ................................ ................................ ................................ .......... 81
Criando patches ................................ ................................ ................................ ................. 82
Acelerando a compilao com o distcc ................................ ................................ ............... 83
Criando pacotes a partir dos fontes com o checkinstall................................ ....................... 85

Escrevendo scripts de backup................................ ................................ ............................. 87


Usando o autofs/automount ................................ ................................ .............................. 92
Acessando dispositivos USB................................ ................................ ................................ 94
Configurando manualmente................................ ................................ ........................... 94
Devs e hotplug................................ ................................ ................................ ................ 98
Entendendo o udev ................................ ................................ ................................ ...... 100
Renomeando interfaces de rede com o udev................................ ................................ 102
Fazendo backup e recuperando a MBR e tabela de parties ................................ ........... 104
Usando o Gpart ................................ ................................ ................................ ............ 105
Usando o Testdisk ................................ ................................ ................................ ........ 106
Recuperando parties danificadas ................................ ................................ .................. 109
Gerenciamento de setores defeituosos como o ReiserFS................................ .................. 114
Monitorando a sade do HD com o SMART ................................ ................................ ...... 116
Copiando dados de HDs ou CDs defeituosos ................................ ................................ ..... 120
Aproveitando mdulos de memria defeituosos ................................ .............................. 122
Eliminando dados com segurana................................ ................................ ..................... 123
Administrando a memria swap ................................ ................................ ....................... 127
Ativando o suporte a mair de 1GB de memria RAM................................ ........................ 129
Clonando parties com o Partimage ................................ ................................ ............... 131
Instalando ................................ ................................ ................................ .................... 132
Funes bsicas................................ ................................ ................................ ............ 133
Fazendo uma imagem de todo o HD................................ ................................ ............. 138
Gravando imagens num compartilhamento da rede ................................ ..................... 139
Segurana: detectando rootkits................................ ................................ ........................ 143
Instalando o Kurumin 7 (e outras distros) num pendrive ou carto................................ ... 145
Salvando as configuraes ................................ ................................ ................................ 153
Monitores de temperatura e coolers ................................ ................................ ................ 155
Gerenciamento de energia ................................ ................................ ............................... 159
Captulo 3: Instalando drivers adicionais ................................ ................................ ............. 164
Verificando links, arquivos e compiladores ................................ ................................ ....... 164
Configurando softmodems no Linux ................................ ................................ ................. 167
A idia bsica................................ ................................ ................................ ................ 168
Driver da Smartlink ................................ ................................ ................................ ....... 169
Intel AC97 e ATI IXP ................................ ................................ ................................ ...... 174

Intel 537 e 536 ................................ ................................ ................................ ............. 176


Lucent e Agere ................................ ................................ ................................ ............. 178
PC-Tel PCI ................................ ................................ ................................ ..................... 180
Modems com chipset Conexant................................ ................................ .................... 181
Instalando placas wireless ................................ ................................ ................................ 182
Ndiswrapper................................ ................................ ................................ ................. 184
ACX100 e ACX111 ................................ ................................ ................................ ......... 187
MadWiFi................................ ................................ ................................ ....................... 189
ADMteck ADM8211 ................................ ................................ ................................ ...... 190
Realtek 8180 ................................ ................................ ................................ ................ 191
Orinoco USB ................................ ................................ ................................ ................. 192
Broadcom................................ ................................ ................................ ..................... 193
IPW2100 e IPW2200................................ ................................ ................................ ..... 193
Ralink 2400 e 2500 ................................ ................................ ................................ ....... 197
Linux-wlan-ng ................................ ................................ ................................ ............... 198
Suporte a webcams ................................ ................................ ................................ .......... 199
Driver apca5xx................................ ................................ ................................ .............. 201
Logitech QuickCam ................................ ................................ ................................ ....... 202
Sqcam ................................ ................................ ................................ .......................... 202
Modems ADSL USB................................ ................................ ................................ ........... 203
Driver da nVidia................................ ................................ ................................ ................ 208
Instalando manualmente................................ ................................ .............................. 208
Ativando os recursos especiais ................................ ................................ ..................... 214
FSAA................................ ................................ ................................ ............................. 214
Configurador grfico................................ ................................ ................................ ..... 216
Twin View................................ ................................ ................................ ..................... 219
Instalando moda Debian ................................ ................................ ............................ 221
Driver para placas com chipset nForce................................ ................................ .............. 223
Ativando o driver de rede ................................ ................................ ............................. 224
Ativando o driver de som................................ ................................ .............................. 225
Driver 3D da ATI ................................ ................................ ................................ ............... 225
Instalando ................................ ................................ ................................ .................... 227
Configurando e solucionando problemas................................ ................................ ...... 228
Tablets ................................ ................................ ................................ ............................. 233

Configurando placas de TV ................................ ................................ ............................... 236


Gravando ................................ ................................ ................................ ..................... 241
Configurando mouses touchpad com funes especiais ................................ ................... 242
Bootsplash ................................ ................................ ................................ ....................... 246
Captulo 4: Programando em shell script ................................ ................................ ............. 250
O bsico ................................ ................................ ................................ ........................... 251
Fazendo perguntas ................................ ................................ ................................ ........... 255
Mais dicas sobre o kdialog................................ ................................ ................................ 268
Controlando aplicativos via DCOP................................ ................................ ..................... 275
Usando os servicemenus do KDE ................................ ................................ ...................... 278
Detectando hardware ................................ ................................ ................................ ...... 284
Alterando arquivos de configurao ................................ ................................ ................. 288
Corrigindo erros ................................ ................................ ................................ ............... 293
Pacotes auto-instalveis ................................ ................................ ................................ ... 296
Mais exemplos teis ................................ ................................ ................................ ......... 297
Criando interfaces no Kommander ................................ ................................ ................... 302
Criando scripts para o hotplug................................ ................................ .......................... 328
Criando regras para o udev................................ ................................ ............................... 333
Captulo 5: Remasterizando o Kurumin e outros live-CDs................................ .................... 340
O bsico ................................ ................................ ................................ ........................... 341
Extraindo................................ ................................ ................................ .......................... 344
Fechando a nova imagem................................ ................................ ................................ . 348
Personalizando o KDE e programas................................ ................................ ................... 352
Scripts de inicializao ................................ ................................ ................................ ...... 355
Mudando a lingua padro e traduzindo as mensagens de boot................................ ......... 359
Mudando o usurio padro................................ ................................ .............................. 360
Criando um DVD de recuperao................................ ................................ ...................... 360
Criando seus prprios pacotes .deb................................ ................................ .................. 364

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 umgosto
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.

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.

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.

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.
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 ondeo
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:ernel-source
e ernel-headers. No Mandriva, por exemplo, voc pode instal-los usando os comandos:
# urpmi ernel-source
# urpmi ernel-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.
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 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.
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.
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.

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.
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
Vendor: LG CNS Model: Rev: 1.00
Type: Direct-Access ANSI SCSI revision: 02
SCSI device sda: 249856 512-byte hdwr sectors (128 MB)
sda: Write Protect is off
sda: Mode Sense: 03 00 00 00
sda: assuming drive cache: write through
sda: sda1
Attached scsi removable disk sda at scsi1, channel 0, id 0, lun 0
Attached scsi generic sg0 at scsi1, channel 0, id 0, lun 0, type 0
USB Mass Storage device found at 5
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.

Os processos 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 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 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:
# Boot-time system configuration/initialization script.
si::sysinit:/etc/init.d/rcS
Esta linha executa o script "/etc/init.d/rcS". Se voc examin-lo tambm, vai encontrar o
seguinte:
for i in /etc/rcS.d/S??*
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:
eymap.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.
checroot.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 mdulos que ativem
perifricos que no estejam sendo detectados automaticamente.
checfs.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.
networing: 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
"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:
# /etc/init.d/ssh start
# /etc/init.d/ssh stop
# /etc/init.d/ssh restart
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 start


# service ssh stop
# service ssh restart
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.

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).

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 -f /etc/rc5.d/S20samba
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 /etc/rc5.d/
# ln -s ../init.d/samba S20samba
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 /etc/init.d/ssh /etc/rc5.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 "chconfig", como em:
# chconfig ssh on
(ativa)
# chconfig ssh off
(desativa)

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:
# ssh -X 192.168.0.1
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:
# X :2 -query 192.168.0.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 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/dm stop" e reabri-lo a partir do modo texto com o comando "/etc/init.d/dm
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 e Xorg
Atualmente esto em uso no mundo Linux duas verses diferentes do X, oXfree 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 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:
/etc/X11/XF86Config-4 = /etc/X11/xorg.conf
- Utilitrios de configurao:
xf86cfg = xorgfg
xf86config = xorgconfig
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 Slacware, 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 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, 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 a5% 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 -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 CDROM, por exemplo. O fstab um dos arquivos essenciais para o funcionamento do sistema,
por isso, antes de edit-lo, faa sempre uma cpia de segurana:
# cp /etc/fstab /etc/fstab-original

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:
# edit /etc/fstab
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:
# /etc/fstab: filesystem table.
# filesystem mountpoint type options dump pass
/dev/hda2 / reiserfs defaults 0 1
/dev/hda5 none swap sw 0 0
proc /proc proc defaults 0 0
/dev/fd0 /floppy vfat defaults,user,noauto,showexec,umask=022 0 0
/dev/cdrom /mnt/cdrom iso9660 defaults,ro,user,noexec,noauto 0 0
# parties encontradas pelo instalador:
/dev/hda1 /mnt/hda1 reiserfs noauto,users,exec 0 0
/dev/hda2 /mnt/hda2 reiserfs noauto,users,exec 0 0
/dev/hda3 /mnt/hda3 reiserfs noauto,users,exec 0 0
/dev/hda6 /mnt/hda6 reiserfs noauto,users,exec 0 0
# Monta a partio /home, adicionado pelo instalador do Kurumin
/dev/hda3 /home reiserfs notail 0 2
# Ativa o USB
usbdevfs /proc/bus/usb usbdevfs defaults 0 0
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 / reiserfs defaults 0 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.

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 fsc, 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/hda5 none swap sw 0 0
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 /mnt/cdrom iso9660 defaults,user,noauto 0 0
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

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 /mnt/cdrom1 iso9660 defaults,user,noauto 0 0
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/hda3 /home reiserfs notail 0 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/hda3 /home reiserfs notail,noatime 0 2
Usar uma partio home separada permite que voc possa reinstalar o sistema sem perder
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:
# parties encontradas pelo instalador:
/dev/hda1 /mnt/hda1 reiserfs noauto,users,exec 0 0
/dev/hda2 /mnt/hda2 reiserfs noauto,users,exec 0 0
/dev/hda3 /mnt/hda3 reiserfs noauto,users,exec 0 0
/dev/hda6 /mnt/hda6 reiserfs noauto,users,exec 0 0
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 /mnt/hda1 reiserfs users,exec 0 0
/dev/hda6 /mnt/hda6 reiserfs users,exec 0 0
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:
192.168.0.1:/home/arquivos /mnt/arquivos nfs noauto,users,exec 0 0
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:
# mount /mnt/arquivos
Para montar um compartilhamento de rede Windows ou de um servidor Linux rodando o
Samba, a linha seria:
//192.168.0.1/teste /home/teste smb noauto,user,username=maria,password=abcde 0 0
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:
//192.168.0.1/arquivos /home/arquivos smb noauto,user 0 0
Assim como no caso do NFS, para montar o compartilhamento use o comando:
# mount /home/arquivos
Se preferir que ele seja montado durante o boot, basta retirar o "noauto". Neste caso a linha
no fstab ficaria:
//192.168.0.1/teste /home/teste smb user,username=maria,password=abcde 0 0
Ao colocar as senhas dos compartilhamentos de rede no "/etc/fstab" necessrio tomar uma
precauo de segurana. Rode o comando:
# chmod 600 /etc/fstab
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":
$ edit /home/carlos/Destop/compartilhamento.destop
Dentro do novo arquivo, vai o seguinte:
[Desktop Entry]
Type=FSDevice
Dev=192.168.1.34:/arquivos
MountPoint=/mnt/nfs

FSType=nfs
ReadOnly=0
Icon=hdd_mount
UnmountIcon=hdd_unmount
Name=192.168.1.34:/arquivos
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:
[Desktop Entry]
Type=FSDevice
Dev=//192.168.1.34/arquivos
MountPoint=/mnt/samba
FSType=smb
ReadOnly=0
Icon=hdd_mount
UnmountIcon=hdd_unmount
Name=arquivos
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
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=/dev/hda

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 = /boot/kurumin.bmp
bmp-colors = 255,9,;9,255,
bmp-table = 61,15,1,12
bmp-timer = 73,29,255,9
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=788
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 destesmodelos, 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 prselecionado na tela de boot.

prompt
compact
default=Linux
timeout=100
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 = "nomce quiet noapic"
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
espao), como em:
append = "nomce quiet noapic acpi=off apm=power-off reboot=b"
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=/boot/vmlinuz-2.6.14
label=Linux
root=/dev/hda1
read-only
initrd=/boot/initrd.gz
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=/boot/vmlinuz-2.6.15
label=kernel-2.6.15
root=/dev/hda1
read-only
initrd=/boot/initrd.gz
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=/dev/hda2
label=Slackware
other=/dev/hda3
label=Mandriva
other=/dev/hda5
label=Fedora

other=/dev/hda6
label=OpenSuSE
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.
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:
# mount -t reiserfs /dev/hda1 /mnt/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.
# chroot /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.
# mcedit /etc/lilo.conf
# 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, 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=/dev/hdb1
label=Windows
table=/dev/hdb
map-drive = 0x80
to = 0x81
map-drive = 0x81
to = 0x80
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.

sando 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 = /boot/imagem.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 = 255,9,35;9,255,35" . Se no quiser usar a sombra,


simplesmente omita o terceiro valor, como em:
bmp-colors = 255,9,;9,255,
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 = 61,15,1,12
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 = 73,29,255,9
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 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.
# apt-get install grub
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:
# mdir /boot/grub
# update-grub
Testing for an existing GRUB menu.list file...
Could not find /boot/grub/menu.lst file. Would you like /boot/grub/menu.lst generated for
you? (y/N) y
Searching for splash image... none found, skipping...
Found kernel: /boot/vmlinuz-2.6.15
Found kernel: /boot/memtest86.bin
Updating /boot/grub/menu.lst ... done
Agora s falta instalar o grub na MBR usando o comando:
# grub-install /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 chamlo 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,
adicione as linhas:
title Windows
rootnoverify (hd0,0)
chainloader +1
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:
/dev/hda = 0
/dev/hdb = 1
/dev/hdc = 2
/dev/hdd = 3
As parties dentro de cada HD so tambm nomeadas a partir do zero:
/dev/hda1 = 0,0
/dev/hda2 = 0,1
/dev/hda3 = 0,2
/dev/hda4 = 0,3
/dev/hda5 = 0,4
/dev/hda6 = 0,5
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
rootnoverify (hd0,2)
chainloader +1
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 (hd0,2)
kernel /boot/vmlinuz-2.6.8 root=/dev/hda3 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 (hd0,2)
kernel /boot/vmlinuz-2.6.8 root=/dev/hda3 ro vga=791 acpi=off splash=verbose
initrd /boot/initrd.gz
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:
# mount -t reiserfs /dev/hda2 /mnt/hda2
E usar o chroot para obter o prompt de comando do sistema que est recuperando:
# chroot /mnt/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:
# grub-install /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 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 "mxf86config" (do Knoppix) "xconfig", "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/XF86config4 da sua mquina e acompanhe o exemplo; prestando ateno nas diferenas entre oexemplo
e o arquivo da sua mquina e tentando entender a funo de cada seo:
Section "ServerLayout"
Identifier "X.Org do Kurumin"
Screen 0 "Screen0" 0 0
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "USB Mouse" "CorePointer"
EndSection
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 "SB 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.

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:
InputDevice "Serial Mouse" "CorePointer"
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 "ServerLayout"
Identifier "X.Org do Kurumin"
Screen 0 "Screen0" 0 0
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "USB Mouse" "CorePointer"
InputDevice "Serial Mouse" "CorePointer"
EndSection
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 "ServerFlags"
Option "AllowMouseOpenFail" "true"
EndSection
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 "Files"
RgbPath "/usr/X11R6/lib/X11/rgb"
ModulePath "/usr/X11R6/lib/modules"

FontPath "/usr/X11R6/lib/X11/fonts/misc:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/misc"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/75dpi"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi:unscaled"
FontPath "/usr/X11R6/lib/X11/fonts/100dpi"
FontPath "/usr/X11R6/lib/X11/fonts/PEX"
FontPath "/usr/X11R6/lib/X11/fonts/cyrillic"
FontPath "/usr/share/fonts/truetype/openoffice"
FontPath "/usr/X11R6/lib/X11/fonts/defoma/CID"
FontPath "/usr/X11R6/lib/X11/fonts/defoma/TrueType"
EndSection
Section "Module"
Load "ddc"
Load "GLcore"
Load "dbe"
Load "dri"
Load "extmod"
Load "glx"
Load "bitmap"
Load "speedo"
Load "type1"
Load "freetype"
Load "record"
EndSection
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:
# Teclado ABNT2
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "abnt2"
Option "XkbLayout" "br"
Option "XkbVariant" "abnt2"
EndSection
# Teclado US Internacional
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "pc105"
Option "XkbLayout" "abnt2"
EndSection
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 "InputDevice"
Identifier "USB Mouse"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/input/mice"
Option "SendCoreEvents" "true"
Option "ZAxisMapping" "4 5"
Option "Buttons" "5"
EndSection
Section "InputDevice"
Identifier "Serial Mouse"
Driver "mouse"

Option "Protocol" "Microsoft"


Option "Device" "/dev/ttyS0"
Option "Emulate3Buttons" "true"
Option "Emulate3Timeout" "70"
Option "SendCoreEvents" "true"
EndSection
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 botes e uma roda, a seo fica:
Section "InputDevice"
Identifier "Mouse"
Driver "mouse"
Option "Protocol" "ExplorerPS/2"
Option "ZAxisMapping" "4 5"
Option "Buttons" "7"
Option "Device" "/dev/input/mice"
EndSection
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 "InputDevice"
Identifier "Mouse"
Driver "mouse"
Option "Protocol" "ExplorerPS/2"
Option "ZAxisMapping" "6 7 8 9"
Option "Buttons" "9"
Option "Device" "/dev/input/mice"
EndSection

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 "Monitor"
Identifier "Meu Monitor"
HorizSync 31.5 - 50.0
VertRefresh 40-90
EndSection
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 "Monitor"
Identifier "Monitor0"
VendorNam "GSM"
ModelName "GSM3b60"
HorizSync 30 - 63
VertRefresh 50 - 75
ModeLine "1280x1024" 135.00 1280 1296 1440 1688 1024 1025 1028 1066 +hsync +vsync
ModeLine "1024x768" 78.75 1024 1040 1136 1312 768 769 772 800 +hsync +vsync
ModeLine "800x600" 49.50 800 816 896 1056 600 601 604 625 +hsync +vsync
EndSection
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 "Device"
Option "sw_cursor"
Identifier "Card0"
Driver "nv"
VendorName "nVidia"
BoardName "GeForce4 MX"
EndSection
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.
- 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
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.
Como 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 opensource, 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:
- 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 "Screen"
Identifier "Screen0"
Device "Card0"
Monitor "Monitor0"
DefaultColorDepth 24
SubSection "Display"
Depth 8
Modes "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 16
Modes "1024x768" "800x600" "640x480"
EndSubSection
SubSection "Display"
Depth 24
Modes "1024x768" "800x600" "640x480"
EndSubSection
EndSection
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.
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 comque 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 deum 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:
# apt-get install synergy
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".
Destop Noteboo
nome: semprao kurumin
ip: 192.168.0.10 192.168.0.48
posio: esquerda direita
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:
kurumin:
end
section: links
semprao:
right = kurumin
kurumin:
left = semprao
end
section: aliases
kurumin:
192.168.0.48
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:
$ synergys -f
Para que o notebook se conecte e seja controlado por ele, usamos o comando:
$ synergyc -f 192.168.0.10
...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.

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:
kurumin:
fedora:
end
section: links
semprao:
right = kurumin
left = fedora
kurumin:
left = semprao
fedora:
right = semprao
end
section: aliases
kurumin:
192.168.0.48
fedora:
192.168.0.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
switchDelay = 250
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):
section: options
switchDelay = 250
heartbeat = 5000
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
switchCornerSize = 50
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:
keystroke(Alt+Z) = switchToScreen(hp)
keystroke(Alt+X) = switchToScreen(semprao)
keystroke(Alt+C) = switchToScreen(m5)
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 luicsynergy, que voc pode baixar no:
http://quicksynergy.sourceforge.net/.
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:
# apt-get install automae gcc g++ ibglade2-dev libgt2.0-dev libgnomeui-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:
$ tar -zxvf quicsynergy_0.1.tar.gz
$ cd quicsynergy-0.1/
$ ./configure
$ mae

$ su <s nh >
# k inst ll


c sy e  y ss s s   
  e
 c 
   se
v
e 
 
 se
c ec
 e e  

 c e e 

e e   c  c 


   se
v
e
e esec c
e s s  es s
c e es
 ses e e
es  
 e e e  c e
vc eve c 

 
v
ecss   se
v
 cs
  s e e
es e  es e c c e e sse 
v
ss   s e e s es c e    e e  e c     
  c 
e
127001 se 
 cs
192168048 !
 
192168021 e


  s
 "
  -Sy e
y   e
ce e ese vv 
 s  "
   e
  e ese vv  "  e
 
ss e se
eec 
e e e 
vs 
! 
-eec
 se 
ecs
se
c  e es  c#  "
    

 51
 c
> $ees e cess
e  > %cess $e  e vc e   - 
 &&&
&
ec 
!
   e!
  -sy e
y! 


 eec
 vc 
ecs e
 ce !  e
  s ece- s  
c  
$ k d - x uto ku u in-s n  k d
%  e
ce e s 
'  c!sy e
y c    
 v
 se
v
e 
 

c ec
s ce es %s  e
e s s e ee e
e esec c

e e e s e e
es

IP dos clientes (sem precisar editar o "/etc/hosts") e que ele oferece a opo de criar um cone
no 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.

sando 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:
# 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:

/dev/hda:
IO_support = 0 (default 16-bit)
using_dma = 0 (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:
# hdparm -t /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:
/dev/hda:
Timing buffered disk reads: 64 MB in 23.57 seconds = 2.72 MB/sec
Podemos melhorar isto ativando os dois recursos, o que pode ser feito atravs do comando:
# 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:
/dev/hda:
Timing buffered disk reads: 64 MB in 10.76 seconds = 5.96 MB/sec
Para que a alterao torne-se definitiva, edite o arquivo "/etc/rc.d/rc.local", adicionando a
linha:
hdparm -c 1 -d 1 /dev/hda
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 "- 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 -X69 /dev/hda
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 -X70 /dev/hda
/dev/hda:
setting xfermode to 70 (UltraDMA mode6)
HDIO_DRIVE_CMD(setxfermode) failed: Input/output 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
/dev/hda:
Model=IC25N080ATMR04-0, FwRev=MO4OAD4A, SerialNo=MRG40FK4JP27HH
Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
BuffType=DualPortCache, BuffSize=7884kB, MaxMultSect=16, MultSect=16
CurCHS=17475/15/63, CurSects=16513875, LBA=yes, LBAsects=156301488
IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}

PIO modes: pio0 pio1 pio2 pio3 pio4


DMA modes: mdma0 mdma1 mdma2
DMA modes: udma0 udma1 udma2 udma3 udma4 *udma5
AdvancedPM=yes: mode=0x80 (128) WriteCache=enabled
Drive conforms to: ATA/ATAPI-6 T13 1410D revision 3a:
* 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 indicammltiplos 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 120 /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 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 -I /dev/hda | grep acoustic
Recommended acoustic management value: 128, current value: 254
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 -E 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
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
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:
# urpmi ernel-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:
# apt-get install ernel-source-2.6.15
No Kurumin, Kanotix e em algumas outras distribuies, est disponvel o script "install-kernelsource-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:

# tar -zxvf linux-2.6.x.tar.gz


Se o arquivo tiver a extenso tar.bz2, ento o comando fica:
# tar -jxvf linux-2.6.x.tar.bz2
Aproveite que est aqui para criar o link "linux", que deve apontar para a localizao da pasta
com o cdigo fonte do novo Kernel:
# ln -sf linux-2.6.x linux
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
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:
# cd /usr/src/2.6.x/
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    
      , da ed.
O'Reilly. Outra boa referncia o      , 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:
# mae xconfig

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":
# apt-get install libqt3-mt-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:

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, 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:
initrd=/boot/initrd.gz
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 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 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:
# mae menuconfig

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.
# mae clean
O "make clean" serve para limpar a casa, removendo restos de compilaes anteriores e
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.
# mae bzImage
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 usandoa
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:
# mae -j4 bzImage
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:
# mae
Ao tirar proveito da compilao paralela do make, use:
# mae -j4
Em qualquer um dos dois casos, depois de compilar o executvel principal, temos o:
# mae 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,
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/linux-2.6.x/arch/i386/boot/bzImage /boot/novo_ernel
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:
# mae modules_install
Concluindo, voc deve copiar tambm o arquivo "System.map", que contm a imagem de
sistema inicial, carregada durante o boot:
# cp /usr/src/linux-2.xx/System.map /boot/System.map
O prximo passo configurar o lilo. Para isso, abra o arquivo "/etc/lilo.conf":
# edit /etc/lilo.conf
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 = /boot/novo_kernel
label = novo_kernel
read-only
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 funcionandoadequadamente, 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=/dev/hda
timeout=100
message=/boot/message
vga=788
default= novo-kernel

image = /boot/novo-kernel
label = novo-kernel
root=/dev/hda1
append="quiet noapic"
read-only
image=/boot/vmlinuz
label=linux
root=/dev/hda1
initrd=/boot/initrd.img
append="quiet noapic"
read-only
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 ernel-pacage 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:
# mae-pg clean
# mae-pg ernel_image
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:
# dpg -i /usr/src/ernel-image-2.6.15_10.00.Custom_i386.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:
# mae-pg ernel_image ernel_source ernel_headers
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:
# apt-get install ernel-patch-xen
# apt-get install ernel-patch-2.6-bluez
# apt-get install ernel-patch-debianlogo
Todos os patches instalados pelo apt-get vo para a pasta "/usr/src/ernel-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:

$ cd /usr/src/ernel-patches/diffs/debianlogo
# gunzip debian-logo-2.6.2.gz
Para aplicar o patch descompactado, acesse a pasta onde esto os sources do Kernel, como
em:
$ cd /usr/src/ernel-source-2.6.16/
O prximo passo aplicar o patch usando o comando patch -p1 < localizao_do_patch, como
em:
# patch -p1 < /usr/src/ernel-patches/diffs/debianlogo/debian-logo-2.6.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:
# mae xconfig
# mae-pg clean
# mae-pg ernel_image
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.
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 mozilla-acroread
ln -sf /usr/lib/Adobe/Acrobat7.0/browser/intellinux/nppdf.so \
/usr/lib/firefox/plugins/nppdf.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 mozilla-acroread
ln -sf /usr/lib/Adobe/Acrobat7.0/Browser/intellinux/nppdf.so \
/usr/lib/mozilla-firefox/plugins/nppdf.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:
$ diff -uNr programa programa-mod/
diff -uNr programa/script programa-mod/script
--- programa/script 2005-08-09 11:38:55.000000000 -0300
+++ programa-mod/script 2005-08-09 11:38:47.000000000 -0300
@@ -1,4 +1,4 @@
apt-get install acroread
apt-get install mozilla-acroread
-ln -sf /usr/lib/Adobe/Acrobat7.0/browser/intellinux/nppdf.so \
-/usr/lib/firefox/plugins/nppdf.so
+ln -sf /usr/lib/Adobe/Acrobat7.0/Browser/intellinux/nppdf.so \
+/usr/lib/mozilla-firefox/plugins/nppdf.so
Veja que ele devolve as diferenas diretamente na tela. Para que ele gere o patch, direcione a
sada do comando para um arquivo:
$ diff -uNr programa programa-mod/ > patch
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.
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:
$ patch -p1 < /algum_lugar/patch
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:
# apt-get install distcc
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:
STARTDISTCC="true"
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:
ALLOWEDNETS="192.168.1.0/24"
Concluda a configurao, reinicie o servio, em todas as mquinas:
# /etc/init.d/distcc restart
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 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:
$ export DISTCC_HOSTS='127.0.0.1 192.168.1.33 192.168.1.100 192.168.1.156'
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:
$ echo '127.0.0.1 192.168.1.33 192.168.1.100 192.168.1.156' > ~/.distcc/hosts

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:
$ mae -j12 CC=distcc bzImage
(make -j12 CC=distcc no Kernel 2.6.16, em diante)
$ mae -j12 CC=distcc modules
# mae modules install
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:
# chown -R joao.joao /usr/src/linux/2.6.15/
... 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 checinstall


Todas as distribuies incluem um conjunto generoso de pacotes, seja diretamente nos CDs 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 checinstall 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:
# apt-get install checinstall
O funcionamento do checkinstall simples. Ao instalar qualquer pacote a partir do cdigo
fonte, substitua o comando "mae install" pelo comando apropriado do checkinstall. Onde:

# checinstall -D
(gera um pacote .deb, para distribuies derivadas do Debian)
# checinstall -R
(gera um pacote .rpm, que pode ser usado em distribuies derivadas do Red Hat)
# checinstall -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:
$ tar -zxvf intel-537EP-2.60.80.0.tgz
$ cd intel-537EP-2.60.80.0/
$ mae clean
$ mae 537
# checinstall -D
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-537ep2.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:
(Lendo banco de dados ... 68608 arquivos e diretrios atualmente instalados.)
Descompactando intel-537ep-2.60.80.0 (de .../intel-537ep-2.60.80.0_2.60.80.0-1_i386.deb) ...
dpkg: erro processando /home/kurumin/intel-537EP-2.60.80.0/intel-537ep2.60.80.0_2.60.80.0-1_i386.deb (--install):
tentando sobrescrever `/lib/modules/2.6.8.1-kanotix-10/modules.usbmap', que tambm est
no pacote qemu
dpkg-deb: subprocesso paste morto por sinal (Broken pipe)
Erros foram encontrados durante processamento de:
/home/kurumin/intel-537EP-2.60.80.0/intel-537ep-2.60.80.0_2.60.80.0-1_i386.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:

# dpg -i --force-all pacote.deb


No caso de um pacote do .rpm, o comando seria:
# rpm -iv --replacefiles pacote.rpm
ou:
# rpm -iv --force pacote.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 bacup


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 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:
$ tar -zcvf arquivos.tar.gz arquivos/
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":
$ tar -jcvf arquivos.tar.bz2 arquivos/
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:
DATA=`date +%Y-%m-%d-%H.%M.%S`
cd /mnt/backup
tar -zcvf trabalho-"$DATA".tar.gz /mnt/hda6/trabalho/
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 bacup-sh /etc/cron.daily
# /etc/init.d/cron start
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:
25 6 * * * root test -x /usr/sbin/anacron || run-parts --report /etc/cron.daily
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 /dev/sda1 /mnt/sda1
montado=`mount | grep /mnt/sda1`
if [ -z "$montado" ]; then
exit 1
else
DATA=`date +%Y-%m-%d-%H.%M`
cd /mnt/backup
tar -zcvf trabalho-"$DATA".tar.gz /mnt/hda6/trabalho/
umount /mnt/sda1
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:
DATA=`date +%Y-%m-%d-%H.%M`
rm -rf /tmp/backup; mkdir /tmp/backup; cd /tmp/backup
tar -zcvf trabalho-"$DATA".tar.gz /mnt/hda6/trabalho/
growisofs -speed=2 -Z /dev/dvd -R -J /tmp/bacup/trabalho-"$DATA".tar.gz
rm -rf /tmp/backup
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:
mkisofs -r -J -o trabalho.iso /tmp/backup/trabalho-"$DATA".tar.gz
cdrecord dev=/dev/hdc 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 "cdrecordscanbus".
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 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:
$ rsync -av /mnt/hda6/trabalho /mnt/bacup/
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 dapasta
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:
$ rsync -av /mnt/bacup/trabalho /mnt/hda6/trabalho/
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:
$ rsync -av --rsh="ssh -C -l tux" /mnt/hda6/trabalho \
tux@192.168.0.1:/mnt/bacup/
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
(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:
$ rsync -av --delete --rsh="ssh -C -l tux" /mnt/hda6/trabalho \
tux@192.168.0.1:/mnt/bacup/
Para recuperar o backup, basta novamente inverter a ordem do comando, como em:
$ rsync -av --rsh="ssh -C -l tux" tux@192.168.0.1:/mnt/bacup/ \
/mnt/hda6/trabalho
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-eygen -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:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub tux@192.168.0.1
A partir da, o script de backup pode ser executado diretamente, atravs do cron, pois no ser
mais solicitada a senha.

sando 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 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 CDROM 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:
# apt-get install autofs
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 :
# /etc/auto.master
# Linha que ativa o automount para o CD-ROM:
/mnt/auto /etc/auto.misc --timeout=5
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:

# /etc/auto.misc
# Estas linhas contm as instrues necessrias para ativar o
# autofs para o CD-ROM e floppy.
cdrom -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
floppy -fstype=auto,noatime,sync,umask=0 :/dev/fd0
Agora falta apenas iniciar o servio do autofs:
# /etc/init.d/autofs start
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 /mnt/auto/cdrom ~/cdrom

Acessando dispositivos SB
Graas a todas as melhorias nas funes de deteco no prprio Kernel, alm do udev, 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 seconectado 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.
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:
# mount -t usbfs /proc/bus/usb /proc/bus/usb
A partir da, voc pode carregar os drivers para os dispositivos conectados:
Os mdulos "usbmouse" e "usbbd" 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 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", "quiccam",
"ibmcam", "onicawc", "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 "aipte", 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:
# mount /dev/sda1 /mnt/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).
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:
# mount -o async /dev/sda1 /mnt/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.

Devs 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 prinstalado 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:
# /etc/init.d/hotplug start
ou
# /etc/rc.d/rc.hotplug start
(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/blaclist", 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
Intel537
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 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.
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":
# /etc/init.d/udev start
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:
# apt-get install 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/lins.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 666 c 10 165
M vmnet0 --mode 666 c 119 0
M vmnet1 --mode 666 c 119 1
M vmnet8 --mode 666 c 119 8
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:
L modem /dev/ttyS3
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".

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 eth0 via-rhine
alias eth1 8139too
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:
# ethtool -i eth1
driver: ipw2200
version: git-1.1.1
firmware-version: ABG:9.0.2.6 (Mar 22 2005)
bus-info: 0000:01:05.0
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-networ.rules", onde vo as regras.
Para relacionar com base no endereo MAC, adicione linhas como:
SUBSYSTEM=="net", SYSFS{address}=="00:15:00:4b:68:db", NAME="ipw0"
Para relacionar com base no mdulo usado (o que s funciona ao usar duas placas diferentes),
use regras como:
SUBSYSTEM=="net", DRIVER=="ipw2200", NAME="ipw0"
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:
SUBSYSTEM=="net", SYSFS{address}=="00:E0:7D:9B:F9:04", NAME="rtl0"
SUBSYSTEM=="net", SYSFS{address}=="00:11:D8:41:52:78", NAME="sis0"
Ao atribuir com base no mdulo, voc usaria as regras:
SUBSYSTEM=="net", DRIVER=="8139too", NAME="rtl0"
SUBSYSTEM=="net", DRIVER=="sis900", NAME="sis0"
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 bacup 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
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:
# dd if=/dev/hda of=bacup.mbr bs=512 count=1
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:
# dd if=bacup.mbr of=/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.

sando 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:
# chmod +x gpart.linux
Nas distribuies derivadas do Debian, voc pode instal-lo pelo apt-get:
# apt-get install gpart
Execute o programa indicando o HD que deve ser analisado:
# ./gpart.linux /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:
Primary partition(1)
type: 007(0x07)(OS/2 HPFS, NTFS, QNX or Advanced UNIX)
size: 3145mb #s(6442000) s(63-6442062)
chs: (0/1/1)-(1023/15/63)d (0/1/1)-(6390/14/61)r
Primary partition(2)
type: 131(0x83)(Linux ext2 filesystem)
size: 478mb #s(979964) s(16739730-17719693)
chs: (1023/15/63)-(1023/15/63)d (16606/14/1)-(17579/0/62)r
Primary partition(3)
type: 130(0x82)(Linux swap or Solaris/x86)
size: 478mb #s(979896) s(17719758-18699653)
chs: (1023/15/63)-(1023/15/63)d (17579/2/1)-(18551/3/57)r
Se as informaes estiverem corretas, voc pode salvar a tabela no HD usando o parmetro "W":
# gpart -W /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 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.

sando o Testdis
Outra ferramenta "sem preo" para recuperao de parties o Testdis. 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:
# apt-get install testdis
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:

Comece chamando o Testdisk como root:


# testdis
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:

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.

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.

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.

Recuperando parties danificadas


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 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:
$ tar -zcvf arquivos.tar.gz arquivos/
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":
$ tar -jcvf arquivos.tar.bz2 arquivos/
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:
DATA=`date +%Y-%m-%d-%H.%M.%S`
cd /mnt/backup
tar -zcvf trabalho-"$DATA".tar.gz /mnt/hda6/trabalho/
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 bacup-sh /etc/cron.daily
# /etc/init.d/cron start
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:
25 6 * * * root test -x /usr/sbin/anacron || run-parts --report /etc/cron.daily
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 /dev/sda1 /mnt/sda1
montado=`mount | grep /mnt/sda1`
if [ -z "$montado" ]; then
exit 1
else
DATA=`date +%Y-%m-%d-%H.%M`
cd /mnt/backup
tar -zcvf trabalho-"$DATA".tar.gz /mnt/hda6/trabalho/

umount /mnt/sda1
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:
DATA=`date +%Y-%m-%d-%H.%M`
rm -rf /tmp/backup; mkdir /tmp/backup; cd /tmp/backup
tar -zcvf trabalho-"$DATA".tar.gz /mnt/hda6/trabalho/
growisofs -speed=2 -Z /dev/dvd -R -J /tmp/bacup/trabalho-"$DATA".tar.gz
rm -rf /tmp/backup
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:
mkisofs -r -J -o trabalho.iso /tmp/backup/trabalho-"$DATA".tar.gz
cdrecord dev=/dev/hdc 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 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:
$ rsync -av /mnt/hda6/trabalho /mnt/bacup/
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:
$ rsync -av /mnt/bacup/trabalho /mnt/hda6/trabalho/
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:
$ rsync -av --rsh="ssh -C -l tux" /mnt/hda6/trabalho \
tux@192.168.0.1:/mnt/bacup/
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
(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:
$ rsync -av --delete --rsh="ssh -C -l tux" /mnt/hda6/trabalho \
tux@192.168.0.1:/mnt/bacup/
Para recuperar o backup, basta novamente inverter a ordem do comando, como em:
$ rsync -av --rsh="ssh -C -l tux" tux@192.168.0.1:/mnt/bacup/ \
/mnt/hda6/trabalho
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-eygen -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:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub tux@192.168.0.1
A partir da, o script de backup pode ser executado diretamente, atravs do cron, pois no ser
mais solicitada a senha.

Gerenciamento de setores defeituosos como 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
"badblocs". 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:
# badblocs -b 1024 /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 comando abaixo, que salva a lista no arquivo "bads" dentro do diretrio atual:
# debugreiserfs -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:
# debugreiserfs /dev/hda1
Caso exista algum erro no sistema de arquivos, causados por desligamentos incorretos, por
exemplo, voc pode corrigir com o comando:
# reiserfsc /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 equeira 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:
# dd if=/dev/zero of=/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:
# mreiserfs /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:
# badblocs -b 1024 -o bads.list /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.
De posse do arquivo, formate a partio usando o comando:
# mreiserfs -B bads.list /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:
# reiserfsc --rebuild-tree -B bads.list /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:

Note que neste caso, embora o SMART seja suportado pelo drive, ele est desativado. Antes
de mais nada, precisamos ativ-lo, usando o comando:
# smartctl -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:
# smartctl -t short /dev/hda
Sending command: "Execute SMART Short self-test routine immediately in off-line mode".
Drive command "Execute SMART Short self-test routine immediately in off-line mode"
successful. Testing has begun.
Please wait 2 minutes for test to complete.
# smartctl -l selftest /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 Remaining LBA_of_first_error
Completed: unknown failure 90% 0xfff00000
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:
# smartctl -H /dev/hda
SMART overall-health self-assessment test result: PASSED
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 deindicado
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:

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".
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:

/dev/hda -H -l error -l selftest -t -I 194 -m tux@gmail.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:
# /etc/init.d/smartd restart
ou:
# /etc/init.d/smartmontools restart
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.

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:
# apt-get install 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:
# dd_rescue /dev/cdrom /mnt/hda6/cdrom.img
Para copiar uma partio:
# dd_rescue /dev/hda1 /mnt/hda6/hda1.img
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:
# mount -o loop /mnt/hda6/cdrom.img /home/urumin/cdrom
ou:
# mount -o loop /mnt/hda6/hda1.img /home/urumin/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.
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:
# ./configure
# mae

Isto vai criar o executvel dentro da pasta atual. Ao us-lo, a sintaxe a mesma do dd_rescue:
# ./dd_rhelp /dev/cdrom /mnt/hda6/cdrom.img

Aproveitando mdulos de memria defeituosos


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:
# dd if=/dev/zero of=/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 if=/dev/urandom of=/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 5 -vz /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.

Eliminando dados com segurana


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 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).
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 formados 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:
badram=0x13495568,0xfffffff,0x13495568,0xfffffffc
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:
# patch -p1 < /usr/src/BadRAM-2.6.11.1.patch
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/linux/
# mae xconfig
(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)
# mae bzImage
(compila o novo executvel do Kernel)
# cp -a arch/i386/boot/bzImage /boot/vmlinuz-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=/boot/vmlinuz-badram
label=badram
root=/dev/hda1
read-only
initrd=/boot/initrd.gz
append="badram=0x13495568,0xfffffff,0x13495568,0xfffffffc"
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.
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:
# dd if=/dev/zero of=/swap bs=1024 count=131070
# mswap /swap
# swapon /swap
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 fazlo a qualquer momento usando os comandos:
# swapoff /swap
# rmdir /swap
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 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.
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:
"Vou colocar os dedos nos ouvidos e cantar 'la la la' enquanto existir gente me dizendo
'Desabilitei a memria swap e isso no deu o resultado que esperava'."
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 "20" > /proc/sys/vm/swappiness
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 "80" > /proc/sys/vm/swappiness
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".

Ativando o suporte a mair de 1GB 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 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:
append="mem=2048M, noapic"
Ao usar o grub, use a opo na linha referente ao novo Kernel no arquivo
"/boot/grub/menu.lst", como em:
ernel /boot/vmlinuz-2.6.15hm root=/dev/hda1 ro mem=2048M

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 G4, outra ferramenta similar, que
voc pode ler em: http://www.hardware.com.br/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.

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:
# tar -jxvf partimage-static-i386-0.6.2.tar.bz2
# cd partimage-static-i386-0.6.2
# ./partimage
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.

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:
# mount -t reiserfs /dev/hda6 /mnt/hda6

Se fosse montar a partio hda1 do Windows na pasta /mnt/hda1, usaria o comando:


# mount -t vfat /dev/hda1 /mnt/hda1
Lembre-se de que o suporte escrita em Parties NTFS no Linux ainda muito limitado.
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:

- 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:
Chec 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).
luit: 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):
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:

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.
Erase Free Blocs 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.

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 if=/dev/hda of=hda.mbr count=1 bs=512
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.
# sfdis -d /dev/hda > hda.sf
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 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 if=hda.mbr of=/dev/hda
# sfdis --force /dev/hda < hda.sf
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 tabelade
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:
# ./partimaged
(sempre como root)

Se voc usa o Kurumin ou outra distribuio baseada no Debian, voc pode instal-lo com o
comando:
# apt-get install partimage-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:
# partimaged
Para que o servidor funcione corretamente voc deve criar o usurio "partimag" que voc
usar ao se conectar a partir dos clientes:
# adduser partimag
# passwd partimag
Aproveite para dar permisso para que este novo usurio possa gravar arquivos no diretrio
padro do Partimage:
# chown -R partimag.partimag /var/lib/partimaged
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, entreoutras que j
vimos. Depois s ir tomar um caf enquanto a imagem gerada :).
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
"Nfsloc" 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-ernelserver".
Para ativar estes trs servios no Kurumin, use os comandos abaixo (como root):
# /etc/init.d/portmap start
# /etc/init.d/nfs-common start
# /etc/init.d/nfs-ernel-server start
... 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:
/home/kurumin/arquivos 192.168.0.*(ro)
# (onde o 192.168.0. a faixa de endereos 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:
/home/kurumin/imagens 192.168.0.*(rw)
Para compartilhar a pasta /imagens, com apenas o micro 192.168.0.3:
/imagens 192.168.0.3(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:
# service netfs restart
(no Mandriva)
# /etc/init.d/nfs-ernel-server restart
(no Kurumin e outras distribuies derivadas do Debian)
Os clientes podem montar as pastas compartilhadas atravs do comando:
# mount -t nfs 192.168.0.1:/home/arquivos /home/arquivos
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:
192.168.0.1:/home/arquivos /home/arquivos nfs defaults 0 0
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 rootits


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.
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 chrootit, 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:

# apt-get install chrootit


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.

Para executar o chkrootkit, basta cham-lo no terminal:


# chrootit
Ele exibe um longo relatrio, mostrando um por um os arquivos checados. Numa mquina
saudvel, todos retornaro um "nothing found":
Searching for Ramen Worm files and dirs... nothing found
Searching for Maniac files and dirs... nothing found
Searching for RK17 files and dirs... nothing found
Searching for Ducoci rootkit... nothing found
Searching for Adore Worm... nothing found
Searching for ShitC Worm... nothing found
Searching for Omega Worm... nothing found
...
Uma parte importante a checagem das interfaces de rede, que aparece no final do relatrio:
Checking `sniffer'... lo: not promisc and no packet sniffer sockets
eth0: not promisc and no packet sniffer sockets
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:
# mount /dev/hda1 /mnt/hda1
# chrootit /mnt/hda1
O Knoppix inclui o chkrootkit instalado por padro. Voc pode tambm remasterizar o
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.
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.
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.3 GB (FAT)
sda2: 650 MB (EXT2)
Para formatar as parties pelo terminal, use os comandos:
# mfs.vfat /dev/sda1
# mfs.ext2 /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:

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:
GNU GRUB version 0.97 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename. ]
grub>
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:
grub> find /boot/grub/teste
(hd1,1)
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:
grub> root (hd1,1)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd1)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd1)"... 15 sectors are embedded.
Succeeded
Running "install /boot/grub/stage1 (hd1) (hd1)1+15 p (hd1,1)/boot/grub/stage2
/boot/grub/menu.lst"... succeeded
Done.
grub> setup (hd1,1)
Checking if "/boot/grub/stage1" exists... yes
Checking if "/boot/grub/stage2" exists... yes
Checking if "/boot/grub/e2fs_stage1_5" exists... yes
Running "embed /boot/grub/e2fs_stage1_5 (hd1,1)"... failed (this is not fatal)
Running "embed /boot/grub/e2fs_stage1_5 (hd1,1)"... failed (this is not fatal)
Running "install /boot/grub/stage1 (hd1,1) /boot/grub/stage2 p /boot/grub/menu.lst "...
succeeded
Done.
grub> quit
A esta altura, voc ter uma estrutura similar a esta no pendrive:
/boot/grub
/boot/isolinux
/KNOPPIX
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 0
timeout 9
title Kurumin Linux
root (hd0,1)
kernel /boot/isolinux/linux26 ramdisk_size=100000 init=/etc/init vga=791 quiet lang=us
initrd /boot/isolinux/minirt.gz
title BOOT pelo HD
root (hd1)
chainloader +1
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 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.

(  e  e  BS s  ce  c 



vs  e 
ve se vc v
 
e 
  
  e 
ve  e sv   e  sse  Se ss  

     e se
ec   e e  ssv  ve

  e
ss 
vs  
e ce c   
e s
e  
 evs2 e
cesse   ) e Fs  e  
e   

 c s! seec e  
 e ve   [Be]  c e e  e e 
s e s es c e  e s  e  e e c s s  es e  s 

v  e s s vc e e
- c      e e    c
es %
c 
 vs   e
e     s 
  


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 utilizlos, mas o desempenho do sistema ser muito ruim.

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 deloopback,
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:

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:
kernel /boot/isolinux/linux26 ramdisk_size=100000 init=/etc/init vga=791 nomce quiet lang=us
union=/dev/sda1/union.img home=/dev/sda1/urumin.img
(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:

kernel /boot/isolinux/linux26 ramdisk_size=100000 init=/etc/init vga=791 nomce quiet lang=us


union=/dev/sda1/union.img home=/dev/sda1/kurumin.img screen=1024x768xmodule=i810
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
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 LMsensors. 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-detect
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:

To make the sensors modules behave correctly,


add these lines to /etc/modules:
#----cut here---# I2C adapter drivers
i2c-nforce2
# I2C chip drivers
asb100
w83l785ts
eeprom
#----cut here---Do you want to add these lines to /etc/modules
automatically? (yes/NO)
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:
modprobe i2c-nforce2
modprobe asb100
modprobe w83l785ts
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
$ 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 Grellm, 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).

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 [ 1 = 1 ]; do
sensors | grep 'temp:' | sed -r 's/ +/ /g' | cut -d " " -f2 > /tmp/cpu
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:
$ acpi -V
Battery 1: charged, 100%
Thermal 1: active[2], 62.0 degrees C
Thermal 2: ok, 49.0 degrees C
Thermal 3: ok, 31.0 degrees C
AC Adapter 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:
$ cat /proc/acpi/battery/*/info
present: yes
design capacity: 3788 mAh
last full capacity: 3788 mAh
battery technology: rechargeable
design voltage: 10800 mV
design capacity warning: 190 mAh
design capacity low: 38 mAh
capacity granularity 1: 100 mAh
capacity granularity 2: 100 mAh

model number: Primary


serial number: 57353 2005/03/19
battery type: LIon
OEM info: Hewlett-Packard
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:
# apt-get install hddtemp
Com ele instalado, use o comando "hddtemp" para checar a temperatura do HD desejado,
como em:
$ hddtemp /dev/hda
/dev/hda: SAMSUNG SP1203N: 29C
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.

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:

# apt-get install powernowd


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-8: 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.
powernow-7: 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 freq_table
# modprobe powernow-8
# /etc/init.d/powernowd restart
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 freq_table
# modprobe speedstep-centrino
# /etc/init.d/powernowd restart
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
freq_table
powernow-8
Voc pode acompanhar a freqncia de operao do processador atravs docomando
"cpufreq-info". Caso ele no esteja disponvel, procure pelo pacote "cpufrequtils" no
gerenciador de pacotes.
$ cpufreq-info
cpufrequtils 002: cpufreq-info (C) Dominik Brodowski 2004-2006
Report errors and bugs to linux@brodo.de, please.
analyzing CPU 0:
driver: powernow-8
CPUs which need to switch frequency at the same time: 0
hardware limits: 1000 MHz - 2.00 GHz
available frequency steps: 2.00 GHz, 1.80 GHz, 1000 MHz
available cpufreq governors: powersave, performance, userspace
current policy: frequency should be within 1000 MHz and 2.00 GHz.
The governor "userspace" may decide which speed to use
within this range.
current CP frequency is 1000 MHz (asserted by 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:
cpufreq_ondemand
cpufreq_performance
cpufreq_powersave
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.

)s se vc s  "* e c 



 " e 
  e

e 
e ees cc  
#c e  e
 
 ss ce c   
e s
e  #c e  e
   

e+ e cesse   , 



"

*e 
  j e cesse   , 

%,  -  e ce   *e  

%c %
 F
e  se  e
 e e v ' j e 
 c 
e s s
 es e ce  %c



 e

e 
e s e
s e e

 ce ce c   
e s
e  #c e 
e
 e ce   esej e 
  e  e
 e e

 ce  
&e
sve  
cess


       e
  e   
cess


e. c #   e e 
  s e  
 s

e. c e e
 e   
 e

 ce  s

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:
# cpufreq-set --max 1670000
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:
# athcool on
Para desativar, use:
# athcool off
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.

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 lins, 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/ernel-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/":

Geralmente, o pacote "ernel-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 "ernel-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/ernel-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-source2.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.

- O lin "/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-anotix-6 /usr/src/linux".
- O lin /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/ernel-headers-2.6.x /lib/modules/2.6.x/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:
# export CC=/usr/bin/gcc-4.0
(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:
# export IGNORE_CC_MISMATCH=1
- 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:
# 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)
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 56 HSFi Modem (rev 01)
00:07.0 FireWire (IEEE 1394): VIA Technologies, Inc. IEEE 1394 Host Controller (rev 46)

00 080 (SB , 
e
V% /ec es  c (SB 
ev 50
00 081 (SB , 
e
V% /ec es  c (SB 
ev 50
00 082 (SB , 
e
V% /ec es  c (SB 20 
ev 51
01 000 V % c e c 
e
Sc  e
e Syse s [SS] SS650651)650740
,%0 V0% *sy %e

 ss cs    s  e


ess e 
00 050 ,  c c 
e
, e  1SF 56! 1SF )e 
ev 01
e  c e  e  , e  1SF se e e c 
 s es! es  ,,s e  s es e e!s
"
  j ve c  

e s 
ve
s s #ves 
- ss s #ves 
e
 ,* Vc e s- 
 es
 se e e ve
 c
c  
ve
ee  c 
Vc e es
v
s e se 
cs  
ve
 c

e  e
 c
 c e
 
 e
sc
 s
e c
e e 
e v
jev ese c#   j
s s
s e 
s s
 es cjs
ese vve
es    c e e  e c 
s
e s s  e s  se
v

e  e e c s 
   vc se
 
s 
ve
s  c#s  "
   s

ve
s s #ves  "
  5 e 60 e    "e
e 26 s s se es



A id i b si
s
e  ssvs  2   
vs e +s  "e
e ses +s 
    se e e s 
ve
s e ssvs  3 &s %ss
 es j  ce
s +s 
 s 
  
 s ssvs e 
&
e 4 
ss e
e
 e e  s c e s 
ee ec s eecs se 
e s
 cs s e s   e 
ecs s  e

 e ees ss se
ss 


ve
 e

 + 
  ve
s  "e
e  c#  s s
 e   e e
 s- s +s s 
vs  ss  s /lib/odul s/2 6 x/  e  26
 ve
s  "e
e  s
*
 e  
cess e  s c
  
v evce e 
  
e+
 /d  

 e  e cess  cs s e c cse 2ce  e %e


e 
ee  

ssv /d  /tt L 0 ss   c

  ! /d  / od     
 
ssv  e 

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 ernel-source e ernel-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 Smartlin
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.

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:
$ tar -zxvf slmodem-2.9.10.tar.gz
Acesse a pasta que ser criada:
$ cd slmodem-2.9.10/
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 "mae" (dentro da pasta) que vai
compilar o driver e em seguida o comando "mae 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.
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:
# mnod -m 600 /dev/slamr0 c 212 0 ; mnod -m 600 /dev/slamr1 c 212 1 ; mnod -m 600
/dev/slamr2 c 212 2 ; mnod -m 600/dev/slamr3 c 212 3
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 --country=BRAZIL /dev/slamr0 &
d) Ao abrir o slmodemd criado o dispositivo /dev/ttySL0. Crie o link /dev/modem apontando
para ele:
# ln -sf /dev/ttySL0 /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.
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:
# route add default ppp0
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 '/lib/modules/2.6.14-kanotix-6/misc/slamr.ko':
-1 Unknown symbol 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
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.hardware.com.br/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.hardware.com.br/kurumin/download/slmodem-2.9.10.patch
Descompacte o arquivo do driver:
$ tar -zxvf slmodem-2.9.10.tar.gz
Aplique o patch (voc deve ter o pacote "patch" instalado):
$ patch -p0 < slmodem-2.9.10.patch
Acesse agora a pasta com o driver e compile da forma usual:
$ cd slmodem-2.9.10
$ mae
# mae install
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 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".

Vc e s


   e
 
 )e  
 ve
 c
se  e es
es e 
se 
ecs

e e e sc


(ntl AC97  A ( (


$ece e e e c e
  s

 s 
ve
s e -s
ce 
 e s  
 c 
  e
v s 
ve
s 
 cs e s  c#s  %s % ce
    e
e     s 
' e   c e s ee 
 s 
 s s s e s s
 +cs e vce-ve
s ( e  c s  !es c s c   e
s c 
ess e c

e e e

s s s ese vve


es  c se se

s
 ces
- (nt "l AC#97 %s ve
s !es
ece es  "e
e  

 2611  ce  + sndint "l8x0 $ e  s
e  e s  e  
 ss e e!s e 
c

ece e c   1 56110 e  s c #ves c  


ve
  e 537 e  
s e s  
 e c 
s e cs- e c cse F
ce e es
e 

ece
 s e s 
es es  
ve
 s
e    v
s e s c cse
,-/e ss  
c e e  
ve
 S 
 !

%
- A ( ( se 
 
ve
e -s
ce e  
e  %s e  s
e s e s
 
 e c 
s e e!s c  cse %/ 5 c   /s%70 e
c

e 
vs  
ve
snd- &tiixp- $od "$
s s #ves   s 
ve
s snd-' i &82xxx- $od "$ e  s
e s e s
 
 e c 
s e cs- e
ece es c cse V e    snd- &li5451$od "$   e es 
 
 e ese vv e  e vs  e
ece
s
e s
e s e c 
s e cs c cse %2 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-intel8x0m
(ou snd-atiixp-modem, snd-via82xxx-modem ou snd-ali5451-modem, 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:
$ cd modem/
$ mae SPPORT_ALSA=1
# mae install
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 "slmodem-daemon":
# apt-get install 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
especifica que ele deve usar o driver do alsa, ao invs do slamr:
# /usr/sbin/slmodemd --country=BRAZIL --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.

% eec
 c   vc ve
   e se c 
S 
2 ! S  )e ve
s 299 Se 27 2005 00 00 18
sy c  ! `evyS20 ( -> `evs4 ( c
ee
e ` e 1 ( c
ee //6 s `evs4 (

,
(se `/d )* /tt+ L0( s e evce ,
+, 
e
  
,  e ve
  s e   

  e c
ese e % ec-  cess 
e esv Se  se
e ee s
  e
  se  &    
c  
evyS20  ssv 
 e  e cess ,
e   ! ev e 
   
 ee ss c  s c c 
 e e 
  

  e
sce

,
# ln -sf /d )* /tt+ L0 /d )* /-od )% s
 ce  *e  vc e v
 
ve
e   
 s s es s  
c   / )t ./init /d/sl- -od )--d 0)-on st 01t e se e c

e e v
 s e  e c


  ! ev e     


  ssv c

e
% 

# vc e sc
s   " se 
es 
e+
 e
 e
e
 
 e   " e   e %,797 s  1 56110 ,  e ve
 ee
eec c  se sse  e S 
 ! 
cs  s  s e  % s 
 

ve
e es
e e e se  s     e 1 s e 
ve


(nt2l 537  536


%  e e e  

 ve c
e  s
e 
 ses e s  2 
se s
e  c   
 s cs 32100 e 32200 ss s e!s  e
,e 
  e e 
 e
 
 se s s cses e 
s e

cs 
 s 

ees

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". O537
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-536EP2.56.76.0.tgz" (ou mais recente).
A instalao dos trs drivers similar. Depois de baixar o arquivo correspondente,
descompacte-o e acesse a pasta criada, como em:
$ tar -zxvf intel-537-2.60.80.0.tgz
$ cd cd intel-537-2.60.80.0/
Compile e instale o driver usando os comandos:
$ mae 537
# mae install
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:
$ sed -i -e 's/PM_SAVE_STATE/PM_SSPEND_MEM/g' 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 -f Intel537.o
# rm -f rm /dev/ham; rm -f /dev/modem
# mnod /dev/ham c 240 1
# ln -s /dev/ham /dev/modem
# chmod 666 /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.

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:
$ 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:
$ ./build_module
# ./ltinst2
# ./autoload
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:
$ tar -zxvf pctel-0.9.7-9-rht-4c.tar.gz
$ cd pctel-0.9.7-9-rht-4c/src/
# ./configure -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 your hal type
choose one of: pct789, cm8738, i8xx, sis, via686a
hal type: pct789
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 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:
# mae
# mae install
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:
make[1]: Entering directory `/usr/src/kernel-headers-2.6.14-kanotix-6'
LD /home/kurumin/tmp/pctel-0.9.7-9-rht-4/src/built-in.o
CC [M] /home/kurumin/tmp/pctel-0.9.7-9-rht-4/src/linmodem-2.6.o
pctel-0.9.7-9-rht-4/src/linmodem-2.6.c:
In function`linmodem_config_port':?
pctel-0.9.7-9-rht-4/src/linmodem-2.6.c:1004: error:
`MCA_bus'undeclared (first use in this function)
make[2]: ** [pctel-0.9.7-9-rht-4/src/linmodem-2.6.o] Erro 1
make[1]: ** [pctel-0.9.7-9-rht-4/src] Erro 2

make[1]: Leaving directory `/usr/src/kernel-headers-2.6.14-6'


make: ** [all] Erro 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:
#ifdef CONFIG_MCA
/*
* Don't probe for MCA ports on non-MCA machines.
*/
if (p->port.flags & UPF_BOOT_ONLYMCA && !MCA_bus)
return;
#endif
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 pctel country_code=33
# modprobe pctel_hw
# rm -f /dev/modem
# ln -sf /dev/ttyS_PCTEL0 /dev/modem
# chmod 666 /dev/modem
Depois s abrir o KPPP, testar o modem e tentar discar. Para que o carregamento dos
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:


# mae install
# hsfconfig
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 ;).

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.
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:
# iwconfig wlan0 essid minharede
(configura o ESSID da rede)
# iwconfig wlan0 channel 10
(configura o canal usado)
# iwconfig wlan0 ey restricted 123456789A
ou
# iwconfig wlan0 ey 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:
ath0 IEEE 802.11g ESSID:"minharede"
Mode:Managed Frequency:2.462 GHz Access Point: 00:50:50:84:31:45

B $e 11 )s /-&e


18 B Se svy=03
$e
y  $/S 
 F
 e  

&e
) e e  
2 ! y=5294 S  eve=-43 B se eve=-95 B
$  v & 0 $  v c
y 0 $  v
 0
/ ecessve
e
es 0  v sc 0 )sse ec 5
% 

#  c e &
eess c 
  es  
 e   ce c 
e    e e
e  sc
 e s-
ee e&y e *S 
c e e s s
s
 3es 
 e e

 e s 
 c 


ee e 
 s 
c8 s s s
e
cs s  &
eess-c   0  e e  "&   e
  "*


 e e s+ ss#ve c 


ee &
eess es e  c eec e
sse  e 
 ss ecess
 e  
ve
e esej  s e  +
c

es e e c

e

Ndis4 56pp
s&
e
  esce e 3 e 
 
ve
s e cs e
ee &
eess e  c 
c    c  e s
 e 
e 
ve
e  sse  e
c  e
  e cs

  e e  s
s  2   c e s  s 
ve
s  3 &s
  s css  
+
 
ve

 3 &s 5 e c    c  c 
 

s 
ecs s
  ve
s esec# c  
ve
 Vc e e c 

v
s cs
s
e cs ess 

s s
s  s&
e

  s&
e
s
ce 
e e&! e2s

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
trabalha como um intrprete, convertendo os comandos enviados pelo Kernel do Linuxem
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 umdriver
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:
# mae install
(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 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:
# ndiswrapper -i /mnt/hda6/Driver/WinXP/GPLS.inf
Rode agora o comando "ndiswrapper -l" para verificar se o driver foi mesmo ativado. Voc
ver uma lista como:
Installed ndis drivers:
gplus driver present, hardware present
Com o driver carregado, voc j pode carregar o mdulo usando o modprobe:
# modprobe ndiswrapper
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:
# ndiswrapper -e gplus
Para que a configurao seja salva e o Ndiswrapper seja carregado durante o boot, voc deve
rodar o comando:
# ndiswrapper -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 "ndisgt", um utilitrio grfico, disponvel
nos repositrios do Debian, no Ubuntu e em outras distribuies.

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:
02:00.0 Network controller: Texas Instruments ACX 111 54Mbps Wireless Interface 00:08.0
Network controller: Texas Instruments ACX 100 22Mbps Wireless 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/.
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:
# mae
# mae install
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:
# ./fetch_firmware
Ele perguntar:
Locating a suitable download tool...
Searching for ACX1xx cards on this system...
Which firmware files package would you like to download?
a) for ACX100 (TNETW1100) chipset based cards
b) for ACX111 (TNETW1130/1230) 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:
# mdir /usr/share/acx/
# cp -a /tmp/acx100-0.2.0pre8_plus_fixes_37/firmware/* /usr/share/acx/
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:
# modprobe wlan
# modprobe acx_pci

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:
# modprobe acx_pci firmware_dir=/home/carlos/firmware/

MadWiFi
O MadWiFi d suporte a placas com chipset Atheros, usado em placas da D-link (como a DWLG520), 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:
02:00.0 Ethernet controller: Atheros Communications, Inc. AR5212 802.11abg NIC (rev 01)
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:
# mae
# mae install
Depois de instalado, voc pode carregar os mdulos com os comandos:
# modprobe wlan
# modprobe ath_hal
# modprobe ath_pci
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.

ADMtec 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:
00:08.0 Network controller: Linksys ADMte ADM8211 802.11b Wireless 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.
Para instalar, basta descompactar o arquivo, acessar a pasta e rodar o comando:
# mae install
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:
# modprobe wlan
# 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.

Realte 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 "mae" 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 ieee80211_crypt-r8180.o
# insmod ieee80211_crypt_wep-r8180.o
# insmod ieee80211-r8180.o
# insmod r8180.o
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:
ieee80211-r8180_crypt-r8180
ieee80211_crypt_wep-r8180
ieee80211-r8180
r8180
Estas placas funcionam tambm usando o Ndiswrapper, que pode ser usado como segunda
opo em caso de problemas com o driver nativo.

Orinoco SB
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:
# export CVS_RSH="ssh"
# cvs -z3 -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/orinoco co orinoco
Isso criar uma pasta "orinoco" no diretrio atual. Acesse-a e rode os comandos:
# mae
# mae install
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 subpasta "firmware" e execute o script "get_ezusb_fw", que baixa o firmware destinado s Prism
USB:
# cd firmware/
# ./get_ezusb_fw
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 orinoco_usb

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 miniPCI 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".
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:
# mae
# mae install

Isto gerar e copiar os mdulos ipw2200.o, ieee80211.o, ieee80211_crypt.o e


ieee80211_crypt_wep.o 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:
# cp -a ipw2200-fw-2.4.tgz /lib/firmware/
# cd /lib/firmware/
# tar -zxvf ipw2200-fw-2.4.tgz
A partir da, a placa deve ser ativada automaticamente durante o boot. Caso voc queira ativar
e desativar o suporte manualmente, use os comandos:
# modprobe ipw2200
(para carregar)
# modprobe -r ipw2200
(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:
# modinfo ipw2200
(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.
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:
# mae EXTRAS=extras/firmware
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 extras/firmware/firmware_helper /sbin/
# chmod +x /sbin/firmware_helper
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:
ACTION=="add", SUBSYSTEM=="firmware", RUN+="/sbin/firmware_helper"
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:
# dmesg | grep ipw

ipw2200: Intel(R) PRO/Wireless 2200/2915 Network Driver, 1.0.8


ipw2200: Copyright(c) 2003-2005 Intel Corporation
ipw2200: Detected Intel PRO/Wireless 2200BG Network Connection
Se, por outro lado, o comando exibir algo como:
ipw2200: Intel(R) PRO/Wireless 2200/2915 Network Driver, 1.0.8
ipw2200: Copyright(c) 2003-2005 Intel Corporation
ipw2200: Detected Intel PRO/Wireless 2200BG Network Connection
ipw2200: Unable to load ucode: -62
ipw2200: Unable to load firmware: -62
ipw2200: failed to register network device
ipw2200: probe of 0000:01:05.0 failed with error -5
... rode os comandos abaixo para recarregar o driver:
# echo 100 > /sys/class/firmware/timeout
# modprobe -r ipw2200
# modprobe ipw2200
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.

Ralin 2400 e 2500


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 "mae" e "mae 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.
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:
SUBSYSTEM=="net", DRIVERS=="rt2500", NAME="ra0"
SUBSYSTEM=="net", DRIVERS=="rt2570", NAME="ra0"
SUBSYSTEM=="net", DRIVERS=="rt61", NAME="ra0"

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 opensource.
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:
# mae config
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:
# mae all
# mae install
... 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.

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.

V
s 

 s s
 ese
ec
s e 
e ees  a st  e  a o   *e 
 


  
c
e      se
ve
 e 
e  e e
e    e se  

 s  e s

i7 pa 5xx
se 
ve
  esce e c
  s
 se 100 es  e
e es e &ec s c
c   8es e v
s cses e se s
es  e
e es % s s es s
s es
s #ve    

ee
sc5 
%   e &     

ee
&  

ve
  c 
e. c    esc
ev  ve
s s   
v
sc5-20050328
 
,  e 
e 
  s- ecess
 e
 ss s c 
es e  c+  e 
"e
e *esc ce  
v c  c   
- v sc5-20050328
  cesse 
s spa 5xx-20050328 e se
 c
 e
e s c  s
$  k
#  k inst ll
sc
 v c 
 + spa 50x 9ko e c- 
  s
/lib/oduls/2 9x 9x/knl/di:s/usb/di "

 c

e-   e e se  c   odpob spa 50x 


  e
c e ee
sej c

e  c e e 


 e   c e    spa 50x    

v /ta/oduls"
/ese  c ; e
  "ee 0  e ee  , s
e  , 
  0c  



  e c e
c  c


Logitech luicCam
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://qcega.sourceforge.net/.

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:
# mae all
Ative o mdulo com o comando:
# insmod mod_quiccam.o
Por ltimo, rode o script que instala o mdulo e os utilitrios:
# ./quiccam.sh
Para que o mdulo seja carregado automaticamente duranteo boot, adicione a linha
"quiccam" 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:
# mae

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:
if (remap_page_range(vma, start, page, PAGE_SIZE, PAGE_SHARED)) {
por:
if (remap_pfn_range(vma, start, page>>PAGE_SHIFT, PAGE_SIZE, PAGE_SHARED)) {
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 sqcam.o /lib/modules/2.6.14-anotix-6/misc/
Rode o comando "depmod -a" para atualizar a lista dos mdulos disponveis e carregue o novo
mdulo:
# modprobe sqcam

Modems ADSL SB
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.

s es s e se


c 
s c  
e 
e
  bid<   e 
e se
ve e s c     e c  c e 
e s c e
ee e 
e

 s  ce 
 ee 9 c 
 se c ec
vc 
ecs  
 
 e
e c c   pppoaonf   p-pppo e  

se  e se  e cess

ecs e 
ve


% c 

 e c 
e
 s v c  s s es s  
+

e   e c e c 
  c e c  se c
 Vc 
ecs e s
c 


ee v *1, 
 ve
 e e   c 

 c e c
v
s c
s e se
ve c  
e& 
 
ee
% c 
  e e se
e
 
vs e    e
ce e c 

cess#ve v ve
 e ve c 
 e 
c c   c  1000138 
1921681254 e   e se  
  
 =es e vc e c 
    Vc

ecs e s cess
ese e e
e 
 s   ve
  

 c
 c ec
 e 
s e s >B 
s ve s   esce e 
 e 
  s 
ec
 

 e
 
 ees 
ecs e  
ve

  c 
  e s  c
 es 

e  s s  e s s 
ve
s s s ve es 

e
s s ve es c 
s e  v 
- ss  
 s s
 =es
%  
ve
 ecess
  
v  
&
e c

es e e  se e 



&
e  s &
e e c

e  
+
 e   ee v e

es sve 
c 

 
&
e e
  e ee se c  e c  
ve

 s  s   Se  


&
e c

e  e s es e e   c 


Se vc e   e esce
 
e  e e e se e %*S2 (SB 
 e
c e   c e
ee S v se
  s   e e  ,s c 


cee  s c  cs e c  e e  -

ve

  pdtouah >B e  c s
e 
  Seec 330  %ce 
e (SB s 
  B
s e se
e c 
 
 s
ce 
e e
jecsseec
se ee e ee  e 
ece    e c    
 e  s e

  ce
 c     e
e  e 
e e 
e ee e s e s
e
es
  e
 
 e 1je e  s e s %*S2 e   
 e
 c#
  e 
e e
e e es
   e
e  s  cv

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/speedtouch1.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:
$ ./configure
$ mae
$ su <senha>
# mae install
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:
# speedtouch-setup
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.
Para conectar, chame o comando

# speedtouch-pppoe start
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:
# speedtouch-pppoe stop
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:
# ./gnome-ppx-0.6.1.pacage
Depois de instalado, chame o programa com o comando:
# pppoe_dialer

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:
# mae
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:
# ./configure
# mae
Copie os mdulos "amedyndbg.o" e "amedyn.o" 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:
PROTOCOL_MODE=4
VPI=8
VCI=35
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 amedyn
# modprobe amedyndbg
# amstart.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.
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):

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.04349 (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 oantigo
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.
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 +x NVIDIA-Linux-x86-1.0-8178-pg1.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:
# /etc/init.d/dm stop
# /etc/init.d/gdm stop
# service dm stop
... ou usar o comando telinit (ou init) para mudar para o runlevel 3, que no inclui a abertura
do modo grfico:
# telinit 3
# init 3
No terminal, logue-se como root, acesse a pasta onde o arquivo foi baixado e finalmente
execute-o com o comando:
# ./NVIDIA-Linux-x86-1.0-8178-pg1.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 duasmais 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.

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:

Depois de concluda a instalao, use o comando "telinit 5" ou "/etc/rc.d/dm 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:
# cp /etc/X11/xorg.conf /etc/X11/xorg.conf.orig
Agora abria o arquivo e mos obra:
# edit /etc/X11/xorg.conf
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.
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 "alias char-major-195 nvidia" >> /etc/modules.conf
# echo "alias char-major-195 nvidia " >> /etc/modutils/aliases
Uma terceira alterao que pode ser necessria dependendo do modelo da sua placa-me
desabilitar o double buffer extension. Procure pela linha:
Load "dbe" # Double buffer extension
e comente-a, deixando:
#Load "dbe" # Double buffer extension
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 alinha omitida.
Voc precisa se preocupar apenas ao usar um dos outros valores.
A opo NvAGP adicionada dentro da seo "Device", acima da linha Driver "nvidia", como
em:
Section "Device"
Option "NvAGP" "0"
Identifier "Card0"
Driver "nvidia"
VendorName "All"
BoardName "All"
EndSection
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 podemlevar a
incompatibilidades diversas com alguns modelos de placas-me.

Ativando 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:
# export __GL_FSAA_MODE=4
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:

GeForce4 MX, GeForce4 4xx Go (notebooks),

Quadro4 380,550,580 XGL e Quadro4 NVS


-------------------------------------------------0: FSAA desativado
1: 2x Bilinear Multisampling
2: 2x Quincunx Multisampling
3: FSAA desativado
4: 2 x 2 Supersampling
5: FSAA desativado
6: FSAA desativado
7: FSAA desativado
GeForce3, Quadro DCC, GeForce4 Ti, GeForce4 4200 Go
Quadro4 700,750,780,900,980 XGL
-------------------------------------------------------------0: FSAA desativado
1: 2x Bilinear Multisampling
2: 2x Quincunx Multisampling
3: FSAA desativado
4: 4x Bilinear Multisampling
5: 4x Gaussian Multisampling
6: 2x Bilinear Multisampling por 4x Supersampling
7: FSAA desativado
GeForce FX, GeForce 6xxx, GeForce 7xxx, Quadro FX
--------------------------------------------------------------0: FSAA desativado
1: 2x Bilinear Multisampling
2: 2x Quincunx Multisampling
3: FSAA desativado
4: 4x Bilinear Multisampling
5: 4x Gaussian Multisampling
6: 2x Bilinear Multisampling por 4x Supersampling
7: 4x Bilinear Multisampling por 4x 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:
$ export __GL_FSAA_MODE=6
$ doom3
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 nvidiasettings, 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.
$ nvidia-settings

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
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:
$ export __GL_DEFALT_LOG_ANISO=1
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".

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 NVCloc, 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 averso
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.
# apt-get install nvcloc
# apt-get install nvcloc-gt
# apt-get install nvcloc-qt
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.

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 275 -m 350
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.

Twin View
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":
Option "TwinView"
Option "SecondMonitorHorizSync" "<hsync range(s)>"
Option "SecondMonitorVertRefresh" "<vrefresh range(s)>"
Option "MetaModes" "<list of metamodes>"
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":
Option "TwinView" "True"
Option "TwinViewOrientation" "RightOf"
Option "UseEdidFreqs" "True"
Option "MetaModes" "1280x1024, 1280x1024"
Option "SecondMonitorHorizSync" "31.5-95"
Option "SecondMonitorVertRefresh" "50-150
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".
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:
Option "TwinViewOrientation" "LeftOf"
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:

A partir da verso 0.8, o nvcloc_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.
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:
# apt-get install module-assistant nvidia-ernel-common
# module-assistant auto-install nvidia
No final da instalao voc ver que gerado um pacote .deb com o mdulo compilado para o
Kernel atual:
Done with /usr/src/nvidia-kernel-2.6.15_1.0.8178-1+1_i386.deb .
Selecionando pacote previamente no selecionado nvidia-kernel-2.6.15.
(Lendo banco de dados ... 82561 arquivos e diretrios atualmente instalados.)
Descompactando nvidia-kernel-2.6.15
(de .../nvidia-kernel-2.6.15_1.0.8178-1+1_i386.deb) ...
Instalando nvidia-kernel-2.6.15 (1.0.8178-1+1) ...
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:
# apt-get install nvidia-glx
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:
# ./NVIDIA-Linux-x86-1.0-8178-pg1.run --add-this-ernel

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.

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".
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:
# ./NFORCE-Linux-x86-1.0-0301-pg1.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
/etc/init.d/networking 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.

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:
#alias snd-card-0 snd-intel8x0
#alias sound-slot-0 snd-intel8x0
# install snd-intel8x0 /sbin/modprobe --ignore-install snd-intel8x0
# usr/lib/alsa/modprobe-post-install snd-intel8x0
alias snd-card-0 nvsound
alias sound-slot-0 nvsound
install nvsound /sbin/modprobe --ignore-install nvsound; sleep 1
/usr/bin/nvmix-reg -f /etc/nvmixrc -L >/dev/null 2>&1 || :
remove nvsound { /usr/bin/nvmix-reg -f /etc/nvmixrc -S >/dev/null 2>&1 || : ; }
/sbin/modprobe -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 opensource. 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.
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 placame.
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 desempenhodo 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 dodriver
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 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:
$ chmod +x ati-driver-installer-8.21.7-i386.run
# ./ati-driver-installer-8.21.7-i386.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".

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.
Para usar a configurao automtica, execute-o usando a opo "--initial":
# aticonfig --initial
Voc pode tambm forar o uso de uma determinada resoluo, como em:
# aticonfig --initial --resolution=1024x768
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:

# tiaonfi? --initi l=du l-h d --san-l out=i?ht


,s ee
ec e e  
v e c 
  e  @es  vs vc e s

 -  e 
  e
  
v e e ese cs e se
e vc 
ecse
 e
 s e
 @es   e e es 
ss  
 e sv
 c! 

v 
 
# tiaonfi? --initi l --solution=1024x768 -f
Vc e e

s c 
 @es  s# e /V e  se   
s  
 
ec 
 e  
 
 c  s j  e e c  
ve

/e  e e e e   e
e
e
 ecess

e c
 5 
 e s
 c @es e 
e e v


 e  cee
 3*  c e ecess
 e  + f?lx esej c

e e
c  c s +s 
e  e 
 e  e 
e  + e -s
ce Se 
e 
c

e- vc
ecee
  e se c 
# odpob f?lx
F%/%2 


 se
  
  es2612!e
e
ve
sc

 
! e

 e
e
S  c e s s +s es c

es ese cs esve-s e e e v e e


# odpob -  don
# odpob - d
# odpob f?lx
,s ecess
 c e s 
s c  s     
v ec
c
cc 
ec  scs 
 e ees sej eecs  c  ss ecess
 e
s s
 @es s s e

 e s e eec c

e s s +s se 


e

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 /dev/shm tmpfs defaults 0 0
Para que ele seja montado sem precisar reiniciar, use o comando:
# mount /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.
O primeiro passo alterar a seo "Device", que indica qual driver de vdeo ser usado e
permite incluir configuraes para ele. Substitua a linha Driver "ati", Driver "radeon" ou Driver
"vesa" por:
Driver "fglrx"
Option "UseInternalAGPGART" "no"
Option "VideoOverlay" "on"
Option "OpenGLOverlay" "off"
Option "MonitorLayout" "AUTO, AUTO"
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.
Um exemplo da seo "Device" completa :
Section "Device"
Identifier "Card0"
Driver "fglrx"
VendorName "All"
BoardName "All"
Option "UseInternalAGPGART" "no"
Option "VideoOverlay" "on"
Option "OpenGLOverlay" "off"
Option "MonitorLayout" "AUTO, AUTO"
EndSection
A seo "Module" do arquivo de configurao deve ficar similar a esta:

Section "Module"
Load "ddc"
Load "dbe"
Load "dri"
SubSection "extmod"
Option "omit xfree86-dga"
EndSubSection
Load "glx"
Load "bitmap" # bitmap-fonts
Load "speedo"
Load "type1"
Load "freetype"
Load "record"
EndSection
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 "Monitor"
Identifier "Monitor0"
HorizSync 28.0 - 96.0
VertRefresh 50.0 - 75.0
Option "DPMS" "true"
EndSection
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.
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 "Screen"
Identifier "Screen0"

Device "Card0"
Monitor "Monitor0"
DefaultDepth 24
SubSection "Display"
Depth 24
Modes "1024x768"
EndSubSection
EndSection
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 "seInternalAGPGART" "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":
Option "ForceMonitors" "notv"
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:
Option "MonitorLayout" "TMDS, NONE"
Option "MonitorLayout" "CRT, NONE"
Estas duas opes so includas automaticamente ao chamar o aticonfig usando a opo "-force-monitor=crt1,notv", como em:
# aticonfig --force-monitor=crt1,notv
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":

Option "FSAAEnable" "yes"


Option "FSAAScale" "4" # (escolha entre 0, 2, 4 e 6)
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-radeondebian.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 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 "xmmf":

$ tar -zxvf wizardpen-driver-0.5.0.tar.gz


$ cd wizardpen-driver-0.5.0
$ xmmf
No meu caso ele retornava um erro, reclamando da falta de um arquivo temporrio:
./Imakefile:5: error: /usr/X11R6/lib/X11/config/Server.tmpl:
Arquivo ou diretrio no 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:
# mdir -p /usr/X11R6/lib/X11/config/
# touch /usr/X11R6/lib/X11/config/Server.tmpl
Depois de conseguir rodar o "xmkmf" sem erros, rode o comando "make" para finalmente
compilar o driver:
$ mae
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 'acecad' >> /etc/modules
# echo 'evdev' >> /etc/modules
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=0003 Vendor=5543 Product=0004 Version=0000
N: Name=" TABLET DEVICE"
P: Phys=usb-0000:00:10.2-1/input0
H: Handlers=mouse1 event2
B: EV=1f
B: KEY=400 0 3f0000 0 0 0 0 0 0 0 0
B: REL=303

B: ABS=7f00 1000003
B: MSC=10
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 "/etc/X11/xorg.conf". 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 "InputDevice"
Identifier "tablet"
Driver "wizardpen"
Option "Device" "/dev/input/event2"
EndSection
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 "ServerLayout"
Identifier "X.org"
Screen 0 "Screen0" 0 0
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "USB Mouse" "CorePointer"
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:
Option "Device" "/dev/input/mice"
Substitua o "/dev/input/mice" por "/dev/input/mouse0", como em:
Option "Device" "/dev/input/mouse0"
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 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 mdulobttv, 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 Brootree 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:
0000:00:08.1 Multimedia video controller: Brooktree Corporation Bt878 Video 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.

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.

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 bttv
# modprobe -r tuner
# modprobe bttv card=37 tuner=2
Para que estes comandos sejam executados automaticamente durante o boot, basta coloclos 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=5 - Diamond DTV2000
card=11 - MIRO PCTV pro
card=16 - Pixelview PlayTV (bt878)
card=17 - Leadtek WinView 601
card=28 - Terratec TerraTV+
card=30 - FlyVideo 98
card=31 - iProTV
card=32 - Intel Create and Share PCI
card=33 - Terratec TerraTValue
card=34 - Leadtek WinFast 2000
card=37 - PixelView PlayTV pro
card=38 - TView99 CPH06X
card=39 - Pinnacle PCTV Studio/Rave
card=50 - Prolink PV-BT878P+4E / PixelView PlayTV PAK / Lenco MXTV-9578 CP
card=52 - Pinnacle PCTV Studio Pro
card=63 - ATI TV-Wonder
card=64 - ATI TV-Wonder VE
card=65 - FlyVideo 2000S
card=72 - Prolink PV-BT878P+9B (PlayTV Pro rev.9B FM+NICAM)
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.
Por exemplo, numa Hauppauge WinTV 401 os comandos seriam:
# modprobe -r cx8800
# modprobe -r tuner
# modprobe cx8800 tuner=43
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 "S 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".
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
YY2, 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.

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 paragravar
a programao do canal 12 da TV aberta durante uma hora seria:
$ mencoder tv:// -tv driver=v4l2:input=0:normid=4:channel=12:chanlist=usbcast:width=640:height=480:device=/dev/video0:adevice=/dev/dsp0:audiorate=32000:forcea
udio:forcechan=2:buffersize=64 -quiet -oac mp3lame -lameopts preset=medium -ovc lavc lavcopts vcodec=mpeg4:vbitrate=3000:keyint=132 -vop pp=lb -endpos 01:00:00 -o
/home/kurumin/video.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.
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 toque sobre o touchpad equivale a um clique no boto esquerdo, um toque usando trs
dedos (ou dois, dependendo da configurao) equivale a pressionar o boto direito e assim por
diante.
O mouse sempre detectado durante a instalao, mas as funes especiais muitas vezes
precisam ser ativadas manualmente.
Nos touchpads mais simples, com apenas dois botes, geralmente basta adicionar uma opo
no arquivo de configurao do lilo para que o driver do mouse seja carregado corretamente
durante o boot e os toques passem a funcionar.
Abra o arquivo /etc/lilo.conf e procure pela linha "append", que contm instrues para o
Kernel, lidas no incio do boot. Adicione a opo "psmouse.proto=imps", sem modificar as
outras, como neste exemplo:
append = "psmouse.proto=imps apm=power-off nomce noapic devfs=mount"
Antes de reiniciar, preciso salvar a nova configurao, chamando o executvel do lilo como
root:
# lilo
Outros touchpads, especialmente os que incluem botes de scroll funcionam com um driver
especial, o Synaptics TouchPad Driver. Originalmente este driver dava suporte a um mouse
especial, desenvolvido pela Synaptics (http://www.synaptics.com/products/touchpad.cfm),
mas atualmente ele suporta vrios tipos de mouses derivados dele.
Dois exemplos so os touchpads com boto de scroll usados em vrios dos desknotes da PCChips/ECS e o touchpad usado no HP nx6110 (e outros modelos similares), onde o scroll feito
passando o dedo na borda direita do touchpad. Em ambos os casos, o scroll s funciona
usando o driver synaptics:

Para saber se o mouse do seu note compatvel com o driver, rode o comando:
# cat /proc/bus/input/devices
Este comando lista os perifricos instalados. A identificao do mouse aparecer no meio das
informaes, como em:
I: Bus=0011 Vendor=0002 Product=0007 Version=0000
N: Name="SynPS/2 Synaptics TouchPad"
P: Phys=isa0060/serio4/input0
H: Handlers=mouse0 event0 ts0
B: EV=b
B: KEY=6420 0 670000 0 0 0 0 0 0 0 0
B: ABS=11000003
Este um driver para o Xfree (ou X.org), no um mdulo para o Kernel, como os drivers para
softmodems, por isso a instalao mais simples.
Se voc estiver usando uma distribuio derivada do Debian, pode instal-lo pelo apt-get:
# apt-get install xfree86-driver-synaptics
Caso voc no encontre o mdulo j compilado para a sua distribuio, pode baixar um pacote
genrico no: http://tuxmobil.org/software/synaptics/.
Dentro do pacote voc encontrar o arquivo "snyaptics_drv.o", que o mdulo j compilado.
Ele deve ser copiado para a pasta de mdulo do X, geralmente a
"/usr/X11R6/lib/modules/input/". Este driver funciona no Xfree 4.2, 4.3, 4.4 e tambm no
X.org.

Na pior das hipteses, voc pode compilar o mdulo manualmente. Descompacte o arquivo e
rode o comando "make" para gerar um novo mdulo. Voc vai precisar ter os compiladores e
as bibliotecas de desenvolvimento do X. Procure pelos pacotes que terminam com "-dev",
como "xlibs-dev" ou "xfree86-dev".
O prximo passo abrir o arquivo de configurao do X, o "/etc/X11/XF86Config-4" ou
"/etc/X11/xorg.conf".
Dentro do arquivo, procure pela seo "Module" e adicione a linha "Load "synaptics" (antes
do EndSection), sem apagar as demais:
Section "Module"
Load "ddc"
Load "dbe"
Load "extmod"
Load "glx"
Load "bitmap" # bitmap-fonts
Load "speedo"
Load "type1"
Load "freetype"
Load "record"
Load "synaptics"
EndSection
Falta agora a configurao do mouse. Adicione as linhas abaixo no final do arquivo:
Section "InputDevice"
Identifier "Mouse Synaptics"
Driver "synaptics"
Option "Device" "/dev/psaux"
Option "Protocol" "auto-dev"
Option "LeftEdge" "1700"
Option "RightEdge" "5300"
Option "TopEdge" "1700"
Option "BottomEdge" "4200"
Option "FingerLow" "25"
Option "FingerHigh" "30"
Option "MaxTapTime" "180"
Option "MaxTapMove" "220"
Option "VertScrollDelta" "100"
Option "MinSpeed" "0.09"
Option "MaxSpeed" "0.18"
Option "AccelFactor" "0.0015"
Option "SHMConfig" "on"
EndSection

Agora falta apenas o ltimo passo, que dizer para o X usar a configurao que adicionamos.
Procure a linha com a configurao do mouse, dentro da seo Section "ServerLayout", que
geralmente vai perto do incio do arquivo. Geralmente ser:
InputDevice "PS/2 Mouse" "CorePointer"
Substitua o "PS/2 Mouse" por "Mouse Synaptics", que far com que o X passe a usar a
configurao que adicionamos. A linha ficar:
InputDevice "Mouse Synaptics" "CorePointer"
O driver precisa que o mdulo "evdev" do Kernel esteja carregado para funcionar. Se ele no
estiver carregado, o X simplesmente deixar de carregar ao ativar o driver:
# modprobe evdev
Para que ele seja sempre carregado durante o boot e voc no tenha mais dor de cabea,
adicione a linha "evdev" no final do arquivo "/etc/modules".
Agora basta salvar o arquivo e reiniciar o X, pressionando Ctrl+Alt+Backspace. Se tudo deu
certo, as funes especiais do mouse j estaro funcionando.
Muitas das funes podem ser personalizadas. O programa mais amigvel para isso o
synaptics, que voc pode instalar pelo apt-get:
# apt-get install synaptics
Voc pode encontrar pacotes para outras distribuies na pgina do projeto:
http://qsynaptics.sourceforge.net/dl.html.
Depois de instalado, ele aparecer como um mdulo no do painel de controle do KDE, dentro
da seo "Perifricos":

Se voc usa o Gnome, ou prefere um programa standalone, pode instalar o qsynaptics, que
pode ser baixado na mesma pgina ou instalado via apt-get.

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.

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:
# patch -p1 < /usr/src/bootsplash-3.1.6-2.6.15.diff
Depois disso entramos no processo normal de recompilao do Kernel. Comeando com o
comando "mae 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.

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://www.bootsplash.de/files/debian/ unstable main
Rode agora os comandos:
# apt-get update
# apt-get install bootsplash
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.
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 -f /etc/bootsplash/themes/current/config/800x600.cfg > /boot/initrd.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=/boot/initrd-splash
append="splash=verbose"
A seo toda ficar assim:
image=/boot/vmlinuz-2.6.15
label=Kurumin
root=/dev/hda1
read-only
initrd=/boot/initrd-splash
append="splash=verbose"
No grub, a seo ficaria:
title Kurumin
root (hd0,0)
kernel /boot/vmlinuz-2.6.15 root=/dev/hda1 ro vga=788 splash=verbose
initrd /boot/initrd-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 executlo 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.
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.

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:
$ wget -c http://fisica.ufpr.br/urumin/urumin-6.0.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:
$ md5sum urumin-6.0.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:
#!/bin/sh
wget -c http://fisica.ufpr.br/kurumin/kurumin-6.0.iso
md5sum kurumin-6.0.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 +x baixar-urumin.sh
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.
$ ./baixar-urumin.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:
#!/bin/sh

versao="6.0"
mirror="http://fisica.ufpr.br/kurumin/"
wget -c "$mirror"/kurumin-"$versao".iso
md5sum=`md5sum kurumin-"$versao".iso`
wget -c "$mirror"/kurumin-"$versao".md5sum.txt
md5sumOK=`cat kurumin-"$versao".md5sum.txt`
if [ "$md5sum" != "$md5sumOK" ]; then
echo "Arquivo corrompido, vou deletar e comear novamente."
rm -f kurumin-"$versao".iso
sleep 120
./baixar-kurumin.sh
else
echo "O arquivo foi baixado corretamente."
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 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.
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 [ "$md5sum" != "$md5sumOK" ]; then
echo "Arquivo corrompido, vou deletar e comear novamente."
rm -f kurumin-"$versao".iso
sleep 120
./baixar-kurumin.sh
else
echo "O arquivo foi baixado corretamente."
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:
$ lame -b 128 musica.mp3 128-musica.mp3
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 arquivo in *.{mp3,MP3}
do lame -b 128 "$arquivo" "128k-$arquivo"
done
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:
$ mencoder tv:// -tv \
driver=v4l2:input=0:normid=4:channel=12:chanlist=us-bcast:width=640:height=480:\
device=/dev/video0:adevice=/dev/dsp0:audiorate=32000:forceaudio:forcechan=2:buffersize=
64 \
-quiet -oac mp3lame -lameopts preset=medium -ovc lavc -lavcopts \
vcodec=mpeg4:vbitrate=3000:keyint=132 -vop pp=lb -endpos 01:00:00 \
-o /home/$SER/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:
echo "Qual canal gostaria de gravar? (ex: 12)"
read canal
echo "Qual o tempo de gravao? (ex: 01:00:00)"
read tempo
echo "Em qual arquivo o vdeo ser salvo? (ex: /home/$USER/video.avi)"
read arquivo
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:// -tv driver=v4l2:input=0:normid=4:channel=$canal:chanlist=us\
-bcast:width=640:height=480:device=/dev/video0:adevice=/dev/dsp0:audiorate=32000:\
forceaudio:forcechan=2:buffersize=64 -quiet -oac mp3lame -lameopts preset=medium \
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=3000:keyint=132 -vop pp=lb -endpos \
$tempo -o $arquivo

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 dialog.
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 --msgbox "Seu micro est pegando fogo" 10 50
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".

No nosso caso, precisamos ler a resposta, por isso usamos o parmetro "--inputbox" do dialog:
dialog --inputbox "Canal a gravar (ex: 12)" 10 60 "12" 2> /tmp/resposta.tmp
canal=`cat /tmp/resposta.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 sempreusar
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:

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:
Xdialog --inputbox "Canal a gravar (ex: 12)" 10 60 "12" 2> /tmp/resposta.tmp
canal=`/tmp/resposta.tmp`


s  Aes  ss  5 e   s
-- diolist s   e
e e
 e  e  Aes e s
e.e e e e s
sc
s s #c es cs  "
   Vej 
ee   sc
  s
-e s
s #ve e 
  s s
c   "
    
 &&&
&
ec 
!
  sc
s
--sno e
e  e
e
 s %
ess 
 e   c e e  v
ve $ B
e vc e cec
e se Se 
ess  s   v
ve c c  v
1 e se

  c c  v
0 ( ee  e s se

5 --yes  /e ce
e  e esej  s
 

 : 15 60
 [ $: = 0 ] 8 e
c  s

--fslat %
e  e  e see e 
vs e se
s  

 
v 

ee  se  ee 


 e e
e esce
 
v e e  
- s 
ye

5 -- seec  30 75 2>  


ess 
ve=`c  
ess `8
-  
ess 
ye
$ve
--dslat 4 s 
 -- seec s 
e  e  
 esce
 
e+

kdi loC  
s ve   c  e e  "* e 
ss  e 
 se
s e
s
 Aes e 
 e  "* c  es! 
 c %s j es see  
 vs 
"*
ese  s c 
 Aes e c
  es e #c es e  s  ,e 
 e , 
e 
"*  e e s sc
s c   
c  s 
 ss 
% 
 c esv e e js e e 
se
se s ecs  "* ee c
s e  e es  se
s  0  e  
s  e
ces s 
 

 s es
j e e vs se
 
ecs c

e
s ecs  "*

 

 es  j e e !  c   se

c =`! --e 0
v
-/V --  ,   
v
e 12 12`

Vej e  es 


  
es  c  
ess 
e e e ' v
ve
c   ee   5s    vs e e
e sv
 
v e es -
2e
# s c   
es e ! --e 0
v
-/V --  ,   
v

e 12 12


ss  c   ! e     5 s  ! e v 
ess 
 
s# 
 e se
 e  e
  e    5 e v 
  s# e e

 Se
vc sesse  e
c  s ee s  e

es sv   
v e e - e
se ve
   ee     c  
! --  ,   
v
e 12 12 >  
ess 
c =` 
ess `
e e   vs e s
2>  
ess  se >  
ess  2> se
ve

 
ec 
 s# e e

 e    > 
ec   s# 
  e  c e 
 vs e s

 e  c   sve  e e 
  
v
4 ss#ve s
   &> e 
ec  s  e e e  s s s#s 
ee 
c  e s 

 s  "* e v
s e se s  se
e e
s  e
 
sj   e (  
 e
esve
 
e  
ec 
 s s s#s 
 
ev  c  e
$ konquo http://D ui doh dE nt &>/d/null

; e
 --e e
e esec c
 e  #  j e se 
; e
  
ese   e 5 e e es ve  esec e s  e s Fes  j e 
! s  ecess
 s  j e  e s  e c
 c c e- Vc
e e
 e e s 
 5 cc  s  e s Fes c  0 0 ss j e e
! c

se  sc
 c e e ese vv 
  "
  s  j es e ! sc

es v e v
s 
es  e
cs c ec Fes
# G s
# 0
v
-/V
# Sc
 
 
v
/V s    c e c

# sc
 
,
s  )
  < 
 <
&
e e> 
  "
 
! --e 0
v
-/V -- s se sc
 e
e 
v


 s e /V s   
c e c
 % 
v
 vc 
ecs ec
 /V e  e

 

  e
s   e /V e esej e


Os vdeos so gravados com resoluo de 640x480, compactados em divx4, com uma


qualidade prxima do DVD. Certifique-se de ter espao suficiente no HD. Cada hora de
gravao gera um arquivo de aproximadamente 1.3 GB"
var1=`kdialog --title "Gravar-TV" --inputbox "Canal a gravar (ex: 12)" "12"`
var2=`kdialog --title "Gravar-TV" --inputbox "Durao da gravao (00:01:00 = 1 minuto)"
"00:01:00"`
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".
var3=`kdialog --getsavefilename :label1 "*.avi *.mpg *.wmf |Arquivos de vdeo"`
var4=`kdialog --combobox "Padro de sintonia:
us-bcast = TV aberta
us-cable = TV a cabo" "us-bcast" "us-cable"`
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:
kdialog --title "Gravando" --passivepopup "Gravando o canal $var1
por: $var2 horas
no arquivo: $var3
Feche a janela de terminal para abortar" 6 &>/dev/null &
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:// -tv driver=v4l2:input=0:normid=4:channel=$var1:chanlist=$var4:\
width=640:height=480:device=/dev/video0:adevice=/dev/dsp0:audiorate=32000:\
forceaudio:forcechan=2:buffersize=64 -quiet -oac mp3lame -lameopts preset=\
medium -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=3000:keyint=132 -vop pp=lb \
-endpos $var2 -o $var3
kdialog --title "Gravar-TV" --passivepopup "Ok!
A gravao terminou."

exit 0
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.hardware.com.br/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:
#!/bin/sh
# Monta um compartilhamento NFS
# por Carlos E. 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.
export XDIALOG_HIGH_DIALOG_COMPAT=1
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.
Xdialog --title "Acessar compartilhamento NFS" \
--ok-label "Continuar" --cancel-label "Sair" \

--inputbox "O NFS um protocolo que permite compartilhar arquivos facilmente entre
mquinas Linux.
Este script um cliente que permite acessar compartilhamentos em outras mquinas. \n
Para isso voc precisa apenas informar o endereo IP do servidor, seguido da pasta que ele
est compartilhando, como em: 192.168.0.1:/arquivos" \
20 70 '192.168.0.1:/arquivos' 2> /tmp/nfs1
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.
SHARE=`cat /tmp/nfs1`
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.
Xdialog --title "Acessar compartilhamento NFS" \
--ok-label "Continuar" --cancel-label "Sair" \
--inputbox "Preciso saber agora em qual pasta local voc deseja que o compartilhamento fique
acessvel. Um recurso interessante do NFS que os arquivos ficam acessveis como se fossem
arquivos locais, voc pode at mesmo gravar um CD diretamente a partir da pasta com o
compartilhamento.\n\n
Voc pode usar qualquer pasta dentro do seu diretrio de usurio. Se a pasta no existir, vou
tentar cri-la para voc." \
18 70 '/mnt/nfs' 2> /tmp/nfs2
LOCAL=`cat /tmp/nfs2`
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 dificuldades comuns por parte de quem vai usar e incluindo aes
apropriadas para cada um.
if [ -d $LOCAL ]; then
umount $LOCAL
else
mkdir $LOCAL
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 "Executando comando:"
echo "/etc/init.d/portmap/start"
/etc/init.d/portmap start; sleep 1
echo "Executando comando:"
echo "/etc/init.d/nfs-common start"
/etc/init.d/nfs-common start; sleep 1
As duas variveis que foram lidas acima so usadas para montar o comando que acessa o
compartilhamento:
echo "Executando comando:"
echo "mount -o soft -t nfs $SHARE $LOCAL"
mount -o soft -t nfs $SHARE $LOCAL
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 /tmp/nfs1; rm -f /tmp/nfs2
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:
konqueror $LOCAL &>/dev/null &
sleep 3
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.
# Esta faz o mesmo que a linha acima:
# :`konqueror $LOCAL`

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.
Xdialog --title "Acessar compartilhamento NFS" \
--ok-label "Sim" --cancel-label "No" \
--yesno "Voc gostaria de adicionar uma entrada no '/etc/fstab' e um cone no desktop, para
que este compartilhamento possa ser acessado mais tarde com mais facilidade? Ao responder
yes voc poder acessar os arquivos posteriormente apenas clicando no cone que ser criado
no desktop." 14 60
if [ "$?" = "0" ] ; 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.
CHECK=`cat /etc/fstab | grep "$SHARE $LOCAL nfs noauto,users,exec,soft 0 0"`
if [ -z "$CHECK" ], then
echo '# Acessa compartilhamento nfs, adicionado pelo nfs-montar:' >> /etc/fstab
echo "$SHARE $LOCAL nfs noauto,users,exec,soft 0 0" >> /etc/fstab
echo "" >> /etc/fstab
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:
NOME=`date +%Y%m%d%H%M`
echo "[Desktop Entry]" > ~/Desktop/$nome
echo "Type=FSDevice" >> ~/Desktop/$nome
echo "Dev=$SHARE" >> ~/Desktop/$nome
echo "MountPoint=$LOCAL" >> ~/Desktop/$nome
echo "FSType=nfs" >> ~/Desktop/$nome
echo "ReadOnly=0" >> ~/Desktop/$nome
echo "Icon=hdd_mount" >> ~/Desktop/$nome
echo "UnmountIcon=hdd_unmount" >> ~/Desktop/$nome
echo "Name=$SHARE" >> ~/Desktop/$nome
fi
exit 0
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.
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 "Pressione uma tecla em 3 segundos para abrir a configurao."
read -t 3 resposta
if [ -n "$resposta" ]; 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 [ -n "$resposta" ]; then
configura-programa
fi
Voc poderia usar:
[ -n "$resposta" ] && 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:
md5sum=`md5sum kurumin-"$versao".iso`
[ "$md5sum" = "$md5sumOK" ] || echo "O arquivo veio corrompido"
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:


e s -e 10!1 && ec  +  c

e || ec 

  c

e e 

is dia s sob o kdi loH


"  e
ece    e e e
s e  Ies e cs e  % - s e s    --so" e --o e e se
ss e c
 c 
c e  e se  c  e
$ kdi loJ --so "saulp n Ko foi possl ai  o quio ifiqu s pisss d
p st "

$ kdi loJ --o " L quio st M aoopido xpint b ix M-lo no nt"


  -  --p ssipopup e ee   c  s c s  e e
es
ece s   es e  e  ee
    se
cc e 
 vss e

  se    
; c % s
 ssve   e  e se  vc eve
esec c
 e  e e  e se  e se s 
 e  sc
 c  e es
e e
 j e se ese

e es
ece
 c
esce e  & c  e
$ kdi loJ --p ssipopup " st j nl so soN inh dpois d 6 s
undos" 6 &
%  --sno e
e  e
e
 s %
ess 
 e   v
ve $? Se 

ess 
s  e ss e  v
0 cs sej   e 
 e   v
1 Se 
cs
 j e 
e   
 ec se  
ess  - s   ! 

ee   v
ve   c c  v
1
$ kdi lo
--sno "u aonx Ko uito lnt  A tu liN o do sist  i do  du s
s n s Ou aontinu  so ssi? :-"

,  e s e s s sses vc e s


 if 
 esec c
 e  sc

eve  e
e c cs

ess=$:
 [ $
ess = 0 ]8 e
-e 
e

 [ $
ess = 1 ]8 e
! -- s ! 
 

% se s    
  s e 
 
   Vc e ec   
 s  s
s   ese se 

ess=$:
 [ $
ess = 0 ]8 e
-e 
e
ls
! -- s ! 
 

ese eve se
s c  c s e c s ee se c  e
cs  e

ess 
 e
e e e 0 e  e s  cs e e se
1 c   s
 se   
  s s Pes ss e 


e 
 ce es cs se sc
 sej s 
c e  e
e e  e ee  
je
se   ee  v
  --yes  e   --Q nin
aontinua nal  e 
ee  s =es  
 c  
c ce
 s se e

 c 
 e  
j e

 v
   --snoa nal e s
   c c 
s =es
$es e  S     v
ve $? ss e  v
0  1 s
es e 
, ce
 e ss e  v
2

%  , ce


 e se
s 
 ec
 sc
 
vs  c   xit e
e ce

  eec se 
cess

es s c  s s e se
-  sc
  
c s sss
4  
 e e eses css vc e c 
e   
 e es  e
s e
=es es s
=es  e

es e   c  esv  es e eec
 sc
 (   e
eses css 
 e 
s s
esss e v
ves e e

  e
s s
e
=es e   ve      sc

,  
 e s 
s sses e
ess e s  
   a s e
e
e esec c
=es 
  - e
  e   e =es
! --yes c ce S c e  e > %    sse  v e 

s
se  s e
c  
es  ss : -

ess=$:
cse $spost 
0 -e 
e 88
1 ! -- s ! 
  88
2 e 0 88
* ! -- s s s  eve
 c ece
 - 88
esc
*es  a s $spost in vc c  c   s sses e v

 
v
ve se e  
eses    e c   v 

 e e   -ev#
  e   s e e e
e eve ss

  
+   Se 
ecs

cc
v
s c  s e 
 e   es   vc e se
-s 
 - c
 -e-v#
 c  e
1 -e -  s8 -e e8 -e 
e 88
* R  c   es  
 e  ese    e e eec se
e   s 
s 
v  e ee  
ess ve e   j e c e s

s =es  e
s e 0  2  sej  e s e  e  es
  c e 
 e  *  c se
 s
2e 
e-se e e s c  s   e cse eve se
se 
e ecs
esecv e e
e   e e esc  c   e  c c  e
 

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.
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:
$ arquivo=`dialog --getsavefilename "/home/urumin/Destop" \
"*.txt |Arquivos de texto"`

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 [ -w "$arquivo" ]; then
echo "ok."
else
kdialog --msgbox "Voc no tem permisso de escrita para o arquivo escolhido."
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

 e  ,  v vc s+ 
ecs c
s ee s=es e 
v e
s se
s 

es e  c
 ee  es  |
%  --
txistin
diato s s es vc s+ 
ecs esec c
 
e+
 

c  e
$ p st =`kdi lo
--
txistin
diato "/ho/$U "`

,   ee   e

  v
ve $s se
 c
 
 e    
e+
 esc
se   
s =es  e
e es e e s e see c
s s s =es -nu" "--ahaklist e --aobobox
  --nu s
  e  c s =es  e vc s+ e esce
 
c  e
$ e
c=`! -- e   e vc s
 e  e
: ?
 $e e s 
  e  ?
 0

  e  ?
c *ee
  e  ?
 , ve
e

 
 
`

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=`kdialog --getopenfilename "/home/kurumin/" "*.png *.gif *.jpg *.bmp \
|Arquivos de Imagem"`
operacao=`kdialog --menu "O que voc gostaria de fazer?" \
a "Redimensionar a imagem" \
b "Girar a imagem" \
c "Deletar a imagem" \
d "Converter para outro formato"`
case $operacao in
a) mv $imagem $imagem-OLD;
tamanho=`kdialog --inputbox "Redimensionar para qual tamanho?" "640x480"`;
convert -size $tamanho "$imagem"-OLD $imagem ;;
b) jpegorient +90 $imagem ;;
c) rm -f $imagem ;;
d) formato=`kdialog --inputbox "Converter a imagem para qual formato?" ".jpg"`;
convert $imagem "`echo $imagem | perl -pe 's/\.[^.]+$//'`$formato" ;;
*) kdialog -- msgbox "Cancelado" ;;
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:
$ operacao=`dialog --combobox "O que deseja fazerS" "girar" "redimensionar" \
"deletar" "converter"`

% e
ce
  --ahaklist e
e e sej esc s e    e 


ece
 e  e e
vs e  c  e 
e s e e se
escs
s  e e e
$ f =`kdi lo
--ahaklist " T qu
ost i d f ?" 1 "(nst l  o po
  " off 2 "L o
 nu l" on 3 "Aass  o fu" off`

% v
ve $  e
 v 
 e 
    c e  s s =es seec s )
c 
s =es 2 e 3 c   sc
ee s e ss e  v
2 3
( -  ee    -   --txtbox e ee 
vs e e 
 e
e e e 

 
v e 
  !e 
ee  s  e
e e
 e s e

Se
ve c   e
 
 s es c e
c - 
 e

vs e  

ee 
Vc e s-   
 e
 s# e c  s e  e c    c 
e s
 s c 
=es 
ee * e
e e s 
s =es  !  s
 -e vc eve esec c
  s  e s=es  j e e es Vej  ee 
 c  >   c 
! --e   c  500 320

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:
$ mix &
$ dcop mix mix-mainwindow#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:
$ dcop
kwin
kicker
kded
knotify
kio_uiserver
kcookiejar
konsole-16265
klauncher
konqueror-21806

khotkeys
kdesktop
ksmserver
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:
konqueror=`dcop | grep konqueror | 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 konsole`; do
dcop $i konsole-mainwindow#1 minimize
done
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:
$ dcop $onqueror
qt
KBookmarkManager-/home/kurumin/.kde/share/apps/konqueror/bookmarks.xml
KBookmarkNotifier
KDebug
KIO::Scheduler
KonqFavIconMgr
KonqHistoryManager
KonqUndoManager
KonquerorIface (default)
MainApplication-Interface
html-widget1
html-widget2
html-widget3
konqueror-mainwindow#1
ksycoca

Cada uma destas opes possui uma lista de funes. Por exemplo, a opo konquerormainwindow#1 controla a janela principal do konqueror. Para ver as funes relacionadas a
ela, rode o comando:
$ dcop $onqueror onqueror-mainwindow#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 $konqueror konqueror-mainwindow#1 maximize
$ dcop $konqueror konqueror-mainwindow#1 minimize
$ dcop $konqueror konqueror-mainwindow#1 hide
$ dcop $konqueror konqueror-mainwindow#1 reload
$ dcop $konqueror konqueror-mainwindow#1 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:
$ dcop mail default checMail
Voc pode ver os comandos DCOP disponveis em cada um dos aplicativos abertos de uma
forma mais conveniente usando o "dcop". 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.

Us ndo os sianus do 
)s   c  e
ess e 
 s se sc
s s s e s e c e  "* e

ece  cc
c   
e s
e 
vs e ss
(  ee
  e
 e 
ece

 s s 
vs s s ss  e s

  s 
s e 
vs esec# cs % cc
s
e   s vc e   e
c

 ,* e s  "3B  cc
 
v   vc e   e esc c-
e ss 
 e Vc e c 
se
vce e s 
   e 
e 

s sc
s s se
vce e s v  s /us/sh / pps/konquo/sianus

/s s 
vs e 
  s s sc
s e see  
 
+
 c e 
e  e e eve se 
e e
 
c dsktop

ee   se
vce e 
es sve e  %cess

vs e 
  S e

ece e s  cc
s
e  
v c  ee s s  
v ont isodsktop e e  se e c e-
[*es!  
y]
%c s=  

Encoding=UTF-8
ServiceTypes=application/x-iso
[Desktop Action montar]
Exec=acessar-iso-servicemenu %u
Icon=cdrom_unmount
Name=Acessar arquivos dentro do ISO
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".

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").
%: 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
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:
#!/bin/sh
kdesu "mkdir /mnt/iso; umount /mnt/iso; mount -t iso9660 -o loop $1 /mnt/iso"
clear
konqueror /mnt/iso
kdesu umount /mnt/iso
O desu 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:
#!/bin/sh
echo $1
echo $2
echo $3

Execute o script, incluindo alguns parmetros e voc ver que ele vai justamente repetir todos
os parmetros que incluir.

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 [ "$?" = "2" ]; then exit 0; fi
O script "sudo-verificar", chamado por ela, tem o seguinte contedo:
#!/bin/sh
sudoativo=`sudo whoami`
if [ "$sudoativo" != "root" ]; then
kdialog --warningyesno "O script que voc executou precisa utilizar o sudo para executar
alteraes no sistema. Atualmente o Kurumin est operando em modo seguro, com o sudo
desativado para o usurio atual.
Voc gostaria de mudar para o modo root, ativando o sudo? Para isso ser necessrio fornecer

a senha de root. Caso prefira abortar a instalao, responda No. Voc pode tambm executar
o script desejado diretamente como root."
retval=$?
if [ "$retval" = "0" ]; then
sudo-ativar
fi
if [ "$retval" = "1" ]; then
exit 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:
[Desktop Entry]
ServiceTypes=image/*
Actions=resize75;resize66;resize50;resize33;resize25;
X-KDE-Submenu=Redimensionar a imagem
[Desktop Action resize75]
Name=Redimensionar para 75% do tamanho original
Icon=thumbnail
Exec=img-resize 75 %u

[*es! %c
es e66]
U
 e=$e e s 

 66     
 
c =  
ec= -
es e 66 @
[*es! %c
es e50]
 e=$e e s 

 50@     
 
c =  
ec= -
es e 50 @
[*es! %c
es e33]
 e=$e e s 

 33@     
 
c =  
ec= -
es e 33 @
[*es! %c
es e25]
 e=$e e s 

 25@     
 
c =  
ec= -
es e 25 @
Vej e s 
 e
s  s ecess
 esec c
e ee s+ se c   e s
Se
vce/yes= e* e es esec c
s s =es s #ves c    
se 
 c   s  e  ese  e 
  - e
 e =es e e se

c s ese cs s+ ee e  s c c 

,   ee   e

 ese sc
 c   sc
 ee
  i
-si 
 eec

s e
=es e  sc
 s es e s  c ve
 e v s  es
s
e 
"  e
 
  e
s c ve
s=es
#> s
ec , ve
e  $2 
 $1@     
 
ec Bc!   e 
  sv e $2
 
c $2 $2
 
c ve
 -y 90 -s e $1@$1@ $2 $2-

- $28 v $2- $28 see 1


ec !>
s 
; e
s $1 e $2 s
eces  sc
  se
vce e  $1  e
ce e e

e e s  e    e  e    $2   e 


v

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:
ServiceTypes=all/all
Actions=kaffeine_append_file
Encoding=UTF8
[Desktop Action kaffeine_append_file]
Name=Append to Kaffeine Playlist
Name[hu]=Felvtel a Kaffeine Lejtszlistba
Name[de]=Zur Kaffeine Stckliste hinzufgen
Name[sv]=Lgg till i Kaffeine spellista
Exec=dcop kaffeine KaffeineIface appendURL %u
Icon=kaffeine
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):
$ lspci
0000:00:00.0 Host bridge: nVidia Corporation nForce2 AGP (different version?) (rev c1)
0000:00:00.1 RAM memory: nVidia Corporation nForce2 Memory Controller 0 (rev c1)
0000:00:00.2 RAM memory: nVidia Corporation nForce2 Memory Controller 4 (rev c1)
0000:00:00.3 RAM memory: nVidia Corporation nForce2 Memory Controller 3 (rev c1)

0000:00:00.4 RAM memory: nVidia Corporation nForce2 Memory Controller 2 (rev c1)
0000:00:00.5 RAM memory: nVidia Corporation nForce2 Memory Controller 5 (rev c1)
0000:00:01.0 ISA bridge: nVidia Corporation nForce2 ISA Bridge (rev a4)
0000:00:01.1 SMBus: nVidia Corporation nForce2 SMBus (MCP) (rev a2)
0000:00:02.0 USB Controller: nVidia Corporation nForce2 USB Controller (rev a4)
0000:00:02.1 USB Controller: nVidia Corporation nForce2 USB Controller (rev a4)
0000:00:02.2 USB Controller: nVidia Corporation nForce2 USB Controller (rev a4)
0000:00:04.0 Ethernet controller: nVidia Corporation nForce2 Ethernet Controller (rev a1)
0000:00:08.0 PCI bridge: nVidia Corporation nForce2 External PCI Bridge(rev a3)
0000:00:09.0 IDE interface: nVidia Corporation nForce2 IDE (rev a2)
0000:00:1e.0 PCI bridge: nVidia Corporation nForce2 AGP (rev c1)
0000:01:07.0 Multimedia video controller: Brooktree Corporation Bt878 Video Capture (rev
11)
0000:01:07.1 Multimedia controller: Brooktree Corporation Bt878 Audio Capture (rev 11)
0000:01:0a.0 Multimedia audio controller: Creative Labs SB Live! EMU10k1 (rev 08)
0000:01:0a.1 Input device controller: Creative Labs SB Live! MIDI/Game Port (rev 08)
0000:02:00.0 VGA compatible controller: nVidia Corporation NV17 [GeForce4 MX 440] (rev a3)
$ lsusb
Bus 002 Device 009: ID 043d:009a Lexmark International, Inc.
Bus 002 Device 003: ID 058f:9254 Alcor Micro Corp. Hub
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
$ 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 | grep "VGA compatible controller: Intel Corp."`
if [ -n "$intelonboard" ];
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 [ -e "/etc/fstab" ]; then <comandos>; 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.
-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 [ -w "$arquivo" ] then echo "ok."; else kdesu "chmod 666 $arquivo"; fi
-x: Verifica se o arquivo executvel.
-ef: EqualFile, permite verificar se dois arquivos so iguais, como em:
if [ "/etc/fstab" -ef "/etc/fstab.bk" ] then <comandos>; 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 includanenhuma
nova entrada no dmesg, nada. Este um exemplo onde um mtodo "fora bruta" pode ser
usado.
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:
# fdisk -l /dev/sda
Disk /dev/sda: 524 MB, 524025856 bytes
17 heads, 59 sectors/track, 1020 cylinders
Units = cylinders of 1003 * 512 = 513536 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 1020 511500+ b W95 FAT32
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:
#!/bin/sh
mkdir /tmp/leitorcd; cd /tmp/leitorcd
for part in /dev/sd[abcdef]; do
PARTICAO=`sudo fdisk -l $part | grep "$part"1 | grep FAT`
if [ -n "$PARTICAO" ]; then
DEV=`echo $part | cut -d "/" -f 3`
tamanh=`sudo fdisk -s "$part"1`; tamanho=`echo "$tamanh" / 1000 | bc`
kdialog --yesno "Detectado o dispositivo "$part"1, com $tamanho MB. Gostaria de criar um
cone para acessar os arquivos no desktop?"

if [ "$?" = "0" ]; then


sudo mkdir /mnt/"$DEV"1
echo "[Desktop Entry]" > /home/$USER/Desktop/"$DEV"1.desktop
echo "Exec=sudo mount -t vfat -o umask=000 /dev/"$DEV"1 /mnt/"$DEV"1; konqueror
/mnt/"$DEV"1; sudo umount /mnt/"$DEV"1; sync" >>
/home/$USER/Desktop/"$DEV"1.desktop
echo "Icon=usbpendrive_unmount" >> /home/$USER/Desktop/"$DEV"1.desktop
echo "Name="$DEV"1" >> /home/$USER/Desktop/"$DEV"1.desktop
echo "Type=Application" >> /home/$USER/Desktop/"$DEV"1.desktop
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.
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:
DEV=`echo $part | cut -d "/" -f 3`
tamanh=`sudo fdisk -s "$part"1`; tamanho=`echo "$tamanh" / 1000 | 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 "umas=000".
A tarefa relativamente simples, basta abrir o arquivo "/etc/fstab" e adicionar a opo na
linha referente partio.
Ao invs de:
/dev/hda1 /mnt/hda1 auto noauto,users,exec 0 0
Ficaramos com:
/dev/hda1 /mnt/hda1 auto noauto,users,exec,umas=000 0 0
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".
Uma forma de fazer isto verificando a sada do comando "fdis -l", que mostra detalhes
sobre as parties, como em:
# fdis -l /dev/hda
Disk /dev/hda: 20.0 GB, 20003880960 bytes
255 heads, 63 sectors/track, 2432 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 401 3221001 7 HPFS/NTFS
/dev/hda2 402 1042 5148832+ 83 Linux
/dev/hda3 1116 2432 10578802+ 5 Extended
/dev/hda4 1043 1115 586372+ 83 Linux
/dev/hda5 1116 1164 393561 82 Linux swap / Solaris
/dev/hda6 1165 2432 10185178+ 83 Linux
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=`fdisk -l /dev/hda | grep hda1 | grep NTFS`
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 [ -n "$winntfs" ]; then
# O gigantesco comando abaixo forma uma nica linha:
sed -e 's/\/dev\/hda1 \/mnt\/hda1 auto noauto,users,exec 0 0/\/dev\/hda1 \/mnt\/hda1
auto noauto,users,exec,umas=000 0 0/g' /etc/fstab > /tmp/fstab2
rm -f /etc/fstab; mv /etc/fstab2 /etc/fstab
fi
Veja que a linha do sed um pouco longa. A sintaxe bsica para fazer substituies :
$ sed -e 's/texto/novo-texto/g' arquivo > novo-arquivo
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.
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:
$ sed -e '/Load "dri"/D' /etc/X11/xorg.conf > /tmp/xorg.conf.new
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:
$ sed -e '/^\#/D' /etc/lilo.conf > /tmp/lilo.conf.new
Note que precisei incluir uma barra invertida antes do "#". Para remover todas as linhas em
branco de um arquivo, use:
$ sed -e '/^$/D' /etc/X11/xorg.conf > /tmp/xorg.conf.new
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:
$ sed -e '/^\#/D' /etc/lilo.conf | sed -e '/^$/D' /etc/lilo.conf > /tmp/lilo.conf.new

Para eliminar espaos repetidos num arquivo (til caso voc queira filtrar alguma informao
usando o cut):
$ sed -r 's/ +/ /g' /etc/X11/xorg.conf > /tmp/xorg.conf.new
Para substituir todos os espaos por quebras de linha (representadas pelo "\n" dentro do sed):
$ sed -e 's/ /\n/g' /tmp/myfreq >> /tmp/myfreq2
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:
$ sed ':a;$!N;s/\n//;ta;' ~/.synergy.conf > /tmp/synergy.conf
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):
$ cat .synergy.conf | sed 's/^/ /' | sed ':a;$!N;s/\n//;ta;'
section: screens kurumin: semprao: end section: links semprao: right = kurumin kurumin: left =
semprao end section: aliases kurumin: 192.168.1.102 end
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.hardware.com.br/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:
# Verifica se o sources.list contm entradas para o unstable,
# se no tiver adiciona:
unstable=`sed '/^$/d' /etc/apt/sources.list | sed '/#/d' \
| grep "unstable main contrib"`
if [ -z "$unstable" ]; then
echo "deb http://ftp.us.debian.org/debian unstable \
main contrib non-free" >> /etc/apt/sources.list
remover="1"
fi

# Adiciona o repositrio do freenx


kano=`sed '/^$/d' /etc/apt/sources.list \
| sed '/#/d' | grep "project/kanotix/unstable/"`
if [ -z "$ano" ]; then
echo 'deb http://debian.tu-bs.de/project/kanotix/unstable\
/ ./' >> /etc/apt/sources.list
removerkano="1"
fi
# Instala o freenx a partir do unstable do Kano
apt-get update
apt-get install -t unstable freenx
nxsetup --install --setup-nomachine-key
# Remove o unstable e/ou o repositorio do kano, se adicionado:
if [ "$remover" = "1" ]; then
rm -f /tmp/sources.list
sed -e '/deb http:\/\/ftp.us.debian.org\/debian unstable main contrib non-free/D' \
/etc/apt/sources.list > /tmp/sources.list
rm -f /etc/apt/sources.list
cp /tmp/sources.list /etc/apt/sources.list
apt-get update
fi
if [ "$removerano" = "1" ]; then
rm -f /tmp/sources.list
sed -e '/deb http:\/\/debian.tu-bs.de\/project\/anotix\/unstable\/ \.\//D' \
/etc/apt/sources.list > /tmp/sources.list
rm -f /etc/apt/sources.list
cp /tmp/sources.list /etc/apt/sources.list
apt-get update
fi
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 '/^$/d'), as linhas comentadas (sed '/#/d') 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 '/^$/d' /etc/apt/sources.list | sed '/#/d' \


| grep "unstable main contrib"`
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 :
http://aurelio.net/sed/.

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:
# lilo
Added Kurumin *
Added memtest86
Caso exista algum erro no arquivo de configurao, ele avisa do problema e por segurana no
salva as alteraes:
# lilo
Added Kurumin *
Added memtest86
Fatal: First sector of /dev/hda4 doesn't have a valid boot signature
Em alguns casos, um comando que no faz sua parte dentro do script pode causaruma
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.

while [ "$lilogravado" != "1" ]; do


clear
# Remove o arquivo temporrio usado
rm -f /tmp/lilo.txt
lilo -t -r $TR 2>> /tmp/lilo.txt
testelilo=`cat /tmp/lilo.txt | grep Fatal`
if [ -n "$testelilo" ]; then
BT="Instalador do Kurumin"
M1="Existe um erro no arquivo de configurao do lilo que est impedindo a instalao. Vou
abrir novamente o arquivo para que voc possa revis-lo. Procure por erros de digitao e em
ultimo caso experimente desfazer as alteraes feitas.\n\n
Ao fechar a janela do Kedit, vou tentar gravar o lilo novamente e avisar caso o erro persista. O
erro informado :\n\n
$testelilo"
$DIA --backtitle "$BT" --title "Lilo" --msgbox "$M1" 18 76
kedit $TR/etc/lilo.conf &>/dev/null
else; lilogravado="1"; 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:
#!/bin/sh
rm -f /tmp/apt
# Executa o apt-get "real", passando os parmetros recebidos:
apt-get $1 $2 | tee /tmp/apt
# Verifica se algum pacote no pde ser baixado:
erro1=`cat /tmp/apt | grep "404 Not Found"`
if [ -n "$erro1" ]; then
kdialog --yesno "Alguns pacotes no puderam ser baixados. Isto significa que provavelmente a
lista de pacotes do apt-get est desatualizada. Gostaria de rodar o apt-get update para
atualizar a lista e repetir a instalao?"
resposta=$?
if [ "$resposta" = "0" ]; then
apt-get update
apt-get $1 $2 | tee /tmp/apt
# Verifica novamente, caso o erro persista exibe uma segunda mensagem:
erro1=`cat /tmp;/apt | grep "404 Not Found"`
if [ -n "$erro1" ]; then
kdialog --msgbox "O erro se repetiu. Isto significa que ou o pacote no est mais disponvel, o
servidor est fora do ar, ou sua conexo com a web est com problemas."
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, 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:
# tar -zcvf programa.tar.gz usr/ etc/
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.
linhas=6
tail -n +$linhas $0 | tar -zxvf - -C /
ln -s /usr/local/programa/programa.sh /usr/bin/programa.sh
kdialog --msgbox "Instalao concluda. Use o comando 'programa.sh'"
exit 0
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:
# cat script.sh programa.tar.gz > programa.sh

Mais exemplos teis


A funo "for" pode ser usada para executar tarefas repetitivas, como por exemplo:
for arquivo in *.mp3
do
lame -b 64 "$arquivo" "64k-$arquivo"
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 {1,2,3,5,6,7}
do
mkreiserfs /dev/hda$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 $(seq 1 10)
do
touch arquivo$numero.txt
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:
$ mount
/dev/hda1 on / type reiserfs (rw,noatime)
none on /proc type proc (rw,nodiratime)
/sys on /sys type sysfs (rw)
/dev/hda2 on /home type reiserfs (rw,noatime,notail)
/dev/hda3 on /home type ext3 (rw)
/dev/hda6 on /mnt/hda6 type 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:
$ mount | grep /dev/hda2
/dev/hda2 on /home type reiserfs (rw,noatime,notail)
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.
$ mount | grep /dev/hda2 | sed -e '/^$/D' | cut -d " " -f 5
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:

kdialog --inputbox "Digite seu cdigo com 5 caracteres" | cut -c 1-5 > /tmp/resposta
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".
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:
ARQ1=`kdialog --getopenfilename "/home/$USER" "*.torrent |Arquivos .torrent"`
ARQ2=`echo $arq | sed -r 's/ /\\\ /g'`
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 $ARQ2 > /tmp/bt1
rev /tmp/bt1 | cut -f 2- -d "/" > /tmp/bt2
PASTA=`rev /tmp/bt2`
rm -f /tmp/bt1 /tmp/bt2
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.
UPLOAD=`kdialog --inputbox "Taxa maxima de upload" 8`
xterm -e "cd $PASTA; btdownloadcurses --max_upload_rate $UPLOAD $ARQ2" &

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:RRPHE1yRTfEKo:12840:0:99999:7:::
daemon:*:11453:0:99999:7:::
bin:*:11453:0:99999:7:::
proxy:*:11453:0:99999:7:::
kurumin:gMBaRFGpJx86c:12840:0:99999:7:::
saned:!:12766:0:99999:7:::
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:
# Remove as linhas com "*"
sed -e '\/*/D' /etc/shadow > /tmp/usuarios1
# Remove as linhas com "!"
sed -e '\/!/D' /tmp/usuarios1 > /tmp/usuarios2
# Remove o restante da linha, deixando apenas o nome do usurio.
# (o cut mostra apenas o primeiro campo da linha, antes do ":"
cat /tmp/usuarios2 | cut -d: -f1 >> /tmp/usuarios
# Aqui temos duas variveis com os nomes dos usurios, que podem ser
# usadas de acordo com a situao.
# A primeira, "usuarios" mantm as quebras de linha, com um usurio por
# linha enquanto a "userlist" contm todos os usurios na mesma linha.
usuarios=`cat /tmp/usuarios`
userlist=`echo $usuarios`
# Remove os arquivos temporrios
rm -f /tmp/usuarios /tmp/usuarios1 /tmp/usuarios2

# Uma mensagem de aviso:


kdialog --msgbox "Os usurios atualmente cadastrados no sistema so:
$userlist"
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":
# fdis -l /dev/hda | grep hda1 | sed -r 's/ +/ /g' | cut -d " " -f 5
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 "$numero * 3" | bc
Para dividir $numero por 4:
$ echo "$numero / 4" | 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:
$ echo "$numero / 4.56" | 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):
$ let "numero=numero+1"
Para multiplicar o valor por dois:
$ let "numero=numero*2"
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:
# import -window root screen.png
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:
DATA=`date +%Y-%m-%d-%H.%M`
import -window root screen-$DATA.png
sleep 60
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.
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:
TMP=`mktemp /tmp/arq.XXXXXX`
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
varivel "TMP", como em:
cat /etc/fstab | grep /dev/hda1 >> $TMP
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 "mdr-editor" o editor que permite criar as interfaces,
enquanto o "mdr-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 ommander". 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.
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 mdr-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.


 s =es e esc  c  e e  e 
v v s
 &e Lin dit e
V
c
     eve V s
s  
 c  j  c s  xtL bl s
ee s s es e e
Vc e esce
 e 
 s =es     ce s
e es  j e e


ees vc e c 

=es c    e    s  es c
es
  e   e ec ss =es  e c
 c  &e s

e    es e 
ec  c  vs e s e c 
s =es 4 s
c se 
ec

 e
 c  
e c c e e

 c
 
evs es e
 sc
 esve
 c  

e e 
 s s cs 
ecs se

 e  e v
ves 
 e ss s  s s 
e e 
  sc
 
 c 
 e ss c e ce c   
e
s
e c   s cs e cesse    dit xt Assoai tions  c  e
 WX id
txt

ss  c e  !  e
c
e   v
ve c e   e  e 
  c
s v
ve e  es   e  &e  e ese e vc esce s 

ees


 c
   v es v  e
s s cs c  c  e e 
 c  e e e  e  s  e

4 
ecs  c
   &e 
 sv
 
v "  e
 e
ece    
e s 
 --esve e  e  !  &e pil lato %c e  


  c   e s c s s cs e e
Fe Seec
e se
s 
 

 
v esce
  s  sv


v 
ecs s  c
    ss s 

ees
 ss c 
e  
slationp c     c  e  j e se
v
 
 sv
 
v
Vej e 
vee   
 c 

  slationpilt c  *v * 
*&  e  c e  j e  e
e c
e 
vs s
e e s 
vs e
v#e c s 
s ee s=es esec cs e sve s 
vs c  ee s v es  e
 s
  esec e  ee s %  slationC ption e
e esce
 # 
j e 
 sv


 se ese e c 



   dit xt Assoai tions  &e c  YZ id
tx
c   e s c s s cs e e e esce
  e s 

ees  e
cs ee   e c  
v
Vc e ve
 
eve&   e
ce e es e  cc   Visu li o >
i po s e
e 
 
es  c  c 
e 
c   se
e
e s e

s se c e 
F  c
  
 esce
 e e 
v ese cs s 
; e
s e
e se
esec cs    e c    e ce
 V c

s =es se
s

 
 esce

es  v#e 640480  320240 e 
 
 esce
 
e
e ee
   e e       
v
 cs 
es v  e
ece
e s s =es 
ss s  &e  dioButton
c
  s =es ses =es 
ecs se
ecsvs  sej e s  ees e se

seec  e c ve  


 ss v 
ecs
cc-s e 
 e  ButtonGoup 

&e e   esce e 
 e e
e 

v
s =es e 
 e ees
se c 
e  
 esej
s v e vve
 - e
 
e sss 
 e
 c
e  B 0
    
esej e ce s =es e 
 ee s 

ees esc  es 
 s 
s 
e cs ce 
esc 
  B 0
 
esc1 e 
esc2 
 s
=es
s 

ees  B 0
 c 
e    dioButton xalusi c 
Vd dio ss  c e e s  s =es e 
 ee ss se

c e c
ve 
*e 
 s 

ees  
 e
  ee   Chakd c  Vd dio ss
 c e ee e 
c 


% ese vve
   e
ce  
 e  e
c e s s =es se 
ee 
 v

 ss     sse e e

s 

e  s
 j e  sc

v  c 
es  e ee  c 
e s s =es

F 
 c 

  dit xt Assoai tions s s =es 
 
 e 
 c e-
 v
ve e se
 c
 cs c  ees sej 
ess  *es ve  v s

<&e/e s s =es  c  e   V  c
  e e  v


 
 c  s s =es
( ees c e
  v
&=640 e=480 e  
  v
&=320 e=240
e s s =es e e
 se
 c#s    e c    e ce
e se

c
  eec
 

  2e 
e-se e e e s  s s =es e se


c e c ve  
ss e s   s s =es se
 s

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.

Como disse acima, o bitrate determina a qualidade do vdeo gerado, especificando o nmero
de kbits que sero reservados para cada segundo devdeo. 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="@arquivo"
if [ -z "$verificador" ]; then
kdialog --msgbox "Voc esqueceu de indicar o arquivo onde o vdeo ser salvo ;-)"
exit 0
fi
kdialog --title "Gravando" --passivepopup "Gravando o canal $var1
por: @tempo horas
no arquivo: @arquivo
Feche a janela de terminal para abortar" 6 &
xterm -e "mencoder tv:// -tv driver=v4l2:input=0:normid=4:channel=@canal:chanlist=usbcast:@resolucao:device=/dev/video0:adevice=/dev/dsp0:audiorate=48000:forceaudio:forcec
han=2:buffersize=64 -quiet -oac mp3lame -lameopts preset=medium -ovc lavc -lavcopts
vcodec=mpeg4:vbitrate=@bitrate:keyint=132 -vop pp=lb -endpos @tempo -o @arquivo "
kdialog --title "Gravar-TV" --passivepopup "Ok!
A gravao terminou." 5 &
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, "@".
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 kmdrexecutor:
$ mdr-executor gravar-tv.mdr
A segunda parte do trabalho envolve dar uma melhorada no aspecto visual. Vocpode
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.
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).

% 
 s &es c  s ees e e cs ec sse v
s =es e
c
es e  es e 
 s 

ees e e
e  e
  
 s  ve
s
 c  sc
 e ese vv 
 s  "
 



ec
s  e
ess e  "  e
e ve se  e

 e e s vs
ve
s=es s s aonxs s e
e c 
ee e s  ; cs   e
ce 
e2e cj c e-    vc cc    s
  
=es s
e 

v esc  Fe Seec
e ss 
 e

 s
ese
ec
s ce
 e-se e e
 s   ve
s
ece e  "  e
 e

e e
c  12 e  e s  es ss  s
e   e
  ce e e  s e

es  c v ve
s

 se
ese ee  vc 
ecs es
s  e e s  "  e
10   s
ve
s=es  s  sse  e c e=es    esv e
  s =es   
es 
V s s
 s c e=es 
 c

 e
e  e s 
 v , ece c
  
v 
je e ese e    e
ce c e   FeSeec
  e2e 
 2e e 
 =es e s
e s 
 c 
 s  =es e e 

e     c# c+   e s ese e s &es

jev  e
c e  
v e  e esc  FeSeec
sej e 
 2e  es  e  e e  c  e  es c es  
v s
s
s  e2e %s s css  s  c e e se e sej ecess


ess 
e  
s =es v c e
s  s  =es escs 
 ee
  e  

e  
s
s c s  v e e s  c e=es
V s c e
 e  c e   e sej e   2e 
c
e 
p nt d aonxo   e
ce 
 c ,e 
 e
 s
e  FeSeec
e 

se
   2e ss c
   c e e 
e ees  c es s 
s
s e

ece 

 j e e 

ees e se
 e
 vc ve
 s j es   c s s s
s #ves  FeSeec
e  
  s 

ees   2e e e se

e
s    s  seec  e 
)
e   id
txtCh n
d [aonst \tin
    FeSeec
e  
]
st id
txt [aonst \tin
     2e ,e  Conat  
 e ev

c e

e  e s   esec c


e    e e 
  FeSeec

e
 
sej   
esc  
v  c e-   2e  e  
c e-  
v Se sse   c e e se
 s
  c e-  
v 

 e e8 s c  es s s    c e  e  se
 s
  
eve&
  e 
,
e 
   v c e    FeSeec
e  e2e  j e e 

ees

e   id
txtCh n
d ^aonst _tin
 
  FeSeec
 es   ss
 e

 e   opul t 
  e2e

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.

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:


@exec(identify "@arquivo.text" | cut -d " " -f 2-10)
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 passaa 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:
#!/bin/sh
sed '/^$/d' /etc/exports | sed '/#/d' > /tmp/kexports
cat /tmp/kexports
E a funo dentro das propriedades do boto, na interface do Kommander, fica:
@exec(/etc/Painel/servidor-nfs.sh)
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:
kdialog --yesno "Tem certeza?"
retval=$?
if [ "$retval" = "0" ]; then
rm -f @arquivo.text
fi
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:
jpegorient +90 @arquivo.text
jpegorient +270 @arquivo.text
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.

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.
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.

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.hardware.com.br/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`
killall synergys
rm -f /home/$USER/.synergy.conf
touch /home/$USER/.synergy.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", "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' >> /home/$USER/.synergy.conf
right="@direita"
if [ "$right" = "1" ]; then

right_nome="@direita_nome.text"; right_ip="@direita_ip.text"
echo "$right_nome:" >> /home/$USER/.synergy.conf; fi
left="@esquerda"
if [ "$left" = "1" ]; then
left_nome="@esquerda_nome.text"; left_ip="@esquerda_ip.text"
echo "$left_nome:" >> /home/$USER/.synergy.conf; fi
up="@cima"
if [ "$up" = "1" ]; then
up_nome="@cima_nome.text"; up_ip="@cima_ip.text"
echo "$up_nome:" >> /home/$USER/.synergy.conf; fi
down="@baixo"
if [ "$down" = "1" ]; then
down_nome="@baixo_nome.text"; down_ip="@baixo_ip.text"
echo "$down_nome:" >> /home/$USER/.synergy.conf; fi
echo "$server:" >> /home/$USER/.synergy.conf
echo "end" >> /home/$USER/.synergy.conf
echo "" >> /home/$USER/.synergy.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.
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 "section: links" >> /home/$USER/.synergy.conf
echo "$server:" >> /home/$USER/.synergy.conf
if [ "$right" = "1" ]; then
echo "right = $right_nome" >> /home/$USER/.synergy.conf; fi
if [ "$left" = "1" ]; then
echo "left = $left_nome" >> /home/$USER/.synergy.conf; fi

if [ "$up" = "1" ]; then


echo "up = $up_nome" >> /home/$USER/.synergy.conf; fi
if [ "$down" = "1" ]; then
echo "down = $down_nome" >> /home/$USER/.synergy.conf; 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 [ "$right" = "1" ]; then
echo "$right_nome:" >> /home/$USER/.synergy.conf
echo "left = $server" >> /home/$USER/.synergy.conf; fi
if [ "$left" = "1" ]; then
echo "$left_nome:" >> /home/$USER/.synergy.conf
echo "right = $server" >> /home/$USER/.synergy.conf; fi
if [ "$up" = "1" ]; then
echo "$up_nome:" >> /home/$USER/.synergy.conf
echo "down = $server" >> /home/$USER/.synergy.conf; fi
if [ "$down" = "1" ]; then
echo "$down_nome:" >> /home/$USER/.synergy.conf
echo "up = $server" >> /home/$USER/.synergy.conf; fi
echo "end" >> /home/$USER/.synergy.conf
echo "" >> /home/$USER/.synergy.conf
Esta seo do script produz algo como:
section: links
semprao:
right = toshiba
left = fedora
toshiba:
left = semprao
fedora:
right = semprao
end
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 "section: aliases" >> /home/$USER/.synergy.conf
if [ "$right" = "1" ]; then
echo "$right_nome:" >> /home/$USER/.synergy.conf
echo "$right_ip" >> /home/$USER/.synergy.conf; fi

if [ "$left" = "1" ]; then


echo "$left_nome:" >> /home/$USER/.synergy.conf
echo "$left_ip" >> /home/$USER/.synergy.conf; fi
if [ "$up" = "1" ]; then
echo "$up_nome:" >> /home/$USER/.synergy.conf
echo "$up_ip" >> /home/$USER/.synergy.conf; fi
if [ "$down" = "1" ]; then
echo "$down_nome:" >> /home/$USER/.synergy.conf
echo "$down_ip" >> /home/$USER/.synergy.conf; fi
echo "end" >> /home/$USER/.synergy.conf
echo "" >> /home/$USER/.synergy.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="@desk_icon"
if [ "$icon" = "1" ]; then
echo '[Desktop Entry]
Exec=xterm -e synergys -f
GenericName=Ativar o Synergy
Icon=krdc
Name=Ativar o Synergy
Type=Application
X-KDE-SubstituteUID=false' > /home/$USER/Desktop/Ativar\ o\ Synergy.desktop
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 "GenericName=Conectar ao servidor $server" >> /home/$USER/Desktop/server.desktop
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.
xterm -e synergys -f
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=@ip_server.text
if [ -n "$server" ]; then
xterm -e synergyc -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:
# cpufreq-info
cpufrequtils 0.2: cpufreq-info (C) Dominik Brodowski 2004
Report errors and bugs to linux@brodo.de, please.
analyzing CPU 0:
driver: p4-clockmod
CPUs which need to switch frequency at the same time: 0
hardware limits: 175 MHz - 1.40 Ghz
available frequency steps: 175 MHz, 350 MHz, 525 MHz, 700 MHz, 875 MHz, 1.05 GHz, 1.23
GHz, 1.40 Ghz
available cpufreq governors: ondemand, powersave, userspace
current policy: frequency should be within 175 MHz and 1.40 Ghz.
The governor "userspace" may decide which speed to use within this range.

aunt CU fquna is 140 G` sse


e y c  
&
e
e s#  c   se e  
cess
 ,ee
 ) 
ss   cc! s

v
s
e. cs e 
e 175 )1 e 14 01 e e ee es  e e e
  
e. c
 

 js

e. c  
cess
 vc s  c   c
e-se -  se e

e. c esej e !1  c  e
# apufq-st -f 1050
se     -
ond nd  e 
e. c js   c e e e c

c     
cess

V s   ee  e sc
 e e
 
ese 
ess =es e   
 s

ve % es s  s , B  ees es esc  
s  e v s
ve
 
 e se  /e2e e s =es
es e s cs e e
ecvs e 
s ee e s cs cs e vc e
 s
  e c
 c 
-c    sc
 se es 

/e2e ee 
e. c  eec   e  e e  sc
 e

e    
 e
 , B s
   s s
e. cs s
s% s s css
s e
#s  s#  c   c
e-  s   
e e  c

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 p4_clockmod
modprobe freq_table
modprobe speed step_lib
modprobe cpufreq_powersave
modprobe cpufreq_ondemand
modprobe cpufreq_userspace
rm -f /tmp/myfreq; rm -f /tmp/freq
availablefreq=`cpufreq-info | grep "frequency steps" | sed -r 's/ +/ /g' | cut -f 5-100 -d " "`
myfreq=`echo $availablefreq | sed -e 's/\\.//g' | sed -e 's/ GHz/0000/g' | sed -e 's/ MHz/000/g'
| sed -e 's/,//g'`
echo $myfreq | sed -e 's/ /\n/g' | sed -e 's/ //g' >> /tmp/myfreq
cpufreq-info | grep "current CPU frequency is" | sed -r 's/ +/ /g' | cut -f 6-7 -d " " >> /tmp/freq
kmdr-executor k-cpufreqd.kmdr
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:".

Aqui voc pode acrescentar comandos que sero executados na abertura do painel.
procintel=`cat /proc/cpuinfo | grep Intel`
if [ -z "$procintel" ]; then
kdialog --msgbox "Desculpe, por enquanto este script funciona apenas em processadores Intel
que suportam o speed-step."
kill @pid
fi
@freq.insertItems(@exec('cat /tmp/myfreq'),0)
@ComboBox2.insertItems(@exec('cat /tmp/freq'),0)
@Label1.setText("@ComboBox2.text")
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 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:
cpufreq-set -f @freq.text
kdialog --yesno "Gostaria que esta configurao seja restabelecida durante o boot? Istocriar
o arquivo '/etc/rcS.d/S70cpufreq', que executar os comandos necessrios durante o boot.
Responder 'No' desativa uma configurao salva anteriormente."
if [ "$?" = "0" ]; then
rm -f /tmp/S70cpufreq 2>/dev/null
cat <<EOF >/tmp/S70cpufreq
modprobe p4_clockmod
modprobe freq_table
modprobe speedstep_lib
modprobe cpufreq_powersave
modprobe cpufreq_ondemand
modprobe cpufreq_userspace
cpufreq-set -f @freq.text
EOF

rm -f /etc/rcS.d/S70cpufreq
mv /tmp/S70cpufreq /etc/rcS.d/S70cpufreq
chmod +x /etc/rcS.d/S70cpufreq
else
rm -f /etc/rcS.d/S70cpufreq
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.

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-storage 0x000f 0x03ee 0x0000 0x0000 0x0245 0x00 0x00 0x00 0x00 0x00 0x00
0x00000000
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 003 Device 023: ID 05e3:0702 Genesys Logic, Inc. USB 2.0 IDE Adapter
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.
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:
gaveta 0x0003 0x05e3 0x0702 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000
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.
Este seria um exemplo de script simples, que faria backup da pasta "/mnt/hda6/ARQUIVOS/":
#!/bin/sh
umount /mnt/sda1; sleep 1
mount /dev/sda1 /mnt/sda1
montado=`mount | grep /mnt/sda1`
if [ -z "$montado" ]; then
exit 2
else
rsync -av /mnt/hda6/ARQUIVOS/ /mnt/sda1/ARQUIVOS
sync

umount /mnt/sda1
fi
touch /tmp/deu_certo
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 /tmp/ | grep "kde" | sed -s '/root/D' | cut -f "2" -d "-"`
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:
#!/bin/sh

usuario=`ls /tmp/ | grep "kde" | sed -s '/root/D' | cut -f "2" -d "-"`


cp -f /home/$usuario/.Xauthority /root/
export DISPLAY=:0
kdialog --yesno "Fazer o backup?"
resposta=$?
if [ "$resposta" = "0" ]; then
umount /mnt/sda1; sleep 1
mount /dev/sda1 /mnt/sda1
montado=`mount | grep /mnt/sda1`
if [ -z "$montado" ]; then
exit 2
else
rsync -av /mnt/hda6/ARQUIVOS/ /mnt/sda1/ARQUIVOS
sync
umount /mnt/sda1
kdialog --msgbox "Backup completo"
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":
joypad 0x0003 0x046d 0xc20c 0x0000 0x0000 0x00 0x00 0x00 0x00 0x00 0x00 0x00000000
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:
#!/bin/sh
usuario=`ls /tmp/ | grep "kde" | sed -s '/root/D' | cut -f "2" -d "-"`
cp -f /home/$usuario/.Xauthority /root/
export DISPLAY=:0
sudo -u $usuario epsxe
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:
#!/bin/sh
# Script para detectar pendrives e cartes, criando e removendo cones no desktop
# Deve ser executado pelo root ou por um usurio com o sudo ativo
# Por Carlos E. Morimoto
detecta(){
cd /sys/block/
for i in `ls | grep sd`; do
cd $i; ls | grep $i; cd /sys/block/
done
}
while [ 1 = 1 ]; do
# Adiciona cones
for i in `detecta`; do
jaexiste=`ls /home/$USER/Desktop/ | grep $i`
if [ -z "$jaexiste" ]; then
sudo mkdir /mnt/$i &>/dev/null
arg=''
FAT=`sudo fdisk -l | grep $i | grep FAT`
[ -n "$FAT" ] && arg='-t vfat -o umask=000'
NTFS=`sudo fdisk -l | grep $i | grep NTFS`
[ -n "$NTFS" ] && arg='-t ntfs -o umask=000,ro'
echo "[Desktop Entry]" >> /home/$USER/Desktop/$i.desktop
echo "Exec=sudo mount $arg /dev/$i /mnt/$i; konqueror /mnt/$i; sudo umount /mnt/$i;
sync" >> /home/$USER/Desktop/$i.desktop

echo "Icon=usbpendrive_unmount" >> /home/$USER/Desktop/$i.desktop


echo "Name=$i" >> /home/$USER/Desktop/$i.desktop
echo "StartupNotify=true" >> /home/$USER/Desktop/$i.desktop
echo "Type=Application" >> /home/$USER/Desktop/$i.desktop
echo "X-KDE-SubstituteUID=false" >> /home/$USER/Desktop/$i.desktop
echo "X-KDE-Username=" >> /home/$USER/Desktop/$i.desktop
fi
done
# Remove cones
for i in `ls /home/$USER/Desktop/ | grep sd | cut -d "." -f 1`; do
presente=`ls /sys/block/sd* | grep $i`
[ -z "$presente" ] && rm -f /home/$USER/Desktop/$i.desktop
done
sleep 6
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="usb", ACTION=="add", KERNEL=="sd??", NAME="%k", RUN+="/usr/local/bin/detectarusb"
Os parmetros usados so os seguintes:
BS="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="sdaa": 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="%": 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".
RN+=: 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:
ACTION=="remove", KERNEL=="sd*", RUN+="/usr/local/bin/remover-usb"
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.
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:
ACTION=="remove", KERNEL=="sd*", RUN+="/usr/local/bin/detectar-cartao3"
BUS="usb", ACTION=="add", KERNEL=="sd??", NAME{all_partitions}="%k",
RUN+="/usr/local/bin/detectar-cartao3"
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.
#!/bin/sh
# Por Carlos E. Morimoto
# Esta a funo que lista os dispositivos e parties presentes, gerando uma lista como:
# sda1 sda2 sdb1 sdc1 (um por linha)

detecta(){
cd /sys/block/
for p in `ls | grep sd`; do
cd $p; ls | grep $p; cd /sys/block/
done
}
# Funo que lista os usurios logados no KDE:
userfu(){
ls /tmp/ | grep "kde" | sed -s '/root/D' | cut -f "2" -d "-"
}
# Cria o cone no desktop de cada usurio logado no kde:
for u in `userfu`; do
usuario="$u"
for i in `detecta`; do
jaexiste=`ls /home/$usuario/Desktop/ | grep $i`
mkdir /mnt/$i &>/dev/null
chmod 777 /mnt/$i &>/dev/null
myfs=''
# Detecta se a partio FAT ou NTFS
de=`echo $i | cut -c 1-3`
FAT=`fdisk -l /dev/$de | grep $i | grep FAT`
[ -n "$FAT" ] && myfs='fat'
NTFS=`fdisk -l /dev/$de | grep $i | grep NTFS`
[ -n "$NTFS" ] && myfs='ntfs'
# Cria o cone apenas se ele j no existir
if [ -z "$jaexiste" ]; then
echo "[Desktop Entry]" >> /home/$usuario/Desktop/$i.desktop
echo "Encoding=UTF-8" >> /home/$usuario/Desktop/$i.desktop
echo "Exec=montar-pendrive $i $myfs; sync; sync" >> /home/$usuario/Desktop/$i.desktop
echo "Icon=usbpendrive_unmount" >> /home/$usuario/Desktop/$i.desktop
echo "Name=$i" >> /home/$usuario/Desktop/$i.desktop
echo "StartupNotify=true" >> /home/$usuario/Desktop/$i.desktop
echo "Type=Application" >> /home/$usuario/Desktop/$i.desktop
echo "X-KDE-SubstituteUID=false" >> /home/$usuario/Desktop/$i.desktop
echo "X-KDE-Username=" >> /home/$usuario/Desktop/$i.desktop
fi
done
# Remove cones de dispositivos removidos, do desktop de cada usurio:
for i in `ls /home/$usuario/Desktop/ | grep sd | cut -c 1-3`; do
presente=`ls /sys/block/ 2>/dev/null | grep $i`

[ -z "$presente" ] && rm -f /home/$usuario/Desktop/$i*.desktop


done
done
# O k-sync sincroniza os dados periodicamente, evitando perda de dados
# se o pendrive removido sem desmontar.
killall k-sync
k-sync &
exit 0
Este o cdigo do script "montar-pendrive"
#!/bin/sh
# Usado pelo script detectar-cartao3
# Permite montar uma partio em um pendrive. Detecta se o sudo est ativo ou no.
# Usa o kdesu quando o sudo est desativado.
# Exemplo de uso: "montar pendrive sda1 fat"
# Por Carlos E. Morimoto
sudoativo=`sudo whoami`
if [ "$sudoativo" != "root" ]; then
arg=''
[ "$2" = "fat" ] && arg='-t vfat -o umask=000'
[ "$2" = "ntfs" ] && arg='-t ntfs -o umask=000,ro'
kdesu "mount $arg /dev/$1 /mnt/$1"; konqueror /mnt/$1; sync; kdesu "umount /mnt/$1"
else
arg=''
[ "$2" = "fat" ] && arg='-t vfat -o umask=000'
[ "$2" = "ntfs" ] && arg='-t ntfs -o umask=000,ro'
sudo mount $arg /dev/$1 /mnt/$1; konqueror /mnt/$1; sync; sudo umount /mnt/$1
fi
E este o do k-sync, que simplesmente executa o comando "sync" a cada 30 segundos:
#!/bin/sh
while [ "1" != "2" ]; do
sync; sleep 30
done
Voc pode fazer tambm com que as regras ativem servios de sistema, quando determinados
dispositivos so conectados. Por exemplo, instalando os pacotes "bluez-utils", "bluezfirmware" 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:

ACTION=="add", KERNEL=="bluetooth", RUN+="/etc/init.d/bluez-utils start"


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:
$ udevinfo -a -p /sys/bloc/sda/
Se souber qual o device usado por ele, voc pode fazer a busca por ele, como em "udevinfoq 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:
DRIVER=="usb-storage"
SYSFS{product}=="USB TO IDE"
SYSFS{size}=="117210240"
SYSFS{serial}=="0000:00:13.2"
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:
SYSFS{manufacturer}=="Logitech"
SYSFS{product}=="WingMan Precision USB"
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.
Esta uma regra simples para o joystick, que cria o link "/dev/joypad", apontando para o
dispositivo real do joystick.
BUS="usb", SYSFS{product}=="WingMan Precision USB", NAME="%k", SYMLINK="joypad"
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="usb", SYSFS{product}=="USB TO IDE", KERNEL="sd?1", NAME="%k",


SYMLINK="gavetausb" RUN+="/usr/local/bin/backup"
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:
SYSFS{idProduct}=="00da", SYSFS{manufacturer}=="Palm_Inc.", NAME="%k",
SYMLINK="pendrive", OWNER="joao", MODE="0600"
Voc pode encontrar mais alguns documentos sobre o tema, incluindo mais exemplos no:
http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html.

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.

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.
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).
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.

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".
# mount -t reiserfs /dev/hda6 /mnt/hda6
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:
# mdir /mnt/hda6/nxmaster
# mdir /mnt/hda6/nxsource
# mdir /mnt/hda6/nxsource/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/* /mnt/hda6/nxmaster/
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:
# cp -Rp /KNOPPIX/* /mnt/hda6/nxsource/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:

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:
# chroot /mnt/hda6/nxsource/KNOPPIX/
(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:
# mount -t proc /proc proc

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:
# mount -t sysfs sys /sys
# mount -t devpts /dev/pts /dev/pts
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 200.199.201.23
nameserver 200.177.250.138
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:
# X -dpi 75 :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:
$ xhost +
$ Xnest :1
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 -R /etc/sel urumin
# chown -R urumin.urumin urumin/
# rm -rf /var/tmp/*
Agora logue-se como o usurio kurumin (ainda dentro do chroot) e abra o KDE na instncia
extra do X que abrimos anteriormente:
# su urumin
$ cd /home/urumin/
$ export DISPLAY=localhost:1
$ startde
Isso abrir o KDE dentro da segunda seo do X. Se precisar carregar outra interface, substitua
o "startkde" pelo comando adequado.

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:
$ exit
# cd /home
# cp -Rf urumin/* /etc/sel/
# chown -R root.root /etc/sel
# rm -rf /home/urumin

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.
# apt-get 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 -f /var/lib/apt/lists/*
(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 quevoc executou
durante o processo de personalizao; no existe necessidade de divulg-los ao mundo.
Aproveite para eliminar tambm o diretrio .rr_moved:
# rm -f /home/root/.bash_history
# rm -rf /.rr_moved
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:
# umount /dev/pts
# umount /sys
# umount /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 :
# misofs -R -V "Meu_CD" -hide-rr-moved -pad /mnt/hda6/nxsource/KNOPPIX \
| /usr/bin/create_compressed_fs - 65536 > /mnt/hda6/nxmaster/KNOPPIX/KNOPPIX
(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:
misofs: 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/nxsource/KNOPPIX: Este o diretrio fonte, onde est a imagem
descompactada do sistema. No se esquea de substituir o "hda6" pela partio correta.
| /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/nxmaster/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:
# cd /mnt/hda6/nxmaster
# misofs -pad -l -r -J -v -V "Kurumin" -no-emul-boot -boot-load-size 4 \
-boot-info-table -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \
-hide-rr-moved -o /mnt/hda6/urumin.iso /mnt/hda6/nxmaster
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:
# misofs -pad -l -r -J -v -V "Meu_CD" -b KNOPPIX/boot.img -c \
KNOPPIX/boot.cat -hide-rr-moved -o /mnt/hda6/urumin.iso /mnt/hda6/nxmaster
Ao remasterizar o Kanotix, ou outra distribuio live-CD que utilize o grub como gerenciador
de boot, o comando fica:
# misofs -pad -l -r -J -v -V "Kanotix" -b boot/grub/iso9660_stage1_5 -c \
boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -hide -rr -moved \
-o /mnt/hda6/anotix.iso /mnt/hda6/nxmaster

Existem duas variveis dentro do script de instalao (o arquivo "/usr/local/bin/kurumininstall"), 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:
$ du -sh /mnt/hda6/nxsource/
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()
{

{
TOTAL=1300
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:
FSMIN=1300

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/sel". 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/sel" 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 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 .destop. Abrindo-os
num editor de texto, voc ver uma estrutura como esta:

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
".de/share/appln/", 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:

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 subpastas:

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:

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 ".de/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.

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/noppix-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/urumin-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 checkbootparam "noalsa"; then
echo "Abortando a deteco da placa de som, como solicitado no boot."
else
if [ -n "$USE_ALSA" -a -x /etc/init.d/alsa-autoconfig ]; then
touch /tmp/modules.dep.temp
[ -n "$SOUND_DRIVER" ] && rmmod -r "$SOUND_DRIVER" >/dev/null 2>&1
case "$ALSA_CARD" in auto*) ALSA_CARD="";; esac
ALSA_CARD="$ALSA_CARD" /etc/init.d/alsa-autoconfig
[ ! -r /etc/modules.conf ] && \
ln -sf /KNOPPIX/etc/modules.conf /etc/modules.conf
fi
/etc/init.d/alsa start
# Unmuta o som
aumix -w 80 &; aumix -v 80 &; aumix -m 20 &; aumix -c 80 &; aumix -l 50 &
# Abre as permisses do som para outros usurios:
chmod 666 /dev/dsp
chmod 666 /dev/mixer
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:
[ -f /etc/sysconfig/desktop ] && . /etc/sysconfig/desktop
export QDESKTOP=$(cat $HOME/.wmrc)
if [[ -n $QDESKTOP && $QDESKTOP != "default" ]]; then
DESKTOP=$QDESKTOP
else
# kde is the default
[ -z "$DESKTOP" ] && DESKTOP="kde"
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-urumin", executado no final do boot, atravs do comando includo
no final do arquivo "/etc/init.d/knoppix-autoconfig".
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 "CM8738"`
if [ -n "$cmi" ]; then
/sbin/modprobe snd-cmipci
fi
ensonic=`lspci | grep "Ensoniq ES1371"`
if [ -n "$ensonic" ]; then
/sbin/modprobe snd-ens1371
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/mxf86config". 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:
# Detecta as Intel Extreme
# (mais adiante, o prprio script renomeia o arquivo para xorg.conf)
vidintel=`lspci | grep "Intel Corp. Mobile Graphics"`
vidintel2=`lspci | grep "Intel Corporation Mobile"`
vidintel3=`lspci | grep "915GM/GMS"`
if [ -n "$vidintel" -o -n "$vidintel2" -o -n "$vidintel3" ]; then
sed -e 's/vesa/i810/g' /etc/X11/XF86Config-4 > /etc/X11/XF86Config-4.1
rm -f /etc/X11/XF86Config-4; mv /etc/X11/XF86Config-4.1 /etc/X11/XF86Config-4
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).
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 battery`
if [ -z $bateria ]; then
cd /ramdisk/home/kurumin/.kde/share/config/
sed -e 's/Enable=true/Enable=false/g' kcmlaptoprc > kcmlaptoprc2
rm -f kcmlaptoprc; mv kcmlaptoprc2 /kcmlaptoprc
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 "kdei18n", 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:
# dpg-reconfigure locales
Para remover os arquivos de internacionalizao que no esto sendo usados, execute o:
# localepurge
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 /mnt/hda6/nxmaster/boot/isolinux/
# gunzip minirt26.gz
# mdir tmp/
# mount -o loop minirt26.gz tmp/
# edit tmp/linuxrc

# umount tmp/
# gzip minirt26
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"
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
"nxsource/KNOPPIX/etc/init.d/noppix-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.
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 /dev/hda1 /cdrom/image/sistema.img.000
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 dapasta
"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 "6" > /proc/sys/kernel/printk
# Re-enable signals
trap 2 3 11
O final do arquivo ficar assim:
echo "6" > /proc/sys/kernel/printk
# Re-enable signals
trap 2 3 11
partimage -f action=2 -b restore /dev/hda1 /cdrom/image/sistema.img.000
shutdown -h now
# ... seguido pelo restante do script.
Para uma restaurao completa do HD, incluindo a MBR e a tabela de particionamento, os
comandos seriam:
dd if=/cdrom/image/hda.mbr of=/dev/hda
sfdisk --force /dev/hda < /cdrom/image/hda.sf
partimage -f action=2 -b restore /dev/hda1 /cdrom/image/sistema.img.000
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.
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 --msgbox "Bem vindo o DVD de recuperao do sistema." 8 50
dialog --yes-label "Sistema" --no-label "Completa" --yesno "Voc deseja apenas restaurar a
instalao do sistema, ou fazer uma restaurao completa, apagando todos os dados do HD?
\n

Responda 'Sistema' para restaurar o sistema ou 'Completa' para fazer a restaurao completa."
10 50
if [ "$?" = "0" ]; then
partimage -f action=2 -b restore /dev/hda1 /cdrom/image/sistema.img.000
shutdown -h now
elif [ "$?" = "1" ]; then
dialog --yesno "Isto vai restaurar o particionamento original, apagando todos os
dados do HD! Tem certeza que quer continuar?"
if [ "$?" = "0" ]; then
dd if=/cdrom/image/hda.mbr of=/dev/hda
sfdisk --force /dev/hda < /cdrom/image/hda.sf
partimage -f action=2 -b restore /dev/hda1 /cdrom/image/sistema.img.000
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 /dev/hda5 /mnt/hda5
partimage -f action=2 -b restore /dev/hda1 /mnt/hda5/winXP.img.000
reboot
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":
# apt-get remove delibs-data
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:
# apt-get remove libgt2*
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.
# apt-get remove xlibs-data

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.
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:
Package: mozilla-firefox
Version: 1.5.dfsg+1.5.0.1-1
Section: web
Priority: optional
Architecture: all
Depends: firefox
Installed-Size: 96
Maintainer: Eric Dorland <eric@debian.org>
Source: firefox
Description: Transition package for firefox rename
Package to ease upgrading from older mozilla-firefox packages to the
new firefox package.
.
This package can be purged at anytime once the firefox package has
been installed.
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:
Depends: konqueror (>= 4:3.5.0-1), python
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:
Depends: konqueror (= 4:3.5.0-1), python (= 2.3.5)
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".
Este mais um exemplo de arquivo control, usado no pacote dos cones mgicos do Kurumin:
Package: icones-magicos
Priority: optional
Version: 6.0
Architecture: i386
Maintainer: Carlos E. Morimoto <morimoto@guiadohardwarwe.net>
Depends: kommander, xdialog
Description: Painis e scripts do Kurumin.
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 "dpg-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:
# dpg-deb -b IconesMagicos/ icones-magicos_6.0.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:
# dpg -x mozilla-firefox_1.5.dfsg+1.5.0.1-1_all.deb firefox/
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:
# dpg -e mozilla-firefox_1.5.dfsg+1.5.0.1-1_all.deb firefox/DEBIAN/
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":
# dpg -b firefox/ mozilla-firefox.deb

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