Você está na página 1de 384

Prefcio

As distribuies Linux esto de um modo geral se tornando muito fceis de usar, at mesmo mais fceis de usar que o Windows em algumas reas. Mas isso acaba deixando um gosto amargo na boca. Afinal, onde est o desafio? Em outros casos as coisas no funcionam to bem assim e o gosto amargo fica por conta do modem, webcam, placa 3D ou placa wireless que no est funcionando ou outro problema qualquer, que no pode ser solucionado usando as ferramentas grficas. Este livro uma coleo de dicas que ensinam a configurar e corrigir problemas "na unha", manipulando diretamente os arquivos de configurao e mdulos do sistema, sem depender de nenhum configurador, escrever shell scripts, instalar drivers manualmente e dominar ferramentas de diagnstico e recuperao do sistema. ideal para quem gosta de fuar e quer entender melhor como o sistema funciona internamente, editando arquivos de configurao, compilando mdulos e escrevendo scripts. Nesta segunda edio, o livro recebeu uma grande quantidade de atualizaes em todos os captulos e muitas das dicas antigas foram substitudas por novas. O captulo sobre shell script foi expandido, trazendo mais informaes sobre o desenvolvimento de scripts grficos, ferramentas de configurao e tambm scripts e regras para o hotplug e udev, que permitem abrir programas e executar tarefas diversas quando novos dispositivos so plugados na mquina. Foi includo tambm um novo captulo, que ensina a desenvolver novas distribuies ou solues baseadas no Kurumin e outros live-CDs derivados do Knoppix, que permitem colocar em prtica as dicas aprendidas no restante do livro. Por ser escrito em uma linguagem simples e didtica e com um nvel crescente de dificuldade, este livro indicado tanto para usurios avanados, quanto iniciantes que desejam compreender mais profundamente o sistema.

Captulo 1: Entendendo a estrutura do sistema

Como funciona o suporte a hardware no Linux Os componentes do sistema Kernel Mdulos Os processos de boot e os arquivos de inicializao Ativando e desativando servios X Gerenciador de login Xfree e Xorg A rvore genealgica das distribuies

Captulo 2: Configurao, ferramentas e dicas

Editando o /etc/fstab Configurando o lilo o Dual-Boot com dois HDs o Usando uma imagem de fundo Configurando o grub Configurando o vdeo: /etc/X11/xorg.conf KVM via software com o Synergy Usando o hdparm Recompilando o Kernel o Baixando os fontes o Configurando o Compilando o Instalando o Recompilando o Kernel moda Debian o Aplicando patches Criando patches Acelerando a compilao com o distcc Criando pacotes a partir dos fontes com o checkinstall Escrevendo scripts de backup Usando o autofs/automount Acessando dispositivos USB o Configurando manualmente o Devs e hotplug o Entendendo o udev o Renomeando interfaces de rede com o udev Fazendo backup e recuperando a MBR e tabela de parties o Usando o Gpart o Usando o Testdisk Recuperando parties danificadas Gerenciamento de setores defeituosos como o ReiserFS Monitorando a sade do HD com o SMART Copiando dados de HDs ou CDs defeituosos Aproveitando mdulos de memria defeituosos

Eliminando dados com segurana Administrando a memria swap Ativando o suporte a mair de 1GB de memria RAM Clonando parties com o Partimage o Instalando o Funes bsicas o Fazendo uma imagem de todo o HD o Gravando imagens num compartilhamento da rede Segurana: detectando rootkits Instalando o Kurumin 7 (e outras distros) num pendrive ou carto Salvando as configuraes Monitores de temperatura e coolers Gerenciamento de energia

Captulo 3: Instalando drivers adicionais

Verificando links, arquivos e compiladores Configurando softmodems no Linux o A idia bsica o Driver da Smartlink o Intel AC97 e ATI IXP o Intel 537 e 536 o Lucent e Agere o PC-Tel PCI o Modems com chipset Conexant Instalando placas wireless o Ndiswrapper o ACX100 e ACX111 o MadWiFi o ADMteck ADM8211 o Realtek 8180 o Orinoco USB o Broadcom o IPW2100 e IPW2200 o Ralink 2400 e 2500 o Linux-wlan-ng Suporte a webcams o Driver apca5xx o Logitech QuickCam o Sqcam Modems ADSL USB Driver da nVidia o Instalando manualmente o Ativando os recursos especiais o FSAA o Configurador grfico o Twin View o Instalando moda Debian

Driver para placas com chipset nForce o Ativando o driver de rede o Ativando o driver de som Driver 3D da ATI o Instalando o Configurando e solucionando problemas Tablets Configurando placas de TV o Gravando Configurando mouses touchpad com funes especiais Bootsplash

Captulo 4: Programando em shell script

O bsico Fazendo perguntas Mais dicas sobre o kdialog Controlando aplicativos via DCOP Usando os servicemenus do KDE Detectando hardware Alterando arquivos de configurao Corrigindo erros Pacotes auto-instalveis Mais exemplos teis Criando interfaces no Kommander Criando scripts para o hotplug Criando regras para o udev

Captulo 5: Remasterizando o Kurumin e outros live-CDs

O bsico Extraindo Fechando a nova imagem Personalizando o KDE e programas Scripts de inicializao Mudando a lingua padro e traduzindo as mensagens de boot Mudando o usurio padro Criando um DVD de recuperao Criando seus prprios pacotes .deb

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 onde o modem acessado. Para facilitar esta tarefa, geralmente os drivers vm com algum tipo de instalador, geralmente um script simples de modo texto que cuida disso para voc. Os mdulos so parte integrante do Kernel, por isso os mdulos para uma determinada distribuio no funcionam em outra, a menos que por uma grande coincidncia as duas utilizem exatamente a mesma verso do Kernel. Isso bastante improvvel j que o Kernel do Linux atualizado quase que diariamente. Se voc usar uma distribuio popular, Mandriva, Fedora, SuSE, etc., possvel que voc encontre um driver pr-compilado para download (que pode ser encontrado com a ajuda do Google ;). Neste caso, voc s vai precisar instalar um pacote RPM ou executar um arquivo de instalao. Em outras situaes, voc encontrar apenas um arquivo genrico ainda no compilado, contendo um instalador que se encarrega de compilar um mdulo sob medida para o Kernel em uso. Como ele no tem como adivinhar qual distribuio ou Kernel voc est utilizando, necessrio ter instalados dois pacotes que acompanham qualquer distribuio: kernelsource e kernel-headers. No Mandriva, por exemplo, voc pode instal-los usando os comandos: # urpmi kernel-source # urpmi kernel-headers Naturalmente, para que ele possa compilar qualquer coisa, voc precisar tambm de um compilador, o gcc, que tambm acompanha as distribuies. Se voc tiver estas trs coisas, vai conseguir instalar qualquer driver sem maiores problemas, basta seguir as instrues na pgina de download ou no arquivo INSTALL ou README dentro do pacote. Uma grande parte deste livro justamente dedicada a falar sobre a instalao destes drivers difceis, abordando tambm os problemas de instalao mais comuns. 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.

O processo de boot e os arquivos de inicializao


Quando voc liga o micro, o primeiro software que carregado o BIOS da placa-me, que faz a contagem da memria RAM, uma deteco rpida dos dispositivos instalados e por fim carrega o sistema operacional principal a partir do HD, CD-ROM, disquete, rede, ou o que quer que seja. Este procedimento inicial chamado de POST (Power-on self test) Seria bom se a funo do BIOS se limitasse a isso, mas na verdade ele continua residente, mesmo depois que o sistema operacional carregado. Na poca do MS-DOS era bem conhecida a diviso entre a memria real (os primeiros 640 KB da memria RAM) e a memria extendida (do primeiro MB em diante, englobando quase toda a memria instalada). O MS-DOS rodava em modo real, onde o processador trabalha simulando um 8088 (o processador usado no XT) que era capaz de acessar apenas 640 KB de memria. Mesmo os processadores modernos conservam este modo de operao, mas os sistemas operacionais atuais rodam inteiramente em modo protegido, onde so usados todos os recursos da mquina. O espao entre os primeiros 640 KB, onde termina a memria real, e os 1024 KB, onde comea a memria extendida, justamente reservado para o BIOS da placa-me. Ele originalmente gravado de forma compactada num chip de memria flash instalado na placa-me. Durante o processo de boot ele descompactado e copiado para este espao reservado (chamado de shadow RAM), onde fica disponvel. O BIOS oferece funes prontas para acessar o HD, acionar recursos de gerenciamento de energia e muitas outras coisas. Mas, os sistemas operacionais quase no utilizam estas funes, pois existem muitas diferenas na forma como BIOS de diferentes placas-me trabalham e, em muitos casos, as funes simplesmente no funcionam ou produzem erros inesperados. Os fabricantes de placas-me disponibilizam upgrades de BIOS freqentemente para corrigir estes problemas, mas a maior parte dos usurios nem chega a procur-los, fazendo com que exista um enorme contingente de placas bugadas por a, com problemas no ACPI, DMA e outros recursos bsicos. Existe at mesmo um projeto para substituir o BIOS da placa-me por uma verso compacta do Kernel do Linux, que executa as mesmas funes, mas de uma forma mais confivel e flexvel. Voc pode obter mais informaes sobre ele no: http://www.linuxbios.org/. Outra tecnologia (j em uso) que substitui o BIOS o EFI (Extensible Firmware Interface), usada em placas-me para o Intel Itanium e tambm nos Macs com processadores Intel. O EFI utiliza uma arquitetura modular, bem mais limpa e eficiente, que permite o uso de mdulos personalizados para os dispositivos de cada-placa me, mantendo (opcionalmente) compatibilidade com o sistema antigo.

No caso dos Macs, esta camada de compatibilidade desativada (de forma a dificultar a vida de quem pretende instalar Linux ou windows em dual boot com o MacOS) mas, no caso de placas 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: keymap.sh: Carrega o layout do teclado que ser usado no modo texto. Voc no gostaria de encontrar seu teclado com as teclas trocadas para o Russo quando precisar arrumar qualquer coisa no modo texto, no ? ;-), O KDE possui um configurador prprio, o kxkb, que configurado dentro do Painel de Controle. O layout usado pelo kxkb subscreve o configurado pelo keymap.sh dentro do KDE. checkroot.sh: Este script roda o fsck, reiserfsck ou outro programa adequado para verificar a estrutura da partio raiz (a partio onde o sistema est instalado), corrigindo erros causados por desligamentos incorretos do sistema. Este processo anlogo ao scandisk do Windows. S depois da verificao que a partio raiz passa a ser acessada em modo leitura e escrita.

modutils: Este o script que l os arquivos "/etc/modules" e "/etc/modules.conf", ativando a placa de som, rede e todos os outros dispositivos de hardware "no essenciais", para os quais o suporte no foi habilitado diretamente no Kernel. Atualmente, a maioria das distribuies inclui alguma ferramenta de deteco de hardware, que executada a cada boot, fazendo com que o arquivo "/etc/modules" sirva apenas para especificar manualmente mdulos que ativem perifricos que no estejam sendo detectados automaticamente. checkfs.sh: Este script parecido com o checkroot.sh. Ele se destina a checar as demais parties do HD. mountall.sh: aqui que lido o arquivo "/etc/fstab" e as demais parties, unidades de rede, e tudo mais que estiver especificado nele ativado. Se voc estiver usando uma partio home separada ou um compartilhamento de rede via NFS para guardar arquivos, por exemplo, a partir deste ponto que eles ficaro disponveis. networking: Ativa a rede, carregando a configurao de IP, DNS, gateway, etc., ou obtendo a configurao via DHCP. A configurao da rede geralmente armazenada dentro da pasta "/etc/sysconfig/network-scripts/" ou no arquivo "/etc/network/interfaces", variando de acordo com a distribuio usada. De acordo com a distribuio usada, so carregados neste ponto outros servios, para ativar suporte a placas PCMCIA, placas ISA, ou outros tipos de hardware, ativar o suporte a compartilhamentos de rede e, assim por diante. possvel executar praticamente qualquer tipo de comando ou programa nesta etapa, justamente por isso os passos executados durante o boot mudam de distribuio para distribuio, de acordo com o que os desenvolvedores consideram mais adequado. A idia aqui apenas dar uma base, mostrando alguns passos essenciais que so sempre executados. Depois desta rodada inicial, so executados os scripts correspondentes ao runlevel padro do sistema, que configurado no "/etc/inittab", na linha:
# The default runlevel. id:5:initdefault:

O nmero (5 no exemplo) indica o runlevel que ser usado, que pode ser um nmero de 1 a 5. Cada runlevel corresponde a uma pasta, com um conjunto diferente de scripts de inicializao. uma forma de ter vrios "profiles", para uso do sistema em diferentes situaes. A configurao mais comum a seguinte: Runlevel 1: Single user. um modo de recuperao onde nem o modo grfico, nem o suporte rede, nem qualquer outro servio "no essencial" carregado, de forma a minimizar a possibilidade de problemas. A idia que o sistema "d boot" para que voc possa corrigir o que est errado. Atualmente, uma forma mais prtica para corrigir problemas dar boot com uma distribuio em live-CD (como o Kurumin),

onde voc tem acesso internet e vrios programas e, a partir dele, montar a partio onde o sistema est instalado e corrigir o problema. Runlevel 3: Boot em modo texto. Neste modo todos os servios so carregados, com exceo do gerenciador de boot (KDM ou GDM), que responsvel por carregar o modo grfico. Este modo muito usado em servidores. Runlevel 5: o modo padro na maioria das distribuies, onde voc tem o sistema "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 "chkconfig", como em: # chkconfig ssh on (ativa) # chkconfig 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 viceversa, so carregadas todas as bibliotecas correspondentes, no h o que fazer. O programa demora mais para abrir, e no final, o sistema acaba consumindo muito mais memria. O gerenciador de login aberto como um servio de sistema, da mesma forma que o Apache e outros servidores. Voc pode parar o KDM e assim fechar o modo grfico usando o comando "/etc/init.d/kdm stop" e reabri-lo a partir do modo texto com o comando "/etc/init.d/kdm start". Como sempre, tudo aberto atravs de um conjunto de scripts. O KDM guarda a base das configuraes no arquivo "/etc/kde3/kdm/kdmrc" (ou "/usr/share/config/kdm/kdmrc", dependendo da distribuio) e coloca um conjunto de scripts de inicializao, um para cada interface instalada, dentro da pasta "/usr/share/apps/kdm/sessions/". A configurao do kdmrc serve para configurar as opes da tela de login, que vo desde opes cosmticas, at a opo de aceitar que outras mquinas da rede rodem aplicativos remotamente via XDMCP. Ao fazer login, executado o script correspondente interface escolhida. Ao usar o Fluxbox, por exemplo, executado o script "/usr/share/apps/kdm/sessions/fluxbox". At mesmo o comando startx um script, que geralmente vai na pasta "/usr/X11R6/bin/". Voc pode alter-lo para carregar o que quiser, mas normalmente ele carrega o gerenciador especificado no arquivo .xinitrc, dentro da pasta home do usurio.

Xfree x X.org
Atualmente esto em uso no mundo Linux duas verses diferentes do X, o Xfree e o X.org. O Xfree o projeto mais antigo e tradicional, o grupo que originalmente portou o X para o Linux, e foi o principal mantenedor do projeto desde ento. Com o passar do tempo, comearam a surgir crticas, principalmente direcionadas demora para incluir correes e atualizaes nos drivers existentes. Isto foi se agravando com o tempo, at que uma deciso dos desenvolvedores em fazer uma pequena mudana na licena em vigor a partir do Xfree 4.4 foi a gota d'gua para que um consrcio formado por membros de vrias distribuies, desenvolvedores descontentes com o modo de desenvolvimento antigo, se juntassem para criar um fork do Xfree, o X.org. O X.org utilizou como base inicial a ltima verso de desenvolvimento da srie 4.3 do Xfree, disponibilizada antes da mudana da licena. Desde ento, foram includas muitas atualizaes e 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: - Utilitrios de configurao:
xf86cfg = xorgfg xf86config = xorgconfig /etc/X11/XF86Config-4 = /etc/X11/xorg.conf

possvel tambm eliminar estas diferenas criando um conjunto de links apontando para os nomes trocados. Assim o XF86Config-4 vira um link para o xorg.conf, por exemplo, fazendo com que usurios desavisados e at utilitrios de configurao consigam encontrar os arquivos sem muitos problemas.

A rvore genealgica das distribuies


Por causa da filosofia de cdigo aberto e compartilhamento de informaes que existe no mundo Linux, muito raro que uma nova distribuio seja desenvolvida do zero. Quase sempre as distribuies surgem como forks ou personalizaes de uma outra distribuio mais antiga e preservam a maior parte das caractersticas da distribuio original. Isso faz com que distribuies dentro da mesma linhagem conservem mais semelhanas do que diferenas entre si. Das primeiras distribuies Linux, que surgiram entre 1991 e 1993, a nica que sobrevive at hoje o Slackware, que deu origem a algumas outras distribuies conhecidas, como o Vector, Slax e o College. O Slax um live-CD, desenvolvido para caber em um mini-CD; o Vector uma distribuio enxuta, otimizada para micros antigos, enquanto o College uma distribuio desenvolvida com 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 a 5% na maior parte dos programas, mas pode chegar a 30% em alguns aplicativos especficos. A parte ruim que compilar programas grandes demora um bocado, mesmo em mquinas atuais. Instalar um sistema completo, com o X, KDE e OpenOffice demora um dia inteiro num Athlon 2800+ e pode tomar um final de semana numa mquina um pouco mais antiga. Voc pode usar o Portage tambm para atualizar todo sistema, usando os comandos "emerge sync && emerge -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 liveCDs, 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: # kedit /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 fsck, encarregado de examinar os arquivos dentro da partio quando o sistema desligado incorretamente. Temos trs opes aqui: o nmero 0 desativa a checagem a cada boot (torna o boot um pouco mais rpido, mas no recomendvel), enquanto o nmero 1 faz com que a partio seja checada antes das demais. Usamos o nmero 1 apenas para a partio raiz, onde o sistema est instalado. Para as demais parties usamos o nmero 2 que indica que a partio deve ser checada, porm s depois da partio raiz.
/dev/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 placame. /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 /dev/hda1 /mnt/hda1 reiserfs /dev/hda2 /mnt/hda2 reiserfs /dev/hda3 /mnt/hda3 reiserfs /dev/hda6 /mnt/hda6 reiserfs instalador: noauto,users,exec noauto,users,exec noauto,users,exec noauto,users,exec 0 0 0 0 0 0 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": $ kedit /home/carlos/Desktop/compartilhamento.desktop 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 destes modelos, o sistema exibe uma mensagem no incio do boot, avisando que o modo no suportado e o boot continua em texto puro. O "vga=788" um valor "seguro", que funciona em praticamente todas as placas e monitores. O lilo pode ser configurado para inicializar vrios sistemas operacionais diferentes. A linha "prompt" faz com que ele mostre um menu com as opes disponveis na hora do boot. Ela quase sempre usada por padro. A linha "default=" diz qual o sistema padro, o que fica pr-selecionado 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.

Usando uma imagem de fundo


Como voc pde ver no exemplo, a configurao necessria para que o lilo exiba um menu de boot grfico ocupa apenas 4 linhas no incio do arquivo. Nem todas as distribuies usam este recurso por padro (como o Slackware), mas simples ativar manualmente. Em primeiro lugar, voc precisa de uma imagem de 640x480 com 256 cores (indexada), salva em .bmp. No Gimp existe a opo de codificar a imagem usando RLE, o que diminui muito o tamanho, sem quebrar a compatibilidade com o lilo. Voc pode baixar algumas imagens prontas no http://www.kde-look.org, basta salvar a imagem escolhida dentro da pasta /boot. A localizao do arquivo com a imagem, dentro da partio do sistema, vai na linha "bitmap =", como em:
bitmap = /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: # mkdir /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 cham-lo novamente: # lilo Assim como no caso do lilo, o arquivo de configurao do grub inclui uma seo separada para cada sistema que aparece no menu de boot. O update-grub no muito eficiente em detectar outros sistemas instalados, por isso, depois de gerar o arquivo voc ainda precisar adicionar as linhas referentes a eles no final do arquivo "/boot/grub/menu.lst". Para que o grub inicialize uma cpia do Windows, instalada na primeira partio, /dev/hda1, 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 /dev/hdb /dev/hdc /dev/hdd = = = = 0 1 2 3

As parties dentro de cada HD so tambm nomeadas a partir do zero:


/dev/hda1 /dev/hda2 /dev/hda3 /dev/hda4 /dev/hda5 /dev/hda6 etc... = = = = = = 0,0 0,1 0,2 0,3 0,4 0,5

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 "mkxf86config" (do Knoppix) "kxconfig", "xf86cfg" entre outros. Mas, neste tpico vamos ver como configurar manualmente o arquivo, adaptando ou corrigindo as configuraes geradas pelos configuradores. O arquivo dividido em sees. Basicamente, temos (no necessariamente nesta ordem) uma seo "Server", com parmetros gerais, a seo "Files" com a localizao das fontes de tela e bibliotecas, duas sees "InputDevice", uma com a configurao do teclado e outra com a do mouse, uma seo "Monitor" e outra "Device", com a configurao do monitor e placa de vdeo e por ltimo a seo "Screen" onde dito qual resoluo e profundidade de cor usar. A ordem com que estas configuraes aparecem no arquivo pode mudar de distribuio para distribuio, mas a ordem no importa muito, desde que estejam todas l.

Como em outros arquivos de configurao, voc pode incluir comentrios, usando um "#" no incio das linhas. Linhas em branco, espaos e tabs tambm so ignorados e podem ser usadas para melhorar a formatao do arquivo e melhorar a organizao das informaes. Vamos a uma descrio geral das opes disponveis, usando como exemplo o modelo de configurao que uso no Kurumin. Abra o arquivo /etc/X11/xorg.conf ou /etc/X11/XF86config-4 da sua mquina e acompanhe o exemplo; prestando ateno nas diferenas entre o exemplo e o arquivo da sua mquina e tentando entender a funo de cada seo:
Section "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 "USB Mouse" indica o nome da seo que ser usada. Abaixo deve existir uma seo com este mesmo nome, contendo a configurao do mouse propriamente dita. Esta organizao permite que voc (ou o utilitrio de configurao usado) adicione vrias configuraes diferentes, onde voc pode trocar rapidamente entre elas modificando esta linha. Nas distribuies que usam o Kernel 2.6, possvel usar a mesma configurao para mouses PS/2, mouses USB e tambm mouses touchpad (notebooks), pois todos utilizam um driver comum. possvel at mesmo usar dois mouses simultaneamente (o touchpad do notebook e um mouse USB externo, por exemplo), sem precisar alterar a configurao. Apenas os antigos mouses seriais ainda precisam de uma configurao prpria. 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 uslas 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 modprobe modprobe modprobe agpgart ati-agp drm 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 open-source, que pode ser encontrado nas verses recentes do X.org. Para que a acelerao 3D oferecida por ele funcione, necessrio que os mdulos "via-agp" e "via" estejam carregados. Adicione as linhas abaixo num dos arquivos de inicializao do sistema:
modprobe via-agp modprobe via

