CUPS – Como Depurar Problemas de Impresora
Si tiene algún problema con la impresión, consulte la página errores comunes antes de reportar un error. Si el problema que observa no aparece en la lista o ninguna de las soluciones alternativas parece solucionarlo, considere presentar un informe de error para ayudarnos a mejorar el rendimiento de Fedora en su hardware.
Identificar su área del problema
Los problemas de impresión pueden ser muy complejos y una cooperación activa o una gran cantidad de datos pueden ser pedidos por el mantenedor al informador para ayudar al mantenedor a por lo menos entender y (si no es una cuestión específica de hardware) reproducir el problema, de modo que por favor tenga paciencia e intente centrar el problema tanto como sea capaz.
Puede haber:
-
problemas para ver o conectarse a la impresora (pueden ser problemas de back-end de cups, problemas de avahi, problemas de libusb, problemas de búsqueda de cups),
-
problemas de accesibilidad (configuración correcto/incorrecta en cupsd.conf o su interpretación errónea por el demonio cupsd, mala cooperación con NIS, SSSD…),
-
imprimir con ayuda de samba (problemas con el backend smb, que es parte de samba) o con samba autenticado a través de Kerberos (samba_krb5_printing),
-
problemas con los filtros utilizados durante el filtrado del documento en un formato compatible con la impresora, que influyen en cómo o si se imprimirá el documento (problema con filtros: pdftops, pdftopdf, pstops, bannertopdf, etc., o problemas con binarios o bibliotecas que utilizan los filtros: libgs, qpdf, poppler…),
-
problemas con los archivos de descripción de impresora Postscript, que son una forma antigua de definir las capacidades de las impresoras, como tamaños de página admitidos, bordes, etc.
Sin mencionar posibles limitaciones o problemas en el firmware o hardware de la impresora en sí, por lo que cualquier tipo de dato o acotación del problema es bienvenido.
El mejor comienzo es adjuntar archivos con los registros que se describen más adelante.
Acceso a CUPS
Todos los accesos a CUPS es redireccionado al diario por defecto desde Fedora 28 (hubo una redirección de error_log para diario por defecto antes de Fedora 28).
Necesitamos definir dos formas diferentes de capturar registros completos de CUPS vinculados a incidentes: una si la cola de impresión rota no es proporcionada por HPLIP y la otra si sí lo es. Se diferencian en la opción de filtro de journald: si usa una cola que no sea HPLIP para depurar, está bien recopilar los registros de la unidad systemd de cups (mediante '-u cups'), porque todos los mensajes de error se redirigen correctamente al registro de la unidad systemd de cups y son accesibles en la salida después del filtrado de la unidad. Las bibliotecas HPLIP no están implementadas para hacer lo mismo (el servidor original no responde para aceptar una posible solución en el proyecto y el problema no es lo suficientemente crítico como para retrasar indefinidamente la implementación de un parche posterior), por lo que sus mensajes no se marcan para la unidad systemd de cups y se filtran tras llamar a journald con '-u cups'. Para estas colas, se requiere el registro de journald sin filtrado.
El registro journald vinculado a incidentes sin filtrado solo es necesario para las colas de impresión HPLIP (cuyo URI de dispositivo empieza por hp://) y no es recomendable para otras colas, ya que puede ser difícil de leer en casos grandes. Adjunte el registro journald vinculado a incidentes solo cuando sea necesario. |
Ubicación del registro de CUPS
El registro de CUPS se encuentra en el diario del sistema por defecto, pero se puede configurar el registro en un archivo en /etc/cups/cups-files.conf
con la directiva ErrorLog
. Si desea cambiar la configuración predeterminada, el nombre del archivo de registro es irrelevante, pero se recomienda colocarlo en la ruta /var/log/cups
; de lo contrario, SELinux impedirá que cupsd acceda a él.
Establecer el registro en un archivo tiene las siguientes desventajas (sin operaciones adicionales):
-
no es posible conectar solo los registros a un trabajo sin encadenar más comandos
-
no se pueden obtener registros para el período de tiempo especificado sin encadenar más comandos
Para capturar registros vinculados a incidentes, se puede utilizar tail -f
, por ejemplo:
tail -f /var/log/cups/error_log
Habilitar el registro de depuración de CUPS
Habilite la información de depuración completa con:
$ cupsctl LogLevel=debug2
Registro de trabajos de CUPS
Si el problema aparece al enviar el documento a imprimir o al intentarlo, capture los registros de este trabajo. Si el registro del trabajo está disponible, es OBLIGATORIO adjuntarlo. |
Preparar CUPS para el registro de trabajos
Para poder ver el registro de trabajos específicos, active:
PreserveJobFiles Yes
En su archivo /etc/cups/cupsd.conf
y reinicie el servicio cup. No olvide eliminar la línea después de terminar la depuración. El comando lpstat -W all
parece estar vacío después de imprimir si no habilita la directiva.
Obtener un registro de tarea para un ID de tarea específica
Para capturar el registro de tarea, necesita saber el ID de trabajo (JID) de la tarea: es el número después del guion en un ID de solicitud:
El ID de solicitud se ve así:
<print_queue_name>-<JID>
y puede ser visto en terminal si envía un documento para imprimir por la instrucción lp
:
$ lp -d <print_queue_name> <file1> ... <fileN> request id is <print_queue_name>-<JID> (N archivo(s))
O cuando enumere tareas (consulte man lpstat
); la última tarea está al final:
$ lpstat -W all ... <print_queue_name>-<JID> <usuario> 1024 Wed 11 Jan 2017 05:52:19 PM CET
Puede obtener la última tarea de bitácoras automáticamente (si tiene awk
instalado y lpstat -W
todas las tareas devueltas) por:
$ journalctl -u cups JID=`lpstat -W all | awk '{print $1}' | awk -F '-' '{print $NF}' | tail -n 1` > cups_job_log
O manualmente, si encuentra JID por usted mismo:
journalctl -u cups JID=<JID> > cups_job_log
Registro de cupsd vinculado a incidentes (la cola de impresión rota no es compatible con HPLIP)
A veces no podemos vincular el error a una tarea de impresión específico, por lo que el registro de tareas no es efectivo. Se requiere un registro de cupsd vinculado a incidentes.
Como comenzar para capturar vínculo-incidencia de bitácora de cups
En terminal/lengüeta de terminal nueva, declare:
journalctl -f -u cups > cups_whole_log
Cómo obtener el registro de cupsd vinculado a incidentes
Después de activar la condición de error que está intentando diagnosticar, por ejemplo, imprimir algo, intentar encontrar una impresora mediante lpinfo
, etc., finaliza la captura del registro cupsd vinculado al incidente desde paso anterior con <ctrl>+<c>
.
Registro de cupsd vinculado a incidentes (la cola de impresión rota es compatible con HPLIP)
Lamentablemente, las bibliotecas HPLIP no inician sesión en la unidad CUPS en el diario, por lo que si su cola de impresión está instalada con el controlador HPLIP (su URI de dispositivo comienza con hp://
), necesitamos un registro de diario vinculado a incidentes.
Cómo empezar a capturar registros de diario vinculados a incidentes
En terminal/lengüeta de terminal nueva, declare:
journalctl -f > journal_whole_log
Cómo obtener un registro de diario vinculado a incidentes
Después de activar la condición de error que está intentando diagnosticar, por ejemplo, imprimir algo, ejecutar un script de HP, etc., finaliza la captura del registro de diario vinculado a incidentes desde paso anterior con <ctrl>+<c>
.
Apaga bitácora depurativa
Adjunte cups_job_log
para la tarea problemática, cups_whole_log
o journal_log
si capturó todo el registro de cupsd durante el evento problemático, informe el error como un archivo adjunto.
Entonces para apagar la información de depuración, haga esto:
$ sudo sed -i 's,LogLevel debug2,LogLevel warn,' /etc/cups/cupsd.conf $ sudo systemctl restart cups
Más instrucciones para funcionar con systemd-journald
Consulte los mensajes de bitácora con:
journalctl -u cups -e
o:
journalctl -u cups --since=...
Para filtrar los mensajes relacionados con un ID de tarea específico, utilice:
journalctl -u cups JID=...
(al completar la pestaña se le mostrará qué ID de tarea tienen mensajes de bitácora)
registro de cups-browsed
El demonio cups-browsed se introdujo en Fedora alrededor de la versión cups-1.5. Puede explorar transmisiones Bonjour, transmisiones CUPS (obsoletas) y servidores LDAP en busca de impresoras, y crear o eliminar colas locales que apunten a dichas impresoras. Puede crear transmisiones de colas CUPS locales, pero está marcado como obsoleto.
Para configurar el registro de depuración, debe agregar:
DebugLogging stderr
al /etc/cups/cups-browsed.conf
.
Las bitácoras estarán disponibles en el diario del sistema tras reiniciar cups-browser.
Guiones HPLIP depurativos de bitácora
Los scripts de Python de HPLIP (p. ej., hp-setup
, hp-clean
, hp-scan
) tienen el registro de depuración redirigido al descriptor de archivo de error estándar, por lo que no se registran en el diario. Para obtener el registro de depuración, ejecute el script con el parámetro -ldebug
, p. ej.:
$ hp-setup -ldebug -i
y reproduce el tema. Entonces copie los mensajes desde el terminal al hp_script_log
. Adjunte el archivo al ticket de bugzilla también.
¿Qué marca y modelo es mi impresora?
Cada impresora diferente tiene un modelo-específico de ID Dispositivo. Puede encontrarlo con la instrucción lpinfo
:
su -c "lpinfo -l -v"
Esta instrucción ejecuta cada backend en modo de descubrimiento para que informen sobre los dispositivos que pueden detectar automáticamente. Esto generará una serie de bloques de líneas, cada uno como éste:
Device: uri = usb://HP/DESKJET%20990C?serial=U123456789AB class = direct info = HP DESKJET 990C make-and-model = HP DESKJET 990C device-id = MFG:HEWLETT-PACKARD;MDL:DESKJET 990C;CMD:MLC,PCL,PML;CLS:PRI NTER;DES:Hewlett-Packard DeskJet 990C;SN:U123456789AB;S:00808880800010032C100000 0C2000000;P:0800,FL,B0;J: ; location =
La línea que identifica este tipo de modelo en particular es la línea larga que comienza con "device-id =" (se muestra aquí en tres líneas).
Tenga en cuenta que si su impresora no se detecta automáticamente, aún puede averiguar el ID del dispositivo ejecutando el backend adecuado con el nombre de host de la impresora como argumento. Los backends usb, parallel, snmp y dnssd intentan informar el ID del dispositivo real proporcionado por la impresora.
$ /usr/lib/cups/backend/snmp 10.34.18.3 network socket://10.34.18.3 "HP Color LaserJet CP2025dn" "HP Color LaserJet CP2025dn" "MFG:Hewlett-Packard;CMD:PJL,PML,PCLXL,POSTSCRIPT,PCL;MDL:HP Color LaserJet CP2025dn; CLS:PRINTER;DES:Hewlett-Packard Color LaserJet CP2025dn;MEM:MEM=55MB;COMMENT:RES=600x8;" "HP Color LaserJet CP2025dn"
El ID del dispositivo es en este caso (consulte backend(7)) el penúltimo campo.
¿Cuáles colas de impresión están disponibles para mí?
Las colas de impresión de su máquina pueden ser permanentes o temporales. CUPS puede listar todas las colas de impresión disponibles en la red local (permanentes y temporales) por:
$ lpstat -e
Para colas permanentes puedes obtener más información con:
$ lpstat -t
¿Cual controlador estoy usando?
El archivo PPD de la cola de impresión le indica qué controlador está en uso. Puede usar esta instrucción para averiguarlo:
grep -H '^*NickName:' /etc/cups/ppd/*.ppd
También puede averiguarlo usando la aplicación system-config-printer
. Haga doble clic en el icono de la cola y observe el campo Marca y Modelo.
Para ver los controladores disponibles, pulse en el botón Cambiar… junto a ese campo. Quizás le resulte útil probar otro controlador para ver si presenta el mismo problema.
Modelos sin controlador
La mayoría de las impresoras lanzadas desde 2010 son compatibles con AirPrint o IPP Everywhere, lo que significa que no necesitan instalación para funcionar: Avahi detecta el dispositivo y las funciones de impresión se comunican mediante el protocolo IPP. Básicamente, son dispositivos sin controladores. Existen dos soluciones en Fedora que implementan IPP Everywhere:
-
Modelo CUPS 'en todas partes'
-
controlador 'sin conductor' de cups-filters
Modelo CUPS 'en todas partes'
Es una implementación CUPS del estándar IPP Everywhere, disponible como un modelo de impresora especial. Este modelo se utiliza al usar la cola temporal de CUPS para su dispositivo o al instalarlo con el modelo IPP Everywhere en la interfaz web de CUPS o mediante lpadmin (usando -m everywhere
).
Dado que el archivo PPD creado depende de la comunicación IPP con la impresora, necesitamos información recopilada del dispositivo. Puede usar la instrucción ipptool
para ello:
$ ipptool --ippserver ipptool.attr <your_printer_device_uri> get-printer-attributes.test
Adjunte el ipptool.attr
creado al ticket de Bugzilla si es necesario.
controlador 'sin conductor' de cups-filters
Controlador especial para filtros de cups que se utiliza para generar PPD según el estándar IPP Everywhere. Este controlador se utiliza si se selecciona el modelo sin controlador durante la instalación de la impresora.
También necesitamos la salida de la solicitud get-printer-attributes:
$ ipptool --ippserver ipptool.attr <your_printer_device_uri> get-printer-attributes.test
y registros de depuración del propio controlador cuando genera PPD para su dispositivo:
$ driverless -d cat <ipp_device_uri> 2> driverless_debug > created_ppd
Adjunte todos los archivos creados al ticket de Bugzilla si es necesario.
Encontrar dónde está el problema
When a print job is processed it is sent through a chain of filters to convert the file into a format the printer can understand, and then finally sent to a backend, a program which can transport the data to the printer. By slightly changing how you print you can try a different printing path to see if that changes anything. If it works around the problem, you know which area the problem was in — include that information in a bug report so that we can fix it.
Aplicaciones
Try printing from a different application to see if the problem goes away or if it occurs regardless of how a file is printed. Try printing the document from the command line using the lp
command.
Document format
If you are having problems printing PDF files, try printing other types of file to see if the problem is with printing anything or if it is specific to printing PDF files. Try converting the file to a different format and printing that.
If the problem relates to printing text files, try removing/installing the paps package. This package provides an alternative text-to-PostScript filter to the one that comes with CUPS.
To inspect the document that was submitted to CUPS for printing, enable the PreserveJobFiles
option like this:
cupsctl PreserveJobFiles=yes
Submitted job documents will remain in /var/spool/cups
. There are files with two types of names - dXXXXX-YYY
and cXXXXX
. dXXXXX-YYY
is file which goes to CUPS system, unfiltered file - XXXXX
is job ID, which is filled with zeros to be 5 characters long, and YYY
is sequence number of file in the job. cXXXXX
is file which contains printing options for a job specified by job ID in XXXXX
. Please attach dXXXXX-YYY
to the bug for a job when you experience the issue
Ejecución de filtros a mano
Los usuarios más avanzados pueden intentar ejecutar los filtros CUPS manualmente y examinar el archivo de datos en cada paso a medida que se convierte entre diferentes formatos. Aquí hay un ejemplo de cómo hacerlo para una cola gutenprint llamada pqueue con la página de prueba CUPS, que tiene su propio tipo MIME especial application/vnd.cups-banner
:
First you need to know the filter pipeline for application/vnd.cups-banner
→ printer/pqueue
(output MIME type). You can either enable debugging, print a test page, get CUPS job log and in cups_job_log you’ll find something similar to:
envp[29]="FINAL_CONTENT_TYPE=printer/pqueue" Started filter /usr/lib/cups/filter/bannertopdf (PID 1111) Started filter /usr/lib/cups/filter/pdftopdf (PID 1112) Started filter /usr/lib/cups/filter/gstoraster (PID 1113) Started filter /usr/lib/cups/filter/rastertogutenprint.5.2 (PID 1114)
o ejecuta
/usr/lib/cups/filter/bannertopdf 1 me '' 1 '' </usr/share/cups/data/testprint >bannertopdf.pdf cupsfilter -e -m printer/pqueue -p /etc/cups/ppd/pqueue.ppd bannertopdf.pdf > /dev/null
y verá:
INFO: pdftopdf (PID 1111) started. INFO: gstoraster (PID 1112) started. INFO: rastertogutenprint.5.2 (PID 1113) started.
Esta canalización de filtros es de cups-1.6. Con cups < 1.6, puede ver bannertops → pstops → pstoraster. |
Ahora puedes ejecutar filtros manualmente:
export PPD=/etc/cups/ppd/pqueue.ppd /usr/lib/cups/filter/bannertopdf 1 me '' 1 '' </usr/share/cups/data/testprint >bannertopdf.pdf /usr/lib/cups/filter/pdftopdf 1 me '' 1 '' <bannertopdf.pdf >pdftopdf.pdf /usr/lib/cups/filter/pdftoraster 1 me '' 1 ''<pdftopdf.pdf >out.ras /usr/lib/cups/filter/rastertogutenprint.5.2 1 me '' 1 ''<out.ras >out.prn
Aquí, se puede usar evince
o okular
para examinar la salida después de los primeros dos filtros, se puede usar rasterview
para examinar la salida del tercer filtro y la salida del último filtro debe inspeccionarse manualmente o enviarse directamente (lpr -oraw out.prn
) a la impresora.
Controlador
Si tiene acceso a una impresora de otra marca o modelo, podría valer la pena comprobar si el problema se produce en ambas o solo en una. Esto puede indicar si se trata de un problema con un controlador específico o si se trata de un problema más general.
Incluso si solo tiene acceso a una impresora, suele haber varios controladores disponibles para cada modelo, y probarlos uno por uno puede ser útil para identificar el problema. Consulte arriba para saber cómo hacer eso.
Foomatic
Para los controladores Foomatic, puede intentar habilitar la depuración de Foomatic editando el archivo /etc/foomatic/filter.conf
y agregando una línea:
debug: 1
La próxima vez que imprima un trabajo en una cola utilizando foomatic, la depuración se colocará en /tmp/foomatic-rip.log
, y el archivo de entrada recibido por foomatic-rip estará en /tmp/foomatic-rip.ps
.
Backend (tarea transporte)
Quizás puedas probar un backend diferente. Utilizando [command] system-config-printer
, pulse dos veces en el icono de la cola de impresión y pulsa el botón Cambiar… junto al campo URI del dispositivo. Verás una flecha de expansión de Conexión cerca de la esquina inferior derecha de la ventana; pulse en ella para ver los backends disponibles. Para impresoras HP con conexión USB, normalmente se pueden usar los backends hp y usb.
Para capturar la comunicación USB:
-
descubra el número de bus donde está conectado el dispositivo USB, por ejemplo:
$ lsusb Bus 002 Device 010: ID 03f0:012a HP, Inc HP LaserJet M1536dnf MFP =
-
iniciar captura de paquete USB:
$ sudo tcpdump -i usbmonN -s0 -w usb.pcap
donde N es el número del bus.
Para las impresoras de red, es posible que tengas diferentes protocolos que puedes probar.
-
socket (zócalo) es para HP JetDirect (usualmente puerto 9100)
-
lpd es para recursos compartidos de impresión de UNIX de estilo antiguo
-
smb es para recursos compartidos CIFS de sistemas Windows
-
ipp es para dispositivos habilitados para el Protocolo de impresión de Internet y también para otros servidores CUPS — Puede capturar el tráfico IPP con
tcpdump
de esta manera (el nombre de la interfaz puede diferir de p4p1):
tcpdump -n -i p4p1 -U -s0 -w ipp.pcap port ipp
-
bjnp es para el protocolo de red bjnp propietario de Canon (normalmente el puerto 8611)
Herramienta de configuración
Si su problema está relacionado con la configuración de las colas de impresora, pruebe con uno de los otros métodos. Hay cuatro disponibles:
-
La aplicación Configuración del sistema de GNOME 3 (centro de control), Configuración del sistema > Impresoras desde GNOME Shell
-
system-config-printer
, Sistema > Administración > Impresora desde el menú de GNOME -
el interfaz de web CUPS, http://localhost:631/
-
las herramientas de línea de comandos
lpadmin
,lpoptions
,cupsctl
,cupsaccept
,cupsenable
etc.
Historias del usuario
Hay varias historias de usuario común cuando viene a depurar problemas de impresión. Mencionaré algunos de ellos con los pasos para obtener información necesaria.
Tengo una impresora HP y tengo un problema con el script HPLIP
Siga los pasos de las secciones siguientes:
-
attach the files to the bugzilla ticket and turn off debug logging
-
provide printer model name and printer PPD file from
/etc/cups/ppd/
I have HP printer, installed it with HPLIP and have a problem with it
HPLIP installed print queue has a device uri starting with hp://.
Siga los pasos de las secciones siguientes:
-
trigger your issue
-
attach files with output of
lsusb -v
and from/var/log/ipp-usb
if the device is connected by USB -
attach the files to the bugzilla ticket and turn off debug logging
-
provide printer model name and printer PPD file from
/etc/cups/ppd/
Mi impresora no imprime correctamente o no imprime en absoluto, pero puedo ver la impresora en el cuadro de diálogo de impresión
Siga los pasos de las secciones siguientes:
-
trigger your issue - print the specific document to the specific print queue you have problem with
-
attach the created files to the ticket and turn off debug logging
-
attach your printer PPD file from
/etc/cups/ppd/
if available -
adjunta el archivo que deseas imprimir
-
dime qué aplicación imprimiste
-
mencione su modelo de impresora
-
attach files with output of
lsusb -v
and from/var/log/ipp-usb
if the device is connected by USB
Tema CUPS genérico
For generic issues - printer wasn’t found, segfault - please follow the steps in the following sections (avahi-daemon
must run):
-
trigger the issue - e.g. try to find printers via
sudo lpinfo -l -v
, do some action in web ui - depends on your problem -
attach created files to the ticket and turn off debug logging
-
put the output of lpinfo into a file and attach it
-
put the output of both lpstat commands into a file and attach it
-
attach files with output of
lsusb -v
and from/var/log/ipp-usb
if the device is connected by USB
My printer doesn’t print correctly - I use 'everywhere' model
Siga los pasos de las secciones siguientes:
I have a generic problem with cups-browsed
Siga los pasos de las secciones siguientes:
-
enable cups-browsed logging, but don’t restart cups-browsed yet.
-
start cups-browsed via
systemctl
and start to capture its logs:
$ journalctl -u cups-browsed -f > cups_browsed_log
-
trigger the issue or wait until cups-browsed triggers the issue itself
-
cancel cups-browsed and cupsd log captures
-
attach created files
cups_whole_log
andcups_browsed_log
to the ticket and turn off debug logging
Printer found by cups-browsed doesn’t print or print badly
The most difficult user story - we need to know how the print queue was created and how it behaves during printing. The print queue found by cups-browsed has a device uri starting with implicitclass://
.
Siga los pasos:
-
enable cups-browsed logging, but don’t restart cups-browsed yet.
-
start cups-browsed via
systemctl
and start to capture its logs:
$ journalctl -u cups-browsed -f > cups_browsed_queue_creation
-
give cups-browsed some time to process found devices (depends on how many devices you have in the local network or how many print queues are stored in the location you set with
BrowsePoll
directive) -
cancel cups-browsed and cupsd log captures - save the files as
cups_queue_creation
andcups_browsed_queue_creation
Ahora necesitamos capturar las bitácoras durante la impresión:
-
Comience a capturar registros de cups_browsed nuevamente:
$ journalctl -u cups-browsed -f > cups_browsed_printing
-
trigger your issue - print the specific document to the specific print queue you have problem with
-
obtener el registro de trabajo para el trabajo que acaba de activar y cancelar la captura del registro de cups-browsed
-
adjuntar todos los archivos de registro recopilados
Want to help? Learn how to contribute to Fedora Docs ›