Расширенная настройка принтера



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

Фильтры

Хотя система LPD поддерживает сетевые протоколы, очереди, контроль доступа и другие аспекты печати, большая часть реальной работы происходит в фильтрах. Фильтры — это программы, взаимодействующие с принтером и обеспечивающие учет особенностей устройства и специальных требований. При простой настройке принтера мы установили фильтр для обычного текста — крайне простой, который должен работать с большинством принтеров (см. раздел Установка текстового фильтра).

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

Кроме того, в составе ОС FreeBSD поставляется один фильтр, /usr/libexec/lpr/lpf, работающий со многими принтерами, которые могут печатать обычный текст. (Он обрабатывает символы забоя и табуляции в файле, выполняет учет использования, но и не более того.) Есть также ряд фильтров и компонентов фильтров в наборе портов FreeBSD.

Вот что вы найдете в этом разделе:

• В разделе Как работают фильтры сделана попытка дать обзор роли фильтра в процессе печати. Прочтите этот раздел, чтобы понять, что происходит ''за кадром'', когда система LPD использует фильтры. Это понимание поможет предвидеть и решать проблемы, с которыми вы можете столкнуться при добавлении дополнительных фильтров для каждого из принтеров.

• Система LPD предполагает, что каждый принтер, по умолчанию, может печатать обычный текст. Это проблематично для PostScript-принтеров (или принтеров на базе другого языка), поскольку они не могут печатать обычный текст непосредственно. В разделе Прием заданий с обычным текстом на PostScript-принтеры описано, что нужно сделать, чтобы решить эту проблему. Прочтите этот раздел, если используете PostScript-принтер.

• PostScript — популярный формат выдачи для многих программ. Некоторые люди даже пишут PostScript-код непосредственно. К сожалению, PostScript-принтеры дороги. В разделе Имитация PostScript на не-PostScript принтерах описано, как можно дополнительно изменить текстовый фильтр принтера для приема и печати данных PostScript не не-PostScript принтере. Прочтите этот раздел, если ваш принтер не поддерживает PostScript.

• В разделе Фильтры преобразования описан способ автоматизации преобразования определенных форматов файлов, например, графики или данных для печатного станка, в форматы, которые может обработать ваш принтер. После чтения этого раздела вы сможете настроить свои принтеры так, что пользователи смогут выполнять команду lpr -t для печати данных troff, или lpr -d для печати данных DVI, или lpr -v — для печати растровых изображений, и так далее. Я рекомендую прочитать этот раздел.

• В разделе Выходные фильтры описана не часто используемая возможность задавать выходные фильтры в системе LPD. Если только вы не печатаете начальные страницы (см. Начальные страницы), можно, пожалуй, вообще пропустить этот раздел.

• В разделе lpf: текстовый фильтр описана команда lpf, — достаточно полный, хотя и простой текстовый фильтр для строчных принтеров (и лазерных принтеров, работающих как строчные), поставляемый в составе ОС FreeBSD. Если надо быстро настроить учет использования принтера для обычного текста или если используется принтер, из которого при получении символов забоя идет дым, несомненно, стоит подумать об использовании lpf.

Замечание: Различные скрипты, описанные далее, можно найти в каталоге /usr/share/examples/printing.

Как работают фильтры

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

Когда системе LPD надо напечатать входящий в задание файл, она запускает программу-фильтр. Стандартный входной поток фильтра связывается с файлом, который надо распечатать, его стандартный выходной поток — с принтером, а стандартный поток ошибок перенаправляется в файл регистрации ошибок (задается характеристикой lf в файле /etc/printcap, или используется стандартное устройство /dev/console).

Запускаемый системой LPD фильтр и его аргументы зависят от того, что указано в файле /etc/printcap, и какие аргументы указал пользователь для задания в команде lpr(1). Например, если пользователь ввел команду lpr -t, система LPD должна запустить фильтр troff, заданный характеристикой tf для соответствующего принтера. Если пользователь хочет печатать обычный текст, система должна запустить фильтр if (это верно в большинстве случаев: подробнее см. в разделе Выходные фильтры).

В файле /etc/printcap можно задавать три вида фильтров:

Текстовый фильтр, который в документации LPD двусмысленно называют входным фильтром, обеспечивает печать обычного текста. Рассматривайте его как стандартный фильтр. Система LPD предполагает, что любой принтер может по умолчанию печатать обычный текст, а на текстовый фильтр возлагается задача обеспечить, чтобы символы забоя, табуляции или другие специальные символы не сбивали принтер с толку. Если вы работаете в среде, где надо учитывать использование принтера, текстовый фильтр должен также учитывать количество напечатанных страниц, обычно, подсчитывая количество напечатанных строк и сравнивая их с количеством строк на страницу, поддерживаемых принтером. Текстовый фильтр запускается со следующим списком аргументов:

имя-фильтра [-c] -wширина -lдлина -iсдвиг -n имя-пользователя -h хост учетный-файл

 где

