Конвейеры для формирования начальных и конечных страниц определяются с помощью системных атрибутов (Атрибуты системного администрирования) sh (начальные страницы) и st (конечные страницы). Печать начальных и конечных страниц выполняется отдельно от соответствующего задания печати программы буферизации, несмотря на то, что они не упоминаются в выводе запроса о состоянии очереди.
Ниже приведена схема определения конвейера с помощью атрибута sh для создания и печати начальной страницы. Конвейер будет создан для очереди расширенного набора символов ASCII и принтера IBM 4029 LaserPrinter. Формат вывода атрибута задается командой lsvirprt. Дополнительная информация приведена в разделе Просмотр, форматирование и изменение определений виртуальных принтеров.
Конвейер для создания начальной страницы sh = %Ide/pioburst %F[H] %Idb/H.ascii | %Ide/pioformat -@%Idd/%Imm -!%Idf/piof52 02 -L! -J! %IsH -u%IuH
%Ide INCLUDE: (Каталог, содержащий различные модули) '/pioburst ' %F[H] Если в командной строке указано "-H] Аргумент", то "-# Аргумент" -> OUTPUT ' ' %Idb INCLUDE: (Каталог, содержащий файлы с текстом начальной и конечной страниц) '/H.ascii | ' %Ide INCLUDE: (Каталог, содержащий различные модули) '/pioformat -@' %Idd INCLUDE: (Каталог, содержащий обработанные файлы базы данных) '/' %Imm INCLUDE: (Имя (обработанного) файла базы данных; запускается "piodigest" (mt.md.mn.mq:mv)) ' -!' %Idf INCLUDE: (Каталог, содержащий загружаемые процедуры форматирования) '/piof5202 -L! -J! ' %IsH INCLUDE: (ФЛАГИ ФОРМАТИРОВАНИЯ для начальной страницы) ' -u' %IuH INCLUDE: (ЛОТОК подачи бумаги для начальной страницы)
Во время выполнения задания программой буферизации значение атрибута sh равно:
/usr/lib/lpd/pio/etc/pioburst /usr/lib/lpd/pio/burst/H.ascii | /usr/lib/lpd/pio/etc/pioformat -@/var/spool/lpd/pio/@local/ddi/ibm4029.asc.lp1.asc:lp1 -!/usr/lib/lpd/pio/fmtrs/piof5202 -L! -J! -u1
Команда pioburst обрабатывает шаблон начальной страницы и передает его независимой от устройства программе форматирования pioformat, которая, в свою очередь, загружает обработанный файл описания для данного виртуального принтера (аргумент флага -@) и зависящей от устройства программы форматирования piof5202 (аргумент флага -!) Для программы piof5202 допустимы три следующих флага:
Определение st аналогично определению sh.
Пользователь root может создавать начальные страницы для пользователей, изменяя определение атрибута sh. Так как среда пользователя, передавшего задание на выполнение программе буферизации, доступна для процессов буферизации, пользователь root может изменять ту часть атрибута sh, в которой задается шаблон начальной страницы, подлежащий обработке.
Например, в приведенном выше определении файл H.ascii задает шаблон начальной страницы, который должен быть обработан и напечатан. Здесь можно указать пользовательскую переменную среды, например, $MYHEADER, как показано ниже.
%Ide INCLUDE: (Каталог, содержащий различные модули) '/pioburst ' %F[H] Если в командной строке указано "-H] Аргумент", то "-# Аргумент" -> OUTPUT ' ' %Idb INCLUDE: (Каталог, содержащий файлы с текстом начальной и конечной страниц) '/$MYHEADER | ' %Ide INCLUDE: (Каталог, содержащий различные модули) '/pioformat -@' %Idd INCLUDE: (Каталог, содержащий обработанные файлы базы данных) '/' %Imm INCLUDE: (Имя (обработанного) файла базы данных; запускается "piodigest" (mt.md.mn.mq:mv)) ' -!' %Idf INCLUDE: (Каталог, содержащий загружаемые процедуры форматирования) '/piof5202 -L! -J! ' %IsH INCLUDE: (ФЛАГИ ФОРМАТИРОВАНИЯ для начальной страницы) ' -u' %IuH INCLUDE: (ЛОТОК подачи бумаги для начальной страницы)
Для того чтобы разрешить пользователю susan получить с помощью этой очереди пользовательские начальные страницы, пользователь root должен выполнить следующие действия:
Когда пользователь susan отправляет задание в эту очередь, ссылка на начальную страницу в атрибуте sh будет соответствовать имени /usr/lib/lpd/pio/burst/H.susan, и пользователь susan получит пользовательскую начальную страницу. Недостатком этого сценария является то, что переменная среды MYHEADER должна быть определена для каждого пользователя очереди, связанной с данным виртуальным принтером, иначе виртуальному принтеру не удастся обработать ссылку на /usr/lib/lpd/pio/burst/$MYHEADER. Если переменная $MYHEADER не будет определена, произойдет ошибка; возможно, задание печати и будет обработано, но начальная страница будет в лучшем случае лишь пригодна для повторного использования.
Во избежание проблем, связанных с определением переменной MYHEADER, можно поместить в определение атрибута sh программу на языке оболочки, которая будет анализировать среду пользователя, прежде чем формировать конвейер для создания начальной страницы. Ниже приведен один из вариантов такой программы.
Конвейер для создания начальной страницы sh = { if test X"$MYHEADER" = X ; then %Ide/pioburst %F[H] %Idb/H.ascii | %Ide/pioformat -@%Idd/%Imm -!%Idf/piof5202 -L! -J! %IsH -u%IuH; else %Ide/pioburst %F[H] %Idb/$MYHEADER | %Ide/pioformat -@%Idd/%Imm -!%Idf/piof5202 -L! -J! %IsH -u%IuH; fi; }
'{ if test X"$MYHEADER" = X ; then ' %Ide INCLUDE: (Каталог, содержащий различные модули) '/pioburst ' %F[H] Если в командной строке указано "-H] Аргумент", то "-# Аргумент" -> OUTPUT ' ' %Idb INCLUDE: (Каталог, содержащий файлы с текстом начальной и конечной страниц) '/H.ascii | ' %Ide INCLUDE: (Каталог, содержащий различные модули) '/pioformat -@' %Idd INCLUDE: (Каталог, содержащий обработанные файлы базы данных) '/' %Imm INCLUDE: (Имя (обработанного) файла базы данных; запускается "piodigest" (mt.md.mn.mq:mv)) ' -!' %Idf INCLUDE: (Каталог, содержащий загружаемые процедуры форматирования) '/piof5202 -L! -J! ' %IsH INCLUDE: (ФЛАГИ ФОРМАТИРОВАНИЯ для начальной страницы) ' -u' %IuH INCLUDE: (ЛОТОК подачи бумаги для начальной страницы) '; else ' %Ide INCLUDE: (Каталог, содержащий различные модули) '/pioburst ' %F[H] Если в командной строке указано "-H] Аргумент", то "-# Аргумент" -> OUTPUT ' ' %Idb INCLUDE: (Каталог, содержащий файлы с текстом начальной и конечной страниц) '/$MYHEADER | ' %Ide INCLUDE: (Каталог, содержащий различные модули) '/pioformat -@' %Idd INCLUDE: (Каталог, содержащий обработанные файлы базы данных) '/' %Imm INCLUDE: (Имя (обработанного) файла базы данных; запускается "piodigest" (mt.md.mn.mq:mv)) ' -!' %Idf INCLUDE: (Каталог, содержащий загружаемые процедуры форматирования) '/piof5202 -L! -J! ' %IsH INCLUDE: (ФЛАГИ ФОРМАТИРОВАНИЯ для начальной страницы) ' -u' %IuH INCLUDE: (ЛОТОК подачи бумаги для начальной страницы) '; fi; } '
Исходное определение st повторяется дважды в новом определении st. Программа на языке оболочки проверяет, определена ли переменная MYHEADER; если нет, то применяется шаблон начальной страницы H.ascii, иначе - шаблон начальной страницы $MYHEADER.