Использование печати в Linux

1. Введение

Этот документ описывает как использовать линейную систему принтерного спулинга поставляемую с операционной системой Linux. Этот документ является supplementary документом к Linux Printing Setup HOWTO, который обсуждает установку и настройку системы печати Linux. Материал представленный в этом документе должен быть также правильным для всех семейств операционых систем серии BSD в добавлении к операционной системе Linux.

2. Печать под Linux

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

2.1 История Linux Printing

Система печати Linux;-- lp система;-- это порт исходного кода написанного в Университете Калифорнии для BSD версии операционной системы UNIX.

2.2 Печать файлов используя lpr

Наиболее простой путь для печати в операционной системе Linux это посыл файла для печати прямо на устройство печати. Для того чтобы сделать это используется команда cat. Как пользователь root, наберите что-то подобное этому

# cat thesis.txt > /dev/lp

В этом случае, /dev/lp это символическая ссылка на устройство печати;-- это может быть матричный или лазерный принтер, typesetter, или плоттер. (См. ln(1) для более полной информации о символических ссылках)

В целях безопасности, только пользователь root и пользователи в той же группе что и демон принтера могут писать прямо на принтер. Поэтому такие команды как lpr, lprm, and lpq должны использоваться для доступа к принтеру.

Поэтому пользователи должны использовать lpr для печати файлов. Команда lpr берет на себя заботы о всей начальной работе необходимой для печати файла, и затем передает контроль другой программе, lpd, демону линейной печати. Затем демон линейной печати говорит принтеру как печатать файл.

Когда выполняется команда lpr, она первым делом копирует заданный файл в определенную директорию (spool directory), где файл остается пока lpd печатает его. Когда lpd сообщают, что есть файл для печати, он запускает копию своего процесса (что программисты называют forking). Эта копия процесса будет печатать наш файл в то время как оригинальный процесс будет ждать других запросов. Это позволяет обслуживать много заданий печати в одно время.

Синтаксис lpr(1) очень прост,

$ lpr [ опции ] [ имя_файла ... ]

Если имя_файла не задано, lpr ожидает ввод данных со стандартного вводаexpects (обычно клавиатура, или вывод другой программы). Это позволяет пользователям перенаправлять вывод комманд в очередь печати. Вот так,

$ cat thesis.txt | lpr

или,

$ pr -l60 thesis.txt | lpr

Команда lpr принимает несколько аргументов командной строки что позволяет пользователям контролировать его работу. Вот некоторые из часто используемых аргументов: -Pprinter определяет какой принтер использовать, -h suppresses printing of the burst page, -s создает символическую ссылку вместо копирования файла в директорию спула (полезно для больших файлов), и -#num определяет количество копий печати. Пример взаимодействия с lpr может выглядеть подобно этому

$ lpr -#2 -sP dj thesis.txt

Эта команда создает символическую ссылку на файл thesis.txt в директории спула для принтера названного dj, где он будет обработан демоном печати lpd. Затем будет напечатана вторая копия файла thesis.txt.

Для просмотра всех опций, которые может принимать lpr, смотрите мануал по lpr(1).

2.3 Просмотр очереди печати с помощью lpq

Для просмотра содержимого очереди печати используется команда lpq. Команда запущенная без аргументов, она возвращает содержимое очереди печати принтера по умолчанию.

Вывод возвращаемый lpq может быть полезен для многих целей.

$ lpq
lp is ready and printing
Rank   Owner      Job  Files                            Total Size
active mwf        31   thesis.txt                       682048 bytes

2.4 Отмена задания печати с использованием команды lprm

Другое полезное свойство любой системы печати это возможность отмены задания, которое было перед этим помещено в очередь. Чтобы сделать это используйте команду lprm.

$ lprm -

Показанная выше команда отменяет все задания печати владельцем котрых является пользователь выполнивший эту команду. Для того чтобы отменить одиночное задание печати, надо сначала получить номер задания с помощью команды lpq и затем сообщить полученный номер команде lprm. Например,

$ lprm 31

отменит задание номер 31 (thesis.txt) на принтере по умолчанию.

2.5 Контроль демона lpd с помощью lpc

Программа lpc(8) используется для контроля принтеров, которые обслуживает демон lpd. Вы можете разрешать или запрещать использование принтера или их очередей, перераспределять задания внутри очереди, и получать информацию о состоянии принтеров и их очередей. Lpc наиболее часто используется в системах, где несколько принтеров установлено на одну машину.

$ lpc

Команда показанная выше запускает программу lpc. По умолчанию, она входит в интерактивный режим и вы можете начинать вводить команды. Другие опции используются для запуска команды lpc в командной строке.

$ lpc status all

Список всех возможных команд перечислен на странице руководства команды lpd, но здесь перечислено несколько главных команд, которые вы должны знать. Любые команды обозначенные как option могут быть либо именем принтера (lp, print, etc) или ключевым словом all, которое обозначает все принтера.

disable option - запрещает добавление любых новых заданий печати

down option - запрещает все задания на принтере

enable option - разрешает ввод новых заданий в очередь печати

quit (or exit) - покинуть lpc

