Debian ARM y Brother DCP195C con CUPS

Debian ARM y Brother DCP195C con CUPS

Quiero tener acceso a mi impresora DCP 195C (Brother) a través de LAN. Para ello compré una Raspberry Pi y le instalé CUPS. CUPS funciona bien y todo lo demás también funciona sin problemas. Mi problema es que no puedo instalar los drivers que entrega brother (son solo para x86 y x64) en mi pi. ¿Hay alguna opción que me perdí para instalar el controlador en mi pi?

Respuesta1

Breve: debe extraer el archivo ppd del controlador de Linux

largo:

PRIMERO

SEGUNDO

  • Abra la interfaz web de cups a través de https://192.168.1.2:631/admin [reemplace la ip con pi]
  • Haga clic en "Agregar impresora", seleccione "Brother DCP-195C (Brother DCP-195C)" y presione "continuar"
  • Edite la próxima información si es necesario, marque "compartir impresora" y presione "continuar"
  • En "O proporcione un archivo PPD", busque el archivo "brother_dcp195c_printer_en.ppd" extraído y cárguelo. Siga los siguientes pasos... listo

Después de eso, la impresora estuvo disponible, pero con un error: "Archivo "/usr/lib/cups/filter/brlpdwrapperdcp195c" no disponible" Debido a que instalé el controlador en mi computadora portátil Ubuntu, simplemente pude copiar el archivo desde mi computadora portátil en / usr/lib/cups/filter/ al pi

Después de esto, mi computadora portátil pudo encontrar la impresora.

Respuesta2

Puede hacer que el controlador i386 funcione en Raspberry Pi mediante emulación, aunque tenga un conjunto de instrucciones diferente. Es muy lento y tarda unos minutos hasta que llega la copia impresa, pero funciona.

Encontré la pista en esta publicación del foro: https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=15526&start=25#p708038

Paso 1: instale el controlador según las instrucciones de la documentación de Brother

Debería tener un directorio como /opt/brother/Printers/dcp195c/lpdel del filtro binario brdcp195cfilter. Este binario es llamado por el filterdcp195cscript de shell justo al lado en el mismo directorio.

Creo que ahora ofrecen un script de instalación, pero lo hice sin él. Hay instrucciones en algún lugar sobre lo que debe preinstalarse.

Paso 2: haga funcionar la emulación i386

Esto es siguiendo los pasos enhttps://wiki.debian.org/QemuUserEmulation

Al final del paso 2, debería poder ejecutar archivos binarios i386 como si fueran archivos binarios normales. En ps ax, mostrarán

Instalar Qemu

Instale los paquetes qemuy binfmt-support.qemu-user-static

Ejecute update-binfmts --displaypara ver qué formatos binarios son compatibles. Deberían habilitarse automáticamente en Raspbian y Debian.

Instalar bibliotecas de soporte x86

En Raspbian, agrega una línea como esta a tu /etc/apt/sources.list:

## Debian i386
deb [arch=i386] http://http.debian.net/debian stable main contrib non-free

Otro repositorio de Debian también servirá.

El repositorio de Raspbian no tiene binarios x86, así que agregue una [arch=armhf]línea a las líneas existentes que comiencen con deb. Las líneas que comienzan con deb-srcse pueden mantener como están.

Dígale a Raspbian que desea un sistema multiarca con paquetes i386 y obtenga la libc i386. Para que el updatepaso funcione, deberá importar y confiar en las claves GPG de Debian para la administración de paquetes.

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386

En este punto, deberías poder ejecutar el brdcp195cfilterbinario que viene con el controlador:

$ ./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 !!

Si ve este resultado, funcionó. La Error: invalid option !!línea se brdcp195cfilterqueja de que deberías haber presentado argumentos.

Opcional: eliminar el ld.somensaje de error

Raspbian utiliza /etc/ld.so.preloadpara precargar la libarmmembiblioteca en todos los procesos. La biblioteca reemplaza algunas costosas rutinas de memoria con rutinas más rápidas escritas en ensamblador ARM, pero no es estrictamente necesaria para ejecutar Raspbian.

Es seguro ignorar la advertencia, pero también eliminar o comentar esa línea de /etc/ld.so.preload. La advertencia aparecerá en los registros de errores de CUPS si no está deshabilitada.

Paso 3: Haz que esto funcione con CUPS

Debería tener una instalación de CUPS siguiendo las instrucciones del sitio web de Brother.

Conexión USB inestable

En mi Raspberry, el dmesgregistro alternaba rápidamente entre estas líneas en algún 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

Lo que me solucionó fue ir a localhost:631(la interfaz web de CUPS) y modificar la impresora en la sección "Impresoras" para que utilice el dispositivo USB reconocido por CUPS en lugar del usb://dev/usb/lp0dispositivo.