- savage: Este driver d suporte s placas S3 Savage e Pro Savage, relativamente populares a alguns anos atrs. Ele inclui acelerao 3D caso voc esteja utilizando uma verso recente do X.org (a partir do 6.8.2), em conjunto com o pacote "libgl1-mesa-dri" (que inclui os drivers 3D desenvolvidos pelo projeto Mesa GL). Outros drivers, pouco usados so:

- 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 com que ao mover o mouse para a direita (ou esquerda, de acordo com a configurao) ele mude automaticamente para a tela do notebook. Junto com o mouse, muda o foco do teclado e at mesmo a rea de transferncia unificada, permitindo que voc copie texto de um micro para o outro. Tudo feito via rede, com uma baixa utilizao do processador e um excelente desempenho. No Linux, o Synergy pode tanto ser configurado manualmente, atravs do arquivo ".synergy.conf" (dentro do seu diretrio de usurio), ou do arquivo "/etc/synergy.conf" (que vale para todos os usurios do sistema), quanto atravs do Quicksynergy, um configurador grfico. Vamos comear aprendendo como fazer a configurao manualmente. O primeiro passo , naturalmente, instalar o Synergy nas duas mquinas. Ele um programa comum, includo em muitas distribuies. Nos derivados do Debian, instale-o via apt-get: # 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".

Desktop Notebook 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 viceversa. A verso Windows apresenta inclusive uma vantagem, que o fato de ser configurada atravs de uma interface grfica, ao invs do arquivo de configurao. Uma opo de interface grfica para a verso Linux o Quicksynergy, que voc pode baixar no: http://quicksynergy.sourceforge.net/. 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 automake gcc g++ ibglade2-dev libgtk2.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 quicksynergy_0.1.tar.gz cd quicksynergy-0.1/ ./configure make su <senha> make install

O Quicksynergy possui duas abas: uma para fazer a configurao no servidor e outra para se conectar a ele a partir do cliente:

Note que a aba com a configurao do servidor permite especificar apenas os nomes dos clientes, no seus endereos IP. Para que ele funcione, voc deve configurar o arquivo "/etc/hosts" (no servidor), cadastrando os endereos e nomes de cada cliente. Esse arquivo possui uma sintaxe bem simples, contendo o nome e IP de cada mquina, uma por linha, como em:
127.0.0.1 semprao localhost 192.168.0.48 kurumin 192.168.0.21 fedora

Outra opo usar o Kurumin-Synergy, a interface que desenvolvi para uso no Kurumin. Ele um painel desenvolvido no Kommander, por isso pode ser executado diretamente atravs do "kmdr-executor", sem precisar ser compilado. Ele est includo no Kurumin, a partir do 5.1 (Iniciar > Redes e acesso remoto > Acesso Remoto) e voc pode tambm baix-lo no:

http://www.guiadohardware.net/kurumin/painel/kurumin-synergy.kmdr Para executar, voc precisa ter o pacote "kommander" instalado. Execute-o usando o comando: $ kmdr-executor kurumin-synergy.kmdr A interface bem similar do Quicksynergy, com uma aba para ativar o servidor e outra para conectar os clientes. As diferenas so que ele permite especificar diretamente os endereos IP dos clientes (sem precisar editar o "/etc/hosts") e que ele oferece a opo de criar um cone no desktop para reativar a conexo de forma rpida depois. Lembre-se de que ele apenas a interface. De qualquer forma, voc precisa ter o pacote "synergy" instalado. Ao estabelecer a conexo, aberta uma janela de terminal, onde voc pode acompanhar as mensagens. Para fechar a conexo, pressione "Ctrl+C" no terminal.

No captulo sobre shell script, veremos passo a passo como este script do Kurumin Synergy foi desenvolvido, permitindo que voc inclua melhorias ou desenvolva seus prprios scripts.

Usando o hdparm
O hdparm um utilitrio muito usado, que permite ativar otimizaes para o HD. No se trata necessariamente de um utilitrio para "turbinar" o seu sistema, mas para descobrir e corrigir problemas na configurao do HD, que podem comprometer o desempenho.

Logue-se como root e rode o comando: # 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 "-k 1" no comando. Ela faz com que a configurao seja mantida em casos de erros, onde a controladora do HD realiza um soft reset. Isto ocorre em casos de erros de leitura em setores do HD e outros problemas relativamente graves. Sem o "-k 1", estes erros fazem com que o DMA seja desativado. Eu particularmente prefiro esta configurao (sem o -k 1), pois serve como uma espcie de "alarme". Um erro ocorre, o DMA desativado e, pela lentido do sistema, voc percebe que algo est errado. Usando o comando "dmesg" voc pode verificar o que ocorreu e decidir se o caso de atualizar os backups ou trocar de HD.

Naturalmente, os resultados no sero to animadores nos casos em que a distribuio se encarrega de detectar e ativar os recursos durante a instalao, mas no deixa de valer a pena sempre verificar se est tudo ok. Verses antigas do Red Hat usavam uma configurao bem conservadora, o que fazia com que o ultra DMA ficasse desativado em muitas placas, onde ele funciona perfeitamente ao ser ativado manualmente. Caso o hdparm no esteja instalado, use o comando "urpmi hdparm" (no Mandriva), "aptget 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 UDMA 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 indicam mltiplos de 5 segundos (1 para 5 segundos, 10 para 50 segundos e 240 para 20 minutos) e os nmeros de 241 em diante indicam mltiplos de 30 minutos (242 indica uma hora, 244 duas horas, e assim por diante). Para um tempo de espera de 10 minutos, por exemplo, use: # hdparm -S 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 kernel-source No Debian, existem vrias verses diferentes do Kernel disponveis no apt-get. Voc deve primeiro checar a verso em uso, usando o comando "uname -a", e em seguida instalar o pacote correto, como em: # apt-get install kernel-source-2.6.15

No Kurumin, Kanotix e em algumas outras distribuies, est disponvel o script "installkernel-source-vanilla.sh", desenvolvido pelo Kano, que se encarrega de baixar os fontes do Kernel atual, junto com um conjunto de patches teis. sempre muito mais fcil usar como base o fonte e configurao do Kernel que est instalado na sua mquina, com todos os patches e modificaes. Assim voc comea com uma configurao que est funcionando e faz apenas as alteraes desejadas, com uma possibilidade muito menor de surgirem problemas. Depois de pegar um pouco de prtica, voc pode se aventurar a baixar uma verso "crua" da ltima verso do Kernel no http://www.kernel.org e fazer uma experincia comeando do zero. Salve o arquivo no diretrio "/usr/src/" onde por padro ficam armazenados os fontes do Kernel. No se assuste, o arquivo com o fonte do Kernel mesmo grande, quase 50 MB (compactado em .tar.gz) nas verses recentes. Depois de baixar o pacote, voc ainda precisar descompact-lo, usando o comando: # 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 Understanding the Linux Kernel, 3rd Edition, da ed. O'Reilly. Outra boa referncia o Linux Device Drivers, 3rd Edition, tambm da ed. O'Reilly, voltado para o desenvolvimento de drivers. Com o cdigo em mos, o prximo passo definir os componentes que sero includos no novo Kernel, usando o xconfig (grfico) ou menuconfig (texto), duas opes de ferramentas de configurao. O objetivo destas duas ferramentas apenas ajudar a selecionar as opes disponveis e gerar um arquivo de texto, o ".config", que ser usado durante a compilao. Como todo arquivo de texto, ele pode ser at mesmo editado manualmente, mas isto no muito prtico num arquivo com quase 3.000 linhas :-). Mos obra ento: # make 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 (builtin, 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: # make 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. # make 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. # make 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 usando a opo "-j4", que faz com que o make processe 4 mdulos de cada vez, ao invs de apenas um como faria por padro. Isto faz com que o segundo processador realmente fique ocupado, reduzindo em at 40% o tempo de compilao. Neste caso o comando fica: # make -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: # make Ao tirar proveito da compilao paralela do make, use: # make -j4 Em qualquer um dos dois casos, depois de compilar o executvel principal, temos o: # make modules ... que conclui o trabalho, compilando todos os componentes marcados como mdulos. Numa distribuio tpica, esta a etapa mais demorada, pois quase tudo compilado como mdulo, 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_kernel 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: # make 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": # kedit /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 funcionando adequadamente, edite novamente o /etc/lilo.conf colocando o nome da entrada referente ao novo Kernel na opo "default". Isto far com que ele passe a ser inicializado por default. Seu lilo.conf ficar parecido com este:
boot=/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 kernel-package que facilita bastante a recompilao do Kernel. Ele cuida de todo o processo de compilao e no final gera um arquivo .deb com o novo Kernel, que pode ser rapidamente instalado usando o comando "dpkg -i" e, inclusive, instalado em outros micros. Como de praxe, o primeiro passo acessar a pasta com os fontes do Kernel. O que muda so os comandos executados dentro dela. Ao invs do "make bzImage", "make modules" e "make modules_install", todo o restante do processo automatizado por dois comandos: # make-kpkg clean # make-kpkg kernel_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: # dpkg -i /usr/src/kernel-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: # make-kpkg kernel_image kernel_source kernel_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 kernel-patch-xen # apt-get install kernel-patch-2.6-bluez # apt-get install kernel-patch-debianlogo Todos os patches instalados pelo apt-get vo para a pasta "/usr/src/kernel-paches". Em geral, so instalados vrios arquivos compactados, com verses especficas do patch para vrias verses do Kernel. Descompacte apenas o arquivo que mais se aproxima da verso do Kernel que voc est compilando, como em: $ cd /usr/src/kernel-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/kernel-source-2.6.16/ O prximo passo aplicar o patch usando o comando patch -p1 < localizao_do_patch, como em: # patch -p1 < /usr/src/kernelpatches/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: # make xconfig # make-kpkg clean # make-kpkg kernel_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: $ make -j12 CC=distcc bzImage (make -j12 CC=distcc no Kernel 2.6.16, em diante) $ make -j12 CC=distcc modules # make 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 checkinstall


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 checkinstall facilita esta tarefa, principalmente se voc precisa instalar o mesmo software em vrias mquinas ou quer distribu-lo para amigos, gerando um pacote .deb, .tgz ou .rpm com o software prcompilado, 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 checkinstall O funcionamento do checkinstall simples. Ao instalar qualquer pacote a partir do cdigo fonte, substitua o comando "make install" pelo comando apropriado do checkinstall. Onde: # checkinstall -D (gera um pacote .deb, para distribuies derivadas do Debian) # checkinstall -R (gera um pacote .rpm, que pode ser usado em distribuies derivadas do Red Hat) # checkinstall -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/ $ make clean

$ make 537 # checkinstall -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.01_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: # dpkg -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 backup


