No último artigo, mostrei como configurar uma impressora de rede no OpenWRT. É grande a comodidade de uma impressora na rede.
Fazê-lo com uma impressora simples e sem custos (considerando que o roteador você já tem) é melhor ainda.
OK, impressora já está configurada e imprimindo pela rede. Mas o scanner?
OK, impressora já está configurada e imprimindo pela rede. Mas o scanner?
Atualmente são raras as impressoras puras. Em geral
elas agregam outras funções, principalmente um scanner. Neste post vamos configurar o SANE para permitir que máquinas remotas
possam digitalizar documentos pela multifuncional na rede.
Instalação
Vou considerar que partimos do ponto onde já existe uma impressora USB configurada no roteador. Se não for o caso, talvez algum passo da impressora
fique pendente (talvez a parte do USB). Se alguém estiver nesta situação (quer somente o scanner pela rede e não a impressão) e tiver problemas, comente ai que tentaremos
diagnosticar o que falta. O mesmo vale para conectar um scanner (não impressora). Se ele funciona em um Linux (pelo SANE), deve funcionar.
Antes de começar, você vai precisar de alguns mega de espaço em disco. Se não estiver usando uma unidade USB para estender o disco, esta é a sua oportunidade.
Você vai precisar instalar os seguintes pacotes do OpenWRT:
- sane-backends
- sane-frontends
Ele vai baixar mais alguns por dependência. Se tudo der certo, o comando "scanimage -L" deverá mostrar sua impressora. Se for uma HP, você vai precisar do pacote hplip. Infelizmente ele traz consigo dependências não desejadas, como o cups (eu avisei que precisaria de espaço...). Após a instalação, o scanimage vai funcionar para scanners HP:
root@router:~# scanimage -Ldevice `hpaio:/usb/Officejet_J4660_series?serial=BR145GXXXXXXXX' is a Hewlett-Packard Officejet_J4660_series all-in-one
Agora basta colocar o SANE para escutar na rede. Você precisa colocar os endereços (cliente ou de rede) autorizados a usar seu scanner em /etc/sane.d/saned.conf. Se quiser liberar acesso para qualquer cliente da rede, basta adicionar um +:
root@router:~# echo + >> /etc/sane.d/saned.confPodemos testar já neste ponto se os clientes podem alcançar o serviço. Rode o saned manualmente:
root@router:~# /usr/sbin/saned -d
Ele vai funcionar para um único comando, mas é suficiente para testar. Possivelmente ocorrerá um erro:
check_host: getaddrinfo for local hostname failed: Name or service not known
Isto ocorre porque o saned não conseguiu achar o endereço IP pelo nome do roteador. Você precisará adicionar este nome manualmente no /etc/hosts. O nome adicionado deve ser o mesmo que aparece no prompt do shell (após o "@" e antes do ":"):
root@router:~#
No meu caso, basta colocar "router" depois de localhost em /etc/hosts. Ficou assim:
127.0.0.1 localhost router
Pule para a configuração de um cliente e, se funcionar, volte para este ponto e complete a configuração do servidor.
Configuração do servidor
O sane depende de um superserver, um processo que espera por conexões e as repassa aos respectivos servidores. Isto simplifica o desenvolvimento do servidor e pode economizar memória (por poder disparar o serviço apenas quando alguém irá usá-lo).
Neste caso, a sugestão é instalar o xinetd. Instale o pacote xinetd do OpenWRT.
Atualização: para impressoras multifuncionais, o uso do SANE faz com que o módulo usblp remova a entrada /dev/usb/lp0, que é usada para impressão. Desta forma, a impressão não funciona mais após o uso do scanner (até que a impressora ou o roteador sejam reiniciados ou o cabo reconectado). Para contornar o problema, sugiro a criação deste script /usr/sbin/saned.reload_usblp:
Ele precisa ter permissão de execução.
Atualização 3: a nova versão do OpenWRT (14.07) não apresenta este problema.
Neste caso, a sugestão é instalar o xinetd. Instale o pacote xinetd do OpenWRT.
#!/bin/sh
#
# When a SANE scanning occurs, /dev/usb/lp0 is lost.
# Reload usblp after the scanjob is finished in order to
# recreate /dev/usb/lp0
#
/usr/sbin/saned "$@"
rmmod usblp
insmod /lib/modules/$(uname -r)/usblp.ko
Atualização 3: a nova versão do OpenWRT (14.07) não apresenta este problema.
Você precisa criar o arquivo de configuração do SANE para o xinetd em /etc/xinetd.d/sane com este conteúdo:
service sane-portBasta disparar o xinetd e habilitá-lo para ligar com o roteador:
{
socket_type = stream
server = /usr/sbin/saned
protocol = tcp
user = root
group = root
wait = no
disable = no
}
/etc/init.d/xinetd enable
/etc/init.d/xinetd start
Seu scanner deve estar funcionando!
Clientes
Vou mostrar a configuração de um cliente em Linux. Quando estiver rodando em Windows, eu completo a parte do Windows e atualizo este artigo.
Linux
Em geral, as distribuições Linux já pré-instalam o SANE. Se for seu caso, basta editar /etc/sane.d/net.conf para configurar o SANE a buscar um scanner na rede. Só colocar uma linha que aponte para seu roteador. No meu caso, eu consigo alcançá-lo por router.lan. Pode ser também o IPv4 ou IPv6 dele. Para os mais acomodados, rode como root:
echo router.lan >> /etc/sane.d/net.conf
Lembre-se de ajustar o router.lan apropriadamente. Na sequência, o scanimage vai listar o scanner da rede.
cliente-linux $ scanimage -Ldevice `net:router.lan:hpaio:/usb/Officejet_J4660_series?serial=BR145GXXXXXXXX' is a Hewlett-Packard Officejet_J4660_series all-in-one
Note que diferentemente do scanimage no roteador, neste existe referência de que ele está na rede e no servidor router.lan. Se isto não funcionar, existe algum problema com seu saned. Para diagnosticar o problema, se estiver rodando manualmente o "saned -d", observe as mensagens na tela. Caso já esteja rodando ele no xinetd, olhe os logs do roteador (logread).
Se estiver rodando manualmente o "saned -d", depois do scanimage, ele irá encerrar. Para utilizar o scanner, você deve completar a configuração do servidor.
Windows
No Windows temos duas alternativas. A que recomendo é o wiasane. Ele cria um scanner virtual que acessa (via SANE) o scanner remoto. As versões atuais funcionam sem problemas em todos os meus testes.
Outra é o SaneTwain. Pode ser o zip ou o instalador windows. Ele é composto de um driver Twain e um aplicativo independente. Infelizmente, o driver só está preparado para ambientes 32-bit. Contudo, o aplicativo funciona perfeitamente. Depois de instalado ou descompactado, você terá acesso ao programa ScanImage.exe. Ele pode ser usado diretamente como um cliente do scanner. Na primeira execução ele irá permitir a confiuguração do servidor SANE (seu roteador). Ele deve ser suficiente para quem quer digitalizar para um arquivo de imagem. Porém, não consegui fazer o driver TWAIN funcionar possivelmente por estar em um sistema 64-bit (li comentários que funcionou mesmo o desenvolvedor avisando que não iria).
Outra é o SaneTwain. Pode ser o zip ou o instalador windows. Ele é composto de um driver Twain e um aplicativo independente. Infelizmente, o driver só está preparado para ambientes 32-bit. Contudo, o aplicativo funciona perfeitamente. Depois de instalado ou descompactado, você terá acesso ao programa ScanImage.exe. Ele pode ser usado diretamente como um cliente do scanner. Na primeira execução ele irá permitir a confiuguração do servidor SANE (seu roteador). Ele deve ser suficiente para quem quer digitalizar para um arquivo de imagem. Porém, não consegui fazer o driver TWAIN funcionar possivelmente por estar em um sistema 64-bit (li comentários que funcionou mesmo o desenvolvedor avisando que não iria).
É isso pessoal. Mais um ótimo uso para seu OpenWRT. Até a próxima.
PS: Ainda está na fila a divulgação automática da impressora na rede por ZeroConf.
Atualização 2:
Atualização 3: versão nova do OpenWRT funciona sem o workaround!