CUPS; Trucos útiles

Brandon Nielsen, Zdenek Dohnal Versión F31 onwards Last review: 2021-06-16

Como instalar una cola de impresora

El hecho de si es necesario instalar una impresora o no depende de varias cosas:

  • que es el dispositivo que desea instalar - una impresora desde servidor CUPS remoto (llamado cola de impresión remota) o una impresora,

  • donde está el dispositivo que desea instalar; conectado por USB a su PC, en su red local, en una red diferente o instalado en un servidor remoto,

  • cuanto de antiguo es el dispositivo que desea instalar:

    • Impresoras independientes: la mayoría de las impresoras SOHO (pequeñas oficinas y oficinas domésticas) y de oficina fabricadas después de 2010 tienen al menos una forma de admitir la impresión sin controladores, mientras que los dispositivos más antiguos dependen de controladores, ya sean clásicos o aplicaciones de impresora,

    • las colas de impresión remota sobre un servidor - cualquier SO con CUPS 2.2.8 y más nuevos o los SO donde admite IPP Everywhere fue portado (p.e. RHEL 8) es capaz de proporcionar IPP Everywhere, en otro caso una combinación de unidad y cola en bruto es necesaria en comunicación cliente-servidor,

  • que es el propósito del dispositivo donde instala la impresora; dispositivo de punto final, el cual es utilizado por el usuario como un escritorio, o un servidor, que comparte aún más las impresoras instaladas,

  • que son sus preferencias personales; utilice o no utilice protocolo IPP, utilizando o no el empleo de mDNS para autoinstalación si es posible desde diseño de red.

Por tanto hay varios historiales del usuario en esas dependencias, la cual está descrita a continuación.

Historias del usuario común

Tengo una impresora fabricada tras el 2.015, estoy en casa y quiero imprimir desde mi PC

  • la configuración más común en el escritorio

  • la impresora es suficientemente nueva para admitir estándares sin unidades USB y red, por tanto el soporte driveless no depende de su conexión

  • la PC es un dispositivo terminal, no quiero compartir la impresora

  • No me importa usar mDNS e IPP, mDNS está habilitado en mi cortafuegos, IPP y mDNS (o configuraciones similares) están habilitados en la impresora, y la resolución mDNS funciona (comprobado haciendo ping a .local hostname)

Las colas temporales de CUPS para USB o red son ideales para este caso de uso.

Tengo una impresora antigua, estoy en casa y quiero imprimir desde mi PC

  • la impresora no tiene soporte para impresión sin controladores; compruebe mediante ipptool para impresoras de red (si la impresora tiene soporte IPP y habilita el puerto) y mediante lsusb para impresoras USB,

  • mi PC es un dispositivo de punto final

Actualmente existen dos opciones: instalar la impresora mediante aplicación de impresora y CUPS la detectará automáticamente, o instalarla con el controlador clásico permanentemente. La instalación con el controlador clásico está obsoleta y se eliminará en CUPS 3.0.

Trabajo en una empresa con un servidor de impresión donde están instaladas las impresoras de oficina, quiero imprimir en el servidor de impresión; sin mDNS, pero con impresión sin controladores

  • El servidor de impresión admite IPP Everywhere y está en una red diferente o no se registra en mDNS, o no quiero usar mDNS

  • la cola de impresión remota tiene la URI ipp://<server_hostname>:631/printers/<queue_name>, donde <server_hostname> es el nombre del servidor de impresión y <queue_name> es el nombre de la cola de impresión a la que quiero conectarme a

  • ipptool cuyo comando se ejecuta correctamente si se utiliza la URI

Estas impresoras deben instalarse permanentemente con el controlador IPP Everywhere.

Trabajo en una empresa que tiene un servidor de impresión donde están instaladas las impresoras de oficina, quiero imprimir en el servidor de impresión, con mDNS funcionando en la red local

Estas impresoras remotas se descubren automáticamente a través de mDNS y se utilizan como colas temporales CUPS en la red; se ven en mDNS y los diálogos las seleccionan automáticamente.