restart option - перезагрузить lpd для данного принтера

status option - статус печати принтера

up option - разрешить все и стартовать новый демон lpd

2.6 Использование printtool в RedHat

Небольшое замечание here on RedHat's amazing printtool program.

Она умеет делать все, что должен делать magicfilter. RedHat уже установил много программ для использования фильтров. Здесь показано как установить принтер HP LJ 4L, подключенный к параллельному порту, в RedHat 4.0 (эта процедура должна быть одинаковой для всех версий RH).

Войдите как root и запустите printtool (если вы используете команду su, вы должны установить SETENV DISPLAY :0.0 и xhost +).

Щелкните кнопку "Add" ("Добавить"), и нажмите "OK" для локального принтера.

Заполните поле именем устройства печати (например /dev/lp1)

Заполните поле входного фильтра - Выберите тип принтера, разрешение и размер бумаги (ljet4, 300x300 и letter для нашего примера)

Нажмите "OK", и перезапустите lpd.

Подобным образом исправляя файл /etc/printcap вручную, вы можете иметь множество определений принтера для каждого физического принтера. Каждое для различных размеров бумаги, разрешений и т.п.

3. Печать файлов

Этот раздел охватывает печать разных типов файлов, с которыми вы встретитесь при работе на Linux.

3.1 Печать графических файлов

Печать графических файлов на принтере обычно зависит от типа графического файла и типа принтера на котором вы хотите печатать. Обычно о матричных принтерах речь не идет ввиду различий в методах обработки графики. Лучший выход в этой ситуации;-- убедится, что принтер совместим с Epson-принтерами или с IBM ProPrinter, затем сконвертировать графические файлы в PostScript, и затем воспользоваться программой Ghostscript (см. следующий раздел) для печати графики.

Если вы имеете лазерный принтер, это намного легче так как многие совместимы с языком PCL. Это дает возможность выбора. Некоторые программы могут делать вывод напрямую в PCL. Если нет, то программы подобные NetPBM могут преобразовывать PCL. Последняя возможность;-- использовать ghostscript (см. следующий раздел).

Наиболее лучший выбор;-- установка пакетов подобных NetPBM и Ghostscript, затем установить фильтр для обработки графических файлов автоматически.

3.2 Печать PostScript файлов

Печать PostScript файлов на принтере, который имеет интерпретатор PostScript'а очень проста; используйте lpr, и принтер сам позаботится о всех деталях. Для тех, кто не имеет принтеры с интерпретаторами PostScript, мы обратимся к другим средствам. К счастью, доступны программы, которые могут читать PostScript, и транслировать его в язык, который будут понимать большинство принтеров. Вероятно наиболее известной программой является Ghostscript.

Ответственностью Ghostscript'а является преобразование всех описаний в PostScript-файле в комманды, которые поймет принтер. Для печати PostScript-файла используя Ghostscript, вы должны сделать что-то подобное этому

$ gs -dSAFER -dNOPAUSE -sDEVICE=deskjet -sOutputFile=\|lpr thesis.ps

Заметим, что в вышеприведенном примере мы перенаправляли вывод Ghostscript на устройство lpr используя опцию -sOutputFile.

Ghostview;-- это надстройка к Ghostscript для системы X Window. Это позволяет просматривать PostScript-файлы до того как печатать их. Ghostview и Ghostscript оба могут быть взяты с ftp://prep.ai.mit.edu/pub/gnu/.

3.3 Печать PDF-файлов

Фирма Adobe выпустила Acrobat reader для Linux, и он доступен на домашней странице компании Adobe http://www.adobe.com. Его предшественник , xpdf, также доступен. Оба должны печатать на postscript устройстве.

3.4 Печать файлов TeX

Один из самых легких путей печати файлов TeX;-- это пробразовать их в PostScript и затем печатать их используя Ghostscript. Для того, чтобы сделать это сначала необходимо преобразовать TeX-файлы в формат известный как DVI (который остается независимым от устройства). Вы можете это сделать командами tex(1) или latex(1). Затем необходимо преобразовать DVI-файл в PostScript-файл используя программу dvips. Все это будет выглядеть подобно этому когда вынберете.

$ tex thesis.tex
$ dvips thesis.dvi

Сейчас вы готовы к печати результирующего PostScript-файла как описано выше.

3.5 Печать файлов отформатированных программой troff

$ groff -Tascii thesis.tr | lpr

или , если вы предпочитаете,

$ groff thesis.tr > thesis.ps

и затем печатать PostScript-файл как описано выше.

3.6 Печать страниц man

$ man man | col -b | lpr

Страницы man содержат предварительно отформатированные данные troff data, так что мы должны удалить любые подсвечивания, подчеркивания и прочее. Программа 'col' делает это великолепно, и мы перенаправим данные от программы man без использования команды more.

4. Разные заметки

Эти заметки не относятся к другим темам

4.1 Форматирование до печати

Так как большинство ASCII-файлов не форматировано для печати, полезно отформатировать их каким-то образом до того как они будут напечатаны. Это может включать помещение заголовка и номера страницы на каждой странице. Установка двойного интервала, создание отступов или печать файлов в несколько колонок. Общее решение для того чтобы сделать;-- использование препроцессора печати, такого как pr.

