Для специального кода выхода 129 или программы lp.tell от-
сутствует необходимость для интерфейсной программы закрывать
сам принтер. Ваша интерфейсная программа может закрыть принтер
напрямую, но при этом перекрывается механизм предупреждения о
сбоях. Предупреждения посылаются только, если обслуживание пе-
чати регистрирует сбойный принтер, а специальный код выхода
программа lp.tell - это основные инструменты регистрации.
-15-78а-
Если обслуживание печати должно прервать печать файла в
любое время, оно отменяет интерфейсную программу с сигналом 15
(смотрите kill(C) в документе User's Reference и signal(S) в
документе Programmer's Referense). Если интерфейсная программа
отменяется при получении любого другого сигнала, то обслужива-
ние печати предполагает, что последующие запросы печати не под-
вержены влиянию и продолжают использовать принтер. Обслужи-
вание печати извещает лицо, получившее запрос, о том, что он не
завершился успешно.
Запуск сигналов SIGHUP, SIGINT, SIGOUT, SIGPIPE (обращения
номер 1, 2, 3 и 13) игнорируется, когда вызывается интерфейс.
Стандартный интерфейс проводит изменения для перехвата этих
сигналов в соответствующие моменты. Стандартный интерфейс расс-
матривает получение этих сигналов как то, что у принтера воз-
никла проблема, и выдает извещение о сбое. Это та программа,
которую обслуживание печати использует для управления принтером
каждый раз, когда печатается файл. Она выполняет четыре основ-
ные задачи:
- Инициализация порта принтера (соединение между компьюте-
ром и принтером).
-15-79-
- Инициализация принтера (восстановление его в нормальное
состояние в случае, если ранее напечатанный файл остался в
необычном состоянии) и задания шага символов, шага строки,
размера страницы и набора символов, запрошенных пользова-
телем.
- Печать страницы заголовка, и
- Выполнение фильтра для печати файла.
Как добавить интерфейсную программу
Если вы не выбрали интерфейсную программу, то используется
стандартная, обеспечиваемая обслуживанием печати. Этого должно
быть достаточно для большей части потребностей печати. Если вы
хотите, вы можете изменить ее для ваших нужд или полностью пе-
реписать вашу собственную интерфейсную программу и далее задать
ее при добавлении нового принтера.
Если вы планируете использование стандартной интерфейсной
программы, нет нужды задавать ее при добавлении принтера. Одна-
ко, если вы используете другую интерфейсную программу, вы може-
те либо ссылаться на нее по ее полному имени пути, либо по дру-
гому принтеру, используя ту же самую интерфейсную программу.
Для идентификации настроенной интерфейсной программы по
имени дайте имя принтера и имя пути интерфейсной программы в
следующем виде:
Ъ2 /usr/lib/lpadmin -p Ъ1printername Ъ2-i pathname
имя принтера имя пути
Для идентификации настроенной интерфейсной программы ссыл-
кой на другой принтер дайте имена принтерам следующим образом:
Ъ2 /usr/lib/lpadmin -p Ъ1printername1 Ъ2-е printername2
имя принтера1 имя принтера2
printername1 должно быть замещено именем принтера, который вы
добавляете, printername2 должно быть замещено именем принтера,
уже добавленным, который использует настроенную интерфейсную
программу.
-15-79а-
Для идентификации интерфейсной программы по ссылке на мо-
дельную интерфейсную программу дайте имя принтера и имя модели
следующим образом:
Ъ2 /usr/lib/lpadmin -p Ъ1printername Ъ2-m modelname
имя принтера имя модели
Как писать фильтр
Фильтр используется обслуживанием печати каждый раз, когда
он должен печатать тип файла, который не принимается принтером.
В то время, как фильтр может быть столь прост или столь сложен,
-15-80-
как это необходимо, существует только несколько внешних требо-
ваний:
- Фильтр должен получить содержимое файла пользователя из
стандартного входа и послать преобразованный файл на стан-
дартный выход.
- Медленный фильтр может послать сообщения об ошибках в
файле на стандартный выход ошибок. Быстрый фильтр не дол-
жен посылать сообщения, как это описано ниже. Сообщение об
ошибках от медленного фильтра будут собираться и посылать-
ся пользователю, пославшему файл на печать.
- Если медленный фильтр отменен из-за получения сигнала,
запрос печати завершается, и пользователь, пославший зап-
рос, извещается. Более того, если медленный фильтр завер-
шается с ненулевым кодом выхода, запрос печати завершается
и пользователь извещается. Коды выхода от быстрых фильтров
обрабатываются по-другому, как описано позднее.
- Фильтр не должен зависеть от других файлов, которые
обычно не доступны обычному пользователю. Если фильтр за-
вершается аварийно, когда пользователь выполняет его нап-
рямую, он будет завершаться аварийно и при выполнении обс-
луживания печати.
Раздел "Фильтры" описывает, как добавить фильтр к обслужи-
ванию печати.
Имеется несколько дополнительных требований, если фильтр
должен также регистрировать сбои принтера:
- Если он может, он должен ждать сброса сбоя перед завер-
шением. Дополнительно он должен продолжать печать с верх-
ней части страницы, где печать остановилась после сбросов
сбоя. Если это не намерения администратора, то обслужива-
ние печати останавливает фильтр перед предупреждением ад-
министратора.
- Он должен послать сообщения сбоя принтера на стандартный
выход ошибок, когда распознается сбой. Он не должен завер-
шаться, но может ждать, как это описано выше.
- Он не должен посылать сообщения об ошибках в файл на вы-
ход стандартных ошибок. Любые сообщения на стандартном вы-
ходе ошибок могут генерировать сбой принтера. Их следует
включить в стандартный выходной поток, где они могут быть
считаны пользователем.
- Он должен завершиться нулевым кодом выхода, если файл
пользователя завершен (даже, если ошибки в файле
-15-80а-
препятствуют корректной печати).
- Он должен завершаться ненулевым кодом выхода только, ес-
ли сбой принтера предупреждает его от завершения файла.
- После добавления в таблицу фильтра он должен быть добавлен,
как быстрый фильтр. Смотрите раздел "Определение фильтра"
под заголовком "Фильтры" в данной главе.
-15-81-
СПЕЦИАЛЬНЫЕ ВОЗМОЖНОСТИ КОНФИГУРАЦИИ
Хотя значения по умолчанию для конфигурации принтера обыч-
но достаточны для большинства потребностей, имеется ряд возмож-
ностей для конфигурации отдельных аспектов операций печати. Они
включают такие возможности, как предупреждение о сбое и восста-
новление. Далее следует список дополнительной информации, кото-
рая может быть дана для определения конфигурации каждого прин-
тера:
- Тип принтера
- Типы содержимого
- Метод соединения
- Наборы символов или печатающие механизмы
- Предупреждение о сбое
- Восстановление при сбое
- Использование ограничений
- Атрибуты печати по умолчанию
Вам необходимо дать очень мало этой информации для добав-
ления нового принтера к обслуживанию печати; однако, чем больше
информации вы обеспечиваете, тем лучше управляется принтер для
вас и тем лучше он может обслуживать людей с помощью обслужива-
ния печати.
Описания в следующих разделах помогут вам понять, что эта
информация о конфигурации принтера означает, и как она исполь-
зуется, поэтому вы можете решить, как задавать эту информацию
при добавлении принтера. Вы можете рассмотреть каждый из разде-
лов в данном порядке и корректно конфигурировать принтер за
несколько этапов, вы можете ожидать, пока вы прочтете все раз-
делы перед добавлением принтера, так, что вы можете сделать это
за один шаг.
Тип принтера
Тип принтера важен для правильного использования принтера.
Обслуживание принтера использует тип принтера для выделения ин-
формации о принтере из базы данных terminfo. Эта информация
описывает возможности принтера, так, что вы можете быть пре-
дупреждены, если некоторая из обеспечиваемой вами информации
конфигурации не соответствует принтеру. Эта информация также
описывает управляющие данные для использования при инициализации
принтера перед печатью файла. Если вам не требуется задать тип
принтера, вы можете задать тот тип, который лучше обеспечивает-
ся средствами печати.
-15-82-
Тип принтера - это общее имя принтера. Задавайте тип прин-
тера следующим образом:
Ъ2 /usr/lib/lpadmin -p Ъ1printername Ъ2-T printer-type
sysadmsh пользователи выбирают:
Printer-->Configure-->Parameters
(Принтеры-->Конфигурация-->Параметры)
Если вы не определяете тип принтера, используется по умол-
чанию unknоwn. При этом формируются пустые результаты, когда
обслуживание печати просматривает информацию о принтере, так,
что обслуживание печати не может проверить определенные запросы
или инициализировать принтер.
Типы содержимого
В то время, как информация о типе принтера сообщает обслу-
живанию печати, какой тип принтера добавляется, информация о
типе содержимого сообщает обслуживанию печати, какие типы фай-
лов могут быть напечатаны. Большая часть принтеров может печа-
тать только один тип файла; для них тип содержимого вероятно
идентичен типу принтера. Некоторые принтеры, однако, могут при-
нимать несколько различных типов файлов и печатать их содержи-
мое корректно. При добавлении этого типа принтера вам следует
перечислить имена типов содержимого, которые принимаются.
Когда файл передается обслуживанию печати на печать, обс-
луживание печати ищет принтер, способный обрабатывать задание.
Обслуживание печати может идентифицировать соответствующий
принтер, либо через имя типа-содержимого, либо через имя прин-
тер-тип. Поэтому вы можете задать любое имя (или не задавать
имя) при передаче файла на печать.
Имена содержимое-тип могут выглядеть аналогично именам
принтер-тип, но вы свободны в выборе имен, которые что-то зна-
чат для вас и людей, использующих принтер. (Имена simple,
terminfo и any распознаются как имеющие особое значение для об-
служивания печати; следует использовать их соответствующим об-
разом). Имена должны содержать не более 14 символов и могут
включать только буквы, цифры и подчеркивания. Если один тип со-
держимого печатается различными типами принтеров, вам следует
использовать те же имена типа содержимого при добавлении этих
принтеров. Это
-15-82а-
проще для людей, использующих принтеры, так как они могут ис-
пользовать то же имя для идентификации типа файла, который они
хотят печатать независимо от назначения печати.
Например некоторые производители изготовляют принтеры, ко-
торые принимают файлы PostScript. Так как этим принтерам могут
требоваться различные типы принтеров, то каждый из них должен
быть правильно инициализирован (в предположении, что управляю-
щие последовательности инициализации различны), они могут иметь
возможность обработки одного и того же типа входного файла, ко-
торый вы вызываете, возможно postscript. Другой пример, некото-
рые производители изготовляют принтеры, которые принимают
-15-83-
управляющие последовательности ANSI X3.64. Однако принтеры мо-
гут не обеспечивать все возможности ANSI или могут обеспечивать
различные наборы возможностей. Вы можете захотеть присвоить