-15-53а-

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

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

-15-54-
Файлы, на которые имеется ссылка, которым всегда присвоены
полные имена пути могут быть в порядке, но только, если фильтр
используется для локальных запросов печати. При использовании
для запросов, полученных от удаленной машины для печати на ва-
шей машине, фильтр может все еще сбоить, если файлы, на которые
ссылаются, расположены только на удаленной машине.

Определение фильтра

Имеется несколько аспектов фильтра, которые вы должны оп-
ределить для обслуживания печати. Они перечислены далее:
Входные типы Это список типов файла, которые фильтр может об-
работать. Большая часть фильтров может иметь
только один входной тип, но обслуживание печати
не ограничивает их одним типом. Некоторые типы
файлов могут быть достаточно схожими для филь-
тра, с которым они связаны. Вы можете использо-
вать любые имена, которые вам понравятся, имея
ввиду предел из 14 букв, цифр и тире (нет под-
черкиваний). Так как обслуживание печати исполь-
зует эти имена для согласования фильтра с типом
файлов, вы должны быть последовательны в согла-
шении по именам. Например, если более одного
фильтра может принять тот же самый входной тип,
используйте то же имя. Эти имена следует объ-
явить пользователям так, чтобы они знали, как
именовать их тип файла, когда они отсылают файл
на печать.
Выходные типы Это список типов файлов, которые фильтр может
производить как выходные. Для каждого файла
фильтр производит отдельный выходной тип, но он
может иметь возможность менять этот тип по зап-
росу. Имена выходных типов также ограничены 14
буквами, цифрами и тире. Эти имена должны либо
соответствовать типам принтеров, имеющихся в ва-
шей системе,либо должны соответствовать входным
типам, обрабатываемым другими фильтрами. Обслу-
живание печати собирает фильтры вместе в конве-
йере оболочки для получения нового фильтра, если
определяется, что необходимы несколько проходов
различными фильтрами для преобразования файла.
Маловероятно, что вам необходим этот

-15-54а-

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

-15-55-

Типы принтеров Это список типов принтеров, в которые фильтр мо-
жет преобразовать файлы. В то время, как для
большинства фильтров этот список идентичен вы-
ходным типам, он может быть различным. Например,
у вас может быть принтер, который имеет отдель-
ный тип для целей инициализации (смотрите раздел
"Принтер" под заголовком "Установка принтера" в
данной главе), но который может распознавать
несколько различных типов файлов. В сущности эти
принтеры имеют внутренний фильтр, преобразующий
различные типы в один, с которым они могут быть
связаны. Таким образом фильтр может производить
один из нескольких выходных типов, которые соот-
ветствуют "типам файла", обрабатываемым принте-
ром. Фильтр должен быть отмечен как работающий с
типом принтера. В качестве другого принтера вы
можете иметь две различные модели принтеров, ко-
торые перечислены, как принимающие одни и те же
типы файлов. Однако из-за небольшого различия
при производстве, один принтер отличается по
производимым результатам. Вы метите принтеры,
как имеющие различные типы, скажем А и В, где В
- это тот, который отличается. Вы создаете
фильтр, который приспосабливает файлы к учету
отклонений, производимому принтерами типа В. Так
как этот фильтр необходим только для этих типов
принтера, вам следует перечислить его, как рабо-
тающий только для принтеров типа В. Для большей
части принтеров и фильтров вы можете оставить
эту часть определения фильтра пустой.
Принтеры У вас могут быть некоторые принтеры, которые,
хотя и имеют корректный тип для фильтра в других
случаях не адекватны для выхода, который произ-
водит фильтр. Например, вы можете захотеть наз-
начить один принтер для быстрой передачи; на
этот принтер посылаются только файлы, которые
этот принтер может обрабатывать без фильтрации.
Другие принтеры идентичного типа вы назначаете
файлам, которым нужна большая фильтрация перед
печатью. Вы метите фильтр как работающий только
с последними принтерами.

-15-55а-

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

-15-56-

