![Debian ARM y Brother DCP195C con CUPS](https://rvso.com/image/1415041/Debian%20ARM%20y%20Brother%20DCP195C%20con%20CUPS.png)
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
- Vaya al sitio web de Brothers Driver y busque DCP195:http://support.brother.com
- Descargue la versión deb de Linux de "Controlador de impresora CUPSwrapper (paquete deb)"
- Abra el archivo deb con una herramienta de compresión y siga la ruta hasta "dcp195ccupswrapper-1.1.3-1.i386/opt/brother/Printers/dcp195c/cupswrapper"
- Extraiga el archivo "brother_dcp195c_printer_en.ppd"
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/lpd
el del filtro binario brdcp195cfilter
. Este binario es llamado por el filterdcp195c
script 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 qemu
y binfmt-support
.qemu-user-static
Ejecute update-binfmts --display
para 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-src
se 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 update
paso 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 brdcp195cfilter
binario 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 brdcp195cfilter
queja de que deberías haber presentado argumentos.
Opcional: eliminar el ld.so
mensaje de error
Raspbian utiliza /etc/ld.so.preload
para precargar la libarmmem
biblioteca 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 dmesg
registro 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/lp0
dispositivo.
Deje que la impresora reciba datos a una velocidad normal
brdcp195cfilter
es 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 sponge
desde el moreutils
paquete y edítela filterdcp195c
para 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.
( sponge
almacena 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.so
mensaje de error, puede eliminar el raspi-copies-and-fills
paquete.
Encontré que era necesario instalar Debian libc6:i386
y 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:i386
paquete "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
cross
porque estamos compilando de forma cruzadastage2
porque necesitamos arrancar glibcnobiarch
evita la creación de paquetes amd64/x32nocheck
elimina 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/control
qué versión gcc
se 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:i386
paquete, entró en conflicto con elchangelog.Debian.gz
archivo existente proporcionado por Raspbianlibc6:armhf
. Cambié el nombre del archivo existente y el paquete se instaló correctamente.