Não é possível imprimir via CUPS no MacOS Sierra

Não é possível imprimir via CUPS no MacOS Sierra

Temos um servidor CUPS rodando no Ubuntu 14.04 que possui cerca de 10 impressoras HP configuradas. Temos uma combinação de clientes Windows, Linux e Mac imprimindo no servidor perfeitamente.

Perfeitamente, até que alguns Macs foram atualizados para o Sierra recentemente. Agora, se um usuário tentar imprimir através do servidor, o cliente se comportará normalmente, assim como o cups. O trabalho é processado através do servidor e o registro do trabalho mostra que o trabalho foi impresso corretamente. No entanto, nada sai da impressora. Os clientes Mac podem imprimir diretamente na impressora usando AirPrint.

Tínhamos uma versão mais antiga do cups, então construímos um novo servidor 16.04 com o cups mais recente, mesmo resultado. Podemos imprimir diretamente na impressora a partir do servidor de impressão na porta 9100 para que essa parte funcione bem.

É seguro presumir que o problema não está nos copos, mas sim no MacOS 12.12? Alguém tem alguma idéia de solução de problemas?

Responder1

Máquinas MacOS usam seu próprio servidor cups. Para impressoras a laser HP modernas, o cups gera saída PostScript, mas com algumas configurações especiais para a impressora de destino. O servidor cups na máquina Linux analisa a entrada PostScript e usa suas próprias configurações para gerar novamente a saída. No Linux, o script de filtro /usr/lib/cups/filter/hpps é chamado para gerar a saída para a maioria das impressoras a laser HP. O problema é a saída PostScript do MacOS que parece ser ignorada no cups no Linux. O script de filtro hpps é chamado com um arquivo vazio e gera uma página vazia. A impressora ignora isso. Encontramos duas soluções alternativas para o problema:

1) Envie a saída do MacOS compactada como gzip para o servidor Linux. O servidor cups descompacta a saída e canaliza-a para o filtro hpps. O filtro envia o arquivo de origem com cabeçalho e rodapé próprios para a impressora. Sem configurações especiais (por exemplo, banner) a saída do filtro é idêntica à saída do MacOS. Para conseguir isso adicione

    ?compression=gzip

para o URI cups em seu servidor MacOS cups. Chamarhttps://localhost:631seu navegador (habilite a interface no terminal com 'cupsctl WebInterface=yes'). Escolha 'Modificar Impressora', autentique e selecione o protocolo de impressão IPP ou IPPS. O URI de destino contém o URI anterior. Anexe a linha acima, por exemplo

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

Mantenha a descrição e as configurações do modelo e salve.

2) Instale uma impressora RAW no servidor Linux com o mesmo URI de destino da impressora HP. Mas escolha Raw como Maker e Model para a impressora. Por exemplo, se a sua impressora tiver o nome 'hp1', adicione 'hp1_raw' como segunda impressora. No MacOS use o URI da impressora RAW como destino, por exemplo

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

Permanece um pequeno risco. Se alguém enviar no Linux um arquivo não PostScript para a fila bruta, a impressora imprimirá esse arquivo como texto. Você pode obter muitos pedaços de papel lubrificante imprimindo um pequeno arquivo PDF.

Responder2

O hppsfiltro da hplipembalagem está quebrado. Aplique o patch:

--- /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)

informação relacionada