Você pode obter o driver i386 trabalhando no Raspberry Pi por emulação, mesmo que ele tenha um conjunto de instruções diferente. É muito lento e leva alguns minutos até a impressão chegar, mas funciona.
Encontrei a dica nesta postagem do fórum:
link
Passo 1: Instale o driver conforme instruído na documentação da Brother
Você deve ter um diretório como /opt/brother/Printers/dcp195c/lpd
com o filtro binário brdcp195cfilter
. Esse binário é chamado pelo script filterdcp195c
ao lado dele no mesmo diretório.
Eu acredito que eles oferecem um script de instalação agora, mas eu fiz isso sem. Há instruções em algum lugar que precisam ser pré-instaladas.
Etapa 2: Obter a emulação i386 em funcionamento
Isso segue as etapas do link
No final da etapa 2, você deve ser capaz de executar binários i386 como binários regulares. Em ps ax
, eles mostrarão
Instalar o Qemu
Instale os pacotes qemu
, binfmt-support
e qemu-user-static
.
Execute update-binfmts --display
para ver quais formatos binários são suportados.
Eles devem ser ativados automaticamente em Raspbian e Debian.
Instalar bibliotecas de suporte x86
Em Raspbian, adicione uma linha como esta ao seu /etc/apt/sources.list
:
## Debian i386
deb [arch=i386] http://http.debian.net/debian stable main contrib non-free
Outro repositório da Debian também fará.
O repositório Raspbian não tem binários x86, então adicione uma linha [arch=armhf]
às linhas existentes começando com deb
. As linhas que começam com deb-src
podem ser mantidas como estão.
Diga ao Raspbian que você quer um sistema multiarch com pacotes i386, e obtenha o i386 libc. Para que a etapa update
funcione, você precisará importar e confiar nas chaves GPG do Debian para o gerenciamento de pacotes.
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386
Neste ponto, você deve ser capaz de executar o binário brdcp195cfilter
que vem com o driver:
$ ./brdcp195cfilter
ERROR: ld.so: object '/usr/lib/arm-linux-gnueabihf/libarmmem.so' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.
Error: invalid option !!
Se você vir essa saída, funcionou. A linha Error: invalid option !!
é brdcp195cfilter
reclamando que você deveria ter passado argumentos.
Opcional: remova a mensagem de erro ld.so
O Raspbian usa /etc/ld.so.preload
para pré-carregar a biblioteca libarmmem
em todos os processos. A biblioteca substitui algumas rotinas de memória caras por rotinas mais rápidas escritas no assembly ARM, mas não é estritamente necessário executar o Raspbian.
É seguro ignorar o aviso, mas também é seguro remover ou comentar essa linha de /etc/ld.so.preload
. O aviso será exibido nos logs de erros do CUPS, se não estiver desativado.
Etapa 3: faça isso funcionar com o CUPS
Você deve ter uma instalação do CUPS seguindo as instruções do site da Brother.
Conexão USB lenta
No meu Raspberry, o log dmesg
estava alternando rapidamente entre essas linhas em algum momento:
[58981.586842] usblp0: removed
[59222.794260] usblp 1-1.3:1.0: usblp0: USB Bidirectional printer dev 8 if 0 alt 0 proto 2 vid 0x04F9 pid 0x0222
O que eu consertei foi ir para localhost:631
(a interface web do CUPS) e modificar a impressora na seção "Impressoras" para que use o dispositivo USB reconhecido pelo CUPS em vez do dispositivo usb://dev/usb/lp0
.
Deixe a impressora receber dados a uma velocidade normal
brdcp195cfilter
é uma etapa no processo de impressão que recebe um enorme bitmap de entrada e o converte em algo que depois é canalizado para o dispositivo de impressora. Eu medi um tamanho de entrada de ~ 90MB para uma simples mensagem "Hello world" no topo da página.
A emulação no Raspberry não é rápida o suficiente para acompanhar a alimentação da impressora com dados. A impressão funciona, mas ouvi barulhos insalubres dos motores da impressora sendo ativos enquanto aguardava dados.
Para corrigir isso, instale o utilitário sponge
do pacote moreutils
e edite filterdcp195c
para que a saída de $BRCONV $BRCONV_OP
(a.k.a. brdcp195cfilter
) seja canalizada com sponge
. Deve haver três linhas dentro dos casos "PostScript", "PDF" e "*" no final do arquivo, terminando em ... | $BRCONV $BRCONV_OP | sponge
.
O que isto faz é engolir toda a saída do processo do conversor de longa duração e enviá-lo apenas para a impressora de uma só vez quando o conversor é feito. Dessa forma, demora mais até que a impressão comece, mas a impressora está recebendo seus dados em um ritmo normal.
( sponge
armazena os dados que ele armazena em um diretório temporário, então você não está limitado pela RAM do Raspberry Pi)