Об устройстве сервера печати CUPS | Статья в журнале «Молодой ученый»

Отправьте статью сегодня! Журнал выйдет 28 декабря, печатный экземпляр отправим 1 января.

Опубликовать статью в журнале

Автор:

Рубрика: Информационные технологии

Опубликовано в Молодой учёный №26 (368) июнь 2021 г.

Дата публикации: 20.06.2021

Статья просмотрена: 386 раз

Библиографическое описание:

Бредихин, Б. А. Об устройстве сервера печати CUPS / Б. А. Бредихин. — Текст : непосредственный // Молодой ученый. — 2021. — № 26 (368). — С. 19-23. — URL: https://moluch.ru/archive/368/82671/ (дата обращения: 19.12.2024).



В статье рассматривается устройство сервера печати CUPS, а также исследуется возможность применения CUPS API для вывода фракталов на печать.

Ключевые слова: CUPS, HTTP, IPP, система фильтрации, планировщик, фильтр, печать, принтер, ковёр Серпинского

В большинстве UNIX-подобных операционных систем используется сервер печати CUPS, состоящая из следующих компонентов [8]:

— планировщик,

— система фильтрации,

— бэк-энд.

Планировщик

Планировщик представляет собой серверное приложение, работающее по протоколам HTTP/1.1 [2] и IPP/2.1 [6]. Планировщик управляет HTTP и IPP запросами, принтерами, заданиями, подписками и оповещениями системы. HTTP используется для работы браузерных служб, а IPP — для отправляющих сообщений, которые инкапсулируются в HTTP POST запрос с типом контента application/ipp.

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

Планировщик представлен исполняемым файлом cupsd [9], настраиваемом с помощью файла конфигурации (по умолчанию это /etc/cups/cupsd.conf).

Планирование заданий происходит с помощью блокирующей очереди с приоритетами [10, 7], при печати на нескольких принтерах, подключенных к одному серверу, возможна параллельная печать с использованием алгоритма Round-robin [1] путём отправки задания первому доступному принтеру соответствующего класса.

Планировщик получает задания на печать от пользователя и отправляет их в систему фильтрации в соответствие фильтрам, указанным в задании [7 scheduler/main.c]. В случае отмены задания пользователем, планировщик посылает сигнал SIGTERM фильтрам и бэк-энду.

Система фильтрации

Система фильтрации [11] отвечает за преобразование файлов задания в формат, соответствующий требуемому принтеру. Может быть применена последовательность фильтров для преобразования исходного файла в требуемый формат в случае отсутствия требуемого прямого фильтра.

Планировщик запускает один или несколько фильтров для печати данного задания [12]. Первый фильтр всегда читает из файла и пишет в стандартный вывод, в то время как все остальные фильтры читают из стандартного ввода и пишут в стандартный вывод. Последний фильтр всегда бэк-энд, который читает из стандартного ввода и пишет на устройство.

Все фильтры, за исключением бэк-энда, работают от имени непривилегированного пользователя.

Взаимодействие с планировщиком

Первый фильтр в последовательности получает от планировщика путь к файлу, который необходимо напечатать.

В случае отмены задания планировщик отправляет всем фильтрам и бэк-энду сигнал SIGTERM, получив который фильтры, бэк-энд и мониторы порта должны его обработать, произвести необходимую очистку, сформировать валидный выходной файл или вернуть принтер в состояние готовности.

Также фильтры могут отправлять сообщения планировщику через stderr, информируя об ошибках, состоянии принтера и прогрессе печати.

Бэк-энд

Как уже упоминалось выше, бэк-энд — специальный вид фильтра, взаимодействующий напрямую с устройством печати [13]. также как фильтры, бэк-энд считывает данное из стандартного ввода или файла, но пишет на устройство. При запуске без аргументов выводится список доступных устройств.

Конфигурирование

Конфигурирование планировщика

Возможна настройка следующих основных параметров планировщика [14]:

— автоматическая очистка истории печати,

— указание протоколов, используемых для доступа к принтеру внутри локальной сети,

— размер бумаги по умолчанию,

— доменное имя сервера печати,

— политика обработки ошибок,

— настройки фильтрации (см. ниже),

— настройки отменённых и ошибочных заданий,

— параметры сервера (IP адрес, порт, Unix-сокет),

— и т. п.

Драйверы принтеров хранятся в PPD файлах, описывающих возможности принтеров конкретной модели.

Также возможна аутентификация на сервере [15, 16] с помощью учётной записи операционной системы или сертификата Kerberos [3].

Вывод фракталов на печать путём прямого взаимодействия с CUPS API

В целях исследования возможности вывода фракталов на печать, воспользуемся CUPS backend’ом 2file от KDE [17].

Используется компилятор gcc и библиотека libcups2-dev.

В качестве фрактала для исследования выберем ковёр Серпинского [5].

Как было сказано выше, задания на печать проходят через систему фильтрации перед отправкой на принтер. Одним из стандартных форматов для CUPS является PostScript [4, 18], для динамического формирования PostScript и его передачи CUPS может быть использована библиотека Cairo [19].

