Printer Server Linux sem complicação – Paralela/USB
novembro 26th, 2008
Amigos, depois de “campear” a Internet atrás de uma solução que matasse a charada de compartilhar uma impressora em um box ou servidor Linux, que já cumpre outras tarefas numa rede (FileServer, Firewall, dbServer..), achei algumas soluções e acabei escrevendo este post para facilitar a vida de quem está iniciando nessa área.
Na verdade, a maioria dos tutoriais que se acha pela rede, descreve como fazer um servidor de impressão para máquinas Windows, utilizando o SaMBa e o cups, porém estes são relativamente difíceis de entender o funcionamento para quem quer somente compartilhar uma impressora facilmente, e não quer estudar o funcionamento do samba e do cups, apesar destes serem servidores de arquivos e impressão altamente robustos (Substituem servidores Windows com vantagens!!).
A solução que apresento aqui nada mais é do que tornar uma máquina ou servidor Linux um Printer Server RAW do tipo HP Jetdirect ouvindo na porta 9100 padrão. Isso nos possibilita a impressão via rede de qualquer computador e de qualquer sistema operacional, sem dificuldade de sequer a instalação de driver no servidor, imprimindo diretamente no IP do Printer Server.
Entendendo a Solução (Usando CentOS 5.2)
O grande lance é que vamos utilizar o comando nc (acho que a evolução do comando netcat). Ele simplesmente fica ouvindo em uma determinada porta e repassa tudo que chegar para um device no linux. Device este que pode ser a /dev/lp0 (Saída paralela) ou a /dev/usb/lp0 (Saída USB).
Mão às Teclas
Primeiramente vamos testar a solução e depois criamos um script com um loop que ficará ouvindo na porta e repassando as informações em formato RAW para a porta da impressora. Ao plugar uma impressora paralela, o device já estará criado e não teremos problemas para o reconhecimento. Na conexão USB, teremos que certificar que o kernel achou corretamente o device. Meus testes foram feitos com uma impressora HP692C paralela e uma Lexmark E340 Laser USB em meu Firewall CentOS 5.2 PentiumIII 1.13 Tualatin.
Após plugar e ligar a impressora USB, o kernel irá responder. Verificamos isso com o comando dmesg
# dmesg
O resultado será extenso, porém bem nas últimas linhas teremos algo como:
usb 1-2: new full speed USB device using uhci_hcd and address 11
usb 1-2: configuration #1 chosen from 1 choice
drivers/usb/class/usblp.c: usblp0: USB Bidirectional printer dev 11 if 0 alt 0 proto 2 vid 0x043D pid 0x00C8
Isso informa que o kernel reconheceu o dispositivo como uma impressora e deverá criar automaticamente o device /dev/usb/lp0 com isso já podemos testar o printer server com o comando:
se USB:
# while true ; do nc -l 9100 > /dev/usb/lp0 ; done
Se paralela:
# while true ; do nc -l 9100 > /dev/lp0 ; done
Após digitar o comando referente à sua conexão, o prompt não voltará… Não se assuste, é que como é um loop, para liberar o prompt devemos enviá-lo para segundo plano. Isso será o script que passarei a seguir que irá fazer. Por enquanto, ele ficará assim até que se digite ctrl+c para cancelar.
Digite o comando acima para a sua conexão e abra uma nova console root. Com o nmap poderemos certificar que a porta está ouvindo:
# nmap ip do servidor
Deverá aparecer uma entrada assim: ” 9100/tcp open jetdirect ” Isso certifica que a porta está ouvindo, enquanto o ctrl+c não for pressionado naquela console que deixamos de lado.
Com isso já sabemos que o printer server está funcionando, agora temos que instalar a impressora na estação apontando para o IP do servidor na porta 9100 (padrão em novas portas TCP/IP do Windows).
Abra as impressoras do Windows e adicione uma nova porta TCP/IP com o IP do servidor e a porta 9100, após instale a sua impressora normalmente (Para o Windows informe que ela é local e selecione a porta TCP/IP que você criou antes!) instale os drivers do fabricante e pronto!! Essa impressora poderá até ser compartilhada no Windows mesmo, se vc preferir instalar nas outras estações sem aplicar os drivers.
No Ubuntu (gnome), vá em Sistema/Administração/Impressão, abrirá as impressoras, clique em Nova Impressora, selecione AppSocket/HP JetDirect, entre com IP do servidor e porta 9100 e rolex de replicas siga com a instalação normal de impressora no Ubuntu Linux. Ao final mande uma página de teste e veja o resultado!
Fazendo funcionar sozinho
Criei um script simples para que o printer server suba na inicialização do Linux. Crie um novo arquivo em algum lugar para ser o printer server:
# vi /etc/jetdirect.sh
Coloque o conteúdo do arquivo como segue:
#—————
#! /bin/bash
echo ” ”
echo “Startando o Printer Server JetDirect….”
echo ” ”
# while true ; do nc -l 9100 > /dev/lp0 ; done &
while true ; do nc -l 9100 > /dev/usb/lp0 ; done &
#—————
Se a sua impressora for paralela, descomente a linha do /dev/lp0 e comente a outra. Você também poderá ter várias impressoras, tanto paralela quanto USB utilizando uma porta para cada, tipo 9100 9101 9102… e assim por diante.
Torne ele executável:
# chmod +x /etc/jetdirect.sh
Edite o rc.local e coloque no final uma chamada para o seu script:
# vi /etc/rc.d/rc.local
Adicione ao final a linha
/etc/jetdirect.sh
Agora sempre que o Linux subir, ele carregará o script e ficará ouvindo na porta tcp que você especificou e seu printer server Linux estará funcional.
Era isso amigos. Se tiverem dúvidas, é só apresentar.
Abraço e até a próxima.
Linuxpoa