Печать в System V
Категория: Печать | Автор: admin | 20-06-2010, 22:39 | Просмотров: 4005

К сожалению, система печати System V проектировалась без учета потребностей печати в сетях, и к новым условиям работы адаптируется с трудом. Использующие ее производители внесли многочисленные изменения, одни из которых способствовали расширению ее функциональных возможностей, в то время как назначение других объяснить трудно.

Из числа рассматриваемых нами систем System V используют Solaris и HP-UX. Однако обе существенно ее модифицировали. Ниже будет рассмотрена стандартная система с многочисленными примечаниями, касающимися конкретных систем.

 

Обзор

 

Пользователь, желающий что-нибудь вывести на печать, должен использовать либо команду , либо команду, которая косвенно вызывает . Команда получает входной файл и помещает его в буферном каталоге, соответствующем пункту назначения этой информации. Демон lpsched определяет, когда и где должен быть распечатан конкретный файл, а затем выполняет интерфейсную программу, которая форматирует данные и выводит их на заданный принтер. Краткое описание команд системы печати System V приведено в табл. 23.3.

Таблица 23.3. Команды печати АТТ-системы

Команда

Местонахождение

Функция

accept

/usr/sbin

Запуск приема заданий для данного устройства

cancel

/bin

Отмена поставленного в очередь или печатаемого задания

disable

/bin

Выключение печати на устройстве

enable

/bin

Включение печати на устройстве

lp

/bin

Постановка задания в очередь на печать

lpadmin

/usr/sbin

Конфигурация системы печати

lpmove

/usr/sbin

Перемещение задания с одного устройства на другое

lpsched

/usr/lib

Вызов демона-планировщика принтера

lpshut

/usr/sbin

Отключение демона lpsched

lpstat

/bin

Вывод информации о состоянии системы

reject

/usr/sbin

Прекращение приема заданий для данного устройства

lpfilter

/usr/sbin

Управление фильтрами печати

lpforms

/usr/sbin

Управление использованием предпечатных форм

lpusers

/usr/sbin

Управление приоритетами очереди

lpget

/bin

Считывание значений параметров конфигурации

lpset

/bin

Модифицирование параметров конфигурации

lpalt

/bin

Модифицирование заданий в очереди

lpr

/bin

Обеспечение поддержки BSD-печати

lpana

/usr/sbin

Анализ регистрационных записей

lpfence

/usr/sbin

Установка минимального приоритета занятости для принтера

 

Пункты назначения и классы

 

Пункт назначения имеет имя, которое может состоять максимум из 14 букв, цифр и знаков подчеркивания. Помимо имени, для пункта назначения определяется принадлежность к классам (классов может быть нуль или более). Пункт назначения, как правило, — принтер, но это не обязательно. Например, таковым может являться обычный текстовый файл, в который различные пользователи помещают свою информацию. Систему печати можно использовать для предотвращения ситуаций, когда два человека пытаются дополнить файл одновременно.

Класс — это группа пунктов назначения, которые можно объединить по какому-либо признаку. Например, если два принтера стоят в одной комнате, их можно отнести к одному классу. Демон lpsched будет направлять вывод, предназначенный для этого класса, на тот из двух принтеров, который свободен в данный момент. Имена классов составляются по тем же правилам, что и имена пунктов назначения.

В остальной части главы вместо термина "пункт назначения" чаще всего используется слово "принтер", даже если пункт назначения принтером не является.

 

Краткое описание команды lр

 

Команда lр — это команда пользовательского уровня, которая применяется для постановки данных в очередь на печать. Команда lр помещает копию подлежащих печати данных (которые могут поступать либо из именованных файлов, либо из стандартного ввода) в файл или в совокупность файлов в буферном каталоге. Буферный каталог для пункта назначения обычно имеет имя /var/spool/lp/request/назн, где назн — имя, под которым этот принтер или класс принтеров известны команде .

Имя файла-копии имеет вид хххn, где n — идентификационный номер задания, присвоенный командой lр, а ххх зависит от конкретной системы. Это имя файла служит как пользователю — для идентификации задания, так и системе печати — для внутренних целей. Далее мы будем называть это имя "идентификатором задания".