Quiero imprimir, pero no quiero o no puedo usar mDNS, independientemente de si mi impresora admite la impresión sin controladores

Cada impresora que no pueda ser detectada por mDNS debe instalarse permanentemente en CUPS o, en CUPS 3.0, mediante un perfil de impresora.

  1. Impresoras sin controlador:

    • todos ellos son compatibles con el modelo IPP Everywhere bajo el apunte Fabricante en la interfaz web de CUPS y como everywhere en la CLI

    • tipos basados en origen:

      • Red:

        • URI: ipp://<hostname_o_ip>:631/ipp/print, donde <hostname_or_ip> es el nombre de host o la dirección IP de la impresora

      • IPP-over-USB de impresoras por ipp-usb:

        • URI: ipp://localhost:60000/ipp/print

      • Impresoras instaladas a través de aplicación de impresora:

        • URI: ipp://localhost:8000/ipp/print/<nomre_impresora> , donde <nombre_rmpresora> es el nombre de impresora elegida dentro de la aplicación de la impresora

  2. Colas de impresión remota en un servidor de impresora:

    • URI: ipp://<dirección_ip_o_nombre_de_host_del_servidor>:631/printers/<cola_de_impresión_remota>, donde <dirección_ip_o_nombre_de_host_del_servidor> es la dirección IP o el nombre de host del servidor y <cola_de_impresión_remota> es el nombre de la cola de impresión instalada en el servidor

    • La posibilidad de instalar una impresora local que apunta a una impresora del servidor como modelo IPP Everywhere depende de la versión de CUPS instalada en el servidor; normalmente, CUPS 2.2.8 y versiones posteriores admiten la conexión sin controladores, y algunas distribuciones, como CentOS 8, también han incorporado esta funcionalidad

    • de lo contrario, depende del controlador de la impresora en el servidor antiguo; la clave es evitar aplicar las opciones varias veces (por lo que una de las conexiones tiene que ser sin procesar y pierde parte de la funcionalidad)

  3. Impresoras antiguas o especializadas

    • (obsoleto, se eliminará en CUPS 3.0) puede ser detectado por CUPS e instalado con controladores clásicos

    • se puede instalar en la aplicación de impresora y luego instalar en CUPS como una cola permanente (consulte la sección anterior sobre impresoras sin controlador: impresoras instaladas a través de la aplicación de impresora)

Las opciones sin controlador no me sirven para mi impresora sin controlador; quiero usar las funciones del controlador

La acción recomendada actualmente es instalar la impresora mediante aplicación de impresora, que contiene el controlador clásico, ya que la instalación permanente de la impresora en CUPS con el controlador clásico está obsoleta y se eliminará en CUPS 3.0. Posteriormente, se puede usar mDNS para que CUPS la detecte o bien, la impresora desde la aplicación de impresora debe instalarse permanentemente en CUPS como una impresora IPP Everywhere.

En el caso de impresoras IPP sobre USB, se debe agregar una regla de rechazo como se describe en temas conocidos.

Instalo la impresora en un servidor, lo cual compartirá la impresora más

Las impresoras del servidor deben instalarse de forma permanente para poder compartirse. El modelo IPP Everywhere (directamente a la impresora o mediante la aplicación de la impresora) es ideal, pero un controlador clásico con opciones PPD estandarizadas en un servidor compatible con impresión sin controlador también funciona correctamente. Los clientes pueden usar el modelo IPP Everywhere al conectarse al servidor y las opciones se traducen correctamente. De lo contrario, es posible que algunas opciones no se apliquen o se apliquen dos veces. No olvide habilitar IPP en el firewall, configurar las ACL del servidor mediante el archivo /etc/cups/cupsd.conf y conectar el demonio al puerto 631 en lugar de localhost.

Estoy en una empresa con un servidor de impresión antiguo que no admite la impresión sin controladores; quiero imprimir

