"Después del juego es antes del juego"
Sepp Herberger

Mostrando entradas con la etiqueta impresora. Mostrar todas las entradas
Mostrando entradas con la etiqueta impresora. Mostrar todas las entradas

domingo, 19 de enero de 2025

Convertir una impresora USB en una impresora de red mediante OpenWRT

Cuando tenemos una impresora USB y queremos compartirla en una red podemos hacer lo típico: conectarla a un PC y compartirla desde allí, pero queda mas profesional y glamouroso convertirla en una impresora de red con su IP propia sin tener que depender de un PC de usuario que puede estar apagado o encendido.

Para ello sólo necesitamos un punto de acceso wifi o router wifi casero que cuente con un puerto USB y tenga OpenWRT instalado. Ese tema lo hemos tratado largo y tendido en el blog y hay mucha documentación en Internet al respecto.

Una vez configurado el dispositivo OpenWRT debemos conectarlo a la red local con una dirección IP fija, esto dependerá de cada caso y puede hacerse via ethernet o como cliente de la red wifi. Es también un tema visto anteriormente en el bloq en esta entrada y esta otra entrada.

En mi caso conecto el OpenWRT a una red wifi, ya que donde quiero poner la impresora no hay puntos de red cercanos. La configuración seria algo así como:
# cat /etc/config/wireless 

config wifi-device 'radio0'
	option type 'mac80211'
	option hwmode '11g'
	option path 'pci0000:00/0000:00:00.0/0000:01:00.0/bcma0:1'
	option disabled '0'
	option country 'ES'

config wifi-iface 'wifinet0'
	option ssid 'NOMBRE_RED'
	option device 'radio0'
	option mode 'sta'
	option key 'PASSWORD_RED'
	option network 'wwan'
	option encryption 'psk2'
La red cableada la dejo con una IP fija por mi propia tranquilidad, aunque no la voy a usar para nada:
# cat /etc/config/network 

config interface 'loopback'
	option ifname 'lo'
	option proto 'static'
	option ipaddr '127.0.0.1'
	option netmask '255.0.0.0'

config globals 'globals'
	option ula_prefix 'fda2:68de:6428::/48'

config interface 'lan'
	option type 'bridge'
	option ifname 'eth0.1'
	option proto 'static'
	option ipaddr '192.168.2.1'
	option netmask '255.255.255.0'
	option ip6assign '60'

config switch
	option name 'switch0'
	option reset '1'
	option enable_vlan '1'

config switch_vlan
	option device 'switch0'
	option vlan '1'
	option ports '0 1 2 3 8t'

config interface 'wan'
	option proto 'dhcp'

config interface 'wwan'
	option proto 'dhcp'
Hecho esto, instalo los paquetes de OpenWRT necesarios para compartir la impresora USB:
# opkg update
# opkg install kmod-usb-printer
# opkg install p910nd luci-app-p910nd
# opkg install usbutils
A continuación pincho la impresora USB en el router y verifico que ha sido detectada con:
# lsusb
Si todo ha ido bien, debe haber creado en /dev un dispositivo para la impresora:
# ls /dev/usb/lp*
/dev/usb/lp0
Bien, nuestra impresora es /dev/usb/lp0. A continuación configuramos el servico p919nd, que es el encargado de compartir nuestra impresora USB por la red local.
# cat /etc/config/p910nd 

config p910nd
	option device '/dev/usb/lp0'
	option runas_root '0'
	option mdns '0'
	option mdns_ty 'My Printer Manufacturer/Model'
	option mdns_note 'Basement'
	option enabled '1'
	option port '0'
	option bidirectional '1'