Алгоритм построение ковра Серпинского:

  1. Пусть размер ячейки на -й итерации .
  2. Строится закрашенный с вершинами в точках , , ,
  3. Рекурсивно запускается итерация алгоритма для каждого из 8 квадратов, окружающих центральный.

Для вывода изображения используется временный файл, который удаляется после завершения работы программы. Этот файл используется для хранения данных холста в Cairo и подаётся на вход системе фильтрации CUPS для печати на принтере по умолчанию (возможно реализовать меню с выбором требуемого принтера пользователем, используя cupsGetDests [20]).

Одна из особенностей CUPS — данные передаются на бэк-энд в векторном формате, а затем растеризуются под разрешение принтера и цветовой профиль документа конвертируются под требования конкретной модели принтера (например конвертация RGB в CMYK или градации серого в чёрно-белый). Этот факт позволяет ограничить глубину рекурсии, когда на наибольшей глубине рекурсии минимальный размер элемента равен 1 пиксель.

На каждой итерации при построении ковра Серпинского размер элемента уменьшается в 3 раза, таким образом максимальная глубина рекурсии, до которой имеет смысл проводить построение, равна , где и — ширина и высота холста в пикселях.

Согласно [21] для листа A4 размеры составляют 595x842.

Реализация

Процедура рисования фрактала выглядит следующим образом:

То есть на каждой итерации 8 рекурсивных вызовов и одна операция, выполняемая за константное время. Получаем сложность алгоритма

, где — максимальная глубина рекурсии.

В параметре cr передаётся контекст Cairo, созданный на временном холсте. После запуска состояние холста записывается во временный файл и передаётся на стандартный принтер командой cupsPrintFile(cupsGetDefault(), tmpfilename, «cairo PS», 0, NULL) и удаляется. В результате получаем следующий вывод принтера:

Код работы с CUPS

Выводы

В результате исследования выяснено, что CUPS принимает в качестве задания файл, причём возможна динамическая генерация файла в формате PostScript.

Литература:

  1. Round-robin (алгоритм) // Википедия. 2020. [Электронный ресурс]. URL: https://ru.wikipedia.org/w/index.php?title=Round-robin_(%D0 %B0 %D0 %BB %D0 %B3 %D0 %BE %D1 %80 %D0 %B8 %D1 %82 %D0 %BC)&oldid=105303116 (дата обращения: 08.06.2021).
  2. Fielding R. [и др.]. RFC Editor. Hypertext Transfer Protocol -- HTTP/1.1. 1999.
  3. Neuman C. [и др.]. RFC Editor. The Kerberos Network Authentication Service (V5). 2005.
  4. Perry T. S. «PostScript» prints anything: a case history // IEEE Spectrum. 1988. № 5 (25). C. 42–46.
  5. Sierpinski W. Sur une courbe cantorienne qui contient une image biunivoquet et continue detoute courbe donnée. // Comptes rendus hebdomadaires des séances de l’Académie des sciences. 1916. (162). P. 629–632. URL: https://gallica.bnf.fr/ark:/12148/bpt6k3115n/f635.item (дата обращения 17.06.2021)
  6. The Printer Working Group. IPP Verson 2.0, 2.1, and 2.2. 2015.
  7. apple/cups Apple, 2021.
  8. CUPS Design Description [Электронный ресурс]. URL: http://www.cups.org/doc/spec-design.html (дата обращения: 08.06.2021).
  9. cupsd(8) [Электронный ресурс]. URL: https://www.cups.org/doc/man-cupsd.html (дата обращения: 08.06.2021).
  10. An Overview of the Common UNIX Printing System [Электронный ресурс]. URL: https://opensource.apple.com/source/cups/cups-87/doc/overview.html (дата обращения: 08.06.2021).
  11. filter(7) [Электронный ресурс]. URL: http://www.cups.org/doc/man-filter.html (дата обращения: 10.06.2021).
  12. Filter and Backend Programming [Электронный ресурс]. URL: http://www.cups.org/doc/api-filter.html (дата обращения: 10.06.2021).
  13. backend(7) [Электронный ресурс]. URL: http://www.cups.org/doc/man-backend.html (дата обращения: 15.06.2021).
  14. cupsd.conf(5) [Электронный ресурс]. URL: https://www.cups.org/doc/man-cupsd.conf.html (дата обращения: 08.06.2021).
  15. CUPS Software Administrators Manual [Электронный ресурс]. URL: https://opensource.apple.com/source/cups/cups-87/doc/sam.shtml (дата обращения: 08.06.2021).
  16. Using Kerberos Authentication [Электронный ресурс]. URL: https://www.cups.org/doc/kerberos.html (дата обращения: 08.06.2021).
  17. Printing/Developer Tools — KDE Community Wiki [Электронный ресурс]. URL: https://community.kde.org/Printing/Developer_Tools (дата обращения: 15.06.2021).
  18. Developing PostScript Printer Drivers [Электронный ресурс]. URL: http://www.cups.org/doc/postscript-driver.html (дата обращения: 10.06.2021).
  19. cairographics.org [Электронный ресурс]. URL: https://cairographics.org/ (дата обращения: 17.06.2021).
  20. CUPS API [Электронный ресурс]. URL: https://opensource.apple.com/source/cups/cups-327/cups/doc/help/api-cups.html#cupsGetDests (дата обращения: 19.06.2021).
  21. Paper Keywords and paper size in points (GNU gv Manual) [Электронный ресурс]. URL: http://www.gnu.org/software/gv/manual/html_node/Paper-Keywords-and-paper-size-in-points.html (дата обращения: 19.06.2021).
