No se puede imprimir a través de CUPS desde MacOS Sierra

No se puede imprimir a través de CUPS desde MacOS Sierra

Tenemos un servidor CUPS ejecutándose en Ubuntu 14.04 que tiene alrededor de 10 impresoras HP configuradas. Tenemos una combinación de clientes Windows, Linux y Mac que imprimen en el servidor sin problemas.

Perfectamente, hasta que algunas de las Mac se actualizaron recientemente a Sierra. Ahora, si un usuario intenta imprimir a través del servidor, el cliente se comporta normalmente, al igual que las tazas. El trabajo se procesa a través del servidor y el registro del trabajo muestra que el trabajo se imprimió correctamente. Sin embargo, no sale nada de la impresora. Los clientes Mac pueden imprimir directamente en la impresora mediante AirPrint.

Teníamos una versión anterior de cups, así que creamos un nuevo servidor 16.04 con los cups más recientes, con el mismo resultado. Podemos imprimir directamente a la impresora desde el servidor de impresión en el puerto 9100 para que esa parte funcione bien.

¿Es seguro asumir que el problema no radica en las tazas, sino en MacOS 12.12? ¿Alguien tiene alguna idea para solucionar problemas?

Respuesta1

Las máquinas MacOS utilizan su propio servidor cups. Para las impresoras láser HP modernas, cups genera salida PostScript pero con algunas configuraciones especiales para la impresora de destino. El servidor cups en la máquina Linux analiza la entrada PostScript y usa su propia configuración para regenerar la salida. En Linux, se llama al script de filtro /usr/lib/cups/filter/hpps para generar la salida para la mayoría de las impresoras láser HP. El problema es la salida PostScript de MacOS que parece ser ignorada por cups en Linux. El script de filtro hpps se llama con un archivo vacío y genera una página vacía. La impresora ignora esto. Encontramos dos soluciones para el problema:

1) Envíe la salida de MacOS comprimida como gzip al servidor Linux. El servidor cups descomprime la salida y la canaliza al filtro hpps. El filtro envía el archivo fuente con su propio encabezado y pie de página a la impresora. Sin ajustes especiales (p. ej. banner), la salida del filtro es idéntica a la salida de MacOS. Para lograr esto agregue

    ?compression=gzip

al URI de cups en su servidor de cups MacOS. Llamarhttps://localhost:631su navegador (habilite la interfaz en la terminal con 'cupsctl WebInterface=yes'). Elija 'Modificar impresora', autentíquese y seleccione el protocolo de impresión IPP o IPPS. El URI de destino contiene el URI anterior. Agregue la línea de arriba, por ejemplo

    ipps://<ubuntu-cups-server>/printers/<printername>?compression=gzip

Mantenga la descripción y la configuración del modelo y guárdela.

2) Instale una impresora RAW en el servidor Linux con el mismo URI de destino que la impresora HP. Pero elija Raw como Creador y Modelo para la impresora. Por ejemplo, si su impresora se llama 'hp1', agregue 'hp1_raw' como segunda impresora. En MacOS, utilice el URI de la impresora RAW como destino, por ejemplo

    ipps://<ubuntu-cups-server>/printers/hp1_raw

Queda un pequeño riesgo. Si alguien envía en Linux un archivo que no sea PostScript a la cola sin formato, la impresora imprimirá este archivo como texto. Puede obtener muchos trozos de papel lubricante imprimiendo un pequeño archivo PDF.

Respuesta2

El hppsfiltro del hplippaquete está roto. Aplique el parche:

--- /usr/lib/cups/filter/hpps.shipped       2017-01-13 17:23:49.000000000 +0100
+++ /usr/lib/cups/filter/hpps       2017-03-23 14:51:09.904355996 +0100
@@ -144,6 +144,9 @@

 try:
     job_id, username, title, copies, options = args[0:5]
+    if len(args) > 5:
+        input_fd = os.open(args[5], os.O_RDONLY)
+
     job_id = int(job_id)
 except IndexError:
     bug("Invalid command line: invalid arguments.")
@@ -376,7 +379,7 @@

 while True:
     try:
-        data = os.read(0, 4096)
+        data = os.read(input_fd, 4096)
     except IOError:
         bug('Unable to read from standart input')
         sys.exit(CUPS_FILTER_FAILED)

información relacionada