Durante a dcada de 70, vrios utilitrios foram desenvolvidos para fazer backup de arquivos armazenados em servidores Linux. Os computadores da poca eram muito limitados, por isso os 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 backup-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/backup/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/backup/ A opo "-a" (archive) faz com que todas as permisses e atributos dos arquivos sejam mantidos, da mesma forma que ao criar os arquivos com o tar e o "v" (verbose) mostra o progresso na tela. A cpia inicial vai demorar um pouco, mais do que demoraria uma cpia simples dos arquivos. Mas, a partir da segunda vez, a operao ser muito mais rpida. Note que neste comando estamos copiando a pasta "trabalho" recursivamente para dentro da "/mnt/backup", de forma que seja criada a pasta "/mnt/backup/trabalho". Adicionando uma barra, como em "/mnt/hda6/trabalho/", o rsync copiaria o contedo interno da pasta diretamente para dentro da "/mnt/backup". Se algum desastre acontecer e voc precisar recuperar os dados, basta inverter a ordem das pastas no comando, como em: $ rsync -av /mnt/backup/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/backup/ Veja que foi adicionado um parmetro adicional, o --rsh="ssh -C -l tux", que orienta o rsync a utilizar o SSH como meio de transporte. O "-C" orienta o SSH a comprimir todos os dados (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/backup/ 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/backup/ \ /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-keygen -t rsa" (que gera a chave de autenticao) usando o login do usurio que executar o script de backup, deixando a passprase em branco. Em seguida, copie-o para o servidor, usando o comando: $ 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.

Usando o autofs/automount
O suporte montagem automtica do drive de CD-ROM e disquete usado a tempos em vrias distribuies Linux. Apesar disso, muitas distribuies no trazem este recurso habilitado por default, pois automount no o sistema mais estvel do mundo. Ele trava ou se confunde com uma certa freqncia, fazendo com que seja necessrio ficar forando a montagem ou ejeo do CD manualmente. O Kurumin um exemplo de distribuio que no usa o automount por padro. Nele voc encontra dois cones no Desktop para acessar o CD e ejet-lo. Este cone para ejetar o CD, encontrado no Kurumin uma soluo para um problema comum. No Linux voc no consegue desmontar, muito menos ejetar o CD-ROM enquanto existe algum programa acessando os arquivos. Se voc esquecer uma janela do Konqueror ou uma instncia do OpenOffice acessando algum arquivo do CD, voc vai ficar com ele preso at se fech-la ou reiniciar a mquina. Isto irritante s vezes. Em muitos casos voc quer simplesmente uma forma rpida de ejetar o CD, custe o que custar. O cone para ejetar o CD roda os comandos: "fuser -k /mnt/cdrom; umount /mnt/cdrom; eject /mnt/cdrom". O "fuser" fecha qualquer programa que esteja acessando a pasta /mnt/cdrom, para que o CD-ROM possa ser desmontado e ejetado. um sistema manual, mas que pelo menos funciona sempre, de uma forma previsvel. Mesmo assim, voc pode ativar o suporte montagem automtica de uma forma simples na maioria dos casos. O autofs/automount a combinao de um mdulo de Kernel e um conjunto de utilitrios e arquivos de configurao, que so instalados com o pacote autofs. Em primeiro lugar, certifique-se que o mdulo "autofs" ou "autofs4" est carregado. Rode o comando "lsmod" e verifique se ele aparece na lista. Caso no esteja carregado, habilite-o com o comando "modprobe autofs4" (ou "modprobe autofs", dependendo da distribuio) e adicione a linha "autofs4" no final do arquivo "/etc/modules", para que ele seja carregado automaticamente durante o boot. Se este mdulo no estiver presente, as coisas se complicam, pois voc precisaria recompilar o Kernel, instalando o patch e ativando o suporte a ele. O prximo passo instalar o pacote "autofs" usando o gerenciador de pacotes includo na sua distribuio. Nas derivadas do Debian instale usando o comando: # 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 CDROM 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 USB


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.

onfigurando manualmente
O primeiro passo para ativar qualquer dispositivo USB no Linux, carregar o suporte prpria controladora USB da placa-me. No Kernel 2.6 existem trs mdulos diferentes destinados a esta funo. O mdulo "ehci-hcd" o mais recente, que d suporte a controladores e dispositivos USB 2.0 em geral. Ele o mdulo usado na grande maioria dos casos. No caso de micros antigos, que ainda utilizam controladoras USB 1.1, entram em ao os mdulos "ohci-hcd" e "uhci-hcd". A diferena entre os dois que o ohci-hcd d suporte aos controladores usados pela Via e outros fabricantes, enquanto o uhci-hcd d suporte aos controladores USB usados pela Intel. Em distribuies antigas, baseadas no Kernel 2.4, os mdulos mudam de nome, passam a ser "usb-ohci" e "usb-uhci". A diferena entre o USB 1.1 e o 2.0 o brutal aumento na capacidade de transmisso. O padro USB original foi desenvolvido como um substituto para as portas seriais, com o objetivo de conectar impressoras, teclados, mouses e similares. Com o tempo, o USB comeou a ser usado para pendrives, HDs externos, placas de rede, cmeras e outros perifricos "rpidos", capazes de transmitir dados a muito mais que 12 megabits por segundo. O USB 2.0 surgiu como um padro "definitivo", que opera a 480 megabits (cerca de 50 MB/s reais, descontando o overhead do gerado protocolo de comunicao e pacotes de controle). Os perifricos USB 2.0 so compatveis com placas antigas e vice-versa, mas sempre nivelando por baixo. Seu pendrive USB 1.1 vai continuar trabalhando a 12 megabits se conectado numa controladora USB 2.0. Os trs mdulos so capazes de detectar os controladores a que do suporte e por isso convivem muito bem entre si. Voc pode tentar simplesmente carregar os trs em seqncia, comeando pelo "ehci-hcd". Ao encontrar uma controladora antiga, ou que no seja compatvel, ele vai automaticamente passar o controle a um dos outros dois. # modprobe ehci-hcd # modprobe ohci-hcd # modprobe uhci-hcd Em seguida entra em ao o mdulo "usbcore" que oferece funes genricas, usadas por todos os dispositivos USB, incluindo chamadas de sistema para conectar ou desconectar um dispositivo, reservar banda de transmisso e outras funes.

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 "usbkbd" ativam o suporte genrico a mouses e teclados USB. Existe tambm um mdulo mais antigo, o "usbhid", que alm de prover comunicao com nobreaks e alguns outros perifricos, oferece as funes bsicas usadas por mouses e teclados. Completando, temos o mdulo "joydev", que d suporte a joysticks. Caso voc tenha um conversor serial/USB, use o mdulo "serial". Os adaptadores USB para teclados e mouses PS/2 no precisam de drivers adicionais, mas alguns mouses PS/2 no funcionam em conjunto com eles, pois necessrio a incluso de um circuito adicional. Em caso de problemas com o teclado ou mouse, verifique tambm se a opo "USB LEGACY SUPPORT" est desativada no setup. Esta opo ativa uma camada de compatibilidade, destinada a fazer o teclado e mouse funcionarem no MS-DOS e Windows 9x, que em algumas placas faz com que o sistema deixe de detectar os dispositivos e ativar os drivers necessrios durante o boot. O mdulo usbserial habilita suporte comunicao com Palms, Pocket PCs (com o Windows CE) e outros dispositivos que transfiram dados atravs da porta USB, usando-a como se fosse uma porta serial. A comunicao com estes dispositivos (do ponto de vista do sistema) feita de uma forma diferente que seria com um dispositivo de armazenamento, como um pendrive, por exemplo. O carto de memria visto como se fosse um HD externo, enquanto no caso do Palm a porta USB usada como substituta para uma porta serial. Complementando o usbserial, geralmente necessrio um segundo mdulo, que habilita o dispositivo. Para fazer sincronismo com um Palm, ative o mdulo "visor" e, para um Pocket PC, o mdulo "ipaq". Com o mdulo carregado, voc pode usar um programa de sincronismo, como o Kpilot, ou o SynCE. Os outros drivers disponveis vo na pasta "/lib/ modules/2.6.x/kernel/drivers/usb/serial". O primeiro dispositivo serial conectado aparece como o dispositivo "/dev/ttyUSB0", o segundo como "/dev/ttyUSB1" e assim por diante. Configure o programa de sincronismo para utilizar uma destas portas e tente abrir a conexo. Uma dica que, no caso dos Palms voc precisa primeiro pressionar o boto de hotsync no Palm (o que faz com que ele seja detectado), para s depois conseguir estabelecer a conexo dentro do programa de sincronismo. Um mdulo similar o "usblp", que ativa o suporte genrico a impressoras USB, que ficam acessveis atravs dos devices "/dev/usb/lp0", "/dev/usb/lp1", etc. Para o suporte a

scanners, existe o mdulo "scanner", que ativa o device "/dev/usbscanner". Um problema comum que os dispositivos ficam por padro disponveis apenas para o root. Para imprimir ou usar o scanner usando um login de usurio, preciso abrir as permisses do dispositivo, como em "chmod 666 /dev/usbscanner". No caso das webcams, so usados os mdulos "spca5xx", "stv680", "ultracam", "quickcam", "ibmcam", "konicawc", "sqcam" ou "vicam", de acordo com o modelo. O mdulo "spca5xx" o que d suporte a maior parte dos modelos, mas ele no vem instalado por padro em muitas distribuies. Veja como instal-lo manualmente no captulo sobre drivers. Existem no mercado algumas caixas de som e headsets USB que, ao contrrio das caixas e microfones ligados na placa de som, so detectados como dispositivos de udio independentes, como se fossem uma segunda placa de som. Estes dispositivos so, de uma forma geral, bem suportados no Linux, atravs do mdulo "snd-usb-audio", que faz parte do Alsa. Alguns drivers mais incomuns so o "aiptek", que d suporte a vrios tablets USB, o "rt2570", que d suporte s placas wireless USB com chipset RT2500 (Ralink) e o rtl8150, que d suporte aos adaptadores de rede USB com o chipset de mesmo nome. Voc pode encontrar uma lista com vrios outros drivers incomuns no: http://www.qbik.ch/usb/devices/drivers.php. Para acessar pendrives, HDs USB e tambm cmeras e outros dispositivos compatveis com o protocolo storage, usamos o mdulo "usb-storage". Ele trabalha em conjunto com o mdulo "sg" (SCSI Generic), que permite que os dispositivos sejam acessados usando o driver de acesso a dispositivos SCSI. Voc pode pensar no mdulo usb-storage como uma espcie de adaptador, que faz com que dispositivos de armazenamento USB sejam vistos pelo sistema como HDs SCSI. O primeiro dispositivo fica acessvel como "/dev/sda", o segundo como "/dev/sdb" e assim por diante. No caso de adaptadores para cartes de diversos formatos, cada conector visto pelo sistema como um dispositivo independente. O carto sd pode ficar acessvel atravs do "/dev/sdc" e o memory stick atravs do "/dev/sdd", por exemplo, mesmo que nenhum dos outros encaixes esteja sendo usado. Para acessar, basta montar o dispositivo correto, como em: # 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.

Devfs e hotplug
Podemos dividir o processo de ativao de um dispositivo no Linux em trs passos: em primeiro lugar carregado o mdulo que d suporte a ele, em seguida criado um device (como "/dev/sda"), um arquivo especial atravs do qual ele acessado e, opcionalmente, executado algum script ou ao adicional. Ao plugar uma webcam, seria carregado (por exemplo) o mdulo "spca5xx" e criado o device "/dev/video0", atravs do qual os programas podem acessar a cmera. Ao plugar um pendrive seria carregado o mdulo "usb-storage" e, assim por diante. Em muitos casos, preciso carregar mais de um mdulo. Para sincronizar o Kpilot com um Palm USB, por exemplo, preciso carregar os mdulos usbserial e visor. Um device a combinao de dois endereos de Kernel: um major number e um minor number. O major number usado para indicar uma categoria de dispositivos, enquanto o minor number identifica o dispositivo em si. Por exemplo, o major number "180" usado em relao a impressoras USB. A primeira impressora conectada recebe o device "/dev/usb/ lp0", que formado pela combinao do major number "180" e o minor number "1". A segunda impressora conectada recebe o device "/dev/usb/lp1", que formado pelo major number "180" e pelo minor number "2" e assim por diante. Tradicionalmente, o responsvel por criar e manter os devices correspondentes a cada dispositivo era o devfs. Ele cumpre a funo usando uma abordagem bem simples: o diretrio "/dev" contm devices prontos para todos os dispositivos suportados, mesmo que poucos deles estejam realmente em uso. Os devices vo sendo atribudos conforme novos dispositivos so ativados. O hotplug entra em cena com a funo de detectar novos dispositivos. ele o responsvel por carregar os mdulos apropriados, ajustar permisses e executar tarefas diversas sempre que um novo dispositivo conectado. Sem o hotplug, seu pendrive ainda funciona normalmente, mas voc passa a ter o trabalho de ter que carregar os mdulos e montar o dispositivo sempre que quiser acess-lo; sua impressora passa a aparecer no gerenciador de impresso apenas depois que voc carrega os mdulos apropriados e a configura manualmente atravs do kaddprinterwizard (ou outro gerenciador), e assim por diante. O hotplug surgiu originalmente como um script responsvel por detectar e ativar dispositivos USB conforme eram plugados no micro. Embora tenha um funcionamento interno relativamente simples, o hotplug se mostrou bastante eficiente e passou a ser expandido para assumir a configurao de outros dispositivos. Atualmente, o hotplug no se limita a apenas pendrives, impressoras e cmeras, mas d suporte a todo tipo de dispositivo firewire, PCMCIA, PCI e SCSI.

A partir do Kernel 2.6, o hotplug se tornou um componente padro do sistema. Ele vem pr-instalado em qualquer distribuio que se preze. Mesmo o Slackware que espartano em termos de ferramentas automticas de deteco passou a inclu-lo a partir da verso 9.2. Verifique apenas se o servio "hotplug" est ativo e, se necessrio, ative-o com o comando: # /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/blacklist", onde so especificados mdulos que no devem ser carregados automaticamente pelo hotplug. Este arquivo permite solucionar problemas causados por mdulos "mal comportados", que causam travamentos ou problemas diversos ao serem carregados. Isto relativamente comum com relao a mdulos proprietrios, como os drivers para softmodems e para algumas placas wireless, que em muitas situaes chegam a congelar o sistema caso o dispositivo a que do suporte no esteja presente, ou ao tentarem (incorretamente) ativar um dispositivo similar, mas que no inteiramente compatvel com ele. Um exemplo o mdulo "Intel537", que d suporte a modems Intel Ambient. Os modems Intel Ambient "legtimos" possuem um chip DSP grande, com a marca "Ambient" decalcada. Existem muitos modems com chips Intel537AA ou 537EA (fceis de reconhecer, pois possuem chips bem menores) que no so compatveis com o driver. Ao tentar carregar o mdulo Intel537 com um destes modems instalado, o sistema em muitos casos simplesmente trava, mesmo que o modem nem esteja em uso. Em geral, as distribuies j vm com o arquivo populado com vrios drivers que reconhecidamente possuem problemas. No Kurumin, por exemplo, incluo os mdulos dos softmodems, que podem ser carregados manualmente atravs dos cones no menu:
ltmodem 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 aptget: # apt-get install udev Na maior parte das distribuies, voc encontrar vrios arquivos com regras prconfiguradas 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-andplay. O arquivo "/etc/udev/links.conf" permite definir devices adicionais manualmente, de forma que eles sejam recriados a cada boot. Isto necessrio pois no udev o diretrio /dev dinmico, fazendo que dispositivos no utilizados sejam perdidos a cada reboot. Uma configurao comum, adicionar regras que criam os devices utilizados pelo VMware, de forma que eles no se percam ao reiniciar, como em:
M M M M vmmon --mode 666 c 10 165 vmnet0 --mode 666 c 119 0 vmnet1 --mode 666 c 119 1 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-network.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 backup e recuperando a MBR e tabela de parties


Ao comprar um novo HD, voc precisa primeiro format-lo antes de poder instalar qualquer sistema operacional. Existem vrios programas de particionamento, como o qtparted, gparted, cfdisk e outros. Os programas de particionamento salvam o particionamento na tabela de partio, gravada no incio do HD. Esta tabela contm informaes sobre o tipo, endereo de incio e final de cada 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=backup.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=backup.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.

Usando o Gpart
Caso o pior acontea, a tabela de particionamento seja perdida e voc no tenha backup, ainda existe uma esperana. O Gpart capaz de recuperar a tabela de partio e salv-la de volta no HD na maioria dos casos. Voc pode execut-lo dando boot pelo CD do Kurumin, ou baix-lo no: http://www.stud.uni-hannover.de/user/76201/gpart/#download. Baixe o "gpart.linux" que o programa j compilado. Basta marcar a permisso de execuo para ele: # 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.

Usando o Testdisk
Outra ferramenta "sem preo" para recuperao de parties o Testdisk. Embora a funo seja a mesma, ele utiliza um algoritmo bastante diferente para detectar parties, o que faz com que ele funcione em algumas situaes em que o Gpart no detecta as parties corretamente e vice-versa. Por isso vale a pena ter ambos na caixa de ferramentas. Lembre-se que ambos so capazes de recuperar parties apenas enquanto as informaes no so subscritas. Se voc acabou de apagar a sua partio de trabalho, bem provvel que consiga recuper-la, mas se o HD j tiver sido reparticionado e formatado depois do acidente, as coisas ficam muito mais complicadas. Sempre que um acidente acontecer, pare tudo e volte a usar o HD s depois de recuperar os dados. O Testdisk permite recuperar desde parties isoladas (incluindo as extendidas), at toda a tabela de partio, caso o HD tenha sido zerado. Ele suporta todos os principais sistemas de arquivos, incluindo FAT16, FAT32, NTFS, EXT2, EXT3, ReiserFS, XFS, LVM e Linux Raid. A pgina oficial a http://www.cgsecurity.org/testdisk.html onde, alm da verso Linux, voc encontra verses para Windows, DOS e at para o Solaris. Embora no seja exatamente um utilitrio famoso, o Testdisk includo em muitas distribuies. Nos derivados do Debian, voc pode instal-lo via apt-get: # apt-get install testdisk 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: # testdisk 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.

Gerenciamento de setores defeituosos com o ReiserFS


No Windows, sobretudo ao formatar o HD em FAT, o scandisk oferece a opo de fazer um teste de superfcie, onde so marcados setores defeituosos (badblocks) do HD. Os badblocks so defeitos fsicos na superfcie do HD, que no podem ser corrigidos, apenas marcados para que no sejam mais usados. Uma dvida comum se existe um sistema similar no Linux. Embora no seja um processo automtico, como o scandisk, voc pode usar o comando "badblocks". Ele faz um exame de superfcie e mostra uma lista com os setores defeituosos. Para usar em conjunto com o ReiserFS, voc precisa especificar o tamanho dos

blocos (em bytes). Se voc no usou nenhuma opo especial ao formatar a partio, os blocos tero 1024 bytes. O comando para verificar a partio /dev/hda1 por exemplo, fica: # badblocks -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: # reiserfsck /dev/hda1 Este comando deve ser executado com a partio desmontada. O ideal dar boot pelo CD do Kurumin e rodar a partir dele. Em casos mais extremos, onde voc tenha um HD cheio de badblocks em mos e queira us-lo mesmo assim (num micro que no usado para nada importante, por exemplo), voc pode fazer o seguinte: Comece enchendo o HD de bits zero, isso vai forar a controladora a escrever em todos os setores e marcar via hardware os setores defeituosos que conseguir. Isso pode ser feito usando o dd. Naturalmente isso vai apagar todos os dados. A forma ideal de fazer isso dando boot atravs do CD do Kurumin: # 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: # mkreiserfs /dev/hda1 Monte a partio e copie arquivos (qualquer coisa) para dentro dela at encher. Isso deve marcar via software os setores defeituosos que sobrarem. A partir da voc pode ir usando o HD at que ele pife definitivamente. possvel tambm gerar uma lista dos setores defeituosos usando o comando badblocks e especificar a lista ao formatar a partio, fazendo com que os setores defeituosos preexistentes encontrados pelo badblocks sejam marcados para no serem usados pelo mkreiserfs. Esta receita pode ser til no caso de HDs com alguns setores defeituosos, que estejam "estabilizados", usados por tempo considervel sem que novos setores apaream. Para isso, comece gerando o arquivo com a lista dos setores defeituosos da partio desejada: # badblocks -b 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: # mkreiserfs -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: # reiserfsck --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 offline mode". Drive command "Execute SMART Short self-test routine immediately in offline 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 Completed: unknown failure Remaining 90% LBA_of_first_error 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 de indicado o erro, por isso transfira todos os dados importantes imediatamente. Voc pode ver mais detalhes sobre o status de erro do HD usando o parmetro "-A", que mostra todos os atributos suportados pelo HD e o status de cada um. Na sexta coluna (Type) voc pode verificar a importncia de cada um; os marcados como "Old_age" indicam sintomas de que o HD est no final de sua vida til, mas no significam por si s problemas iminentes. Os mais graves so os "Pre-Fail", que indicam que o HD est com os dias contados. Na coluna "WHEN_FAILED" (a mais importante), voc v o status de cada opo. Num HD saudvel, esta coluna fica limpa para todas as opes, indicando que o HD nunca apresentou os erros:

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 CDROM 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/kurumin/cdrom ou: # mount -o loop /mnt/hda6/hda1.img /home/kurumin/hda1 Voc ver todos os arquivos dentro da pasta, e poder acessar o que foi possvel ler. Um problema do dd_rescue que ele l cada setor defeituoso vrias vezes, de forma a tentar obter os dados a qualquer custo. Por um lado, isto positivo, pois ele realmente acaba conseguindo recuperar vrios setores que falham na primeira leitura, mas por outro

lado, faz com que o processo de recuperao fique extremamente lento em mdias com muitos setores defeituosos. Isto especialmente problemtico ao recuperar dados em HDs, pois se o teste demora muito, a possibilidade do drive dar seu ltimo suspiro durante a recuperao, levando consigo os dados restantes muito maior. 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 # make 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

Eliminando dados com segurana


Ao "formatar" uma partio, ou ao remover todas as parties do HD, so alterados apenas os ndices utilizados pelo sistema operacional para encontrar os arquivos. Os dados propriamente ditos continuam intactos na superfcie magntica do HD, at serem efetivamente apagados reescritos. Isso cria um problema para quem precisa vender ou descartar HDs usados. Afinal, voc no vai querer que seus arquivos pessoais, ou informaes confidenciais da sua empresa sejam dadas "de brinde" junto com o HD descartado. Alguns rgos governamentais chegam a manter polticas estritas quanto ao descarte de HDs. Em muitos casos um HD s pode ser descartado depois de passar por um software de eliminao de dados e, em outras, os HDs so simplesmente destrudos.

Destruir um HD fcil. "Amacie" usando uma marreta de 20 kg, depois incinere. Se preferir, voc pode usar o HD como alvo num clube de tiro, ou destruir a superfcie magntica dos discos com cido. ;) Claro, nada disso realmente necessrio se voc sabe o que est fazendo. Da mesma maneira que possvel recuperar dados usando as ferramentas corretas, tambm possvel apag-los de forma que seja impossvel recuper-los. A maneira mais rudimentar seria simplesmente reescrever todos os dados. Voc poderia, por exemplo, encher o HD com zeros, usando o dd, como em: # 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.

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 # mkswap /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 faz-lo 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".

Suporte a mais de 1 GB de memria RAM


Tradicionalmente, os processadores x86 utilizam uma tabela de 32 bits para o endereamento da memria RAM e so por isso capazes de enderear at 4 GB de memria (dois elevado 32 potncia so 4.294.967.296 endereos, um por byte de memria). Esta limitao existe desde o 386. Na poca, ningum se importava muito com isso, pois a memria RAM era muito cara e era incomum algum usar mais do que 8 ou 16 MB. A partir da dcada de 90, os 4 GB comearam a ser um limitante para servidores de bancos de dados e outras aplicaes de grande porte, que consomem grandes quantidades de memria. Surgiu ento o PAE (Physical Address Extension), um hack implementado pela

Intel em alguns processadores a partir do Pentium Pro. O PAE consiste numa segunda tabela de endereos, com 4 bits adicionais, que permitem enderear 16 pginas de memria, cada uma com 4 GB. Com o PAE, passa a ser possvel enderear at 64 GB de memria. A desvantagem que o processador continua sendo capaz de acessar apenas 4 GB por vez e o chaveamento entre diferentes pginas de memria toma um certo tempo, que acaba prejudicando bastante o desempenho. Mesmo usando o PAE, a maioria dos aplicativos continua tendo acesso a apenas 4 GB. A vantagem que passa a ser possvel executar vrios aplicativos diferentes, cada um consumindo at 4 GB de memria, sem o uso de memria virtual. Apenas alguns aplicativos cuidadosamente desenvolvidos so capazes de distribuir dados entre diferentes pginas de memria, realmente aproveitando a memria adicional. O PAE pode ser encontrado apenas em alguns processadores Intel de 32 bits destinados a servidores, basicamente apenas o Pentium Pro e o Xeon. Para que funcione, necessrio que exista suporte tambm no chipset da placa-me e no sistema operacional usado. A soluo definitiva para quem precisa de mais de 4 GB de memria usar um processador de 64 bits, j que eles trabalham com tabelas de endereamento de 64 bits e so por isso capazes de acessar quantidades praticamente ilimitadas de memria. Ao utilizar um processador de 32 bits, o Linux oferece suporte nativo a at 4 GB de memria usando o modo normal de operao do processador e a at 64 GB usando o PAE. Ou seja, ele simplesmente acompanha o suporte disponvel no hardware, sem nenhuma limitao adicional. Para melhorar o desempenho do sistema em mquinas antigas, que utilizam 1 GB de memria ou menos, existe uma terceira opo, onde o Kernel enderea apenas 1 GB de memria, sendo que 960 MB ficam disponveis para os aplicativos e o restante reservado para uso do Kernel. Neste modo de operao, o comando "free" vai reportar que existem apenas 960 MB de memria disponvel, mesmo que voc possua 1 GB ou mais. possvel escolher entre as trs opes ao compilar o Kernel, na opo "Processor Type and Features > High Memory Support". At pouco tempo, a maioria das distribuies vinha com o suporte a apenas 1 GB ativado por padro. Nestes casos voc precisa recompilar o Kernel, usando a 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:
kernel /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 G4U, outra ferramenta similar, que voc pode ler em: http://www.guiadohardware.net/artigos/215/. O G4U um disquete bootvel que faz uma cpia completa do HD para um servidor de FTP habilitado em outro micro da rede ou na internet. Os dois compactam os dados, mas a diferena fundamental entre o Partimage e o G4U que o Partimage copia apenas os dados dentro da partio, gerando um arquivo proporcional ao espao ocupado. Se voc tiver uma partio de 40 GB, mas com apenas 600 MB ocupados, o arquivo de imagem (compactado) ter apenas uns 200 e poucos MB. O G4U j funciona de uma mais parecida com o dd, simplesmente copiando os uns e zeros do HD, criando imagens muito maiores. O Partimage tambm capaz de quebrar a imagem em vrios arquivos (voc especifica o tamanho desejado), permitindo que os backups possam ser facilmente gravados em DVD, mltiplos CDs, ou at mesmo mini-DVDs de 1.4 GB cada.

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: Check before saving: Executa uma verificao na partio, mostrando o tamanho, espao ocupado e se existe algum tipo de erro no sistema de arquivos. Enter description: Descrio que aparece na hora de recuperar a imagem, opcional. Overwrite without prompt: Se houver um arquivo com o mesmo nome, ele subscrito automaticamente. - If finished successfully (Depois de terminar de gerar ou recuperar a imagem): Wait : No faz nada, exibe uma janela de relatrio e fica esperando voc dar ok. Halt: Desliga a mquina (bom para fazer os backups de madrugada).

Reboot: Reinicia (bom para discos de recuperao automticos). Quit: S fecha o programa. - Image split mode (este um dos recursos mais interessantes do partimage, ele pode quebrar a imagem em vrios arquivos pequenos, facilitando o transporte): 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 Blocks with zero values: Imagine que voc tenha um monte de dados "confidenciais" na partio que est sendo regravada. Voc quer sumir com todos os vestgios deles, de modo que seja impossvel recuperar qualquer coisa. Esta opo preenche todo o espao vago da partio com bits zero, resolvendo o problema. If finished successfully: As mesmas opes que apareceram no menu de gravao: esperar, reiniciar o micro, desligar ou apenas fechar o programa depois de terminar.

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

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. # sfdisk -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 # sfdisk --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 tabela de particionamento usando os comandos acima. Na hora de restaurar, comece gravando os dois arquivos (MBR e tabela de partio), deixando para regravar as imagens das parties por ltimo. Um jeito fcil de fazer e recuperar os backups instalar temporariamente um segundo HD na mquina. Se voc instal-lo como master da segunda IDE, ele ser reconhecido como "hdc" pelo sistema e a primeira partio aparecer como "hdc1".

Gravando imagens num compartilhamento da rede

O partimage inclui tambm um servidor chamado partimaged, que permite fazer backups via rede. Este programa j vem includo no "Static i386 binary tarball", que baixamos no incio do artigo. Basta acessar a pasta onde descompactou o arquivo e chama-lo com o comando: # ./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, entre outras 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 "Nfslock" no Mandriva Control Center. Nos clientes Kurumin voc deve ativar os servios "nfs-common" e "portmap". Se voc quiser usar uma mquina Kurumin tambm como servidor, ento ative tambm o servio "nfs-kernel-server". Para ativar estes trs servios no Kurumin, use os comandos abaixo (como root): # /etc/init.d/portmap start # /etc/init.d/nfs-common start # /etc/init.d/nfs-kernel-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-kernel-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 rootkits


Um tipo de ataque grave e relativamente comum contra mquinas Linux so os famosos rootkits, softwares que exploram um conjunto de vulnerabilidades conhecidas para tentar obter privilgios de root na mquina afetada. Existem vrios rootkits que podem ser baixados da Net, variando em nvel de eficincia e atualizao. Os rootkits podem ser instalados tanto localmente (quando algum tem acesso fsico sua mquina) quanto remotamente, caso o intruso tenha acesso via SSH, VNC, XDMCP ou qualquer outra forma de acesso remoto. Neste caso, ele precisar primeiro descobrir a senha de algum dos usurios do sistema para poder fazer login e instalar o programa. O alvo mais comum neste caso so contas com senhas fceis. Qualquer instalao com o SSH ou telnet ativo e alguma conta de usurio com uma senha fcil (ou sem senha) muito vulnervel a este tipo de ataque. A instalao do rootkit em geral o ltimo passo de uma srie de ataques que visam obter acesso a uma conta de usurio do sistema. A partir do momento que possvel logar na mquina, o atacante executa o rootkit para tentar obter privilgios de root. Uma vez instalado, o rootkit vai alterar binrios do sistema, instalar novos mdulos no Kernel e alterar o comportamento do sistema de vrias formas para que no seja facilmente detectvel. O processo do rootkit no aparecer ao rodar o "ps -aux", o mdulo que ele inseriu no Kernel para alterar o comportamento do sistema no vai aparecer ao rodar o "lsmod", e assim por diante. Aparentemente vai estar tudo normal, voc vai poder continuar usando a mquina normalmente, mas existiro outras pessoas com acesso irrestrito a ela, que podero us-la remotamente da forma que quiserem. Se num desktop isso j parece assustador, imagine num servidor importante. Naturalmente tambm existem programas capazes de detectar rootkits. Um dos mais populares o chkrootkit, que pode ser encontrado no: http://www.chkrootkit.org/.

No site est disponvel apenas o pacote com o cdigo fonte, que voc precisa compilar manualmente, mas ele um programa bastante popular e vem incluso na maior parte das distribuies. No Debian, Kurumin ou derivados, voc pode instal-lo pelo apt-get: # apt-get install chkrootkit 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: # chkrootkit Ele exibe um longo relatrio, mostrando um por um os arquivos checados. Numa mquina saudvel, todos retornaro um "nothing found":
Searching Searching Searching Searching Searching Searching Searching ... for for for for for for for Ramen Worm files and dirs... nothing found Maniac files and dirs... nothing found RK17 files and dirs... nothing found Ducoci rootkit... nothing found Adore Worm... nothing found ShitC Worm... nothing found 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 # chkrootkit /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: # mkfs.vfat /dev/sda1 # mkfs.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.

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

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

O interessante que isto pode ser feito com outros dispositivos compatveis com o padro usb-storage (onde o carto visto pelo sistema como se fosse um pendrive), como cmeras e at mesmo palms. Ou seja, com um carto de capacidade suficiente, sua cmera pode, alm de tirar fotos e guardar arquivos, servir como sistema de boot. Mais um detalhe importante com relao velocidade da porta USB e tambm velocidade do pendrive, carto ou cmera usada. As portas USB 1.1 tm a velocidade de transferncia limitada a cerca de 800 KB/s, o que torna o carregamento do sistema lento, quase como se desse boot a partir de um CD-ROM 6x. As portas USB 2.0 so muito mais rpidas, fazendo com que o limitante seja a velocidade do carto ou pendrive usado. Os de fabricao recente tm geralmente tem uma velocidade de leitura entre 20 e 40 MB/s, o que j oferece um desempenho satisfatrio. O grande problema fica por conta de algumas cmeras e pendrives antigos, onde a taxa de transferncia muito mais baixa, muitas vezes menos de 300 kb/s. Nada o impede de utiliz-los, mas o desempenho do sistema ser muito ruim.

Salvando as configuraes
At aqui, o sistema d boot como se estivesse rodando a partir do CD, nenhuma grande vantagem. Podemos incrementar isso usando o espao livre para criar imagens de loopback, para armazenar configuraes e programas instalados. Fazendo isso, o sistema lembra as suas configuraes e permite a instalao de programas adicionais, praticamente como se estivesse instalado.

