учебники, программирование, основы, введение в,

 

Печать в Solaris

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. Именно эта программа запускает интерфейсную программу принтера, которая уже непосредственно взаимодействует с принтером.
Такая схема, показанная на, иллюстрирует взаимодействие клиента и сервера печати при условии, что версия системы клиента печати не ниже Solaris 2.0, а версия системы сервера печати - не ниже Solaris 2.6.
В случае использования более старых систем Solaris схема взаимодействия будет более сложной - при отправке задания на печать на удаленный принтер будут выполнены следующие действия: программа lp положит задание в локальную область буферизации (spool) на клиенте печати и передаст запрос локальному демону lpsched;
  • локальный демон lpsched обратится к локальному демону lpNet, который запустит дочерний процесс lpNet, а тот передаст задание на сервер печати;
  • на сервере печати демон listen передаст запрос местному демону lpNet, который, в свою очередь, запустит дочерний процесс;
  • этот дочерний процесс lpNet на сервере печати положит задание в область буферизации на сервере печати и передаст задание lpsched;
  • lpsched на сервере печати отправит задание на принтер.

Это иллюстрирует.
Рисунки взяты из Методического пособия компании Sun Microsystems "Системное администрирование ОС Solaris 8, часть 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 вас спросят, какую службу имен следует использовать
Это связано с тем, что при подключении сетевых принтеров требуется определить их имена или имена хостов, к которым они подключены. Для подключения к таким принтерам с помощью Solaris Print Manager следует указать их IP-адреса в файле /etc/inet/hosts, в NIS или DNS.
На представлено главное меню 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, а затем запускать их, указывая полное имя команд.

 

 
На главную | Содержание | < Назад....Вперёд >
С вопросами и предложениями можно обращаться по nicivas@bk.ru. 2013 г.Яндекс.Метрика