Lo importante es evitar aplicar opciones varias veces en este escenario. Hay varias maneras de hacerlo:

  • solicítele a su soporte TI el controlador (la cola de impresión en el servidor tiene que estar en binario)

  • utilice la directiva ServerName en /etc/cups/client.conf o la variable de entorno CUPS_SERVER para conectarse directamente al servidor; no sería capaz de realizar tareas administrativas, pero será capaz de imprimir.

¿Cómo puedo saber si mi impresora es compatible con la impresión sin controladores?

Network printers have the prerequisites - enablement of IPP port on the printer is the minimum, mDNS is required for automatic printer discovery by libcups. If needed, enable AirPrint, IPP Everywhere or any other driverless standards related options in the printer settings, either via the printer panel or the printer web interface.

  • El comando ipptool el cual envía una solicitud IPP Get-Printer-Attributes a la impresora de red se ejecuta correctamente:

$ ipptool -tv ipp://printer.example.com:631/ipp/print get-printer-attributes.test
"/usr/share/cups/ipptool/get-printer-attributes.test":
    Get-Printer-Attributes:
        attributes-charset (charset) = utf-8
        attributes-natural-language (naturalLanguage) = en
        printer-uri (uri) = ipp://printer.example.com:631/ipp/print
        requested-attributes (1setOf keyword) = all,media-col-database
    Get printer attributes using get-printer-attributes                  [PASS]
...

, donde printer.example.com es un nombre de host o IP de su impresora de la red,

  • busca AirPrint en las especificaciones del dispositivo,

  • Impresoras con certificación oficial para IPP Everywhere,

  • consulta el manual para habilitar las colas temporales de CUPS; si su impresora se detecta finalmente en los comandos de CUPS de esta manera, significa que tu impresora es capaz de imprimir sin controlador,

  • [Solo dispositivos USB] compruebe si IPP a través de USB (manual aquí).

Cómo saber si mi dispositivo USB admite IPP a través de USB

Comprueba si tu dispositivo USB tiene un texto siguiente en la salida de lsusb -v:

...
      bInterfaceClass         7 Impresoras
      bInterfaceSubClass      1 Impresora
      bInterfaceProtocol      4
      iInterface              0
...

Si el dispositivo tiene bInterfaceClass 7, bInterfaceSubClass 1 y bInterfaceProtocol 4 en la secuencia, admite IPP sobre USB, lo cual es fundamental para la impresión y el escaneo sin controladores de dispositivos USB.

Note: Some manufacturers bind IPP over USB support with network driverless standards, which is not correct. If the printer has network and USB connectivity and IPP over USB is not shown in lsusb output, try to look into printer settings, enable AirPrint and check the lsusb -v output again.

Cómo configurar las colas temporales de CUPS

Para configurar correctamente las colas temporales, existen varios requisitos previos:

  • La impresora/cola de impresión remota tiene soporte sin controlador y lo tiene habilitado,

  • su PC tiene en ejecución el servicio avahi-daemon o el zócalo avahi-daemon,

  • su PC tiene un zócalo o servicio de CUPS en ejecución,

  • Los nombres de host mDNS se pueden resolver; pruébelo haciendo ping a un nombre de host .local

Cómo configurar colas temporales de CUPS con una impresora de red

  • requisito adicional:

    • habilite MDNS en sus opciones del cortafuegos

Después de esto, la cola temporal aparecerá en el cuadro de diálogo de impresión y no necesitará instalar una cola de impresión específica a menos que tenga un motivo para ello.

Puedes comprobar si su impresora aparece en los mensajes mDNS (debes tener instalado avahi-tools):