потому, что они должны иметь доступ к принтеру,
когда выполняются. Фильтр, который должен ре-
гистрировать сбои принтера,должен быть быстрым
принтером. Медленные фильтры являются прямой
противоположностью. Фильтры, имеющие небольшие
накладные расходы на подготовку файла и не имею-
щие доступ к принтеру, должны метиться как мед-
ленные. Обслуживание печати выполняет медленные
фильтры в фоне без привязки к принтеру. Это поз-
воляет пересылать вперед файлы, требующие быст-
рой фильтрации (или без фильтрации), принтеры не
простаивают, пока медленный фильтр работает с
файлом, если печатаются другие файлы.
Команда Это полное имя пути выполнения программы. Это
фильтр. Если имеются любые фиксированные возмож-
ности, которые необходимы программе, вы можете
включить их здесь.
Возможности Возможности, которые нужны программе фильтру,
зависящие от различных режимов и других аспектов
печати, которые могут быть зарегистрированы для
фильтра. Это обсуждается подробнее позднее.
После того, как вы собрали эту информацию о фильтре, вы
можете использовать ее как вход для эквивалента sysadmsh коман-
ды lpfilter(ADM). (В этом разделе не обсуждается строка команды
lpfilter).Вы можете захотеть сначала зарегистрировать эту ин-
формацию в вашем собственном файле для облегчения редактирова-
ния информации при ее вводе. Далее вы можете передать файл на
ввод. Однако при его вводе следует представить информацию сле-
дующим образом:

Input types: input-types-list
Output types: output-types-list
printer types: printer-type-list
Printers: printers-list
Filter type: fast or slow
Command: command
Options: template-list
1 - входные типы: вход-тип-список;
2 - выходные типы: выход-тип-список;
3 - типы принтера: принтер-тип-список;
4 - принтеры: принтер-список;
5 - тип фильтра: быстрый или медленный;

-15-56а-

6 - команда: простая команда;
7 - возможности: шаблон-список.

Информация может появиться в любом порядке. Не вся инфор-
мация должна приводиться. Таблица 15.5 содержит значения по
умолчанию, используемые для любой пропущенной информации.

-15-57-

Таблица 15.5
Элементы фильтра по умолчанию
Элемент По умолчанию
----------------------------------------------
входные типы любой
выходные типы любой
типы принтера любой
принтеры любой
тип фильтра медленный
команда (нет умолчания)
возможности (нет)

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

Шаблоны

Вся информация объяснена, кроме template-list (шаблон-спи-
сок). Далее следует информация о том, как регистрируются режимы
и аспекты печати.
Шаблон-список - это список шаблонов, разделенных запятыми,
он имеет следующий вид:

keyword pattern = replacement

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

-15-58-

Таблица 15.6
Ключевые слова шаблона
Характеристика Ключевое слово Возможные образцы
-------------------------------------------
Тип содержимого INPUT Ъ1содержимое-тип Ъ 0
(вход)
Тип содержимого OUTPUT Ъ1содержимое-тип Ъ 0
(выход)
Тип принтера TERM Ъ1принтер-тип Ъ 0
Шаг символа CPI Ъ1целое Ъ 0
Длина страницы LENGTH Ъ1целое Ъ 0
Ширина страницы WIDTH целое
Страницы для печати PAGES страница-список
Набор символов CHARSET символ-набор
Имя формы FORM форма-имя
Число копий COPIES целое
Режимы MODES режим

Источником значений для этих шаблонов являются:
- значения шаблонов INPUT и OUTPUT определяются типом фай-
ла, который должен преобразовываться фильтром и выходным
типом, который должен формироваться соответственно. Каждое
из них будет иметь тип, зарегистрированный с фильтром.
- значением шаблона TERM является тип принтера.
- значения для шаблонов CPI, LPI, LEHGTH и WIDTH определя-
ются запросом пользователя, используемой формой или значе-
ниями по умолчанию для принтера.
- значением для шаблона PAGES является список страниц, ко-
торые должны печататься. Обычно - это список диапазонов
страниц, либо пара чисел, либо отдельное число, каждый ди-
апазон разделяется запятой (например 1-5, 6, 7 и 8). Одна-
ко значение, заданное в возможности для печати запроса
передается неизменным.
- значение шаблона CHARSET - это имя используемого набора
символов.
- значение для шаблона FORM - это имя печатаемой формы,
если оно есть.
- значение шаблона COPIES - это число копий файла, которое
должно быть сделано. Если фильтр использует этот шаблон,

-15-59-