Если в вызове команды указана опция -d пункт_назначения, то входная информация ставится в очередь для вывода на пункт_назначения, где пункт_назначения — принтер или класс. Если опция -d не указана, команда использует в качестве имени устройства ввода значение переменной среды LPDEST, если она установлена. Если последняя не установлена, команда ставит данные в очередь для вывода на устройство, используемое по умолчанию, если таковое задано системным администратором, или отклоняет запрос, если оно не задано. (Устройство, используемое по умолчанию, можно задать командой lpadmin -d.)

В Solaris, если устройство, не выбираемое по умолчанию, указывается командой lpadmin -d, то команда ищет файл ~/.printers, файл /etc/printers.conf и, наконец, службу Federated Naming Service как место назначения, выбираемое по умолчанию.

 

Команды lpsched и lpshut: запуск и останов печати

 

Назначение демона lpsched — по мере освобождения соответствующего устройства посылать на печать файлы, помещенные в буферный каталог командой . Демон lpsched заносит в файл (обычно /usr/spool/lp/log) всю информацию обо всех обрабатываемых файлах и ошибках.

При запуске демон lpsched записывает содержимое файла /usr/spool/lp/lpg в файл /usr/spool/lp/oldlog и начинает запись в новый журнальный файл. Журнальный файл выглядит примерно так:

 

***** LP LOG:  Jul    6 12:05 *****

prl-107        garth     prl    Jul    6   12:10

pr-112         scott     prl    Jul    6   12:22

pr-117         evi       pr2    Jul    6   12:22

prl-118        garth     prl    Jul    6   12:25

prl-119        garth     prl    Jul    6   13:38

pr-132         evi       prl    Jul    6   13:42

 

 

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

В системе, взятой для этого примера, имеются два принтера — pr1 и pr2, которые относятся к классу pr. Пользователь garth во всех случаях указывал конкретный принтер pr1, поэтому его задания посылались именно туда. Пользователи scott и evi, наоборот, указывали класс pr, поэтому их задания посылались на первый свободный принтер этого класса.

Если нужно по какой-либо причине прервать выполнение демона lpsched (например, для запуска команды lpadmin), введите /usr/lib/lpshut. Когда демон lpsched не работает, никакие задания не печатаются, хотя можно продолжать постановку заданий в очередь с помощью команды . Задание, которое в момент останова демона печаталось, будет после его перезапуска напечатано с начала. Чтобы перезапустить демон lpsched, достаточно просто ввести /usr/lib/lpsched.

Файл /usr/spool/lp/SCHEDLOCK — это файл, который предназначен для контроля за тем, чтобы работал только один экземпляр демона lpsched. Если выполнение демона lpsched прервано не с помощью команды lpshut, а другими средствами, то перед перезапуском демона файл SCHEDLOCK обязательно нужно удалить вручную.

 

Команда lpadmin: конфигурирование среды печати

 

Команда lpadmin используется для информирования системы печати о локальной конфигурации принтеров. Ее применяют для присваивания имен принтерам, для создания классов и для задания принтера, используемого по умолчанию. На самом деле эта команда только создает текстовые файлы в каталоге /usr/spool/lp.

Но рядом с этими файлами неплохо бы поместить знакомую всем нам табличку: "Руками не трогать!". Другими словами, упомянутые файлы не нужно пытаться редактировать непосредственно: они имеют жестко заданный формат и поэтому их очень легко повредить.

Разработчики Solaris поставили перед собой цель обеспечить возможность параллельной работы демона lpsched и большинства команд администратора, но, на наш взгляд, эта сумасшедшая идея невыполнима.

Большинство команд lpadmin не могут работать одновременно с демоном lpsched, поэтому прежде чем запускать команду lpadmin, нужно активизировать команду lpshut, чтобы прекратить работу демона lpsched.

Система сможет начать вывод заданий на принтер только после того, как ей будет сообщено о том, что этот принтер доступен. Чтобы сделать доступным новый принтер, необходимо выполнить следующую команду:

# /usr/sbin/lpadmin -pпринтер -vустройство { -eпринтер | -mмодель | -iинтерфейс }   [ класс ... ]   [{ -l | -h }]

 

где принтер — имя принтера (как внутреннее в системе организации очередей, так и на уровне пользовательских команд), а устройство — файл устройства для принтера. Имя принтера может включать буквы, цифры и знаки подчеркивания. Длина его ограничена 14-ю знаками. В качестве аргумента устройство может задаваться любой файл. Обычно это специальный файл в каталоге /dev.

С помощью флагов , -m и -i задается интерфейсная программа принтера, которую должна использовать система печати. Интерфейсная программа отвечает за форматирование заданий, которые поступают непосредственно на принтер. Интерфейсные программы System V аналогичны фильтрам системы BSD. Более подробную информацию можно найти в одном из следующих параграфов.

Интерфейсную программу можно задать одним из трех способов:

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

-mмодель Здесь модель — это тип устройства, для которого в системе имеется интерфейсная программа. Информация о том, какие модели поддерживает система, содержится в документации и в каталоге /usr/spool/lp/model. Если файл модели задан, команда lpadmin создает копию файла /usr/spool/lp/model/модель в каталоге /usr/spool/lp/interface/пункт_назначения

-iинтерфейс В этой опции интерфейс является полным путевым именем прочие программы, которая будет служить интерфейсным сценарием. Большинство версий команды lpadmin делает копию интерфейсной программы, поэтому если вы захотите изменить ее после прогона команды lpadmin, нужно будет менять копию в каталоге /usr/spool/lp/interface, а не свой оригинал.

В HP-UX реализована возможность определять программы, которые возвращают информацию о состоянии очереди и отменяют задания печати. Их можно задавать как интерфейсные сценарии, но при этом используются другие префиксы опций (-осm и -osm задают соответственно сценарий отмены и сценарий выдачи статуса).

Помимо этих обязательных флагов, при вызове команды lpadmin можно задавать следующие опции:

-pпринтер сообщает программе lpadmin, к какому принтеру или принтерам следует обращаться. Комбинируйте этот флаг с другими опциями, чтобы изменить принтер.

класс где класс — имя класса, к которому принадлежит принтер. Для одного принтера можно задать сколько угодно классов. Если указан несуществующий класс, он будет создан. Имя класса может включать не более чем 14 символов.

принтер Удаляет указанный принтер из системы печати. Если принтер является представителем целого класса принтеров, удаляются все принтеры этого класса. Ни принтер, ни класс не могут быть удалены, если уже выполняют задание из очереди на печать. Если поставленные в очередь задания мешают удалить принтер, используйте команду reject, чтобы предотвратить загрузку в буфера новых заданий. Затем примените команды lpmove и cancel для удаления существующих заданий. Если команда lpadmin -х по-прежнему не хочет удалять принтер, последуйте совету, приведенному в параграфе "Интерфейсные программы" этой главы.

-rкласс    Удаляет принтер из заданного класса, но не из системы печати. Если указанный принтер является единственным представителем класса, этот класс удаляется.

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

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

# /usr/sbin/lpadmin -p"howler-lw,ralphie-lw" -ceng-printers

 

введет принтеры howler-lw и ralphie-lw в класс eng принтеров. Другие команды печати также могут относиться сразу ко многим принтерам, если это необходимо. Флаги, которые используются при вызове программы lpadmin, перечислены в табл. 23.4.

Таблица 23.4. Флаги команды lpadmin

Флаг

Функция

принтер

Задается принтер, к которому относятся все последующие опции

-dназн

Пункт назначения назн определяется как используемый по умолчанию

назн

Пункт назначения назн удаляется из системы печати

класс

Принтер принтер добавляется к классу класс

-rкласс

Принтер принтер удаляется из класса класс

назн

Интерфейсная программа для принтера принтер копируется из пункта назначения назн

-iинтерфейс

В качестве интерфейсной программы для принтера принтер задается интерфейс

-mмодель

Интерфейсная программа для модели модель назначается в качестве интерфейсной программы для принтера принтер

-h

Определяется, что принтер подключен аппаратно

-l

Определяется, что принтер — регистрационный терминал1

