Debian ARM e Brother DCP195C com CUPS

Debian ARM e Brother DCP195C com CUPS

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/lpdo do filtro binário brdcp195cfilter. Este binário é chamado pelo filterdcp195cshell 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-supporte qemu-user-static.

Execute update-binfmts --displaypara 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-srcpodem 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 updateetapa 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 brdcp195cfilterbiná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á brdcp195cfilterreclamando que você deveria ter passado argumentos.

Opcional: remova a ld.somensagem de erro

Raspbian usa /etc/ld.so.preloadpara pré-carregar a libarmmembiblioteca 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 dmesglog 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/lp0dispositivo.

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 spongedo moreutilspacote e edite filterdcp195cpara 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.

( spongearmazena 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.somensagem de erro, você pode remover o raspi-copies-and-fillspacote.

Achei necessário instalar o Debian libc6:i386e 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:i386pacote "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

  • crossporque estamos compilando cruzadamente
  • stage2porque precisamos inicializar a glibc
  • nobiarchevita a construção de pacotes amd64/x32
  • nocheckelimina 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/controlqual 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:i386pacote, ele entrou em conflito com o arquivo existente changelog.Debian.gzfornecido pelo Raspbian libc6:armhf. Renomeei o arquivo existente e o pacote foi instalado corretamente.

informação relacionada