Подключение принтера

Компьютер без принтера сегодня представляется каким-то полуфабрикатом. А резкое падение цен на матричные, струйные и лазерные принтеры в течение последних двух лет способствуют массовому распространению технологии “персональной печати”. Конечно, первая мысль, ассоциируемая с принтером сегодня — это MS Word. Однако, как я постараюсь показать, Linux предоставляет пользователю более широкие возможности по управлению ресурсами принтера, чем мы привыкли видеть в Windows.

Первое подключение устройства печати

Прежде всего нам необходимо убедиться, что Linux видит ваш принтер. Как правило, принтер подключается к единственному параллельному порту компьютера, который размещается либо на плате устройств ввода/вывода, либо непосредственно на материнской плате компьютера. Но “по теории” IBM PC может поддерживать до четырех параллельных портов, и в Linux им соответствуют символьные устройства /dev/lp0 — /dev/lp3.
Поэтому первый ваш шаг состоит в проверке — есть ли в вашей системе соответствующие устройства. Если нет, их придется создать самостоятельно. Для этого учтем, что во-первых, устройства в UNIX являются просто специальными файлами, которые можно создать с помощью программы mknod, а во-вторых, за параллельными портами зарезервированы номера устройств — старшее 61 и младшие с 0 до 3 и соответствуют номеру устройства.
Вот синтаксис команд mknod для всех параллельных портов, поддерживаемых Linux (в скобках приведены базовые адреса портов ввода/вывода):


mknod /dev/lp0 c 6 0		(0x3BC)
mknod /dev/lp1 c 6 1 (0x378)
mknod /dev/lp2 c 6 2 (0x278)
mknod /dev/lp3 c 6 3 (0x......)

Обратите внимание на адреса портов! Как правило, в составе IBM PC входит порт с адресом 0x378, который соответствует не /dev/lp0, а /dev/lp1. И если вы по привычке будете соотносить “первый” порт DOS с “нулевым” портом UNIX, то искать причину неисправности вам придется довольно долго. Как же избежать этой ошибки?
Наиболее простой путь состоит в экспериментальной проверке конфигурации. Во-первых, вы можете воспользоваться утилитами из DOS типа sysinfo или MSD, а во-вторых, можете просто попытаться “выбросить на печать” текущий каталог, например:


ls -l > /dev/lp0

Если порта lp0 на вашей машине нет вы получите сообщение:


? /dev/lp0 unknown device

после чего вы можете попробовать использовать другое устройство. Если же все в порядке, то на принтер будет выведена “лесенка” примерно следующего вида2 :


	This is 1 line
		This is 2 line
    	This is 3 line

Причина этого явления состоит в том, что ориентированные для работы в DOS принтеры требуют для завершения строки два символа — возврата каретки (0x13) и перевода строки (0x10). А вот UNIX традиционно обходится одним символом — <LF>3.
Бороться с этим неприятным эффектом вы можете двумя способами — либо отключить режим раздельного управления <CR> и <LF> — в этом случае принтер будет распознавать приход любого из этих символов как команду перейти к новой строке. Этот режим поддерживает большинство современных моделей принтеров, но его целесообразно использовать лишь в том случае, если вы используете только Linux. Если же вам приходится время от времени обращаться к старушке DOS, целесообразно использовать специальные программы-фильтры, о которых речь пойдет ниже. А сейчас, после того, как мы убедились в работспособности принтера, мы организуем поддержку системных средств печати, общепринятых для UNIX.

Поддержка принтера в ядре Linux

Устанавливая систему вы наверняка позаботились о поддержке принтера. Если нет, то самое время перекомпилировать ядро системы. При этом вы должны позаботиться о следующем:

  1. необходимо включить поддержку принтера (printer support);
  2. необходимо включить сетевую поддержку (network support) вне зависимости от наличия у вас сетевой карты;
  3. необходимо отключить поддержку параллельного IP-интерфейса (PLIP), который использует порт Centronics для организации канала обмена между двумя машинами. Этот драйвер будет конфликтовать с принтером и не позволит вам выводить данные на печать.