обслуживание печати уменьшает число копий фильтруемого
файла, которое он печатает до 1, так как эта "отдельная
копия" в действительности является множеством копий, про-
изводимых фильтром.
- значение шаблона MODES определяется возможностью -y ко-
манды lp, команды, которую пользователь использует для пе-
редачи запроса печати. Так как пользователь может задать
несколько возможностей -y, то для шаблона MODES может быть
несколько возможностей. Значения используются в порядке
слева направо, заданном пользователем.
Замена показывает, как значение шаблона задается для прог-
раммы-фильтра. Это обычно литеральная возможность иногда со
структурным нулем (*), включенным, чтобы показать, где присваи-
вается значение. Несколько примеров показывают, как это работа-
ет.

Пример 1
Программа фильтр называется /usr/bin/npf. Программа имеет
два входных типа nroff37 и X, производит выходной тип, называе-
мый ТХ и работает с любым принтером типа ТХ. Программа принима-
ет три возможности: -Xb Только для входного типа Х -l целое Для
длины выходной страницы. -w целое Для ширины выходной страницы.

Определение фильтра выглядит так:

Input types: nroff37 и X
Output types: ТХ
printer types: ТХ
Command: /usr/bin/npf
Options: INPUT X = -Xb, LENGTH * = -l*,
WIDTH * = -w*

1 - входные типы;
2 - выходные типы;
3 - типы принтера;
4 - команда;
5 - возможности.

Пользователь посылает файл типа nroff37 и запрашивает,
чтобы он печатался принтером с именем lp1 типа ТХ и запрашивает
длину страницы 72:

-15-59а-


lp -T nroff37 -d lp1 -o length=72

Этот фильтр вызывается обслуживанием печати для преобразо-
вания файла. Фильтр вызывается как:

/usr/bin/npf -l72

-15-60-

Пример 2

Другой пользователь посылает файл типа Х, который должен
печататься на том же принтере со значениями длины и ширины,
принимаемыми по умолчанию. Фильтр вызывается как:

/usr/bin/npf -Xb

Пример 3

Программа фильтр называется /usr/bin/Х9700. Она имеет один
входной тип, troff, производит выходной тип, называемый 9700 и
будет работать с любым принтером типа 9700. Программа имеет од-
ну фиксированную возможность -ib и принимает другие возможнос-
ти:

-l integer Для длины выходной страницы
-s name Для набора символов
-o portrait или
-o landscape для "портретной" или "рельефной" ориентации
бумаги.

Вы решили, что вашим пользователям нужно дать только сок-
ращения port и land ,когда они запрашивают ориентацию бумаги.
Так как эти возможности не свойственны обслуживанию печати,
пользователи задают их используя возможность -y команды lp.
Определение фильтра выглядит следующим образом:

Input types: troff
Output types: 9700
Рrinter types: 9700
Command: /usr/bin/x9700 -ib
Options: LENGTH * = -l *, CHARSET * = -s *,
MODES port = -o portrait, MODES land
= -o landscape

1 - входные типы;
2 - выходные типы;
3 - типы принтера;
4 - команда;
5 - возможности.


-15-60а-

(Последняя строка разбивается на три строки для облегчения чте-
ния этого документа. Она должна вводиться, как отдельная стро-
ка).
Пользователь посылает файл типа troff на печать для прин-
тера типа 9700 и запрашивает рельефную ориентацию, используя
готический набор символов:

lp -T troff -S gothic -y land

Этот фильтр вызывается обслуживанием печати для преобразо-
вания файла следующим образом:

-15-61-

/usr/bin/x9700 -ib -S gothic -o landscape

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

Добавление фильтра

После завершения определения фильтра используйте одну из
следующих команд для добавления его в систему:

Ъ2 /usr/lib/lpfilter -f Ъ1filtername Ъ2-F filename
Ъ2 /usr/lib/lpfilter -f Ъ1filtername -

sysadmsh пользователи выбирают:
Printers-->Auxiliary-->Filter-->Change
(Принтеры-->Вспомогательное-->Фильтр-->Изменение)

Первая команда получает определение фильтра из файла, а
вторая команда получает определение фильтра от вас через стан-
дартный вход. filtername может быть любым по выбору длиной до
14 букв, цифр и символов подчеркивания.
Если вам нужно изменить фильтр, введите одну из этих же
команд. Вам необходимо лишь дать измененную информацию. Осталь-
ная информация остается неизменной.

Удаление фильтра

