LINUX.ORG.RU

CUPS+KDE: Не работает печать в Debian 7.0 RC1

 ,


0

1

Господа. Такое дело. Если требуется откорректировать заголовок, то я это сделаю. К сожалению не могу подобрать точных ключевых слов.

Суть вот в чём. Имеется:

  1. Debian 7 RC1
  2. CUPS 1.5.3
  3. HP DesignJet 510 (24-дюймовый с рулоном).

Официально принтер не поддерживается (мокрая HPLIP ожидаемо бесполезна, ещё более мокрое ПО поддержки есть только под богомерзкую систему). К нему подходит с довольно ограниченной функциональностью (не режет листы) драйвер cdnj500.

Работает:

  1. Тестовая страница CUPS печатается (вызов с вёб-морды cups).
  2. PostScript, генерируемый wineps.drv из wine тоже печатается.

Что не работает:

  1. 1. Не печатается PDF из Okular. CUPS даёт следующих лог: http://pastebin.com/igr4bjJP

Сразу даже не пойму, в каком направлении копать. Заранее спасибо за помощь, господа!


Ответ на: комментарий от curufinwe

Спеасибо! Вот здесь ребята тоже кое-какие интересности говорят. http://forum.kde.org/viewtopic.php?f=20&t=84000 Поглядим. На днях попробую с ноута напечатать. Там вроде было ОК (возможно, несколько иные версии CUPS и Ghostscript)!

akj
() автор топика

Решил проблему.

Диагноз: CUPS пытается печатать доку как PDF, а кеды KDE пересылаюет PostScript.

Суть решения:

  1. Найти /etc/cups/ppd/hp_dj510.ppd
  2. Удалить или закомментировать следующую строку с определением доступных входных форматов и фильтров для них:
    *cupsFilter:	"application/vnd.cups-pdf 0 foomatic-rip"

    (удалить) или закомментировать

    *%cupsFilter:	"application/vnd.cups-pdf 0 foomatic-rip"

    После такого открылась приятная возможность в опциях печати кед KDE указать в качестве устройства подачи «Roll feed (cut)», что даёт ожидаемый результат, заключающийся в отрезании очередного листа, но создаёт ещё две проблемы.

    Новые проблемы:

    1. После печати первой страницы из многостраничного PDF-а (через okular, да) первая страница печатается нормально, отрезается, принтер начинает печатать вторую с искажениями, затем, напечатав часть второй страницы, отрезает лист снова и продолжает печатать остаток второй страницы, что не есть хорошо. Как поправить, не имею представления, возможно, что придётся основательно поправлять PPD.
    2. Хотелось бы очень заставить эту дрянь научить CUPS отрезать страницы и при печати от wine. Если вкратце, то софтина, работающая под wine имеет необходимый (в смысле, непреодолимости) костыль, заставляющий её отправлять на печать многостраничные документы только отдельными заданиями на каждую страницу, что, скорее всего, исключит проявление бага из п.1 хотя бы при печати из wine.
akj
() автор топика

CUPS+WINE: Опции «по умолчанию» для плоттера

В рамках решения п.2 нашёл ключ с двоичным мусором, типичным для альтернативно одарённых авторов непригодной для настройки системы блоком:

HKLM\System\CurrentControlSet\Control\Print\Printers\hp_lj510\Default DevMode
Несколько проясняют ситуацию WineWiki, http://msdn.microsoft.com/ru-ru/library/dd183565(vs.85).aspx и http://www.verypdf.com/pdfprint/devmode.htm. В этой структуре хранится информация о контексте принтера, передаваемая спулеру при печати. Насколько мои скромные знания программирования мне позволяют понять, в структуре нижеследующего примера заложены данные, приведённые в комментариях. Названия макроопределений из wingdi.h (см. http://sourceforge.net/p/wine/code/). Учитываю, что переменные типа WORD и short по два октета с порядком little-endian.
"Default DevMode"=hex:68,70,5f,6c,6a,31,33,32,30,70,73,5f,70,73,00,00,00,00,00,\
;                      h  p  _  l  j  1  3  2  0  p  s  _  p  s               |		~ dmDeviceName[32] {0..18}	(19 bytes)
  00,00,00,00,00,00,00,00,00,00,00,00,00,0a,03,01,00,9c,00,08,00,13,7b,00,00,\
;                                       |						~ dmDeviceName[32] {20..32}
;                                       |  778|						~ dmSpecVersion
;                                             |    1|					~ dmDriverVersion
;                                                   |  156|				~ dmSize
;                                                         | 0008|			~ dmDriverExtra
;                                                               |0b0111 1011 0001 0011	~ dmFields			(44 bytes)
  01,00,09,00,9a,0b,33,08,64,00,01,00,07,00,00,00,02,00,02,00,00,00,03,00,00,\
