Cистема печати в Solaris
Системы Solaris могут использоваться и в качестве мощных серверов, и в качестве рабочих станций на рабочих местах пользователей. В последнем случае пользователям необходимо иметь возможность печатать тексты и изображения со своих компьютеров. Поэтому в Solaris обеспечивается работа с любыми принтерами: установленными локально, предоставляемыми сервером печати или отдельно подключенными к сети. Компьютер под управлением Solaris может как выполнять функции сервера печати, так и быть клиентом печати.
Под сервером печати понимают систему, которая обрабатывает и выполняет запросы на печать, при этом принтер может быть присоединен непосредственно к этой системе или быть подключенным напрямую в локальную сеть. В последнем случае сервер печати выполняет роль "ретранслятора" - принимает задания на печать от других компьютеров, организует очередь печати и отправляет задания из очереди принтеру для выполнения.
Клиент печати - это любая система, которая требует от сервера печати выполнения задания на печать, клиент формирует задание и отправляет его на сервер. Клиентом и сервером печати одновременно может быть один и тот же компьютер. Сервером печати может быть как компьютер, так и отдельное специальное устройство; такие устройства также встраиваются в сетевые принтеры.
В Solaris есть программы, которые непосредственно управляют печатью, обращаясь к принтеру, программы, которые обрабатывают очередь заданий на печать, а также программы, управляющие принтерами (например, устанавливающими новый драйвер принтера в системе).
В этой лекции будут рассмотрены настройки системы печати, а в следующей - графический инструментарий системного администратора.
Для настройки системы печати необходимо выполнить следующие работы:
подключить принтер к серверу печати или к сети;
настроить сервер печати, т.е. научить систему управлять принтером и предоставлять к нему доступ;
настроить клиентов печати так, чтобы они могли обращаться к серверу печати ;
проверить возможность работы с принтером со всех клиентов печати, убедиться в правильности выполнения заданий на печать.
Настройка сервера печати
Сервер печати не предоставляет доступ к принтеру всем подряд - доступ предоставляется на основании строгих правил. Для того чтобы принять решение о предоставлении доступа к принтеру тому или иному компьютеру, сервер печати использует какую-либо службу имен (DNS, NIS, LDAP) для определения имени обращающегося компьютера. Если на сервере печати не используется ни одна из служб имен, следует в файл /etc/inet/hosts внести записи о каждом из компьютеров-клиентов печати.
Сервер печати должен иметь свободное дисковое пространство для хранения очереди заданий на печать, его объем зависит от характера и количества заданий, одновременно отправляемых на печать, и обычно колеблется от 25 до 500 Мбайт. Такая область диска, предназначенная для хранения очереди печати, называется областью буферизации или спулом (spool - System Peripheral Operation OffLine). Помните, что размер файла в формате PS или PCL, подготовленного драйвером принтера для загрузки в принтер, может сильно отличаться от размера исходного файла, например, документа OpenOffice. Это связано с необходимостью загрузки шрифтов, растеризации изображений и т.п.
Рекомендуется, чтобы объем памяти системы под управлением Solaris, которая выполняет роль сервера печати, был не менее 96 Мбайт.
Для того чтобы сервер печати мог обеспечивать доступ к принтеру, следует указать, какие принтеры вообще доступны в системе и какой принтер надлежит использовать по умолчанию. Стало быть, надо иметь список доступных принтеров с указанием их имен и типов. Такой список содержится в файле /etc/printers.conf. Это отличает Solaris от других систем UNIX, поскольку в большинстве из них настройки принтеров хранятся в /etc/printcap. Такого файла в Solaris нет.
Кроме того, для каждого из типов принтеров требуется описание свойств принтера, такое, как указание оптического разрешения печати, кодов загрузки графики и т.п. Эта информация хранится в той же структуре каталогов, где содержится информация об управляющих кодах терминалов - /usr/share/lib/terminfo. В подкаталогах этого каталога в алфавитном порядке собраны файлы, описывающие терминалы и принтеры. Так, описание принтеров HewlettPackard Laser Jet содержится в файле /usr/share/lib/terminfo/h/hplaser. Эти файлы - двоичные, а не текстовые, поэтому их не следует редактировать напрямую. Вместо этого при необходимости модифицировать или добавить новое описание принтера или терминала следует создать исходный (текстовый) файл описания устройства и затем воспользоваться командой tic, которая превращает (компилирует) текстовый файл описания в стандартный двоичный файл, размещая последний в структуре каталогов /usr/share/lib/terminfo.
Формат файла описания принтера приведен в terminfo (4), следовательно, для изучения этой информации надо воспользоваться командой
man terminfo
или
man 4 terminfo
Для обратного превращения двоичного файла описания устройства - терминала или принтера - в исходный текстовый файл описания устройства следует выполнить команду infocmp. Этой команде следует указывать в качестве аргумента имя устройства, а не путь к файлу описания, т.е. правильной командой будет
infocmp hplaser
а не
infocmp /usr/share/lib/terminfo/h/hplaser
Последний вариант останется непонятым: программа infocmp ищет указанный ей файл в стандартной структуре каталогов или там, где указано переменной среды окружения TERMINFO.
Для редактирования настроек системы печати как на сервере печати, так и на клиентах печати следует использовать программы printmgr (/usr/sadm/admin/bin/printmgr) и lpset.
Вместо этого можно также редактировать вручную файл /etc/printers.conf: все равно вышеупомянутые программы вносят изменения именно в этот файл.
Другие настройки локальных принтеров, в частности, физический порт, к которому подключен принтер (например, /dev/lp0), указываются в структуре каталогов /etc/lp/printers, в которой для каждого принтера есть свой подкаталог с настройками. Эти настройки можно редактировать вручную, но удобнее воспользоваться для этого командой lpadmin или программой Solaris Print Manager ( printmgr ).
Например, для того чтобы добавить новый принтер hplj на сервере печати, достаточно выполнить команду lpadmin. Команда lpadmin может выглядеть, например, так:
lpadmin -p hplj -v /dev/lp0
По этой команде в систему добавится локальный принтер с именем hplj. Все обращения к этому принтеру будут выполняться через устройство /dev/lp0 (первый параллельный порт).
Настройка клиента печати
Клиент печати настраивается сходным образом: в файле /etc/printers.conf на клиенте печати будет указано, что принтер по умолчанию находится на компьютере, который выполняет роль сервера печати. В настройках клиента печати не обязательно определять права доступа к удаленному принтеру: это уже сделано в настройках сервера печати. Таким образом, минимальный файл /etc/printers.conf на клиенте печати, чьи задания на печать должны отправляться принтеру hplj на компьютере с именем printserver, будет выглядеть так:
_default | lp:
:use=printserver:
:bsdaddr=printserver,hplj
В этом файле, как видим, указано, что принтером по умолчанию для данного компьютера будет принтер hplj на компьютере printserver. В файле /etc/printers.conf на компьютере printserver должен быть определен принтер hplj, т.е. должно присутствовать описание вида:
hplj:\
:use=/dev/lp0:\
bsdaddr=printserver,hplj,Solaris:
Это описание появляется при добавлении принтера в систему сервера печати. Пример такого добавления с помощью lpadmin показан выше.
Служба печати на сервере печати
Для успешной обработки заданий на печать недостаточно просто указать свойства и имена принтеров. Потребуется еще и обеспечить работу программ, которые формируют задание на печать, отправляют его по месту назначения (к выбранному принтеру ) и обеспечивают успешное выполнение задания.
По пути от приложения, инициирующего печать, до принтера задание на печать должно быть обработано несколькими программами: программой lp (или lpr ) - для постановки в очередь на печать, lpsched - для обработки очереди, возможно, программами inetd и in.lpd - в случае, если задание отправлено на удаленную машину.
Рассмотрим наиболее обычный вариант печати - с клиентской машины командой lp на удаленный принтер, который доступен через компьютер printbox.
Мы распечатываем текстовый файл data.txt с помощью команды
lp -d printbox:hplj data.txt
Команда lpr в Solaris - это символическая ссылка на команду lp, поэтому что вызывать - lpr или lp - безразлично, будет вызвана одна и та же программа. Название lpr сохранено ради совместимости с другими системами UNIX.
Задание на печать формируется командой lp и отправляется на компьютер printbox. Там его должен ждать демон inetd. Как только задание добирается до порта 515 на компьютере printbox, демон inetd на нем запускает программу in.lpd (согласно записи о службе printer в /etc/inetd.conf) и передает ей пришедшее задание. Программа in.lpd помещает задание в область буферизации (/var/spool/lp/*) и сообщает программе lpsched, что ей пришло задание. Дальнейшая обработка задания ложится на службу печати, т.е. на lpsched. Именно эта программа запускает интерфейсную программу принтера, которая уже непосредственно взаимодействует с принтером.
Такая схема, показанная на [рис. 22.1, иллюстрирует взаимодействие клиента и сервера печати при условии, что версия системы клиента печати не ниже Solaris 2.0, а версия системы сервера печати - не ниже Solaris 2.6.]
В случае использования более старых систем Solaris схема взаимодействия будет более сложной - при отправке задания на печать на удаленный принтер будут выполнены следующие действия:
(рис 22.1) Взаимодействие подсистем печати на компьютере - клиенте Solaris 2.6 и сервере печати Solaris 8программа lp положит задание в локальную область буферизации (spool) на клиенте печати и передаст запрос локальному демону lpsched ;
локальный демон lpsched обратится к локальному демону lpNet, который запустит дочерний процесс lpNet, а тот передаст задание на сервер печати ;
на сервере печати демон listen передаст запрос местному демону lpNet, который, в свою очередь, запустит дочерний процесс;
этот дочерний процесс lpNet на сервере печати положит задание в область буферизации на сервере печати и передаст задание lpsched ;
lpsched на сервере печати отправит задание на принтер.
Это иллюстрирует [рис. 22.2.]
Рисунки взяты из Методического пособия компании Sun Microsystems "Системное администрирование ОС Solaris 8, часть 1".
(рис 22.2) Взаимодействие подсистем печати на компьютере - клиенте Solaris 2.0 и сервере печати Solaris 2.5.1Добавление и настройка нового принтера
В моей сети есть принтер HP LJ 5L, который подключен к сети с помощью принт-сервера (маленькой коробочки с интерфейсом Ethernet, обученной работать с протоколом печати BSD). Адрес принт-сервера в сети - 192.168.5.22. Как добавить этот принтер в конфигурацию Solaris, чтобы на нем можно было напрямую печатать файлы?
Во-первых, надо создать запись об этом принтере в файле /etc/inet/hosts или на сервере имен, чтобы система могла обратиться к принтеру по имени:
cat /etc/inet/hosts
#
# Internet host table
#
127.0.0.1 localhost
192.168.5.33 sunny loghost
192.168.5.22 hp5l
Затем следует модифицировать файл /etc/printers.conf:
cat /etc/printers.conf
#
# If you hand edit this file, comments and structure may change.
# The preferred method of modifying this file is through the
# use of lpset(1M)
#
hplj:\
:bsdaddr=hp5l,PS-1426:\
:description=hpjl:
_default:\
:use=hplj:
Самая важная строка в нем - это bsdaddr. В этой строке должно быть указано имя сервера, к которому подключен принтер (в нашем случае это имя той самой коробочки - принт-сервера - hp5l), и логическое имя принтера на этом сервере, т.е. то имя, под которым принтер известен серверу (в нашем случае это PS-1426). Узнать это имя можно либо из документации к сетевому принтеру или принт-серверу, либо выяснить у администратора того компьютера, к которому подключен принтер, либо попробовать выяснить, подсоединившись с помощью telnet к принт-серверу:
telnet hp5l
Trying 192.168.5.22...
Connected to hp5l.
Escape character is '^]'.
***********************************
* Welcome to D-Link Print Server *
* Telnet Console *
***********************************
Server Name : ps-1426
Server Model : DP-101
F/W Version : 1.34
MAC Address : 00 50 BA 03 B6 47
Uptime : 64 days, 04:32:19
Программа Solaris Print Manager
Для настройки подсистемы печати в Solaris можно использовать утилиту Solaris Print Manager. Она предоставляет простой графический интерфейс для добавления, удаления или изменения настроек принтера в системе.
Важно отметить, что с точки зрения Solaris принтер должен уметь работать с языком PostScript. Использовать такой принтер с Solaris, равно как и с любой другой системой UNIX, намного легче, чем принтер, не понимающий PostScript.
Вызов программы Solaris Print Manager выполняется командой
/usr/sadm/admin/bin/printmgr
При запуске Solaris Print Manager вас спросят, какую службу имен следует использовать ([рис. 22.3).]
(рис 22.3) Первый вопрос программы Solaris Print ManagerЭто связано с тем, что при подключении сетевых принтеров требуется определить их имена или имена хостов, к которым они подключены. Для подключения к таким принтерам с помощью Solaris Print Manager следует указать их IP-адреса в файле /etc/inet/hosts, в NIS или DNS.
На [рис. 22.4 представлено главное меню Solaris Print Manager.]
(рис 22.4) Главное меню Solaris Print ManagerПрограмма предоставляет весьма скромный сервис, как видно из [рис. 22.5 и ][рис. 22.6.]

(рис 22.6) Окно "добавить принтер" в Solaris Print Manager(рис 22.5) Окно "изменить свойства принтера" в Solaris Print ManagerУправление принтерами с помощью admintool
В версиях Solaris, более ранних, чем Solaris 8, управление принтерами осуществлялось посредством admintool. В настоящее время с помощью этой программы можно просмотреть свойства установленных в системе принтеров, но использовать ее для модификации этих свойств или добавления новых принтеров не следует. Для этого существует программа Solaris Print Manager, которая позволяет управлять всеми свойствами принтеров, добавлять новые и удалять ненужные принтеры из системы.
Управление принтерами с помощью Solaris Management Console
В настоящее время в Solaris (версия 9) не реализовано управление принтерами с помощью Solaris Management Console. В лекции 26 рассказывается о том, какие задачи можно выполнять в этой программе.
Файлы и каталоги конфигурации подсистемы печати Solaris
Принтер, выбираемый по умолчанию, должен быть поименован в переменных среды окружения LPDEST или PRINTER (проверяются именно в таком порядке), либо в переменной _default в файлах $HOME/.printers, /etc/printers.conf или в карте NIS printers.conf.byname. Если ни в одном из этих источников параметр с именем _default не обнаружится, стало быть, запрос на печать без указания имени принтера не может быть выполнен.
Исполняемые файлы подсистемы печати находятся в /usr/bin (lp, lpstat, cancel), /usr/sbin (lpadmin, lpusers, lpshut). В /usr/share/lib/terminfo содержится база данных принтеров и терминалов, в /usr/lib/lp находятся lpshed, фильтры для обработки файла перед отправкой на печать и некоторые другие полезные программы.
Каталог /etc/lp содержит файлы настроек подсистемы печати, а /var/spool/lp хранит текущие задания на печать и информацию о них.
Файл протокола подсистемы печати - это /var/lp/logs/requests:
...
= hplj-1, uid 0, gid 1, size 5, Срд 05 Май 2004 19:48:34
z hplj
C 1
D hplj
F /export/home/filip/q
P 20
T /export/home/filip/q
t simple
U root
s 0x0040
v 2
= hplj-2, uid 0, gid 1, size 5, Срд 05 Май 2004 19:49:11
z hplj
C 1
D hplj
F /export/home/filip/q
P 20
T /export/home/filip/q
t simple
U root
s 0x0040
v 2
...
Взаимодействие со службами имен
Для того чтобы корректно направить задание на печать к требуемому принтеру, программе lp необходимо знать содержимое файлов /etc/printers.conf и /etc/nsswitch.conf:
cat /etc/printers.conf
...
lp:\
:bsdaddr=printbox,hplj, Solaris:
...
cat /etc/nsswitch.conf
...
printers: dns, nisplus, files
...
Из первого файла lp выясняет, что для печати на принтер с локальным именем lp следует отправить задание принтеру hplj на компьютере printbox. Из второго файла становится ясно, что для того, чтобы найти IP-адрес компьютера printbox, следует воспользоваться службами имен в следующем порядке: обратиться к серверу имен службы DNS (согласно содержимому /etc/resolv.conf); если с помощью DNS найти адрес не удалось, надо обратиться к серверу NIS+, а если и эта попытка оказалась неудачной, посмотреть, нет ли записи о printbox в файле /etc/inet/hosts.
Конечно, такое взаимодействие с сетевыми службами понадобится только при печати на удаленном принтере, так как доступ к локальному принтеру осуществляется без обращения сетевым службам.
Печать документов, просмотр и отмена заданий на печать
Для печати документа можно выбрать в меню функцию Print, если соответствующее меню имеется в задействованном приложении. При работе в командной строке для печати файла дайте команду
lp имя_файла
или
lpr имя_файла
Для просмотра очереди печати используют команду lpq:
bash-2.05# cat >> lptest
lptest
bash-2.05# lp lptest
request id is hplj-2 (1 file)
bash-2.05# lpq
Port Name PS-1426
==============================
[Total Status]
Job 41
Sizes (KBytes) 10546
Timeouts 0
------------------------------
[Current Job]
Printer Status On line
Index 0
Protocol
Name
Spooling Bytes 0
Printing Bytes 0
==============================
Отмена задания выполняется командой lprm:
lp filename
request id is hplj-4 (1 file)
lprm hplj-4
Команда lprm без параметров удаляет текущее (выполняемое) задание на печать.
Все эти команды принимают имя принтера (то, которым принтер назван в /etc/printers.conf или в базе данных NIS) с ключом -Р:
lprm -P hplj
Существует возможность активировать или деактивировать принтер, описанный в /etc/printers.conf. Это делается командами enable и disable соответственно. Более того, можно временно приостановить принятие запросов на печать для определенного принтера командой
reject имя_принтера
и затем восстановить прием заданий командой
accept имя_принтера
В некоторых командных процессорах команды accept, reject, enable и disable могут быть встроенными командами командного процессора, и тогда следует найти команды подсистемы печати, используя find или whereis, а затем запускать их, указывая полное имя команд.