No Kurumin 7, voc pode utilizar as opes disponveis no "Iniciar > Configurao do Sistema":

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

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/kurumin.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=1024x768 xmodule=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 modprobe modprobe modprobe i2c-nforce2 asb100 w83l785ts 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 Gkrellm, instalados atravs dos pacotes de mesmo nome. O Ksensors interessante para quem usa o KDE, pois permite usar um cone com a temperatura ao lado do relgio, enquanto o Gkrellm tem seu pblico fiel graas ao bom design. Em ambos os casos, voc precisa ativar os sensores que sero exibidos na janela de configurao. No Ksensors existe a opo de exibir cada mostrador ao lado do relgio (Dock) ou na barra do programa (Panel).

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: Thermal 1: Thermal 2: Thermal 3: AC Adapter charged, 100% active[2], 62.0 degrees C ok, 49.0 degrees C ok, 31.0 degrees C 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-k8: Este o mdulo usado pelos processadores AMD de 64 bits (tanto os Athlon 64, quanto os Turion), que oferecem suporte ao PowerNow!. O driver tambm oferece suporte aos Semprons, que oferecem uma opo mais limitada de gerenciamento.

powernow-k7: Antes do Athlon 64, a AMD produziu diversas verses do Athlon XP Mobile, uma verso de baixo consumo destinada a notebooks. Este mdulo d suporte a eles. No caso dos Athlons e Durons antigos, voc pode usar o "athcool", que apresento mais adiante. longhaul: Este mdulo d suporte aos processadores Via C3, baseados no core Nehemiah. Ele encontrado em placas me mini-ITX e em alguns notebooks. Para ativar o powernowd, voc comea carregando o mdulo "acpi" (caso j no esteja carregado), seguido do mdulo "freq_table" (que obtm a lista das frequncias suportadas pelo processador) e um dos 4 mdulos que descrevi acima. A partir da a base est pronta e o powernowd pode ser finalmente ativado. Se voc usasse um Athlon 64, por exemplo, os comandos seriam: # # # # modprobe acpi modprobe freq_table modprobe powernow-k8 /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-k8 Voc pode acompanhar a freqncia de operao do processador atravs do comando "cpufreq-info". Caso ele no esteja disponvel, procure pelo pacote "cpufrequtils" no gerenciador de pacotes.
$ 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-k8 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 CPU 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. Mas, se voc usa o KDE, pode configurar o Klaptop, de forma a alternar entre eles clicando no cone da bateria. Para isso, clique com o boto direito sobre o cone da bateria ao lado do relgio e acesse a opo "Configurar Klaptop":

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

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

Uma observao que em alguns casos o cpufreq pode ajustar incorretamente a freqncia mxima de operao do processador, fazendo com que ele opere um degrau abaixo da freqncia mxima. Num HP NX6310, com um Core Duo T2300E (1.66 GHz) que testei, ele mantinha a freqncia do processador sempre a no mximo 1.33 GHz, ao invs de 1.66 GHz. Para corrigir o problema manualmente, usei o comando: # 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 links, arquivos e compiladores


Uma das coisas mais chatas com relao a estes drivers que os mdulos gerados durante a instalao funcionam apenas numa verso especfica do Kernel. Ao atualizar o Kernel, ou reinstalar uma distribuio diferente, voc precisar sempre reinstalar os drivers. Existem muitas coisas que podem dar errado na hora de compilar estes drivers. Vamos a um checklist dos problemas mais comuns: - Kernel Headers: Os headers do Kernel so um pr-requisito para instalar qualquer driver. Os arquivos vo na pasta "/usr/src/kernel-headers-2.6.x/" ou "/usr/src/linux-headers2.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 "kernel-headers" includo nas distribuies inclui apenas a pasta "include", que no suficiente para instalar muitos drivers, incluindo o VMware, por exemplo. Nestes casos voc precisar instalar tambm o pacote "kernel-source" que contm o cdigo fonte completo do Kernel, copiando as outras duas pastas de que precisamos a partir da pasta "/usr/src/linux/2.6.x". Outra coisa importante a verificar o contedo da pasta "arch/". Ela deve conter a pasta "i386" e dentro desta, um conjunto com vrias pastas e arquivos. Em muitas distribuies, a pasta arch vem vazia dentro do pacote kernel-headers e o contedo movido para dentro do pacote kernel-source. Nestes casos voc precisa mesmo ter instalados os dois pacotes. - Kernel Source: O cdigo fonte completo do Kernel vai na pasta "/usr/src/linux-2.6.x/" ou em alguns casos na pasta "/usr/src/kernel-source-2.6.x", onde o "2.6.x" a verso do Kernel. Em muitos casos, como no Debian por exemplo, ao instalar o pacote kernel-source ser apenas copiado um arquivo compactado em .tar.bz2 para a pasta "/usr/src/". Para concluir a instalao, voc ainda precisar descompact-lo com o comando "tar -jxvf kernel-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 link "/usr/src/linux": Em geral, os scripts de instalao dos drivers no se preocupam em tentar descobrir em qual pasta esto os headers do Kernel. No lugar disso eles

simplesmente acessam a pasta "/usr/src/linux", que na verdade um link simblico que deve apontar a pasta correta, com os headers ou o source do Kernel. Em alguns casos, ele criado automaticamente a instalar os pacotes com os headers ou o fonte do Kernel, em outros voc dever cri-lo manualmente, apontando ou para a pasta com os headers, ou para a pasta com o fonte completo. Lembre-se de que os links simblicos so criados com o comando "ln -s pasta_destino link", como em "ln -s /usr/src/linux-headers-2.6.14-kanotix-6 /usr/src/linux". - O link /lib/modules/2.x.x/build: Muitos scripts checam outro link, o build, dentro da pasta com os mdulos do Kernel, que tambm deve apontar para os headers ou os fontes do Kernel. Caso seja necessrio cri-lo manualmente, rode o comando: # ln -s /usr/src/kernel-headers-2.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 "instalarcompiladores".

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 56k HSFi Modem (rev 01) 00:07.0 FireWire (IEEE 1394): VIA Technologies, Inc. IEEE 1394 Host Controller (rev 46) 00:08.0 USB Controller: VIA Technologies, Inc. USB (rev 50) 00:08.1 USB Controller: VIA Technologies, Inc. USB (rev 50) 00:08.2 USB Controller: VIA Technologies, Inc. USB 2.0 (rev 51) 01:00.0 VGA compatible controller: Silicon Integrated Systems [SiS] SiS650/651/M650/740 PCI/AGP VGA Display Adapter

No nosso caso a linha mais interessante a:


00:05.0 Communication controller: Conexant HSF 56k HSFi Modem (rev 01)

Que indica que o modem um Conexant HSF. Este modem encontrado nos desknotes da PC-Chips e alguns modelos de notebooks. O Kurumin j vem com a maior parte dos drivers disponveis pr-instalados, disponveis direto do CD. Voc pode us-lo para testar o seu modem e verificar com qual driver ele funciona. Voc pode testar vrios e se por acaso um driver incorreto fizer o micro congelar na hora de discar, basta reiniciar e tentar de novo O objetivo deste captulo tanto ajudar os usurios de outras distribuies, cujos desenvolvedores no tm o cuidado e ateno de adicionar suporte aos softmodems, ou servir de fonte de consulta para quando voc quiser atualizar os drivers includos no Kurumin. Os drivers disponveis no Kurumin 5.x e 6.0 (que utilizam o Kernel 2.6) so os seguintes:

A idia bsica
O suporte a dispositivos no Linux obtido atravs de mdulos do Kernel. Estes mdulos tm uma funo semelhante aos drivers de dispositivos do Windows. As distribuies j incluem muitos mdulos prontos para a maioria dos dispositivos de hardware. por isso que geralmente a sua placa de som, rede, etc., so detectadas sem problemas. No caso dos modens, tudo o que precisamos fazer para que eles possam ser usados baixar o driver, gerar o mdulo para a verso do Kernel includa na sua distribuio e finalmente instal-lo. Os mdulos so arquivos instalados na pasta "/lib/modules/2.6.x/", onde o "2.6.x" a verso do Kernel instalado.

Durante o processo de instalao criado um arquivo (device) dentro do diretrio "/dev", por onde o modem acessado. No caso dos modem com chipset Lucent e Agere, por exemplo, o dispositivo "/dev/ttyLT0", O passo final criar um link "/dev/modem" apontando para o dispositivo do modem. A partir da voc pode usar o modem normalmente, discando atravs do kppp, pppconfig, wvdial, ou outro discador de sua preferncia. O programa acessa o link "/dev/modem", que a localizao padro do modem no Linux, o link aponta para o dispositivo e da em diante o prprio Kernel cuida de tudo, com a ajuda do mdulo. Veja que a idia no complicada. O maior obstculo que os mdulos precisam ser gerados para cada verso de cada distribuio. Um pacote compilado para o Mandriva 2006 s funcionar nele mesmo, outro compilado para o Fedora 4 s funcionar no Fedora 4, e assim por diante. Se voc no encontrar um pacote especfico para a distribuio que est usando (o que muito comum), a segunda opo baixar o pacote .tar.gz com o cdigo fonte e compil-lo voc mesmo. Esta a forma mais segura de instalar, pois gerar um mdulo produzido sob medida para o seu Kernel. Esta tambm ser a nica opo caso voc esteja usando um Kernel personalizado, diferente do que veio originalmente na distribuio, ou alguma distribuio Linux menos famosa. Para compilar qualquer driver de modem voc precisa ter instalados os pacotes de desenvolvimento, necessrios para compilar qualquer programa distribudo em cdigo fonte, alm dos pacotes kernel-source e kernel-headers, que contm o cdigo fonte do Kernel usado. Estes pacotes devem estar no CD da distribuio, basta instal-los da forma usual. Lembrese, voc deve usar os pacotes do CD da distribuio, eles precisam ser iguais ao Kernel que est instalado. Esta a idia bsica, daqui em diante o processo de instalao varia de acordo com o modem usado.

Driver da Smartlink
A Smartlink um fabricante de modems com chipset PC-Tel. Os drivers desenvolvidos por eles possuem uma boa qualidade e so os drivers "oficiais" para todo tipo de modem com chipset PC-Tel, tanto onboard, quanto em verso PCI. A lista de modems suportados por este driver inclui: a) Quase todos os modems PC-Tel onboard e AMR, incluindo os das placas M810, M812, e outros modelos da PC-Chips/ECS, alm de vrios notebooks. O driver permite usar a placa de som onboard ao mesmo tempo que o modem.

b) Modems PCI com chipset PC-Tel recentes, como os LG-Netodragon. Estes modems possuem um chipset relativamente grande, com a marca "Smartlink" decalcada.

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 "make" (dentro da pasta) que vai compilar o driver e em seguida o comando "make install" (que faz a instalao propriamente dita, como root). O prprio instalador se encarrega de adicionar a linha necessria no arquivo "/etc/modules.conf", criar o device, criar o link "/dev/modem" apontando para ele e adicionar uma entrada para o mdulo "slamr" no arquivo "/etc/modules.conf", para que ele seja carregado durante o boot.

A maior parte dos problemas de instalao deste driver ocorrem por falta da instalao dos compiladores ou por falta do pacote kernel-source. Na maioria das distribuies, especialmente no caso do Mandriva, apenas o pacote kernel-headers no suficiente, voc precisa instalar mesmo o pacote kernel-source. Ele grande, mas necessrio neste caso. Entre os compiladores, verifique especialmente se o pacote de desenvolvimento do glibc est instalado. No Debian, o pacote se chama "libc6-dev" e est disponvel via apt-get. Em outras distribuies, procure pelo pacote "glibc-devel" ou "glibc-dev". A verso atual do driver da Smartlink (slmodem) trabalha de uma forma um pouco diferente das antigas. importante entender como o driver funciona, j que muito comum aparecerem problemas diversos ao tentar conectar. Ao instalar, alm dos mdulos do Kernel, copiados para a pasta "/lib/modules/2.x.x/extra", instalado um aplicativo de gerenciamento, o "/usr/sbin/slmodemd", que cria uma pasta de logs, a "/var/lib/slmodem". Estes so os passos para ativar o driver manualmente caso necessrio: a) Criar os dispositivos: # mknod -m 600 /dev/slamr0 c 212 0 ; mknod -m 600 /dev/slamr1 c 212 1 ; mknod -m 600 /dev/slamr2 c 212 2 ; mknod -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.guiadohardware.net/kurumin/download/slmodem-2.9.10.tar.gz Baixe o patch com as modificaes aqui, salvando-o na mesma pasta que o driver: http://www.guiadohardware.net/kurumin/download/slmodem-2.9.10.patch Descompacte o arquivo do driver: $ 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 $ make # make 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". Voc pode usar a funo "Perguntar o Modem" para verificar se o modem est respondendo sem precisar realmente discar.

Intel AC'97 e ATI IXP


Recentemente, comearam a surgir alguns drivers open-source para modems onboard, como uma derivao dos drivers para placas de som includos no Alsa. At certo ponto, um modem tem uma funo similar de uma placa de som: ele transforma sinais digitais em sinais analgicos e vice-versa. Um modem inclui muitas funes adicionais, como modulao de dados, compresso e correo de erros, mas os desenvolvedores tm conseguido superar as dificuldades. - Intel AC'97: As verses recentes do Kernel, a partir do 2.6.11, incluem o mdulo "sndintel8x0m", que d suporte a modems Intel onboard, usados em notebooks de fabricao

recente (como o HP NX6110), que no so compatveis com o driver do Intel 537, e tambm aos modems onboard encontrados em placas-me com chipset nForce, que apesar de no parecer, so bem similares. O mesmo driver d suporte tambm a vrios modems com chipset PC-Tel, substituindo parcialmente o driver da Smartlink. - ATI IXP: Este outro driver open-source, que faz parte do Alsa. Ele d suporte aos modems onboard encontrados em notebooks com o chipset ATI IXP, como o Toshiba A70. Ele carregado atravs do driver "snd-atiixp-modem". Esto disponveis tambm os drivers "snd-via82xxx-modem" (que do suporte aos modems onboard encontrados em placas-me recentes, com chipset Via) e tambm o "sndali5451-modem" (ainda em estgio primrio de desenvolvimento) que visa oferecer suporte aos modems encontrados em placas com chipset ALI 5451. Todos estes drivers funcionam em conjunto com o driver da Smartlink. Ao us-los, procure uma verso com um Kernel recente, de preferncia o 2.6.14 ou mais atual. Em verses anteriores estes drivers no eram estveis, conflitavam com a placa de som ou simplesmente no funcionaram. A primeira parte carregar o mdulo que d suporte ao modem (carregado no lugar do slamr), como em: # modprobe snd-intel8x0m (ou snd-atiixp-modem, snd-via82xxx-modem ou snd-ali5451modem, 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/ $ make SUPPORT_ALSA=1 # make 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. Ao executar o comando, voc ver uma mensagem como:
SmartLink Soft Modem: version 2.9.9d Sep 27 2005 00:00:18 symbolic link `/dev/ttySL0' -> `/dev/pts/4' created. modem `modem:1' created. TTY is `/dev/pts/4' Use `/dev/ttySL0' as modem device, Ctrl+C for termination.

Como pode ver, o slmodemd um programa que fica residente. Ao fech-lo, o acesso ao modem desativado. Se no quiser que ele obstrua o terminal, use o "&" no final do comando. O "/dev/ttySL0" o dispositivo por onde o modem acessado. Crie o link "/dev/modem" apontando para ele, assim fica muito mais fcil localizar o modem dentro do programa de discagem: # ln -sf /dev/ttySL0 /dev/modem Ao usar o pacote do Debian, voc pode ativar o driver de uma forma mais simples, usando o comando "/etc/init.d/sl-modem-daemon start". Ele se encarrega de ativar o slmodemd e criar o link "/dev/modem" apontando para o dispositivo correto. A partir da, voc pode discar usando o KPPP. Este o resultado do relatrio gerado pelo "perguntar ao modem" do KPPP de um Intel AC'97 usado no HP NX6110. Como pode ver, ele detectado como se fosse um modem Smartlink, por causa do uso do slmodemd. A pista para o driver que est realmente sendo usado a linha "modem:1 alsa modem driver".

Intel 537 e 536


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

Os modems Ambient com chip TigerJet so os mais comuns, na dvida experimente primeiro o driver "intel-537". Caso o kppp trave no "Procurando Modem" ou ao tentar estabelecer a conexo, tente o "537EP".

Os dois drivers esto disponveis no: http://linmodems.technion.ac.il/packages/Intel/537/. A pgina um arquivo com vrias verses do driver, incluindo verses antigas, que s funcionam no Kernel 2.4. Enquanto escrevo, as verso mais recentes dos drivers para o Kernel so ainda os arquivos "intel-537-2.60.80.0.tgz" e "intel-537EP-2.60.80.0.tgz", lanados em outubro de 2004. O terceiro driver o "intel-536ep", que d suporte aos modems Intel 536EP, um modelo de modem relativamente comum por volta do incio de 2003. No chipset vem escrito "Intel Han". O driver para ele est disponvel no http://linmodems.technion.ac.il/packages/Intel/536/. Ao instalar em qualquer distribuio com o Kernel 2.6, baixe o arquivo "intel-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: $ make 537 # make 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_SUSPEND_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.ko rm -f rm /dev/ham; rm -f /dev/modem mknod /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: # make # make 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]: make[1]: make[1]: make: ** ** [pctel-0.9.7-9-rht-4/src/linmodem-2.6.o] Erro 1 ** [pctel-0.9.7-9-rht-4/src] Erro 2 Leaving directory `/usr/src/kernel-headers-2.6.14-6' [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:

# make 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 key restricted 123456789A ou # iwconfig wlan0 key restricted s:qwert (configura a chave de encriptao da rede, ao usar WEP. O primeiro comando usa uma chave em hexa e o segundo uma chave ASCII). Depois de definir os parmetros da rede, rode o comando "iwconfig". Ele mostra os detalhes da rede e o endereo MAC do ponto de acesso ao qual a placa est associada:
ath0 IEEE 802.11g ESSID:"minharede" Mode:Managed Frequency:2.462 GHz Access Point: 00:50:50:84:31:45 Bit Rate:11 Mb/s Tx-Power:18 dBm Sensitivity=0/3

Retry:off RTS thr:off Fragment thr:off Power Management:off Link Quality=52/94 Signal level=-43 dBm Noise level=-95 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:5

A partir da, a conexo wireless configurada da mesma forma que uma cabeada, com a definio do endereo IP, mscara de sub-rede, gateway e DNS. Praticamente todas as distribuies trazem ferramentas para configurar a rede de forma mais prtica; as duas mais genricas so o "wireless-config" (do Gnome) e o "Kwifimanager" (do KDE).

Naturalmente, s possvel configurar a rede wireless depois que a placa detectada pelo sistema e, para isso, necessrio que o driver adequado esteja instalado e o mdulo correspondente carregado.

Ndiswrapper
O Ndiswrapper uma espcie de Wine para drivers de placas de rede wireless. Ele funciona como uma camada de abstrao entre driver e o sistema operacional, permitindo que placas originalmente no suportadas no Linux funcionem usando os drivers do Windows. Em alguns casos o prprio driver para Windows XP que acompanha a placa funcionar. Em outros preciso usar alguma verso especfica do driver. Voc pode encontrar vrias dicas

sobre placas testadas por outros usurios do Ndiswrapper no: http://ndiswrapper.sourceforge.net/wiki/index.php/List Os drivers para Windows so arquivos executveis, que servem de intrpretes entre a placa e o sistema operacional. Eles contm o firmware da placa e outras funes necessrias para faz-la funcionar. Cada placa diferente; por isso, os drivers de uma no funcionam na outra. Mas, todos os drivers conversam com o sistema operacional usando uma linguagem especfica de comandos. Ou seja, do ponto de vista do sistema operacional todos os drivers so parecidos. O Ndiswrapper consegue executar o driver e "conversar" com ele usando esta linguagem. Ele trabalha como um intrprete, convertendo os comandos enviados pelo Kernel do Linux em comandos que o driver entende e vice-versa. O Kernel acha que est conversando com uma placa suportada, o driver acha que est rodando dentro de um sistema Windows e a placa finalmente funciona, mesmo que o fabricante no tenha se dignado a escrever um driver nativo. O Ndiswrapper no funciona com todas as placas e, em outras, alguns recursos como o WPA no funcionam. Apesar disso, na maior parte dos casos ele faz um bom trabalho. A pgina do projeto a: http://ndiswrapper.sourceforge.net. Muitas distribuies j trazem o Ndiswrapper instalado por padro. Nestes casos, voc pode pular este tpico sobre a instalao e ir direto para a configurao. Procure pelo pacote "ndiswrapper" no gerenciador de pacotes ou veja se o mdulo e o comando "ndiswrapper" esto disponveis. - Instalando: Na pgina voc encontrar apenas um pacote com o cdigo fonte. Como o Ndiswrapper precisa de um mdulo instalado no Kernel, seria complicado para os desenvolvedores manter verses para muitas distribuies diferentes. Assim como no caso dos softmodems, para compilar o pacote voc precisa ter instalados os pacotes kernelheaders e/ou kernel-source e os compiladores. A verso mais recente pode ser baixada no: http://sourceforge.net/projects/ndiswrapper/ Descompacte o arquivo e acesse a pasta que ser criada. Para compilar e instalar, basta rodar o comando: # make 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/GPLUS.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 "ndisgtk", 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: # make # make 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) b) c) d) for ACX100 (TNETW1100) chipset based cards for ACX111 (TNETW1130/1230) chipset based cards for both chipsets 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: # mkdir /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 DWL-G520), AirLink, 3Com, Linksys, Netgear, AT&T e outros. Este chipset tambm muito usado em placas mini-PCI, para notebooks. Ele pode ser encontrado, por exemplo, nos Toshiba A70 e A75. Assim como no caso das placas com chipset ACX, muitos dos modelos com o chip Atheros possuem variantes com outros chipsets. Por exemplo, a D-Link DWL-G520 usa o chip Atheros, enquanto a DWL-G520+ usa o chip ACX100. A melhor forma de checar se voc tem em mos uma placa com o chip Atheros, rodar o lspci. Voc ver uma linha como:
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: # make # make 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.

ADMteck ADM8211

Este mais um chipset wireless de baixo custo, encontrado tanto em placas PC-Card quanto PCI, incluindo alguns modelos da 3Com e D-link e algumas placas PCI baratas, sem pedigree.

fcil reconhecer estas placas pelo chipset, que trs decalcado o modelo. Rodando o comando lspci voc ver algo como:
00:08.0 Network controller: Linksys ADMtek 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: # make 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.