$ avahi-browse -avrt
...
= enp0s25 IPv4 HP LaserJet M1536dnf MFP (42307C)             _ipp._tcp            local
   hostname = [NPI42307C.local]
   address = [192.168.1.10]
   port = [631]
   txt = ["UUID=434e4239-4243-4a42-5859-3c4a9242307c" "Scan=T" "Duplex=T" "Color=F" "note=" "adminurl=http://NPI42307C.local." "priority=10" "product=(HP LaserJet M1536dnf MFP)" "ty=HP LaserJet M1536dnf MFP" "URF=CP99,W8,OB10,PQ3-4-5,DM1,IS1-4,MT1-2-3-5,MT1-2-3-5,RS600" "rp=ipp/printer" "pdl=application/postscript,application/vnd.hp-PCL,application/vnd.hp-PCLXL,application/pdf,image/urf" "qtotal=1" "txtvers=1"]
...

y si CUPS o sus sistemas backend detectan la impresora mediante comandos:

(lists all existing print queues - permanent or temporary - temporary ones contain network as the second string on a line)

$ lpstat -l -e
HP_LaserJet_M1536dnf_MFP_42307C network none ipp://HP%20LaserJet%20M1536dnf%20MFP%20(42307C)._ipp._tcp.local/
myprinter permanent ipp://localhost/printers/myprinter beh:/1/3/5/socket://printer:9100

o

(Enumera todos los dispositivos, los cuales CUPS detecta en la red local o en el USB)

$ lpinfo -l -v
...
Device: uri = ipp://HP%20LaserJet%20M1536dnf%20MFP%20(42307C)._ipp._tcp.local/
        class = network
        info = HP LaserJet M1536dnf MFP (driverless)
        make-and-model = HP LaserJet M1536dnf MFP
        device-id = MFG:HP;MDL:LaserJet M1536dnf MFP;CMD:PDF,PS,PCL,AppleRaster,URF;
        location =
...

Cómo configurar colas temporales de CUPS con una impresora USB

  • requerimientos adicionales:

    • Instale ipp-usb, que transformará dispositivos IPP a través de USB en impresoras de red en el host local:

$ sudo dnf -y install ipp-usb

Luego, puede seguir los pasos en manual para impresoras de red.

Cómo instalar una cola de impresión permanente

Requisitos previos para impresoras permanentemente sin controladores: habilite IPP en su cortafuegos, habilite IPP en su impresora si es posible.

Instalación mediante la interfaz web de CUPS

  • start cups.service

$ sudo systemctl start cups
  • vaya a http://localhost:631 en su explorador web

  • vaya a la lengüeta Administration

  • pulse sobre Add printer

  • introduzca sus credenciales

  • elije el dispositivo encontrado o la conexión que prefiera; para cola permanente sin controladora elija Internet Printing Protocol (ipp)

  • en caso que no eligió un dispositivo encontrado, introduzca el uri del dispositivo en la página siguiente - para impresoras sin controlador usualmente son:

Impresora de red:
ipp://<printer_IP_or_printer_hostname>:631/ipp/print

Impresoras USB por medio de ipp-usb:
ipp://localhost:60000/ipp/print

Impresoras sin controlador a través de la aplicación de impresora:
ipp://localhost:8000/ipp/print/<nombre_impresora>

Impresora apuntando a un servidor de CUPS remoto:
ipp://<server_ip_or_server_hostname>:631/printers/<remote_print_queue>
  • elija el fabricante del dispositivo y el modelo (IPP Everywhere para impresoras sin controlador)

  • si es necesario, fije otras diferentes opciones predeterminadas y finalice

Notas:

Generalmente, no es necesario agregar una cola permanente para impresoras USB sin controlador o impresoras con controlador instaladas en una aplicación de impresión, ya que mDNS las comparte en el servidor local. Por lo tanto, cualquier aplicación que utilice las funciones de la API de CUPS 2.0 o superior (cupsGetDests(), cupsGetNamedDest(), cupsCopyDestInfo()) debería poder detectarlas automáticamente (en el caso de impresoras de red, depende de si el dispositivo se encuentra en la misma subred que el equipo). Instalarlas de forma permanente solo sería necesario si una aplicación no utiliza la API más reciente o para solucionar un error que se produce al usarlas como colas temporales.