Основные термины (генерируются автоматически): CUPS, HTTP, IPP, система фильтрации, планировщик, API, SIGTERM, фильтр, печать, стандартный ввод.


Ключевые слова

принтер, печать, система фильтрации, фильтр, HTTP, CUPS, IPP, планировщик, ковёр Серпинского

Похожие статьи

Разработка программы для оптического распознавания символов с помощью Tesseract

В данной статье наглядно и подробно рассмотрен пример работы с библиотекой Tesseract ORC, создана программа для распознавания текста с фото.

Разработка алгоритма валидации форм на клиентской стороне для передачи данных

В данной статье рассмотрены методы и алгоритмы функционирования систем клиент-серверной архитектуры для передачи данных с помощью технологий программных инструментов: HTML, CSS, Javascript.

Диагностика утечек памяти в Java-приложениях

Данная статья описывает структуру хранения используемой памяти, простые способы диагностики её утечек и временные исправления их.

Исследование преобразования формул в MathML

В статье рассматривается язык разметки MathML, а также алгоритмы его преобразования.

Моделирование данных телеметрии в Apache Cassandra

В статье авторы исследуют возможную структуру хранения данных датчиков в нереляционной распределенной базе данных Apache Cassandra.

Конфигурирование и тестирование производительности вычислительного кластера на базе неоднородных многоядерных узлов

В работе рассматривается выбор оборудования, программного обеспечения, вопросы настройки и тестирования производительности вычислительного кластера на базе небольшого числа неоднородных многоядерных серверных узлов. Оценка производительности выполняе...

Работа с элементами GUI на примере приложения с использованием кроссплатформенного фреймворка Qt

В статье подробно разобран код приложения, написанного с использованием кроссплатформенного фреймворка Qt основанного на языке C++. Приложение Dynamic Layouts является одним из примеров, входящих в пакет Qt Creator. На примере данного приложения расс...

PlantUML: создание диаграмм с использованием текстового синтаксиса

В статье автор рассматривает PlantUML как эффективный инструмент для создания диаграмм в разработке программного обеспечения, преимущества использования текстового синтаксиса, разнообразие поддерживаемых диаграмм.

Анализ технологий разработки веб-интерфейсов

Статья посвящена анализу технологий разработки веб-интерфейсов. Рассматриваются функции программ, анализируются их недостатки и достоинства, приводится сравнительная характеристика.

Обзор технологии GraphQL

В статье рассматривается технология GraphQL, приводится обзор достоинств и недостатков, а также сравнение с REST технологией.

Похожие статьи

Разработка программы для оптического распознавания символов с помощью Tesseract

В данной статье наглядно и подробно рассмотрен пример работы с библиотекой Tesseract ORC, создана программа для распознавания текста с фото.

Разработка алгоритма валидации форм на клиентской стороне для передачи данных

В данной статье рассмотрены методы и алгоритмы функционирования систем клиент-серверной архитектуры для передачи данных с помощью технологий программных инструментов: HTML, CSS, Javascript.

Диагностика утечек памяти в Java-приложениях

Данная статья описывает структуру хранения используемой памяти, простые способы диагностики её утечек и временные исправления их.

Исследование преобразования формул в MathML

В статье рассматривается язык разметки MathML, а также алгоритмы его преобразования.

Моделирование данных телеметрии в Apache Cassandra

В статье авторы исследуют возможную структуру хранения данных датчиков в нереляционной распределенной базе данных Apache Cassandra.

Конфигурирование и тестирование производительности вычислительного кластера на базе неоднородных многоядерных узлов

В работе рассматривается выбор оборудования, программного обеспечения, вопросы настройки и тестирования производительности вычислительного кластера на базе небольшого числа неоднородных многоядерных серверных узлов. Оценка производительности выполняе...

Работа с элементами GUI на примере приложения с использованием кроссплатформенного фреймворка Qt

В статье подробно разобран код приложения, написанного с использованием кроссплатформенного фреймворка Qt основанного на языке C++. Приложение Dynamic Layouts является одним из примеров, входящих в пакет Qt Creator. На примере данного приложения расс...

PlantUML: создание диаграмм с использованием текстового синтаксиса

В статье автор рассматривает PlantUML как эффективный инструмент для создания диаграмм в разработке программного обеспечения, преимущества использования текстового синтаксиса, разнообразие поддерживаемых диаграмм.

Анализ технологий разработки веб-интерфейсов

Статья посвящена анализу технологий разработки веб-интерфейсов. Рассматриваются функции программ, анализируются их недостатки и достоинства, приводится сравнительная характеристика.

Обзор технологии GraphQL

В статье рассматривается технология GraphQL, приводится обзор достоинств и недостатков, а также сравнение с REST технологией.

Задать вопрос