Драйвер печати в ядре системы

Собственно говоря, никакого специального драйвера принтера в системе нет, есть всего лишьдрайвер параллельного порта Centronics, который входит в состав практически любого параллельного принтера. При этом принтер может подключаться как к любому последовательному порту, так и к параллельному. Последовательный интерфейс, по большому счету, используется единый и принтер выступает в роли однонаправленного терминала, использующего линии /dev/ttys, и подчиняется всем правилам работы с этими портами. Мы же рассмотрим именно особенности реализации /dev/lp.
При определении любого драйвера внешнего устройства определяется по меньшей мере два параметра: область адресов, занимаемых устройством в пространстве ввода/вывода и вектор аппаратного прерывания. С адресами мы вроде бы разобрались... А вот что касается векторов прерываний, то здесь вас ждет сюрприз. Фирма IBM при разработке еще самой первой IBM PC зарезервировала за параллельным портом LPT1 вектор прерывания IRQ7. Но Microsoft, видимо и не предполагала об этом, поскольку драйвер устройства печати в DOS не использует этого вектора, ограничиваясь периодическим опросом бита готовности принтера к приему следующего байта данных. Такой режим опроса, кстати, получил название polling mode и вы с ним можете столкнуться еще при анализе кода драйвера CD-ROM и не только там.
Увы, свято место пусто не бывает. И IRQ7 постепенно стал использоваться как один из основных векторов для звуковых плат. В результате и при разработке Linux пришлось отказаться от IRQ-ориентированного драйвера принтера, поскольку это могло бы привести к возникновению конфликта между устройствами4. Именно поэтому, в Linux реализована не слишком эффективная схема построения драйвера, что впрочем, не слишком снижает производительность подсистемы печати в целом.

Системное управление принтером

В операционной систме UNIX, которая изначально разрабатывалась как средство для подготовки текстовой документации, управление принтером носит поистине “системный” характер. Прежде всего, любой процесс вывода на печать под управлением системы использует единый механизм, вне зависимости от количества и системы команд управления принтеров.
Для решения всех проблем печати используется несколько небольших программ: lpd — демон печати, осуществляющий вывод данных из каталога спулинга на устройство печати в соответствии с настройками конфигурационного файла /etc/printcap;
lprm — программа удаления заданий на печать из очереди по их номеру;
lpq — программа просмотра содержимого очереди на печать;
lpc — диалоговая программа управления состоянием принтера и очереди заданий на печать;
lpr — программа постановки заданий в очередь на печать.

Впрочем, давайте рассмотрим процесс печати по порядку...
На рисунке приведена общая схема организации процесса печати в UNIX-системах вообще, и в Linux, в частности. Прежде всего, с помощью программы lpr файл (или поток с устройства стандартного вывода) помещается в очередь заданий. Очередь заданий представляет собой обычный каталог, который имеет название типа /var/spool/lp/lp1 . Программа lpd периодически просматривает содержимое очереди и в случае, если находит задание, пытается его напечатать. Осуществляется это следующим образом:
Демон печати анализирует содержимое файла /etc/printcap и выбирает одну из записей, соответствующую текущему режиму работы принтера, включающему среди всего прочего, имена фильтров входного и выходного преобразований.

Какой принтер лучше?

Очевидно, что если вы устанавливаете Linux на компьютер, который уже несколько лет или месяцев стоит у вас на столе и уже оснащен принтерами, то выбирать не приходится — нужно запускать тот принтер, который у вас уже есть. Если же вы приобретаете или устанавливаете новый компьютер, целесообразно приобрести принтер, возможности которого будут использоваться системой в максимальной степени.
Поскольку одним из основных критериев при выборе принтера является его способность выводить на печать файлы в формате Postscript, то на первый взгляд предпочтительным кажется приобретение Postscript-принтера или хотя бы Postscript-карты. Но это все же необязательно. Достаточно использовать принтер, для которого реализована поддержка интерпретатора Postscript. В таблице приведен список устройств, которые поддерживаются интерпретатором Ghostscript, входяшим в состав большинства дистрибутивов Linux. Если ваш принтер совместим хотя бы с одной из перечисленных моделей — дело в шляпе!.