Deje que la impresora reciba datos a una velocidad normal

brdcp195cfilteres un paso en el proceso de impresión que recibe un enorme mapa de bits de entrada y lo convierte en algo que luego se canaliza al dispositivo de impresión. Medí un tamaño de entrada de ~90 MB para un mensaje simple de "Hola mundo" en la parte superior de la página.

La emulación en Raspberry no es lo suficientemente rápida como para seguir alimentando datos a la impresora. La impresión funciona, pero escuché ruidos nocivos provenientes de los motores de la impresora activos mientras esperaba datos.

Para solucionar este problema, instale la utilidad spongedesde el moreutilspaquete y edítela filterdcp195cpara que la salida de $BRCONV $BRCONV_OP(también conocido como brdcp195cfilter) se canalice sponge. Debe haber tres líneas dentro de los casos "PostScript", "PDF" y "*" al final del archivo, terminando en ... | $BRCONV $BRCONV_OP | sponge.

Lo que esto hace es engullir toda la salida del proceso de conversión de larga duración y solo enviarla a la impresora de una vez cuando el convertidor está terminado. De esa manera, la impresión tarda más en comenzar, pero la impresora recibe sus datos a un ritmo normal.

( spongealmacena los datos que almacena en un directorio temporal, por lo que no está limitado por la RAM de la Raspberry Pi)

Respuesta3

La respuesta de Gunther.fue muy útil. Esto es parcialmente un seguimiento con mi propia experiencia e información.

No vi ningún problema con los módulos del kernel; Esto probablemente se solucionó en los últimos seis años.

Probé esto primero en una Raspberry Pi 3. Se imprime lentamente (~3 minutos por página) pero rara vez uso la impresora, por lo que es aceptable.

Para evitar el ld.somensaje de error, puede eliminar el raspi-copies-and-fillspaquete.

Encontré que era necesario instalar Debian libc6:i386y libc6:armhf, porque estos paquetes requieren una versión exacta y la versión de Raspbian contiene, por ejemplo +rpi1, . Los paquetes armhf de Debian parecen funcionar correctamente en Raspberry Pi 3; Creo que deberían funcionar en Raspberry Pi 2 (armv7) y posteriores, y en la nueva Raspberry Pi Zero 2 W, pero no en Raspberry Pi 1 o Zero/W (armv6). Tenga en cuenta que cualquiera que mezcle distribuciones debería consultar man apt_preferences.

Quería utilizar una Raspberry Pi Zero W como servidor de impresión. Esto es aún más lento (~5 minutos por página) y no puede usar los paquetes armhf de Debian. Después de mucha lectura y prueba y error, logré crear un libc6:i386paquete "arranque" de Raspbian desde el código fuente.

Obtener el código fuente es fácil:

apt-get source glibc
cd glibc-N.NN

Resulta que el siguiente paso es elegir perfiles de construcción.

https://wiki.debian.org/BuildProfileSpec

  • crossporque estamos compilando de forma cruzada
  • stage2porque necesitamos arrancar glibc
  • nobiarchevita la creación de paquetes amd64/x32
  • nocheckelimina una dependencia de compilación

Pensé que debería ser posible instalar dependencias de compilación de la siguiente manera:

sudo apt-get -a i386 --build-profiles=cross,stage2,nobiarch,nocheck build-dep glibc

Sin embargo, eso falló debido a algunos paquetes no disponibles, como perl:i386. ¿Quizás estoy haciendo algo mal? Parece probable, debido a mi conocimiento muy limitado del empaquetado de Debian. En su lugar hice esto:

sudo apt-get build-dep glibc

Luego verifique debian/controlqué versión gccse requiere y:

sudo apt install dpkg-cross gcc-10-i686-linux-gnu g++-10-i686-linux-gnu 

Esto suele equivaler a instalar crossbuild-essential-i386.

Ahora podemos construir.

dpkg-buildpackage --no-sign -b -a i386 --build-profiles=cross,stage2,nobiarch,nocheck -d

Notas:

  • El proceso de construcción lleva mucho tiempo en una Raspberry Pi armv6 de un solo núcleo. Recomiendo usar una Raspberry Pi más rápida para crear paquetes.
  • Este paquete "bootstrap" fue suficiente para mis necesidades. No sé si podría tener algunas limitaciones funcionales.
  • Cuando intenté instalar mi libc6:i386paquete, entró en conflicto con el changelog.Debian.gzarchivo existente proporcionado por Raspbian libc6:armhf. Cambié el nombre del archivo existente y el paquete se instaló correctamente.

información relacionada