-vфайл

Определяется, что выходные данные, посылаемые на принтер принтер, должны также направляться в файл

-D"описание"

Задает строку описания принтера

1 По умолчанию печать на принтерах, указанных в команде lpadminl, невозможна.

 

Ниже приведены несколько примеров команд семейства lpadmin с краткими пояснениями.

# /usr/lib/lpadmin -phowler-lw -v/dev/tty06 -mPostScript -cpr

 

Эта команда сообщает системе печати о том, что принтеру с именем howler-lw назначен файл устройства /dev/tty06 и что он должен относиться к классу pr, а также о том, что следует использовать интерфейсную программу для принтеров PostScript. Следует отметить, что lpadmin сама создает буферный каталог с необходимыми правами доступа.

Команда

# /usr/sbin/lpadmin -dpr

 

задает используемый по умолчанию системный пункт для класса (или принтера) pr.

Команда

# /usr/sbin/lpadmin -phowler-lw -D"LaserJet named howler"

 

описывает принтер howler-lw.

Команда

# /usr/sbin/lpadmin -howler-lw -rpr -cfast

 

удаляет принтер howler-lw из класса pr и добавляет его в класс fast.

А в результате ввода команды

# /usr/sbin/lpadmin -xhowler-lw

из системы печати полностью удаляется принтер howler-lw. Если этот принтер был единственным членом какого-либо класса, весь класс также удаляется.

Несколько других примеров команды lpadmin приведены в параграфах, касающихся систем Solaris и HP-UX (см. ниже).

 

Команда lpstat: получение информации о состоянии системы печати

 

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

% lpstat -phowler-lw

howler-lw is now printing pr-125. enabled since Jul 4 12:25

 

 

расскажет о состоянии принтера phowler-lw. Статус демона lpsched можно определить командой lpstat -r.

% lpstat -r

scheduler is running

 

 

В данном случае она сообщает, что все нормально. Флаги команды lpstat перечислены в табл. 23.5.

Таблица 23.5. Флаги команды Ipstat

Флаг

Функция

-r

Предоставляет информацию о состоянии демона lpsched

-d

Предоставляет информацию об используемом по умолчанию пункте назначения

класс

Предоставляет перечень членов класса

арг

Предоставляет информацию о состоянии запросов вывода для арг1

-uпользователь

Предоставляет информацию о состоянии заданий, посланных на печать пользователем пользователь

-pпринтер

Предоставляет информацию о состоянии принтера принтер

-vпринтер

Предоставляет информацию об устройстве вывода, которое назначено в качестве принтера принтер

-aсписок

Предоставляет информацию о состоянии очередей, имена указаны параметром список

-t

Предоставляет полную информацию о состоянии системы печати

1 Параметр арг может быть принтером, классом или идентификатором задания.

 

Команда cancel: удаление заданий печати

 

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

Например, команда cancel 576 отменяет задание 576, a cancel howler-lw — задание, которое в текущий момент печатается на принтере howler-lw. Для команды cancel обычно установлены такие права доступа: владелец — псевдопользователь , группа — bin, а код прав доступа — 6775, поэтому любой пользователь может воспользоваться этой командой для отмены заданий, которые явно того заслуживают. Если задание отменяет тот, кто его не посылал, владельцу задания посылается сообщение по электронной почте. Не исключено, что пользователи начнут злоупотреблять этой возможностью, тогда код прав доступа можно изменить.

 

Команды accept и reject: управление организацией очереди

 

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

# /usr/lib/ eject -r"howler-lw will be down until Tuesday" howler-lw

 

команда lp будет отклонять запросы на печать на принтере howler-lw.

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

% /usr/bin/lp -dhowler-lw myfile

lp: cannot accept requests for destination "howler-lw"

     — howler-lw will be down until Tuesday

 

 

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

 

Команды enable и disable: управление печатью

 

