Этот репозиторий содержит приложение принтера для принтеров PostScript, которое использует PAPPL для поддержки печати IPP из нескольких операционных систем. Кроме того, он использует ресурсы cups-filters 2.x (функции фильтра в libcupsfilters, libppd) и pappl-retrofit (инкапсуляция классических драйверов CUPS в приложениях принтера). Эта работа (или теперь код pappl-retrofit) получена из приложения hp-printer-app.
Ваш вклад приветствуется. Пожалуйста, публикуйте проблемы и запросы на извлечение.
Нерастровое приложение принтера: формат назначения — PostScript, высокоуровневый/векторный формат. Принимаются входные данные в формате PostScript или PDF, а необходимое преобразование выполняется без каких-либо промежуточных растровых шагов.
Приложение принтера, которое использует новые функции фильтрации чашек-фильтров 2.x. Функции фильтра — это библиотечные функции, созданные на основе фильтров CUPS, которые разрабатывались и совершенствовались десятилетиями, начиная с появления CUPS в 2000 году.
Модернизированное приложение принтера для классических драйверов CUPS, в данном случае это простейшая форма файлов PPD для принтеров PostScript. Он перечисляет файлы PPD из репозиториев, включенных в Snap, загружает PPD, необходимый для реального принтера, извлекает параметры из PPD для их отображения в веб-интерфейсе, принимает настройки задания в качестве атрибутов IPP и правильно вставляет код PostScript, предоставленный PPD. в выходной поток данных.
Приложение принтера, которое не обрабатывает необработанные задания (входной формат — это собственный формат принтера). Чтобы гарантировать, что код PostScript файла PPD всегда вставляется в выходной поток, мы называем собственный формат принтера «application/vnd.printer-специфический», который не существует в качестве входного формата, поэтому ввод «application/postscript» обязателен. через функцию фильтра pstops().
Расширяемое приложение принтера: пользователь может добавлять файлы PPD через веб-интерфейс администрирования для поддержки дополнительных моделей принтеров.
Дополнительные свойства:
Чтобы избежать необходимости заново изобретать код для разветвления на подпроцессы, чтобы мы могли передавать данные через последовательность фильтров, мы создаем функцию фильтра для отправки данных на принтер и формируем цепочку фактически преобразующего фильтра. (одна из pstops() и pdftops()) с этой функцией фильтра, используя функцию фильтра filterChain().
Для входных данных PWG/Apple Raster мы используем обратные вызовы растра, чтобы обработка была потоковой, что позволяет выполнять большие и даже бесконечно длинные задания. Мы используем функции libppd для вставки кода PostScript опции PPD в выходной поток и функцию filterPOpen() для создания дескриптора файла для функций libppd для отправки данных на устройство.
Приложение PostScript Printer Application Snap содержит все встроенные файлы PostScript PPD проектов foomatic-db и HPLIP, поэтому большинство PPD принтеров PostScript, которые обычно поставляются с дистрибутивами Linux. Чтобы избежать увеличения размера Snap из-за огромного количества PPD, мы сильно сжимаем их с помощью pyppd. Обратите внимание, что некоторые PPD используют определенные фильтры CUPS для дополнительной функциональности. Эти фильтры включены в Snap, поэтому поддерживаются дополнительные функции (в большинстве случаев печать с PIN-кодом). Пользователь может добавить дополнительные PPD без необходимости пересобирать Snap (см. ниже).
Мы используем идентификатор устройства IEEE-1284 принтера, чтобы сначала определить, что это принтер PostScript (через поле CMD:), чтобы увидеть, поддерживается ли он вообще, и только затем проверяем через марку и модель, поддерживаем ли мы его явно с помощью PPD. Принтерам PostScript, для которых нет PPD, назначается общий PPD. Проверкой поля CMD: перед поиском марки/модели мы гарантируем, что если PostScript предоставляется дополнительным модулем, то этот модуль действительно установлен.
Стандартные атрибуты IPP задания сопоставляются с наиболее подходящими для них настройками параметров PPD, чтобы пользователи могли печатать с любого типа клиента (например, телефона или устройства IoT), который поддерживает только стандартные атрибуты IPP и не может получить параметры PPD. Лотки, размеры носителей, типы носителей и дуплекс можно легко сопоставить, но когда дело доходит до цвета и качества, все становится сложнее, поскольку соответствующие параметры сильно различаются в файлах PPD. Здесь мы используем алгоритм, который автоматически (кто хочет отредактировать вручную около 10 000 PPD для заданий) находит правильный набор настроек опций для каждой комбинации print-color-mode
( color
/ monochrome
), print-quality
( draft
/ normal
/ high
) и print-content-optimize
( auto
/ photo
/ graphics
/ text
/ text-and-graphics
) в PPD текущего принтера. Таким образом, у вас есть легкий доступ к полному качеству и скорости вашего принтера без необходимости иметь дело с настройками параметров для конкретного принтера (исходные параметры по-прежнему доступны через интерфейс веб-администратора).
Возможности принтера для данной модели принтера («драйвер» в приложении принтера) не являются статичными на протяжении всего срока действия очереди печати, настроенной в приложении принтера. Пользователь может на странице веб-интерфейса администратора настроить, какие аппаратные аксессуары (дополнительные лотки для бумаги, блок двусторонней печати, финишеры и т. д.) установлены на принтере, а приложение принтера обновляет структуру данных драйвера и, следовательно, возможности принтера. Ответ на запрос IPP get-printer-attributes обновляется соответствующим образом.
PostScript — это полноценный язык программирования, и многие принтеры PostScript позволяют запрашивать настройки параметров и наличие устанавливаемых аппаратных аксессуаров, выполняющих соответствующий код PostScript. Если параметр может быть запрошен, производитель помещает необходимый код PostScript в файл PPD вместе с опцией запроса. Эти запросы поддерживаются веб-интерфейсом приложения принтера.
Доступные принтеры обнаруживаются (и используются) с помощью серверов CUPS, а не с помощью собственных серверов PAPPL. Таким образом, используются специальные обходные пути для USB-принтеров с проблемами совместимости (и их можно редактировать), а вывод PostScript может быть отправлен на принтер через IPP, IPPS (зашифрованный!) И LPD в дополнение к сокету (обычно порт 9100). Серверную часть SNMP можно настроить (сообщество, область адресов).
Если у вас необычная конфигурация системы или персональный брандмауэр, ваш принтер, возможно, не будет обнаружен. В этой ситуации может оказаться полезным ввод вручную «Сетевой принтер» в сочетании с полем имени хоста/IP.
На странице «Добавить файлы PPD» в списке уже добавленных пользовательских файлов PPD отметьте, какие из них действительно используются принтером, настроенным в приложении принтера, чтобы пользователь не удалил эти файлы.
Удобочитаемые строки для параметров поставщика (требуется поддержка со стороны PAPPL: проблема № 58: поддержка локализации)
Интернационализация/локализация (требуется поддержка со стороны PAPPL: проблема № 58: поддержка локализации)
Проверка уровня чернил SNMP с помощью функции ps_status() (требуется поддержка PAPPL: проблема № 83: CUPS выполняет опросы уровня чернил IPP и SNMP через серверные части, PAPPL должен иметь функции для этого)
Опции сборки фильтров-чашек, для сборки без libqpdf и/или без libppd, первый позволит создать Snap этого приложения принтера без загрузки и сборки QPDF.
Чтобы просто запустить и использовать это приложение принтера, просто установите его из Snap Store:
sudo snap install --edge ps-printer-app
Затем следуйте инструкциям ниже для его настройки.
Чтобы собрать Snap самостоятельно, в главном каталоге этого репозитория запустите
snapcraft snap
При этом будут загружены все необходимые пакеты и собрано приложение принтера PostScript. Обратите внимание, что PAPPL (предстоящая версия 1.0) и cups-filters (предстоящая версия 2.0) извлекаются непосредственно из своих репозиториев GIT, поскольку соответствующих выпусков пока нет. Это также может привести к тому, что это приложение принтера внезапно больше не будет собираться.
ПРИМЕЧАНИЕ. В Ubuntu Groovy (20.10) существует ошибка, которая не позволяет создавать Snap, см. это обсуждение на форуме Snapcraft. Проблема уже решена, но еще не вошла в Groovy.
Любая старая (например, 20.04) или более новая (например, 21.04) версия Ubuntu должна работать.
Чтобы установить полученный Snap-запуск
sudo snap install --dangerous ps-printer-app_1.0_amd64.snap
Приложение принтера будет автоматически запущено как демон сервера.
Войдите в веб-интерфейс
http://localhost:8000/
Используйте веб-интерфейс для добавления принтера. Укажите имя, выберите обнаруженный принтер, затем выберите марку и модель. Также установите установленные аксессуары, загруженные носители и параметры по умолчанию. Конфигурация аксессуаров и параметры по умолчанию также могут часто запрашиваться с принтера.
Затем распечатайте файлы PDF, PostScript, JPEG, Apple Raster или PWG Raster с помощью
ps-printer-app FILE
или печатайте с помощью CUPS, CUPS (а также с просмотром чашек) обнаруживает и обрабатывает принтеры, настроенные с помощью этого приложения принтера, как принтеры IPP без драйверов (IPP Everywhere и AirPrint).
Вы также можете добавить файлы PPD без пересборки снапа, либо воспользовавшись кнопкой «Добавить файлы PPD» в веб-интерфейсе, либо скопировав файлы PPD вручную:
sudo cp PPDFILE /var/snap/ps-printer-app/common/ppd/
После копирования (или удаления) файлов PPD вручную необходимо перезагрузить сервер или в веб-интерфейсе на странице «Добавить файлы PPD» нажать кнопку «Обновить» внизу. Это добавит изменения во внутренний список драйверов.
На странице «Добавить принтер» в раскрывающемся списке выбора драйвера добавленные пользователем файлы PPD помечаются как «ДОБАВЛЕННЫЕ ПОЛЬЗОВАТЕЛЕМ». При настройке принтера с автоматическим выбором драйвера предпочтительны файлы PPD, добавленные пользователем.
PPDFILE
в приведенной выше командной строке не может быть только одним файлом PPD, но может представлять собой любое количество отдельных файлов PPD, файлов .tar.gz
содержащих PPD (в произвольной структуре каталогов), и исполняемых файлов, объединяющих PPD, которые обычно помещаются в /usr/lib/cups/driver
. Вы также можете создавать произвольные структуры подкаталогов в /var/snap/ps-printer-app/current/ppd/
содержащие указанные типы файлов. Только убедитесь, что вы не помещаете туда какие-либо исполняемые файлы, которые делают что-либо кроме перечисления и создания файлов PPD.
Обратите внимание, что с помощью веб-интерфейса вы можете управлять только отдельными файлами PPD (несжатыми или сжатыми с помощью gzip
) в самом файле /var/snap/ps-printer-app/current/ppd/
. Архивы, исполняемые файлы и подкаталоги не отображаются, а соответствующие загрузки не принимаются. Это особенно предотвращает добавление исполняемых файлов без root-прав.
Любой добавленный файл PPD должен быть предназначен для принтеров PostScript, поскольку файлы PPD, отличные от PostScript, предназначены для драйверов CUPS, поэтому для их работы потребуются дополнительные файлы, а такие файлы не поддерживаются этим приложением принтера. На странице «Добавить файлы PPD» отображаются предупреждения, если такие файлы загружаются.
Видеть
ps-printer-app --help
для получения дополнительных возможностей.
Используйте аргумент «-o log-level=debug» для подробного протоколирования в окне терминала.
Вы можете добавить файлы в /var/snap/ps-printer-app/common/usb/
для получения дополнительных правил совместимости USB. Редактируйте существующие файлы только для быстрых тестов, так как они заменяются при каждом обновлении Snap (для введения новых правил).
Вы можете отредактировать файл /var/snap/ps-printer-app/common/cups/snmp.conf
для настройки обнаружения сетевых принтеров SNMP.
Вы также можете выполнить «быструю» сборку без привязки и установки PAPPL, cups-filters 2.x и pappl-retrofit в вашу систему. Вам нужен каталог с последним снимком GIT PAPPL, последним снимком GIT cups-filters и последним снимком GIT pappl-retrofit (основные ветки каждого). Все они должны быть скомпилированы ( ./autogen.sh; ./configure; make
), установка не требуется. Также установите заголовочные файлы всех необходимых библиотек (это должна сделать установка «libcups2-dev»).
В каталоге с ps-printer-app.c запустите командную строку
gcc -o ps-printer-app ps-printer-app.c $PAPPL_SRC/pappl/libpappl.a $CUPS_FILTERS_SRC/.libs/libppd.a $CUPS_FILTERS_SRC/.libs/libcupsfilters.a $PAPPL_RETROFIT_SRC/.libs/libpappl-retrofit.a -ldl -lpthread -lppd -lcups -lavahi-common -lavahi-client -lgnutls -ljpeg -lpng16 -ltiff -lz -lm -lusb-1.0 -lpam -lqpdf -lstdc++ -I. -I$PAPPL_SRC/pappl -I$CUPS_FILTERS_SRC/ppd -I$CUPS_FILTERS_SRC/cupsfilters -I$PAPPL_RETROFIT_SRC/pappl/retrofit -L$CUPS_FILTERS_SRC/.libs/ -L$PAPPL_RETROFIT_SRC/.libs/
Существует также Makefile, но для него в вашей системе должны быть установлены PAPPL, cups-filters 2.x и pappl-retrofit.
Бегать
./ps-printer-app --help
При запуске версии без привязки по умолчанию файлы PPD ищутся в
/usr/share/ppd/
/usr/lib/cups/driver/
/var/lib/ps-printer-app/ppd/
Последний путь используется при добавлении файлов PPD с помощью страницы «Добавить файлы PPD» в веб-интерфейсе.
Вместо этого вы можете установить переменную среды PPD_PATHS
для поиска в других местах:
PPD_PATHS=/path/to/my/ppds:/my/second/place ./ps-printer-app server
Просто поместите в переменную список любого количества путей, разделенных двоеточиями, всегда последний, используемый на странице «Добавить файлы PPD». Рекомендуется создать сценарий-оболочку.
Это приложение принтера использует серверные части CUPS, а не PAPPL. Это означает, что для USB-принтеров используются обходные пути USB-причуды CUPS для решения проблем совместимости, сетевые принтеры также могут использоваться с протоколами IPP, IPPS и LPD, а обнаружение принтеров SNMP можно настраивать.
Правила USB Quirk в /usr/share/cups/usb
и файле /etc/cups/snmp.conf
можно при необходимости редактировать.
Убедитесь, что у вас установлен CUPS (по крайней мере, его бэкэнд).
Вам также понадобится Ghostscript для печати заданий PDF.
Для доступа к тестовой странице testpage.ps
используйте переменную среды TESTPAGE_DIR:
TESTPAGE_DIR=`pwd` PPD_PATHS=/path/to/my/ppds:/my/second/place ./ps-printer-app server
или для собственного создания тестовой страницы (PostScript, PDF, PNG, JPEG, Apple Raster, PWG Raster):
TESTPAGE=/path/to/my/testpage/my_testpage.ps PPD_PATHS=/path/to/my/ppds:/my/second/place ./ps-printer-app server
Приложение принтера PostScript защищено авторскими правами © 2020 Тилля Камппетера.
Он создан на основе приложения принтера HP PCL, первой рабочей модели приложения растрового принтера, использующей PAPPL. Он доступен здесь:
https://github.com/michaelrsweet/hp-printer-app
Приложение принтера HP PCL защищено авторскими правами © Michael R Sweet, 2019-2020.
Это программное обеспечение лицензируется по лицензии Apache версии 2.0, за исключением возможности связывания с программным обеспечением GPL2/LGPL2 (например, более старыми версиями CUPS). Дополнительную информацию смотрите в файлах «ЛИЦЕНЗИЯ» и «УВЕДОМЛЕНИЕ».