Принтеры, установленные на удаленных хостах



Система спулинга LPD имеет встроенную поддержку посылки заданий на другие хосты, на которых тоже работает система LPD (или совместимая с LPD). Это позволяет установить принтер на одном хосте и сделать его доступным с других хостов. Она также работает с принтерами, имеющими сетевые интерфейсы и понимающими протокол LPD.

Для обеспечения такого рода удаленной печати, сначала установите принтер на одном хосте, хосте принтера, с помощью процедуры, описанной в разделе Простая настройка принтера. Выполните любые необходимые дополнительные настройки, как описано в разделе Расширенная настройка принтера. Не забудьте протестировать принтер и убедиться, обеспечивает ли он заданные возможности системы LPD. Также проверьте, что локальный хост имеет право использовать службу LPD на удаленном хосте (см. раздел Ограничение приема заданий с удаленных хостов).

Если вы используете принтер с сетевым интерфейсом, совместимый с системой LPD, упомянутым в обсуждении выше хостом принтера будет сам принтер, а в качестве имени принтера будет выступать имя, которое вы сконфигурировали для принтера. См. документацию, поставляемую с принтером и/или сетевым интерфейсом принтера.

Подсказка: Если вы используете Hewlett Packard Laserjet, то при задании принтеру имени text будет автоматически выполняться преобразование символа LF в последовательность CRLF, так что, сценарий hpif не понадобится.

Затем, на других хостах, для которых вы хотите обеспечить доступ к принтеру, создайте запись в их файлах /etc/printcap со следующими компонентами:

1. Дайте записи любое подходящее имя. Для простоты, однако, имеет смысл задавать такое же имя и псевдонимы, как и на хосте принтера.

2. Характеристику lp оставьте пустой, указав это явно (:lp=:).

3. Создайте каталог спулинга и укажите его местонахождение в характеристике sd. Система LPD будет сохранять задания в нем, прежде чем они будут посланы на хост принтера.

4. Укажите имя хоста принтера в качестве значения характеристики rm.

5. Укажите имя принтера на хосте принтера в качестве значения характеристики rp.

Вот и все. Не нужно перечислять фильтры преобразования, размеры страницы и вообще ничего больше в файле /etc/printcap.

Рассмотрим пример. На хосте rose есть два принтера, bamboo и rattan. Мы позволим пользователям хоста orchid печатать на эти принтеры. Вот файл /etc/printcap для хоста orchid (из раздела Включение выдачи начальных страниц). В нем уже есть запись для принтера teak; мы добавили две записи для принтеров на хосте rose:

#

# /etc/printcap для хоста orchid - добавлены (удаленные) принтеры на rose

#

 

#

# teak - локальный принтер; он подключен непосредственно к orchid:

#

teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\

   :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\

   :if=/usr/local/libexec/ifhp:\

   :vf=/usr/local/libexec/vfhp:\

   :of=/usr/local/libexec/ofhp:

 

#

# rattan подключен к rose; посылать задания для rattan на хост rose:

#

rattan|line|diablo|lp|Diablo 630 Line Printer:\

   :lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan:

 

#

# bamboo тоже подключен к rose:

#

bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\

   :lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:

Затем достаточно только создать каталоги спулинга на orchid:

# mkdir -p /var/spool/lpd/rattan /var/spool/lpd/bamboo

# chmod 770 /var/spool/lpd/rattan /var/spool/lpd/bamboo

# chown daemon:daemon /var/spool/lpd/rattan /var/spool/lpd/bamboo

Теперь пользователи хоста orchid могут печатать на принтеры rattan и bamboo. Если, например, пользователь на orchid выполнит команду

% lpr -P bamboo -d sushi-review.dvi

 система LPD на orchid будет копировать задание в каталог спулинга /var/spool/lpd/bamboo и учтет, что печатается задание DVI. Как только на хосте rose появится место в каталоге спулинга принтера bamboo, две системы LPD передадут файл на хост rose. Файл будет ждать в очереди на rose пока, наконец, не будет напечатан. Он будет преобразован из формата DVI в PostScript (поскольку bamboo является PostScript-принтером) на хосте rose.

Принтеры с сетевыми интерфейсами

Часто при покупке сетевой карты для принтера можно приобрести две версии: эмулирующую спулер (более дорогая версия) или просто позволяющую принимать на принтер данные так, как если бы использовался последовательный или параллельный порт (более дешевая версия). В этом разделе описано, как использовать более дешёвую версию. Использование более дорогой версии описано в предыдущем разделе Принтеры, установленные на удаленных хостах.

Формат файла /etc/printcap позволяет указывать, какой последовательный или параллельный интерфейс использовать, и (при использовании последовательного интерфейса), какую установить скорость, использовать ли управление потоком, размер отступов для табуляций, преобразование символов новой строки и другие параметры. Но нет способа указать подключение к принтеру, прослушивающему TCP/IP или другой сетевой порт.

Для посылки данных на подключенный к сети принтер, надо разработать программу взаимодействия, которую могут вызывать текстовый фильтр и фильтры преобразований. Вот один из примеров: скрипт netprint принимает все данные со стандартного входного потока и посылает их на принтер, подключенный к сети. Мы указываем имя хоста принтера в качестве первого аргумента, а номер порта, к которому надо подключаться — в качестве второго аргумента команды netprint. Учтите, что поддерживается только одностороннее взаимодействие (с ОС FreeBSD на принтер); многие сетевые принтеры поддерживают двустороннее взаимодействие, и вы можете захотеть его использовать (для получения состояния принтера, учета и т.п.).

#!/usr/bin/perl

#

# netprint - Текстовый фильтр для принтера, подключенного к сети

# Установлен в /usr/local/libexec/netprint

#

$#ARGV eq 1 || die "Usage: $0 <printer-hostname> <port-number>";

 

$printer_host = $ARGV[0];

$printer_port = $ARGV[1];

 

require 'sys/socket.ph';

 

($ignore, $ignore, $protocol) = getprotobyname('tcp');

($ignore, $ignore, $ignore, $ignore, $address)

= gethostbyname($printer_host);

 

$sockaddr = pack('S n a4 x8', &AF_INET, $printer_port, $address);

 

socket(PRINTER, &PF_INET, &SOCK_STREAM, $protocol)

|| die "Can't create TCP/IP stream socket: $!";

connect(PRINTER, $sockaddr) || die "Can't contact $printer_host: $!";

while (<STDIN>) { print PRINTER; }

exit 0;

Затем можно использовать этот сценарий в различных фильтрах. Пусть у нас есть строчный принтер Diablo 750-N, подключенный к сети. Принтер принимает данные на печать через порт 5100. Имя хоста для принтера — scrivener. Вот текстовый фильтр для этого принтера:

#!/bin/sh

#

# diablo-if-net - Текстовый фильтр для принтера Diablo `scrivener',

# прослушивающего порт 5100. Установлен в /usr/local/libexec/diablo-if-net

#

exec /usr/libexec/lpr/lpf "$@" | /usr/local/libexec/netprint scrivener 5100


Дата добавления: 2018-10-26; просмотров: 185; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!