Командой disable демону lpsched дается указание прекратить посылку заданий на конкретный принтер. В отличие от команды reject, команда disable не препятствует программе продолжать ставить задания в очередь на этот принтер, однако стоящие в очереди задания начнут выводиться на печать только после того, как принтер будет повторно включен командой enable. Команда disable обычно не прерывает печать текущего задания; если требуется это сделать, воспользуйтесь опцией . Как и команда reject, команда disable поддерживает флаг -r, который позволяет вам указать причину отключения принтера. Например, для выключения печати на принтере howler-lw дается команда

# /bin/disable -r"Being cleaned, back in 5 minutes" howler-lw

 

Для возобновления печати введите

# /bin/enable howler-lw

 

Команда lpmove: перемещение заданий

 

Иногда возникает необходимость переместить задания, стоящие в очереди к одному принтеру или классу, на другой принтер. Для этого служит команда lpmove. В качестве аргументов этой команды задается перечень идентификаторов заданий и имя нового принтера. Например, команда

# /usr/sbin/lpmove howler-lw-324 howler-lw-325 anchor-lj

 

перемещает задания с номерами 324 и 325 из очереди к принтеру howler-lw в очередь к принтеру anchor-lj. В качестве источника можно задать принтер или класс принтеров. В частности, команда

# /usr/sbin/lpmove howler-lw anchor-lj

 

переместит все задания из очереди к принтеру howler-lw в очередь к принтеру anchor-lj. При таком использовании команды lpmove возникает побочный эффект: для исходного принтера выполняется команда reject. Так, после выполнения приведенной выше команды программа перестанет принимать запросы для принтера howler-lw.

Вследствие особенностей HP-UX команду lpmove нельзя использовать, если выполняется демон lpsched. Вначале следует запустить программу lpshut.

 

Интерфейсные программы

 

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

Демон lpsched вызывает интерфейсные программы со следующими аргументами:

ид_задания пользователь заголовок экз опции файл [файл ...]
 

 

где:

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

Все перечисленные аргументы должны указываться при каждом выполнении интерфейсной программы; некоторые из них могут быть пустыми строками. В качестве стандартного входного потока для интерфейсной программы определен файл /dev/null, а стандартный поток вывода и стандартный поток данных об ошибках направляются на устройство, заданное командой lpadmin -v.

В соответствии с концепцией системы печати BSD каждому формату файлов должна соответствовать собственная интерфейсная программа. Разработчики System V пошли по другому пути: интерфейсные программы предназначены для обработки данных всех типов, которые поддерживает принтер (если получены данные неизвестного типа, такая программа с "чарующей улыбкой" прекращает работу). По этой причине интерфейсные программы обычно представляют собой сценарии интерпретатора команд, которые просто обрабатывают данные, заданные им в качестве аргументов, а для выполнения реальной работы по форматированию вызывают другие программы.

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

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

Если интерфейсная программа закончила свою работу успешно, то ее код завершения равен 0; при ошибке он представляет собой целое число от 1 до 127. В случае если задание не выведено на печать, интерфейсный сценарий должен предпринять повторную попытку. Если же ошибка оказалась серьезной, интерфейсная программа должна отключить принтер командой disable. А если проблемы с печатью возникают постоянно, причину, скорее всего, следует искать именно в интерфейсном сценарии.

 

Что делать, если программу lр заклинило?

 

Иногда попытки конфигурировать принтер приводят к тому, что программа безнадежно запутывается. Информация о конфигурации системы хранится в разных файлах каталога /usr/spool/lp. Содержимое и структура файлов конфигурации зависят от варианта реализации и во многих случаях в них трудно разобраться, а сопроводительная документация для этих файлов обычно отсутствует.

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

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

#lpshut

#lpadmin -xhoser

#find /usr/spool/lp -name hoser -exec rm -rf {} ;

#lpsched

#lpstat -t

 

Первые две команды введены с целью отключить планировщик и попытаться удалить принтер. Если система запуталась, команда lpadmin -х может дать отрицательный результат. Команда find удаляет все интерфейсные программы и буферные каталоги, соответствующие данному принтеру. Демон lpsched перезапускает планировщик, а команда lpstat используется для проверки того, все ли ссылки на принтер dest в системе печати уничтожены.



 (голосов: 0)
Версия для печати | Комментариев: 0
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.


 
Логин
Пароль
 

 
Locations of visitors to this page