Обслуживание печати не имеет фиксированного предела на
число фильтров, которое вы можете определить. Однако имеет
смысл удалить ненужные более фильтры для устранения дополни-
тельной обработки обслуживанием печати, которое должно прове-
рить все фильтры для нахождения одного, который работает в дан-
ной ситуации.
Используйте следующую команду для удаления фильтра:
Ъ2 /usr/lib/lpfilter -f Ъ1filtername
sysadmsh пользователи выбирают:
Printers-->Auxiliary-->Filter-->Remove
(Принтеры-->Вспомогательное-->Фильтр-->Удаление)

-15-62-

Проверка фильтра

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

Ъ2 /usr/lib/lpfilter -f Ъ1filtername -l
Ъ2 /usr/lib/lpfilter -f Ъ1filtername Ъ2-l>filename

sysadmsh пользователи выбирают:
Printers-->Auxiliary-->Filter-->List
(Принтеры-->Вспомогательное-->Фильтр-->Список)

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

Предупреждение

Добавление, изменение или удаление фильтров может привести
к отмене стоящих в очереди запросов печати. Это происходит по-
тому, что обслуживание печати оценивает каждый запрос печати,
еще стоящий в очереди, чтобы увидеть, какие из них подвержены
изменению фильтра. Запросы, которые более не печатаются из-за
того, что фильтр удален или изменен, отменяются (с посылкой из-
вещений пользователям, которые их послали). Может также возни-
кать задержка в ответ на новые или измененные запросы печати,
когда фильтры изменяются из-за многих характеристик, которые
должны быть оценены для каждого запроса печати, еще стоящего в
очереди. Эта задержка может стать ощутимой, если имеется боль-
шое число запросов, нуждающихся в фильтрации.
Из-за этого возможного влияния вы можете захотеть сделать
изменения в фильтре во время периодов, когда обслуживание печа-
ти не используется интенсивно.

-15-62а-

Чистка журнала запросов

Оглавления /usr/spool/lp/temp и /usr/spool/lp/requests со-
держат файлы, которые описывают каждый запрос, который был пос-
лан обслуживанию печати LP. Каждый запрос имеет два файла по
одному в каждом оглавлении, которые содержат информацию о зап-
росе. Информация разбита для помещения более чувствительной ин-
формации в оглавление /usr/spool/lp/requests, где она может

-15-63-

оставаться секретной. Файл запроса защищен от всех, кроме поль-
зователя который послан запрос, в то время как файл /usr/spool/
lp/requests защищен даже от посылающего пользователя.
Эти файлы остаются в оглавлениях только пока запрос нахо-
дится в очереди. После завершения запроса информация в файлах
объединяется и добавляется в файл /usr/spool/lp/logs/requests.
Этот файл не удаляется обслуживанием печати LP, но может перио-
дически чиститься, используя, например, средство cron. Смотрите
описание команды crontab в главе "Использование команд планиро-
вания заданиями: at, cron, batch" в документе.
Элемент crontab, принимаемый по умолчанию и предлагаемый
системе обслуживания печати LP, показан ниже:

13 3 * * * cd /usr/spool/lp/logs; if [ -f
requests ]; then /bin/mv requests xyzzy; /bin/cp
xyzzy requests; >xyzzy; /usr/lbin/agefile -c2
requests; /bin/mv xyzzy requests; fi

(Это одна строка в crontab, но она разбита здесь на нес-
колько строк для облегчения чтения). Если кратко, то этот эле-
мент делает следующее: создает поколение файла, изменяет имя
requests1 и пересылает копию прежнего дня в requests2. Число 2
в возможности -с. Программа agefile запрашивает хранение в фай-
лах журнала информации двух предыдущих дней, отбрасывая более
старую информацию в файлах журнала. Изменяя это число, вы може-
те изменить сохраняемую информацию. С другой стороны, если вы
хотите сохранять информацию чаще или хотите сбрасывать файл ча-
ще, чем раз в день, измените время, когда элемент crontab вы-
полняется изменением первых двух чисел. Текущие значения 13 и 3
приводят к тому, что сброс происходит каждый день в 3:13.
Представляемый по умолчанию элемент crontab достаточен для
хранения старых записей запросов печати для накопления в файло-
вой системе накопления. Вы можете захотеть сконцентрировать ин-
формацию в журнале запроса для получения доклада об использова-
нии обслуживания печати LP или добавления в генерируемую
учетную информацию. Вы можете получить различные процедуры,
проверяющие файл и извлекающие информацию перед процедурой
сброса.
Журнал запросов имеет простую структуру, облегчающую изв-
лечение данных с помощью общих команд оболочки UNIX. Запросы
перечисляются в порядке, в котором они печатались и разделяются