Realtek 8180
Este chipset encontrado em alguns modelos de placas PCI, principalmente em modelos vendidos pela LG. Embora seja mais raro, voc tambm encontrar algumas placas PCMCIA e at algumas placas-me com ela onboard. A Realtek chegou a disponibilizar um driver for Linux, mas ele funciona apenas em distribuies com Kernel 2.4.18 ou 2.4.20: http://www.realtek.com.tw/downloads/. Existe um driver open-source, o "rtl8180-sa2400" (desenvolvido de forma independente), este sim atualizado. O nome surgiu porque originalmente este driver dava suporte apenas a um pequeno conjunto de placas, que utilizavam o transmissor de rdio Philips sa2400. Com o tempo, o conjunto de placas suportadas cresceu bastante e atualmente ele j suporta quase todas as placas baseadas no chipset Realtek 8180, produzidas por vrios fabricantes. Ele funciona tanto em distribuies com o Kernel 2.4 quanto com o 2.6, e est disponvel no: http://rtl8180-sa2400.sourceforge.net/ Para instalar, descompacte o arquivo e rode o comando "make" dentro da pasta. Ele vai gerar 4 mdulos: ieee80211_crypt-r8180.ko, ieee80211_crypt_wep-r8180.ko, ieee80211r8180.ko e r8180.ko, que precisam ser carregados usando o comando insmod, nesta ordem: # # # # insmod insmod insmod insmod ieee80211_crypt-r8180.ko ieee80211_crypt_wep-r8180.ko ieee80211-r8180.ko r8180.ko

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-USB
Este driver destinado s placas USB com o chipset Prism, como as Compaq WL215 e W200, encontradas principalmente em notebooks Compaq Evo. Este driver foi durante um bom tempo desenvolvido como um driver separado, at ser incorporado ao driver Orinoco principal. Se voc est usando uma distribuio recente, baseada no Kernel 2.6.8 em diante, provvel que sua placa funcione simplesmente carregando o mdulo "orinoco": # modprobe orinoco Caso voc esteja usando uma distribuio antiga, que ainda utilize o driver orinoco sem suporte aos modelos USB, voc pode instalar manualmente o driver antigo, disponvel no: http://orinoco-usb.alioth.debian.org Na pgina esto disponveis pacotes para o Debian e o Red Hat, mas lembre-se de que os pacotes s funcionam nas verses do Kernel para que foram compilados. Eles s sero teis se voc estiver usando um Kernel padro das distribuies. A forma mais rpida de obter o cdigo fonte do driver para instala-l manualmente via CVS. mais fcil do que parece. Em primeiro lugar, voc precisar instalar o pacote "cvs" encontrado na distribuio em uso, com um "apt-get install cvs" ou "urpmi cvs" por exemplo. Com o CVS instalado, rode os comandos: # 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: # make # make 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 sub-pasta "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 mini-PCI destinadas a notebooks. Elas so encontradas em notebooks com a tecnologia Centrino. Trata-se na verdade de um golpe de marketing da Intel para vender mais placas, chipsets e processadores. Para usar a marca "Centrino", um notebook precisa usar um processador Pentium M, um chipset Intel e uma placa wireless IPW2100 ou IPW2200. Os fabricantes acabam comprando ento os trs componentes da Intel, ao invs de usar uma placa wireless ou chipset de outro fabricante. Note que existem muitos notebooks com processadores Pentium M ou Celeron M e placas wireless de outros fabricantes, mas eles no so "Centrino". 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: # make # make install Isto gerar e copiar os mdulos ipw2200.ko, ieee80211.ko, ieee80211_crypt.ko e ieee80211_crypt_wep.ko para a pasta "/lib/modules/2.6.x/kernel/drivers/net/wireless/". Em seguida vem o passo que quase sempre necessrio: baixar o arquivo com o firmware ("ipw2200-fw-2.4.tgz", no meu caso), descompactar e copiar os arquivos para dentro da pasta "/lib/firmware" (em distribuies que usam o udev) ou "/usr/lib/hotplug/firmware/" (nas distribuies que ainda usam o hotplug), como em: # 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:

# make 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: ipw2200: ipw2200: ipw2200: ipw2200: ipw2200: ipw2200: Intel(R) PRO/Wireless 2200/2915 Network Driver, 1.0.8 Copyright(c) 2003-2005 Intel Corporation Detected Intel PRO/Wireless 2200BG Network Connection Unable to load ucode: -62 Unable to load firmware: -62 failed to register network device 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.

Ralink 2400, 2500 e RT61


A Ralink um fabricante relativamente novo, que fabrica os chipsets rt2400 e rt2500, dois chips de baixo custo, que esto sendo usados em muitas placas, muitas vezes substituindo os chips acx111 e rtl8180, que so mais caros do que eles. Muita gente utiliza (com sucesso) o ndiswrapper para ativar estas placas, mas tambm existe um driver nativo, que pode ser baixado no: http://prdownloads.sourceforge.net/rt2400/. Nele voc encontrar os arquivos "rt2400-1.x.x.tar.gz" (o driver antigo, que d suporte s rt2400) e o "rt2500-1.x.x.tar.gz", que d suporte s rt2500. Voc pode verificar qual dois dois chipsets usado na sua placa usando o comando "lspci", ou verificar uma lista de placas baseadas nos dois chipsets no: http://ralink.rapla.net/. Para instalar o "rt2400-1.x.x.tar.gz", descompacte o arquivo e acesse a pasta que ser criada. Dentro dela, acesse a pasta "Module" e rode os comandos "make" e "make install". Ser instalado o mdulo "rt2400". Ao carreg-lo usando o modprobe, a placa ser vista pelo sistema como "/dev/ra0", ao invs de "/dev/wlan0" como seria mais comum. Para o "rt2500-1.x.x.tar.gz", o procedimento de instalao o mesmo, rodar os comandos "make" e "make install" dentro da pasta "Module". A nica diferena que neste caso instalado o mdulo "rt2500". Para as placas Ralink RT61, use o driver "rt61-1.1.0-b1.tar.gz" (ou mais recente). Ele instalado da mesma forma que os outros, usando os comandos "make" e "make install". Isto gerar o mdulo "rt61", que deve ser carregado para ativar a placa. 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 open-source. Ele (nas distribuies) geralmente dividido em dois pacotes. O pacote "linux-wlan-ng" inclui os scripts e utilitrios, enquanto o pacote "linux-wlan-ng-modules" contm os mdulos de Kernel das placas suportadas. Algumas distribuies incluem apenas os scripts e utilitrios, mas no os mdulos do Kernel. Caso voc precise instal-los manualmente, baixe o pacote no: ftp://ftp.linux-wlan.org/pub/linux-wlan-ng/. A instalao similar aos outros drivers que vimos at aqui. Descompacte o arquivo e rode o comando: # make 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: # make all # make 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.

Vrios programas suportam este recurso, entre eles o camstream e o camorama. Dentro do programa procure a opo "ftp to server" e fornea o endereo do ftp, login e senha para upload das imagens.

Driver spca5xx
Este driver uma espcie de curinga, suporta quase 100 modelos diferentes de webcams, com combinaes de vrios chipsets e sensores diferentes. A lista dos modelos suportados est disponvel no: http://mxhaard.free.fr/spca5xx.html. A pgina de download a: http://mxhaard.free.fr/download.html. O driver atualizado com muita freqncia. Enquanto escrevo, a verso mais atual o arquivo "spca5xx-20050328.tar.gz". Como de praxe, para instal-lo necessrio ter instalados os compiladores e o cdigo fonte do Kernel. Descompacte o arquivo com o comando "tar -zxvf spca5xx-20050328.tar.gz", acesse a pasta spca5xx-20050328 que ser criada e rode os comandos: $ make # make install O script vai compilar o mdulo spca50x.ko e copi-lo para a pasta "/lib/modules/2.x.x/kernel/drivers/usb/media" Para carreg-lo manualmente, use o comando "modprobe spca50x". Para fazer com que ele seja carregado automaticamente durante o boot, adicione a linha "spca50x" no final do arquivo "/etc/modules". Teste a cmera no Kopete, Gnomemeeting, Camstream, Camorama, Gqcam ou outro programa de conferncia ou captura.

Logitech QuickCam
Segundo o desenvolvedor, este driver suporta as cmeras Logitech Quickcam Express (o modelo antigo), Logitech Quickcam Web, LegoCam, Dexxa Webcam, Labtec Webcam e alguns modelos da Logitech QuickCam Notebook. Para instal-lo, o primeiro passo baixar o driver disponvel no: http://qcega.sourceforge.net/.

O driver mais atual o "qc-usb", que oferece os mesmos recursos do driver antigo, o qcega, mas com vrias atualizaes. Para instalar, descompacte o pacote, acesse a pasta que ser criada e gere o arquivo do mdulo com o comando: # make all Ative o mdulo com o comando: # insmod mod_quickcam.ko Por ltimo, rode o script que instala o mdulo e os utilitrios: # ./quickcam.sh Para que o mdulo seja carregado automaticamente durante o boot, adicione a linha "quickcam" no final do arquivo /etc/modules.conf.

Sqcam
Mais um driver pouco conhecido o Sqcam, que d suporte s BreezeCam e outras cmeras baratas, que funcionam tambm como webcam, baseadas no chipset SQ905 e variantes. Baixe a verso mais recente do driver no: http://prdownloads.sourceforge.net/sqcam/. No meu caso, baixei o arquivo "sqcam_driver_for_kernel_2_6-0.1b.tar.gz". Depois de descompactar e acessar a pasta criada, compile o mdulo usando o comando:

# make Caso a compilao falhe com um erro como "*** Warning: "remap_page_range" [sqcam_driver_for_kernel_2_6/sqcam.ko] undefined!", abra o arquivo "sq905.c" (o arquivo que gera o erro) e substitua a linha:
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.ko /lib/modules/2.6.14-kanotix-6/misc/ Rode o comando "depmod -a" para atualizar a lista dos mdulos disponveis e carregue o novo mdulo: # modprobe sqcam

Modems ADSL USB


Os modems ADSL podem ser divididos em trs categorias. Os modems bridge, os que podem ser configurados como router e os modems USB, que so os modelos mais baratos, simples e de um modo geral de mais baixa qualidade. Os modems que so conectados na placa de rede so muito simples de configurar, pois conversam com o sistema operacional usando um protocolo padro, o prprio protocolo Ethernet.

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

Ao configurar o modem como roteador, sua vida fica muito mais simples, pois o prprio modem faz a autenticao e compartilha a conexo com o seu micro. Voc precisa apenas configurar a rede via DHCP para navegar. O modem pode ainda configurar a conexo com vrios micros e serve como firewall para a rede. A configurao do modem pode ser alterada atravs de uma interface de configurao acessvel via navegador. O modem vem configurado de fbrica com um IP como 10.0.0.138 ou 192.168.1.254 e um login e senha padro, informaes que voc encontra no manual. Voc precisa apenas acessar este endereo padro usando o navegador, a partir do micro conectado no modem. Os modems USB por sua vez so uma espcie que trabalha de forma muito mais precria. Em primeiro lugar, eles precisam de um driver para funcionar, o que nos faz cair no mesmo problema dos softmodems: os drivers so muitas vezes proprietrios, muitas vezes contm bugs e no vm pr-instalados na maioria das distribuies.

Alm do driver, necessrio o arquivo do firmware correspondente ao seu modem. O firmware um software que carregado no prprio modem quando ele ativado e responsvel por controlar o hardware, permitindo que ele se comunique com o driver instalado na sua mquina. Sem o firmware correto, o modem simplesmente no funciona. Se voc tem a opo de escolher, troque imediatamente seu modem ADSL USB por um modelo completo, ligado na placa de rede. Sua vida ser muito mais longa e feliz. Caso contrrio, aceite minhas condolncias e continue lendo... :-P. O driver para o Speedtouch USB (que inclui suporte para o Speedtouch 330 da Alcatel), o modelo USB mais popular aqui no Brasil, pode ser encontrado no: http://sourceforge.net/projects/speedtouch/. Este aquele modelo pequeno, que parece uma pulga em cima do monitor. Ele foi bastante popular numa certa poca, quando a diferena de preo entre ele e os modems roteadores ainda era grande. Hoje em dia os modems ADSL de uma forma geral caram muito de preo e deixou de existir uma diferena significativa.

Voc precisa baixar dois arquivos. O driver propriamente dito est enquanto escrevo na verso 1.3 e pode ser baixado no: http://prdownloads.sourceforge.net/speedtouch/speedtouch-1.3.tar.gz. Na pgina esto disponveis tambm alguns pacotes pr-compilados para o Fedora e Mandriva. O segundo arquivo o firmware do modem, o arquivo SpeedTouch330_firmware_3012.zip que pode ser baixado no: http://www.speedtouch.com/ driver_upgrade_lx_3.0.1.2.htm.

Para instalar o driver, descompacte o arquivo, acesse a pasta que ser criada e rode os comandos de sempre: $ $ $ # ./configure make su <senha> make 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.package 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: # make Este driver pode ser problemtico de instalar em algumas distribuies. Em vrias, o script de instalao simplesmente no funciona, terminando com vrios erros. Nestes casos voc pode compilar apenas o mdulo e copiar o script de inicializao manualmente: 1- Acesse a pasta "amedyn/module/" e rode os comandos: # ./configure # make Copie os mdulos "amedyndbg.ko" e "amedyn.ko" que sero gerados para a pasta "/lib/modules/2.x.x/extra/" e rode o comando "depmod -a". 2- Acesse agora a pasta "amedyn/scripts/" e instale-os com o comando: # make Edite agora o arquivo /etc/amedyn, onde vai a configurao do protocolo e do provedor. Ele ficar:

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 o antigo driver 1.0-7174, que continua disponvel no arquivo: http://www.nvidia.com/object/linux_display_archive.html. Enquanto escrevo, a verso mais atual a 1.0 release 8178, o que faz com que o arquivo se chame NVIDIA-Linux-x86-1.0-8178-pkg1.run.

Este um arquivo binrio, diferente dos pacotes .RPM ou .DEB a que estamos acostumados. Voc no precisa usar nenhum gerenciador de pacotes, basta rod-lo diretamente em qualquer distribuio. 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-pkg1.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/kdm 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-pkg1.run Antes de mais nada, voc precisa aceitar o bom e velho contrato de licena. Muita gente se pergunta por que a nVidia no abre de uma vez o cdigo fonte do driver para que ele j seja includo diretamente nas distribuies. Bem, o problema todo tem trs letras: ATI. Atualmente a ATI est frente da nVidia do ponto de vista do hardware. As placas so na maioria dos casos mais rpidas. O problema que a ATI no consegue fazer drivers to bons quanto a nVidia, o que mantm as duas mais ou menos em p de igualdade. Abrir os drivers neste caso poderia beneficiar a ATI, j que o cdigo fonte do driver diz muito sobre como a placa funciona e que tipo de otimizaes e truques foram implementados.

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, kernelheaders 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/kdm start" para reabrir o modo grfico. Tudo continuar exatamente do mesmo jeito que antes, pois os drivers foram instalados mas ainda no foram ativados :-). Para finalmente instalar os drivers voc precisa editar o arquivo de configurao do X, nada muito complicado. Antes de mais nada, faa uma cpia do arquivo original, assim se algo der errado e o X no abrir mais voc poder voltar para a sua configurao antiga: # cp /etc/X11/xorg.conf /etc/X11/xorg.conf.orig Agora abria o arquivo e mos obra: # kedit /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 desativla apenas caso ocorram travamentos ou instabilidade ao rodar games 3D. Outra configurao que causa problemas freqentemente a "NvAGP", que indica qual driver AGP o driver ir utilizar. Existem trs opes: NvAGP "0": desativa o uso do AGP. Isto faz com que a placa de vdeo seja acessada como se fosse uma placa PCI, sem armazenar texturas na memria e outros recursos permitidos pelo AGP. O desempenho naturalmente cai, principalmente nos games mais pesados ou ao usar resolues mais altas, mas os problemas so minimizados. NvAGP "2": usa o driver "agpgart", que o driver AGP padro, includo no prprio Kernel. Este um driver genrico, que ativa todas as funes do barramento AGP, sem nenhuma otimizao em especial. NvAGP "1": usa o driver AGP interno da nVidia, uma verso fortemente otimizada, includa no prprio driver. Esta a opo mais rpida (de 10 a 20% mais que ao usar o agpgart), porm a mais problemtica, pois apresenta incompatibilidades diversas com um grande nmero de placas-me. Para usar esta opo, o mdulo "agpgart" no deve ser carregado durante o boot. Muitas ferramentas de deteco o carregam automaticamente, o que faz com que o driver AGP da nVidia no funcione corretamente e o driver trave durante a abertura do X. Para evitar esse problema, adicione a linhas:
modprobe -r agpgart modprobe nvidia

... no final do arquivo "/etc/init.d/bootmisc.sh" ou "/etc/rc.d/rc.local". preciso tambm que a placa-me usada seja compatvel com o driver. Isso voc descobre apenas testando. Se o driver travar na abertura do X, mude para o NvAGP "2" ou NvAGP "0". NvAGP "3": este o valor default do driver, um valor "seguro", onde a placa testa ambos os drivers, tentando primeiro usar o agpgart e passando para o nVidia AGP caso possvel. Colocar esta opo no arquivo redundante, j que ela usada por padro quando a linha omitida. Voc precisa se preocupar apenas ao usar um dos outros valores. 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 podem levar 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: 1: 2: 3: 4: 5: 6: 7: FSAA desativado 2x Bilinear Multisampling 2x Quincunx Multisampling FSAA desativado 2 x 2 Supersampling FSAA desativado FSAA desativado FSAA desativado

GeForce3, Quadro DCC, GeForce4 Ti, GeForce4 4200 Go Quadro4 700,750,780,900,980 XGL -------------------------------------------------------------0: 1: 2: 3: 4: 5: 6: 7: FSAA desativado 2x Bilinear Multisampling 2x Quincunx Multisampling FSAA desativado 4x Bilinear Multisampling 4x Gaussian Multisampling 2x Bilinear Multisampling por 4x Supersampling FSAA desativado

GeForce FX, GeForce 6xxx, GeForce 7xxx, Quadro FX --------------------------------------------------------------0: 1: 2: 3: 4: 5: 6: 7: FSAA desativado 2x Bilinear Multisampling 2x Quincunx Multisampling FSAA desativado 4x Bilinear Multisampling 4x Gaussian Multisampling 2x Bilinear Multisampling por 4x Supersampling 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_DEFAULT_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 NVClock, que permite ajustar a freqncia de operao da placa, fazendo overclock. Ele est disponvel no http://www.linuxhardware.org/nvclock. No site est disponvel apenas a verso com cdigo fonte. Para instalar, descompacte o arquivo e instale usando os comandos "./configure", "make", "make install". Nas verses atuais, o NVClock possui duas opes de interface, o "nvclock_gtk" e o "nvclock_qt". Alm do visual, os dois possuem opes ligeiramente diferentes, por isso convm testar ambos. Ao compilar, voc precisa ter instaladas tanto as bibliotecas de desenvolvimento do QT, quanto do GTK, caso contrrio o instalador vai gerar apenas a verso em modo texto. Se voc estiver usando o Debian (e derivados), Knoppix ou Kurumin pode instal-lo mais facilmente atravs do apt-get. Ao usar outra distribuio, cheque se o repositrio (da distribuio) inclui os trs pacotes. # apt-get install nvclock # apt-get install nvclock-gtk # apt-get install nvclock-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.

TwinView
O TwinView um recurso disponvel em muitas placas GeForce2 MX em diante. A placa de vdeo possui dois conectores, permitindo que voc tenha um sistema dual monitor usando uma nica placa. algo muito semelhante ao dual head encontrado nas placas da Matrox.

O TwinView interessante, pois pode ser encontrado mesmo em placas relativamente baratas. Voc acaba gastando bem menos do que se fosse comprar duas placas 3D separadas. Para ativar este recurso no Linux, teremos que novamente recorrer edio do "/etc/X11/xorg.conf". No read-me dos drivers est dito para incluir as seguintes linhas na seo "Device":
Option Option Option Option "TwinView" "SecondMonitorHorizSync" "<hsync range(s)>" "SecondMonitorVertRefresh" "<vrefresh range(s)>" "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 Option Option Option Option Option "TwinView" "True" "TwinViewOrientation" "RightOf" "UseEdidFreqs" "True" "MetaModes" "1280x1024, 1280x1024" "SecondMonitorHorizSync" "31.5-95" "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 nvclock_qt oferece uma aba de configurao para o TwinView, que pode ser usada no lugar da configurao manual.

Instalando moda Debian


Em distribuies derivadas do Debian, o driver da nVidia pode ser instalado tanto do jeito "normal", baixando o driver binrio do site da nVidia e executando o instalador no modo texto, ou instalando o driver atravs do apt-get. O driver dividido em duas partes: um mdulo no Kernel, que precisa ser compilado durante a instalao do driver (j que o mdulo diferente para cada verso do Kernel) e uma coleo de bibliotecas e utilitrios que so independentes da verso do Kernel. A instalao do driver pode ser problemtica em alguns casos, pois necessrio ter instalados os compiladores e os headers do Kernel, alm de que a verso do gcc instalada precisa ser a mesma que foi usada para compilar o Kernel. 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-kernel-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-pkg1.run --add-this-kernel Isto vai gerar um novo pacote com o mdulo para o Kernel atual includo. Ao instalar voc verificar que ele simplesmente usar o mdulo pr-compilado, sem tentar compilar novamente. Em qualquer um dos dois casos, depois de instalar o pacote ainda necessrio fazer as mudanas no arquivo de configurao do vdeo. Isso pode ser automatizado atravs de um script, usando o sed ou o awk para alterar os campos necessrios no arquivo /etc/X11/xorg.conf. Veja mais detalhes de como fazer isso no captulo sobre shell script.

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-pkg1.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 open-source. Apesar disso, o driver aberto continuou evoluindo, incluindo suporte a novas placas e melhorias no desempenho, embora o driver proprietrio seja mais rpido, j que desenvolvido pela equipe da ATI que tem acesso a todas as especificaes das placas. Se voc usa apenas aplicativos em 2D, filmes, msica, e games 3D leves, no vai perceber muita diferena, pois os drivers abertos oferecem um desempenho mais que satisfatrio para tarefas gerais. Mas, se voc roda games 3D pesados, ou usa aplicativos de modelagem em 3D, como o Blender ou o PovRay, vai ver que a diferena significativa. O desempenho dos drivers proprietrios da ATI chega a ser de 2 a 3 vezes maior que o do driver open-source, mas eles possuem sua dose de problemas. O driver da nVidia apresenta problemas em conjunto com algumas combinaes de placas de vdeo e placas-me baratas, principalmente em placas com chipset SiS. Em algumas voc s consegue usar o 3D configurando o vdeo com a opo Option "NvAgp" "0", que desativa o uso do barramento AGP, diminuindo brutalmente o desempenho da placa, e em outras o 3D simplesmente no funciona (muitas vezes nem no Windows) por limitaes eltricas da placa-me. No caso dos drivers da ATI, alm dos mesmos problemas de compatibilidade de hardware com algumas placas-me, temos sempre um conjunto de deficincias relacionadas com o

