<gtaylor+pht@picante.com>
, перевод Alex Ott
ott@phtd.tpu.edu.ru
Примечание переводчика: Шлите мне любые комментарии и замечания, даже небольшие.
Printing HOWTO должно содержать все, что вам необходимо знать, чтобы помочь вам настроить сервисы печати на вашей Linux-системе. Как и жизнь, это немного сложнее чем мир "укажи и нажми" (the point-and-click) систем Microsoft и Apple, но это также является более гибкой вещью и определенно более легкой для администрирования в больших сетях (LANs).
Этот документ организован так, что большинству людей будет необходимо прочитать только первую его половину. Большинство малоизвестной и ситуационо-зависимой информации расположено во второй половине документа и может быть легко найдено по содержанию, в то время как большинство информации в разделах 8 и 9 вероятно необходимо большому количеству людей.
Начиная с версии 3.x документ полностью переписан и много информации из предыдущих версий утеряно. Это сделано с умыслом, так как предыдущие версии были настолько велики, что занимали 60 печатных страниц. Если вы не нашли здесь нужных ответов, вы можете: a) посмотреть предыдущую версию документа по адресу Домашняя страница Printing HOWTO b) послать мне замечание сообщающее о том, чему следовало здесь быть, но чего нет.
Домашняя страница Printing HOWTO хорошее место, где можно
найти последние версии документа; он также распространяется с MetaLab
(metalab.unc.edu
) и локальных зеркал LDP.
Это четвертое поколение Printing HOWTO (PHT). Хронологически история PHT может быть поделена следующим образом:
<B.A.McCauley@bham.ac.uk>
; мы продолжали быть соавторами
PHT примерно два года. В тоже время мы включили работу Karl Auer
<Karl.Auer@anu.edu.au>
. Эта редакция PHT была в формате
TeXinfo, и доступна в форматах PS, HTML, Ascii, и Info.
Авторскими правами на этот документ владеет Grant Taylor (c) 1992-1999. Свободно копируйте и распространяйте этот документ согласно терминам GNU General Public License, версии 2 или более поздней.
Вы в действительности используете для печати разные команды в зависимости от того, какое программное обеспечение для буферизации вы используете.
Большинство систем в настоящее время продаются с lpd, так что данный раздел не будет к ним применяться. Я рекомендую людям для большинства случаев установить и использовать PDQ вместо (или в добавление к) lpd. PDQ просто имеет лучшую поддержку принтеров и тому подобное.
При использовании PDQ, вместо команды lpr, вы будете использовать команду pdq или xpdq. Обе они подобны традиционной команде lpr в том, что они будут печатать либо указанные файлы, либо данные со стандартного ввода, если файл не указан.
Xpdq это приложение для X Windows, которое показывает список доступных принтеров и сводные данные об очереди печати (включая текущие и старые задания). Существуют два пункта в меню File, один для печати указанного файла, второй для печати данных со стандартного ввода. Вы можете установить настройки вашего драйвера принтера используя диалог Driver Options; обычно можно установить параметры двунаправленного соединения, плотность печати, размер и тип бумаги, и т.п.
Командно-строковая версия программа для системы PDQ
называется просто pdq. Она может использоваться вместо команды
lpr в большинстве случаев; она понимает аргумент -P
для
указания принтера. Подобно lpr, она печатает либо перечисленные
файлы, либо данные со стандартного ввода.
Настройки принтера могут контролироваться ключами -o
и -a
.
Если вы уже настроили lpd для печати на вашем принтере, или ваш системный администратор уже сделал это, или ваш поставщик сделал это для вас, то все что вам необходимо -- это научиться как использовать команду lpr. Printing Usage HOWTO делает обзор этого и вы должны знать еще несколько других команд манипуляции очередью печати. Или просто прочитайте справочную страницу lpr(1).
Однако если у вас новая машина или новый принтер, вам необходимо будет настроить сервисы печати одним или другим способом до того как вы сможете печатать. Читайте!
Существует два полностью отличающихся драйвера устройства для
параллельного порта; что вы используете, зависит от версии ядра
(которую вы можете узнать с помощью команды uname
-a
). Драйвер изменен в Linux версии 2.1.33.
Несколько деталей одинаковы для обоих типов драйвера. Скорее всего, много людей обнаружат, что Linux не обнаруживает параллельного порта, до тех пор пока они не запретят "Plug and Play" в их PC BIOS. (это не является сюрпризом; отслеживание данных о PnP не-PCI устройствах в Windows и где-нибудь еще могут быть чем-то вроде бедствия).
Ядро Linux (<=2.1.32), предполагает, что вы вкомпилировали в
ядро или загрузили модуль устройства lp (вывод команды cat
/proc/devices
должен включать устройство lp, если оно
загружено), обеспечивая одно или больше устройств:
/dev/lp0, /dev/lp1, и /dev/lp2. Они не
присваиваются динамически, каждое соответствует специфическому
адресу ввода/вывода вашего оборудования. Это означает, что ваш
первый принтер может быть lp0 или lp1 в зависимости от
вашего оборудования. Просто попробуйте оба.
Некоторые пользователи сообщили, что их двунаправленные lp порты не определяются, если они использовали старые однонаправленные кабеля. Проверьте, что вы используете нужный кабель.
Некоторые люди не могут запустить драйвера plip и lp в одно и тоже время на любом заданном порту (в любом случае под 2.0). Однако вы можете загрузить тот или иной драйвер вручную или с помощью kerneld для версий 2.x (и позже 1.3.x) в заданное время. При правильной установке прерываний и подобных вещей, вы по идее можете запустить plip на одном порту, а lp на другом. Некоторые люди делали это редактированием исходного текста драйверов; я с нетерпением ожидаю сообщение о том, что кто-то сделал это только с помощью правильной командной строки.
Существует маленькая утилита, названная
tunelp
, предназначенная для того, чтобы вы, как
администратор, могли настроить для устройств lp Linux 2.0
используемые прерывания, скорость опроса и прочие опции.
Если драйвер встроен в ядро, то ядро может воспринимать опцию
lp=
для установки прерываний и адресов ввода/вывода:
Когда драйвер lp встроен в ядро, вы можете использовать командную
строку LILO/LOADLIN для установки адресов портов и прерываний,
которые будет использовать драйвер.
Синтаксис: lp=port0[,irq0[,port1[,irq1[,port2[,irq2]]]]]
Например: lp=0x378,0 or lp=0x278,5,0x378,7 **
Заметим, что если вы используете это свойство, вы должны указать
*все* порты, которые вы хотите учитывать, значений по умолчанию не
существует. Вы можете запретить встроенные драйвер с помощью опции
lp=0.
Когда драйвер загружен как модуль, то возможно указать адреса
ввода/вывода и прерывания в командной строке программы insmod (или
в файле /etc/conf.modules, при использовании kerneld)
используя обычный синтаксис. Параметры следующие:
io=port0,port1,port2
и irq=irq0,irq1,irq2
. Прочитайте
справочную страницу для команды
insmod для более детальной информации об этом.
**Для тех из вас, кто (подобно мне) никогда не может найти номера стандартных портов когда это нужно, я привел два примера выше. Номер другого порта (для lp0) равен 0x3bc. У меня нет никаких идей о том какое прерывание обычно используется.
Исходный код для драйвера параллельного порта Linux 2.0 находится в файле /usr/src/linux/drivers/char/lp.c.
Начиная с ядра 2.1.33 (и доступно как заплатка к ядру 2.0.30), устройство lp является просто клиентом нового устройства parport. Добавление устройства parport исправляет некоторое количество проблем, которые были из-за старого устройства lp - оно может разделять порты с другими устройствами, оно динамически присваивает доступные параллельные порты номерам устройств, вместо использования фиксированных соотношений между адресами ввода/вывода и номером порта, и так далее.
Введение устройства parport позволило создать целую группу новых драйверов параллельного порта для устройств подобных дискам Zip, Backpack CD-ROM и дискам, и так далее. Некоторые из них доступны в ядрах версии 2.0; посмотрите в интернете.
Главное отличие, которое вы отметите, в том, что ядра, основанные на parport динамически присваивают устройства lp для параллельных портов. Так что, то что было lp1 в Linux 2.0 может оказаться lp0 в Linux 2.2. Убедитесь, что вы проверили это если вы делаете обновление с ядра, работающего с драйвером lp на ядро с драйвером parport.
Кажется, что основные проблемы с этим устройством проистекают от неправильной его настройки:
Некоторые дистрибутивы Linux продаются с неправильно настроенными /etc/modules.conf (или /etc/conf.modules), так что драйвер не загружается когда вам это нужно. При использовании недавних версий modutils, правильные строки в modules.conf должны выглядеть так:
alias /dev/printers lp # only for devfs? alias /dev/lp* lp # only for devfs? alias parport_lowlevel parport_pc # missing in Red Hat 6.0-6.1
Много BIOS для персональных компьютеров представляют параллельный порт как устройство Plug-and-Play. Это только добавляет ненужную сложность к великолепному простому устройству, которое почти всегда присутствует; отключите PnP настройки для вашего параллельного порта (который называется "LPT1" во многих BIOSах) в том случае если ваш параллельный порт не определяется драйвером Linux. Правильные настройки часто называются "legacy", "ISA", или "0x378", но скорее всего не "disabled".
Вы также можете прочитать файл Documentation/parport.txt в исходных текстах ядра, или посмотреть на сервере parport.
Последовательные устройства под Linux называются подобно
/dev/ttyS1. Утилита
stty
позволит вам интерактивно просмотреть или
установить параметры последовательного порта
setserial
позволит вам контролировать некоторые расширенные атрибуты и
настроить IRQ и адреса ввода/вывода для нестандартных
портов. Дополнительные обсуждения последовательных портов в Linux
вы можете найти в
Serial-HOWTO.
При использовании медленных последовательных принтеров с
контролем потока, вы можете обнаружить, что некоторые из ваших
заданий оборваны. Это может быть из-за последовательного порта, чье
действие по умолчанию -- удалить любые не переданные символы
из своего буфера через 30 секунд после того как устройство
закрыто. Буфер может содержать до 4096 символов, и если ваш принтер
использует контроль потока и медлен настолько, что не может принять
все данные из буфера за 30 секунд после того как программа печати
закрыла последовательный порт, то конец содержимого буфера будет
потерян. Если команда cat file > /dev/ttyS2
делает
полный печатный вывод для коротких файлов, но обрезает длинные
файлы, то у вас может быть такая проблема.
30-ти секундный интервал может быть выровнен с помощью опции "closing_wait" командной строки программы setserial (версии 2.12 и поздних). Последовательные порты машины обычно инициализируются вызовом setserial в загрузочном файле rc.serial. Вызов для последовательного порта принтера может быть модифицирован для установки параметра closing_wait вместе с установкой других параметров.
Ядро Linux в основном поддерживает любой принтер, который вы можете подключить к последовательному или параллельному порту, но существуют такие принтера, которые вы не можете использовать, даже если они могут быть подключены к машине и общаться (на электрическом уровне) с Linux. Основными среди этих несовместимых принтеров являются принтера, на которые ссылаются как на принтера "Windows" или "GDI". Они так называются, потому-что часть или есть язык управления принтером и детали проектирования механизма печати не документированы. Обычно производитель предоставляет драйвер для Windows и спокойно продает принтера только для пользователей Windows; Это почему они называются Winprinters. В некоторых случаях производитель также предоставляет драйвера для NT, OS/2, или других операционных систем.
Многие из этих принтеров не работают с Linux. Некоторые из них работают, и некоторые из них работают чуть-чуть (обычно потому-что кто-то сделал исследование деталей, необходимых для написания драйвера). Смотрите список поддерживаемых принтеров, приведенный ниже, для подробностей о нужном принтере.
Некоторые принтера находятся в промежутке между крайностями. Некоторые модели NEC, например, реализуют простую форму стандартного языка принтера PCL, что позволяет работающему с PCL программному обеспечению печатать на них до разрешения 300dpi, но только NEC знает как получить разрешение 600dpi на этих принтерах.
Заметим, что если вы уже имеете один из таких Winprinters, то существует окольный путь, чтобы заставить печать Linux на них, но он достаточно неудобный и я никогда не пробовал применять сам. Смотрите раздел 12 этого документа, для более детального обсуждения принтеров, работающих только с Windows.
Среди принтеров, которые работают с Linux, лучшим выбором является покупка принтера со встроенной поддержкой PostScript. Почти все программное обеспечение в Unix, которое производит печатный вывод делает это в формате PostScript, так что очевидно будет хорошо иметь принтер, который сразу поддерживает PostScript. К сожалению поддержка PostScript является редкой за пределами области лазерных принтеров.
Программное обеспечение для Unix, и индустрия печати в общем, стандартизировали Postscript как язык управления принтером. Это случилось по нескольким причинам:
Postscript возник как часть Apple Laserwriter, великолепного компаньона для компьютеров Macintosh и принтера наилучшим способом отвечающим революции настольных издательских систем в 80-х годах.
Программы на Postscript могут быть запущены для создания вывода на растровые и векторные дисплеи, на на fax-машины, или почти на любой тип принтеров без необходимости изменения исходной программы. Изображение в Postscript будет одним и тем же на любом устройстве postscript, по крайней мере в пределах обеспечиваемых свойствами принтера. До создания формата PDF, люди обменивались сложными документами в виде файлов Postscript. Единственная причина того, что стандарт не прижился, заключается в том, что машины с Windows обычно не включали средства просмотра Postscript, так что Adobe специфицировала гиперсвязи и сжатие для формата Postscript, назвала резальтат PDF, и распространяет средства просмотра для этого формата, и создала рынок для своих утилит "distiller". (функциональность которых также обеспечиваются программами ps2pdf и pdf2ps из пакета ghostscript).
Postscript это полномасштабный язык программирования; вы можете писать на нем программное обеспечение почти для любых дел. Это в основном полезно для определения подпрограмм в начале вашей программы для повторения сложных вещей во всем вашем документе, таких как знак логотипа или слова "DRAFT", написанного большими буквами в качестве фона для страницы.
Postscript полностью специфицирован в общедоступной серии книг (которые вы можете найти в любом хорошем книжном магазине). Хотя Adobe изобрела его и обеспечивает доминирующую коммерческую реализацию этого языка, другие производители, такие как Aladdin также производят независимую реализацию Postscript.
При недостатке бюджета, необходимого чтобы купить PostScript принтер, вы можете использовать любой принтер поддерживаемый программой Ghostscript, свободным интерпретатором PostScript используемый вместо настоящей поддержки PostScript принтером. Заметим, что большинство дистрибутивов Linux могут продаваться с устаревшей версией Ghostscript из-за применяемой лицензии. К счастью обычно существуют пакеты с новыми версиями Ghostscript в разделе contrib каждого дистрибутива. Пожалуйста помогите улучшить страницу поддержки принтеров Ghostscript, посылая сообщения о ваших успехах и неудачах.
В настоящее время Adobe имеет новый язык для принтеров называемый "PrintGear". Я думаю, что это сильно упрощает язык в двоичном формате с некоторыми свойствами PostScript, но без совместимости с PostScript. И я не слышал, что Ghostscript поддерживает его. Но некоторые принтера с PrintGear могут поддерживать другие языки, подобные PCL, и эти принтера будут работать с Linux.(если в принтере реализован PCL, а не в драйвере Windows).
Если вы хотите купить принтер, то вы можете посмотреть в нескольких местах информацию о том, будет ли он работать. Назначение базы данных принтеров Printing HOWTO --- быть полным списком состояния поддержки принтера в Linux. Краткое содержимое этой базы приведено ниже; убедитесь, что вы проверили интерактивную версию базы данных для дополнительной информации о принтере и информации о том, какой драйвер необходимо использовать.
Страница совместимости с принтерами Ghostscript содержит список некоторых работающих принтеров, так же как и ссылки на другие страницы.
Dejanews содержит сотни сообщений типа "это работает" и "это не работает". Попробуйте все деревья сообщений, и если ничего не получилось, то проверьте, что ваш принтер содержится и правильно описан в базе данных, так что он будет правильно перечислен в этом документе в следующих версиях.
Этот раздел является обобщением интерактивной версии. Интерактивная версия включает основные спецификации, замечания, ссылки на информацию о драйверах, сопровождаемую пользователем информацию, ссылки на сервера производителя и тому подобное. Интерактивная версия этого списка также позволяет пользователям добавлять принтера, так что будьте уверены, что проверили ее. В конце концов, если принтер не перечислен в списке, то добавьте его!
Заметьте, что это список не является евангелием; люди иногда добавляют неправильную информацию, которую я в конце концов удалю. Записи, которые я не проверил отмечены знаком звездочки (*). До покупки принтера проверьте через Dejanews, что принтер работает у некоторых людей. Если вы не смогли найти информацию на Dejanews, то напишите мне, и я свяжу вас человеком, который добавил информацию о принтере.
Принтера разделены на три типа:
Отличные принтера и работают отлично -- вы можете использовать все возможности принтера, включая цвет, полное разрешение и т.п. В некоторых случаях принтера с недокументированными "увеличениями разрешения", которые не работают, все равно перечислены как отличные; в основном различие в качестве печати достаточно слабое, так что вы можете не беспокоится об этом.
Вы можете нормально печатать, но существуют небольшие ограничения, того или иного сорта либо в печати, либо в других свойствах.
Вы можете печатать, но может быть не в цвете, или только с низким разрешением. Смотрите колонку примечаний списка для информации о характере ограничений.
Вы не можете печатать; обычно это происходит из-за отсутствия драйвера и/или документации о том, как его написать.
В любом случае, поскольку эта информация предоставлена массой людей, никто не гарантирует, что она правильная; в частности такими полагаются записи со знаком звездочки (*). Однако, информация может быть легко подтверждена поиском информации на страницах о драйверах принтера и серверах производителя.
И без лишней суеты, вот список совместимости принтеров:
MD-1000, MD-1300, MD-2000, MD-4000, MD-5000.
Dot Matrix, ImageWriter*, ImageWriter LQ, LaserWriter 16/600, LaserWriter IINTX*, LaserWriter Select 360.
12/640ps, LaserWriter NT, StyleWriter 2500.
Personal Label Printer+.
Personal Label Printer.
HL-1070, HL-10V, HL-10h, HL-1260, HL-2060, HL-4Ve, HL-630*, HL-720*, HL-720*, HL-730, HL-760, HL-8*, HL-820.
HJ-400, HL-1040, HL-1050, HL-1060, HL-1240*, HL-1250, MFC 6550MC, MFC4350*.
MC-3000, MFC 7150C, MFC8300*.
HL-1030, MP-21C.
M8510.
Artisan 1023 penplotter*.
BJ-10e, BJ-20, BJ-200, BJ-330, BJ-5, BJC-210, BJC-250, BJC-4000, BJC-4100, BJC-4200, BJC-4300, BJC-4400, BJC-600, BJC-610, BJC-620*, BJC-70, BJC-800, GP335/405*, LBP-1260*, LBP-1760, LBP-4+*, LBP-4U*, LBP-8A1*, LIPS III*, LIPS-III*, bjc5000*.
BJ-300*, BJC-1000, BJC-2000, BJC-210SP*, BJC-240, BJC-4310SP*, BJC-7004*, BJC-80, LBP-4sx*.
BJC-4550*, BJC-6000, BJC-7000*, BJC-7100*, MultiPASS C2500*, MultiPASS C3500*, MultiPASS C5000*, Multipass C3000*, Multipass C5500*.
BJC-5000, BJC-5100, LBP-430, LBP-460*, LBP-660*, Multipass L6000*.
ProJet II*, ProJet IIc*.
printiva600C*.
DECWriter 500i*, DECwriter 110i*, DECwriter 520ic*, LA50*, LA75*, LA75 Plus*, LN03*, LN07*.
LJ250*, LN17.
1800*.
ASCII 250*, ASCII+*, EL40*, EL60*, LabelWriter II*, LabelWriter XL*, LabelWriter XL+*, SE250*, SE250+*, Turbo*.
9 Pin Printers high-res*, 9 Pin Printers med-res*, AP3250*, ActionLaser 1100*, LP 8000*, LQ 850*, LQ-24*, LQ-2550*, LQ-500*, LQ-570+*, LX-1050*, SQ 1170*, Stylus Color*, Stylus Color 1520, Stylus Color 400*, Stylus Color 440, Stylus Color 460*, Stylus Color 500*, Stylus Color 600*, Stylus Color 640*, Stylus Color 800*, Stylus Color 850*, Stylus Color I*, Stylus Color II*, Stylus Color IIs*, Stylus Color PRO*, Stylus Pro XL*.
EPL 5700*, Stylus 300*, Stylus Color 3000*, Stylus Color 660, Stylus Color 740*.
Stylus Color 300*, Stylus Color 900*, Stylus Photo 700*, Stylus Photo 750*, Stylus Photo EX*.
1200*, 2400*, 3400*, PrintPartner 10V*, PrintPartner 16DV*, PrintPartner 20W*, PrintPartner 8000*.
2000C*, 2500C, Color LaserJet 4500, DeskJet 1200C, DeskJet 1200C/PS, DeskJet 1600C, DeskJet 1600Cm, DeskJet 400, DeskJet 420C, DeskJet 500, DeskJet 500C*, DeskJet 510*, DeskJet 520*, DeskJet 540*, DeskJet 550C*, DeskJet 560C*, DeskJet 600*, DeskJet 610C*, DeskJet 610CL*, DeskJet 612C*, DeskJet 660C*, DeskJet 670C*, DeskJet 672C*, DeskJet 682C*, DeskJet 690C*, DeskJet 692C*, DeskJet 694C*, DeskJet 697C*, DeskJet 812C*, DeskJet 850C, DeskJet 855C*, DeskJet 890C, HP LaserJet 2P Plus*, LaserJet*, LaserJet 1100*, LaserJet 1100A*, LaserJet 2 w/PS*, LaserJet 2100M*, LaserJet 2D*, LaserJet 2P*, LaserJet 3*, LaserJet 3D*, LaserJet 3P w/PS*, LaserJet 4 Plus*, LaserJet 4050N*, LaserJet 4L*, LaserJet 4M*, LaserJet 4ML*, LaserJet 4P*, LaserJet 5*, LaserJet 5000*, LaserJet 5L*, LaserJet 5M*, LaserJet 5MP*, LaserJet 5P*, LaserJet 6*, LaserJet 6MP*, LaserJet 8000*, LaserJet 8100*, LaserJet Plus*, Mopier 320*, PaintJet*, PaintJet XL*, PaintJet XL300*.
DesignJet 650C*, Designjet 750 C Plus*, DeskJet 1100C*, DeskJet 1120C*, DeskJet 310, DeskJet 810C, DeskJet 832C*, DeskJet 870C*, DeskJet 880C*, DeskJet 882C, DeskJet 895C*, DeskJet 895Cxi*, DeskJet 970C*, DeskJet 970Cse, LaserJet 2*, LaserJet 2100*, LaserJet 6P*, OfficeJet Pro 1170Cse*.
Color LaserJet 5000, DeskJet 1000C*, DeskJet 710C*, DeskJet 712C*, DeskJet 720C*, DeskJet 722C*, DeskJet 820C*, LaserJet 6L*, OfficeJet 500*, OfficeJet 600*, OfficeJet 625*, OfficeJet Pro 1175C*, PhotoSmart P1100*.
LaserJet 3100*.
3853 JetPrinter*, 4019*, 4029 10P*, 4303 Network Color Printer*, Page Printer 3112*, ProPrinterII*.
ImPress*.
F-3300*, FS-1700+*, FS-3750*, FS-600*, FS-800*, P-2000*.
FS-3500*.
4039 10plus*, Optra Color 1200*, Optra Color 1275*, Optra Color 40, Optra Color 45, Optra E*, Optra E+*, Optra E310*, Optra Ep*, Optra K 1220*, Optra R+*, Optra S 1250*, Optra S 1855*, Valuewriter 300*.
1000, 1100*, 2070*, 3000*, 5000*, 5700, 7000*, 7200*.
1020 Business*, 2030*, Winwriter 400*, Z51*.
1020*, 2050*, 3200*, Winwriter 100*, Winwriter 150c*, Winwriter 200*, Z11*.
PagePro 6*, PagePro 6e*, PagePro 6ex*, PagePro 8*.
PagePro 8L*.
CP50 Color Printer*.
P2X*, PinWriter P6*, PinWriter P6 plus*, PinWriter P60*, PinWriter P7*, PinWriter P7 plus*, PinWriter P70*, SilentWriter LC 890*, Silentwriter2 S60P*, Silentwriter2 model 290*, SuperScript 660i*.
Silentwriter 95f*.
SuperScript 100C*, SuperScript 1260*, SuperScript 150C*, SuperScript 650C*, SuperScript 750C*, SuperScript 860*, SuperScript 870.
SuperScript 610plus*, SuperScript 660*, SuperScript 660plus*.
3165*.
OL 410e, OL 600e, OL 610e/PS, OL 800, OL 810e/PS, OL400ex, OL810ex, OL830Plus, Okipage 10e, Okipage 12i, Okipage 20DXn, Okipage 6e, Okipage 6ex, Okipage 8c, Okipage 8p.
Microline 182, OL 400w, OL 610e/S, OkiPage 4w+*, Okipage 4w, Super 6e.
Microline 192+, Okipage 6w.
Okijet 2010, Okijet 2500, Okipage 8w*.
JP350S*, JP450*, PG 306*.
1030*.
KX-P1123*, KX-P1124*, KX-P1150*, KX-P1180i*, KX-P2023*, KX-P2135*, KX-P2150*, KX-P4410, KX-P4450*, KX-P5400*, KX-P8420*, KX-P8475*, kx-p1624*.
KX-P2123*, KX-P6150*.
KX-P6500*.
KX-P6100*, KX-P6300 GDI*, KX-P8410*.
820 DL*.
2425 Turbo EX*, magicolour 2*.
ps-810*.
4081*, 4801*, 6000*, Aficio AP2000*.
Aficio 401*.
Aficio Color 2206*, Afico FX10*.
ML-5000a*, ML-6000/6100*, ML-7000/7000P/7000N*, ML-7050*, ML-85*, QL-5100A*.
ML-5050G*.
ML-85G*, SF/MSYS/MJ-4700/4800/4500C*.
SpeedJET 200*.
SLP*, SLP 120*, SLP 220*, SLP EZ30*, SLP Plus*, SLP Pro*.
AR-161*.
LC24-100*, NL-10*.
LC 90*, LC24-200*, StarJet 48*.
WinType 4000*.
MT908*.
3693d color printer, 8-bit mode*, 4693d color printer, 2-bit mode*, 4693d color printer, 4-bit mode*, 4695*, 4696*, 4697*, Phaser 780*, Phaser IISX*, Phaser PX*.
2700 XES, 3700 XES, 4045 XES, DocuPrint 4508, DocuPrint C55, DocuPrint N17, DocuPrint N32.
DocuPrint P12, DocuPrint P8e, XJ6C*.
Document Homecentre, WorkCentre 450cp*, XJ8C*.
DocuPrint P8, WorkCentre 470cx*, WorkCentre XD120f*, WorkCentre XE80.
* Эти модели не были проверены мной.
В наши дни немного трудно выбрать принтер; производится много моделей, среди которых необходимо сделать выбор. Вот небольшой список советов по выбору:
Вы получите то, за что вы заплатили. Большинство принтеров в пределах $200-300 будут печатать достаточно хорошо, но стоимость печатной страницы будет выше. Для некоторых принтеров поставляют только один или два картриджа к стоимости нового принтера! Аналогично дешевые принтера не будут сохраняться очень долго. По меньшей мере дорогие принтера имеют значение MTBF (Cреднее время наработки на отказ) равное примерно трем месяцам.
Головки для струйных принтеров со временем станут непоправимым препятствием, так что возможность сменить головку иногда будет свойством. Печатающие головки для струйных принтеров очень дороги, интегрированный картридж с печатающей головкой и чернилами, стоит в 10 раз дороже простого картриджа с чернилами, так что возможность замены головки только когда это необходимо также хорошее свойство. Принтера Epson Stylus имеют тенденцию к наличию фиксированной головки, а принтера HP DeskJets стремяться иметь головки интегрированные в картридж. Canons имеют картриджы стороних производителей с независимо заменяемыми банками с чернилами; мне нравится такой дизайн. OTOH, картриджи HP не являются ненормально дорогими, и HP создал более полную линую продуктов; Canon часто предлагает решения с точки зрения качества печати. Вы не можете выиграть.
Лазерные принтера расходуют барабаны и тонер. Самые дешевые модели включают вместе тонер и барабан в один большой картридж; эти решения стоят дороже. Лучшим решением для больших объемов является отдельный тонер в виде порошка или по крайней мере отдельные картриджи для тонера и барабана.
Наилучшее фотографическое качество получается термических принтеров подобных серии Alps (термический перенос сухих чернил или сублимация краски). Некоторые из моделей Alps доступны по средствам, но у них плохая поддержка Linux (кто-то говорил мне о картинках с полосами и большой зернистостью). Специализированные струйные принтера обычно используют 6 цветную CMYKcm печать или даже 7 цветный процесс CMYKcmy; только модели с поддержкой Postscript работают с Linux, поскольку Ghostscript не поддерживает 6- и 7-цветную печать. Хотя чтобы получить хороший вывод в CMYK очень просто. Все принтера для фото-печати дороги для работы; либо вы всегда заменяете весь картридж или перезаполняете отдельные цвета для вашего великолепного принтера. Специальная бумага также стоит дорого. Смотрите также раздел о печати фотографии в конце документа, а также раздел о настройке цветов в Ghostscript.
Скорость пропрорциональны мощности обработки, загрузке и общей стоимости принтера. Самыми быстрыми принтерами будут сетевые postscript принтера, с мощными встроенными процессорами. Принтаре потребительского разряда будут частично зависеть от скорости работы Ghostscript, которую вы можете увеличить имея мощную машину; полная страница в цвете может занять большое количество памяти сервера.
Если вы хотите печатать формы с множеством копий, то вам нужен ударный принтер; много компаний до сих пор выпускают матричные принтера, большинство из которых эмулирует традиционные модели Epson и работают великолепно.
Существует два типа принтеров для наклеек; посмотрите на модели Dymo-Costar и Seiko SLP. Другие модели могу работать, а могут и не работать. Каждая из моделей может делать наклейки разного размера на формате 8.5x11, который вы прогоняете через обычный принтер.
Большие форматы в настоящее время поддерживаются огромными струйными принтерами; одной из популярных марок являетсяHP. Струйные принтера среднего размера (11x17) часто используются для печати меньших форматов. Большинство плоттеров этого рода обычно работают с языками RTL, HP-GL, и HP-GL/2, которые все являются патентованными векторными языками HP, вывод данных на которых генерируется прикладным программным обеспечением.
Я владею HP Deskjet 500 и Lexmark Optra 40. Оба принтера работают великолепно: Deskjet является старой черно-белой моделью, хорошо поддерживаемой Ghostscript; а Optra является более современным цветным струйным принтером с полной поддержкой Postscript и PCL 5 (!).
У меня также есть сервер печати Hawking Technology 10/100 Ethernet (модель 7117, в действительности выпущенная Zero One Technologies на Taiwan); это делает возможным поместить принтер в любом месте с подключением к сети и питанию, вместо того, чтобы размещать его рядом с компьютером. Это маленькая заглушка, которая присоединяется к параллельному порту компьютера и имеет Ethernet разъем на другой стороне. Его недостаток заключается в том, что он не поддерживает двустороннее сообщение, так что я не мог приспособить его для того, чтобы он посылал сообщение по электронной почте когда заканчиваются чернила.
До недавнего времени выбор для пользователей Linux был очень прост -- каждый запускал тот же самый старый lpd, который был почти дословно перенесен из кода BSD Net-2. Даже сегодня большинство продавцов продает это программное обеспечение. Но ситуация начинает меняться. Системы подобные SVR4, включая Sun Solaris, идут с полностью отличающимся пакетом печати, сконцентрированным вокруг lpsched.
В настоящее время я рекомендую систему PDQ и для простых пользователей домашних компьютеров и для (используя сочетание pdq/lpd) людей, работающих в более крупных средах. Она обеспечивает самый простой и самый гибкий механизм настройки и великолепные пользовательские утилиты (конечно только те, которые обеспечивают общую настройку принтера по функциональности равны диалогу настройки принтера в Windows).
PDQ это система печати без центрального демона, которая имеет встроенный, разумный синтаксис настройки драйвера. Она включает возможность объявления настроек печати, а также графическую и командно-строковые утилиты для того, чтобы пользователи могли использовать эти настройки; пользователям предоставляется великолепное диалоговое окно, в котором указывается плотность печати, тип бумаги, и т.п.
Запуск всех этих фильтров пользователем имеет несколько преимуществ: нет большинства проблем безопасности при использовании Postscript, много файловые задания LaTeX могут печататься очень эффективно в виде dvi-файлов и т.п.
Это то, что я использую сейчас; я написал спецификация для моих принтеров, и также есть несколько включенных в дистрибутив пакета, так что вам будет хватать примеров, для начала. Я также написал несколько утилит для автоматической генерации спецификаций драйверов, для того чтобы помочь вам. you.
Если у вас много пользователей, много принтеров или какая-нибудь сложная система, то я вам рекомендую использовать PDQ как надстройку над сетевой печатью на базе протокола LPD (вы можете печатать через протокол на локальную машину). Во многих таки ситуациях вместо использования BSD lpd как базы я рекомендую использовать LPRng:
Есть данные, что некоторые поставщики Linux будут обеспечивать поддержку LPRng, как менее древней системы буферизации печати, которая более менее свободно доступна. LPRng более легка для администрирования больших организаций (читайте так: более одного принтера, любые последовательные принтера, или любые специфические не-lpd сетевые принтера) и менее страшная основа, чем предоставляет lpd. Она даже претендует на то, что система является безопасной -- нет исполняемых файлов с битом SUID, и она поддерживает аутентификацию через PGP или Kerberos.
LPRng также включает некоторые примеры настроек для типовых сетевых принтеров - в основном HP LaserJets, которые имеют некоторые возможности учета ресурсов. Если вы хотите получить больше информации о LPRng, то посмотрите страницу LPRng.
LPRng распространяется либо под GPL либо под Artistic license. (Раньше это было не так).
PPR это система буферизации печати, ориентированная на Postscript, который включает возможность разбора Postscript (еще в зачаточном состоянии) из-за которой он имеет несколько хороших возможностей. Он включает в себя хорошие возможности учета, поддержку клиентов Appletalk, SMB и LPD, и более лучшую обработку чем lpd обработку ошибок. PPR, как и другие перечисленные системы буферизации, может вызывать Ghostscript для работы с принтерами не понимающими Postscript.
Я только недавно нашел информацию о PPR; я не знаю никого, кто экспериментировал бы с ним. Он был написан и используется в Trinity College. Система распространяется под лицензией BSD-стиля; свободно для любого использования, но требуется ссылка на авторов.
Одним из интересных новичков на сцене является "CUPS", реализация протокола печати Internet, определенный в RFC сходный с HTTP протокол заменяющий древний протокол lpd. Основная часть реализации этого пакета является продуктом с открытым исходным кодом от коммерческого продукта "Easy Print", который состоит из системы буферизации и набора коммерческих драйверов печати, созданных на основе Ghostscript (ESP Print Pro).
CUPS, сама система буферизации распространяется под действием лицензии GPL. ESP Print Pro распространяется только в двоичном виде как коммерческий продукт (за исключением системы буферизации, которая также доступна под действием GPL и называется CUPS).
Для того чтобы печать работала хорошо, вам необходимо понять как работает система буферизации.
Pdq обозначает "Print, Don't Queue (Печатать не буферизуя)", и способ который он использует для работы отражает этот дизайн. Следующая последовательность событий происходит при использовании для печати PDQ:
Во время этого процесса и после, состояние каждого задания может быть увидено с помощью xpdq. Задания, которые не смогли быть выполнены показаны красным цветом и могут быть посланы заново.
Lpd обозначает Line Printer Daemon (демон линейной печати), и ссылается в разных контекстах и на программу-демона и на весь набор программ которые работают с системой печати. Это:
lpd
Демон системы печати. Один из них работает для контроля действий на машине, И запускается один на каждый принтер пока принтер печатает.
lpr
Пользовательская команда печати. Lpr контактирует с lpd и выдает новое задание печати в очередь печати.
lpq
Перечисляет задания в очереди печати.
lpc
Команда контроля системы lpd. С помощью lpc вы можете останавливать, начинать, переупорядочивать и т.п. очереди печати.
lprm
lprm
удаляет задание из очередей печати.
Теперь как это работает вместе? Когда система загружается, стартует процесс под названием lpd. Он сканирует файл /etc/printcap чтобы узнать какие принтера он будет обслуживать. Каждый раз при запуске lpr, lpr контактирует с lpd через именованный сокет /dev/printer, и передает lpd и файл для печати и некоторую информацию о том кто печатает и как печатать файл. Затем lpd печатает файл на соответствующем принтере в порядке очереди.
Система lp была спроектирована когда большинство принтеров было линейными принтерами -- так что люди в большинстве печатали чистый ascii. Как показало время, только небольшое добавление было необходимо чтобы заставить lpd работать довольно хорошо с заданиями сегодняшнего дня, которые часто идут в формате PostScript, или текст, или dvi, или..
Для общих конфигураций вам вероятно захочется проигнорировать этот раздел, вместо этого вы должны перейти к разделу о Решениях Производителей, или еще лучше к документации вашего поставщика. Большинство дистрибутивов Linux поставляет одну или несколько дуракоустойчивых утилит для того, чтобы делать все описанное здесь для основных типов принтеров.
Если предоставленные вам утилиты не подходят вам, или вы хотите контролировать настройки печати, то вы должны использовать PDQ; Я рекомендую использование PDQ в большинстве случаев.
PDQ может быть настроен либо администратором, либо обычным пользователем. Изменения внесенные администратором делаются в файле /etc/printrc, и применяются ко всем пользователям, в то время как обычный пользователь может изменять только свой персональный файл .printrc. Все описанное применяется к обоим типам настройки.
Если PDQ не доступен в вашем дистрибутиве, то вы должны взять исходные тексты со страницы PDQ и скомпилировать его сами. Он легко компилируется, но вы сначала должны убедиться, что установили разные библиотеки для разработки с применением GTK, пакет для разработки программ на языке C, компилятор gcc, программу make, и возможно еще несколько других пакетов для разработки.
PDQ позволяет пользователям выбрать принтер на который будет производится печать. Принтер в PDQ определяется как комбинация "драйвера" и "интерфейса". И драйвер и интерфейс являются текстовыми описаниями в файле настройки PDQ.
Интерфейс PDQ описывает то, как данные посылаются на принтер. Наиболее общими интерфейсами, которые поставляются вместе с дистрибутивом PDQ в качестве примера файла printrc, являются:
Интерфейс локального порта работает с параллельным или последовательным портом на той машине, на которой запущен PDQ. Используя этот интерфейс PDQ может печать прямо в параллельный порт. Заметьть, что если вы работаете в многопользовательской системе, то это может вызвать неразбериху, и если вы имеете сеть, то интерфейс local-port будет применим только для одной системы. В этих случаях вы можете определить очередь печати lpd без фильтра и без проблем печатать на в эту очередь одинаковым способом со всех систем и пользователей. Интерфейс имеет аргумент -- имя устройства; обычным значением является /dev/lp0.
Интерфейс bsd lpd общается по сети с демоном LPD или с работающим по протоколу LPD сетевым принтером. PDQ поддерживает постановку, отмену заданий и запросы к интерфейсу LPD. Этот интерфейс имеет параметры: имя сервера и название очереди.
Интерфейс appletalk позволяет вам печатать на принтера в сети Appletalk; если у вас есть принтер подключенный к компьютеру Mac, то необходимо использовать этот интерфейс. Этому интерфейсу для работы нужен пакет Netatalk.
Драйвер PDQ описывает как перевести печатаемые данные в формат, который понимает данные принтер. Для принтеров понимающих Postscript, он будет включать преобразования из ascii в Postscript; для не-Postscript принтеров он будет описывать преобразования из Postscript в язык принтер, используя Ghostscript.
Если ни одна из включенных в поставку PDQ спецификаций драйвера не подходит к вашему принтеру, то читайте дальнейшие разделы и пишите свой драйвер.
Для того чтобы определить принтер в PDQ:
Это все что надо сделать; большинство работы приходится на нахождение или создание подходящей спецификации драйвера, если вы не можете найти уже сделанную.
Здесь я проведу вас по примеру создания объявления драйвера PDQ. До того, как вы начнете этот процесс, загляните в несколько мест, чтобы найти существующие объявления драйверов:
ppdtopdq
,
и которая берет файл Postscript Printer Definition (определения
принтера Postscript) и преобразует его в спецификацию драйвера
PDQ. Это правильны способ если у вас принтер понимающий
Postscript. Напишите мне, чтобы получить копию.
Вам необходимо заглянуть в несколько мест для того, чтобы найти информацию необходимую для написания вашего драйвера PDQ:
Если вы создали свой собственную спецификацию драйвера, или
или вы расширили спецификацию из дистрибутива PDQ или
сгенерированную вышеупомянутой программой, то пожалуйста
поделитесь вашим трудом со всем миром!Пошлите его мне на адрес
(gtaylor+pht@picante.com
), и его смогут найти будущие
пользователи PDQ, у которых принтер такого же как у вас типа.
Теперь давайте пройдем сквозь этапы написания спецификации драйвера для принтера, который в базе данных Printing HOWTO отмечен как работающий, но для которого вы не можете найти спецификацию драйвера PDQ. Я буду использовать принтер Canon BJC-210 в качестве примера
Давайте сначала заглянем в информацию об этом принтере. Заметьте, что он поддерживается "великолепно", так что мы можем получить результат, который сравним (или лучше) с результатами, получаемыми пользователями Windows. Важной информацией являются три места в полученной информации:
Последняя строка в колонке Works?/Language/Driver сообщает нам, что есть драйвер работающий с этим принтером. Более того, это имя является ссылкой на домашнюю страницу с драйвером.
Заметки понятные для людей часто содержат полезную информацию. Для некоторых принтеров существует ссылка "More Info (Больше информаци)", которая обычно ссылается на страницу пользователя, который работает с этим принтером или на странцу драйвера данного принтера.
Большинство принтеров имеют список команд драйвера. Это наиболее важная часть.
Спецификация драйвера PDQ имеет две логических функции: взаимодействие с пользователем и обработка задания. Это представляется в файле в трех местах:
Этот раздел определяет какие ключи могут быть установлены пользователем, и определяют переменные PDQ для дальнейшего использования драйвером.
Этот раздел описывает процесс преобразования заданий печати из формата в котором они пришли (обычно это Postscript или ASCII) в формат, который понимает принтер (например PCL). Значения ключей доступны в этом разделе, так же как и в фильтре вывода.
Этот последний фильтр связывает данные принтера независимо от типа входных данных; часто ключи принтера устанавливаются в этом месте.
Давайте продемонстрируем все это для Canon BJC-210:
Список драйверов для данного принтера выглядит следующим образом:
Driver: Ghostscript: -sDEVICE=bj200 -r360x360 # (360x360 BW)
Driver: Ghostscript: -sDEVICE=bjc600 -r360x360 # (360x360 Color)
Документация в базе данных сообщает нам, что тип драйвера
"Ghostscript", который является набором ключей для Ghostscript,
без "обычных" ключей, таких как -q
или файлом,
указывающим эти ключи.
BJC-210 поддерживает одну полезную опцию: пользователь должен выбрать в каком режиме будет печатать: в цветном или черно-белом. Давайте объявим это как опцию выбора, названную "MODE":
option {
var = "MODE"
desc = "Print Mode"
# default_choice "Color" # раскомментируйте для установки значения по умолчанию
choice "BW" {
# Часть value назначает переменной MODE все что вы захотите.
# Мы будем назначать текст, который отличается для разных наборов
# ключей Ghostscript для каждого из режимов
value = "bj200"
help = "Fast black printing with the black cartridge."
desc = "Black-only"
}
choice "Color" {
value = "bjc600"
help = "Full-color printing."
desc = "Color"
}
}
При описанном выше объявлении пользователь будет видеть
выбор только из значений Color или BW, в диалоге драйвера
принтера при печати через xpdq. В командно-строковой утилите
pdq, пользователь может указать ключи -oBW
или
-oColor
. Значение по умолчанию может быть установлено
с помощью xpdq, или объявлено с помощью ключевого слова
default_choice
.
Обычно PDQ определяет тип входных данных с помощью команды
file(1). Для каждого типа, возвращенного командой file, и
который вы хотите обрабатывать, вам необходимо определить
предложение language_driver
. Это предложение состоит в
основном из скрипта для обработки задания печати, на любом (!)
языке скриптов, который вы захотите использовать (языком по
умолчанию является язык Bourne shell).
В нашем случае мы хотим печатать Postscript и ASCII на нашем принтере BJC-210. Поэтому нам необходимо два драйвера для типов файлов: один для запуска Ghostscript для заданий в формате Postscript, и один для добавления команд возврата каретки к заданиям в ASCII:
# Первый language_driver в этом файле, который соответствует результату
# выполнения file(1) сообщает, что будет использовано
language_driver ps {
# file(1) возвращает строку "PostScript document text conforming at..."
filetype_regx = "postscript"
convert_exec = {
gs -sDEVICE=$MODE -r360x360 \ # ключи gs из базы данных
-q -dNOPAUSE -dBATCH -dSAFER \ # "обычные" ключи Ghostscript
-sOutputFile=$OUTPUT $INPUT # обработка INPUT в файл OUTPUT
# Последние две строки часто одинаковы для всех поддерживаемых gs
# принтеров. Однако строка gs..., будет разная для каждого из
# принтеров.
}
}
# Мы объявили тип text после postscript, потому-что команда "file" часто
# описывает файл postscript как текстовый (чем он и является).
language_driver text {
# Нет filetype_regx; мы ищем соответствие имени драйвера: "text"
convert_exec = {#!/usr/bin/perl
# Программа на Perl, просто потому-что мы можем писать на нем!
my ($in, $out) = ($ENV{'INPUT'}, $ENV{'OUTPUT'});
open INPUT, "$in";
open OUTPUT, ">$out";
while(<INPUT>) {
chomp;
print OUTPUT, "$_\r\n";
}
}
}
Это все! В то время как другие принтера нуждаются в фильтрации
выходных данных (как описано в следующем разделе), вышеприведенное
предложение подходит для BJC-210. Мы просто передадим их указанному
предложению driver
:
driver canon-bjc210-0.1 {
option {
var = "MODE"
desc = "Print Mode"
# default_choice "Color" # раскомментируйте для установки значения по
# умолчанию
choice "BW" {
# Часть value назначает переменной MODE все что вы захотите.
# Мы будем назначать текст, который отличается для разных наборов
# ключей Ghostscript для каждого из режимов
value = "bj200"
help = "Fast black printing with the black cartridge."
desc = "Black-only"
}
choice "Color" {
value = "bjc600"
help = "Full-color printing."
desc = "Color"
}
}
# Первый language_driver в этом файле, который соответствует результату
# выполнения file(1) сообщает, что будет использовано
language_driver ps {
# file(1) возвращает строку "PostScript document text conforming at..."
filetype_regx = "postscript"
convert_exec = {
gs -sDEVICE=$MODE -r360x360 \ # gs options from the database
-q -dNOPAUSE -dBATCH -dSAFER \ # the "usual" Ghostscript options
-sOutputFile=$OUTPUT $INPUT # process INPUT into file OUTPUT
# Последние две строки часто одинаковы для всех поддерживаемых gs
# принтеров. Однако строка gs..., будет разная для каждого из
# принтеров.
}
}
# Мы объявили тип text после postscript, потому-что команда "file" часто
# описывает файл postscript как текстовый (чем он и является).
language_driver text {
# Нет filetype_regx; мы ищем соответствие имени драйвера: "text"
convert_exec = {#!/usr/bin/perl
# Программа на Perl, просто потому-что мы можем писать на нем!
my ($in, $out) = ($ENV{'INPUT'}, $ENV{'OUTPUT'});
open INPUT, "$in";
open OUTPUT, ">$out";
while(<INPUT>) {
chomp;
print OUTPUT, "$_\r\n";
}
}
}
}
Если вы хотите добавит что-нибудь в начало или конец всех заданий
печати, или выполнить какое-нибудь преобразование любых данных любых
типов, то воспользуйтесь предложением filter_exec
. Наш
принтер Canon не нуждается в таком предложении, но просто для
примера, мы приведем простую иллюстрацию, показывающую как сделать
поддержку двухсторонней печати и выбора разрешения на принтерах
Laserjet или других моделях, поддерживающих PJL:
driver generic-ljet4-with-duplex-0.1 {
# Сначала два предложения option для обеспечения выбора пользователя:
option {
var = "DUPLEX_MODE"
desc = "Duplex Mode"
default_choice = "SIMPLEX"
choice "SIMPLEX" {
value = "OFF"
desc = "Односторонняя печать"
}
choice "DUPLEX" {
value = "ON"
desc = "Двухсторонняя печать"
}
}
option {
var = "GS_RES"
desc = "Resolution"
default_choice = "DPI600"
choice "DPI300" {
value = "-r300x300"
desc = "300 dpi"
}
choice "DPI600" {
value = "-r600x600"
desc = "600 dpi"
}
}
# Теперь мы обрабатываем Postscript используя драйвер Ghostscript для ljet4:
language_driver ps {
filetype_regx = "postscript"
convert_exec = {
gs -sDEVICE=ljet4 $GS_RES \
-q -dNOPAUSE -dBATCH -dSAFER \
-sOutputFile=$OUTPUT $INPUT
}
}
# В заключение мы обернем задание в команды PJL:
filter_exec {
# требуется наличие команды echo с возможностями выдачи кода escape...
echo -ne '\33%-12345X' > $OUTPUT
echo "@PJL SET DUPLEX=$DUPLEX_MODE" >> $OUTPUT
# Вы можете вставить дополнительные команды @PJL, подобные приведенным выше.
# Убедитесь, что вы всегда дополняете (>>) к выходному файлу!
cat $INPUT >> $OUTPUT
echo -ne '\33%-12345X' >> $OUTPUT
}
}
Традиционная настройка lpd заканчивается тем, что можно создавать очереди файлов и печатать их. Она не обращает никакого внимания на то понимает ли принтер эти файлы или нет, и скорее всего не позволит производить привлекательный вывод. Тем не менее, это первый шаг к пониманию, так что читайте!
Для добавления очереди печати к lpd, вы должны добавить запись в файл /etc/printcap, и создать новую буферную директорию в каталоге/var/spool/lpd.
Запись в файле /etc/printcap выглядит примерно так:
# ЛОКАЛЬНЫЙ djet500
lp|dj|deskjet:\
:sd=/var/spool/lpd/dj:\
:mx#0:\
:lp=/dev/lp0:\
:sh:
Это определяет принтер называемый lp, dj, или deskjet, его спул размещается в директории /var/spool/lpd/dj, без ограничения максимального размера задания, который печатает на устройство /dev/lp0, и который не имеет страницу с заголовком (с именем человека, который печатает и т.п. информацией) добавленную в начало задания печати.
Теперь прочитайте справочную страницу для printcap.
Вышеприведенный пример выглядит очень простым, но он имеет ловушку -- хотя я посылаю файлы, которые DeskJet 500 может понимать, этот DeskJet будет печатать странные вещи. Например посыл обычного текстового файла Unix приведет к тому, что deskjet будет интерпретировать символы новой строки как символы, и выдаст мне:
This is line one.
This is line two.
This is line three.
Печать файла PostScript на этот принтер выдаст великолепный листинг команд PostScript, напечатанных с этим "лестничным эффектом", а не полезный вывод.
Очевидно требуется что-то сделать, и это является назначением фильтрации. Более наблюдательные из тех кто читал справочную страницу printcap должны были заметить атрибуты принтера if и of. Хорошо, if, или входной фильтр -- это все что нам нужно здесь.
Если мы напишем маленький скрипт, названный filter, который добавляет возврат каретки до символа новой строки, то лестничный эффект будет ликвидирован. Так что мы добавим строку if в нашу, вышеприведенную запись в printcap:
lp|dj|deskjet:\
:sd=/var/spool/lpd/dj:\
:mx#0:\
:lp=/dev/lp0:\
:if=/var/spool/lpd/dj/filter:\
:sh:
Простой скрипт может выглядеть так:
#!perl
# Предыдущая строка должна содержать полный путь к perl
# Скрипт должен быть исполнимым: chmod 755 filter
while(<STDIN>){chop $_; print "$_\r\n";};
# Вы можете также добавить в конец прогон страницы: print "\f";
Если мы сделаем как приведено выше, мы будем иметь принтер на котором мы сможем печатать обычные текстовые файлы Unix и получать осмысленные результаты. (Конечно мы можем написать этот фильтр четырьмя миллионами лучших способов, но этот более иллюстративный. Вы можете попытаться сделать это более эффективно).
Оставшаяся проблема в том что печать простого текста не является злободневной -- наверняка будет лучше если мы сможем печатать PostScript и другие типы форматированого и графического вывода. Да и это легко сделать. Метод является просто расширением вышеприведенного фильтра для исправления перевода строки. Если вы напишите фильтр, который может воспринимать произвольные типы файлов как ввод и производить вывод для DeskJet для каждого случая, тогда мы безусловно получим "умный" спулер принтера.
Такой фильтр называется magic-фильтр. Не беспокойте себя написанием фильтра, до тех пора пока они не будут печатать странные вещи -- в сети уже существует много хорошо написанных фильтров. APS Filter это лучший среди всех, или ваш дистрибутив Linux может иметь утилиту настройки принтера, которая сделает всю настройку очень простой.
Есть правда ловушка для таких фильтров: некоторые старые версии lpd не запускают фильтр if для удаленных принтеров, а некоторые запускают. Версии lpd используемые в современных дистрибутивах Linux и FreeBSD запускают указанный фильтр; большинство коммерческих юниксов до сих пор поставляются с lpd, которые не запускают фильтр для удаленных принтеров. Смотрите раздел о сетевой печати для более детальной информации.
Для некоторых систем необходимо хранить информацию о том, кто и как много печатал; этот раздел описывает разные методы выполнения данной работы.
Обычный LPD предоставляет очень небольшую помощь в выполнение учета ресурсов. Вы можете указать имя файла для учета ресурсов используя атрибут af= в printcap, но только передается как параметр вашему фильтру, указанному в if=. Возможно сделать так, что ваш if= фильтр будет писать данные в файл учета ресурсов, и вы будете обрабатывать этот файл позже (традиционный формат в основном полезен для строчных принтеров, и нетривиален для разбора с помощью Perl, так что нет причин сохранять его).
Ghostscript предоставляет оператор PageCount, который вы можете использовать для подсчета страниц в каждом из заданий; обычно вам необходимо добавить несколько строк на postscript в конец задания для того, чтобы дописать запись в файл учета; лучшим примером этого является файл unix-lpr.sh в поставке исходного кода Ghostscript.
Заметьте, что реализация учета ресурсов использованная в unix-lpr пишет в файл из Ghostscript и таким образом несовместима с рекомендованным ключом -dSAFER. Лучшим решением мог бы быть опрос принтера с помощью команды PJL после каждого из заданий, или написать программу на postscript, которая будет выдавать число страниц на стандартный вывод, где данные могут быть захвачены другой программой.
Система буферизации LPRng включает простую реализацию учета ресурсов для HP; я думаю, что она опрашивает принтер используя PJL.
Большие системы, под которыми я подразумеваю сети, включающие более двух принтеров или серверов, имеют специальные требования. Вот описание одной из возможных спецификаций.
По популярному требованию, я включил ниже список прав доступа на интересующие нас файлы на моей системе. Существует несколько более лучших способов сделать это, в идеале использовать только выполнимые файлы со SGID и не делать все подряд SUID root, но это как пришло в моей системе, и это работает для меня. (Довольно откровенно, если ваш производитель даже не может сделать работающий lpd, то вы в опасной поездке).
-r-sr-sr-x 1 root lp /usr/bin/lpr*
-r-sr-sr-x 1 root lp /usr/bin/lprm*
-rwxr--r-- 1 root root /usr/sbin/lpd*
-r-xr-sr-x 1 root lp /usr/sbin/lpc*
drwxrwxr-x 4 root lp /var/spool/lpd/
drwxr-xr-x 2 root lp /var/spool/lpd/lp/
В настоящее время lpd должен быть запущен под правами администратора, так что он может быть связан с сервисным портом lp с низким номером. Он должен вероятно быть с UID lp.lp или каким-то после связывания, но я не знаю с каким.
PDQ использует отличную от других схему, не ориентированную на
демонов, и поэтому у него другие программы. Только несколько программ
имеют установленный бит SUID и владельца администратора, эта программы
являются интерфейсом к lpd и называются lpd_cancel
,
lpd_print
и lpd_status
; эти программы имеют SUID,
потому-что сервера печати Unix требуют отправки запросов с
привилегированного порта. Если вам необходимо применять интерфейс
bsd-lpd из поставки PDQ только для сетевых принтеров печати таких
как адаптеры HP JetDirect или Lexmark MarkNet), то вам не нужно
устанавливать бит suid на эти программы.
Много написанных пакетов фильтров (и другого программного
обеспечения относящегося к печати) доступно с
MetaLab
. Такие
утилиты как psutils, a2ps, mpage, dvitodvi, flpr и т.п. все могут
быть найдены там.
В настоящее время существует несколько пакетов, которые старались сделать настройку принтера более легкой. Они вероятно все еще существуют, но лучший из них и более современный это пакет APS Filter, написанный Andreas Klemm, который имеет управляемый меню настройщик printcap и обрабатывает практически любой тип вообразимого ввода. Если ваш поставщик не поставил вам хорошую утилиту настройки принтера, то APS Filter это правильный путь решения проблем.
Этот раздел по определению неполный. Свободно посылайте мне детальную информацию о вашем любимом дистрибутиве. А настоящее время я не знаю ни одного дистрибутива, который поддерживает или предоставляет рекомендуемой мной программное обеспечение:PDQ.
Сейчас существует несколько пакетов, которые пытаются сделать настройку принтеров для использования с lpd более легкой. Они вероятно существуют до сих пор, но лучшим из них и самым современным является пакет APS Filter, написанный Andreas Klemm, который имеет управляемую меню настройку printcapи обрабатывает почти все типы входных данных. Если производитель вашего дистрибутива не поставляет хорошую утилиту настройки принтера, то APS Filter будет хорошим выбором; несколько дистрибутивов включают apsfilter, или он легко добавляется.
Red Hat имеет утилиту администрирования принтера с GUI-интерфейсом называемую printtool, которая может добавлять удаленные принтера и принтера на локальных устройствах. Она позволяет вам выбрать поддерживаемый ghostscript тип принтера и устройство Unix на которое будет производиться печать, затем устанавливает очередью печати в файл /etc/printcap и для поддержки postscript и других форматов данных использует фильтр из пакета rhs-printfilters. Это решение работает довольно хорошо, и оно тривиально в установке для общих случаев.
Red Hat может дать сбой, если у вас принтер, который не поддерживается Ghostscript, который идет в его поставке, (он является GNU версией, а не версией Aladdin Ghostscript, которая поддерживает большее количество принтеров). Посмотрите список совместимости принтеров, приведенный выше (или по адресу online), в том случае если вы обнаружили, что вы не можете печатать правильно, используя программное обеспечение, предоставленное Red Hat. Если ваш принтер не поддерживается утилитами Red Hat, то вы можете установить Aladdin Ghostscript, и вероятно будет лучше, если вы будете использовать пакет apsfilter, который имеет все сведения о принтерах, поддерживаемых последними версиями Ghostscript.
В будущих версиях Red Hat программа printtool будет переделана для поддержки большего количества принтеров и будет предназначена для окончательной замены rhs-printfilters (текущий фильтр имеет трудности с поддержкой многих распространенных принтеров, таких как не-PCL DeskJet и большинство принтеров Lexmark). Также могут быть объединены некоторые разработанные в VA Linux PPD.
Debian предлагает выбор между обычным lpd и LPRng; вероятно LPRng будет наилучшим выбором. Я верю, что Debian также предлагает выбор утилит для настройки принтера; пакет apsfilter версии 5 или более поздней вероятно будет лучшим выбором, поскольку в этих версиях добавлена поддержка LPRng и драйверов uniprint Ghostscript.
Система печати в SuSE Linux основана на apsfilter, с некоторыми расширениями; SuSE-версия программы apsfilter распознает все основные типы файлов (включая HTML, если установлена программа html2ps). Существует два способа установки принтеров в системах с SuSE:
Руководство по установке SuSE описывает обе эти процедуры настройки.
Wolf Rogner написал, что есть некоторые сложности с SuSE. Вероятно следующие ошибки могут возникнуть у вас:
Пожалуйста посылайте мне информацию о том сто имеется в других дистрибутивах.
GhostscriptЭто невероятно важная программа
для печати в Linux. Большинство печатающего программного обеспечения
под Unix генерирует PostScript, поддержка которого принтером
обходится примерно в $100 долларов на каждый принтер. Тем не
менее Ghostscript, является свободным и генерирует вывод на языке
вашего принтера из PostScript. Когда он связан c описанием драйвера
принтера PDQ или с входным фильтром вашего lpd
, это дает вам
виртуальный PostScript-принтер и значительно упрощает жизнь.
Ghostscript доступен в двух формах. Коммерческая версия Ghostscript, называемая Aladdin Ghostscript, mможет быть использована свободно для персонального использования, но не может распространяться с коммерческими дистрибутивами Linux. В общем она примерно на год впереди свободной версии Ghostscript; в настоящее время, например, она поддерживает много цветных струйных принтеров, в то время как старый Ghostscripts не делает этого.
Свободная версия Ghostscript называется GNU Ghostscript, и это просто устаревшая версия Aladdin Ghostscript любезно предоставленная для GNU. (Спасибо славному Aladdin за эту договоренность; больше производителей программного обеспечения должны поддерживать свободное программное обеспечение этим способом, если они не могут сделать распространение кода в терминах GPL).
Что бы вы не делали с
gs
, будьте
уверены что запускаете его с опцией запрещающей доступ к файлам
(-dSAFER
). PostScript это полнофункциональный язык, и плохая
программа на PostScript может доставить вам достаточно неприятностей.
Честно говоря разговор на PDF, (Формате Переносимого Документа Adobe) это в действительности чуть больше чем организованный PostScript в сжатом файле. Ghostscript может обрабатывать ввод в PDF также как это делает с PostScript. Так вы можете быть первым в вашем квартале с принтером имеющим возможность обработки PDF.
Обычно ghostscript будет запускаться magic-фильтром, которым вы пользуетесь (Я рекомендую пакет apsfilter, если ваш поставщик не поставил вам этот пакет), но для целей отладки очень часто удобно запускать его прямо.
gs -help
даст вам коротки, информативный список опций и
доступных драйверов (заметим, что этот список является списком
вкомпилированных драйверов, не основным списком доступных
драйверов).
Вы можете запустить gs для тестирования примерно так: gs
options -q -dSAFER -sOutputFile=/dev/lp1 test.ps
.
Существует набор вещей которые вы можете сделать если вывод gs не удовлетворителен (пожалуйста вы можете латать что угодно, поскольку вы имеете исходные тексты).
Некоторые из этих опций, и другие описанные в руководстве пользователя
Ghostscript (файл Use.htm
в дистрибутиве Ghostscript;
в вашей системе эта документация может быть установлена в каталоги
/usr/doc или /usr/share/doc) являются великолепными кандидатами для
настроек драйвера в вашем объявлении драйвера PDQ.
Расположение, размер и коэффициент сжатия изображения на странице контролируются принтер-специфичным драйвером в ghostscript. Если вы обнаружили, что ваши страницы получаются слишком короткими, или слишком длинными или со слишком большим фактором увеличения, вы можете посмотреть в исходный код модуля драйвера и выровнять необходимые для вас параметры. К сожалению каждый драйвер написан по разному, так что я не могу сказать что исправлять, но большинство из них довольно неплохо описаны.
Большинство не лазерных принтеров страдают от факта, что их
точки немного больше. В результате картинки получаются слишком
темными. Если вы страдаете от этой проблемы, то вы должны
использовать свою собственную функцию переноса. Просто создайте
следующий файл в директории lib
ghostscript и добавьте
его имя в вызов gs перед именем нужного файла. Вам может быть
необходимо поиграть со значениями для настройки на ваш
принтер. Более низкие значения дают более яркую печать. Особенно
если ваш драйвер использует алгоритм Floyd-Steinberg для
растеризации цветов, то более низкие значения (0.2 - 0.15)
вероятно будут хорошим выбором.
---8<---- gamma.ps ----8<---
%!
%transfer functions for cyan magenta yellow black
{0.3 exp} {0.3 exp} {0.3 exp} {0.3 exp} setcolortransfer
---8<------------------8<---
Также возможно чинить принтера, которые имеют некоторый сорт проблем с цветом с помощью подбора значений указанных выше. Если у вас есть такая проблема, я рекомендую вам использовать файл colorcir.ps, который идет вместе с ghostscript (в поддиректории examples/), как тестовую страницу.
Для многих драйверов современных струйных принтеров существуют опции командной строки, или отдельный файлы upp для драйверов, которые реализуют изменения гаммы и других параметров и адаптируют принтер для разных типов бумаги. Вы должны заглянуть в них, до экспериментирования с Postscript, для того чтобы исправить проблемы.
Смешение по умолчанию в Ghostscript оптимизован для устройств с маленьким разрешением. Будет производится смешение с предпочтением огрубления при попытке создания вывода с качеством 60ppi (не путайте с dpi, ppi - это "видимые" цветные пикселы на дюйм, которые вы получите после смешения). Это создаст более бедный вывод на современных цветных принтерах; в частности, струйные принтера с фотобумагой могут использовать лучшие настройки ppi.
Для выравнивания этого используйте ключ Ghostscript -dDITHERPPI=x, где x это используемое значение. Таким способом вы можете или не можете добиться успеха со всеми драйверами; многие из новых драйверов реализуют свое собственное смешение и не обращают внимания на настройки. Некоторые драйвера могут использовать либо обычное смешение Ghostscript, либо реализованное в драйвере.
Это дает нам великолепный аргумент в объявлении драйвера PDQ, если это применимо.
Одним из свойств pdq и lpd является то что они поддерживают печать по сети на принтер, физически подключенный к другой машине. С помощью правильной комбинации фильтров и разнообразных утилит, вы можете печатать используя lpr на принтера во всех видах сетей.
Для того чтобы разрешить удаленным машинам печатать на ваш
принтер используя протокол LPD, вы должны перечислить эти машины в
файле /etc/hosts.equiv или
/etc/hosts.lpd. (Заметим, что hosts.equiv имеет
список машин несколько с другим эффектом; будьте уверены что вы
знаете что вы делаете если перечисляете машины в этом файле). Вы
можете разрешить только определенным пользователям на других
машинах печатать на ваш принтер используя атрибут rs; читайте
справочную страницу
lpd
для
более детальной информации об этом.
pdq
Используя PDQ, вы определяете принтер с типом интерфейса "bsd-lpd". Этот интерфейс берет в качестве аргумента имя удаленного сервера и имя очереди печати; помощник определения принтера запросит у вас эти параметры.
lpd
Для того чтобы печатать на другую машину вы должны сделать примерно такую запись в /etc/printcap:
# Удаленный djet500
lp|dj|deskjet:\
:sd=/var/spool/lpd/dj:\
:rm=machine.out.there.com:\
:rp=printername:\
:lp=/dev/null:\
:sh:
Заметим что все равно есть директория очереди на локальной
машине обслуживаемая lpd
. Если удаленная машина занята или
отключена, то задание с локальной машины будет находиться в
очереди до тех пор пока оно не сможет быть послано.
rlpr
Вы также можете использовать rlpr для послания задания печати прямо в очередь удаленной машины без мороки с настройкой lpd для выполнения этой задачи. Это в большинстве случаев полезно в ситуациях когда вы печатаете на множество принтеров только время от времени. Из анонса rlpr:
Rlpr использует TCP/IP для посылки заданий печати на сервера с lpd, находящиеся где угодно в сети.
В отличии от lpr, он не требует чтобы удаленный принтер был явно известен машине с которой вы хотите печатать, (например в /etc/printcap) и таким образом является значительно белее гибким и требующим меньше администрирования.
rlpr может использоваться везде где мог бы использоваться традиционный lpr, и он является совместимым с традиционным BSD lpr.
Основная мощь rlpr заключается в удаленной печати откуда угодно куда угодно без учета как система на которую вы хотите печатать была настроена. Rlpr может работать как фильтр, как и традиционный lpr, так что клиенты выполняемые на удаленной машине такие как netscape, xemacs, и т.п., могут печатать на вашу локальную машину с небольшими усилиями.
Rlpr доступен с
Metalab
.
Существует "Printing to Windows mini-HOWTO" в котором находится больше информации чем в данном документе.
Нет предопределенного интерфейса smb, что я сознаю, но он может достаточно легко создан используя модель, заданную интерфейсом appletalk на базе пакета Netatalk. Некоторые люди создали его и выслали его для включения в дистрибутив!
Прочитайте раздел о Windows/LPD в следующих разделах данного документа для дополнительных советов как сделать данный драйвер.
Возможно перенаправить очередь lpd через программу
smbclient
(часть набора Samba) на основанный на TCP/IP сервис печати
SMB. Samba включает скрипт называемый smbprint
. Вкратце, вы
помещаете конфигурационный файл для нужного принтера в его
директорию спула, и устанавливаете для него скрипт smbprint
как if-фильтр.
Запись в /etc/printcap выглядит примерно так:
lp|remote-smbprinter:\
:lp=/dev/null:sh:\
:sd=/var/spool/lpd/lp:\
:if=/usr/local/sbin/smbprint:
Вы должны прочитать документацию внутри скрипта smbprint
для более детальной информации о настройке
Вы также можете использовать программу smbclient
для
посылки файла прямо на сервис печати SMB без вовлечения в этот
процесс lpd
. Смотрите справочные страницы.
Набор программ ncpfs включает утилиту названную nprint
,
которая обеспечивает те же самые возможности как и smbprint
,
но для NetWare. Вы можете получить ncpfs с
Metalab. Информация
из записи в LSM для пакета версии 0.16:
С помощью ncpfs вы можете монтировать тома вашего сервера netware под Linux. Вы также можете печатать в очереди печати netware и перенаправлять очереди печати netware на систему печати Linux. Вам необходимо ядро версии 1.2.x или 1.3.54 и выше. ncpfs НЕ работает с любыми ядрами 1.3.x ниже 1.3.54.
Для того чтобы заставить nprint
работать через lpd, вам
нужно написать маленький скрипт для печати потока стандартного
ввода на принтер NetWare, и установить его как if-фильтр для
очереди печати lpd. Вы получите что-то подобное этому:
sub2|remote-NWprinter:\
:lp=/dev/null:sh:\
:sd=/var/spool/lpd/sub2:\
:if=/var/spool/lpd/nprint-script:
nprint-script
может выглядеть примерно так:
#! /bin/sh
# Вы должны сначала попробовать вход как guest без пароля!
/usr/local/bin/nprint -S net -U name -P passwd -q printq-name -
Пакет netatalk включает что-то подобное nprint
и
smbclient
. Другие имеют документированные процедуры для печати
на и с сетей Apple много лучше чем я представлял; Смотрите
Linux Netatalk-HOWTO.
PDQ включает в поставку объявление интерфейса, который называется "appletalk". Он использует пакет Netatalk для печати на подключенный к сети принтер Apple. Просто выберите этот интерфейс при использовании помощника добавления принтера в xpdq.
Принтеры HP и некоторые другие принтера идут с интерфейсом на который вы можете печатать прямо, используя протокол lpd. Вы должны следовать инструкциям, которые идут с вашим принтером или его сетевым адаптером, но в главном такие принтера являются "работающим" lpd., и обеспечивают одну или более очередь на которые вы можете печатать. Например HP может работать с printcap подобным:
lj-5|remote-hplj:\
:lp=/dev/null:sh:\
:sd=/var/spool/lpd/lj-5:\
:rm=printer.name.com:rp=raw:
или используя аргументы REMOTE_HOST=printer.name.com и QUEUE=raw для PDQ интерфейса bsd-lpd.
Принтера HP Laserjet с интерфейсами Jet Direct iв общем поддерживают две встроенных очереди lpd -- "raw", которая принимает PCL (и возможно Postscript) и "text", которая принимает чистый ascii (и автоматически справляется с лестничным эффектом). Если у вас JetDirect Plus3 трех-портовый принтер, то очереди называются "raw1", "text2", и так далее.
Заметим, что компания ISS обнаружила набор атак denial of service (DoS), которые могут завесить интерфейсы HP Jetdirect. Большинство из них датируется началом осени 98.
В средах большого масштаба, особенно в больших средах где некоторые принтера не поддерживают PostScript, может быть полезно создать выделенный сервер печати на который все машины будут печатать и на котором все задания ghostscript будут запущены. Это позволит вам приостанавливать очереди печати или переорганизовывать их используя команды topq и lprm.
Это также позволяет вашей машине с Linux выступать как сервер печати для принтера, так что ваши пользователи сети смогут выполнять свои задания печати быстро и справляться с работой не ожидая пока принтер печатает какое-то другое задание посланное кем-то другим. Это также предполагается, если у вас есть старые HP Jetdirects, которые невозможно исправить; это уменьшает вероятность заклинивания принтеров.
Чтобы сделать это, установить очередь на вашей машине, которая указывает на оборудованный ethernet принтер HP LJ (как показано выше). Затем укажите для всех клиентов вашей LAN, чтобы они печатали на очередь печати Linux (например lj-5 как в вышеприведенном примере).
Некоторые сетевые принтера HP по всей видимости не нуждаются в установке страницы заголовка (banner page) посылаемой клиентом; вы можете отключить внутренне генерируемую страницу заголовка зайдя на принтер с помощью telnet, нажав два раза return, набрав "banner: 0" и затем "quit". Существуют другие настройки, которые вы можете изменить тем же способом; наберите "?" для просмотра списка установок.
Полный набор установок принтера может контролироваться с помощью программного обеспечения фирмы HP WebJet. Этот пакет запускается как демон и принимает http запросы на назначенном порту. Он обслуживает формы и Java апплеты, которые могут контролировать принтера HP, работающие в сети. Теоретически, он также может контролировать очереди печати Unix, но он делает это используя сервис rexec, который полностью незащищенным. Я не советую вам использовать это свойство данного пакета.
Некоторые принтера (и печатающие сетевые "черные ящики") поддерживают только никуда не годные маленькие непротокольные соединения включая чистые TCP соединения. Примечательными в этой категории являются ранние модели карт JetDirect (включая некоторые карты JetDirectEx). В основном для печати на принтер вы должны открыть соединение TCP на принтер на указанный порт (обычно 9100 или 9100, 9101 и 9102 для трех-портовых принтеров) и запихнуть свое задание печати в принтер. LPRng имеет встроенную поддержку для выдачи заданий печати на произвольные порты TCP, но при использовании BSD lpd это не так легко. Это может быть выполнено на Perl:
Интерфейс PDQ использующий netcat должен выглядеть примерно так:
interface tcp-port-0.1 {
help "Это один из первых интерфейсов поддерживаемых стандартными
сетевыми принтерами и серверами печати. Устройство просто ожидает
TCP-соединения на определенном порту, и посылает данные с любого
соединения на принтер.\nЭтот интерфейс требует наличия программы
netcat (\"nc\")."
required_args "REMOTE_HOST"
argument {
var = "REMOTE_HOST"
desc = "Удаленная машина"
help = "Имя или IP-адрес сервера печати."
}
argument {
var = "REMOTE_PORT"
def_value = "9100"
desc = "Удаленный порт"
help = "Это номер порта TCP сервера печати, на который должно посылаться
задание. Большинство карт JetDirect, и их вариантов принимают
задания на порту 9100 (или 9101 для порта номер 2, и т.п.)."
}
requires "nc"
# nc заканчивает работу после 45 секунд отсутствия сетевой активности:
# он не завершает работу после приема EOF как мы того желаем.
send_exec { cat $OUTPUT | nc -w 45 $REMOTE_HOST $REMOTE_PORT }
}
В случае отсутствия этой программы, она может быть реализована другими способами, например на языке Perl, используя нижеприведенную программу. Или для большей производительности используйте программу netcat ("nc"), которая выполняет то же самое. Большинство дистрибутивов должны иметь эту программу в своем составе.
#!/usr/bin/perl
# Спасибо Dan McLaughlin за написание оригинальной версии этого скрипта
# (А также Jim W. Jones за помощь мне при внесении исправлений ;)
$fileName = @ARGV[0];
open(IN,"$fileName") || die "Can't open file $fileName";
$dpi300 = "\x1B*t300R";
$dosCr = "\x1B&k3G";
$ends = "\x0A";
$port = 9100 unless $port;
$them = "bach.sr.hp.com" unless $them;
$AF_INET = 2;
$SOCK_STREAM = 1;
$SIG{'INT'} = 'dokill';
$sockaddr = 'S n a4 x8';
chop($hostname = `hostname`);
($name,$aliases,$proto) = getprotobyname('tcp');
($name,$aliases,$port) = getservbyname($port,'tcp')
unless $port =~ /^\d+$/;;
($name,$aliases,$type,$len,$thisaddr) =
gethostbyname($hostname);
($name,$aliases,$type,$len,$thataddr) = gethostbyname($them);
$this = pack($sockaddr, $AF_INET, 0, $thisaddr);
$that = pack($sockaddr, $AF_INET, $port, $thataddr);
if (socket(S, $AF_INET, $SOCK_STREAM, $proto)) {
# print "socket ok\n";
}
else {
die $!;
}
# Задать адрес сокету.
if (bind(S, $this)) {
# print "bind ok\n";
}
else {
die $!;
}
# Вызвать сервер.
if (connect(S,$that)) {
# print "connect ok\n";
}
else {
die $!;
}
# Установить буферизацию для сокета.
select(S); $| = 1; select(STDOUT);
# print S "@PJL ECHO Hi $hostname! $ends";
# print S "@PJL OPMSG DISPLAY=\"Job $whoami\" $ends";
# print S $dpi300;
# Избежать блокировки при fork.
if($child = fork) {
print S $dosCr;
print S $TimesNewR;
while (<IN>) {
print S;
}
sleep 3;
do dokill();
} else {
while(<S>) {
print;
}
}
sub dokill {
kill 9,$child if $child;
}
Одна странность старых версий lpd в том что if не запускается для удаленных принтеров. (Версии после 0.43 или примерно такой имеют изменения внесенные на FreeBSD, так что они всегда работают). Если вам нужно выполнить if, вы можете сделать это установив двойную очередь и перенаправляя задание. Как пример рассмотри такой printcap:
lj-5:remote-hplj:\
:lp=/dev/null:sh:\
:sd=/var/spool/lpd/lj-5:\
:if=/usr/lib/lpd/filter-lj-5:
lj-5-remote:lp=/dev/null:sh:rm=printer.name.com:\
:rp=raw:sd=/var/spool/lpd/lj-5-raw:
в свете этого скрипт filter-lj-5
будет выглядеть так:
#!/bin/sh
gs <options> -q -dSAFER -sOutputFile=- - | \
lpr -Plj-5-remote -U$5
Опция -U lpr работает только если lpr запущен как демон, и она правильно устанавливает имя имя автора задания при его перенаправлении. Вы должны вероятно использовать более надежный метод получения имени пользователя, так как в некоторых случаях оно не является пятым аргументом. Смотрите справочную станицу printcap.
Печать из под клиента Windows (или OS/2) на сервер Linux прямо поддерживается через SMB используя пакет SAMBA, который также поддерживает разделение вашей файловой системы Linux с клиентами Windows.
Samba включает в себя довольно полную документацию. Вы можете либо настроить magic-фильтр на машине с Linux и печатать на нее в формате PostScript или установить специфичные для принтера драйвера на всех машинах с Windows и обрабатывать очередь без фильтрации. Полагаясь на драйвера Windows вы можете в некоторых случаях получить более качественный вывод, но это дает больше административной нервотрепки если у вас много машин с Windows. Так что сначала попробуйте PostScript.
Используя PDQ, вы должны настроить Samba для запуска команды pdq с соответствующими аргументами вместо команды lpr, которая выполняется по умолчанию. Я верю, что Samba будет запускать pdq с правами соответствующего пользователя, так что он должен работать нормально. Существует несколько настроек Samba, которые вы должны выставить для правильной работы:
этот параметр должен указывать на "фальшивый" файл, в котором вы должны перечислить доступные принтера. Все что нужно указать, это короткие и длинные сервера для каждого из принтера, один на каждую строку:
lp1|Printer One
lp2|Printer Two
lp3|Printer Three
Короткое имя будет использоваться как имя принтера в команде печати:
Этот параметр должен быть установлен во что-нибудь
подобное следующему pdq -P %p %s ; rm %s
.
Для этого параметра пока нет хорошего значения. Буферизованные задания PDQ будут сниматься после истечения времени, так что если принтер не работает, то все нормально. Но если вы просто решили отменить свое намерение, то вы можете использовать программу xpdq для отмены заданий, но это неприменимо для Windows. Просто вствьте сюда ничего не делающую команду, такую как true. Если вы используете lpd или lprng в качестве основы, то соответствующая команда lprm должна нормально работать. Я не уверен, что Samba может идентифицировать номер задания в очереди lpr для запущенных pdq заданий.
Также PDQ не предоставаляет хорошего значения, которое можно поместить здесь. Распределенные системы не предлагают нормального решения для того, чтобы видеть очередь печати, но основанные на samba сервера должны иметь достойную схему. если вы используете lpd или lprng как основу, то соответствующая команда lpq c должна работать; вы просто не сможете увидеть задания, до того, как они будут отфильтрованы PDQ.
Netatalk поддерживает печать с клиентов Apple через EtherTalk. Смотрите Страницу Netatalk HOWTO для более детальной информации.
Пакет ncpfs включает демона называемого pserver, который может быть использован для обеспечения сервиса очередей печати NetWare. Как я понял эта система требует основанную на Bindery систему NetWare, т.е. 2.x, 3.x, или 4.x с разрешенным доступом к bindery.
Для более детальной информации о ncpfs и ее программе pserver смотрите FTP сервер ncpfs FTP.
Как я обсуждал ранее, некоторые принтера по определению не поддерживаются, потому-что они не умеют "говорить" на нормальном языке принтеров, вместо этого используя процессор компьютера для обработки картинки, которая передается на принтер с фиксированной скоростью. В некоторых случаях они также могут общаться на нормальных языках принтеров подобных PCL, но часто этого нет. В некоторых (действительно редких) случаях эти принтера даже не используют нормальное параллельное соединение, но полагается на поставляемый производителем драйвер для эмуляции поведения оборудования (наиболее важным является контроль потока).
В любом случае есть несколько возможных решений если у вас такой принтер с неприятными свойствами.
В настоящее время есть драйвер для Windows (называемый mswinpr2), который пропускает задание печати через Ghostscript до окончательной печати задания. (Довольно похоже на фильтр if в LPD системе Unix). Также существует драйвер Ghostscript, который будет печатать используя вызовы Windows GDI. Совместив все вместе, это должно позволить машине под Windows печатать PostScript на принтера работающие только под Windows, используя поставляемые производителем драйвера.
Если вы заставили это работать, то затем вы должны следовать вышеприведенным инструкциям по настройке печати на Windows-принтер по сети из под Linux, чтобы позволить Unix (и другим машинам под Windows, Mac, и т.п.) печатать на ваш "неправильный" принтер.
Некоторые принтера HP используют "Printing Performance Architecture" (маркетиноговое название для "мы были слишком дешевыми чтобы реализовывать PCL). Это поддерживается обходным путем через транслятор pbm2ppa, написанный Tim Norman. Обычно вы используете ghostscript для растеризации PostScript в точечную картинку в формате pbm и затем используете pbm2ppa для ее трансляции в картинку в специфическом для принтера формате ppa, которую можно отправлять на принтер. Эта программа также поставляется сейчас в формате драйвера ghostscript.
Программное обеспечение для ppa может быть найдено на домашней странице ppa; pbm2ppa поддерживает некоторые модели HP 720, 820, и 1000; читайте документацию, которая поставляется вместе с пакетом для более детальной информации о поддержке принтеров с ppa.
Большинство дешевых струйных принтеров Lexmark используют собственный язык и следовательно являются принтерами только для Windows. Однако, Henryk Paluch написал программу, которая может печатать на Lexmark 7000. Имеется надежда, что он сможет выяснить как печатать в цвете и расширит поддержку для остальных струйных принтеров Lexmark. Для дополнительной информации смотрите эту страницу.
Similarly, there are now drivers for the 5700, 1000, 1100, 2070, and others. See the supported printers listing above, and my web site, for more information on obtaining these drivers.
Вы можете печатать используя fax-машину, или без нее, используя модем.
Существует некоторое количество программ для факса, которые
позволят вам пересылать документы по факсу. Одна из наиболее мощных
программ это HylaFax, автор Sam Leffler, доступная с
ftp.sgi.com
. Она поддерживает все виды вещей от множественных
модемов до широковещательной передачи.
SuSE продает клиента Java HylaFax, который как утверждают работает на любых платформах с Java (включая Windows и Linux). Существует также факс-клиент не на Java для большинства платформ; Linux может обрабатывать едва ли не все потребности для работы с факсом.
Также доступна и является лучшим выбором для большинства машин с
Linux
efax
,
простая программа которая посылает факсы. Программа для
getty -- mgetty
может передавать факсы (и даже создавать
голосовые письма на некоторых модемах!).
PDQ поставляется без объявления интерфейса fax, но вот простая реализация (которая только частично протестирована):
interface efax-0.1 {
help "Этот интерфейс использует программу fax из пакета efax для посылки
факсов. Вы должны сначала добиться выполнения \"fax send\" путем
редактирования файла настройки /etc/efax.rc и тестирования.
Подключите этот интерфейс к базовому драйверу postscript для
определения факс-машины \"printer\"".
requires { "efax" "fax" }
# Требуя наличия телефонного номера означает, что помощник добавления
# принтера будет требовать задания номера телефона во время добавления
# принтера. Это нежелательно, так что не обязательно требуется, хотя это
# требуется логически. Скрипт send_exec проверяет наличие номера. Вы
# должны отказаться от помощника, добавляя принтер вручную в файл
# .printrc, отмечая это поле как требуемое и оно будет запрошено?
argument {
var = "PHONE_NUMBER"
desc = "Номер телефона"
help = "Номер телефонного подключения. Префиксы, такие как 9 должны быть
определены в вашем файле /etc/efax.rc."
}
option {
var = "RESOLUTION"
desc = "Разрешение факса"
default_choice = "high"
choice "low" {
value = "-l"
desc = "Low"
help = "Низкое разрешение факса, равное 96lpi."
}
choice "high" {
value = ""
desc = "High"
help = "Высокое разрешение факса, равное 192lpi."
}
}
# Если вы не хотите указывать номер телефона, то задание не должно
# работать, и единственный способ определить это, это посмотреть в
# сообщение об ошибке в начале деталей задания.
send_exec {
if [ "x$PHONE_NUMBER" != "x" ]
then
fax send $RESOLUTION $PHONE_NUMBER $INPUT
else
echo 'Вы должны указать номер телефона!'
false
fi
}
}
Существует экспериментальный сервис, который позволит вам послать сообщение по электронной почте в котором находится что-то что вы хотите напечатать, так что содержимое этого письма появится на факс-машине в другом месте. Поддерживаются форматы подобные postscript, так что даже если глобальный охват является неоднородным, то, это все равно может быть очень полезным сервисом. Для более детальной информации о печати через сервис удаленной печати, смотрите Remote Printing WWW Site.
Здесь мы перейдем к реальному программному обеспечению. По существу Linux может запускать много типов исполнимых файлов с разной степенью удачи: Linux/x86, Linux/Alpha, Linux/Sparc, Linux/foo, iBCS, Win16/Win32s (при помощи dosemu и, иногда, с Wine), Mac/68k (через Executor), я Java. Я буду просто обсуждать родное для Linux и общее для Unix программное обеспечение.
Для самого Linux, выбор довольно ограничен теми продуктами доступными в общем для Unix:
Большинство языков разметки лучше подходят для больших или повторяющихся проектов, где вы хотите чтобы компьютер контролировал компоновку текста, чтобы сделать ее единой.
nroff
Этот один из первых языков разметки
Unix. Справочные страницы -- это наиболее общий пример вещей
отформатированных с использованием макросов *roff; много людей
"ругаются" на нем, но nroff имеет, по крайней мере для меня,
более тайный синтаксис чем необходимо, и вероятно делает бедный
выбор для новых работ. Это стоящее знание, хотя вы можете
печатать справочные страницы прямо в postscript с помощью
groff. Большинство команд man будут делать это для вас с помощью
man -t foo | lpr
.
TeX, и макро-пакет LaTeX, это один из наиболее широко
применяемых языков разметки в Unix. Технические работы часто
написаны в LaTeX, потому-что он сильно упрощает создание
компановки и это все еще одна из нескольких систем обработки
текста, которая поддерживает математику и хорошо и
полностью. Выходной формат TeX это dvi
, и он конвертируется
в PostScript или Hewlett Packard PCL при помощи dvips
или
dvilj
. Если вы желаете установить TeX или LaTeX, установите
всю группу пакетов teTeX; они содержат все необходимое. Недавние
версии TeX включают в себя pdfTeX и pdfLaTeX, которые сразу могут
создавать файлы Adobe PDF. Доступны команды создания ссылок и
возможностей навигации в файле PDF.
Существует по крайней мере один свободный обработчик (parser) sgml доступный для Unix и Linux; его форма это основа системы документации Linuxdoc-SGML. Он может также поддерживать другие DTD, из которых самым примечательным является DocBook.
Некоторые люди предполагают, что для отдельных проектов может быть достаточно писать их в HTML и печатать используя Netscape. Я не согласен с этим, но это YMMV.
В настоящее время больше нет недостатка в WYSIWYG программном обеспечении для обработки текстов. Доступно несколько полных офисных наборов, включая один, который свободен для персонального использования (StarOffice).
Sun Microsystems свободно распространяет по сети StarOffice для Linux. Полный офисный набор имеет все возможности которые вы ожидаете и вы можете не беспокоится об оплате. Существует mini-HOWTO, где описывается как получить и установить этот пакет. Он генерирует на выходе PostScript или PCL, так что он должен работать с большинством принтеров в Linux; это вероятно два равноправных факта!
Компания Corel свободно распространяет базовую версию Word Perfect 8 для Linux, и предполагается, что компания также будет распространять Corel Draw и Quattro Pro, когда они будут перенесены под linux. Вероятно это наилучший выбор, если у вас ARM машина; Corel делает основанные на ARM компьютеры Netwinder Linux и и почти всегда предлагает ARM Linux версии всех своих продуктов. Вы можете также купить полную версию программ и поддержку этих программ, вместе или по отдельности. Страница Шрифты и принтера для Linux WordPerfect имеет информацию о настройке WordPerfect для использования либо Ghostscript либо его встроенных драйверов принтеров (которые очевидно похожи на драйвера принтеров DOS WordPerfect, в том случае если драйвер вашего принтера не включен в дистрибутив WP8).
Applix это многоплатформенный оффисный набор (например, разные типы юниксов, Windows и другие платформы), продаваемый фирмой Applix. Red Hat и SuSE продавали их, когда это было лишь "игрой в города"; сейчас продажу опять осуществляет Applix.
AbiWord является одной из нескольких GPL проектов по созданию WYSIWYG текстового процессора; этот проект создал очень хороший текстовый процессор, основанный на формате XML и с возможностями импорта файлов Word. (Но у него пока проблемы с русским языком, в том числе и с импортом русских файлов Word. прим. переводчика).
LyX это надстройка для LaTeX, которая выглядит очень многообещающей. Смотрите Домашнюю страницу LyX для более детальной информации. Также существует версия LyX сделанная в стиле KDE, она называется Klyx; автор LyX и зачинщик проекта KDE -- это одна и та же персона.
Maxwell это простой текстовый процессор, базирующийся на формате MS RTF, который был начат как коммерческий продукт, но сейчас распространяется под действием лицензии GPL.
AUIS включает ez
, редактор WYSIWYG-стиля
с основными возможностями систем обработки текста, возможностями
для работы с HTML и полную поддержку MIME электронной почты и
групп новостей. К сожалению AUIS больше не сопровождается.
Проект KDE работает в направлении полного набора офисных программ. Я думаю, что он не будет готов в ближайшее время. Текстовый процессор несомненно будет потомком программы LyX.
Проект GNOME также работает в направлении создания офисных программ лицензированных по лицензии GNU. Хотя еще ничего не доступно.
Другие поставщики могут свободно посылать мне информацию о своих предложениях.
Существует много деталей для получения нормального вывода фотографий с распространенных принтеров.
Ghostscript имеет некоторые затруднения при рендеринге фотографий на большинстве драйверов. Существует несколько проблем:
У вас должна быть возможность исправления некоторых из этих проблем путем настройки Ghostscript; для получения информации о том как это сделать смотрите раздел о Ghostscript данного документа. Работать с ключами Ghostscript намного легче, если вы объявите их как ключи в объявлении драйвера PDQ.
Было сказано, что очевидным решением будет использование не-Ghostscript программного обеспечения для печати фотографий и в самом деле такие вещи существуют.Главным соперником является модуль печати в Gimp, который поддерживает пиксел-в-пиксел печать на принтерах Epson Stylus и принтерах, поддерживающих Postscript (с базовой поддержкой PPD). Скоро этот драйвер также будет доступен для Ghostcript. Также возможно для этой цели использовать разные внешние программы pnm-в-foo, используемые для печати на таких принтерах, как например дешевые модели Lexmark; они печатают битовые карты пиксел-в-пиксел. Ключ print-via-filter не так сложно добавить в Gimp.
Конечно Наилучшим решением будет покупка принтера, понимающего Postscript; такие принтера обычно могут полностью контролироваться доступным свободным программным обеспечением, и будут использовать все возможности принтера.
Цветные струйные принтера сильно зависимы от качества бумаги для получения хорошего качества вывода. Дорогая глянцевая бумага с покрытием, для струйных принтеров позволит вам добиться печати с близким к фотографии качеством, в то время как обычная бумага станет причиной тусклых красок и неясных деталей. Не-глянцевая бумага с покрытием позволит вам получить вывод среднего качества и вероятно лучше всего подходит для печати текста. Негибкая глянцевая бумага с покрытием позволит получить результат, сходный с более легкой глянцевой бумагой, но будет выглядеть как обычная фотография.
Для вывода с фото-качеством на большинство цветных струйных принтеров, вы должны использовать высоко-строчный (и самый медленный) режим печати; иначе сплошные области могут иметь полосы или плохие цвета. При работе с Ghostscript это можно сделать, выбрав самое большое разрешение. На Postscript-принтерах, вам может быть будет нужно добавить код в пролог базирующийся на настройках доступных в файле PPD. Поддержка PPD в Gimp не включает в себя настройку качества печати, но я добавил ее сам для моего личного использования; если вы хотите сделать то же самое, то свяжитесь со мной. Если вы используете PDQ, то вы можете легко добавить все настройки принтера, в которых в нуждаетесь в файл объявления драйвера; для принтеров понимающих PJL это достаточно легко, а для Postscript-принтеров может помочь моя утилита ppdtopdq.
Результат печати на цветных струйных принтерах теряет четкость всего после нескольких лет, особенно если подвергается длительному воздействию света и воздуха; это происходит и-за чернил. Для принтеров у которых расходными материалами являются только чернила, таких как принтера Epson и Canon, можно купить архивные чернила, которые в меньшей степени подвержены данной проблеме.
Существует программа, названная xwtools, которая поддерживает фото-печать со всеми звоночками и свистелками на ряде принтеров Epson, HP и Canon. К сожалению она была написана под действием NDA, так что поставляется без исходных текстов. За исключением ее использования для Epson Stylus Color 300 на Linux x86, она стоит 15 евро для персонального использования; коммерческая цена неизвестна.
Пакет ESP Print Pro компании Easy Software поддерживает много принтеров, которые иначе не поддерживаются. К сожалению поскольку этот пакет базируется на Ghostscript 4.03, я не ожидаю от него хороших результатов при печати фотографий. Но кто-нибудь должен попробовать.
Почти все что вы можете напечатать вы также можете просмотреть на экране.
Ghostscript имеет драйвер для X11, который лучше всего используется под управлением просмотрщика PostScript, называемого Ghostview. Последние версии этих программ также должны уметь просматривать файлы PDF. Заметим, что gv заменил более старый просмотрщик "Ghostview"; новый интерфейс пользователя более приятный и функциональный чем линейный интерфейс ghostview на основе старого Athena gui.
Независящие от устройства (DeVice Independant) файлы TeX могут быть просмотрены под X11 с помощью xdvi. Современные версии xdvi вызывают ghostscript для обработки специальных вставок PostScript.
Также существует драйвер VT100. Он называется
dgvt
. Tmview
работает с Linux и svgalib, если надо вы
можете работать с ним.
Adobe Acrobat Reader доступен для Linux; просто загрузите его с сервера фирмы http://www.adobe.com/.
Вы также можете использовать xpdf, который является freeware и идет с исходными текстами, и я думаю сейчас Ghostview поддерживает просмотр файлов PDF при помощи gs под X11.
Последовательные принтера редко используются с lpd.
Lpd обеспечивает пять атрибутов, которые вы можете установить в
/etc/printcap для контроля всех установок принтера на
последовательном порту. Читайте справочную страницу
printcap
и отметьте значение атрибутов br#, fc#,
xc#, fs# and xs#. Последние четыре из
этих атрибутов являются битовыми картами показывающими установки
для использования портом. Атрибут br# это просто скорость
передачи в бодах, например `br#9600
'.
Очень легко переводить из установок stty в установки флагов printcap. Если вам необходимо, то смотрите справочную страницу stty.
Используйте stty для настройки порта принтера, так что вы сможете выполнить копирование файла на него и получить правильно напечатанный файл. Здесь приводятся данные того, что `stty -a' показывает для моего принтерного порта.
dina:/usr/users/andy/work/lpd/lpd# stty -a < /dev/ttyS2
speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr
-igncr -icrnl ixon -ixoff -iuclc -ixany -imaxbel
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0
bs0 vt0 ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase
-tostop -echoprt -echoctl -echoke
Разница между этим и тем способом которым порт инициализируется
при загрузке во флагах -clocal
, -crtscts
, and
ixon
. Настройки вашего порта могут отличаться в зависимости от
того как ваш принтер делает контроль потока.
В действительности вы используете stty странным способом. Так
stty работает с терминалами, подключенными к его стандартному
вводу, вы используете его для манипуляций с заданным
последовательным портом используя символ `<
' как показано
выше.
После того как вы правильно установили настройки stty, так что `cat file > /dev/ttyS2' (в моем случае) посылает файл на принтер, посмотрите в файл /usr/src/linux/include/asm-i386/termbits.h. Этот файл содержит некоторое количество #defines и несколько структур (вы можете захотеть напечатать этот файл на принтере (он у вас работает, не так ли?) и использовать его как черновик). Перейдите в раздел который начинается с:
/* c_cflag bit meaning */
#define CBAUD 0000017
Этот раздел перечисляет значение битов fc# и fs#. Вы будете уведомлены, что имена здесь (после скорости передачи) соответствуют одной из строк вывода stty. Не я ли сказал что все будет легко?
Заметим какая из этих настроек начинается с a
-- в
вашем выводе stty. Просуммируем все эти числа (они в восьмеричном
представлении). Это представляет собой биты которые вы хотите
очистить, так что результатом будет ваше свойство
fc#. Конечно помните что вы будете устанавливать биты
прямо после очистки, так что вы можете просто использовать
`fc#0177777
' (я так делаю).
Теперь сделаем это для тех установок (перечисленных в этом
разделе) которые не имеют a
в начале -- в вашем выводе
stty. В моем примере самые важные это CS8 (0000060), HUPCL
(0002000), и CREAD (0000200). также заметим флаги для вашей
скорости передачи (мои равны 0000015). Сложим их все, и в моем
примере получим 0002275. Это идет как ваше свойство fs#
(`fs#02275
' великолепно работает в моем примере).
Сделайте тоже самое с установкой и очисткой для следующего
раздела включаемого файла, "c_lflag bits". В моем случае я не
устанавливал ничего, так что я просто использовал
`xc#0157777
' и `xs#0
'.
Jon Luckey указал, что некоторые старые последовательные
принтера с десятицентовым последовательным интерфейсом и маленькими
буферами действительно останавливаются когда используется
контроль потока. Он нашел, что запрещение FIFO для
последовательного порта 16550 его Linux-машины с помощью
setserial
исправило проблему потерянных символов (вы по всей видимости можете
просто указать тип uart как 8250 чтобы сделать это).
Специальная благодарность Jacob Langford, автору pdq
, кто
дал нам нечто лучшее, чем небольшое число скриптов, сгруппированных
вокруг программы контроля линейной печати.
Информация о smbprint
из статьи Marcel Roelofs
<marcel@paragon.nl>
.
Информация о nprint
для использования принтеров Netware была
дана Michael Smith <mikes@bioch.ox.ac.uk>
.
Раздел о последовательных принтерах под lpd от Andrew Tefft
<teffta@engr.dnet.ge.com>
.
Данные о гаммах и прочих вещах для gs были посланы Andreas
<quasi@hub-fue.franken.de>
.
Два параграфа о о 30-ти секундной задержке (closing_wait)
последовательного драйвера были присланы Cris Johnson
<cdj@netcom.com>
.
Robert Hart послал несколько великолепных параграфов об установке сервера печати на сетевых принтерах HP, которые я использовал без изменений.
И специальное спасибо десяткам тех, кто в течении года указывал на типографские опечатки, неправильные ссылки и ошибке в документе.