Si hay más dispositivos a través de ipp-usb o aplicaciones de impresora, escuchan en diferentes puertos: los dispositivos a través de ipp-usb comienzan en el puerto 60.000, las aplicaciones de impresora separadas comienzan en el puerto 8.000.

Instalación por medio de instrucciones CLI

  • necesitarás un URI de dispositivo - <device_uri>, el cual pueda encontrar con lpinfo -v:

$ lpinfo -v
direct usb://HP/Officejet%20Pro%208500%20A909a?serial=NNNNNNNNN&interface=1
       ====================================================================
network dnssd://Officejet%20Pro%208500%20A909a%20%5B43FD8E%5D._pdl-datastream._tcp.local/
        =================================================================================

o constrúyalo manualmente; p.e. para impresoras IPP:

ipp://<IP/hostname>:631/ipp/print

y un nombre de controlador - <driver>, p.ej.:

$ lpinfo -m
....
donde sea IPP Everywhere
==========
...
$ lpadmin -p <nombre> -v <uri-dispsitivo> -m <controlador> -E

donde <device_uri> y <driver> son cadenas subrayadas de comandos anteriores y <name> es un nombre de cola de impresión, que usted elige.

Cómo instalar una impresora mediante la aplicación de impresora en SNAP y habilitarla para CUPS

Actualmente, las aplicaciones de impresión están disponibles en paquetes SNAP en Fedora. Tengo previsto publicarlas como paquetes RPM, pero la base de código será la misma, por lo que se podrán realizar pruebas incluso con paquetes SNAP.

  • install snapd,

Primero debemos instalar snapd para realizar pruebas:

$ sudo dnf -y install snapd
$ sudo ln -s /var/lib/snapd/snap /snap
$ snap version

Si la instalación se ha realizado correctamente, el último comando mostrará la versión de snapd.

  • instalar y ejecutar la aplicación de la impresora,

Primero, debe instalarse y ejecutarse SNAP con la aplicación de impresora mediante los comandos que se muestran a continuación. Todas las aplicaciones de impresora están disponibles en la tienda de SNAP con los mismos nombres que en Repositorios de OpenPrinting. En los siguientes pasos, utilizaremos la aplicación de impresora ps-printer-app.

$ sudo snapd install --edge ps-printer-app
$ sudo snapd run ps-printer-app