Puntualizaciones:
  • En algunos modelos de impresora el parámetro bidirectional debe valer 0. No hay regla, es cuestión de prueba y error.
  • Cambiar device según el nombre del dispositivo detectado en /dev/usb/...
  • El port con valor 0 hará que la impresora escuche en el puerto TCP 9100. Puede tener los valores 0, 1 y 2 (9100, 9101 y 9102), compartiendo en 3 puestos distintos hasta tres impresoras.
  • Los parámetros mdns tienen que ver con el protocolo Bonjour y yo no los uso. Si te gusta usar esos protocolos tan vociferantes tienes mas información al respecto en este enlace.

Hemos dicho que el servivio p910nd escuchará en el puerto 9100, pero no hay que olvidar abrirlo en el firewall de OpenWRT:
# cat /etc/config/firewall 
...
...
...
#Allow attached network printer
config 'rule'
        option name 'p910nd'
        option 'src' 'lan wan'
        option 'proto' 'tcp'
        option 'dest_port' '9100'
        option 'target' 'ACCEPT'
Una vez definido todo, reiniciamos los servicios:
# /etc/init.d/firewall restart
# /etc/init.d/p910nd restart
Y verificamos que el proceso p910nd está corriendo:
# ps w | grep 910
1282 p910nd     936 S    {p910nd} /usr/sbin/p9100d -d -b -f /dev/usb/lp0 0
Ya en plan maniático plus, tampoco está de más verificar desde un PC de la red (repito: un PC distinto al router con el que estamos trabajando) que el puerto 9100 está abierto en el openwrt:
# nc -zv ip-router 9100
Connection to ip-router 9100 port [tcp/*] succeeded!
Con esto ya tenemos todo, solo faltaría configurar la impresora en los clientes que vayan a usarla. En este enlace se explica en detalle como hacerlo para Windows y OSX/Linux. Yo por mi parte como uso Linux simplemente añado esto a /etc/cups/printers.conf:
<Printer HP-ML1210>
PrinterId 488303
UUID urn:uuid:8a19c7aa-3365-356a-70cd-736155c2fcfc
Info 
Location 
MakeModel Samsung ML-1210 Foomatic/gdi (recommended)
DeviceURI socket://ip-router:9100
State Idle
StateTime 1737140264
ConfigTime 1737134460
Type 8392708
Accepting Yes
Shared No
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0
OpPolicy default
ErrorPolicy retry-job
</Printer>
Cada cual deberá cambiar la ip-router y el Modelo/Driver de impresora según sea su caso. Usar CUPS para añadir la impresora en lugar de editar mano el printers.conf siempre es una buena idea.

再见,同志!

viernes, 20 de enero de 2023

Lanzar un test de impresión desde un script

De vez en cuando aparece alguien quejándose de que una impresora "no imprime nada" y te ves obligado a ir hasta un puesto que tenga configurada la impresora y hacer una prueba por ti mismo, imprimiendo una página de prueba desde CUPS o una aplicación de escritorio (para descubrir muchas veces que la impresora funciona OK y era realmente un problema del usuario). Para librarme de ese engorro tengo un script que permite imprimir un test desde una conexión ssh. El script en cuestión es:
# cat test-printer.sh

#!/bin/bash
ruta=$(dirname "$0")
if [ "$#" -ne 2 ]
then
    echo "Uso: $(basename $0) <impresora> <bn|color>"
    echo "Impresoras disponibles el sistema:"
    lpstat -p | awk '{ print $3}'
else
    impresora="$1"
    case "$2" in
        "color" )fichero="${ruta}/TestPrinterColor.pdf"  
                 ;;
        "bn" )fichero="${ruta}/TestPrinterBN.pdf"
                 ;;
        *) echo "Error en segundo parámetro"
           exit 1
           ;;
    esac
    lp -d "$impresora" "$fichero" || echo "Error: revise la cola de impresión"
fi
exit 0
El script es muy básico: recibe como primer parámetro un nombre de impresora y como segundo una cadena "bn" o "color", para lanzar una prueba con un documento en blanco y negro o un documento en color. Si lo ejecutamos sin parámetros nos listará los nombres de las impresoras configuradas en el PC donde ejecutamos el script, que son aquellas con las que podremos lanzar el test.

Lo único que necesitamos es crear 2 ficheros pdf a nuestro gusto para los tests en blanco/negro y color, dejándolos en el mismo directorio en que está el script. Estos 3 ficheros los podemos poner en una ruta de red accesible desde cualquier máquina o bien los copiaremos a los PC desde donde queramos hacer las pruebas. Luego, ante un problema bastará entrar por ssh y hacer:
# ./test-printer.sh IMPRESORA_DPTO_12 color
Out!

jueves, 14 de mayo de 2020

Cacharreo (I): sustitución de rodillo de alimentación en impresora Samsung ML-1210

Ya va para 15 años que nos pusieron en los centros educativos las impresoras Samsung ML-1210:


Tras todo este tiempo han aguantado maltrato de usuarios, tóner genérico, polvo de tiza y cuerpos extraños introducidos por los alumnos en el mecanismo sin mayores problemas, pero poco a poco han ido fallando. Descartados sabotajes y averías eléctricas, el fallo mas común es de alimentación del papel: cuando intenta coger una hoja para imprimir el rodillo gira y gira y no llega agarrar el folio, o bien cuando lo coge se lleva varios folios de golpe y se atasca.

El problema está en las 2 piezas que realizarn la alimentación de papel: JC72-00124A Separation Pad y JC73-00018A Pickup Roller


Las piezas tienen los códigos de fabricante JC72-00124A y JC73-00018A, que son los que los identifican. Como se ve, en Aliexpress se consiguen por unos 5-6 euros. Si se compran en lotes de 5 o 10 salen mas baratos.

Vamos a ver como desmontar la impresora para sustituir esas piezas. Es muy aconsejable tener siempre a mano el Manual de Servicio de la impresora, donde vienen las referencias de todas las piezas y los pasos del desmontaje. Normalmente en https://www.manualslib.com se pueden encontrar muchos de estos manuales.

Bueno, pues esto es lo que nos llega en el paquete desde el País del Centro:


El rodillo de alimentación o pickup roller:



Y la almohadilla de separación o separation pad (en ocasiones viene acompañada de 2 muelles, en este caso no venía así que tendremos que reutilizar los que tenga la separation pad ya instalada en la impresora):



Bueno, vayamos por partes, como diría Jack el Destripador. Primero quitamos los 2 tornillos de la parte trasera (círculos rojos) y soltamos las pestañas (círculos verdes):


Damos la vuelta, abrimos la tapa y sacamos el tóner. Desmontamos la parte superior quitando los 2 tornillos :



Así se ve con ambas partes (frontal y trasera) quitadas:


Esa pieza negra en la parte superior es la LSU (Laser Scanning Unit) y debajo está el rodillo y el pad a sustituir, como se ve en esta imagen:


Para acceder a ellos hay que retirar la LSU quitando 4 tornillos marcados en rojo. A partir de aquí debemos fijarnos bien en todo lo que quitamos y desenganchamos, para luego montarlo de nuevo igual al finalizar. Aconsejo hacer muchas fotos de todos los pasos complicados para luego poder ver como estaban antes de desmontarlas y no forzar nada:






Extraemos ahora la unidad:


Si le damos la vuelta está el rodillo atornillado en la estructura que lo sostiene:


Quitamos los 2 tornillos y sacamos el rodillo, poniendo el nuevo:




Montamos la pieza otra vez como estaba y lo atornillamos de nuevo a la parte inferior de la LSU. Vamos ahora a por el pad. Como se ve, el pad tiene encima una solapa que es donde se apoya el taco de folios. Esa parte hay que levantarla y girarla 180º por completo para poder acceder al pad, pero para ello hay que desenganchar el engranaje marcado en rojo:




Una vez levantamos esta solapa ya podemos extraer el pad. Simplemente hay que soltarlo de la parte trasera:


Una vez extraído ya podemos cambiarlo por el nuevo. Si no venía con muelles propios le ponemos los del antiguo pad. Esos muelles no suelen fallar y pueden reutilizarse.


Una vez hecho esto hay que volver a montar todo como estaba en orden inverso, por eso es importante fijarse bien (reitero: haciendo fotos si es necesario) durante el desmontaje. Una parte delicada es el rodillo bajo la LSU, que va unido al brazo que señalamos aqui:


Hace falta un poco de maña para engancharlo bien, quedar el roller acoplado al brazo como estaba y a la vez encajar la LSU, pero al final lo logramos.

Y...¿como va todo una vez cambiado?. Casi como nueva: hemos impreso tiradas de 200 o 300 folios sin problemas de ningún tipo. Si esto no falla podemos tener impresora para otros 10 o 15 años.

sábado, 13 de mayo de 2017

Compartir impresora de Linux a Linux

Normalmente las impresoras compartidas de nuestra red traen su tarjeta ethernet, con lo cual accedemos directamente a ellas desde CUPS con la URI socket://172.XX.YY.ZZ o similar. Pero a veces tenemos una impresora USB conectada a un PC con Linux y queremos compartirla hacia otros PC de la red.

La primera tentación es añadir/modificar la impresora en CUPS (http://localhost:631) y darle a la opción "Compartir impresora".


Esto es rápido y sucio: la impresora se anunciará en la red de forma promiscua, los otros CUPS que tengan habilitado el escaneo de red (opcion "Browsing On" en sus /etc/cups/cupsd.conf) la verán y la añadirán a su lista de impresoras, los usuarios también la verán en cualquier búsqueda y al final todo el mundo podrá imprimir por ella. Saldrán continuamente hojas que nadie sabe quién ha mandado.

La segunda opción es hacerla compartida de forma discreta. Para ello la impresora no será configurada como compartida en CUPS desde el entorno gráfico. En cambio, la pondremos como compartida en /etc/cups/printers.conf. Para ello pararemos CUPS con
# /etc/init.d/cups stop
Editaremos nuestra impresora en /etc/cups/printers.conf modificando Accepting y Shared para ponerlos a "Yes":
# Printer configuration file for CUPS v1.7.5
# Written by cupsd
# DO NOT EDIT THIS FILE WHEN CUPSD IS RUNNING

UUID urn:uuid:b4f30c34-4298-33a9-6266-b98a3ec00ebd
Info BN_SALA_PROFESORES
Location Sala Profesores
DeviceURI usb://Lexmark%20/X1100%20Series
State Idle
StateTime 1494510320
Reason opc-life-over-warning
Type 8392780
Accepting Yes
Shared Yes
....
Y reiniciamos de nuevo CUPS:
# /etc/init.d/cups start
No basta con esto, debemos además configurar en el interfaz web (http://localhost:631) las opciones "Allow remote administration" y "Allow users cancel any job", para que la impresora compartida pueda ser accedida y controlada desde los PC clientes:



Si vamos ahora a ver la configuración de la impresora:


Vemos que aparece como "No compartida". Que no cunda el pánico: si está compartida, pero no lo está vociferando por la red.

Bueno, con esto tenemos configurado el ordenador servidor al que está conectada la impresora por USB. Vamos a configurar los clientes la impresora con la URI:
http://mipc:631/printers/BN_SALA_PROFESORES
En el CUPS del PC cliente vamos a su interfaz web en http://localhost:631 y le damos a "Añadir impresora" eligiendo http o https:


y por último la añadimos poniendo la URI correspondiente que enlaza con el CUPS de la impresora remota (http://mipc:631/printers/BN_SALA_PROFESORES):


Solo falta terminar eligiendo el driver y finalizando la configuración.

Bueno, pues nada, la próxima semana nos espera un tiempo duro de parcheo de Windows para este virus de los amigos de la NSA, ya que I don't wanna cry.