prprio driver, incluindo problemas de estabilidade em conjunto com algumas verses do X e alguns games. O driver for Linux tambm no oferece suporte completo a todas as instrues do padro OpenGL, o que causa pequenos problemas visuais em diversos games, principalmente alguns ttulos do Windows executados atravs do Cedega (WineX). O prprio desempenho do driver fica abaixo do obtido no Windows. Honestamente falando, se o driver do X est funcionando corretamente, no existe muita vantagem em mudar para o driver binrio da ATI, dada a baixa qualidade do driver e os diversos problemas. Ele oferece um desempenho 3D superior em conjunto com muitas placas, mas ainda muito inferior ao desempenho do driver Windows. Em resumo, se voc quer estabilidade, fique com o driver padro do X e, se est preocupado com o desempenho ou qualidade grfica, compre uma placa da nVidia, que oferece drivers melhores. Voc pode encontrar um comparativo entre a diferena de desempenho entre os drivers Linux e Windows da ATI e da nVidia (no mesmo hardware) nestes dois links: http://www.phoronix.com/scan.php?page=article&item=357 http://www.phoronix.com/scan.php?page=article&item=359 Outros dois links (bem mais antigos), com benchmarks comparativos: http://www.anandtech.com/printarticle.aspx?i=2229 http://www.anandtech.com/printarticle.aspx?i=2302 Depois dessa "seo choradeira", vamos ao que interessa, que a instalao do driver propriamente dito. importante lembrar que ele s tem o funcionamento garantido nas placas off-board Radeon 8500 em diante. Ele no funciona em muitos notebooks com placas ATI onboard (muitos fabricantes alteram a programao ou o barramento dos chipsets, tornando-os incompatveis com o 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: # aticonfig --initial=dual-head --screen-layout=right Caso ele reclame que o arquivo de configurao atual tem opes invlidas, voc pode usar a opo "-f", que fora a alterao do arquivo. Note que neste caso pode ser que voc precise fazer algumas alteraes manualmente depois, por isso importante salvar um backup do arquivo original. # aticonfig --initial --resolution=1024x768 -f Voc pode alterar as configuraes da sada de TV e do segundo monitor usando o "fireglcontrolpanel", um utilitrio grfico instalado juntamente com o driver:

Tenha em mente que, ao fazer qualquer alterao, necessrio reiniciar o X para que as modificaes entrem em vigor. Para que a acelerao 3D funcione, necessrio que o mdulo "fglrx" esteja carregado. Ele conflita com os mdulos "radeon" e "drm", que fazem parte do mdulo open-source. Se ao tentar carreg-lo voc receber uma mensagem como: # modprobe fglrx
FATAL: Error inserting fglrx (/lib/modules/2.6.12/kernel/drivers/char/drm/fglrx.ko): Operation not permitted

Significa que os dois mdulos esto carregados. Neste caso, desative-os e tente novamente:

# modprobe -r radeon # modprobe -r drm # modprobe fglrx Caso necessrio, adicione os trs comandos no final do arquivo "/etc/rc.d/rc.local" ou "/etc/init.d/bootmisc.sh" para que eles sejam executados a cada boot. Isso necessrio em muitas distribuies, pois muitas ferramentas de deteco carregam os dois mdulos sempre que uma placa ATI est instalada. Caso o mdulo "fglrx" no esteja disponvel, significa que algo deu errado durante a instalao do driver, provavelmente relacionado aos headers do Kernel ou aos compiladores. Verifique tudo e tente novamente. Outro recurso utilizado pelo driver o device "/dev/shm" (que ativa o suporte ao padro POSIX de memria compartilhada), que deve estar disponvel e montado. Para isso, adicione a linha abaixo no final do arquivo "/etc/fstab":
tmpfs /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 Option Option Option Option "fglrx" "UseInternalAGPGART" "no" "VideoOverlay" "on" "OpenGLOverlay" "off" "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 "UseInternalAGPGART" "no" para "yes". Isso ativa o uso do driver AGP includo no driver, desenvolvido pela equipe da ATI, ao invs de utilizar o driver agpgart genrico, aproveitando melhor os recursos da placa. Note que ativar esta opo pode causar travamentos em algumas placas. Neste caso basta desfazer a alterao e reiniciar o X. Se necessrio, voc pode fazer isso dando boot com um CD do Kurumin e editando o arquivo dentro da partio. Um problema bastante comum que, depois de iniciar, a imagem fique simplesmente preta. Isso pode acontecer em casos em que o driver incompatvel com a verso do X.org instalada, ou em casos de placas com sada de TV, onde o driver usa a sada errada para enviar o sinal. No segundo caso, o problema fcil de resolver, adicione a opo abaixo dentro da seo "Device", logo depois do Option "OpenGLOverlay" "off":
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 "xmkmf": $ tar -zxvf wizardpen-driver-0.5.0.tar.gz $ cd wizardpen-driver-0.5.0 $ xmkmf 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: # mkdir -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: $ make Ser gerado o arquivo "wizardpen_drv.o" (o driver em si), que precisa ser copiado para a pasta com mdulos de entrada do X, que normalmente a "/usr/lib/xorg/modules/input/" ou "/usr/X11R6/lib/modules/input/". Com o driver instalado, falta fazer a configurao do X, para que o tablet seja usado como mouse. Note que muitas distribuies j vem com o mdulo "wizardpen_drv.o" instalado; nestes casos voc pode pular toda esta parte de instalao e ir direto para a configurao. Comece carregando os mdulos "acecad" e "evdev", que adicionam suporte ao tablet no Kernel. Adicione os dois no final do arquivo "/etc/modules", de forma que sejam carregados na hora do boot: # # # # modprobe acecad modprobe evdev echo '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: H: B: B: B: B: B:

Phys=usb-0000:00:10.2-1/input0 Handlers=mouse1 event2 EV=1f KEY=400 0 3f0000 0 0 0 0 0 0 0 0 REL=303 ABS=7f00 1000003 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, deixandoo 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 mdulo bttv, que incluem a maior parte das placas PCI de baixo custo, como as Pixelview PlayTV e Pixelview PlayTV Pro, Pinnacle PCTV Studio/Rave e vrios outros modelos. Voc pode ver uma lista completa das placas suportadas por este driver no link abaixo: http://linuxtv.org/v4lwiki/index.php/Cardlist.BTTV Veja um resumo de outros chipsets suportados no Linux aqui: http://tvtime.sourceforge.net/cards.html Atualmente, existe uma oferta relativamente grande de placas de captura USB, como as Pinnacle Studio PCTV USB. Elas so suportadas atravs do driver "usbvision", mas ele ainda um trabalho preliminar, que oferece um conjunto muito pobre de recursos e no funciona em conjunto com muitos programas. Um conselho geral que evite estes modelos. Algumas placas PCI recentes utilizam o chip Conexant 2388x, que tambm bem suportado, atravs do mdulo cx88xx. Porm, estas placas so geralmente mais caras. A dica bsica para comprar uma placa de TV bem suportada no Linux e pagar pouco : compre apenas placas PCI, baseadas nos chipset Brooktree Bt848, Bt848A, Bt849, Bt878 ou Bt879. Estes chipsets so fabricados pela Conexant, algumas vezes sob nomes diferentes. O "Conexant Fusion 878A" (usado nas PixelView PlayTV por exemplo), na verdade o Bt878. Ao dar boot com o Kurumin num micro com uma destas placas e rodar o comando "lspci", que identifica os componentes, voc ver uma linha como:
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 "US Broadcast". Acesse a opo "Channel Configuration > Scan channels for signal" para que ele localize os canais disponveis na TV aberta. Se voc tem TV a cabo, basta sintonizar o canal 3. Em ltimo caso voc pode chamar o comando "tvtime-scanner", que faz uma busca longa, testando todas as freqncias possveis em busca de canais.

O TVtime ignora por padro canais com sinal muito ruim, o que pode ser um problema se voc no usa uma antena externa. Para ver todos os canais, marque a opo "Channel Management > Disable Signal Detection". Se voc tem um DVD Player ou videogame que usa um cabo Composite ou S-Video, ajuste em: "Input Configuration > Change Video Source". O TVtime inclui vrias opes de filtros, usados para melhorar a qualidade da imagem. Lembre-se de que o monitor utiliza uma resoluo e taxa de atualizao maiores que uma TV, onde temos uma imagem relativamente ruim, com 486 linhas horizontais e uma taxa de atualizao de 60 Hz entrelaados (onde apenas metade das linhas so atualizadas de cada vez). O software precisa compensar tudo isso para exibir uma imagem de boa qualidade no monitor.

Voc pode configurar o filtro usado no "Video configuration > Deinterlacer Configuration". O filtro "Television Full Resolution" combina uma boa qualidade de imagem com relativamente pouca utilizao do processador. A opo "Blur Vertical" desfoca um pouco a imagem, o que d a impresso de uma melhor qualidade, sobretudo em cenas com pouco movimento. Outro filtro interessante o "Video Processing > Input filters > 2-3 pulldown inversion". Os filmes gravados em pelcula utilizam 24 por segundo, um padro usado tambm em muitos formatos de vdeo digital. Como a TV utiliza 30 quadros por segundo (29,97 para ser exato) so includos mais 6 frames por segundo (telecinagem), para compatibilizar o sinal. O filtro remove estes frames artificiais, melhorando a fluidez das cenas quando exibidas no monitor. Voc pode tambm configurar as opes via linha de comando, o que interessante para uso em scripts. Para abrir em tela cheia, use o comando "tvtime -m", para abrir no canal 12 use: tvtime --channel=12. Veja mais detalhes na pgina oficial: http://tvtime.sourceforge.net/usage.html. Uma observao importante, que o TVtime precisa que a placa de vdeo oferea suporte ao YUY2, um recurso de acelerao de vdeo, que faz com que a placa de vdeo renderize a imagem da TV, diminuindo bruscamente a utilizao do processador principal. Este um recurso bsico, suportado por quase todas as placas de vdeo, com uma exceo importante: as Via VT8378 (S3 UniChrome), usadas como vdeo onboard em muitas das placas-me recentes, com chipset Via KM333 ou KM400. Nestas placas o TVtime simplesmente no abre, exibindo um erro no terminal. Se voc utiliza uma destas placas, a nica soluo para rodar o TVtime espetar uma placa de vdeo externa. O mesmo acontece ao usar o Vesa ou FBdev como driver de vdeo, ambos tambm no oferecem acelerao, independentemente da placa de vdeo usada. Em abril de 2005 a Via liberou um driver de cdigo aberto, que resolve o problema de suporte para suas placas de vdeo. Este driver vem includo por padro a partir do X.org 6.9, resolvendo o problema nas distribuies recentes. Outros dois programas de sintonia de TV, disponveis no apt-get so o Zapping e o Xawtv. O zapping um programa baseado na biblioteca GTK, tambm bastante amigvel, porm sem o mesmo desempenho e qualidade de imagem do TVtime. Originalmente ele capaz de gravar usando a biblioteca rte (os arquivos gerados no possuem uma qualidade to boa), mas o pacote disponvel no apt-get vem com este recurso desativado. O xawtv um programa mais antigo, com uma interface bem mais rudimentar. Ele oferece a opo de gravar trechos de vdeo, porm com baixa qualidade. No existem muitos motivos para us-lo hoje em dia.

Gravando
O TVtime no oferece a opo de gravar programas, voc pode no mximo tirar

