Quero ter acesso à minha impressora DCP 195C (Brother) pela LAN. Para isso comprei um raspberry pi e instalei o CUPS nele. O CUPS funciona bem e todo o resto também. Meu problema é que não consigo instalar os drivers que o irmão entrega (eles são apenas para x86 e x64) no meu pi. Existe uma opção que perdi para instalar o driver no meu pi?
Responder1
Resumindo: você precisa extrair o arquivo ppd do driver Linux
longo:
PRIMEIRO
- Acesse o site do Brothers Driver e pesquise DCP195:http://support.brother.com
- Baixe a versão deb do Linux de "Driver de impressora CUPSwrapper (pacote deb)"
- Abra o arquivo deb com uma ferramenta de compactação e siga o caminho até "dcp195ccupswrapper-1.1.3-1.i386/opt/brother/Printers/dcp195c/cupswrapper"
- Extraia o arquivo "brother_dcp195c_printer_en.ppd"
SEGUNDO
- Abra a interface web do cups via
https://192.168.1.2:631/admin
[substitua o ip por pi's] - Clique em "Adicionar impressora", selecione "Brother DCP-195C (Brother DCP-195C)" e pressione "continuar"
- Edite as próximas informações se necessário, marque "compartilhar impressora" e pressione "continuar"
- Em "Ou fornecer um arquivo PPD", navegue até o arquivo "brother_dcp195c_printer_en.ppd" extraído e carregue-o. Siga as próximas etapas...concluído
Depois disso, a impressora ficou disponível, mas com um erro: "Arquivo "/usr/lib/cups/filter/brlpdwrapperdcp195c" não disponível" Como instalei o driver no meu laptop Ubuntu, poderia simplesmente copiar o arquivo do meu laptop em / usr/lib/cups/filter/ para o pi
Depois disso, meu laptop conseguiu encontrar a impressora
Responder2
Você pode fazer o driver i386 funcionar no Raspberry Pi por meio de 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: https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=15526&start=25#p708038
Etapa 1: Instale o driver conforme as instruções na documentação da Brother
Você deve ter um diretório como /opt/brother/Printers/dcp195c/lpd
o do filtro binário brdcp195cfilter
. Este binário é chamado pelo filterdcp195c
shell script próximo a ele no mesmo diretório.
Acredito que eles oferecem um script de instalação agora, mas fiz sem. Existem instruções em algum lugar sobre o que precisa ser pré-instalado.
Etapa 2: fazer a emulação i386 funcionar
Isso está seguindo as etapas emhttps://wiki.debian.org/QemuUserEmulation
No final da etapa 2, você poderá executar binários i386 como binários normais. Em ps ax
, eles vão mostrar
Instale 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 habilitados automaticamente no Raspbian e no Debian.
Instale bibliotecas de suporte x86
No 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 Debian também servirá.
O repositório Raspbian não possui binários x86, então adicione uma [arch=armhf]
linha à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ê deseja um sistema multiarch com pacotes i386 e obtenha a libc i386. Para que a update
etapa funcione, você precisará importar e confiar nas chaves GPG do Debian para gerenciamento de pacotes.
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386
Neste ponto, você deverá ser capaz de executar o brdcp195cfilter
binário 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 esta saída, funcionou. A Error: invalid option !!
linha está brdcp195cfilter
reclamando que você deveria ter passado argumentos.
Opcional: remova a ld.so
mensagem de erro
Raspbian usa /etc/ld.so.preload
para pré-carregar a libarmmem
biblioteca em todos os processos. A biblioteca substitui algumas rotinas de memória caras por rotinas mais rápidas escritas em assembly ARM, mas não é estritamente necessária para executar o Raspbian.
É seguro ignorar o aviso, mas também é seguro remover ou comentar essa linha do arquivo /etc/ld.so.preload
. O aviso aparecerá 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 instável
No meu Raspberry, o dmesg
log alternava rapidamente entre estas 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 resolveu para mim foi acessar localhost:631
(a interface da web do CUPS) e modificar a impressora na seção "Impressoras" para que ela use o dispositivo USB reconhecido pelo CUPS em vez do usb://dev/usb/lp0
dispositivo.
Deixe a impressora receber dados em velocidade normal
brdcp195cfilter
é uma etapa do processo de impressão que recebe um enorme bitmap de entrada e o converte em algo que posteriormente é canalizado para o dispositivo de impressão. Medi um tamanho de entrada de aproximadamente 90 MB para uma mensagem simples “Olá, mundo” na parte superior da página.
A emulação no Raspberry não é rápida o suficiente para acompanhar a alimentação de dados da impressora. A impressão funciona, mas ouvi ruídos prejudiciais à saúde vindos dos motores da impressora ativos enquanto aguardava os dados.
Para corrigir isso, instale o utilitário sponge
do moreutils
pacote e edite filterdcp195c
para que a saída de $BRCONV $BRCONV_OP
(aka brdcp195cfilter
) seja canalizada sponge
. Deve haver três linhas dentro dos casos "PostScript", "PDF" e "*" no final do arquivo, terminando em ... | $BRCONV $BRCONV_OP | sponge
.
O que isso faz é engolir toda a saída do processo de conversão de longa duração e enviá-la para a impressora de uma só vez quando o conversor estiver concluído. Dessa forma, demora mais até a impressão começar, mas a impressora está recebendo seus dados em um ritmo normal.
( sponge
armazena os dados armazenados em buffer em um diretório temporário, para que você não fique limitado pela RAM do Raspberry Pi)
Responder3
A resposta de Guntherfoi muito útil. Este é parcialmente um acompanhamento de minha própria experiência e informações.
Não vi nenhum problema com os módulos do kernel; isso provavelmente foi corrigido nos últimos seis anos.
Testei isso primeiro em um Raspberry Pi 3. Imprime lentamente (cerca de 3 minutos por página), mas raramente uso a impressora, então é aceitável.
Para evitar a ld.so
mensagem de erro, você pode remover o raspi-copies-and-fills
pacote.
Achei necessário instalar o Debian libc6:i386
e o libc6:armhf
, porque esses pacotes exigem uma correspondência exata de versão, e a versão do Raspbian contém, por exemplo +rpi1
, . Os pacotes armhf do Debian parecem funcionar corretamente no Raspberry Pi 3; Acredito que eles deveriam funcionar no Raspberry Pi 2 (armv7) e posteriores, e no novo Raspberry Pi Zero 2 W, mas não no Raspberry Pi 1 ou Zero/W (armv6). Observe que qualquer pessoa que misture distribuições deve dar uma olhada em man apt_preferences
.
Eu queria usar um Raspberry Pi Zero W como meu servidor de impressão. Isso é ainda mais lento (cerca de 5 minutos por página) e não pode usar os pacotes armhf do Debian. Depois de muita leitura e tentativa e erro, consegui construir um libc6:i386
pacote "bootstrap" do Raspbian a partir do código-fonte.
Obter o código-fonte é fácil:
apt-get source glibc
cd glibc-N.NN
Acontece que o próximo passo é escolher os perfis de construção.
https://wiki.debian.org/BuildProfileSpec
cross
porque estamos compilando cruzadamentestage2
porque precisamos inicializar a glibcnobiarch
evita a construção de pacotes amd64/x32nocheck
elimina uma dependência de compilação
Achei que deveria ser possível instalar dependências de compilação da seguinte maneira:
sudo apt-get -a i386 --build-profiles=cross,stage2,nobiarch,nocheck build-dep glibc
No entanto, isso falhou devido a alguns pacotes indisponíveis, como perl:i386
. Talvez eu esteja fazendo algo errado? Parece provável, devido ao meu conhecimento muito limitado do pacote Debian. Em vez disso, fiz isso:
sudo apt-get build-dep glibc
Em seguida, verifique debian/control
qual versão gcc
é necessária e:
sudo apt install dpkg-cross gcc-10-i686-linux-gnu g++-10-i686-linux-gnu
Muitas vezes, isso é equivalente à instalação do crossbuild-essential-i386
.
Agora podemos construir.
dpkg-buildpackage --no-sign -b -a i386 --build-profiles=cross,stage2,nobiarch,nocheck -d
Notas:
- O processo de construção leva muito tempo em um Raspberry Pi armv6 de núcleo único. Eu recomendo usar um Raspberry Pi mais rápido para construir pacotes.
- Este pacote "bootstrap" foi suficiente para minhas necessidades. Não sei se pode ter algumas limitações funcionais.
- Quando tentei instalar meu
libc6:i386
pacote, ele entrou em conflito com o arquivo existentechangelog.Debian.gz
fornecido pelo Raspbianlibc6:armhf
. Renomeei o arquivo existente e o pacote foi instalado corretamente.