-15-63а-

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

-15-64-

Таблица 15.7

Элементы журнала запросов

Символ Содержимое строки
-------------------------------------------
= Это строка разделитель, содержащая идентификатор зап-
роса, идентификатор пользователя и группы пользовате-
лей, полное число байтов в первоначальных (нефильтро-
ванных) файлах и время постановки запроса в очередь.
Эти элементы разделяются запятыми и располагаются в
порядке именования. Идентификатор пользователя, иден-
тификатор группы и размеры имеют перед собой слова
uid, gid или size соответственно.
С Число печатаемых копий
D Назначение принтера или класса или слово any
F Имя печатаемого файла. Строка повторяется для каждого
печатаемого файла, и файлы печатаются в приведенном
порядке.
f Имя используемой формы
H Тип используемой специальной обработки, расшифрован-
ный (resume, hold,immediate). Единственное полезное
значение, имеющееся в этой строке - это immediate.
N Тип предупреждения, используемый при успешном завер-
шении запроса печати. Тип - это буква М, если пользо-
ватель был извещен почтой или W, если пользователь
был извещен сообщением на терминал
О Возможности
Р Приоритет запроса печати
p Список печатаемых страниц
r Эта однобуквенная строка представлена, если пользова-
тель запросил первичную обработку файлов (возможности
-r команды lp)
S Используемый набор символов или механизм печати
s Выход запроса, как комбинация отдельных битов, выра-
женная в шестнадцатеричной форме. В то время, как
несколько битов используются внутренне спулером, наи-
более важные биты перечислены ниже: 0х0004 Медленная
фильтрация завершилась успешно 0х0010 Печать заверши-
лась успешно 0х0040 Запрос отменен 0х0100 Запрос не
смог выполнить фильтрацию или печать

-15-65-

T Титул, помещенный на странице заголовка
t Тип содержимого, обнаруженный в файле (файлах)
U Имя пользователя, который послал запрос печати
x Медленный фильтр, используемый для запроса
Y Список специальных режимов для фильтров, используемый
для печати запроса
y Быстрый фильтр, используемый для запроса
z Принтер, используемый для запроса. Имеется различие
для назначения (строка D), если запрос поставлен в
очередь для любого принтера или класса принтеров или
если запрос был переслан по другому назначению адми-
нистратором обслуживания печати

-15-66-

НАСТРОЙКА ОБСЛУЖИВАНИЯ ПЕЧАТИ

Хотя обслуживание печати пытается быть достаточно гибким
для обработки большей части потребностей принтеров и печати,
оно не может быть полным. Вы можете купить принтер, который не
вполне соответствует способу, каким обслуживание печати обраба-
тывает принтеры, или же может иметь потребности печати, которые
не соответствуют обслуживанию печати.
Вы можете настроить обслуживание печати несколькими спосо-
бами. В данном разделе рассказывается, как вы можете:
- Настроить характеристики порта принтера,
- Настроить базу данных terminfo,
- Написать интерфейсную программу, и
- Написать фильтр.

Диаграмма на рисунке 15-1 дает обзор обработки запроса пе-
чати:












Рис. 15-1 Как процессы LP печатают запрос лазерного файла lp -d
1 - команда lp;
2 - конфигурация обслуживания печати;
3 - обслуживание печати (демон накопления);
4 - выборочный медленный фильтр;
5 - экранирование задания;
6 - инициализация принтера;
7 - база данных terminfo;
8 - стандартная интерфейсная программа;
9 - фильтр по умолчанию;
10 - выборочный быстрый фильтр;
11 - лазерный принтер;
12 - ключ;

-15-66а-

13 - коммуникационный путь;
14 - управление процессами UNIX;
15 - управление процессами UNIX (альтернативное);
16 - доступ к данным;
17 - процесс UNIX;
18 - дисковые файлы.

-15-67-

Каждый запрос печати посылается демону накопления, который
отслеживает все запросы. Демон создается, когда вы запускаете
обслуживание печати LP. Системный процесс UNIX отвечает также
за отслеживание состояния принтеров и медленных фильтров; когда
принтер завершает печать пользовательского файла, демон начина-
ет печать другого запроса, если он стоит в очереди.
Вы можете настроить обслуживание печати настройкой или за-
меной некоторых элементов, показанных на рисунке 15-1 (номера
расшифровываются на диаграмме).
1. Для большинства принтеров вам необходимо лишь изменить