$ pr +4 -d -h"Ph.D. Thesis, 2nd Draft" -l60 thesis.txt | lpr

В примере выше, pr должен взять файл thesis.txt Пропустить первые три страницы (+4), установить длину страницы в 60 строк (-l60), выводить с двойным интервалом (-d), и добавить фразу "Ph.D. Thesis, 2nd Draft" к заголовку каждой страницы (-h). Lpr должен затем поместить в очередь вывод программы pr. Смотри справочные страницы для получения большей информации о использовании pr.

4.2 Переменная среды PRINTER

Все команды в системе печати Linux принимают опцию -P. Эта опция позволяет пользователю указать какой принтер использовать для вывода. Если пользователь не указал какой принтер использовать, тогда будет использоваться устройство по умолчанию.

Вместо указания какой принтер использовать когда вы печатаете, вы можете установить переменную среды PRINTER со значением имени принтера, который вы хотите использовать. Это делается по разному для каждого из командных процессоров. Например для bash вы можете сделать это следующим образом

$ PRINTER="printer_name"; export PRINTER

а для csh, это делается так

% setenv PRINTER "printer_name"

Эти команды могут быть помещены в ваш сценарий входа (.profile для bash, или .cshrc для csh), или выполнены из командной строки. (Смотрите bash(1) и csh(1) для большей информации о переменных среды).

5. Ответы на Часто Задаваемые Вопросы FAQ

В1. Как я могу избавиться от ступенчатого эффекта?

О1. Ступенчатый эффект возникает потому-что некоторые принтера ожидают завершения линии. Некоторые принтера требуют линий, которые заканчиваются последовательность возврат каретки/перевод строки (стиль DOS) вместо перевода строки, который используется в UNIX. Наиболее легкий путь для решения этой проблемы;-- это посмотреть умеет ли ваш принтер между этими двумя стилями;-- либо переключением DIP-переключателя, или посыланием специальной последовательности при старте каждого задания. Чтобы сделать это последним способом, вам необходимо создать фильтр (В2)

Быстрое исправление;-- использование фильтра в командой строке. Пример этого может быть таким.

$ cat thesis.txt | todos | lpr

В2. Что такое фильтр?

О2. Фильтр;-- это программа, которая читает со стандартного ввода (stdin), выполняет некоторые действия над этим вводом, и пишет на стандартный вывод (stdout). Фильтры используются для многих вещей, включая обработку текста.

В3. Что такое magic фильтр?

О3. magic фильтр;-- это фильтр который выполняет действия в зависимости от типа файла. Например, если файл;-- это простой текстовый файл, то он будет просто печатать файл, используя нормальные методы. Если файл;-- это PostScript-файл, или любого другого формата, он должен печатать его используя другой метод (ghostscript). Двумя примерами этих фильтров являются magicfilter и APSfilter. Одно требование этих фильтров;-- чтобы нужные программы были установлены до установки фильтра.

Причина этого в том, что когда фильтр устанавливается, он опрашивает вышу систему о нужных программах (таких как ghostscript - если он находит его, тогда он знает как обрабатывать данные в формате PostScript), а затем строит себя в зависимости от того какие программы он нашел. Для обработки всех печатаемых файлов, вы должны установить по крайней мере:

GhostScript

TeX

NetPBM

jpeg utilities

gzip

В4. Система печати Windows. Будет Linux работать с ней?

О4. Может быть. Принтера, которые воспринимают только команды WPS не будут работать с Linux. Принтрера, которые принимают WPS и другие команды (такие как Canon BJC 610) будут работать, пока они установлены в что-то другое чем формат WPS. Другие принтера, такие как некоторые HP DeskJet 820Cxi/Cse, не будут работать с Linux. Как было сказано, Linux может работать как сервер печати (См. Samba) для машин под Win95, так как Win95 имеет драйвера для печати на них

В5. Я не могу напечатать больше 6 страниц или иначе я получаю соообщение об ошибке "file too large (файл слишком большой)".

В5. Одна из опций в файле /etc/printcap относится к максимальному размеру печатаемого файла. По умолчанию она равна 1000 дисковых блоков (около 500 кБ). Для файлов PostScript и подобных, это будет давать 6-8 страниц с графикой и все. Убедитесь, чт одобавили следующую строку в определение принтера.

mx=0

Основная цель этого;-- сохранить раздел спула от заполнения. Есть другой путь избавится от этого, заставляя lpr создавать символическую ссылку из директории спула на ваш файл. Но не забудте добавлять ключ -s к lpr каждый раз.

6. Решение проблем

Этот раздел посвящен некоторым общим вещам, которые могут неправильно работать в вашей системе печати.

Если ваш принтер не работает:

Друние задания работают? (проблема в приложении?)

lpd запущен? (проверить это используя lpc) (контролер печати?)

root может послать что-нибудь прямо на принтер? (сервис печати?)

Можете вы печатать из под DOS? (проблема в кабеле/принтере?)

Ответы на эти вопросы могут помочь найти решение. Посылайте другие советы для этого раздела <markk@auratek.com>.