Tras iniciar la aplicación de impresión, su interfaz web estará disponible en http://localhost:8000. Si el usuario instala y ejecuta otra aplicación de impresión, estará disponible en localhost en el puerto 8001. La aplicación de impresión puede contener varias impresoras (como hace cupsd).

  • pulse en Add Printer en la página principal,

  • elija el nombre de la impresora,

  • seleccione el dispositivo encontrado o elija Network printer desde el menú de arrastre Device y proporcione el nombre de host o IP del dispositivo,

  • elija el controlador auto-detect o seleccione el controlador usted mismo,

  • pulse sobre Add Printer,

  • ahora la impresora estaría disponible en al menos un localhost por medio de mDNS (si `avahi-daemon está ejecutando y nss-mdns está instalado)- compruébelo por medio de avahi-browse(avahi-tools tiene que estar instalado):

$ avahi-browse -avrt
...
=     lo IPv4 HP Laserjet M1536                             _ipp._tcp            local
   hostname = [fedora-2.local]
   address = [127.0.0.1]
   port = [8000]
   txt = ["Scan=F" "PaperMax=legal-A4" "Fax=F" "product=(HP LaserJet M1536dnf MFP Postscript (recommended))" "mopria-certified=1.3" "priority=0" "qtotal=1" "txtvers=1" "Duplex=T" "Color=F" "TLS=1.2" "URF=V1.5,W8,PQ3-4-5,DM1,FN3,IS0-20,MT1-5-6-3,OB10,RS300-600" "UUID=24837a30-5f87-3ac9-6d85-086d486092dd" "pdl=image/pwg-raster,image/urf,application/vnd.printer-specific,application/pdf,application/postscript,image/jpeg,image/png" "note=" "adminurl=http://fedora-2.local:8000/HP_Laserjet_M1536/" "ty=HP LaserJet M1536dnf MFP Postscript (recommended)" "rp=ipp/print/HP_Laserjet_M1536"]
...
  • y por lpstat -e:

$ lpstat -e
...
HP_Laserjet_M1536
...

Las opciones disponibles de impresión para la impresora instalada por medio de la palicación impresora puede ser marcada con el comando lpoptions:

$ lpoptions -p HP_Laserjet_M1536 -l
PageSize/Media Size: 184.15x260mm 195.09x269.88mm A4 A5 B5 DoublePostcardRotated Env10 EnvC5 EnvDL EnvMonarch Executive FanFoldGermanLegal ISOB5 Legal *Letter Postcard roc16k Custom.WIDTHxHEIGHT
InputSlot/Media Source: *Auto Tray1 Auto
MediaType/Media Type: *Unspecified Stationery Light6074 MidWeight96110 Heavy111130 ExtraHeavy131175 MonochromeLaserTransparency Labels StationeryLetterhead Envelope StationeryPreprinted Prepunched Colored Bond StationeryRecycled Rough Vellum
cupsPrintQuality/cupsPrintQuality: Draft *Normal High
ColorModel/Output Mode: *Gray
Duplex/Duplex: *None DuplexNoTumble DuplexTumble
OutputBin/OutputBin: *FaceDown

Cómo instalar un scanner

En Linux, los escáneres no tienen que instalarse de la misma manera que las impresoras si están en la misma red o conectados mediante USB; solo necesitas tener instalados los backends compatibles (sane-backends) y cualquier aplicación de escaneo se comunicará con el escáner o dispositivo multifunción a través del backend que lo soporta.

Sin embargo, los escáneres y dispositivos multifuncionales HP más antiguos requieren un paquete adicional - hplip - y sus complementos binarios descargados a través de hp-plugin -i si no son compatibles con sane-backends ya.

¿Cómo puedo saber si mi dispositivo multifunción o escáner independiente es capaz de realizar escaneos sin controlador?

  • comprueba las especificaciones del dispositivo y busca si menciona eSCL, AirScan o WSD; si lo hace, el dispositivo puede realizar escaneos sin controlador

  • muchos de los dispositivos que anuncian compatibilidad con AirPrint también son compatibles con AirScan

  • [Solo dispositivos USB] compruebe si IPP a través de USB (manual aquí).

Cómo hacer que funcione el escaneo sin controlador

Para dispositivos conectados a la red local y dispositivos USB:

  • tener avahi-daemon habilitado y en ejecución

$ sudo systemctl enable avahi-daemon
$ sudo systemctl start avahi-daemon
  • habilitar MDNS en el cortafuegos

  • [Solo dispositivos USB] install ipp-usb

Para escáneres de red en una red diferente:

  • configure el URI del dispositivo escáner en /etc/sane.d/airscan.conf - vea:

man sane-airscan

Cómo configurar mDNS con systemd-resolved

systemd-resolved está habilitado y en ejecución por defecto desde Fedora 33 y se puede configurar para que funcione con Avahi en la compatibilidad con mDNS que CUPS necesita. Avahi se encarga de la publicidad, el registro y el uso compartido de dispositivos, y resolved gestiona la resolución de direcciones '.local'. Funcionará siguiendo estos pasos:

  • ponga MulticastDNS=resolve dentro de /etc/systemd/resolved.conf

$ sudo systemctl restart systemd-resolved
$ sudo nmcli connection modify <connection_name> connection.mdns yes connection.llmnr yes
$ sudo systemctl restart NetworkManager

Cómo comprimir archivos

Ejemplo:

$ tar -czvf cups-information.tar.gz /etc/cups cups.logs troubleshoot.txt lpinfo.log

Reiniciar servicio cups

Reinicie el servicio cups con:

su -c 'systemctl restart cups.service'