Discuta este tópico no fórum

Se este conteúdo te ajudou, deixe um presente!

sábado, 3 de maio de 2014

OpenWRT: Compartilhando sua impressora na rede

Novamente digo: A porta USB no roteador o torna muito versátil. Em mais um dos usos da USB, vou configurar uma impressora compartilhada na rede. Em resumo, isto vai transformar sua impressora USB comum em uma impressora de rede.

Um servidor de impressão deve receber os pedidos de impressão e repassá-los a uma impressora. Um dos mais avançados que existe no mercado é o CUPS, que faz tudo e mais um pouco: gerencia filas, aplica filtros, usuários, etc. Tenho um servidor de impressão com CUPS sendo utilizado para imprimir milhares de folhas ao dia sem qualquer problema faz anos.

Voltemos a realidade do roteador. Como sabemos, o roteador é um dispositivo com recursos limitados. E, dos recursos mais limitados, temos o espaço em disco. Desta forma, não vai aguentar armazenar trabalhos na fila para impressão. Além disto, não é muito saudável escrever dados temporários no disco pois vai reduzir a vida útil da flash. Ao invés de instalar um CUPS com seus gerenciamentos avançados, a sugestão é instalar um servidor de impressão que apenas repassa os trabalhos para a impressora.

Um dos servidores ideias para esta tarefa é o p910nd. Ele escuta em uma porta padrão e aguarda receber os dados. Quando receber um novo trabalho, simplesmente o repassa para a impressora sem qualquer tratamento. Não tem spool local e não escreve no disco. Não tem autenticação de usuário, driver de impressora no servidor, etc. Para clientes residenciais e pequenas empresas, pode ser a solução ideial.
Obs: É provavel que o CUPS rode sem problemas no roteador, desde que você tenha um armazenamento externo e memória suficiente.
A instalação do p910nd é simples. O primeiro passo é instalar o módulo usb-printer do kernel (também possível pela WEB):
opkg update 
opkg install kmod-usb-printer 
Logo ao instalar ele será carregado. Se você conectar a impressora (ou se ela já estiver conectada), vai aparecer esta mensagem no kernel:
[  603.460000] usblp0: USB Bidirectional printer dev 6 if 1 alt 0 proto 2 vid 0x03F0 pid 0x2B12
E também este dispositivo deve aparecer:
router# ls -l /dev/usb/lp0
crw-r--r--    1 root     root      180,   0 May  3 01:36 /dev/usb/lp0
Existe também driver para porta paralela (kmod-lp), mas acho que não se aplica mais nas impressora atuais.

Agora basta instalar o p910nd:
opkg install p910nd
A configuração, como as demais feitas no OpenWRT, é no diretório /etc/config. No meu caso, uma configuração bem simples foi suficiente:
/etc/config/p910nd:
config p910nd
        option device        /dev/usb/lp0
        option port          0
        option bidirectional 1
        option enabled       1

Não esqueça do "enabled 1"! A porta 0 significa porta 9100. A porta 1, 9101 e assim por diante. Na dúvida, para uma impressora, deixe a 0, que é a padrão.


Para quem tem disco sobrando e pouca intimidade com o vi, tem também uma interface WEB para configurá-lo:
opkg install luci-app-p910nd
E, por fim, ative e dispare o serviço (também possível pela WEB):
/etc/init.d/p910nd start/etc/init.d/p910nd enable
A partir deste pronto, a sua impressora está pronta para ser adicionada nos clientes.

Linux 

A configuração da impressora em um Linux é feita no CUPS. Existem algumas interfaces para este fim mas, no geral, vão oferecer estas opções:

Troque o meuroteador por um nome pelo qual você consegue pingar o roteador (ou seu endereço IP). A porta 9100 é a usada para a opção "port 0" do p910nd. Se usar outra, ajuste conforme desejado. Escolha o fabricante e modelo adequado. Pronto!
  1. Selecione a opção para adicionar uma nova impressora.
  2. Escolha o tipo "AppSocket/HP JetDirect".
  3. Na URL da conexão, use:
    1. socket://meuroteador:9100
  4. Troque o meuroteador por um nome pelo qual você consegue pingar o roteador (ou seu endereço IP).
  5. A porta 9100 é a usada para a opção "port 0" do p910nd. Se usar outra, ajuste conforme desejado.
  6. Selecione o fabricante e modelo correto para selecionar o driver correspondente.
  7. Pronto!
Neste ponto, sua impressora será visível como se estivesse conectada pela USB.

Windows

Windows é um pouco mais complicado.
  1. Vá no painel de controle/adicionar uma impressora;
  2. Escolha a opção para impressora de rede.
    1. Ele vai tentar detectar mas não vai funcionar. Pode parar;
  3. Selecionar a opção "A impressora que desejo não está na lista". Avançar;
  4. Adicionar uma impressora usando um endereço TCP/IP...Avançar;
  5. Tipo será "TCP/IP";
  6. No nome do host ou endereço IP, coloque a informação do seu rotador;
  7. Nome da porta, qualquer um (como p910nd);
  8. Não marque para ele consultar a impressora para selecionar o driver. Avançar;
    1. Agora ele vai tentar fazer algo por vários segundos e não vai funcionar. Aguarde;
  9. Na parte de mais informações, selecione Personalizado. Clique em "Configurações";
    1. O protocolo é RAW;
    2. Número da porta será 9100 (padrão) se usada a opção "port 0" do p910nd;
    3. O resto deve estar em branco ou desabilitado;
    4. OK
  10. Avançar
  11. Escolha o driver correto que você usaria caso ela estivesse conectada pela USB. Avançar;
  12. Se o driver já estiver instalado, mantenha-o. Avançar;
  13. Escolha um nome para sua impressora. Avançar. Avançar...


