[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]

Руководство по принтерам и печати


Изменение атрибута mo виртуального принтера

Любое определение виртуального принтера содержит атрибут mo. Атрибут mo задает команду для вызова программы интерфейса драйвера устройства. Программа интерфейса - это последний процесс конвейера обработки входного потока данных. Для очередей локальной программы буферизации с базовой программой piobe в качестве программы интерфейса применяется программа pioout. Эта программа называется программой интерфейса драйвера устройства, так как в качестве последнего процесса конвейера она открывает драйвер устройства на запись и записывает в него обработанный входной поток данных. Дополнительная информация приведена в разделе Поток данных общих заданий печати.

В программе буферизации базовой операционной системы предусмотрено средство, с помощью которого пользователь root может заменить часть конвейера обработки входного потока данных пользовательским кодом. В данном разделе приведен пример переопределения атрибута mo, для которого значение по умолчанию (полный путь к команде pioout) заменяется на полный путь к пользовательской программе доставки. Дополнительная информация приведена в разделе Краткие сведения о работе базовой программы.

Управление неподдерживаемым сервером терминалов с IP-адресом

Предположим, что у вас есть сервер терминалов, подключенный к сети Ethernet, которому выделен IP-адрес. У сервера терминалов есть определенное число асинхронных портов, к которым могут быть подключены терминалы ASCII, модемы, принтеры или другие асинхронные устройства. Пусть вендор сервера терминалов предоставил вам программу ts_print со следующими характеристиками:

(Очевидно, такая ситуация вполне возможна.)

Рассмотрим конкретный пример. Предположим, что у вас есть принтер IBM 4029 LaserPrinter, который нужно подключить к серверу терминалов через порт 11, а IP-адрес сервера терминалов равен 9.19.129.101. Вам нужно создать на сервере печати очередь, в которую пользователи смогут отправлять задания ASCII для печати на принтере 4029 сервера терминалов. Хотя вы можете выполнить эту задачу с помощью команды ts_print, удобнее воспользоваться фильтрами форматирования, которые могут одновременно управлять режимом работы принтера и входным потоком данных. Кроме того, вам необходимо получить последовательный доступ к принтеру.

Существует несколько способов выполнить эту задачу. Самый простой - создать локальную очередь ASCII не в специальном символьном файле каталога /dev, а в обычном файле. После создания очереди и связанного с ней виртуального принтера можно изменить определение виртуального принтера для применения команды ts_print.

Для создания очереди введите команду быстрого доступа SMIT smit mkquedev. Появится примерно следующее меню:

                       Добавить очередь печати

Поместите курсор на нужный элемент и нажмите Enter. Для
прокрутки воспользуйтесь клавишами перемещения курсора.

# ТИП СОЕДИНЕНИЯ        ОПИСАНИЕ
    local                Принтер, подключенный к локальному хосту
    remote               Принтер, подключенный к удаленному хосту
    ascii                Принтер, подключенный к терминалу ASCII
    hpJetDirect          Сетевой принтер (HP JetDirect)
    file                 Файл (из каталога /dev)
    other                Пользовательская базовая программа

Выберите опцию file, а затем - тип принтера. После того как вы выберете IBM 4029 LaserPrinter (или другое значение), укажите имя файла из каталога /dev. В этот файл будут записываться обработанные задания, запущенные из созданной вами очереди. Можно задать любое имя файла, удовлетворяющее соглашению о присвоении имен базовой операционной системы. Рекомендуется создать файл, который будет применяться только для очередей типа file. Например, пользователь root может выполнить команду touch /dev/lxx, чтобы создать файл lxx в каталоге /dev.

Указав имя файла из каталога /dev, выберите имя очереди для каждого входного потока данных, поддерживаемого указанным ранее принтером. Предположим, что в данном примере для очереди ASCII было выбрано имя asc. В файле /etc/qconfig появится приблизительно следующая запись:

asc:
        device = lxx
lxx:
        file = /dev/lxx
        header = never
        trailer = never
        access = both
        backend = /usr/lib/lpd/piobe

Любое задание печати, запущенное из очереди asc, будет обрабатываться с помощью конвейера, созданного программой piobe. Обработанный поток данных будет записываться в файл /dev/lxx. Это не соответствует вашей цели. Вам нужно, чтобы команда ts_print записывала вывод в порт 11 сервера терминалов, поэтому никакой файл не должен быть связан с очередью. Отредактируйте два новых раздела в файле /etc/qconfig и измените значение параметра file на FALSE, как показано ниже:

asc:
        device = lxx
lxx:
        file = FALSE
        header = never
        trailer = never
        access = both
        backend = /usr/lib/lpd/piobe

Если вы теперь попытаетесь запустить задание из очереди, то вы не сможете просмотреть никакой вывод в файле или где-либо еще, за исключением сообщений об ошибках. Когда процесс qdaemon запускает базовую программу piobe, он передает ей дескриптор открытого файла, указанного в параметре file файла /etc/qconfig. Если значение этого параметра равно FALSE, то дескриптор файла не передается. Конечный получатель дескриптора файла - программа, на которую ссылается атрибут mo. По умолчанию атрибут mo ссылается на программу pioout, поэтому при запуске задания из рассматриваемой очереди у pioout не будет допустимого стандартного вывода, и обрабатываемое задание просто исчезнет.

Теперь, с помощью команды lsvirprt выберите определение виртуального принтера asc для изменения (Просмотр, форматирование и изменение определений виртуальных принтеров). Появится примерно следующее приглашение:

Для просмотра СПИСКА атрибутов введите Имя_атрибута1 ... (* -
для просмотра всех атрибутов)
Для ИЗМЕНЕНИЯ значения атрибута введите Имя_атрибута=Новое_значение
Для ФОРМАТИРОВАНИЯ и РЕДАКТИРОВАНИЯ значения атрибута введите
Имя_атрибута~v
Для РЕДАКТИРОВАНИЯ файла атрибутов введите ~v
Для завершения работы нажмите Enter:

Предположим, что программа ts_print установлена в каталоге /usr/bin. Тогда введите в приглашении:

mo=/usr/bin/ts_print -A 9.19.129.101 -P 11

Задания из очереди asc будут обрабатываться как локальные, но в конце конвейера выходной поток данных будет доставлен программой ts_print на порт 11 сервера терминалов, а не передан программой pioout драйверу устройства.

В общем случае атрибут mo определения виртуального принтера, связанного с очередью с базовой программой piobe, можно переопределить таким образом, чтобы обработанный поток данных доставлялся в любой файл или устройство по выбору пользователя, если он напишет соответствующую программу.


[ Страница назад | Страница вперед | Содержание | Индекс | Библиотека | Юридическая информация | Поиск ]