SMB HOWTO David Wood, dwood@plugged.net.au v1.1.1, 25 June 1999 Este é SMB HOWTO. Este documento descreve como usar o protocolo Server Message Block (SMB), também conhecido como protocolo de Sessão de Mensagens em Blocos, NetBIOS ou LanManager, com Linux. ______________________________________________________________________ Índice geral 1. Introdução 2. Informação adicional 3. Instalação 4. Executando os Daemons 5. Configuração Geral (/etc/smb.conf) 6. Compartilhando um disco Linux com máquinas Windows 7. Compartilhando um drive Windows com máquinas Linux 8. Compartilhando uma impressora Linux com máquinas Windows 9. Compartilhando um impressora Windows com máquinas Linux 10. Tirando cópias de segurança de máquinas Windows em Linux 11. Copyright 12. Agradecimentos ______________________________________________________________________ 11.. IInnttrroodduuççããoo Este é o SMB HOWTO. Este documento descreve como usar o protocolo Server Message Block (SMB) [Servidor de Bloco de Mensagens], NetBIOS ou LanManager. Ainda que este documento seja Linux-cêntrico, o Samba roda na maioria dos sistemas Unix e compatíveis. Este documento é mantido por David Wood (dwood@plugged.net.au). Adições, modificações ou correções podem ser enviadas para inclusão na próxima versão. Mais documentação sobre o Samba está disponível no Samba Web site, localizado em http://www.samba.org/ . Você também pode tentar o newsgroup comp.protocols.smb. O protocolo SMB é usado pelo Microsoft Windows 3.11, NT and 95/98 para compartilhar discos e impressoras. Usando o conjunto de ferramentas do Samba de Andrew Tridgell (Andrew.Tridgell@anu.edu.au), máquinas UNIX (incluindo Linux) podem compartilhar discos e improssoras com máquinas Windows. As ferramentas smbfs de Paal-Kr. Engstad (engstad@intermetrics.com) e Volker Lendecke (lendecke@namu01.gwdg.de) habilitam máquinas Unix a montar compartilhamentos SMB de hospedeiros Windows ou SAMBA. Há quatro coisas que alguém pode fazer com o Samba: 1. Compartilhar um drive Linux com máquinas Windows. 2. Compartilhar um drive Windows com máquinas Linux. 3. Compartilhar impressoras Linux com máquinas Windows. 4. Compartilhar impressoras Windows com máquinas Linux. Todas estas são cobertas neste documento. Declaração: Os procedimentos e scripts ou funcionam para o autor ou tiveram seu funcionamento reportado pelas pessoas que os proveram. Configurações diferentes podem não funcionar com as informações aqui dadas. Se você encontrar um situação como esta, você pode enviar um e- mail para o autor com sugestões de melhorias a este documento, mas o autor não garante nada. O que você esperava ? O autor é, além de tudo, um consultor... Por favor, note que para que máquinas Windows 3.x acessem compartilhamentos SMB, elas devem ter um pilha TCP/IP e as DLLs do Win32s. Ambos estão disponíveis no site Web da Microsoft (http://www.microsoft.com ). 22.. IInnffoorrmmaaççããoo aaddiicciioonnaall Este HOWTO tenta explicar como configurar os serviços básicos de impressão e arquivo do SMB numa máquina Linux. O Samba é um pacote muito complexo e completo. Não há razão para tentar duplicar toda a documentação para Samba aqui. Para mais informações, favor veja os seguintes documentos: · The Samba documentation, disponível como parte da distribuição Samba. A distribuição está disponível em: ftp://ftp.samba.org/ · The Linux Printing HOWTO. · The Print2Win Mini-HOWTO. · Protocol Standard For A NetBIOS Service On A TCP/UDP Transport. RRFFCC 11000011 Concepts and Methods. RRFFCC 11000022 Detailed Specifications. 33.. IInnssttaallaaççããoo Primeiro, para usar o Samba, suas máquinas devem estar num único segmento de rede ethernet usando o protocolo TCP/IP. O Samba não funcionará usando outros protocolos de rede. Isto é geralmente fácil já que o Linux e o Windows 95/98/NT vem com suporte TCP/IP de fábrica. No entanto, se você estiver usando máquinas Windows 3.x, o suporte a TCP/IP deve ser adicionado. Serviços SMB não podem ser utilizados através de roteadores. Se você quer alguma coisa como isto, você terá que configurar um túnel IP, o que está além do escopo deste documento. Para pegar a última versão do Samba, vá nesta URL e escolha o site espelho mais próximo de você: ftp://ftp.samba.org/ . Contudo, se você tiver instalado a distribuição RedHat do Linux, você terá opção de instalá-lo como um pacote. Algumas outras distribuições também incluem os binários do Samba. Os seguintes daemons são exigidos pelo pacote Samba. Eles são instalados tipicamente em /usr/sbin e executam tanto no boot através de scripts de partida do sistema quanto via inetd. ______________________________________________________________________ smbd (O daemon SMB) nmbd (Provê serviço de nomes NetBIOS aos clientes) ______________________________________________________________________ Favor notar que o serviço de nomes provido pelo nmbd é diferente daquele provido pelo serviço de nomes de domínio (DNS). O serviço de nomes do NetBIOS é um serviço de nomes "estilo Windows" usado para SMB. Em outras palavras, ter serviço de nomes de domínio DNS não diz nada sobre a habilidade do Samba de resolver nomes de hosts. Tipicamente, os seguintes binários do Samba são instalados em /usr/bin ou /usr/local/samba/bin, no entanto a localizaçõa é opcional. ______________________________________________________________________ smbclient (Um cliente SMB para máquinas UNIX) smbprint (Um script para imprimir num impressora de um host SMB) smbprint.sysv (Como acima, mas para máquinas SVR4 UNIX) smbstatus (Lista as conexões SMB correntes para o host local) smbrun (Um script 'glue' para facilitar a execução de aplicativos em hosts SMB) ______________________________________________________________________ Os binários para o suporte do sistema de arquivos smbfs são discutidos depois neste documento. Adicionalmente, um script chamado 'print' é incluido com este Como Fazer, que serve como um front-end para o script smbprint. O pacote Samba é simples de instalar. Simplesmente pegue os fontes do local mencionado anteriormente, e leia o arquivo README da distribuição. Há também um arquivo chamado docs/INSTALL.txt na distribuição que provê um conjunto de instruções passo-a-passo. Sequindo a instalação, coloque os daemons em /usr/sbin e os binários em /usr/bin. Instale as páginas man em /usr/local/man. Quando você fez (make) o pacote Samba, você provavelmente especificou no Makefile a localização do arquivo de configuração, smb.conf. Esta é geralmente em /etc, mas você pode colocá-la em qualquer lugar que você queira. Para estas instruções, nós assumiremos que você especificou a localização do arquivo de configuração como /etc/smb.conf, a localização do arquivo de log como log file = /var/log/samba-log.%m e o diretório de lock como lock directory = /var/lock/samba. Instale o arquivo de configuração smb.conf. Vá ao diretório onde o Samba foi feito (built). Procure no subdiretório examples/simple e leia o arquivo README. Copie o arquivo smb.conf encontrado naquele diretório para /etc. SEJA CUIDADOSO! Se você tem uma distribuição Linux que já tem o Samba instalado, você pode já possuir um arquivo de configuração SAMBA em /etc. Você deve provavelmente começar com este. Se você não quer ter seu arquivo de configuração em /etc, coloque-o onde você quiser, então coloque um symlink in /etc: ______________________________________________________________________ ln -s /caminho/para/o/smb.conf /etc/smb.conf ______________________________________________________________________ 44.. EExxeeccuuttaannddoo ooss DDaaeemmoonnss Os dois daemons SMB são /usr/sbin/smbd e /usr/sbin/nmbd. Você pode rodar os daemons do Samba do inetd ou como processos independentes(stand-alone). O Samba irá responder ligeiramente mais rápido como um daemon stand-alone do que rodando pelo inetd. Em ambos os casos, você deve verificar se existem linhas no arquivo /etc/services como estas: ______________________________________________________________________ netbios-ns 137/tcp nbns netbios-ns 137/udp nbns netbios-dgm 138/tcp nbdgm netbios-dgm 138/udp nbdgm netbios-ssn 139/tcp nbssn ______________________________________________________________________ Certifique-se de que todas estão sem as marcas de comentários. Dependendo da sua distribuição, você pode até mesmo ter que adicioná-las. O Samba não será capaz de fazer a ligação (bind) às portas apropriadas enquanto o arquivo /etc/service não contenha estas entradas. Para rodar os daemons do inetd, coloque as seguintes linhas no arquivo de configuração do inetd, /etc/inetd.conf: ______________________________________________________________________ # SAMBA NetBIOS services (for PC file and print sharing) netbios-ssn stream tcp nowait root /usr/sbin/smbd smbd netbios-ns dgram udp wait root /usr/sbin/nmbd nmbd ______________________________________________________________________ Então, reinicie o daemon do inetd com o segunite comando: ______________________________________________________________________ kill -HUP `cat /var/run/inetd.pid` ______________________________________________________________________ Para executar os daemons com os scripts de inicialização do sistema, coloque o seguinte script num arquivo chamado /etc/rc.d/init.d/smb (para uma distribuição RedHat) e faça um link simbólico para os arquivos especificados nos comentários abaixo: ______________________________________________________________________ #!/bin/sh # # /etc/rc.d/init.d/smb - starts and stops SMB services. # # Os arquivos abaixo devem ser links simbólicos para este arquivo: # symlinks: /etc/rc.d/rc1.d/K35smb (Mata os serviços SMB no shutdown) # /etc/rc.d/rc3.d/S91smb (Inicia os serviços SMB no modo multiusuário) # /etc/rc.d/rc6.d/K35smb (Mata os serviços SMB no reboot) # # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 0 # See how we were called. case "$1" in start) echo -n "Starting SMB services: " daemon smbd -D daemon nmbd -D echo touch /var/lock/subsys/smb ;; stop) echo -n "Shutting down SMB services: " killproc smbd killproc nmbd rm -f /var/lock/subsys/smb echo "" ;; *) echo "Usage: smb {start|stop}" exit 1 esac ______________________________________________________________________ Se você obter um erro durante a inicialização, que diz alguma coisa sobre o daemon não conseguir fazer ligação (bind) com a porta 139, então você provavelmente possui outro processo Samba rodando e que ainda não foi derrubado. Verifique a lista de processos (com 'ps auxww | grep mbd') para determinar se há outro serviço Samba rodando. 55.. CCoonnffiigguurraaççããoo GGeerraall ((//eettcc//ssmmbb..ccoonnff)) A configuração do Samba no Linux (ou numa outra máquina UNIX) é controlada por um único arquivo, /etc/smb.conf. Este arquivo determina que recursos do sistema você quer compartilhar com o mundo exterior e que restrições você deseja que sejam aplicadas a eles. Já que as seções seguintes irão tratar do compartilhamento de discos e impressoras Linux com máquinas Windows, o arquivo smb.conf mostrado nesta seção é o mais simples possível, somente para fins de introdução. Não se preocupe ainda com os detalhes. As seções seguintes introduzirão os conceitos principais. Cada seção do arquivo começa com um cabeçalho de seção como [global], [homes], [printers], etc. A seção [global] define algumas variáveis que o Samba utilizará para definir o compartilhamento de todos os recursos. A seção [homes] permite a usuários remotos acessar seus próprios (e somente os seus) diretórios home na máquina local. Isto é, usuários tentando se conectar a este compartilhamento de máquinas Windows, serão conectados ao seus diretórios home pessoais. Note que para fazer isso, eles devem ter uma conta na máquina Linux. O arquivo smb.conf de exemplo abaixo, permite que usuários remotos acessessem seus diretórios home na máquina local e que escreva em um diretório temporário. Para que um usuário Windows veja estes compartilhamentos, a máquina Linux deve estar na rede local. Então o usuário simplesmente conecta um drive de rede no Gerenciador de Arquivos ou no Windows Explorer. Note que nas seções seguintes, entradas adicionais a este arquivo serão dadas para permitir o compartilhamento de mais recursos. ______________________________________________________________________ ; /etc/smb.conf ; Certifique-se de reiniciar o servidor depois de fazer alterações neste arquivo, ex: ; /etc/rc.d/init.d/smb stop ; /etc/rc.d/init.d/smb start [global] ; Se você deseja uma conta guest, descomente a linha abaixo: ; guest account = nobody log file = /var/log/samba-log.%m lock directory = /var/lock/samba share modes = yes [homes] comment = Diretorios Home browseable = no read only = no create mode = 0750 [tmp] comment = Espaco de armazenamento temporario path = /tmp read only = no public = yes ______________________________________________________________________ Tendo escrito um novo smb.conf, é muito útil testá-lo para verificar se há erros. Você pode testar um arquivo smb.conf, usando o utilitário 'testparm' (página man: testparm); se testparm não reportar nenhum problema, o smbd irá carregar o arquivo de configuração corretamente. Aqui temos um bom truque: se seu servidor Samba tem mais de uma interface ethernet, o smbd pode se ligar (bind) a interface errada. Se for o caso, você pode determinar a qual porta ele devera se ligar pela adição de uma linha parecidada como esta na sação [global] do /etc/smb.conf: ______________________________________________________________________ interfaces = 192.168.1.1/24 ______________________________________________________________________ onde você deverá trocar o endereço IP acima pelo que você atribuiu a interface ethernet correta. O "24" é correto para um rede classe C, mas deve ser calculado se você tiver feito sub-redes. O número se refere a máscara de rede. Números para outras classes de redes são fornecidos no IP-Masquerade mini-HOWTO. Existe agora uma ferramenta de configuração gráfica para o Samba: GtkSamba. Veja http://www.open-systems.com/gtksamba.html . 66.. CCoommppaarrttiillhhaannddoo uumm ddiissccoo LLiinnuuxx ccoomm mmááqquuiinnaass WWiinnddoowwss Como mostrado no exemplo de smb.conf acima, compartilhar drives Linux com usuários Windows é fácil. Contudo, como tudo no Samba, você pode controlar coisas em um alto grau. Aqui são alguns exemplos: Para compartilhar um diretório com o público, crie uma cópia da seção [tmp] anterior e adicione algo como neste smb.conf: ______________________________________________________________________ [public] comment = Area Publica path = /home/public public = yes writable = yes printable = no ______________________________________________________________________ Para fazer com que o diretório acima possa ser lido pelo público (todos), mas somente gravável pelos membros do grupo staff, modifique as entradas como abaixo: ______________________________________________________________________ [public] comment = Public Stuff path = /home/public public = yes writable = yes printable = no write list = @staff ______________________________________________________________________ Normalmente é assim fácil; você agora deve estar habilitado a iniciar o Samba e visualizar os compartilhamentos de um PC com Windows. Contudo, a Microsoft recentemente tornou a vida um pouco mais difícil para quem usa Samba. O Windows 98, Windows NT (service pack 3 ou posterior) e as últimas versões do Windows 95 agora usam senhas criptografadas como padrão. O Samba usa senhas não criptografadas por padrão. Você não pode visualizar servidores quando o cliente ou o servidor estão usando senhas criptografadas, porque a conexão não pode ser feita anonimamente. Você pode dizer se tem uma diferença de tipo de senhas entre o cliente e o servidor, se quando você tentar se conectar a um compartilhamento você vir uma caixa de diálogo que mostra algo como "Você não tem permissão para acessar esta conta nesta máquina. Você também pode configurar o seu servidor Samba para usar senhas criptografadas, ou configurar suas máquinas Windows para usar senhas não criptografadas. Para fazer o Windows trabalhar com senhas criptografadas: Windows 95/98 ============= Usando o editor do registro (regedit), crie a seguinte chave: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP Adicione um novo valor DWORD: Value Name: EnablePlainTextPassword Data: 0x01. Windows NT ========== Usando o editor do registro (regedit), crie a seguinte chave: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rdr\Parameters Adicione um novo valor DWORD: Value Name: EnablePlainTextPassword Data: 0x01 Uma vez que as alterações no registro tenham sido feitas, reinicie a máquina Windows e tente mapear um drive de rede no servidor Samba de novo. Isto deve funcionar, já que o servidor Samba está usando senhas não criptografadas. Para configurar o Samba para usar senhas criptografadas: Na seção [global] do /etc/smb.conf, adicione as seguintes linhas: ______________________________________________________________________ encrypt passwords = yes smb passwd file = /etc/smbpasswd ______________________________________________________________________ Você é altamente encorajado a ler os arquivos ENCRYPTION.txt, Win95.txt e WinNT.txt na documentação do Samba antes de fazer isso. Se seus clientes e seu servidor estão usando senhas criptografadas, você não será capaz de visualizar compartilhamentos no servidor até que uma conexão inicial tenha sido feita com a autenticação apropriada. Para conseguir a conexão inicial, entre o nome do compartilhamento manualmente no Gerenciador de Arquivos ou na caixa de diálogo do Explorer, na forma '\\\'. Registre-se no servidor com um nome de usuário e senha que lhe são válidos. Se você suspeita que seu serviço de nomes NetBIOS não está corretamente configurado (talvés porque você tenha obtido erros 'host not found' ao tentar se conectar), tente usar somente o endereço IP do servidor: '\\\'. Para que o nome dos arquivos apareçam corretamente, você pode precisar configurar algumas opções na seção de compartilhamento apropriada. Estas funcionam para clientes Windows 85/98/NT, mas podem precisar ser modificadas se você tem clientes Windows 3.x: ______________________________________________________________________ ; Mangle case = yes aparentemente fornece os nomes de arquivo corretos para Win95/98/NT mangle case = yes ; Se o samba deve diferenciar maiúsculas e minúsculas quando procurando por arquivos case sensitive = no ; Padrão de letras maiúsculas ou minúsculas para quando os arquivos são criados default case = lower ; Preservar maiúsculas e minúsculas para todos os nomes de arquivo preserve case = yes ; Preservar maiúsculas e minúsculas para nomes DOS (8.3) short preserve case = no ______________________________________________________________________ Para outros truques com compartilhamento de drives, veja a documentação do Samba, ou suas páginas man. ______________________________________________________________________ interfaces = 192.168.1.1/24 ______________________________________________________________________ Observação: O número depois da / é uma referência a máscara de sub- rede. "24" é o valor a usar para uma rede Classe C não segmentada. Para mais informações sobre cálculo de sub-redes, você pode visitar http://www.ziplink.net/~ralphb/IPSubnet/index.html . Há muito mais configurações no Samba, mas isto é apenas para iniciar você. Se você quiser fazer algo mais avançado, eu lhe recomendaria o site Web do Samba, mencionado acima. 77.. CCoommppaarrttiillhhaannddoo uumm ddrriivvee WWiinnddoowwss ccoomm mmááqquuiinnaass LLiinnuuxx Um programa cliente SMB para máquinas UNIX é incluido na distribuição. Ele provê uma interface tipo ftp com linha de comando. Você pode usar este utilitário para transferir arquivos entre um 'servidor' Windows e um cliente Linux. Para ver quais compartilhamentos estão disponíveis num determinado host, execute: ______________________________________________________________________ /usr/sbin/smbclient -L host ______________________________________________________________________ Onde 'host' é o nome da máquina que você deseja ver. Isto irá retornar uma lista de nomes de serviço, isto é, nomes de drives ou impressoras que o servidor pode compartilhar com você. A menos que o servidor SMB não possua nenhuma medida de segunça configurada, ele irá lhe perguntar uma senha. Dê-lhe a senha para a conta 'guest' ou para a sua senha pessoal naquela máquina. Por exemplo: ______________________________________________________________________ smbclient -L zimmerman ______________________________________________________________________ A saída do comando deve parecer com esta: ______________________________________________________________________ Server time is Sat Aug 10 15:58:27 1996 Timezone is UTC+10.0 Password: Domain=[WORKGROUP] OS=[Windows NT 3.51] Server=[NT LAN Manager 3.51] Server=[ZIMMERMAN] User=[] Workgroup=[WORKGROUP] Domain=[] Sharename Type Comment --------- ---- ------- ADMIN$ Disk Remote Admin public Disk Public C$ Disk Default share IPC$ IPC Remote IPC OReilly Printer OReilly print$ Disk Printer Drivers This machine has a browse list: Server Comment --------- ------- HOPPER Samba 1.9.15p8 KERNIGAN Samba 1.9.15p8 LOVELACE Samba 1.9.15p8 RITCHIE Samba 1.9.15p8 ZIMMERMAN ______________________________________________________________________ A lista de visualização mostra outros servidores SMB com recursos a compartilhar na rede. Para usar o cliente, execute: ______________________________________________________________________ /usr/sbin/smbclient service ______________________________________________________________________ onde 'serviço' é a máquina e o nome do compartilhamento. Por exemplo, se você está tentando alcançar um diretório que foi compartilhado como 'public' numa máquina chamada zimmerman, o serviço deveria se chamar \\zimmerman\public. No entanto, devido a limitações do shell, você terá que dobrar as barras, logo, você terá por fim algo assim: ______________________________________________________________________ /usr/sbin/smbclient \\\\zimmerman\\public mypasswd ______________________________________________________________________ Onde 'mypasswd' é sua senha. Você obterá o seguinte prompt do smbclient: ______________________________________________________________________ Server time is Sat Aug 10 15:58:44 1996 Timezone is UTC+10.0 Domain=[WORKGROUP] OS=[Windows NT 3.51] Server=[NT LAN Manager 3.51] smb: \> ______________________________________________________________________ Digite 'h' para obter ajuda usando o smbclient: ______________________________________________________________________ smb: \> h ls dir lcd cd pwd get mget put mput rename more mask del rm mkdir md rmdir rd prompt recurse translate lowercase print printmode queue cancel stat quit q exit newer archive tar blocksize tarmode setmode help ? ! smb: \> ______________________________________________________________________ Se você sabe utilizar o ftp, você não precisará das páginas de ajuda para o smbclient. Mesmo pondedo usar o smbclient para testes, você logo estará saturado dele para trabalhos de verdade. Para estes você provavelmente usará o pacote smbfs. O smbfs vem com dois utilitários simples: smbmount e smbumount. Eles funcionam de forma muito similar a mount e umount, só que para compartilhamentos SMB. O pacote smbfs já é incluido na maioria das distribuições Linux. Uma coisa importante a observar: Você deve possuir suporte a smbfs compilado no kernel para utilizar estes utilitários. 88.. CCoommppaarrttiillhhaannddoo uummaa iimmpprreessssoorraa LLiinnuuxx ccoomm mmááqquuiinnaass WWiinnddoowwss Para compartilhar uma impressora Linux com máquinas Windows, você precisa ter certeza que sua impressora está configurada no Linux. Se você pode imprimir do Linux, configurar um compartilhamento SMB da impressora é bem simples. Veja o Printing HOWTO para configurar uma impressora local. Já que o autor usou uma impressora conectada a uma máquina Windows NT (há muito tempo atrás - antes de converter nossa rede ao Linux, quase em sua totalidade), esta seção não deve ser vista como definitiva, mas meramente uma sugestão. Qualquer um com detalhes a compartilhar, por favor, envie-os a dwood@plugged.net.au Assim, esta seção pode ser completada. Adicionando configurações de impressão a seu sbm.conf: ______________________________________________________________________ [global] printing = bsd printcap name = /etc/printcap load printers = yes log file = /var/log/samba-log.%m lock directory = /var/lock/samba [printers] comment = All Printers security = server path = /var/spool/lpd/lp browseable = no printable = yes public = yes writable = no create mode = 0700 [ljet] security = server path = /var/spool/lpd/lp printer name = lp writable = yes public = yes printable = yes print command = lpr -r -h -P %p %s ______________________________________________________________________ Tenha certeza que a o caminho da impressora (neste caso abaixo de [ljet]) casa com o diretório de spool em /etc/printcap! As linhas: ______________________________________________________________________ printcap name = /etc/printcap load printers = yes ______________________________________________________________________ controlam quando todas as impressoras em /etc/printcap devem ser cerregadas por padrão ou não. Se você fizer isso, não há razão para configurar impressoras individualmente. A seção [printers] escifica opções para as impressoras que você quer definir explicitamente. Se o subsistema de impressão que você está usando não funciona deste modo (BSD), você terá que configurar um arquivo printcap falso (ou usar a técnica do 'comando de impressão', veja abaixo). Para mais informações sobre o sistema printcap veja o Printing HOWTO. Uma técnica útil de testar a conexão de rede é trocar o camando de impressão para: ______________________________________________________________________ print command = cp %S /tmp/print.%P.%S ______________________________________________________________________ O arquivo resultante pode então ser analisado. Observação: Há alguns problemas ao se compartilhar impressoras em máquinas UNIX com máquinas NT usando Samba. Um dos problemas é o NT ver a impressora compartilhada corretamente. Para solucionar, use as observações contidas na documentação do Samba no arquivo docs/WinNT.txt. Outro problema ocorre com as senhas. Veja os comentários no mesmo arquivo sobre uma forma irritante de compreensão e falha para solucionar o problema. Oleg L. Machulskiy (machulsk@shade.msu.ru) sugere que um comando de impressão melhor para o exemplo acima seria: ______________________________________________________________________ print command = smb2ps %s | lpr -r -h -P %p ______________________________________________________________________ onde 'smb2ps' é um script que transforma os arquivos de spool recebidos do Windows em usáveis e comuns arquivos Postscript. Ele deve cortar as primeiras três e as últimas duas linhas, porque estas linhas contém código PJL ou PCL. Este método só é necessário se sua máquina Windows está imprimindo PCL e não Postscript realmente. Eu tenho visto que no Windows 95/98/NT não tem um driver genérico para Postscript, mas o driver da "Digital turbo Printserver 20" funciona como um bom driver genérico de Postscript para a maioria das configurações. Eu também tenho ouvido que o driver da "Apple LaserWriter II NTX" também funciona para este fim. Jeff Stern (jstern@eclectic.ss.uci.edu) reporta o seguinte, o que pode ajudar alguns de vocês: --------------------------%<---------------------------------- O problema que eu estava tendo, era que eu podia imprimir via lpd/lpr na minha impressora do Linux. Mas, eu não conseguia imprimir de uma máquina Win95 remota. Então eu tentei: smbclient \\eclectic\belen -P e então: print myfile Eu obtive erros como acesso negado. Então, eu configurei as permissões em meu diretório /var/spool/lpd/lp1 para 777. Me desculpe, mas foi isso que eu tive que fazer. Eu acho que alternativamente, eu poderia ter posto todos os usuários no grupo 'lp', ou feito dado a posse do diretório ao grupo 'users', etc... Mas por enquanto, este método está funcionando (com propriedade root:lp). Finalmente, uma outra coisa que os administradores devem saber é que o nome da conta na máquina Windows (na qual eu estava tentando usar a impressora Linux via Samba) deve ter equivalente no Linux. Assim, se há um usuário chamado 'joe' na máquina Windows 'mywinbox' tentando imprimir na impressora 'belen' da máquina Linux 'eclectic' (\\eclecticz\belen, deverá haver um usuário chamado 'joe' na máquina Linux. Então o login e a senha do usuário 'joe' serão a senha para acesar a impressora belen da máquina eclectic. Esta senha será solicitada na máquina Windows quando você estiver configurando a impressora com Impressoras | Adicionar Nova. Eu pensei que este tipo de problema não seria bem o caso, mas eu configurei minha impressora com acesso público no smb.conf. Mas aparentemente, ela continua a pedir senha. (A máquina Windows, infelizmente, não lhe dá a oportunidade de informar um nome de usuário diferente para a impressora remota (Linux). Ela simplesmente usa o nome do usuário atual que você informou quando iniciou o Win95. --------------------------%<---------------------------------- O Dr. Michael Langner langner@fiz-chemie.de mostra que problemas de permissão de escrita na árvore de /var/spool/lpd/ podem ser evitados por alguma coisa como "path = /tmp" e "print command = lpr -r -P%p %s". Algumas vezes, um error de interpretação do Postscript irá ocorrer quando você estiver imprimindo de máquinas Windows, o que causa a impressão de uma página extra no fim de cada trabalho de impressão. A útima página sempre conterá "%%[ Lastpage ]%%" em seu topo. Aparentemente isto acontece apenas com o Windows 95 e 98 e é devido a um defeito no Postscript gerado. Uma maneira de lidar com isso é usar um script que remove a pequena parte ruim desde Postscript dos trabalhos da fila de impressão. Outra maneira é tentar encontrar um driver Postscript melhor para Windows. Provavelmente a melhor maneira é usarmos LPRng invés de Postscript para imprimir num servidor Samba. Erik Ratcliffe (erik@caldera.com) da Caldera contou-me que usando LPRng significa que qualquer driver de impressão pode ser usado na máquina Windows. No servidor Samba, ele usou uma entrada no /etc/printcap que se parece com esta: ______________________________________________________________________ raw:\ :rw:sh: :lp=/dev/lp1 :sd=/var/spool/lpd/raw :fx=flp ______________________________________________________________________ LPRng não requer :\ no final de cada linha. Uma linha de impressora ainda precisa ser adicionada ao /etc/smb.conf para a impressora física. O comando de impressão precisa usar a entrada "raw" do /etc/printcap e os dados precisam ser enviados para a impressora em formato binário. Tente um comando de impressão como este: ______________________________________________________________________ print command = lpr -b -Praw %s ______________________________________________________________________ Você também pode precisar configurar o spooling no Windows 95 para imprimir diretamente para a impressora, ao invés de fazer spool. 99.. CCoommppaarrttiillhhaannddoo uumm iimmpprreessssoorraa WWiinnddoowwss ccoomm mmááqquuiinnaass LLiinnuuxx Para compartilhar uma impressora de uma máquina Windows, você deve fazer o seguinte: 1. Você deve possuir as entradas apropriadas no /etc/printcap e elas devem corresponder a estrutura local de diretórios (para o diretório de spool, etc). 2. Você deve ter o script /usr/bin/smbprint. Ele vem junto dos fontes do Samba, mas não em todas as distribuições binárias. Uma cópia levemente modificada será discutida abaixo. 3. Se você quer converter arquivos ASCII para Postscript, você deve ter o nenscript, ou um equivalente. nescript é um conversor para Postscript e é geralmente instalado em /usr/bin. 4. Você pode querer fazer a impressão do Samba ficar mais fácil tendo um programa interface que torne-a simples de usar. Um script em Perl simples para manipular ASCII, Postscript ou Postscript criado é dado abaixo. 5. Você pode também usar o MagicFilter para fazer o item acima. Detalhes sobre como configurar o MagicFilter são fornecidos depois do script perl. O MagicFilter tem vantegens porque ele sabe como converter automaticamente muitos formatos de arquivo. 6. a. A entrada no arquivo /etc/printcap abaixo é para um impressora HP 5MP numa máquina Windows NT. As entradas são como as que seguem abaixo: ________________________________________________________________ cm - comentário lp - dispositivo a abrir para saída sd - o diretório de spool da impressora (na máquina local). af - o arquivo de registro (contabilidade) mx - o tamanho máximo de arquivo (zero é ilimitado) if - o nome do filtro de entrada. ________________________________________________________________ Para mais informações, veja o Printing HOWTO ou a página man do printcap. ___________________________________________________________________ # /etc/printcap # # //zimmerman/oreilly via smbprint # lp:\ :cm=HP 5MP Postscript OReilly on zimmerman:\ :lp=/dev/lp1:\ :sd=/var/spool/lpd/lp:\ :af=/var/spool/lpd/lp/acct:\ :mx#0:\ :if=/usr/bin/smbprint: ___________________________________________________________________ Tenha certeza que os diretórios de spool e registro (contabilidade) existem e são graváveis. Assegure-se que a linha que tem o 'if' contenha o caminho correto para o script smbprint (dado abaixo) e tenha certeza que o dispositivo apropriado tenha sido indicado (o arquivo especial /dev). Depois vem o próprio script smbprint. Ele normalmente é colocado em /usr/bin e é atribuído a Andrew Tridgell, a pessoa que criou o Samba, até onde eu sei. Ele vem junto da distribuição dos fontes do Samba, mas não vem em algumas distribuições binárias, assim sendo eu o reproduzi aqui. Você pode quer dar uma olhada cuidadosa nele. Há algumas pequenas alterações que se mostraram muito úteis. ___________________________________________________________________ #!/bin/sh -x # This script is an input filter for printcap printing on a unix machine. It # uses the smbclient program to print the file to the specified smb-based # server and service. # For example you could have a printcap entry like this # # smb:lp=/dev/null:sd=/usr/spool/smb:sh:if=/usr/local/samba/smbprint # # which would create a unix printer called "smb" that will print via this # script. You will need to create the spool directory /usr/spool/smb with # appropriate permissions and ownerships for your system. # Set these to the server and service you wish to print to # In this example I have a WfWg PC called "lapland" that has a printer # exported called "printer" with no password. # # Script further altered by hamiltom@ecnz.co.nz (Michael Hamilton) # so that the server, service, and password can be read from # a /usr/var/spool/lpd/PRINTNAME/.config file. # # In order for this to work the /etc/printcap entry must include an # accounting file (af=...): # # cdcolour:\ # :cm=CD IBM Colorjet on 6th:\ # :sd=/var/spool/lpd/cdcolour:\ # :af=/var/spool/lpd/cdcolour/acct:\ # :if=/usr/local/etc/smbprint:\ # :mx=0:\ # :lp=/dev/null: # # The /usr/var/spool/lpd/PRINTNAME/.config file should contain: # server=PC_SERVER # service=PR_SHARENAME # password="password" # # E.g. # server=PAULS_PC # service=CJET_371 # password="" # # Debugging log file, change to /dev/null if you like. # logfile=/tmp/smb-print.log # logfile=/dev/null # # The last parameter to the filter is the accounting file name. # spool_dir=/var/spool/lpd/lp config_file=$spool_dir/.config # Should read the following variables set in the config file: # server # service # password # user eval `cat $config_file` # # Some debugging help, change the >> to > if you want to same space. # echo "server $server, service $service" >> $logfile ( # NOTE You may wish to add the line `echo translate' if you want automatic # CR/LF translation when printing. echo translate echo "print -" cat ) | /usr/bin/smbclient "\\\\$server\\$service" $password -U $user -N -P >> $logfile ___________________________________________________________________ A maioria das distribuições Linux vem com o nenscript para con­ verter documentos ASCII em Postscript. O script perl abaixo facilita a nossa vida fornecendo uma interface simples ao Linux para impressão via smbprint. ___________________________________________________________________ Uso: print [-a|c|p] -a imprime como ASCII -c imprime como arquivo fonte formatado -p imprime como Postscript Se nenhuma opção for dada, print tenta descobrir o tipo de arquivo e imprimi-lo apropriadamente. ___________________________________________________________________ Usando o smbprint para imprimir arquivos ASCII tende a cortar lin­ has grandes. Este script quebra linhas grandes com espaços em branco (ao invés de no meio das palavras), se possível. A formatação do código fonte é feita com o nescript. Ele pega um arquivo ASCII e o formata em duas colunas com um cabeçalho legal (data, nome do arquivo, etc). Ele também numera as linhas. Usando isto como exemplo, outros tipos de formatação podem ser obtidos. Documentos Postscript já estão formatados adequadamente, então repasse-os automaticamente. ___________________________________________________________________ #!/usr/bin/perl # Script: print # Autores: Brad Marshall, David Wood # Plugged In Communications # Data: 960808 # # Script para imprimir numa impressora Postscript printer via Samba. # Finalidade: Pega arquivos de vários tipos e arqumentos e os processa # apropriadamente para um canal(pipe) do script de impressão do Samba. # # Currently supported file types: # # ASCII - assegura-se que as linhas maiores que $line_length caracteres # sejam quebradas nos espaçoes em branco. # Postscript - Não faz nada. # Code - Formata em Postscript (usando nenscript) para aparecer # adequadamente(landscape, font, etc). # # Determina o maior comprimento de linha permitido em textos ASCII $line_length = 76; # Determina o nome e o caminho do script de impressão do samba $print_prog = "/usr/bin/smbprint"; # Determina o nome e o caminho para o nescript (o conversor ASCII-->Postscript) $nenscript = "/usr/bin/nenscript"; unless ( -f $print_prog ) { die "Não pude encontrar $print_prog!"; } unless ( -f $nenscript ) { die "Não pude encontrar $nenscript!"; } &ParseCmdLine(@ARGV); # DBG print "Arquivo do tipo $filetype\n"; if ($filetype eq "ASCII") { &wrap($line_length); } elsif ($filetype eq "code") { &codeformat; } elsif ($filetype eq "ps") { &createarray; } else { print "Desculpe... tipo de arquivo desconhecido.\n"; exit 0; } # Canalisa a matriz para o smbprint open(PRINTER, "|$print_prog") || die "Não pude abrir $print_prog: $!\n"; foreach $line (@newlines) { print PRINTER $line; } # Envia um linefeed extra no caso do arquivo ter uma última linha incompleta. print PRINTER "\n"; close(PRINTER); print "Completed\n"; exit 0; # --------------------------------------------------- # # Tudo daqui para baixo são sub-rotinas # # --------------------------------------------------- # sub ParseCmdLine { # Parses the command line, finding out what file type the file is # Gets $arg and $file to be the arguments (if the exists) # and the filename if ($#_ < 0) { &usage; } # DBG # foreach $element (@_) { # print "*$element* \n"; # } $arg = shift(@_); if ($arg =~ /\-./) { $cmd = $arg; # DBG # print "\$cmd found.\n"; $file = shift(@_); } else { $file = $arg; } # Defining the file type unless ($cmd) { # We have no arguments if ($file =~ /\.ps$/) { $filetype = "ps"; } elsif ($file =~ /\.java$|\.c$|\.h$|\.pl$|\.sh$|\.csh$|\.m4$|\.inc$|\.html$|\.htm$/) { $filetype = "code"; } else { $filetype = "ASCII"; } # Process $file for what type is it and return $filetype } else { # We have what type it is in $arg if ($cmd =~ /^-p$/) { $filetype = "ps"; } elsif ($cmd =~ /^-c$/) { $filetype = "code"; } elsif ($cmd =~ /^-a$/) { $filetype = "ASCII" } } } sub usage { print " Usage: print [-a|c|p] -a prints as ASCII -c prints formatted as source code -p prints as Postscript If no switch is given, print attempts to guess the file type and print appropriately.\n "; exit(0); } sub wrap { # Create an array of file lines, where each line is < the # number of characters specified, and wrapped only on whitespace # Get the number of characters to limit the line to. $limit = pop(@_); # DBG #print "Entering subroutine wrap\n"; #print "The line length limit is $limit\n"; # Read in the file, parse and put into an array. open(FILE, "<$file") || die "Can't open $file: $!\n"; while() { $line = $_; # DBG #print "The line is:\n$line\n"; # Wrap the line if it is over the limit. while ( length($line) > $limit ) { # DBG #print "Wrapping..."; # Get the first $limit +1 characters. $part = substr($line,0,$limit +1); # DBG #print "The partial line is:\n$part\n"; # Check to see if the last character is a space. $last_char = substr($part,-1, 1); if ( " " eq $last_char ) { # If it is, print the rest. # DBG #print "The last character was a space\n"; substr($line,0,$limit + 1) = ""; substr($part,-1,1) = ""; push(@newlines,"$part\n"); } else { # If it is not, find the last space in the # sub-line and print up to there. # DBG #print "The last character was not a space\n"; # Remove the character past $limit substr($part,-1,1) = ""; # Reverse the line to make it easy to find # the last space. $revpart = reverse($part); $index = index($revpart," "); if ( $index > 0 ) { substr($line,0,$limit-$index) = ""; push(@newlines,substr($part,0,$limit-$index) . "\n"); } else { # There was no space in the line, so # print it up to $limit. substr($line,0,$limit) = ""; push(@newlines,substr($part,0,$limit) . "\n"); } } } push(@newlines,$line); } close(FILE); } sub codeformat { # Call subroutine wrap then filter through nenscript &wrap($line_length); # Pipe the results through nenscript to create a Postscript # file that adheres to some decent format for printing # source code (landscape, Courier font, line numbers). # Print this to a temporary file first. $tmpfile = "/tmp/nenscript$$"; open(FILE, "|$nenscript -2G -i$file -N -p$tmpfile -r") || die "Can't open nenscript: $!\n"; foreach $line (@newlines) { print FILE $line; } close(FILE); # Read the temporary file back into an array so it can be # passed to the Samba print script. @newlines = (""); open(FILE, "<$tmpfile") || die "Can't open $file: $!\n"; while() { push(@newlines,$_); } close(FILE); system("rm $tmpfile"); } sub createarray { # Create the array for postscript open(FILE, "<$file") || die "Can't open $file: $!\n"; while() { push(@newlines,$_); } close(FILE); } ___________________________________________________________________ Agora, via MagicFilter. Obrigado a Alberto Menegazzi (flash.egon@iol.it) por esta informação. Alberto disse: --------------------------%<---------------------------------- 1) Instale o MagicFilter com o filtro de impressoras que você precisa em /usr/bin/local mas não preencha o /etc/printcap com a sugestão dada na documentação do MagicFilter. 2) Escreva o /etc/printcap desta forma (está feito para minha LaserJet 4L): lp|ljet4l:\ :cm=HP LaserJet 4L:\ :lp=/dev/null:\ # or /dev/lp1 :sd=/var/spool/lpd/ljet4l:\ :af=/var/spool/lpd/ljet4l/acct:\ :sh:mx#0:\ :if=/usr/local/bin/main-filter: Você pode perceber que o lp=/dev/... está aberto para fazer o lock­ ing de tais dispositivos "virtuais", deve ser usado um para cada impressora remota. Exemplo criando com: touch /dev/ljet4l Escreva o filtro /usr/local/bin/main-filter, o mesmo que você sug­ eriu usando o filtro ljet4l-filter ao invés do cat. Aqui está o meu: #! /bin/sh logfile=/var/log/smb-print.log spool_dir=/var/spool/lpd/ljet4l ( echo "print -" /usr/local/bin/ljet4l-filter ) | /usr/bin/smbclient "\\\\SHIR\\HPLJ4" -N -P >> $logfile P.S. : aqui vai uma citação do Print2Win mini-Howto sobre locking e porque criar impressoras virtuais Starts here--> ---Começa aqui Dica de Rick Bressler : Boa dica. Eu uso algo muito parecido. Uma dica útil é que isso não é uma boa idéia: :lp=/dev/null:\ lpr abre em modo exclusivo o arquivo que você especifica em lp=. Ele o faz para evitar que vários processos tentem imprimir na mesma impressora ao mesmo tempo. O efeito colateral disto no seu caso, eng e colour não podem imprimir ao mesmo tempo, (normalmente mais ou menos transparente, já que provavelmente elas imprimem rapidamente e já que elas enfil­ eram, você provavelmente não percebe) mas qualquer outro processo que tenta escrever em /dev/null será quebrado! Em um sistema monousuário, provavelmente não é um grande problema. Eu tenho um sistema com mais de 50 impressoras. Haveria um problema aqui. A solução é criar uma impressora burra para cada. Exemplo: touch /dev/eng. Eu modifiquei as entradas lp no arquivo printcap acima para levar em conta as sugestões do Rick. Eu fiz o seguinte: #touch /dev/eng #touch /dev/colour Ends here--> ---Termina aqui --------------------------%<---------------------------------- 1100.. TTiirraannddoo ccóóppiiaass ddee sseegguurraannççaa ddee mmááqquuiinnaass WWiinnddoowwss eemm LLiinnuuxx AAddaamm NNeeaatt ((aaddaammnneeaatt@@iippaaxx..ccoomm..aauu)) ggeennttiillmmeennttee ccoonnttrriibbuuiiuu ccoomm oo sseegguuiinnttee ssccrriipptt ppaarraa ffaazzeerr ccóóppiiaass ddee sseegguurraannççaa ddee mmááqquuiinnaass WWiinnddoowwss nnoo LLiinnuuxx,, uussaannddoo oo uuttiilliittáárriioo ssmmbbcclliieenntt.. AAddaamm ddiizz ttêê--lloo uussaaddoo ppaarraa ffaazzeerr ccóóppiiaass ddee sseegguurraannççaa ddee mmááqquuiinnaass WWiinnddoowwss 33..xx ee NNTT nnuummaa mmááqquuiinnaa LLiinnuuxx ccoomm ddrriivvee DDAATT SSCCSSII.. OO AAddaamm nnããoo eessttáá oorrgguullhhoossoo ddoo eessttiilloo ddee ccooddiiffiiccaaççõõaa uussaaddoo aaqquuii,, mmaass eellee ffuunncciioonnaa.. CCoommoo qquuee ggoossttoo ddee ddiizzeerr:: ""SSee ffuunncciioonnaa ee éé eessttúúppiiddoo,, eennttããoo nnããoo éé eessttúúppiiddoo"".. NNeessttee ssccrriipptt,, aa ssttrriinngg ''aaggnneeaa11'' éé oo nnoommee ddoo uussuuáárriioo nnaa mmááqquuiinnaa LLiinnuuxx qquuee ffaazz aass ccóóppiiaass ddee sseegguurraannççaa ((bbaacckkuuppss)).. ___________________________________________________________________ #!/bin/bash clear echo Inicializando ... checkdate=`date | awk '{print $1}'` if [ -f "~agnea1/backup-dir/backup-data" ]; then echo "ERRO: Nenhum arquivo de configuração para hoje!" echo "FATAL!" exit 1 fi if [ -d "~agnea1/backup-dir/temp" ]; then echo "ERRO: Diretório temporário não encontrado!" echo echo "Tentando criar " cd ~agnea1 cd backup-dir mkdir temp echo "Diretório criado - temp" fi if [ "$1" = "" ]; then echo "ERRO: entre o nome da máquina (ex: cdwriter)" exit 1 fi if [ "$2" = "" ]; then echo "ERRO: entre um recurso SMB (Lan Manager) (ex: work)" exit 1 fi if [ "$3" = "" ]; then echo "ERRO: entre um endereço IP para $1 (ex: 130.xxx.xxx.52)" exit 1 fi ############################################################################# # Main Section # ############################################################################# cd ~agnea1/backup-dir/temp rm -r ~agnea1/backup-dir/temp/* cd ~agnea1/backup-dir/ case "$checkdate" in Mon) echo "Fazendo Backup de Segunda-feira" cat backup-data | /usr/local/samba/bin/smbclient \\\\$1\\$2 -I$3 -N echo "Completo" if [ -d "~agnea1/backup-dir/Monday" ]; then echo "Diretório Monday não encontrado ... criando" mkdir ~agnea1/backup-dir/Monday fi echo "Arquivando ..." cd ~agnea1/backup-dir/temp tar -cf monday.tar * echo "feito ..." rm ~agnea1/backup-dir/Monday/monday.tar mv monday.tar ~agnea1/backup-dir/Monday ;; Tue) echo "Fazendo Backup de Terça-feira" cat backup-data | /usr/local/samba/bin/smbclient \\\\$1\\$2 -I$3 -N echo "Completo" if [ -d "~agnea1/backup-dir/Tuesday" ]; then echo "Diretório Tuesday não encontrado ... criando" mkdir ~agnea1/backup-dir/Tuesday fi echo "Arquivando ..." cd ~agnea1/backup-dir/temp tar -cf tuesday.tar * echo "feito ..." rm ~agnea1/backup-dir/Tuesday/tuesday.tar mv tuesday.tar ~agnea1/backup-dir/Tuesday ;; Wed) echo "Fazendo Backup de Quarta-feira" cat backup-data | /usr/local/samba/bin/smbclient \\\\$1\\$2 -I$3 -N echo "Completo" if [ -d "~agnea1/backup-dir/Wednesday" ]; then echo "Diretório Wednesday não encontrado ... criando " mkdir ~agnea1/backup-dir/Wednesday fi echo "Arquivando ..." cd ~agnea1/backup-dir/temp tar -cf wednesday.tar * echo "feito ..." rm ~agnea1/backup-dir/Wednesday/wednesday.tar mv wednesday.tar ~agnea1/backup-dir/Wednesday ;; Thu) echo "Fazendo Backup de Quinta-feira" cat backup-data | /usr/local/samba/bin/smbclient \\\\$1\\$2 -I$3 -N echo "Completo" if [ -d "~agnea1/backup-dir/Thursday" ]; then echo "Diretório Thrusday não encontrado ... criando" mkdir ~agnea1/backup-dir/Thursday fi echo "Arquivando ..." cd ~agnea1/backup-dir/temp tar -cf thursday.tar * echo "feito ..." rm ~agnea1/backup-dir/Thursday/thursday.tar mv thursday.tar ~agnea1/backup-dir/Thursday ;; Fri) echo "Fazendo Backup de Sexta-feira" cat backup-data | /usr/local/samba/bin/smbclient \\\\$1\\$2 -I$3 -N echo "Completo" if [ -d "~agnea1/backup-dir/Friday" ]; then echo "Diretório Friday não encontrado ... criando" mkdir ~agnea1/backup-dir/Friday fi echo "Arquivando ..." cd ~agnea1/backup-dir/temp tar -cf friday.tar * echo "feito ..." rm ~agnea1/backup-dir/Friday/friday.tar mv friday.tar ~agnea1/backup-dir/Friday ;; *) echo "FATAL ERROR: Variável desconhecida passada para dia" exit 1;; esac ########### ___________________________________________________________________ 1111.. CCooppyyrriigghhtt TThhiiss HHOOWWTTOO iiss ccooppyyrriigghhtt 11999966--99 bbyy DDaavviidd WWoooodd.. IItt mmaayy bbee rreepprroodduucceedd iinn aannyy ffoorrmm aanndd ffrreeeellyy ddiissttrriibbuutteedd aass lloonngg aass tthhee ffiillee ssttaayyss iinnttaacctt,, iinncclluuddiinngg tthhiiss ssttaatteemmeenntt.. EEssttee CCoommoo FFaazzeerr tteemm ttooddooss ooss ddiirreeiittooss rreesseerrvvaaddooss ((ccooppyyrriigghhtt 11999966--99)) aa DDaavviidd WWoooodd.. EEllee ppooddee sseerr rreepprroodduuzziiddoo eemm qquuaallqquueerr ffoorrmmaa oouu mmeeiioo ee lliivvrreemmeennttee ddiissttrriibbuuííddoo ddeessddee qquuee oo aarrqquuiivvoo eesstteejjaa iinnttaaccttoo,, iinncclluuiinnddoo eessttaa ddeeccllaarraaççããoo.. 1122.. AAggrraaddeecciimmeennttooss BBrraadd MMaarrsshhaallll ((bbmmaarrsshhaallll@@pplluuggggeedd..nneett..aauu)) ee JJaassoonn PPaarrkkeerr ((jjppaarrkkeerr@@pplluuggggeedd..nneett..aauu)) ccoonnttrriibbuuiirraamm ccoomm tteemmppoo,, ppaacciiêênncciiaa,, ccooddiiffiiccaaççããoo ee ppeessqquuiissaa.. AAddaamm NNeeaatt ((aaddaammnneeaatt@@iippaaxx..ccoomm..aauu)) ccoonnttrriibbuuiiuu ccoomm oo ssccrriipptt bbaasshh uussaaddoo ppaarraa ssee ffaazzeerr bbaacckkuupp ddee mmááqquuiinnaass WWiinnddoowwss eemm hhoossttss LLiinnuuxx.. MMaatttthheeww FFlliinntt (()) mmee ccoonnttoouu ssoobbrree oo uussoo ddaa ooppççããoo ''iinntteerrffaacceess'' nnoo ssmmbb..ccoonnff OOlleegg LL.. MMaacchhuullsskkiiyy ((mmaacchhuullsskk@@sshhaaddee..mmssuu..rruu)),, JJeeffff SStteerrnn ((jjsstteerrnn@@eecclleeccttiicc..ssss..uuccii..eedduu)),, DDrr.. MMiicchhaaeell LLaannggnneerr ((llaannggnneerr@@ffiizz-- cchheemmiiee..ddee ee EErriikk RRaattcclliiffffee ((eerriikk@@ccaallddeerraa..ccoomm)) ssuuggeerriirraamm mmooddiiffiiccaaççõõeess aa sseeççããoo CCoommppaarrttiillhhaannddoo uummaa iimmpprreessssoorraa LLiinnuuxx ccoomm mmááqquuiinnaass WWiinnddoowwss.. AAllbbeerrttoo MMeenneeggaazzzzii ((ffllaasshh..eeggoonn@@iiooll..iitt)) ccoonnttrriibbuuiiuu ccoomm aa ccoonnffiigguurraaççããoo ddoo MMaaggiiccFFiilltteerr qquuee hhaabbiilliittaa uummaa mmááqquuiinnaa LLiinnuuxx ccoommppaarrttiillhhaarr uummaa iimmpprreessssoorraa WWiinnddoowwss.. AAnnddrreeaa GGiirroottttoo ((iiccaarruuss@@iinnccaa..ddeeii..uunniippdd..iitt)) ccoonnttrriibbuuiiuu ccoomm iinnúúmmeerraass ssuuggeessttõõeess vvaalliioossaass ppoorr ttooddoo oo ddooccuummeennttoo.. OObbrriiggaaddoo,, ttaammbbéémm,, aa ttooddooss ooss ttrraadduuttoorreess iinntteerrnnaacciioonnaaiiss qquuee ttrroouuxxeerraamm eessttee CCoommoo FFaazzeerr aaoo mmuunnddoo qquuee nnããoo ffaallaa iinnggllêêss:: TTaakkeeoo NNaakkaannoo ((nnaakkaannoo@@aappmm..sseeiikkeeii..aacc..jjpp)),, KKllaauuss--DDiieetteerr SScchhuummaacchheerr ((KKllaauuss-- DDiieetteerr..SScchhuummaacchheerr@@ffeerrnnuunnii--hhaaggeenn..ddee)),, AAnnddrreeaa GGiirroottttoo ((iiccaarruuss@@iinnccaa..ddeeii..uunniippdd..iitt)) ee mmuuiittooss oouuttrrooss qquuee eeuu nnããoo tteennhhoo ccoonnttaattoo.. TTrraadduuççããoo ppaarraa ppoorrttuugguuêêss ddoo BBrraassiill ffeeiittaa ppoorr:: NNiilloo NNeeyy CCoouuttiinnhhoo MMeenneezzeess ((nnmmeenneezzeess@@nn33..ccoomm..bbrr))