Mais adiante vou tentar montar um artigo de como divulgar a impressora por zeroconf. Neste caso, espero que ele detecte de maneira mais simples e até mesmo selecione automaticamente o driver. Mas isto é detalhe e válido para ambientes com diversos equipamentos ou muita rotatividade.

Até a próxima.

12 comentários:

  1. Olá Luiz, este artigo veio a calhar, assim como todos os seus artigos da série, que me ajudaram a configurar o openwrt no meu router.
    Tenho um tp-link wr1043-nd com um pen-drive na porta estendendo a memória. Ainda não testei mas se eu colocar um hub dá para plugar os dois, impressora e o pendrive? Valeu

    ResponderExcluir
    Respostas
    1. Sim, o problema do HUB é se colocar muitos equipamentos sem alimentação. Um modem 3g, por exemplo, exige um pocado de energia. Se fosse o caso, você precisaria de um hub alimentado. Porém, para ligar um pendrive e uma impressora, ele vai aguentar. Eu uso desta forma (pendrive, HUB e impressora) e com mais um HD externo (com alimentação própria) sem problemas.

      Excluir
    2. Eu uso um HUB USB de 6 portas no wr1043nd. E já cheguei a ligar um HD de 1 terá com 4 partições montadas, 1 pen drive e 1 impressora. O segredo é usar um HUB com alimentação própria, esses HUBs passivos são muito limitados e como o Luiz disse, quanto mais aparelhos plugados mais energia necessitam, e correta na porta usb, todos sabemos, que é muito baixa. Por isso um modelo de HUB que possua tomada, para conectar a rede elétrica resolve o problema.

      Excluir
  2. Eu gostaria muito de ver um tutorial de CUPS para Openwrt ou deste tal de zeroconf, nunca vi nenhum tutorial sobre eles no OpenWRT em português. Gostaria muito de instalar o CUPS, Já tentei e fiquei decepcionado, Já usava CUPS no Debian, mas no OpenWRT, o CUPS é mais enxuto, não vem com os drivers e eu não consegui instalar a impressora com ele, até pra acessar a pagina web de configuração, só foi possível instalando o "elinks" no próprio OpenWRT, pois usando Browser no cliente, a navegação funcionava mas algumas funções ficavam bloqueadas.

    ResponderExcluir
  3. Olá Luiz, tenho um wdr3600 e uma HP Photosmart c3180 instalei tudo bonito: sane, hplip e cups. Funcionando o escaneamento na rede, porém, meu problema é a impressão. Usei o ppd certo e tudo o mais, a impressora puxa o papel e solta sem escrever nada. Alguma idéia?

    Grato.

    ResponderExcluir
    Respostas
    1. Olá Anônimo,

      Só para garantir, o PPD pode ser validado conectando a impressora diretamente no Linux. Pelo comportamento, parece ser este o problema.

      Observe os logs do sistema e do kernel ao conectar a impressora e ao imprimir. Pode ter alguma coisa importante que te ajude.


      Excluir
    2. Olá André,

      Então, não tenho máquina linux aqui para testar, aparentemente nada de errado também com o PPD segundo o cups:

      ▼ Queue Name ▼ Description Location Make and Model Status
      HP_Photosmart_C3100_series HP Photosmart C3100 series Local HP Photosmart c3100 Series hpijs, 3.14.6

      Como poderia observar esses logs? Poderia de repente enviar esse PPD testado?

      GRato

      Ps: Desculpe a ignorância

      Excluir
    3. Olá Luiz,

      Agora apresenta esse erro
      dle - "Filter "/usr/lib/cups/filter/foomatic-rip" for printer "HP_Photosmart_C3100_series" not available: No such file or directory".

      Realmente nao tem esse link... estranho.

      Ps: Desculpe pelo André no post acima... confundi!

      Excluir
    4. Leonardo,

      O PPD não é necessário no openwrt quando está sendo usado o p9120nd. Ele só é necessário no cliente e se este for Linux.

      Se for usar cups no openwrt, é outra história fora do escopo deste artigo. Mas, de qualquer forma, aparentemente falta instalar um pacote que contenha o arquivo /usr/lib/cups/filter/foomatic-rip

      Excluir
  4. Olá, boa tarde!

    Muito interessante esse tópico, observo que o software OpenWRT é bastante versátil.

    Tenho um roteador TP-Link TL-WR740N, ele não tem porta usb, atualizando o filmware deste roteador para o OpenWRT, consigo instalar uma impressora usb através de um adaptador usb/rj45, ligando-o a uma porta rj45 do roteador?

    Atenciosamente,

    Rogério Almeida.

    ResponderExcluir
    Respostas
    1. adaptador usb/rj45? Só se ele converter USB em rede ethernet e ter o driver no OpenWRT. Realmente desconheço esse adaptador mas acho que ele adaptador é só físico (para usar um cabo de rede como extensão USB). Se for barato (menos que R$ 50) deve ser algo assim como falei. Enfim, não deve funcionar.

      Acho que é mais simples comprar um roteador com USB ;)

      Excluir
  5. Boa noite Luiz!
    Como seria na questão de celulares? (Ali você falou Linux, Windows e como seria no Android?)

    ResponderExcluir