Администрирование ОС Solaris 9

Печать в 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. Именно эта программа запускает интерфейсную программу принтера, которая уже непосредственно взаимодействует с принтером.

    Такая схема, показанная на рис. 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, а затем запускать их, указывая полное имя команд.

    Вернуться к учебному плану