Код драйвера Тип принтера
appledmp Матричный принтерр фирмы Apple (Imagewriter)
bj10e Canon BubbleJet BJ10e
bj200 Canon BubbleJet BJ200
cdeskjet H-P DeskJet 500C в режиме малоцветной печати (1 bit/pixel color)
cdjcolor H-P DeskJet 500C в режиме TrueColor (24 bit/pixel color) и высококачественной закраски по Флойду-Штейнбергу
cdjmono H-P DeskJet 500C с печатью только черным цветом
cdj500 H-P DeskJet 500C (то же, что и cdjcolor)
cdj550 H-P DeskJet 550C
declj250 альтернативный драйвер для DEC LJ250
deskjet H-P DeskJet и DeskJet Plus
dfaxhigh Программный формат DigiFAX фирмы DigiBoard, Inc.
dfaxlow DigiFAX с низким (normal) разрешением
djet500 H-P DeskJet 500
djet500c H-P DeskJet 500C
epson Epson-совместимые матричные принтеры (9- or 24-игольные)
eps9high Epson-совместимые 9-игольные, тройное разрешение с чередованием строк
epsonc Цветные матричные принтеры Epson LQ-2550 и Fujitsu 3400/2400/1200
escp2 Принтеры Epson, оборудованные интерпретатором ESC/P 2, в том числе и Stylus 800
ibmpro IBM Proprinter, 9 иголок
jetp3852 IBM Jetprinter струйный цветной принтер (Model #3852)
laserjet H-P LaserJet
la50 DEC LA50
la75 DEC LA75
lbp8 Лазерный принтер Canon LBP-8II
ln03 DEC LN03
lj250 Цветной принтер DEC LJ250
ljet2p H-P LaserJet IId/IIp/III* с поддержкой TIFF-сжатия
ljet3 H-P LaserJet III* со сжатием Delta Row
ljet4 H-P LaserJet 4 (разрешение по умолчанию 600 dpi)
ljetplus H-P LaserJet Plus
m8510 C.Itoh M8510
necp6 NEC P6/P6+/P60 принтеры, разрешение 360 x 360 DPI
nwp533 Лазерный принтер Sony Microsystems NWP533 [Sony only]
oki182 Okidata MicroLine 182
paintjet Цветной принтер H-P PaintJet
pj Альтернтивный драйвер для PaintJet XL
pjxl Цветной принтер H-P PaintJet XL
pjxl300 Цветной принтер H-P PaintJet XL300
r4081 Лазерный принтер Ricoh 4081
sparc SPARCprinter
t4693d2 Цветной принтер Tektronix 4693d, 2 бита на R/G/B компонент
t4693d4 Цветной принтер Tektronix 4693d, 4 бита на R/G/B компонент
t4693d8 Цветной принтер Tektronix 4693d, 8 бит на R/G/B компонент
tek4696 Струйный плоттер Tektronix 4695/4696

1 Ах,эти магические числа! Шестой номер для устройства печати ведет свой путь из седой старины, и вы встретите его и в OS/360, и в RT-11 и во многих других системах.
2 Мы полагаем, что русификацией процесса печати займемся чуть позже.
3 Эта традиция также имеет давние корни - она восходит к тем временам, когда для получения "твердой копии" использовались электрифицированные печатные машинки. Для того времени замена одного нажатия на кнопку перевода строки и одного ручного "вжика" - возврата каретки в исходное положение на один управляющий символ, выполняющий обе операции, казалась небывалым достижением технического прогресса.
4Автор понимает неубедительность своих умозаключений: ведь в отличие от DOS и Windows модем на COM3 и мышка на COM1 не конфликтуют друг с другом, хотя и делят одно и то же прерывание. Впрочем, вы всегда можете отличиться, предложив новый драйвер параллельного порта, использующий IRQ. Всяко, это будет куда эффективнее, чем существующее решение!
5Понятно, что конкретное имя каталога зависит от версии системы и типа дистрибутива.
Назад Содержание Вперед