-c

   указывается, если задание послано командой lpr -l

ширина

   значение из характеристики pw (page width — ширина страницы), указанной в файле /etc/printcap, по умолчанию — 132

длина

   значение из характеристики pl (page length — длина страницы), по умолчанию — 66

сдвиг

   сдвиг, заданный командой lpr -i, по умолчанию — 0

имя-пользователя

   регистрационное имя пользователя, печатающего файл

хост

   имя хоста, с которого было послано задание

учетный-файл

   имя учетного файла, задаваемое характеристикой af.

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

имя-фильтра -xширина-пиксела -yвысота-пиксела -n имя-пользователя -h хост учетный-файл

 где ширина-пиксела — значение характеристики px (по умолчанию — 0), а высота-пиксела — значение характеристики py (по умолчанию — 0).

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

имя-фильтра -wширина -lдлина

 которые идентичны аргументам -w и -l текстового фильтра.

Фильтры также должны завершать работу со следующим статусом выхода:

exit 0

   Если фильтр успешно напечатал файл.

exit 1

   Если фильтр не смог напечатать файл, но хочет, чтобы система LPD попыталась распечатать файл ещё раз. Система LPD перезапустит фильтр, если его работа завершена с этим статусом.

exit 2

   Если фильтр не смог напечатать файл и не хочет, чтобы система LPD пыталась его печатать еще раз. Система LPD удалит файл.

Поставляемый в составе FreeBSD текстовый фильтр /usr/libexec/lpr/lpf использует аргументы, задающие ширину и длину страницы для определения того, когда посылать символ прогона страницы (form feed) и как учитывать использование принтера. Он использует переданные в качестве аргументов имя пользователя, хост и учетный файл для внесения учетных записей.

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

9.4.1.2. Прием заданий с обычным текстом на PostScript®-принтеры

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

Но, если вы хотите посылать на принтер как задания PostScript, так и обычный текст, рекомендуется дополнить настройку принтера. Для этого надо, чтобы текстовый фильтр определял, является ли поступающее задание обычным текстом или программой на языке PostScript. Все PostScript-задания должны начинаться с %! (для других языков принтеров обратитесь к соответствующей документации). Если первые два символа в задании — именно эти, речь идет о PostScript, и мы можем остальную часть задания передавать непосредственно. Если же первые два символа в файле — другие, фильтр будет преобразовывать текст в PostScript и печатать результат.

Как нам это сделать?

Если вы используете последовательный принтер, хороший способ достичь поставленной цели состоит в установке lprps. lprps — это фильтр для PostScript-принтера, выполняющий двустороннее взаимодействие с принтером. Он обновляет файл состояния принтера, помещая в него подробную информацию, выданную принтером, так что пользователи и администраторы могут узнать, в каком именно состоянии (например, toner low или paper jam) находится принтер. Но еще важнее, что он включает программу psif, которая определяет, является ли входящее задание обычным текстом, и вызывает textps (еще одну программу, поставляемую вместе с lprps) для преобразования его в PostScript. Затем lprps посылает преобразованное задание на принтер.

lprps входит в набор портов FreeBSD (см. Набор портов). Вы, конечно, можете загрузить, собрать и установить его самостоятельно. После установки lprps просто укажите путь к программе psif, входящей в состав пакета lprps. Если вы установили lprps из Коллекции Портов, используйте следующий текст в записи для последовательного PostScript-принтера в файле /etc/printcap:

:if=/usr/local/libexec/psif:

Надо также задать характеристику rw; она требует от системы LPD открывать принтер в режиме чтения и записи.

При использовании параллельного PostScript-принтера (что не позволяет обеспечить двустороннее взаимодействие с принтером, необходимое для системы lprps), можно использовать в качестве текстового фильтра следующий скрипт командного интерпретатора:

#!/bin/sh

#

# psif - Печать PostScript или обычного текста на PostScript-принтере

# Скрипт, а НЕ версия, входящая в состав lprps

# Установлен в /usr/local/libexec/psif

#

 

IFS="" read -r first_line

first_two_chars=`expr "$first_line" : '\(..\)'`

 

if [ "$first_two_chars" = "%!" ]; then

#

# Задание PostScript, печатать его.

#

echo "$first_line" && cat && printf "\004" && exit 0

exit 2

else

#

# Обычный текст, преобразовать его, а затем напечатать.

#

( echo "$first_line"; cat ) | /usr/local/bin/textps && printf "\004" && exit 0

exit 2

fi

В представленном выше скрипте, textps — отдельно установленная программа для преобразования обычного текста в PostScript. Можно использовать любую программу преобразования текста в PostScript. Коллекция Портов FreeBSD (см. материал о Коллекции Портов) включает полнофункциональную программу преобразования текста в PostScript под названием a2ps, которую тоже можно попробовать использовать.


Дата добавления: 2018-10-26; просмотров: 254; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!