screenshots. Embora seja uma sugesto freqente, os desenvolvedores esto mais concentrados em melhorar a qualidade dos filtros de recepo do que implementar um sistema de gravao. Outros programas grficos, como o Xawtv e o Zapping oferecem opes de gravao, mas a qualidade no boa. Uma opo mais elaborada o Mythtv (http://www.mythtv.org/), que cria um VPR domstico similar a um TiVO. A idia usar o micro como um centro de entretenimento, onde voc pode agendar a gravao de programas, ouvir CDs de msica e muito mais. O problema que o MyTV tambm muito complicado de instalar, com muitas dependncias. No um programa para instalar e usar casualmente. Entre os programas de modo texto, o mencoder o que oferece melhor qualidade. Ele uma espcie de curinga dos programas de converso de vdeo, usado como base por uma srie de programas grficos. A lenda diz que ele permite obter vdeo ou udio de qualquer lugar e converter para qualquer formato ;-). O problema que o mencoder possui tantas opes que um simples comando para gravar a Sesso da Tarde se transforma rapidamente em uma novela mexicana. O comando para gravar a programao do canal 12 da TV aberta durante uma hora seria:
$ mencoder tv:// -tv driver=v4l2:input=0:normid=4:channel=12:chanlist=usbcast:width=640:height=480:device=/dev/video0:adevice=/dev/dsp0:audiorate=3 2000: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/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 PC-Chips/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: N: P: H: B: B: B: Bus=0011 Vendor=0002 Product=0007 Version=0000 Name="SynPS/2 Synaptics TouchPad" Phys=isa0060/serio4/input0 Handlers=mouse0 event0 ts0 EV=b KEY=6420 0 670000 0 0 0 0 0 0 0 0 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 ksynaptics, que voc pode instalar pelo apt-get:
# apt-get install ksynaptics

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/linux2.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 "make xconfig". Na tela de configurao, habilite o bootsplash marcando a opo: "Device Drivers > Graphics Support > Bootsplash configuration > Bootup splash screen". Em seguida, marque tambm a opo: "Device Drivers > Graphics Support > VESA VGA Graphics Support". Ela habilita o suporte a frame-buffer, usado pelo bootsplash para mostrar imagens no terminal logo a partir do incio do boot, muito antes de qualquer componente do X ser carregado. Esta opo vem habilitada por padro em quase todas as distribuies, mas no custa checar. Na mesma seo esto disponveis drivers de frame-buffer otimizados para vrias placas de vdeo. Eles fazem diferena apenas para quem realmente utiliza muito o terminal, ou configura o X para usar o mdulo "fbdev". Eles no interessam no nosso caso, pois usar um deles no lugar do mdulo VESA padro far com que o frame-buffer funcione apenas em mquinas com a placa de vdeo em questo.

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 execut-lo logo em seguida para testar a mudana. Nas linguagens tradicionais, o cdigo fonte precisa ser recompilado a cada modificao, o que toma tempo. A princpio, o shell script lembra um pouco os arquivos .bat do DOS, que tambm eram arquivos de texto com comandos dentro; da mesma forma que um ser humano e uma ameba conservam muitas coisas em comum, como o fato de possurem DNA, se reproduzirem e sintetizarem protenas. Mas, assim como um humano muito mais inteligente e evoludo que uma ameba, um shell script pode ser incomparavelmente mais poderoso e elaborado que um simples .bat do DOS. possvel escrever programas complexos em shell script, substituindo aplicativos que demorariam muito mais tempo para ser escritos em uma linguagem mais sofisticada. Seus scripts podem tanto seguir a velha guarda, com interfaces simples de modo texto (ou mesmo no ter interface alguma e serem controlados atravs de parmetros), de forma a desempenhar tarefas simples, quanto possuir uma interface grfica elaborada, escrita usando o kommander e funes do kdialog. 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/kurumin/kurumin-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 kurumin-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-kurumin.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-kurumin.sh O md5sum soma os bits do arquivo e devolve um nmero de 32 caracteres. No mesmo diretrio do servidor onde foi baixado o arquivo, est disponvel um arquivo de texto com o md5sum correto do arquivo. O resultado do md5sum do arquivo baixado deve ser igual ao do arquivo, caso contrrio significa que o arquivo veio corrompido e voc precisa baixar de novo.

Voc j deve estar cansado de baixar as novas verses do Kurumin, e j sabe de tudo isso. Podemos aproveitar para ensinar isso ao nosso script, fazendo com que, depois de baixar o arquivo, ele verifique o md5sum e baixe o arquivo de novo caso ele esteja corrompido. Isto vai deixar o script um pouco mais complexo:
#!/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 utilizla 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. Lembrese 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 128k-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:buffe rsize=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/$USER/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 read echo read echo read "Qual canal gostaria de gravar? (ex: 12)" canal "Qual o tempo de gravao? (ex: 01:00:00)" tempo "Em qual arquivo o vdeo ser salvo? (ex: /home/$USER/video.avi)" 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=3 2000:\ 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 kdialog. O dialog o mais antigo e tradicional. Ele no gera geralmente uma janela grfica, mas sim uma janela de modo texto, que lembra os tempos do Clipper. A vantagem que ele permite que o script seja executado em modo texto puro ou remotamente (via ssh ou telnet), mesmo em conexes lentas. Por exemplo, para mostrar um aviso na tela, o comando seria: dialog --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 sempre usar um valor padro nas perguntas, pois ele serve ao mesmo tempo como um exemplo do que deve ser respondido e como uma garantia que a resposta no vir em branco. O "2> /tmp/resposta.tmp" faz com que a resposta seja gravada num arquivo de texto. Em seguida, o "canal=`cat /tmp/resposta.tmp`" cria a varivel "canal", com a resposta. O comando cat serve para listar o contedo de um arquivo de texto. Originalmente ele simplesmente escreveria na tela. Mas, usado desta forma, a sada do cat (o texto dentro do arquivo) armazenado na varivel, sem ser mostrado na tela. O resultado o mesmo do exemplo anterior, mas desta vez com uma interface um pouco melhor:

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`

Outras funes muito usadas no Xdialog e no dialog so: --radiolist: Esta funo permite exibir um menu de opes, que uso freqentemente nos scripts dos cones mgicos do Kurumin. Veja, por exemplo, o script "instalarbluefish", disponvel dentro da pasta "/usr/local/bin/" no Kurumin, ou no http://www.guiadohardware.net/kurumin/scripts/.

--yesno: Permite fazer perguntas. A resposta armazenada automaticamente na varivel "$?", que voc pode checar em seguida. Se a resposta foi "sim", a varivel fica com o valor "1" e se for "no", fica com o valor "0". Um exemplo de uso seria:
Xdialog --yesno "Tem certeza que deseja instalar o programa?" 15 60 if [ "$?" = "0" ] ; then comandos... fi

--fselect: Abre um menu de seleo de arquivos. Pode ser usado ao abrir um arquivo, por exemplo. Este um exemplo rpido que permite escolher um arquivo e tenta abri-lo usado o mplayer:
Xdialog --fselect ./ 30 75 2> /tmp/resposta.tmp video=`cat /tmp/resposta.tmp`; rm -f /tmp/resposta.tmp mplayer "$video"

--dselect: similar ao --fselect, mas abre um menu para escolher um diretrio. O kdialog, por sua vez, um componente do KDE e por isso o ideal para ser usado em distribuies que trazem o KDE como desktop principal. As janelas seguem o padro visual do KDE, respeitando as configuraes de cor, fontes e cones definidas no Centro de Controle do KDE, o que deixa os scripts com uma aparncia muito mais profissional. A principal desvantagem que, justamente por ser baseado nas bibliotecas do KDE, ele fica mais lento e pesado ao ser usado no Gnome ou outras interfaces, pois para abrir uma simples janela de aviso ser preciso carregar as bibliotecas do KDE. Para abrir a mesma janela em kdialog, o comando seria:
canal=`kdialog --title "Gravar-TV" --inputbox "Canal a gravar (ex: 12)" "12"`

Veja que aqui estou atribuindo o resultado do comando (a resposta) diretamente varivel (como no exemplo do md5sum), ao invs de ter que salvar num arquivo e depois l-lo. Leramos: canal igual ao resultado de kdialog --title "Gravar-TV" --inputbox "Canal a gravar (ex: 12)" "12". Isso funciona no kdialog e no no dialog ou Xdialog, pois o kdialog envia a resposta para a sada padro (que seria exibida no terminal), enquanto o Xdialog envia para a sada de erro. Se voc quisesse fazer como nos exemplos anteriores, salvando num arquivo e lendo-o em seguida, haveria uma pequena mudana no comando:
kdialog --inputbox "Canal a gravar (ex: 12)" "12" > /tmp/resposta.tmp canal=`/tmp/resposta.tmp`

Note que, ao invs de usar "2> /tmp/resposta.tmp", usei "> /tmp/resposta.tmp. O "2>" serve para direcionar a sada de erro, enquanto o ">" direciona a sada padro, fazendo com que ao invs de mostrar na tela, o comando salve o texto dentro do arquivo. possvel usar ainda o "&>", que direciona simultaneamente ambas as sadas. Por exemplo, comum que os programas do KDE exibam vrias mensagens ao serem abertos

num terminal, "sujando" a tela. Uma forma de resolver o problema direcionar ambas as sadas para o /dev/null, como em: $ konqueror http://guiadohardware.net &>/dev/null O parmetro "--title" permite especificar o texto do ttulo da janela. Este parmetro tambm existe no dialog e Xdialog. Note que desta vez no especifiquei as dimenses da janela. No kdialog isto no necessrio, pois a janela dimensionada de acordo com o contedo. Voc pode ter um efeito similar no Xdialog colocando as dimenses como "0 0". Nossa janela em kdialog fica:

Este o script completo, que desenvolvi para o Kurumin usando janelas em kdialog. O script est dividido em vrias partes, intercaladas com explicaes:
#!/bin/sh # Gravar-TV # Script para gravar TV usando uma placa de captura. # Escrito por Carlos E. Morimoto <morimoto@guiadohardware.net> para o Kurumin kdialog --title "Gravar-TV" --msgbox "Este script permite gravar programas de TV, usando uma placa de captura. Ao gravar, voc precisa fechar o TVtime ou qualquer outro programa de sintonia de TV que esteja aberto. 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.guiadohardware.net/kurumin/bin/. Eles so intencionalmente escritos de forma simples, at elementar para facilitar o entendimento. Tudo comea com o "#!/bin/sh", que denota que se trata de um shell script. de praxe incluir tambm uma descrio do programa e o nome do autor:

#!/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 echo echo echo echo echo echo echo echo "[Desktop Entry]" > ~/Desktop/$nome "Type=FSDevice" >> ~/Desktop/$nome "Dev=$SHARE" >> ~/Desktop/$nome "MountPoint=$LOCAL" >> ~/Desktop/$nome "FSType=nfs" >> ~/Desktop/$nome "ReadOnly=0" >> ~/Desktop/$nome "Icon=hdd_mount" >> ~/Desktop/$nome "UnmountIcon=hdd_unmount" >> ~/Desktop/$nome "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:
modprobe snd-emu10k1 && echo "O mdulo foi carregado" || echo "Erro no carregamento"

Mais dicas sobre o kdialog


O Kdialog oferece uma quantidade generosa de opes de caixas de dilogo. Alm do --msgbox, temos tambm o "--sorry" e "--error", que podem ser usados de acordo com o contexto da mensagem, como em:
$ kdialog --sorry "Desculpe, no foi possvel criar o arquivo, verifique as permisses da pasta."

$ kdialog --error "O arquivo est corrompido. Experimente baix-lo novamente"

Outra opo til o "--passivepopup", que exibe uma caixa num dos cantos da tela que desaparece sozinha depois de um tempo determinado (ou ao ser clicada), ideal para avisos de rotina sem tanta importncia. Ao usar o passivepopup, alm do texto da mensagem, voc deve especificar o tempo de exibio da mensagem, em segundos. Para que o script continue depois de exibir a janela, sem esperar ela desaparecer, acrescente um "&", como em:
$ kdialog --passivepopup "Esta janela some sozinha depois de 6 segundos." 6 &

A opo "--yesno" permite fazer perguntas. A resposta armazenada na varivel "$?". Se a resposta for "sim", ela assume o valor 0, caso seja "no", ela armazena o valor 1. Se por acaso a janela for de alguma forma fechada, sem uma resposta (ao mat-la usando o xkill, por exemplo), a varivel tambm fica com o valor 1:
$ kdialog --yesno "Sua conexo muito lenta! A atualizao do sistema vai demorar duas semanas. Quer continuar mesmo assim? :-P"

Como temos apenas duas possibilidades, voc pode usar um if para especificar o que o script deve fazer em cada caso:
resposta=$? if [ "$resposta" = "0" ]; then apt-get upgrade fi if [ "$resposta" = "1" ]; then kdialog --msgbox "Ok, abortando..." fi

Aqui usei dois "if", um para o sim e outro para o no. Voc pode economizar algumas linhas usando um "else" (seno):
resposta=$? if [ "$resposta" = "0" ]; then apt-get upgrade else kdialog --msgbox "Ok, abortando..." fi

O else deve ser usado com um pouco mais de cuidado, pois ele se aplica a qualquer caso onde a resposta for diferente de 0 e no apenas no caso de ela ser 1, como ao usar um segundo if. Em algumas situaes isso pode abrir margem para acidentes, caso seu script seja usado num contexto diferente do que ele foi projetado. Existe uma pequena variao do --yesno que a opo "--warningcontinuecancel", onde a legenda dos botes muda para continuar/cancelar, mas sem alterar o comportamento da janela. Outra variao a opo "--yesnocancel" que mostra uma caixa com trs opes. Respondendo "Sim" ou "No", a varivel "$?" assume o valor "0" ou "1", mas respondendo "Cancelar" ela assume o valor "2".

A opo "Cancelar" pode ser usada para fechar o script, atravs do comando "exit", que encerra a execuo, sem processar o resto dos comandos. Isto pode ser til num script longo, com muitos passos. importante que nestes casos voc encontre uma forma de desfazer as alteraes feitas nas opes anteriores, deixando tudo como estava antes de executar o script. Uma boa medida nestes casos armazenar todas as respostas em variveis e deixar para fazer todas as operaes de uma vez, no final do script. Como agora temos trs possibilidades de resposta, podemos utilizar a funo "case", que permite especificar aes para um nmero indefinido de opes.
kdialog --yesnocancel "Sua conexo muito lenta! A atualizao do sistema vai demorar duas semanas. Quer continuar mesmo assim? :-P" resposta=$? case $resposta in 0) apt-get upgrade ;; 1) kdialog --msgbox "Ok, abortando..." ;; 2) exit 0 ;; *) kdialog -- msgbox "Ops, isto no deveria acontecer... :-)" ;; esac

Depois do "case $resposta in", voc adiciona cada uma das possibilidades de valor para a varivel, seguida de um parnteses. No final de cada linha vai obrigatoriamente um ponto-e-vrgula duplo, que faz o bash entender que deve passar para a prxima opo. Se precisar colocar vrios comandos dentro de uma mesma opo, voc pode separ-los por um nico ponto-e-vrgula como em: 1) apt-get -f install; apt-get update; apt-get upgrade ;; O "*)" funciona da mesma forma que o else, uma opo "default" que executada se nenhuma das outras for vlida. No meu exemplo, a resposta vem de uma janela com apenas trs opes, numeradas de 0) a 2). Ou seja, a menos que algo de muito estranho acontea, a opo default (*) nunca ser usada. Lembre-se de que os comandos "if" e "case" devem ser sempre fechados, respectivamente pelo "fi" e pelo "esac", indicando onde a condicional termina. O kdialog oferece trs opes de dilogos para abrir, salvar arquivos e selecionar

pastas. Vimos uma delas no script gravar-tv, o "--getsavefilename". As outras duas opes so o "--getopenfilename" (para selecionar um arquivo a ser aberto) e o "-getexistingdirectory" (para selecionar um diretrio). As trs opes so semelhantes no sentido de que permitem escolher um arquivo ou diretrio; muda basicamente a forma como o dilogo apresentado na tela. 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=`kdialog --getsavefilename "/home/kurumin/Desktop" \ "*.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 Imagem". Como v, voc s precisa citar as extenses de arquivo permitidas, separadas por espao e incluir a legenda depois do "|". A opo --getexistingdirectory mais simples, voc s precisa especificar um diretrio padro, como em: $ pasta=`kdialog --getexistingdirectory "/home/$USER"`

Como no exemplo anterior, a varivel "$pasta" ser criada armazenando o diretrio escolhido. Existem ainda trs opes diferentes de menus de seleo, criados usando as opes: "--menu", "--checklist" e "--combobox". Na opo "--menu" mostrado um menu com as opes, onde voc s pode escolher uma, como em:
$ a b c d operacao=`kdialog --menu "O que voc gostaria de fazer?" \ "Redimensionar a imagem" \ "Girar a imagem" \ "Deletar a imagem" \ "Converter para outro formato"`

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=`kdialog --combobox "O que deseja fazer?" "girar" "redimensionar" \ "deletar" "converter"`

A terceira opo, --checklist permite que seja escolhida mais de uma opo, ideal para fornecer um menu de alternativas que no conflitam entre si e podem ser escolhidas simultaneamente: $ fazer=`kdialog --checklist "O que gostaria de fazer?" 1 "Instalar o programa" off 2 "Ler o manual" on 3 "Acessar o frum" off`

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

ifconfig > /tmp/ifconfig.txt kdialog --textbox /tmp/ifconfig.txt 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: $ kmix & $ dcop kmix kmix-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 $konqueror
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 $konqueror konqueror-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 dcop dcop dcop dcop $konqueror $konqueror $konqueror $konqueror $konqueror konqueror-mainwindow#1 konqueror-mainwindow#1 konqueror-mainwindow#1 konqueror-mainwindow#1 konqueror-mainwindow#1 maximize minimize hide reload 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 kmail default checkMail

Voc pode ver os comandos DCOP disponveis em cada um dos aplicativos abertos de uma forma mais conveniente usando o "kdcop". Abra-o a partir do terminal, seguido dos aplicativos que deseja controlar. Na janela principal, so exibidos todos os aplicativos abertos que suportam chamadas DCOP, com as chamadas organizadas numa estrutura de rvore. Clicando numa das chamadas, ela executada, maximizando ou minimizando a janela do aplicativo, por exemplo. Isso permite que voc veja rapidamente o que cada uma faz.

Usando os servicemenus do KDE


Mais uma aplicao interessante para os shell scripts so os menus de contexto do KDE, que aparecem ao clicar com o boto direito sobre arquivos e pastas. Uma determinada operao pode aparecer para todos os arquivos, todas as pastas, ou apenas para alguns formatos de arquivos especficos. Ao clicar sobre uma pasta, voc tem a opo de criar um CD de dados no K3B, ao clicar num arquivo .zip voc tem a opo de descompact-lo, e assim por diante. Voc pode adicionar servicemenus para todo tipo de tarefa.

Os scripts dos servicemenus vo na pasta "/usr/share/apps/konqueror/servicemenus":

Todos os arquivos dentro da pasta so scripts, que seguem um padro prprio, comeando pelo nome, que deve sempre terminar com ".desktop". Por exemplo, o servicemenu responsvel pela opo "Acessar arquivos dentro do ISO", que aparece apenas ao clicar sobre um arquivo com a extenso .iso, o arquivo "montariso.desktop", que tem o seguinte contedo:
[Desktop Entry] Actions=montar 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"). %U: Tambm armazena os caminhos completos para os arquivos, a diferena que o "%u" permite selecionar apenas um arquivo (se voc selecionar vrios na janela do Konqueror ao executar o script, ele vai ficar apena com o ltimo), enquanto o "%U" permite selecionar vrios arquivos. O "%U" pode ser usado em servicemenus que permitem manipular vrios arquivos de uma vez, renomeando arquivos ou convertendo de .mp3 para .ogg, por exemplo. %n: Contm apenas o nome do arquivo selecionado, sem o caminho completo. Faz par com a varivel "%N", que permite selecionar vrios arquivos. %d: Esta varivel armazena um diretrio. Pode ser usada em scripts que manipulem de uma 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 kdesu um componente do KDE que permite executar comandos como root. Ao executar um "kdesu konqueror", por exemplo, ele pede a senha de root numa janela e depois executa o comando, abrindo uma janela do Konqueror com permisses de root. Voc pode executar uma seqncia de comandos dentro de uma nica instncia do kdesu (para que ele pea a senha apenas uma vez), colocando os comandos entre aspas, separados por ponto-e-vrgula, como no exemplo. possvel tambm utilizar o sudo, caso ativado. Note que neste segundo script no uso a varivel "%u" (que pode ser usada apenas dentro do script do servicemenu), mas sim a varivel "$1". Quando voc executa um comando qualquer, via linha de comando, a varivel "$1" o primeiro parmetro, colocado depois do comando em si. Para entender melhor, vamos criar um script "teste", com o seguinte contedo:
#!/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 [Desktop Action resize66] Name=Redimensionar para 66% do tamanho original Icon=thumbnail Exec=img-resize 66 %u [Desktop Action resize50] Name=Redimensionar para 50% do tamanho original Icon=thumbnail Exec=img-resize 50 %u [Desktop Action resize33] Name=Redimensionar para 33% do tamanho original Icon=thumbnail Exec=img-resize 33 %u [Desktop Action resize25] Name=Redimensionar para 25% do tamanho original Icon=thumbnail Exec=img-resize 25 %u

Veja que nas primeiras linhas necessrio especificar que ele s se aplica a imagens (ServiceTypes=image/*), e depois especificar todas as aes disponveis, adicionando uma seo para cada uma mais adiante. No existe limite para o nmero de aes que podem ser adicionadas neste caso, s depende da sua pacincia :).

Como no exemplo anterior, este script chama um script externo, o "img-resize", para executar as operaes. Ele um script simples, que usa o "convert" (que vimos ao estudar sobre o Kommander) para fazer as converses:
#!/bin/sh

echo "Convertendo $2 para $1% do tamanho original." echo "Backup da imagem original salvo em: $2.original" cp $2 $2.original convert -quality 90 -sample $1%x$1% $2 $2-out rm -f $2; mv $2-out $2; sleep 1 echo "Ok!"

Os parmetros "$1" e "$2" so recebidos do script do servicemenu. O $1 a percentagem de redimensionamento da imagem, enquanto o $2 o nome do arquivo. Voc pode ainda chamar funes de aplicativos do KDE dentro dos servicemuenus, usando funes do dcop, que estudamos anteriormente. Este o script do servicemenu que permite adicionar arquivos na playlist do Kaffeine:
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 c1) 0000:00:00.1 0000:00:00.2 0000:00:00.3 0000:00:00.4 0000:00:00.5 0000:00:01.0 0000:00:01.1 0000:00:02.0 0000:00:02.1 0000:00:02.2 0000:00:04.0 (rev a1) 0000:00:08.0 0000:00:09.0 0000:00:1e.0 0000:01:07.0 (rev 11) 0000:01:07.1 11) 0000:01:0a.0 0000:01:0a.1 0000:02:00.0 (rev a3) Host bridge: nVidia Corporation nForce2 AGP (different version?) (rev RAM memory: nVidia Corporation nForce2 Memory Controller 0 (rev c1) RAM memory: nVidia Corporation nForce2 Memory Controller 4 (rev c1) RAM memory: nVidia Corporation nForce2 Memory Controller 3 (rev c1) RAM memory: nVidia Corporation nForce2 Memory Controller 2 (rev c1) RAM memory: nVidia Corporation nForce2 Memory Controller 5 (rev c1) ISA bridge: nVidia Corporation nForce2 ISA Bridge (rev a4) SMBus: nVidia Corporation nForce2 SMBus (MCP) (rev a2) USB Controller: nVidia Corporation nForce2 USB Controller (rev a4) USB Controller: nVidia Corporation nForce2 USB Controller (rev a4) USB Controller: nVidia Corporation nForce2 USB Controller (rev a4) Ethernet controller: nVidia Corporation nForce2 Ethernet Controller PCI bridge: nVidia Corporation nForce2 External PCI Bridge (rev a3) IDE interface: nVidia Corporation nForce2 IDE (rev a2) PCI bridge: nVidia Corporation nForce2 AGP (rev c1) Multimedia video controller: Brooktree Corporation Bt878 Video Capture Multimedia controller: Brooktree Corporation Bt878 Audio Capture (rev Multimedia audio controller: Creative Labs SB Live! EMU10k1 (rev 08) Input device controller: Creative Labs SB Live! MIDI/Game Port (rev 08) VGA compatible controller: nVidia Corporation NV17 [GeForce4 MX 440]

$ 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 "intelagp" 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 includa nenhuma 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 "umask=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,umask=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 "fdisk -l", que mostra detalhes sobre as parties, como em: # fdisk -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 /dev/hda2 /dev/hda3 /dev/hda4 * 1 401 3221001 7 HPFS/NTFS 402 1042 5148832+ 83 Linux 1116 2432 10578802+ 5 Extended 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,umask=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.guiadohardware.net/tutoriais/109/), necessrio adicionar uma linha no "/etc/apt/sources.list", com o repositrio do Kanotix que possui os pacotes. Estes pacotes possuem algumas dependncias do Unstable, de forma que o sources.list precisa conter tambm a linha correspondente. Este o trecho do script do cone mgico que escrevi para o Kurumin, que verifica e altera o arquivo caso necessrio:
# 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 "$kano" ]; 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 nonfree/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 [ "$removerkano" = "1" ]; then rm -f /tmp/sources.list sed -e '/deb http:\/\/debian.tu-bs.de\/project\/kanotix\/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 Aurlio: 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 causar uma pequena tragdia. Por exemplo, durante a instalao do Kurumin, exibida a opo de revisar a configurao do arquivo, visualizando diretamente o arquivo de configurao. Caso alguma coisa d errado, o lilo simplesmente no gravado e o sistema no d boot depois de instalado. Uma forma simples de monitorar a sada de erro usar um "2>>" para direcion-la para um arquivo de texto, que pode ser vasculhado pelo grep em busca de mensagens de erro. O programa de instalao do Kurumin usa a funo abaixo para detectar erros de gravao do lilo. Toda funo roda dentro de um while, de forma que repetida at que o problema seja solucionado.
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": # fdisk -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 "kmdr-editor" o editor que permite criar as interfaces, enquanto o "kmdr-executor" executa os arquivos gerados por ele. Ao instalar o pacote do Kommander, voc obtm os dois componentes. Nas distribuies derivadas do Debian voc pode instal-lo com um "apt-get install kommander". Pacotes rpm para vrias distribuies podem ser encontrados no http://www.rpmfind.net/. Em ltimo caso, voc pode baixar uma verso genrica no: http://kde-apps.org/content/show.php?content=12865 A interface do kmdr-editor lembra um pouco a do VB ou Delphi, mas mais simples por conter muito menos funes. Lembre-se de que o objetivo do Kommander desenvolver interfaces para scripts, ele prov relativamente poucas funes por si s. Ao criar um novo projeto, no "Arquivo > Novo", voc tem a opo de criar um dilogo ou um assistente. Um dilogo cria uma interface simples, com botes e abas, do tipo onde voc escolhe entre um conjunto de opes e clica no "Ok" para acionar o script. J o assistente permite criar uma seqncia de telas interligadas, til para criar programas de instalao, por exemplo. Os arquivos gerados no kmdr-editor no so binrios, mas sim arquivos em XML, que so interpretados e executados pelo kmdr-executor. Estes arquivos contm os "fontes" da interface. No possvel criar diretamente um binrio atravs do Kommander, sempre necessrio ter o kmdr-executor para executar os arquivos. Voc pode ver os fontes do Painel de Controle do Kurumin, junto com outros painis que desenvolvi usando o Kommander, dentro da pasta "/etc/Painel" no Kurumin. Vamos a um exemplo rpido. Que tal criar uma interface mais amigvel para aquele script para gravar programas de TV que havamos criado usando o kdialog? Usando o kommander poderamos criar uma interface muito mais elaborada e profissional para ele. Abra o kmdr-editor e crie um dilogo:

Vou criar um script simples, com um conjunto de opes para escolher o canal, tempo de gravao e o arquivo que ser criado, que armazenaro as informaes em um conjunto de variveis e um boto que executa o script principal, montando o comando gigante do mencoder. Para dificultar um pouco, vou acrescentar mais uma opo, que permite escolher a qualidade da gravao. Para as opes de escolha do canal e tempo de gravao, vou usar o widget "Line Edit", que cria uma linha editvel. Vou usar dois, um para cada opo, junto com dois "TextLabel", duas legendas simples de texto. Voc pode escolher o texto padro das opes dando um duplo clique sobre elas. Na janela de propriedades, voc pode configurar opes como o tipo e tamanho das fontes, cores, alinhamento do texto, etc. Estas opes mudam de acordo com o widget usado. Por enquanto no estou me preocupando com o visual, apenas em adicionar as opes. mais fcil se preocupar primeiro com a parte tcnica e deixar para cuidar da parte visual depois que o script estiver funcionando.

O texto dentro das duas caixas precisa ser armazenado em variveis para que possamos utiliz-los mais tarde dentro do script principal. Para que isso acontea, clique com o boto direito sobre cada uma das caixas e acesse a opo "Edit Text Associations". No campo, digite "@widgetText".

Isso faz com que o kommander crie uma varivel contendo o texto digitado dentro da caixa. Esta varivel tem o mesmo nome do widget, nome este que voc escolhe nas propriedades. Para facilitar a minha vida depois, vou nomear as duas caixas como "canal" e tempo", indicando exatamente o que ambas fazem:

preciso incluir tambm um widget para salvar o arquivo. O Kommander oferece uma funo bem similar ao "--getsavefilename" do kdialog, o widget "File Selector". Adicione um ao programa, como fizemos com as duas caixas de texto. O File Selector pode ser usado para abrir um arquivo, escolher uma pasta ou salvar um arquivo. Precisamos indicar a funo do nosso nas propriedades. Para isso, configure a opo "selectionType" como "Save" (indicando que a janela servir para salvar um arquivo). Veja que aproveitei tambm para configurar a opo "selectionFilter" como "*.avi *.mpg *.wmf", que faz com que a janela do gerenciador de arquivos mostre apenas arquivos de vdeo, com as trs extenses especificadas e salve os arquivos com a extenso .avi, mesmo que o usurio no especifique a extenso. A opo "selectionCaption" permite escolher o ttulo da janela para salvar.

No se esquea de configurar a opo "Edit Text Associations" do widget como "@widgetTex" como fizemos com as duas caixas de texto e escolher um nome nas propriedades. No meu caso deixei o nome como "arquivo". Voc pode ver um preview da interface que est editando, clicando no "Visualizao > Preview Form". Isto perfeito para ir testando cada opo conforme for adicionando, sem deixar que os erros se acumulem.

Falta incluir a opo para escolher a qualidade de gravao, neste caso dois parmetros que podem ser especificados na linha de comando do mencoder. Vou criar dois botes separados, um para escolher a resoluo do vdeo (640x480 ou 320x240) e outro para escolher o bitrate, que determina a qualidade e tamanho final do arquivo. No caso da resoluo, vou oferecer apenas duas opes, por isso uso o widget "RadioButton", criando dois botes. Estes botes precisam ser exclusivos, ou seja, apenas um deles pode ser selecionado de cada vez. Para isso, vou precisar coloc-los dentro de um "ButtonGroup", outro widget que uma espcie de moldura, que permite agrupar vrios botes de forma que eles se comportem da forma desejada. Isto vai envolver um nmero maior de passos. Primeiro crie o ButtonGroup do tamanho desejado e coloque dois botes dentro dele. Nas propriedades, escolha nomes para os trs. No meu caso, coloquei "resolucao" (para o ButtonGroup), "resolucao1" e "resolucao2" para os botes. Nas propriedades do ButtonGroup, configure a opo "RadioButtonExclusive" como "Verdadeiro". Isso faz com que apenas um dos botes dentro dele possa ser marcado de cada vez. Dentro das propriedades do primeiro boto, deixe a opo "Checked" como "Verdadeiro". Isso faz com que ele fique marcado por padro. Ao desenvolver uma interface, importante fazer com que todas as opes sempre tenham algum valor padro. Isso diminui a possibilidade de erros por parte do usurio, j que o script vai funcionar mesmo que ele no configure todas as opes.

Falta agora configurar o "Edit Text Associations" dos dois botes, para armazenar o contedo da varivel que ser criada caso cada um deles seja pressionado. Desta vez no vou usar o "@widgetText" pois os botes no contm texto algum. Vou indicar manualmente um valor padro para cada um dos dois botes. Um deles conter o valor "width=640:height=480" e o outro o valor "width=320:height=240", que so as opes que podero ser includas na linha de comando do mencoder que ser criada ao executar o programa. Lembre-se de que apenas um dos dois botes pode ser marcado de cada vez, por isso apenas uma das duas opes ser usada.

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 de vdeo. Um bitrate de 1500 kbits gera arquivos com cerca de 11 MB por minuto de vdeo, quase 700 MB por hora. O tamanho do arquivo aumenta ou diminui proporcionalmente de acordo com o bitrate. Um bitrate muito alto resultaria num arquivo gigantesco e um muito baixo resultaria num arquivo tosco, com uma qualidade muito ruim. Por isso usamos o SpinboxInt para determinar uma margem de valores razoveis. Voc poderia adicionar mais um SpinBoxInt para oferecer tambm a opo de alterar o bitrate do som, mas no meu caso no vou incluir isto, pois o udio comprimido em MP3 representa uma percentagem pequena do tamanho do arquivo. Depois dessa trabalheira toda, temos as variveis: @canal, @tempo, @arquivo, @resolucao e @bitrate, que usaremos para gerar a linha de comando do mencoder. Precisamos agora de um gatilho, um boto que executa o comando final. Vamos usar um simples "ExecButton". Dentro do "Edit Text Associations" (do boto), vo as linhas:
verificador="@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:force audio:forcechan=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: $ kmdr-executor gravar-tv.kmdr A segunda parte do trabalho envolve dar uma melhorada no aspecto visual. Voc pode acrescentar imagens e cones usando o widget "PixmapLabel".

Os cones do sistema vo por padro dentro da pasta "/usr/share/icons", e so um bom ponto de partida. Voc pode usar tambm imagens e cones personalizados, salvos em .png. Todas as imagens usadas so salvas como parte do arquivo, como se fosse um documento do OpenOffice. Voc no precisa se preocupar em distribuir as imagens junto com o programa, a nica dependncia o kmdr-executor, junto com os comandos usados dentro do script. Uma dica que o Kommander sempre degrada a qualidade das imagens com mais de 256 cores. Para melhor qualidade, prefira usar imagens com 256 cores, com paleta indexada (que podem ser tratadas usando o Gimp). A maioria dos widgets, como as etiquetas de texto, caixas, etc., possuem vrias opes de cores e fontes dentro das propriedades, que permitem fazer um bom trabalho. Esta a verso inicial do script, que desenvolvi para uso no Kurumin:

Outro recurso interessante do Kommander e vem sendo melhorado rapidamente nas novas verses so as conexes. Elas permitem adicionar elementos dinmicos na interface, um textLabel cujo contedo muda quando voc clica num boto ou mostra informaes sobre um arquivo escolhido num File Selector e assim por diante. Para usar este recurso, certifique-se de ter instalada uma verso recente do Kommander, de preferncia da 1.2 em diante, pois antes disso o suporte ainda era incipiente e mudanas eram feitas a cada nova verso.

Para seguir este exemplo, voc precisa estar usando pelo menos o Kommander 1.0 final. Nas verses antigas o sistema de conexes ainda no estava terminado, muitas opes ainda no existiam. Vamos usar algumas conexes para criar um editor de imagens primitivo. Comece criando um novo projeto e desenhe uma interface contendo um FileSelector, um textLabel, um PixmapLabel e quatro botes que usaremos para adicionar algumas funes de edio. Por enquanto no inclu cdigo algum, apenas desenhei os widgets:

O objetivo fazer com que o arquivo de imagem escolhido no FileSelector seja exibido no PixmapLabel, ao mesmo tempo em que a localizao e nomes completos do arquivo so mostrados no textLabel. As duas coisas atualizadas automaticamente, sem que seja necessrio pressionar nenhum boto. Os botes vo conter mais algumas funes estticas para deletar a imagem, girar e limpar os dois campos (novamente usando conexes). Vamos comear fazendo com que a imagem seja exibida no PixmapLabel. Procure a "Ferramenta de conexo" na interface principal. Clique primeiro sobre o FileSelector e arraste at o PixmapLabel. Isso cria uma conexo entre eles, indicada pelos dois quadrados rosa que aparecem.

Na janela de propriedades que ser aberta, voc ver duas janelas, uma com os sinais disponveis no FileSelector e do outro lado as propriedades do PixmapLabel que podem ser alteradas quando o sinal selecionado emitido. Marque a opo "widgetTextChanged(const QString)" do lado do FileSelector e a opo "setWidgetText(const QString)" do lado do PixmapLabel. Clique no "Conectar" para efetivar a conexo:

O que fizemos aqui foi especificar que quando o texto dentro do FileSelector for alterado (ou seja, quando for escolhido algum arquivo) o contedo do PixmapLabel muda, exibindo

o contedo do arquivo. Se fosse uma caixa de texto, seria mostrado o contedo do arquivo na forma de texto; mas, como estamos usando uma caixa de imagem, ser mostrado um preview da imagem. Crie agora uma nova conexo, ligando o FileSelector e o textLabel. Na janela de propriedades, marque a opo "widgetTextChanged(const QString)" para o FileSelector (o mesmo do passo anterior) e a opo "Populate()" para o textLabel.

O textLabel est originalmente vazio, sem contedo algum. A funo Populate vai "popullo" 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 passa a funcionar perfeitamente, pois o Kommander executa o script dentro de um shell separado e apenas "popula" o campo de texto com o resultado do comando. Ou seja, quem executa os comandos neste caso o bash, no o Kommander. O script (salvo como /etc/Painel/servidor-nfs.sh) fica:
#!/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.guiadohardware.net/kurumin/painel/kurumin-synergy.kmdr.

Este script um pouco longo, ento vamos por partes. Na configurao do Synergy preciso incluir o nome do servidor. No coloquei isso como mais um campo na janela principal, pois esta uma informao fcil de descobrir atravs do comando "hostname". Na primeira linha do script, crio uma varivel "server" contendo o resultado do comando, ou seja, o nome da mquina, como em "semprao". As linhas seguintes fecham o Synergy caso aberto (ele no pode ser aberto duas vezes), deleta o arquivo de configurao, caso exista (j que o script cria um novo) e, s para garantir, cria um novo arquivo vazio usando o comando touch.
server=`hostname` 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. current CPU frequency is 1.40 GHz (asserted by call to hardware).

Pela sada do comando sei que o processador (um Celeron M, por isso o baixo clock) suporta vrias freqncias entre 175 MHz e 1.4 GHz e que ele est atualmente operando na freqncia mxima. Para ajustar a freqncia do processador, voc usa o comando "cpufreq-set -f", seguido pela freqncia desejada (em kHz), como em: # cpufreq-set -f 1050 Existe ainda a opo "-g ondemand", onde a freqncia ajustada dinamicamente, de acordo com a utilizao do processador. Vamos a um exemplo de script que poderia apresentar estas opes de uma forma mais agradvel. Aqui estou usando dois ComboBox (um deles est escondido atrs do texto, vamos ver o porqu em seguida), um TextLabel e dois botes. O restante so caixas de texto explicativas e outros elementos cosmticos que voc poderia usar ou no, de acordo com o pblico ao qual o script se destina:

O TextLabel exibe a freqncia atual, detectada no momento em que o script aberto, enquanto o primeiro ComboBox mostra uma lista das freqncias suportadas. Ambas as coisas so extradas da sada do comando "cpufreq-info" usando o grep e o cut. Tudo comea com um "script auxiliar", que executado primeiro. Ele carrega os mdulos que ativam o cpufreq, filtra a sada do cpufreq-info e salva as informaes que vamos precisar exibir dentro do script em dois arquivos de texto e no final carrega o script principal. Note que por causa da necessidade de carregar mdulos, preciso que o script seja executado com permisso de root, atravs do kdesu ou sudo:
modprobe modprobe modprobe modprobe modprobe modprobe p4_clockmod freq_table speed step_lib cpufreq_powersave cpufreq_ondemand 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? Isto criar 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 "kderoot") 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: BUS="usb": Define que a regra se aplica apenas a dispositivos USB. Voc pode usar tambm BUS="scsi", BUS="ide" e BUS="pci" para criar regras para outros

tipos de dispositivos. Usando o BUS="pci", por exemplo, voc pode criar devices personalizados para sua placa de som, rede ou modem PCI. ACTION=="add": A regra se aplica quando um dispositivo for conectado. Existe tambm o parmetro "remove", que se aplica quando o dispositivo desconectado. Sem especificar o ACTION, a regra executada apenas quando o dispositivo conectado, ou assim que o udev o detecta durante o boot, mas nada feito quando ele desconectado. KERNEL="sd??": Aqui estamos sendo mais especficos. A regra se aplica apenas a dispositivos cujo device comece com "sd", seguido por duas letras/nmeros, como "/dev/sda1" ou "/dev/sdb2". Como especificamos que a regra s se aplica a dispositivos USB, ela no vai ser disparada caso seja conectado um HD serial ATA ou SCSI, por exemplo. NAME="%k": O parmetro "NAME" responsvel por criar o device dentro da pasta "/dev", atravs do qual o dispositivo ser acessado. O parmetro "%k" corresponde ao nome dado pelo Kernel, e pode ser usado quando voc no quiser mudar o nome do dispositivo. Se a partio no pendrive vista como "sda1", o dispositivo ser simplesmente "/dev/sda1", como de costume. Se, por outro lado, voc quiser que seu pendrive seja visto como "/dev/pendrive", ou qualquer outro nome especial, indique isso na regra, como em: NAME="pendrive". Se quiser que o device seja "/dev/block/pendrive", use: NAME="block/pendrive". RUN+=: Aqui especificamos uma ao para a regra. Neste caso estou usando o parmetro "RUN+=", que executa um script externo, que pode se encarregar de montar o dispositivo, adicionar um cone no desktop ou outra ao qualquer. Voc pode tambm usar o parmetro "SYMLINK=" para criar "apelidos" para os dispositivos, fazendo com que alm do device padro, ele responda tambm por outro definido por voc. Voc pode usar, por exemplo os parmetros NAME="%k" SYMLINK="pendrive" para fazer com que, alm de ficar acessvel pelo dispositivo "/dev/sda1", seu pendrive possa ser acessado pelo "/dev/pendrive". Esta a regra irm da primeira, que executa outro script quando o dispositivo desconectado. Ela pode ser usada para reverter os passos executados pelo primeiro script, como, por exemplo, remover o cone no desktop criado pelo primeiro. A regra para remover deve vir sempre antes da regra para adicionar:
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 viceversa, 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 "montarpendrive" (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", "bluez-firmware" e "kdebluetooth" voc passa a ter um suporte bastante completo a dispositivos bluetooth de uma maneira geral. Mas, para que tudo funcione, necessrio que o servio "bluez-utils" esteja ativado. A regra abaixo faz com que o servio seja automaticamente ativado quando algum dispositivo bluetooth conectado:
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/block/sda/ Se souber qual o device usado por ele, voc pode fazer a busca por ele, como em "udevinfo -q path -n /dev/sda". Este comando devolve o caminho para ele dentro do diretrio "/sys". O udevinfo retorna sempre uma grande quantidade de informaes. Todas elas esto disponveis dentro do diretrio /sys, o udevinfo apenas as rene num nico lugar. No meu caso, algumas linhas interessantes so:
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 SYMLINK="joypad" Precision USB", NAME="%k",

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 monteas 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: # mkdir /mnt/hda6/knxmaster # mkdir /mnt/hda6/knxsource # mkdir /mnt/hda6/knxsource/KNOPPIX A pasta "knxmaster" usada para armazenar uma cpia simples dos arquivos do CD, usada para gerar o ISO final. A pasta "knxsource/KNOPPIX" por sua vez armazena a cpia descompactada do sistema, onde fazemos as modificaes. Comece fazendo a cpia completa dos arquivos do CD para dentro da pasta "knxmaster/". Ao dar boot pelo CD, os arquivos ficam disponveis dentro da pasta "/cdrom": # cp -a /cdrom/* /mnt/hda6/knxmaster/ 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/knxsource/KNOPPIX/

Esta etapa demora um pouco, pois alm de ler os arquivos no CD, o processador tem o trabalho de descompactar tudo, como se estivesse instalando o sistema no HD. Terminada a cpia, voc ver a rvore de diretrios do sistema dentro da pasta:

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/knxsource/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 aptget, 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/skel kurumin chown -R kurumin.kurumin kurumin/ 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 kurumin cd /home/kurumin/ export DISPLAY=localhost:1 startkde

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 kurumin/* /etc/skel/ # chown -R root.root /etc/skel # rm -rf /home/kurumin

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 que voc 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 : # mkisofs -R -V "Meu_CD" -hide-rr-moved -pad /mnt/hda6/knxsource/KNOPPIX \ | /usr/bin/create_compressed_fs - 65536 > /mnt/hda6/knxmaster/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: mkisofs: Este o programa usado para gerar imagens ISO no Linux. Ele utilizado originalmente por programas de gravao de CD. Graas aos parmetros extras, ele "adaptado" para gerar a imagem compactada do sistema. -R: Ativa as extenses Rock-Ridge, que adicionam suporte a nomes longos no Linux. -V "Kurumin": O nome do volume. Voc pode substituir o "Kurumin" por qualquer outro nome. -hide-rr-moved: Esconde o diretrio RR_MOVED caso encontrado. Apenas uma precauo. -pad: Para prevenir problemas de leitura, o tamanho total da imagem deve ser sempre um mltiplo de 32 KB. Este parmetro verifica isso e adiciona alguns bits zero no final da imagem para completar os ltimos 32 KB, caso necessrio. /mnt/hda6/knxsource/KNOPPIX: Este o diretrio fonte, onde est a imagem descompactada do sistema. No se esquea de substituir o "hda6" pela partio correta. | /usr/bin/create_compressed_fs - 65536: Este o grande truque. O pipe direciona toda a sada do comando para o programa "create_compressed_fs" (includo no sistema), que se encarrega de compactar os dados. Note que por causa do uso deste comando, voc s poder gerar a imagem compactada a partir do Kurumin ou outra distribuio baseada no Knoppix, de preferncia uma instalao do prprio sistema que est remasterizando. Voc

no conseguir fazer a partir do Mandriva (por exemplo), pois ele no inclui o executvel citado aqui. > /mnt/hda6/knxmaster/KNOPPIX/KNOPPIX: O redirecionamento (>) faz com que o fluxo de dados gerado pelos comandos anteriores seja salvo no arquivo que especificamos aqui, gerando a imagem compactada do sistema, que ser usada no novo arquivo .iso. Depois de gerar a imagem voc notar que o seu micro ficar um pouco lento, pois o processo consome toda a memria RAM disponvel. Isso normal, mova um pouco o mouse e clique nas janelas que ele logo volta ao normal. Com a nova imagem compactada gerada, falta agora apenas fechar o .iso do CD, usando os arquivos da pasta knxmaster. Este comando usado nas verses recentes, que utilizam o Kernel 2.6: # cd /mnt/hda6/knxmaster # mkisofs -pad -l -r -J -v -V "Kurumin" -no-emul-boot -bootload-size 4 \ -boot-info-table -b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \ -hide-rr-moved -o /mnt/hda6/kurumin.iso /mnt/hda6/knxmaster 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: # mkisofs -pad -l -r -J -v -V "Meu_CD" -b KNOPPIX/boot.img -c \ KNOPPIX/boot.cat -hide-rr-moved -o /mnt/hda6/kurumin.iso /mnt/hda6/knxmaster Ao remasterizar o Kanotix, ou outra distribuio live-CD que utilize o grub como gerenciador de boot, o comando fica:

# mkisofs -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/kanotix.iso /mnt/hda6/knxmaster 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/knxsource/ 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/skel". O contedo desta pasta copiado para a pasta "/ramdisk/home/kurumin" durante o boot e (ao rodar o sistema a partir do CD) todas as alteraes so perdidas quando o micro desligado. Para alterar as configuraes default preciso ir direto ao ponto, editando diretamente os arquivos da pasta "/etc/skel" dentro do chroot. Navegando dentro dela voc encontrar pastas com as preferncias do KDE e vrios outros programas. No se esquea de marcar a opo "marcar arquivos ocultos" no Konqueror.

recomendvel dar uma garimpada nestes arquivos de vez em quando, pois voc sempre vai encontrar algumas opes de configurao que no esto disponveis no Kcontrol. Uma dica, caso voc queira estudar mais sobre a edio manual dos arquivos usar a funo "Procurar por arquivos modificados > Nos ltimos xx minutos" dentro do kfind para localizar os arquivos modificados depois de cada alterao feita pelo Kcontrol. Embora no parea primeira vista, os arquivos de configurao do KDE so bastante organizados e legveis. O menu iniciar do KDE gerado a partir da combinao dos links do diretrio "/usr/share/applications/", onde a maior parte dos pacotes instalados coloca seus cones e do diretrio "/usr/share/applnk", onde voc pode colocar cones personalizados, que ficam disponveis para todos os usurios. Os cones do KDE so arquivos de texto normais, salvos com a extenso .desktop. Abrindo-os num editor de texto, voc ver uma estrutura como esta:

O mais importante aqui so as linhas "exec", que contm o comando que executado ao clicar sobre o cone, a linha "Icon" que contm o cone usado (os arquivos disponveis esto dentro da pasta /usr/share/icons) e as linhas "Name" e "GenericName" que contm o nome e descrio, da forma como so exibidos no menu iniciar. Alm das pastas "/usr/share/applications" e "/usr/share/applink", que formam o iniciar "principal" do sistema, existe um iniciar "particular" para cada usurio, que vai dentro da pasta ".kde/share/applnk/", dentro do home. O iniciar montado a partir da juno do contedo das trs pastas. Quando existe algum "conflito", como um cone configurado de forma diferente nas duas pastas, vale o que est na pasta do usurio. Dentro das pastas voc encontrar um arquivo .directory que contm o nome e descrio da pasta (com suporte a internacionalizao) e o cone usado ao exib-la no iniciar:

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 ".kde/share/apps", tambm dentro do home.

Todas estas pastas que comeam com um ponto so vistas pelo sistema como pastas ocultas: para v-las, voc precisa marcar a opo "mostrar arquivos ocultos" no Konqueror. Esta edio manual dos arquivos interessante para conhecer melhor o sistema e ter mais controle sobre o que est acontecendo. Mas, por outro lado, ela trabalhosa e demora at que voc consiga dominar um nmero grande de opes. A forma mais rpida de personalizar estas configuraes abrir o chroot, logar-se como o usurio desejado copiar as pastas do /etc/skel, rodar o KDE e alterar as configuraes desejadas dentro da janela do Xnest e depois salvar as alteraes, como vimos anteriormente. A edio manual pode ser usada para corrigir pequenos detalhes e eventuais problemas.

Scripts de inicializao
Depois de instalado, o Kurumin passa a se comportar de forma semelhante a uma instalao do Debian, com os servios iniciados atravs de links ou scripts nas pastas "/etc/rcS.d" e "/etc/rc5.d". Mas, ao rodar a partir do CD, um nico script cuida de toda a configurao do sistema, o "/ etc/init.d/knoppix-autoconfig". Ele roda o "/usr/bin/hwsetup" (a ferramenta de deteco de hardware), executa o "/usr/sbin/mkxf86config" (que faz a configurao do vdeo) e verifica os parmetros passados durante o boot (como o "noacpi", "bootfrom=", "noscsi", "xserver=vesa" etc.). No final do script "/etc/init.d/knoppix-autoconfig", vai o comando "/etc/init.d/kdm start" que inicia o carregamento do modo grfico. Neste ponto executado o script "/etc/X11/Xsession.d/45xsession", que verifica os parmetros de boot relacionados com o ambiente grfico (desktop=fluxbox ou desktop=gnome, por exemplo), copia o diretrio "/etc/skel" para o "/home/kurumin", criando o diretrio home do usurio padro do sistema e, por ltimo, carrega o KDE ou outro ambiente grfico escolhido. No Knoppix original e em outras distribuies derivadas dele, o carregamento do modo grfico no disparado pela abertura do KDM, mas sim diretamente atravs de uma entrada no arquivo "/etc/inittab". Na prtica isso no faz muita diferena, pois o script "/etc/ X11/Xsession.d/45xsession" executado da mesma forma. A instalao do Kurumin feita pelo script "/usr/local/bin/kurumin-install", que copia os arquivos do sistema para a partio, define senhas e faz outras alteraes necessrias. Ao personalizar o sistema, importante conhecer a funo de cada um destes scripts, pois eles permitem modificar o comportamento do sistema durante o boot e faz-lo executar funes adicionais. Vamos a alguns exemplos: Quando voc precisar fazer alguma alterao no processo inicial de boot, alterar o comportamento de uma das opes de boot ou criar uma nova (como o "kurumin union=" que adicionei no Kurumin 5.1), alterar a configurao padro do teclado ou linguagem, ou

executar algum comando em especial durante o boot, altere o "/etc/init.d/knoppixautoconfig". 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-kurumin", 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/mkxf86config". Ele detecta a placa de vdeo, monitor e outras informaes necessrias e gera o arquivo de configurao do vdeo. Quando ele no conhece a identificao de uma determinada placa de vdeo, normal que ele use o driver "vesa" que, como vimos, um driver genrico, que possui um baixo desempenho. Voc pode incluir funes no final do script para detectar a placa usando a sada do lspci e substituir a linha com o driver usando o sed. Este um exemplo que usei para detectar as placas Intel Extreme, usadas no HP NX6110 e outros notebooks. Colocado no final do

arquivo, ele troca o driver de "vesa" para "i810" quando a placa detectada. Se o driver j estiver correto, ele no faz nada:
# 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 "kde-i18n", como em "kde-i18n-ptbr" ou "kde-i18n-es" (espanhol), que podem ser instalados via apt-get. Os pacotes no conflitam entre si, de forma que voc pode manter

vrios deles instalados e definir qual ser a lngua padro dentro do Kcontrol, junto com a configurao do teclado e outros detalhes. O suporte a ingls norte-americano vem instalado por padro e usado quando configurado, ou quando nenhum outro pacote de internacionalizao estiver instalado. Os demais programas, so configurados atravs do pacote "locales". Neste caso, cada programa inclui diretamente as tradues disponveis e voc determina qual ser utilizada por padro e quais outras ficaro instaladas. As demais podem ser removidas automaticamente usando o comando "localepurge", o que economiza um bocado de espao. Para alterar a configurao do locales, use o comando: # dpkg-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/knxmaster/boot/isolinux/ gunzip minirt26.gz mkdir tmp/ mount -o loop minirt26.gz tmp/ kedit 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 "knxsource/KNOPPIX/etc/init.d/knoppix-autoconfig", dentro da partio de trabalho. Como vimos, este o script responsvel por toda a etapa inicial do boot, onde o hardware detectado e o KDE carregado. 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 da pasta "knxmaster/" fica acessvel atravs da pasta "/cdrom", mantendo a mesma estrutura de diretrios. O "shutdown -h now" abaixo da primeira linha s pra garantir que o micro vai mesmo reiniciar depois de terminar a gravao. Na verdade ele nem chega a ser usado, pois o prprio comando do Partimage se encarrega de reiniciar no final do processo. Voc pode adicionar as linhas prximo do final do arquivo, logo abaixo das linhas abaixo, que marcam o final da parte de deteco e configurao inicial do sistema:

echo "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 kdelibs-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 libgtk2*

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 "dpkg-deb -b" para gerar o pacote. Basta fornecer o diretrio onde esto os arquivos do pacote e o nome do arquivo que ser criado, como em: # dpkg-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: # dpkg -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: # dpkg -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": # dpkg -b firefox/ mozilla-firefox.deb

Você também pode gostar