Несмотря на то, что служба печати работает с большинством принтеров и выполняет большинство задач печати, вам могут понадобиться функции, не поддерживаемые стандартной службой печати.
Службу печати можно настроить следующим образом:
При печати пользовательского файла, размер страницы, ширина шрифта и интервалы обычно определяются из формы, в которой происходит печать. Если пользователь не использует форму, он может указать размер страницы и интервал. Если же пользователь не указывает ни форму, ни размер страницы и интервал, используются значения по умолчанию.
Примечание: Приведенная выше информация не относится к принтерам PostScript.
Установка значений по умолчанию облегчает обработку запросов на печать. Например, для различных принтеров вы можете задавать различные значения размера страницы и интервала печати по умолчанию. Вы можете задать для одного принтера широкую печать (132 столбца), для другого - нормальную печать (80 столбцов, 66 строк), а для еще одного - печать непропорциональных шрифтов (12 символов на дюйм, 8 строк на дюйм). При печати пользователь направляет задание на принтер, соответствующий необходимому стилю печати.
Можно задать четыре значения по умолчанию:
Первые два значения задаются в строках и столбцах соответственно (или в дюймах). Ширина шрифта и интервал задаются в символах на дюйм (cpi) и строках на дюйм (lpi) соответственно.
Помимо этого, ширину шрифта можно задать с помощью специальных слов pica - 10 символов на дюйм, elite - 12 символов на дюйм или compressed - максимальное количество символов на дюйм, обеспечиваемое принтером (не более 30 символов на дюйм).
Значения по умолчанию задаются с помощью следующих команд:
/usr/sbin/lpadmin -p имя_принтера -o width=число /usr/sbin/lpadmin -p имя_принтера -o length=число /usr/sbin/lpadmin -p имя_принтера -o cpi=число /usr/sbin/lpadmin -p имя_принтера -o lpi=число
Примечание: Команда lpadmin определяет, применимы ли данные значения, с помощью типа принтера. Поэтому тип принтера необходимо задать перед заданием значений по умолчанию.
Например, чтобы задать ширину страницы 11 дюймов, длину страницы 14 дюймов,
ширину шрифта - compressed и интервал - 3 строки на дюйм для принтера с именем
barney необходимо ввести следующее:
/usr/sbin/lpadmin -p barney -o width=11i /usr/sbin/lpadmin -p barney -o length=14i /usr/sbin/lpadmin -p barney -o cpi=compressed /usr/sbin/lpadmin -p barney -o lpi=3
Если значения по умолчанию не указаны, то размер страницы и интервал
задаются при инициализации принтера. Эти значения можно узнать,
произведя настройку без указания собственных значений; затем, необходимо
просмотреть конфигурацию принтера, выполнив команду lpstat. Чтобы просмотреть значения размера
страницы и интервала по умолчанию, введите:
lpstat -p имя_принтера -l
Появится примерно следующая информация:
Интервал по умолчанию: compressed CPI 3 LPI Размер страницы по умолчанию: 11i ширина 14i длина
Если вы не задавали значения по умолчанию, то команда lpstat берет значения из записи базы данных terminfo для принтера.
Баннером называется страница, на которой описан запрос на печать (например, имя принтера, пользователь, дата), печатаемая вместе с заданием печати.
Если вы хотите, чтобы пользователи сами решали, печатать ли баннер, выполните следующую команду:
/usr/sbin/lpadmin -o nobanner
По умолчанию в файле /etc/lp/Systems находится шаблонная запись, при которой система может устанавливать с любой другой системой соединения BSD. Эта запись выглядит следующим образом:
*:x:-:bsd:-:n:10:-:-:Разрешить все соединения BSD
При наличии этой записи сервер печати устанавливает соединения с системами, которые не указаны в файле вручную.
В то же время с помощью команды lpsystem в файл можно добавлять имена удаленных систем.
Доступ к принтеру управляется с помощью файлов принтера users.allow и users.deny. Дополнительную информацию можно узнать с помощью команды lpadmin.
Примечание: Шаблонная запись используется только для входящих запросов на установление соединения.
Если вы не хотите управлять доступом к каждому принтеру отдельно, но хотите, чтобы в файле /etc/lp/Systems были указаны удаленные системы, имеющие доступ к вашим принтерам, удалите из файла шаблонную запись и добавьте записи об удаленных системах. Это можно сделать следующим образом:
/usr/sbin/lpsystem -r "*"
/usr/sbin/lpsystem имя-системы
Файл моделей принтеров /usr/lib/scoadmin/printer/model.stz содержит список поддерживаемых принтеров и их атрибуты. С помощью этого файла Web-администратор системы настраивает новый принтер. Информация хранится в следующем формате:
ключ1:
атр1=знач1
атр2=знач2
ключ2:
...
Файл содержит текстовое описание всех поддерживаемых моделей, указатели на интерфейсную программу принтера и запись terminfo. В нем также содержится дополнительная информация: настройки последовательной линии или поддерживаемые типы содержимого.
Существуют следующие атрибуты:
contents | Заключенный в кавычки, разделенный запятыми список типов содержимого, поддерживаемых данным принтером, обычно PS (postscript), pcl (Управляющий язык принтера Hewlett-Packard) или simple (для большинства остальных принтеров). С помощью Фильтров печати можно осуществлять поддержку других типов содержимого. См. Фильтры. Этот атрибут является необязательным. |
interface | В большинстве случаев значение Интерфейсная программа принтера можно установить равным standard. См. Интерфейсные программы принтера. Этот атрибут является обязательным. |
name | Текстовое описание модели принтера. Этот атрибут является обязательным. |
terminfo | Имя записи terminfo, связанной с этим принтером. См. Работа с базой данных terminfo. Этот атрибут является необязательным. |
stty | Все параметры последовательной или параллельной линии, возможные для этого принтера. Этот атрибут является необязательным. |
Помимо этого, для каждого принтера должно быть задано уникальное имя; пример приведен ниже:
canon-jet-10ex: name="Canon Bubble Jet 10ex" terminfo=bj-10ex interface=standard hp-laserjet: name="HP LaserJet (PCL)" terminfo=hplaserjet interface=standard contents=pcl stty="clocal -onlcr"
Интерфейсная программа принтера - это программа, используемая службой печати для управления принтером при печати файла. Интерфейсная программа инициализирует принтер, печатает файл и сообщает об ошибках.
Примечание: Если в системе есть интерфейсная программа, которую вы использовали в службе печати в предыдущей системе UNIX, то она должна функционировать нормально. Однако, стоит помнить, что несколько опций -o были стандартизованы и передаются всем интерфейсным программам. В связи с этим может возникнуть конфликт этих опций, с опциями, используемыми вашей интерфейсной программой.
Интерфейсные программы принтера связаны с моделью принтера и расположены в каталоге /etc/lp/model. Например, интерфейсная программа для принтера PostScript называется /etc/lp/model/PS. Существующие программы можно настраивать необходимым вам образом; также, существует возможность создавать собственные интерфейсные программы. См. Создание интерфейсной программы принтера.
Интерфейсная программа выполняет следующие действия:
Служба печати открывает порт принтера. Затем, служба печати передает соединение с портом принтера интерфейсной программе в качестве стандартного вывода и передает управление принтером интерфейсной программе. Если порт "зависает", интерфейсной программе передается сигнал SIGHUP.
В большинстве из интерфейсных программ существуют опции, задаваемые пользователем с помощью опции -o команды lp.
Служба печати запускает интерфейсную программу для отправки задания печати
принтером:
/etc/lp/interfaces/printer id user title copies options file1 file2 ...
У интерфейсной программы существуют следующие аргументы:
printer | Имя интерфейсной программы (совпадает с именем принтера). |
id | ИД запроса, возвращаемый командой lp. |
user | Имя пользователя, сделавшего запрос. |
title | Необязательное название, заданное пользователем. |
copies | Число печатаемых копий, заданное пользователем. |
options | Список разделенных пробелами опций, заданных пользователем (с помощью команды lp -o) или службой печати (значения по умолчанию, заданные администратором в команде lpadmin). Список опций, поддерживаемых стандартным (standard) интерфейсом, можно получить с помощью командыlp. |
file | Полное имя печатаемого файла. |
При запуске интерфейсной программы:
Служба печати передает интерфейсной программе дополнительную информацию о
конфигурации принтера с помощью следующих переменных оболочки:
TERM=тип-принтера | Задает тип принтера. Значение используется в качестве ключа при извлечении информации о принтере из базы данных terminfo. |
FILTER=конвейер | Задает фильтр, используемый при отправке содержимого запроса на принтер; управление принтером передается фильтру. |
CHARSET=набор-символов | Задает набор символов, используемый при печати содержимого запроса на печать. Стандартная (standard) интерфейсная программа получает необходимые для выбора набора символов управляющие последовательности, из базы данных terminfo. |
В случае, если ваш принтер не поддерживается при добавлении записи в базу данных terminfo или стандартная (standard) и все прочие интерфейсные программы, расположенные в файле /etc/lp/model, не соответствуют вашим требованиям печати, вы можете создать собственную интерфейсную программу принтера.
Для создания интерфейсной программы выполните следующие действия:
cd /etc/lp/model cp standard okidatanew
## Initialize the printer port
Измените код стандартной (standard) интерфейсной программы. В нем задаются режимы по умолчанию и измененные режимы, заданные пользователем или службой печати; режимы задаются приблизительно такой строкой:
stty mode options 0<&1
Эта команда получает стандартный ввод команды stty из порта принтера. Например,следующая команда stty задает скорость передачи равной 1200bps и задает некоторые режимы опций:
stty -parenb -parodd 1200 cs8 cread clocal ixon 0<&1
# Here you may want to add other port initialization code.
## Print the banner page
При печати из некоторых приложений необходимо отключать разбиение на страницы. При необходимости отключения разбиения страниц, следует изменить следующую строку стандартной (standard) интерфейсной программы (/usr/lib/lp/model/standard):
if [ -n "${FF}" -a "no" = "${nofilebreak}" ]
Чтобы отключить разбиение на страницы, измените no на yes.
Одним из способов предупреждения администратора о сбое принтера является выход с кодом 129. При выходе из интерфейсной программы служба печати повторно печатает задание с начала после исправления неполадки. Чтобы избежать повторной печати всего задания, укажите, что при отправке сообщения о сбое интерфейсная программа ожидает исправления неполадки. При исправлении неполадки интерфейсная программа продолжает печать задания. По завершению печати код выхода равен нулю, как если бы неполадки не было. Дополнительным преимуществом является то, что интерфейсная программа автоматически определяет исправление неполадки, так что администратору не приходится повторно включать принтер.
Чтобы задать отправку сообщений об ошибке в службу печати, выполните команду lp.tell. Стандартная (standard) интерфейсная программа вызывает команду lp.tell с переменной оболочки LPTELL. Программа lp.tell отправляет стандартный вывод в службу печати. Служба печати передает это сообщение (в виде предупреждений) администратору. Если стандартный ввод пуст, то lp.tell не создает предупреждение. Пример использования программы lp.tell (LPTELL) приведен ниже в коде стандартной (standard) интерфейсной программы:
# Here's where we set up the $LPTELL program to capture # fault messages. # # Here's where we print the file.
При использовании кода выхода 129 или команды lp.tell, интерфейсной программе не нужно выключать принтер. Интерфейсная программа может отключить принтер, однако таким образом переопределяется механизм предупреждения о неполадках. Предупреждения отправляются только в случае, когда служба печати обнаруживает неполадку принтера; неполадка обнаруживается с помощью кода выхода и программы lp.tell.
Если служба печати должна прервать печать файла, то она убивает интерфейсную программу с помощью сигнала 15 (дополнительная информация приведена в разделах сигнал и убить).
Если интерфейсная программа останавливается в результате любого другого сигнала, служба печати не отменяет следующие задания и продолжает использование этого принтера. Служба печати сообщает пользователю, запустившему задание печати, от том, что оно не было удачно завершено.
При запуске интерфейса сигналы SIGHUP, SIGINT, SIGQUI и SIGPIP (номера прерываний 1, 2, 3 и 13) игнорируются. Стандартная (standard) интерфейсная программа при обнаружении этих сигналов предполагает неполадку принтера и сообщает о сбое.
Таблица описывает, каким образом служба печати обрабатывает коды
выхода.
Код | Описание |
---|---|
0 | Задание печати успешно завершено. |
От 1 до 127 | При выполнении задания службой печати была обнаружена ошибка (например, в задании было превышено количество непечатаемых символов или возможности принтера были превышены). Эта неполадка никак не влияет на следующие задания печати. Служба печати сообщает пользователю, отправившему задание - с помощью письма или электронной почты - что при выполнении задания произошла ошибка. Если во время печати произошла неполадка, то она была исправлена. |
128 | Зарезервировано для внутреннего использования службой печати. Интерфейсная программа не выходит с таким кодом выхода. |
129 | Служба печати при выполнении задания столкнулась с неполадкой принтера. Эта неполадка влияет на следующие задания печати. Если для устранения неполадки требуется вмешательство администратора, служба печати должна отключить принтер. Если для устранения неполадки необходимо продолжить печать, служба печати должна не отключать принтер, а повторить печать через несколько минут. |
> 129 | Зарезервировано для внутреннего использования службой печати. Интерфейсная программа не выходит с такими кодами выхода. |
По умолчанию служба печати использует стандартную интерфейсную программу, /etc/lp/model/standard. Эта интерфейсная программа выполняет большинство задач печати.
Изменить интерфейсную программу после добавления принтера можно с помощью опции -i командыlpadmin.
В следующем примере новый принтер с именем laser добавляется на порт принтера /dev/tty01. Принтер использует настраиваемую интерфейсную программу, расположенную в каталоге /usr/doceng/laser_intface. Она обрабатывает файлы трех типов: i10, i300, и impress; работать с ней могут только пользователи doceng и docpub. (Команда разбита на несколько строк для облегчения чтения.)
lpadmin -p laser -v /dev/tty01 \ -i /usr/doceng/laser_intface \ -I "i10,i300,impress" \ -u "allow:doceng,docpub"
При инициализации принтера, настройке размера страницы, ширины шрифта, интервала и набора символов служба печати основывается на стандартной интерфейсной программе и базе данныхterminfo. Поэтому добавление нового принтера в службу печати существенно упрощается при наличии соответствующей записи в базе данных terminfo (/usr/lib/terminfo/terminfo.lp).
В базе данных terminfo каждый принтер описывается коротким именем, схожим с именем, используемым для установки переменной оболочки TERM. Например, в базе данных terminfo именем для принтера AT&T модель 455 является 455.
Для указания типа принтера в базе terminfo применяется опция -T команды lpadmin. По умолчанию в базе данных terminfo содержатся записи о многих наиболее часто встречающихся принтерах. Выберите тип terminfo, соответствующий вашему принтеру.
Если база данных terminfo не содержит записи о вашем принтере, вы все равно сможете использовать этот принтер в службе печати. При этом вы не сможете применять автоматическую настройку значений размера страницы, интервалов и набора символов; также, могут возникать неполадки при использовании наборов символов в различных запросах на печать и в работе с формами печати. В это случае рекомендуется либо добавить в базу данных terminfo (Добавление записи о принтере в базу данных terminfo) запись о вашем принтере, либо создать для принтера интерфейсную программу (Создание интерфейсной программы принтера).
Для каждого терминала или принтера в базе данных terminfo может существовать большое количество элементов. Однако, служба печати обычно использует не более 50 из них, а большинству принтеров необходимо еще меньше. Элементы, существующие для записи базы данных terminfo, можно узнать с помощью команды:
infocmp terminfo_имя
Для создания в базе terminfo записи о вашем принтере, необходимо выполнить следующие действия:
tic filename
После добавления или удаления записей terminfo, а также после изменения значений интервалов, размеров страницы или набора символов, необходимо остановить и затем повторно запустить службу печати.
Далее приведены записи службы печати в базе terminfo и их описания:
Запись terminfo | Описание |
---|---|
Булевские значения: | |
daisy | Для изменения набора символов принтера необходим оператор |
Числовые значения: | |
bufsz | Число байт, буферизуемых перед началом печати |
* cols | Число символов в строке (число столбцов) |
* it | Табуляция через каждые # пробелов |
* lines | Число строк на странице |
orc | Горизонтальное разрешение в блоках на символ |
orhi | Горизонтальное разрешение в блоках на дюйм |
orl | Вертикальное разрешение в блоках на строку |
orvi | Вертикальное разрешение в блоках на дюйм |
cps | Средняя скорость печати, в символах в секунду |
Строковые значения: | |
* cr | Возврат каретки |
cpi | Изменение числа символов на дюйм |
lpi | Изменение числа строк на дюйм |
chr | Изменение горизонтального разрешения |
cvr | Изменение вертикального разрешения |
csnm | Список имен наборов символов |
mgc | Обнулить значения границ (верхней, нижней и боковых) |
* hpa | Абсолютная горизонтальная позиция |
* cud1 | Вниз на одну строку |
* cuf1 | Перевод каретки вправо |
swidm | Включить широкую печать |
rwidm | Отключить широкую печать |
* ff | Выталкивание страницы |
* is1 | Строка инициализации принтера |
* is2 | Строка инициализации принтера |
* is3 | Строка инициализации принтера |
* if | Имя файла инициализации |
* iprog | Полное имя программы инициализации |
* cud | Переместить каретку вниз на # строк |
* cuf | Переместить каретку вправо на # строк |
* rep | Повторить символ # раз |
* vpa | Абсолютная вертикальная позиция |
scs | Выбор набора символов |
smgb | Установка нижней границы в текущую строку |
smgbp | Установка нижней границы |
* smgl | Установка левой границы в текущий столбец |
smglp | Установка левой границы |
* smgr | Установка правой границы в текущий столбец |
smgrp | Установка правой границы |
smgt | Установка верхней границы в текущую строку |
smgtp | Установка верхней границы |
scsd | Начало описания набора символов |
* ht | Табуляция до следующей позиции табуляции (8 символов) |
Элементы, отмеченные звездочкой(*) доступны в вашей системе. Остальные описания могут быть добавлены.
Форма принтера - это лист бумаги с формой, загружаемый в принтер. Часто приложения создают файлы, которые при печати заполняют форму. В службе печати существуют средства создания и управления формами.
Для указания формата формы создается файл описания.
Например, создается файл /tmp/check.desc, в который включается (полностью или частично) приведенная ниже информация:
Page length: 66 Page width: 80 Number of pages: 2 Line pitch: 10 Character pitch: 16 Character set choice: any Ribbon color: blue Comment: Check form Alignment pattern: XXXX XXXXXXXXXXXXX XXXXXXXXX xxxxxx xxxxxxxxxxxxxxxxxxxxxxxxx
Служба печати использует шаблон выравнивания (alignment pattern) для выравнивания страницы перед началом печати и предлагает вам выполнить выравнивание перед печатью.
В зависимости от принтера, длина страницы (page length) может быть задана в строках,дюймах (i) или сантиметрах (c). Ширина страницы (page width) задается в столбцах,дюймах (i) или сантиметрах (c). В приведенном выше примере длина страницы равна 66 строкам. Если принтер распознает обозначение в дюймах, длину страницы можно задать как 11i.
После создания, форму необходимо добавить в службу печати. Выберите имя, описывающее форму; оно используется при монтировании формы. Добавление предварительно определенной формы выполняется с помощью следующей команды:
lpforms -f check -F /tmp/check.desc
Эта команда помещает форму в файл /usr/spool/lp/admins/lp/forms.
Служба печати не накладывает ограничений на количество определенных форм. Несмотря на это, более не используемые формы рекомендуется удалять. Если этого не делать, то при выборе формы пользователю приходится просматривать список устаревших форм. К тому же, в связи с особенностями службы печати, наличие неиспользуемых форм может вызвать замедление работы службы печати.
Форма удаляется с помощью следующей команды:
/usr/sbin/lpforms -f имя-формы -x
Вы можете ограничить доступ к форме списком пользователей. Например, вы можете ограничить доступ к форме только сотрудниками конкретного отдела.
Служба печати ограничивает доступ к формам с помощью предоставленных вами списков пользователей, которым разрешен или запрещен доступ к форме. Если пользователь не имеет доступа к форме, то служба печати запретит печать файла с использованием этой формы.
Метод, используемый для ограничения доступа к формам схож с методом, используемым для предоставления доступа к средствам cron и at. Дополнительную информацию можно узнать с помощью команды crontab.
Если пользователи системы имеют доступ к формам удаленного принтера, то все пользователи, добавленные в список доступа на локальном компьютере, должны также быть добавлены в список доступа в удаленной системе.
С другой стороны, если необходимо запретить пользователю доступ к формам удаленного принтера, нет необходимости создавать в удаленной системе список запрета, если такой список существует в локальной системе. Для запрета доступа к формам удаленного принтера достаточно включения пользователя в любой из этих списков. Рекомендуется, однако, всех пользователей, состоящих в списке запрета в удаленной системе, вносить в аналогичный список в локальной системе. В таком случае любой пользователь, не имеющий прав доступа к форме, пытается ее использовать, он немедленно получает предупреждение о запрете доступа к этой форме. Если же локальная служба печати не знает о том, что пользователь не имеет доступа к такой же удаленной форме, то сообщение о запрете доступа пользователь получит из удаленной системы лишь спустя некоторое время.
Для добавления имен в список доступа и их удаления из списка запрета необходимо выполнить следующее:
lpforms -f имя-формы -u allow:список-пользователей
Для добавления имен в список запрета и их удаления из списка доступа необходимо выполнить следующее:
lpforms -f имя-формы -u deny:список-пользователей
Список-пользователей - это разделенный запятыми или пробелами список имен пользователей. Если для разделения используются пробелы, то весь список (включая allow: или deny:, но не включая -u) необходимо заключить в кавычки. Каждый элемент списка может содержать имя системы.
Указав allow:all вы разрешите доступ всем пользователям. Указав deny:all вы запретите доступ всем пользователям.
Если списки доступа и запрета не содержат пользователей, служба печати разрешает доступ к формам всем пользователям.
Перед тем, как начать печать с использованием формы, ее нужно монтировать к принтеру. Если при создание формы предупреждение было включено, то при наличии достаточного количества запросов на печать вы получите предупреждение. (Информация о предупреждениях приведена в разделе Предупреждение о монтировании форм и картриджей шрифтов). Монтирование состоит из загрузки формы на принтер и передачи подтверждения о монтировании в службу печати. Перед началом монтирования рекомендуется отключить принтер.
Если форма не монтирована на принтер, то принтер будет принимать только запросы, в которых эта форма не используется.
Для передачи службе печати подтверждения о монтировании необходимо выполнить следующие действия:
/usr/sbin/lpadmin -p имя-принтера -M -f имя-формы -a -o filebreak
Если вместе с формой был задан шаблон выравнивания, можно начать печать этого шаблона, продолжающуюся до тех пор, пока принтер не будет настроен соответствующим образом.
Опция -o filebreak сообщает службе печати о необходимости добавления после каждого шаблона выравнивания перевода страницы. Для печати каждой следующей копии шаблона выравнивания необходимо нажимать кнопку Выполнить.
Управляющая последовательность, используемая при переводе страницы, зависит от конкретного принтера и получается из базы данных terminfo. Если шаблон выравнивания уже содержит перевод страницы, следует исключить опцию -o filebreak.
Команда lpadmin позволяет произвести размонтирование формы или шрифта на конкретном принтере.
Форма размонтируется с помощью следующей команды:
/usr/sbin/lpadmin -p имя-принтера -M -f none
После определения формы в службе печати, просмотреть ее можно с помощью нескольких команд, в зависимости от необходимого вам типа информации. Команда lpforms показывает атрибуты формы. (Изображение, возвращенное командой lpforms может быть использовано в качестве ввода. Его можно сохранит в файле для последующего использования.) Команда lpstat выводит на экран информацию о текущем состоянии формы.
Примечание: Описание формы, сохраненное в файле, может быть позже использована для восстановления случайно удаленной формы.
Просмотреть состояние формы можно просмотреть с помощью следующей команды:
lpstat -f имя-формы -l
Сокращенный вариант состояния формы можно просмотреть, исключив опцию -l.
Более подробный вариант (пример которого приведен ниже) можно просмотреть с помощью команды lpforms -l:
Длина страницы: число Ширина страницы: число Число страниц: целое число Интервал: число Ширина шрифта: число Набор символов: набор-символов[,обязательный] Цвет ленты: цвет-ленты Комментарий: комментарий Шаблон выравнивания: [тип-содержимого] содержимое
В целях защиты содержимого, шаблон выравнивания не показывается при выполнении команды lpstat. Описание этих характеристик приведено в разделе Создание формы принтера.