Невозможно печатать через CUPS из MacOS Sierra

Невозможно печатать через CUPS из MacOS Sierra

У нас есть сервер CUPS, работающий на Ubuntu 14.04, на котором настроено около 10 принтеров HP. У нас есть смесь клиентов Windows, Linux и Mac, которые печатают на сервере безупречно.

Безупречно, пока некоторые из Mac не были недавно обновлены до Sierra. Теперь, если пользователь пытается печатать через сервер, клиент ведет себя нормально, как и cups. Задание обрабатывается через сервер, и журнал заданий показывает, что задание напечатано нормально. Однако из принтера ничего не выходит. Клиенты Mac могут печатать напрямую на принтере с помощью AirPrint.

У нас была старая версия cups, поэтому мы построили новый сервер 16.04 с последними cups, тот же результат. Мы можем печатать напрямую на принтер с сервера печати на порту 9100, так что эта часть работает нормально.

Можно ли с уверенностью предположить, что проблема не в cups, а в MacOS 12.12? Есть ли у кого-нибудь идеи по устранению неполадок?

решение1

Машины MacOS используют собственный сервер cups. Для современных лазерных принтеров HP cups генерирует вывод PostScript, но с некоторыми специальными настройками для целевого принтера. Сервер cups на машине Linux анализирует ввод PostScript и использует свои собственные настройки для повторной генерации вывода. В Linux скрипт фильтра /usr/lib/cups/filter/hpps вызывается для генерации вывода для большинства лазерных принтеров HP. Проблема заключается в выводе PostScript из MacOS, который, похоже, игнорируется cups под Linux. Скрипт фильтра hpps вызывается с пустым файлом и генерирует пустую страницу. Принтер игнорирует это. Мы нашли два обходных пути для этой проблемы:

1) Отправьте вывод из MacOS, сжатый как gzip, на сервер Linux. Сервер cups распаковывает вывод и передает его фильтру hpps. Фильтр отправляет исходный файл с собственным заголовком и нижним колонтитулом на принтер. Без специальных настроек (например, баннера) вывод фильтра идентичен выводу MacOS. Чтобы добиться этого, добавьте

    ?compression=gzip

к URI cups на вашем сервере MacOS Cups. Вызовитеhttps://localhost:631браузер (включите интерфейс в терминале с помощью 'cupsctl WebInterface=yes'). Выберите 'Изменить принтер', выполните аутентификацию и выберите протокол печати IPP или IPPS. Целевой URI содержит предыдущий URI. Добавьте строку выше, например

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

Сохраните описание и настройки модели.

2) Установите RAW-принтер на сервере Linux с тем же целевым URI, что и у принтера HP. Но выберите Raw в качестве производителя и модели принтера. Например, если ваш принтер называется 'hp1', добавьте 'hp1_raw' в качестве второго принтера. В MacOS используйте URI RAW-принтера в качестве назначения, например

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

Остается небольшой риск. Если кто-то отправит на Linux не PostScript-файл в очередь raw, принтер распечатает этот файл как текст. Вы можете получить много смазочных бумажных фрагментов, распечатав небольшой PDF-файл.

решение2

Фильтр hppsиз hplipупаковки сломан. Наклейте заплатку:

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

Связанный контент