;|    1|										~ dmOrientation
;											= DMORIENT_PORTRAIT=1
;      |    9|										~ dmPaperSize
;											= DMPAPER_A4=9
;            | 2970|									~ dmPaperLength
;											= 297.0 mm
;                  | 2099|								~ dmPaperWidth
;											= 209.9 mm
;                        |  100|							~ dmScale
;											= 100%
;                              |    1|							~ dmCopies
;                                    |    7|						~ dmDefaultSource
;											= DMBIN_AUTO=7
;                                          |    0|					~ dmPrintQuality
;											= DEFAULT dpi
;                                                |    2|				~ dmColor
;											= DMCOLOR_COLOR=2
;                                                      |    2|				~ dmDuplex
;											= DMDUP_VERTICAL=2
;                                                            |    0|			~ dmYResolution
;											= DEFAULT dpi
;                                                                  |  768|		~ dmTTOption
;											= ???
;                                                                        |		~ >>				(69 bytes)
  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
;  0|											~ dmCollate
;											= DMCOLLATE_FALSE=0		(94 bytes)
  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
;															(119 bytes)
  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
;															(144 bytes)
  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
;															(164 bytes = 156+8)

Завтра ещё поковыряю. Попробую определить «по умолчанию» размер листа RA1 (610×860 мм) и источник с рулонной подачей и отрезанием.

akj
() автор топика

Поковырял ещё. Кстати, гов GTK-шное ПО, печатало на CUPS и со штатным (некорректированным PPD) без проблем. Так же, как и wine. Ранние версии KDE (4.7) печатали тоже без проблем. Я имею в виду отсутствие проблем с подачей PostScript, определяемого как PDF, а с отрезанием я вышеназванное тогда не тестировал. Видимо, в Дебиановском KDE 4.8 наличествует регрессия.

Так вот, есть положительные результаты:

  1. Реализовал автоматическое отрезание при печати из wine. Рецепт — ниже.

Привожу рабочие правки в PPD относительно штатной версии:

037:    *%cupsFilter:	"application/vnd.cups-pdf 0 foomatic-rip"
102:    *DefaultPageSize: RA1
367:    *DefaultPageRegion: RA1
435:    *DefaultImageableArea: RA1
502:    *DefaultPaperDimension: RA1
571:    *DefaultInputSlot: RollPaperCut

А также рабочие правки system.reg:

"Default DevMode"=hex:68,70,5f,64,6a,35,31,30,00,00,00,00,00,00,00,00,00,00,00,\
;                      h  p  _  d  j  5  1  0                                 |         ~ dmDeviceName[32] {0..18}
  00,00,00,00,00,00,00,00,00,00,00,00,00,0a,03,01,00,9c,00,08,00,13,6b,00,00,\
;                                       |                                               ~ dmDeviceName[32] {20..32}
;                                       |  778|                                         ~ dmSpecVersion
;                                             |    1|                                   ~ dmDriverVersion
;                                                   |  156|                             ~ dmSize
;                                                         | 0008|                       ~ dmDriverExtra
;                                                               |0b0111 1011 0001 0011  ~ dmFields
  02,00,24,01,95,21,d3,17,64,00,01,00,04,01,00,00,02,00,01,00,00,00,03,00,00,\
;|    2|                                                                                ~ dmOrientation
;                                                                                       = DMORIENT_LANDSCAPE=2
;      |  292|                                                                          ~ dmPaperSize
;                                                                                       = DMPAPER_USER+36
;                                                                                       = {DMPAPER_USER=256, 36 --- порядковый номер формата RA1 при импорте из PPD}
;            | 8597|                                                                    ~ dmPaperLength
;                                                                                       = 859.7 mm
;                  | 6099|                                                              ~ dmPaperWidth
;                                                                                       = 609.9 mm
;                        |  100|                                                        ~ dmScale
;                                                                                       = 100%
;                              |    1|                                                  ~ dmCopies
;                                    |  260|                                            ~ dmDefaultSource
;                                                                                       = DMBIN_USER+4
;                                                                                       = {DMBIN_USER=256, 4 --- порядковый номер устройства подачи при импорте из PPD}
;                                          |    0|                                      ~ dmPrintQuality
;                                                                                       = DEFAULT dpi
;                                                |    2|                                ~ dmColor
;                                                                                       = DMCOLOR_COLOR=2
;                                                      |    2|                          ~ dmDuplex
;                                                                                       = DMDUP_VERTICAL=2
;                                                            |    0|                    ~ dmYResolution
;                                                                                       = DEFAULT dpi
;                                                                  |  768|              ~ dmTTOption
;                                                                                       = ???
;                                                                        |              ~ >>
  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
;  0|                                                                                   ~ dmCollate
;                                                                                       = DMCOLLATE_FALSE=0
  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
  00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00

Осталось выяснить, как исключить неправильную печать многостраничных заданий. Быть может, можно организовать автоматическую разбивку многостраничных PDF на несколько заданий (каждое из одной страницы, на стадии работы фильтров KDE или уже фильтров CUPS) средствами CUPS или KDE. Какие-нибудь версии, почтенные господа?

akj
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.