--- description: 'Эта глава посвящена системе печати в FreeBSD' next: books/handbook/linuxemu params: path: /books/handbook/printing/ part: 'Часть II. Стандартные задачи' prev: books/handbook/kernelconfig showBookMenu: 'true' tags: ["printing", "CUPS", "LPD", "PostScript", "PDLs", "HPLIP", "LPRng"] title: 'Глава 11. Печать' weight: 14 --- [[printing]] = Печать :doctype: book :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :sectnumoffset: 11 :partnums: :source-highlighter: rouge :experimental: :images-path: books/handbook/printing/ ifdef::env-beastie[] ifdef::backend-html5[] :imagesdir: ../../../../images/{images-path} endif::[] ifndef::book[] include::shared/authors.adoc[] include::shared/mirrors.adoc[] include::shared/releases.adoc[] include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists.adoc[] include::shared/{{% lang %}}/urls.adoc[] toc::[] endif::[] ifdef::backend-pdf,backend-epub3[] include::../../../../../shared/asciidoctor.adoc[] endif::[] endif::[] ifndef::env-beastie[] toc::[] include::../../../../../shared/asciidoctor.adoc[] endif::[] Размещение информации на бумаге — это важная функция, несмотря на многочисленные попытки отказаться от неё. Печать состоит из двух основных компонентов. Данные должны быть переданы на принтер и представлены в форме, которую принтер может обработать. [[printing-quick-start]] == Быстрый старт Базовую печать можно быстро настроить. Принтер должен уметь печатать обычный текст `ASCII`. Для печати других типов файлов см. crossref:printing[printing-lpd-filters, Фильтры]. [.procedure] **** . Создайте каталог для хранения файлов во время печати: + [source, shell] .... # mkdir -p /var/spool/lpd/lp # chown daemon:daemon /var/spool/lpd/lp # chmod 770 /var/spool/lpd/lp .... + . Как `root`, создайте файл [.filename]#/etc/printcap# со следующим содержимым: + [.programlisting] .... lp:\ lp=/dev/unlpt0:\ <.> sh:\ mx#0:\ sd=/var/spool/lpd/lp:\ lf=/var/log/lpd-errs: .... + <.> Эта строка предназначена для принтера, подключенного к порту `USB`. + Для принтера, подключённого к параллельному или «принтерному» порту, используйте: + [.programlisting] .... :lp=/dev/lpt0:\ .... + Для принтера, подключенного напрямую к сети, используйте: + [.programlisting] .... :lp=:rm=network-printer-name:rp=raw:\ .... + Замените _network-printer-name_ на `DNS` имя хоста сетевого принтера. + . Включите LPD, отредактировав файл [.filename]#/etc/rc.conf# и добавив следующую строку: + [.programlisting] .... lpd_enable="YES" .... + Запустите службу: + [source, shell] .... # service lpd start Starting lpd. .... + . Напечатайте тест: + [source, shell] .... # printf "1. This printer can print.\n2. This is the second line.\n" | lpr .... + [TIP] ==== Если обе строки начинаются не с левого края, а с отступом («ступеньками»), см. crossref:printing[printing-lpd-filters-stairstep, Предотвращение образования ступенек на простых текстовых принтерах]. ==== + Текстовые файлы теперь можно печатать с помощью `lpr`. Укажите имя файла в командной строке или передайте вывод напрямую в `lpr`. + [source, shell] .... % lpr textfile.txt % ls -lh | lpr .... **** [[printing-connections]] == Подключение принтеров Принтеры подключаются к компьютерным системам различными способами. Небольшие настольные принтеры обычно подключаются непосредственно к `USB`-порту компьютера. Более старые принтеры подключаются к параллельному или «принтерному» порту. Некоторые принтеры подключаются напрямую к сети, что упрощает их совместное использование несколькими компьютерами. Некоторые принтеры используют редкое последовательное соединение через serial-порт. FreeBSD может взаимодействовать со всеми типами принтеров. [[printing-connections-usb]] `USB`:: `USB`-принтеры можно подключить к любому свободному `USB`-порту компьютера. + Когда FreeBSD обнаруживает принтер `USB`, создаются два устройства: [.filename]#/dev/ulpt0# и [.filename]#/dev/unlpt0#. Данные, отправленные на любое из этих устройств, будут переданы принтеру. После каждой печати [.filename]#ulpt0# сбрасывает порт `USB`. Сброс порта может вызывать проблемы с некоторыми принтерами, поэтому обычно используется устройство [.filename]#unlpt0#. [.filename]#unlpt0# не сбрасывает порт USB вообще. [[printing-connections-parallel]] Параллельный порт (`IEEE`-1284):: Параллельный порт устройства это [.filename]#/dev/lpt0#. Это устройство присутствует независимо от того, подключен принтер или нет, оно не определяется автоматически. + Производители в основном отказались от этих «устаревших» портов, и многие компьютеры больше их не имеют. Для подключения параллельного принтера к порту `USB` можно использовать переходники. С таким переходником принтер можно использовать так, как если бы он был настоящим `USB`-принтером. Также для прямого подключения параллельных принтеров к сети можно использовать устройства, называемые _серверами печати_. [[printing-connections-serial]] Последовательный порт (RS-232):: Последовательные порты — это ещё один устаревший интерфейс, который редко используется для принтеров, за исключением некоторых специализированных применений. Кабели, разъёмы и необходимая распиновка могут сильно различаться. + Для последовательных портов, встроенных в материнскую плату, имя последовательного устройства — [.filename]#/dev/cuau0# или [.filename]#/dev/cuau1#. Также можно использовать последовательные адаптеры `USB`, которые будут отображаться как [.filename]#/dev/cuaU0#. + Несколько параметров связи должны быть известны для взаимодействия с последовательным принтером. Наиболее важные из них — это _скорость передачи_ или `BPS` (бит в секунду) и _чётность_. Значения могут различаться, но обычно последовательные принтеры используют скорость 9600 и отсутствие проверки на чётность. [[printing-connections-network]] Сеть:: Сетевые принтеры подключаются напрямую к локальной компьютерной сети. + `DNS` имя хоста принтера должно быть известно. Если принтеру назначается динамический адрес через `DHCP`, `DNS` должен динамически обновляться, чтобы имя хоста всегда соответствовало правильному `IP`-адресу. Сетевые принтеры часто получают статические `IP`-адреса, чтобы избежать этой проблемы. + Большинство сетевых принтеров понимают задания печати, отправленные по протоколу LPD. Также можно указать имя очереди печати. Некоторые принтеры обрабатывают данные по-разному в зависимости от используемой очереди. Например, очередь `raw` печатает данные без изменений, а очередь `text` добавляет символы возврата каретки к обычному тексту. + Многие сетевые принтеры также могут печатать данные, отправленные напрямую на порт 9100. [[printing-connections-summary]] === Краткое содержание Проводные сетевые подключения обычно проще всего настроить и обеспечивают наиболее быструю печать. Для прямого подключения к компьютеру предпочтительнее использовать `USB` из-за скорости и простоты. Параллельные подключения работают, но имеют ограничения по длине кабеля и скорости. Последовательные подключения сложнее настроить. Разводка кабелей различается в зависимости от модели, а параметры связи, такие как скорость передачи данных и биты чётности, добавляют сложности. К счастью, последовательные принтеры встречаются редко. [[printing-pdls]] == Языки описания страниц Данные, отправляемые на принтер, должны быть на языке, который принтер может понять. Эти языки называются языками описания страниц или PDL (Page Description Languages). [[print-pdls-ascii]] `ASCII`:: Обычный текст `ASCII` — это самый простой способ отправить данные на принтер. Символы соответствуют один к одному тому, что будет напечатано: символ `A` в данных напечатает `A` на странице. Доступно очень мало возможностей форматирования. Нет способа выбрать шрифт или пропорциональные интервалы. Вынужденная простота обычного `ASCII` означает, что текст можно печатать напрямую с компьютера с минимальным или вообще отсутствующим кодированием или преобразованием. Напечатанный вывод напрямую соответствует отправленным данным. + Некоторые недорогие принтеры не могут печатать обычный текст `ASCII`. Это усложняет их настройку, но обычно это всё равно возможно. [[print-pdls-postscript]] PostScript(R):: PostScript(R) почти противоположен `ASCII`. Вместо простого текста программа PostScript(R) представляет собой набор инструкций, которые рисуют итоговый документ. Можно использовать различные шрифты и графику. Однако за эту мощь приходится платить. Необходимо написать программу, которая рисует страницу. Обычно эта программа генерируется прикладным программным обеспечением, поэтому процесс остаётся невидимым для пользователя. + Недорогие принтеры иногда не поддерживают совместимость с PostScript(R) в целях экономии. [[print-pdls-pcl]] `PCL` (Printer Command Language):: `PCL` является расширением `ASCII`, добавляющим escape-последовательности для форматирования, выбора шрифтов и печати графики. Многие принтеры поддерживают `PCL5`. Некоторые поддерживают более новые версии `PCL6` или `PCLXL`. Эти более поздние версии являются надмножествами `PCL5` и могут обеспечивать более быструю печать. [[print-pdls-host-based]] Принтер на основе хоста:: Производители могут снизить стоимость принтера, используя простой процессор и минимум памяти. Такие принтеры не способны печатать обычный текст. Вместо этого растровые изображения текста и графики создаются драйвером на главном компьютере и затем отправляются на принтер. Такие принтеры называются _host-based_ (управляемыми хостом). + Взаимодействие между драйвером и принтером, подключенным к хосту, часто осуществляется по проприетарным или недокументированным протоколам, что делает их работоспособными только в наиболее распространённых операционных системах. [[print-pdls-table]] === Преобразование PostScript(R) в другие PDL Многие приложения из Коллекции портов и утилиты FreeBSD создают вывод в формате PostScript(R). В следующей таблице представлены утилиты для преобразования этого формата в другие распространённые PDL: [[print-pdls-ps-to-other-tbl]] .Языки PDL на выходе [cols="1,1,1", frame="none", options="header"] |=== <| PDL на выходе <| Чем создается <| Заметки |`PCL` или `PCL5` |package:print/ghostscript9-base[] |`-sDEVICE=ljet4` для монохромной печати, `-sDEVICE=cljet5` для цветной |`PCLXL` или `PCL6` |package:print/ghostscript9-base[] |`-sDEVICE=pxlmono` для монохромного режима, `-sDEVICE=pxlcolor` для цветного |`ESC/P2` |package:print/ghostscript9-base[] |`-sDEVICE=uniprint` |`XQX` |package:print/foo2zjs[] | |=== [[print-pdls-summary]] === Краткое содержание Для наиболее простой печати выберите принтер с поддержкой PostScript(R). Принтеры, поддерживающие `PCL`, являются следующим предпочтительным вариантом. С помощью package:print/ghostscript9-base[] эти принтеры можно использовать так, как если бы они изначально понимали PostScript(R). Принтеры, которые напрямую поддерживают PostScript(R) или `PCL`, почти всегда также поддерживают прямую печать обычных текстовых файлов в формате `ASCII`. Строковые принтеры, такие как обычные струйные, обычно не поддерживают PostScript(R) или `PCL`. Они часто могут печатать простые текстовые файлы в формате `ASCII`. Пакет package:print/ghostscript9-base[] поддерживает языки описания страниц (PDL), используемые некоторыми из этих принтеров. Однако печать всей графической страницы на таких принтерах часто происходит очень медленно из-за большого объёма передаваемых и печатаемых данных. Настроить принтеры, управляемые хостом, часто сложнее. Некоторые из них вообще нельзя использовать из-за проприетарных языков описания страниц (PDL). По возможности избегайте таких принтеров. Информацию о конкретных `PDL`, используемых различными моделями принтеров, можно найти на сайте http://www.openprinting.org/printers[]. [[printing-direct]] == Прямая печать Для периодической печати файлы можно отправлять непосредственно на устройство принтера без дополнительной настройки. Например, файл с именем [.filename]#sample.txt# можно отправить на принтер с интерфейсом `USB`: [source, shell] .... # cp sample.txt /dev/unlpt0 .... Прямая печать на сетевые принтеры зависит от возможностей принтера, но большинство из них принимают задания на печать через порт 9100, и для этого можно использовать man:nc[1]. Чтобы напечатать тот же файл на принтере с `DNS`-именем хоста _netlaser_: [source, shell] .... # nc netlaser 9100 < sample.txt .... [[printing-lpd]] == LPD (демон линейного принтера) Печать файла в фоновом режиме называется спулингом. Спулер позволяет пользователю продолжать работу с другими программами на компьютере, не ожидая завершения медленного процесса печати. FreeBSD включает спулер под названием man:lpd[8]. Задания на печать отправляются с помощью man:lpr[1]. [[printing-lpd-setup]] === Начальная настройка Создается каталог для хранения заданий печати, устанавливается владелец, а права доступа настраиваются так, чтобы другие пользователи не могли просматривать содержимое этих файлов: [source, shell] .... # mkdir -p /var/spool/lpd/lp # chown daemon:daemon /var/spool/lpd/lp # chmod 770 /var/spool/lpd/lp .... Принтеры определяются в файле [.filename]#/etc/printcap#. Запись для каждого принтера включает такие данные, как имя, порт, к которому он подключен, и различные другие параметры. Создайте файл [.filename]#/etc/printcap# со следующим содержимым: [.programlisting] .... lp:\ <.> :lp=/dev/unlpt0:\ <.> :sh:\ <.> :mx#0:\ <.> :sd=/var/spool/lpd/lp:\ <.> :lf=/var/log/lpd-errs: <.> .... <.> Имя этого принтера. man:lpr[1] отправляет задания на печать на принтер `lp`, если другой принтер не указан с помощью `-P`, поэтому принтер по умолчанию должен называться `lp`. <.> Устройство, к которому подключен принтер. Замените эту строку на соответствующую для типа подключения, указанного здесь. <.> Подавить вывод титульной страницы в начале задания печати. <.> Не ограничивать максимальный размер задания на печать. <.> Путь к каталогу спулинга для этого принтера. Каждый принтер использует свой собственный каталог спулинга. <.> Файл журнала, в который будут записываться ошибки для этого принтера. После создания [.filename]#/etc/printcap# используйте man:chkprintcap[8] для проверки на ошибки: [source, shell] .... # chkprintcap .... Исправьте все выявленные проблемы перед продолжением. Включите man:lpd[8] в [.filename]#/etc/rc.conf#: [.programlisting] .... lpd_enable="YES" .... Запустите службу: [source, shell] .... # service lpd start .... [[printing-lpd-lpr]] === Печать с помощью man:lpr[1] Документы отправляются на печать с помощью `lpr`. Файл для печати может быть указан в командной строке или передан в `lpr` через конвейер. Эти две команды эквивалентны и отправляют содержимое файла [.filename]#doc.txt# на принтер по умолчанию: [source, shell] .... % lpr doc.txt % cat doc.txt | lpr .... Принтеры можно выбрать с помощью `-P`. Для печати на принтере с именем _laser_: [source, shell] .... % lpr -Plaser doc.txt .... [[printing-lpd-filters]] === Фильтры Примеры, показанные до этого, отправляли содержимое текстового файла напрямую на принтер. Пока принтер понимает содержимое этих файлов, вывод будет печататься корректно. Некоторые принтеры не способны печатать обычный текст, а входной файл может даже не быть текстовым. Фильтры позволяют преобразовывать или обрабатывать файлы. Обычно они используются для преобразования одного типа входных данных, например, простого текста, в формат, который принтер может понять, например PostScript(R) или `PCL`. Фильтры также могут использоваться для предоставления дополнительных функций, таких как добавление номеров страниц или подсветка исходного кода для удобства чтения. Обсуждаемые здесь фильтры являются _входными фильтрами_ или _текстовыми фильтрами_. Эти фильтры преобразуют входящий файл в различные формы. Используйте man:su[1], чтобы стать `root` перед созданием файлов. Фильтры указываются в [.filename]#/etc/printcap# с идентификатором `if=`. Чтобы использовать [.filename]#/usr/local/libexec/lf2crlf# в качестве фильтра, измените [.filename]#/etc/printcap# следующим образом: [.programlisting] .... lp:\ :lp=/dev/unlpt0:\ :sh:\ :mx#0:\ :sd=/var/spool/lpd/lp:\ :if=/usr/local/libexec/lf2crlf:\ <.> :lf=/var/log/lpd-errs: .... <.> `if=` определяет _входной фильтр_, который будет использоваться для входящего текста. [TIP] ==== Символы обратной косой черты _продолжения строки_ в конце строк в записях [.filename]#printcap# показывают, что запись для принтера на самом деле представляет собой одну длинную строку с элементами, разделёнными двоеточиями. Предыдущий пример можно переписать в виде одной менее читаемой строки: [.programlisting] .... lp:lp=/dev/unlpt0:sh:mx#0:sd=/var/spool/lpd/lp:if=/usr/local/libexec/lf2crlf:lf=/var/log/lpd-errs: .... ==== [[printing-lpd-filters-stairstep]] ==== Предотвращение ступенчатости на простых текстовых принтерах Типичные текстовые файлы FreeBSD содержат только один символ перевода строки в конце каждой строки. Эти строки будут выводиться "лесенкой" на стандартном принтере: [.programlisting] .... A printed file looks like the steps of a staircase scattered by the wind .... Фильтр может преобразовывать символы новой строки в возврат каретки и новую строку. Возврат каретки заставляет принтер возвращаться к левому краю после каждой строки. Создайте файл [.filename]#/usr/local/libexec/lf2crlf# со следующим содержимым: [.programlisting] .... #!/bin/sh CR=$'\r' /usr/bin/sed -e "s/$/${CR}/g" .... Установите разрешения и сделайте файл исполняемым: [source, shell] .... # chmod 555 /usr/local/libexec/lf2crlf .... Измените [.filename]#/etc/printcap#, чтобы использовать новый фильтр: [.programlisting] .... :if=/usr/local/libexec/lf2crlf:\ .... Протестируйте фильтр, напечатав тот же текстовый файл. Возврат каретки приведет к тому, что каждая строка будет начинаться с левого края страницы. [[printing-lpd-filters-enscript]] ==== Красивое оформление текста на PostScript(R) принтерах с помощью package:print/enscript[] GNUEnscript преобразует обычные текстовые файлы в аккуратно отформатированный PostScript(R) для печати на принтерах PostScript(R). Он добавляет номера страниц, переносит длинные строки и предоставляет множество других функций, чтобы сделать печать текстовых файлов более удобочитаемой. В зависимости от местного размера бумаги установите один из пакетов: package:print/enscript-letter[] или package:print/enscript-a4[] из коллекции портов. Создайте файл [.filename]#/usr/local/libexec/enscript# со следующим содержимым: [.programlisting] .... #!/bin/sh /usr/local/bin/enscript -o - .... Установите разрешения и сделайте файл исполняемым: [source, shell] .... # chmod 555 /usr/local/libexec/enscript .... Измените [.filename]#/etc/printcap#, чтобы использовать новый фильтр: [.programlisting] .... :if=/usr/local/libexec/enscript:\ .... Проверьте фильтр, напечатав простой текстовый файл. [[printing-lpd-filters-ps2pcl]] ==== Печать PostScript(R) на принтеры `PCL` Многие программы создают документы в формате PostScript(R). Однако недорогие принтеры часто поддерживают только простой текст или `PCL`. Этот фильтр преобразует файлы PostScript(R) в `PCL` перед отправкой на принтер. Установите интерпретатор PostScript(R) Ghostscript, package:print/ghostscript9-base[], из коллекции портов. Создайте файл [.filename]#/usr/local/libexec/ps2pcl# со следующим содержимым: [.programlisting] .... #!/bin/sh /usr/local/bin/gs -dSAFER -dNOPAUSE -dBATCH -q -sDEVICE=ljet4 -sOutputFile=- - .... Установите разрешения и сделайте файл исполняемым: [source, shell] .... # chmod 555 /usr/local/libexec/ps2pcl .... Поступающие на вход этого скрипта данные в формате PostScript(R) будут обработаны, преобразованы в `PCL` и отправлены на принтер. Измените файл [.filename]#/etc/printcap#, чтобы использовать новый входной фильтр: [.programlisting] .... :if=/usr/local/libexec/ps2pcl:\ .... Протестируйте фильтр, отправив в него небольшую программу PostScript(R): [source, shell] .... % printf "%%\!PS \n /Helvetica findfont 18 scalefont setfont \ 72 432 moveto (PostScript printing successful.) show showpage \004" | lpr .... [[printing-lpd-filters-smart]] ==== Умные фильтры Фильтр, который определяет тип входных данных и автоматически преобразует их в правильный формат для принтера, может быть очень удобным. Первые два символа файла PostScript(R) обычно `%!`. Фильтр может обнаружить эти два символа. Файлы PostScript(R) можно передавать на PostScript(R) принтер без изменений. Текстовые файлы можно преобразовать в PostScript(R) с помощью Enscript, как показано ранее. Создайте файл [.filename]#/usr/local/libexec/psif# с таким содержимым: [.programlisting] .... #!/bin/sh # # psif - Print PostScript or plain text on a PostScript printer # IFS="" read -r first_line first_two_chars=`expr "$first_line" : '\(..\)'` case "$first_two_chars" in %!) # %! : PostScript job, print it. echo "$first_line" && cat && exit 0 exit 2 ;; *) # otherwise, format with enscript ( echo "$first_line"; cat ) | /usr/local/bin/enscript -o - && exit 0 exit 2 ;; esac .... Установите разрешения и сделайте файл исполняемым: [source, shell] .... # chmod 555 /usr/local/libexec/psif .... Измените файл [.filename]#/etc/printcap#, чтобы использовать новый входной фильтр: [.programlisting] .... :if=/usr/local/libexec/psif:\ .... Протестируйте фильтр, распечатав файлы в формате PostScript(R) и обычные текстовые файлы. [[printing-lpd-queues]] === Множественные очереди Записи в [.filename]#/etc/printcap# фактически являются определениями _очередей_. Для одного принтера может быть несколько очередей. В сочетании с фильтрами множественные очереди предоставляют пользователям больше контроля над печатью их заданий. В качестве примера рассмотрим сетевой PostScript(R) лазерный принтер в офисе. Большинство пользователей хотят печатать простой текст, но несколько продвинутых пользователей хотят иметь возможность печатать PostScript(R) файлы напрямую. Для одного и того же принтера можно создать две записи в [.filename]#/etc/printcap#: [.programlisting] .... textprinter:\ :lp=9100@officelaser:\ :sh:\ :mx#0:\ :sd=/var/spool/lpd/textprinter:\ :if=/usr/local/libexec/enscript:\ :lf=/var/log/lpd-errs: psprinter:\ :lp=9100@officelaser:\ :sh:\ :mx#0:\ :sd=/var/spool/lpd/psprinter:\ :lf=/var/log/lpd-errs: .... Документы, отправленные на `textprinter`, будут отформатированы фильтром [.filename]#/usr/local/libexec/enscript#, показанным в предыдущем примере. Опытные пользователи могут печатать PostScript(R) файлы на `psprinter`, где фильтрация не выполняется. Этот метод с несколькими очередями может быть использован для предоставления прямого доступа к различным функциям принтера. Принтер с дуплексом может использовать две очереди: одну для обычной односторонней печати и другую с фильтром, который отправляет последовательность команд для включения двусторонней печати, а затем передаёт входящий файл. [[printing-lpd-monitor]] === Мониторинг и управление печатью Доступно несколько утилит для мониторинга заданий печати, проверки и управления работой принтера. [[printing-lpd-monitor-lpq]] ==== man:lpq[1] man:lpq[1] отображает состояние заданий печати пользователя. Задания печати других пользователей не показываются. Показать ожидающие задания текущего пользователя на одном принтере: [source, shell] .... % lpq -Plp Rank Owner Job Files Total Size 1st jsmith 0 (standard input) 12792 bytes .... Показать ожидающие задания текущего пользователя на всех принтерах: [source, shell] .... % lpq -a lp: Rank Owner Job Files Total Size 1st jsmith 1 (standard input) 27320 bytes laser: Rank Owner Job Files Total Size 1st jsmith 287 (standard input) 22443 bytes .... [[printing-lpd-monitor-lprm]] ==== man:lprm[1] man:lprm[1] используется для удаления заданий печати. Обычные пользователи могут удалять только свои собственные задания. `root` может удалять любые или все задания. Удалить все ожидающие задания из принтера: [source, shell] .... # lprm -Plp - dfA002smithy dequeued cfA002smithy dequeued dfA003smithy dequeued cfA003smithy dequeued dfA004smithy dequeued cfA004smithy dequeued .... Удалить отдельное задание из принтера. Для определения номера задания используется man:lpq[1]. [source, shell] .... % lpq Rank Owner Job Files Total Size 1st jsmith 5 (standard input) 12188 bytes % lprm -Plp 5 dfA005smithy dequeued cfA005smithy dequeued .... [[printing-lpd-monitor-lpc]] ==== man:lpc[8] man:lpc[8] используется для проверки и изменения состояния принтеров. После `lpc` указывается команда и, при необходимости, имя принтера. Вместо имени конкретного принтера можно использовать `all`, и тогда команда будет применена ко всем принтерам. Обычные пользователи могут просматривать статус с помощью man:lpc[8]. Только пользователь `root` может использовать команды, изменяющие состояние принтеров. Показать состояние всех принтеров: [source, shell] .... % lpc status all lp: queuing is enabled printing is enabled 1 entry in spool area printer idle laser: queuing is enabled printing is enabled 1 entry in spool area waiting for laser to come up .... Запретить принтеру принимать новые задания, затем снова разрешить прием новых заданий: [source, shell] .... # lpc disable lp lp: queuing disabled # lpc enable lp lp: queuing enabled .... Приостановить печать, но продолжать принимать новые задания. Затем возобновить печать: [source, shell] .... # lpc stop lp lp: printing disabled # lpc start lp lp: printing enabled daemon started .... Перезапустить принтер после возникновения ошибки: [source, shell] .... # lpc restart lp lp: no daemon to abort printing enabled daemon restarted .... Отключите очередь печати и запретите печать, добавив сообщение для пользователей с объяснением проблемы: [source, shell] .... # lpc down lp Repair parts will arrive on Monday lp: printer and queuing disabled status message is now: Repair parts will arrive on Monday .... Включить принтер, который выключен: [source, shell] .... # lpc up lp lp: printing enabled daemon started .... См. man:lpc[8] для получения дополнительных команд и параметров. [[printing-lpd-shared]] === Общие принтеры Принтеры часто используются совместно несколькими пользователями в офисах и учебных заведениях. Для удобства совместного использования предусмотрены дополнительные функции. [[printing-shared-aliases]] ==== Aliases Имя принтера задается в первой строке записи в [.filename]#/etc/printcap#. Дополнительные имена или _псевдонимы_ могут быть добавлены после этого имени. Псевдонимы отделяются от имени и друг от друга вертикальными чертами: [.programlisting] .... lp|repairsprinter|salesprinter:\ .... Алиасы могут использоваться вместо имени принтера. Например, сотрудники отдела продаж печатают на свой принтер с помощью [source, shell] .... % lpr -Psalesprinter sales-report.txt .... Пользователи отдела ремонта печатают на _своём_ принтере с помощью [source, shell] .... % lpr -Prepairsprinter repairs-report.txt .... Все документы печатаются на этом единственном принтере. Когда отдел продаж разрастётся настолько, что ему понадобится собственный принтер, псевдоним можно удалить из записи общего принтера и использовать как имя нового принтера. Пользователи в обоих отделах продолжают использовать те же команды, но документы отдела продаж отправляются на новый принтер. [[printing-shared-headers]] ==== Страницы заголовков Пользователям может быть сложно найти свои документы в стопке страниц, напечатанных на занятом общем принтере. Для решения этой проблемы были созданы _титульные страницы_. Перед каждой задачей печати выводится титульная страница с именем пользователя и названием документа. Эти страницы также иногда называют _баннерами_ или _разделителями_. Включение титульных страниц различается в зависимости от того, подключен ли принтер напрямую к компьютеру с помощью кабеля `USB`, кабеля параллельного или последовательного порта или удаленно через сеть. Заголовочные страницы на непосредственно подключенных принтерах включаются путем удаления строки `:sh:\` (Suppress Header) из записи в файле [.filename]#/etc/printcap#. Эти заголовочные страницы используют только символы перевода строки для новых строк. Некоторым принтерам может потребоваться фильтр [.filename]#/usr/share/examples/printing/hpif#, чтобы предотвратить ступенчатый текст. Фильтр настраивает принтеры `PCL` на печать как возврата каретки, так и перевода строки при получении символа перевода строки. Заглавные страницы для сетевых принтеров должны быть настроены на самом принтере. Записи заглавных страниц в [.filename]#/etc/printcap# игнорируются. Настройки обычно доступны через панель управления принтера или веб-интерфейс конфигурации, который можно открыть в браузере. [[printing-lpd-references]] === Список литературы Примеры файлов: [.filename]#/usr/share/examples/printing/#. _Руководство по системе печати 4.3BSD_, [.filename]#/usr/share/doc/smm/07.lpd/paper.ascii.gz#. Страницы Справочника: man:printcap[5], man:lpd[8], man:lpr[1], man:lpc[8], man:lprm[1], man:lpq[1]. [[printing-other]] == Другие системы печати Несколько других систем печати доступны в дополнение к встроенной man:lpd[8]. Эти системы обеспечивают поддержку других протоколов или дополнительные возможности. [[printing-other-cups]] === CUPS (Common UNIX(R) Printing System) CUPS — это популярная система печати, доступная во многих операционных системах. Использование CUPS в FreeBSD описано в отдельной статье: extref:{cups}[CUPS] [[printing-other-hplip]] === HPLIP Компания Hewlett Packard предоставляет систему печати, поддерживающую многие их струйные и лазерные принтеры. Порт находится в package:print/hplip[]. Основная веб-страница расположена по адресу https://developers.hp.com/hp-linux-imaging-and-printing[]. Порт обрабатывает все детали установки в FreeBSD. Информация по настройке доступна на странице https://developers.hp.com/hp-linux-imaging-and-printing/install[]. [[printing-other-lprng]] === LPRng LPRng был разработан как улучшенная альтернатива man:lpd[8]. Порт находится в package:sysutils/LPRng[]. Подробности и документацию можно найти на https://lprng.sourceforge.net/[].