Использование печати в Linux, HOWTO by Mark Komarinski , перевод Alex Ott ott@phtd.tpu.edu.ru v1.2.2, 6 February 1998 ____________________________________________________________ Table of Contents 1. Введение 1.1 История Linux Printing HOWTO 1.2 История версий 1.3 Авторские права и торговые марки 1.4 Получение|загрузка the Linux Printing HOWTOs 1.5 Обратная связь 1.6 Благодарности 2. Печать под Linux 2.1 История Linux Printing 2.2 Печать файлов используя 2.3 Просмотр очереди печати с помощью 2.4 Отмена задания печати с использованием команды 2.5 Контроль демона lpd с помощью 2.6 Использование printtool в RedHat 3. Печать файлов 3.1 Печать графических файлов 3.2 Печать PostScript файлов 3.3 Печать PDF-файлов 3.4 Печать файлов TeX 3.5 Печать файлов отформатированных программой 3.6 Печать страниц 4. Разные заметки 4.1 Форматирование до печати 4.2 Переменная среды PRINTER 5. Ответы на Часто Задаваемые Вопросы FAQ 6. Решение проблем 7. Ссылки ______________________________________________________________________ ППррииммееччааннииее ппееррееввооддччииккаа:: Шлите мне любый комментарии и замечания, даже небольшие. 11.. ВВввееддееннииее Этот документ описывает как использовать линейную систему принтерного спулинга поставляемую с операционной системой Linux. Этот документ является supplementary документом к Linux Printing Setup HOWTO, который обсуждает установку и настройку системы печати Linux. Материал представленный в этом документе должен быть также правильным для всех семейств операционых систем серии BSD в добавлении к операционной системе Linux. 11..11.. ИИссттоорриияя LLiinnuuxx PPrriinnttiinngg HHOOWWTTOO Замечание от Mark Komarinski : Я хочу поблагадорить Matt Foster за сделанную работу в переписывании этого документа. Я сохраняю его стиль, и добавляю, когда это необходимо чтобы все было обновленным. Замечание : Эта версия Linux Printing HOWTO полностью переписана из оригинальной, созданной Grant Taylor и Brian McCauley . Я постарался сохранить охват материала представленного в документе Grant'а and Brian'а, но я решительно изменил стиль представления и глубину охватывающего материала. Я почуствовал, что это делает документ более полным и легким для чтения. Я могу надеятся, что вы согласны с этим. 11..22.. ИИссттоорриияя ввееррссиийй v1.2.2 ╥ Переиндексирован, изменения для помещения в новую документацию RedHat. Спасибо Ed! v1.2.1 ╥ Обновления, некоторые изменения для Dr. Linux publication v1.2 ╥ Windows Принтеры ╥ Изменения максимального размера печатных файлов v1.11 ╥ Новый координатор! ╥ Добавлена информация о lpc ╥ Добавлена некоторая информация о затруднениях ╥ Печать графических файлов! v1.1 ╥ исправлены некоторые формулировки ╥ Разработан раздел о PostScript-печати ╥ попытка внести ясность в некоторые примеры 8-) ╥ fleshed the обсуждение базовых утилит печать Linux v1.0 ╥ Первый публичный выпуск Printing Usage HOWTO 11..33.. ААввттооррссккииее ппрраавваа ии ттооррггооввыыее ммааррккии Некоторые имена в этом документе обьявлены как авторские права и/или торговые марки некоторых персон и/или компаний. Эти имена представлены полностью или начальными буквами в этом документе. _(_c_) _1_9_9_5 _M_a_t_t _F_o_s_t_e_r _(_m_w_f_@_e_n_g_r_._u_a_r_k_._e_d_u_) _(_c_) _1_9_9_6_-_1_9_9_7 _M_a_r_k _F_. _K_o_m_a_r_i_n_s_k_i _(_m_a_r_k_k_@_a_u_r_a_t_e_k_._c_o_m_) Все переводы, производные или собирательные работы включающие любые документы серии Linux HOWTO должны быть охвачены этим извещением об авторских правах. Так что вы можете не проводить производные работы из этих документов и облагать дополнительные ограничения на их распространение. Исключение из этих правил может быть предоставлено при определенных обстоятельствах; пожалуйста свяжитесь с координаторм серии Linux HOWTO по адресу указаному ниже. Мы желаем продвигать распространение этой информации через максимально возможное число каналов. Однако мы желаем оставить авторские права на HOWTO документы, и также хотим быть предупрежденными о любых планах распространения документов серии HOWTO. Если вы имеете вопросы, пожалуйста свяжитесь с Tim Bynum, координатором Linux HOWTO, по адресу . Вы можете связаться по этому адресу для получения телефонных номеров и дополнительной контактной информации. 11..44.. ППооллууччееннииее||ззааггррууззккаа tthhee LLiinnuuxx PPrriinnttiinngg HHOOWWTTOOss Я рекомендую, что если вы хотите напечатать копию этого документа, то загрузите PostScript версию. Она отформатирована в эстетической форме и легка для чтения. Вы можете получить PostScript версию с одного из многих сайтов распространяющих Linux (таких как SunSITE ). 11..55.. ООббррааттннааяя ссввяяззьь Вопросы, комментарии или исправления для этого документа могут быть направлены к . 11..66.. ББллааггооддааррннооссттии Спасибо всем людям, у кого было время для чтения альфа версии этого документа и ответили со множеством полезных комментариев и предложений -- некоторые из вас могут увидеть ваши комментарии отраженные в этой версии. Я также признателен thank Matt Foster, который сделал оригинальную перепись текста. 22.. ППееччааттьь ппоодд LLiinnuuxx В этом разделе обсуждается как печатать файлы, проверять очередь печати, удалять задания из очереди, форматировать файлы до их печати и производить настройку среды печати. 22..11.. ИИссттоорриияя LLiinnuuxx PPrriinnttiinngg Система печати Linux -- _l_p система -- это порт исходного кода написанного в Университете Калифорнии для BSD версии операционной системы UNIX. 22..22.. ППееччааттьь ффааййллоовв ииссппооллььззууяя llpprr Наиболее простой путь для печати в операционной системе Linux это посыл файла для печати прямо на устройство печати. Для того чтобы сделать это используется команда _c_a_t. Как пользователь root, наберите что-то подобное этому # cat thesis.txt > /dev/lp В этом случае, /dev/lp это символическая ссылка на устройство печати -- это может быть матричный или лазерный принтер, typesetter, или плоттер. (См. _l_n(1) для более полной информации о символических ссылках) В целях безопасности, только пользователь root и пользователи в той же группе что и демон принтера могут писать прямо на принтер. Поэтому такие команды как _l_p_r, _l_p_r_m, and _l_p_q должны использоваться для доступа к принтеру. Поэтому пользователи должны использовать _l_p_r для печати файлов. Команда _l_p_r берет на себя заботы о всей начальной работе необходимой для печати файла, и затем передает контроль другой программе, _l_p_d, демону линейной печати. Затем демон линейной печати говорит принтеру как печатать файл. Когда выполняется команда _l_p_r, она первым делом копирует заданный файл в определенную директорию (spool directory), где файл остается пока _l_p_d печатает его. Когда _l_p_d сообщают, что есть файл для печати, он запускает копию своего процесса (что программисты называют forking). Эта копия процесса будет печатать наш файл в то время как оригинальный процесс будет ждать других запросов. Это позволяет обслуживать много заданий печати в одно время. Синтаксис _l_p_r(1) очень прост, $ lpr [ опции ] [ имя_файла ... ] Если имя_файла не задано, _l_p_r ожидает ввод данных со стандартного вводаexpects (обычно клавиатура, или вывод другой программы). Это позволяет пользователям перенаправлять вывод комманд в очередь печати. Вот так, $ cat thesis.txt | lpr или, $ pr -l60 thesis.txt | lpr Команда _l_p_r принимает несколько аргументов командной строки что позволяет пользователям контролировать его работу. Вот некоторые из часто используемых аргументов: -PPprinter определяет какой принтер использовать, -hh suppresses printing of the burst page, -ss создает символическую ссылку вместо копирования файла в директорию спула (полезно для больших файлов), и -##num определяет количество копий печати. Пример взаимодействия с _l_p_r может выглядеть подобно этому $ lpr -#2 -sP dj thesis.txt Эта команда создает символическую ссылку на файл thesis.txt в директории спула для принтера названного _d_j, где он будет обработан демоном печати _l_p_d. Затем будет напечатана вторая копия файла thesis.txt. Для просмотра всех опций, которые может принимать _l_p_r, смотрите мануал по _l_p_r(1). 22..33.. ППррооссммооттрр ооччееррееддии ппееччааттии сс ппооммоощщььюю llppqq Для просмотра содержимого очереди печати используется команда _l_p_q. Команда запущенная без аргументов, она возвращает содержимое очереди печати принтера по умолчанию. Вывод возвращаемый _l_p_q может быть полезен для многих целей. $ lpq lp is ready and printing Rank Owner Job Files Total Size active mwf 31 thesis.txt 682048 bytes 22..44.. ООттммееннаа ззааддаанниияя ппееччааттии сс ииссппооллььззооввааннииеемм ккооммааннддыы llpprrmm Другое полезное свойство любой системы печати это возможность отмены задания, которое было перед этим помещено в очередь. Чтобы сделать это используйте команду _l_p_r_m. $ lprm - Показанная выше команда отменяет все задания печати владельцем котрых является пользователь выполнивший эту команду. Для того чтобы отменить одиночное задание печати, надо сначала получить номер задания с помощью команды _l_p_q и затем сообщить полученный номер команде _l_p_r_m. Например, $ lprm 31 отменит задание номер 31 (thesis.txt) на принтере по умолчанию. 22..55.. ККооннттрроолльь ддееммооннаа llppdd сс ппооммоощщььюю llppcc Программа _l_p_c(8) используется для контроля принтеров, которые обслуживает демон lpd. Вы можете разрешать или запрещать использование принтера или их очередей, перераспределять задания внутри очереди, и получать информацию о состоянии принтеров и их очередей. Lpc наиболее часто используется в системах, где несколько принтеров установлено на одну машину. $ lpc Команда показанная выше запускает программу lpc. По умолчанию, она входит в интерактивный режим и вы можете начинать вводить команды. Другие опции используются для запуска команды lpc в командной строке. $ lpc status all Список всех возможных команд перечислен на странице руководства команды _l_p_d, но здесь перечислено несколько главных команд, которые вы должны знать. Любые команды обозначенные как _o_p_t_i_o_n могут быть либо именем принтера (lp, print, etc) или ключевым словом all, которое обозначает все принтера. ╥ disable _o_p_t_i_o_n - запрещает добавление любых новых заданий печати ╥ down _o_p_t_i_o_n - запрещает все задания на принтере ╥ enable _o_p_t_i_o_n - разрешает ввод новых заданий в очередь печати ╥ quit (or exit) - покинуть lpc ╥ restart _o_p_t_i_o_n - перезагрузить lpd для данного принтера ╥ status _o_p_t_i_o_n - статус печати принтера ╥ up _o_p_t_i_o_n - разрешить все и стартовать новый демон lpd 22..66.. ИИссппооллььззооввааннииее pprriinnttttooooll вв RReeddHHaatt Небольшое замечание 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 вручную, вы можете иметь множество определений принтера для каждого физического принтера. Каждое для различных размеров бумаги, разрешений и т.п. 33.. ППееччааттьь ффааййллоовв Этот раздел охватывает печать разных типов файлов, с которыми вы встретитесь при работе на Linux. 33..11.. ППееччааттьь ггррааффииччеессккиихх ффааййллоовв Печать графических файлов на принтере обычно зависит от типа графического файла и типа принтера на котором вы хотите печатать. Обычно о матричных принтерах речь не идет ввиду различий в методах обработки графики. Лучший выход в этой ситуации -- убедится, что принтер совместим с Epson-принтерами или с IBM ProPrinter, затем сконвертировать графические файлы в PostScript, и затем воспользоваться программой Ghostscript (см. следующий раздел) для печати графики. Если вы имеете лазерный принтер, это намного легче так как многие совместимы с языком PCL. Это дает возможность выбора. Некоторые программы могут делать вывод напрямую в PCL. Если нет, то программы подобные _N_e_t_P_B_M могут преобразовывать PCL. Последняя возможность -- использовать ghostscript (см. следующий раздел). Наиболее лучший выбор -- установка пакетов подобных NetPBM и Ghostscript, затем установить фильтр для обработки графических файлов автоматически. 33..22.. ППееччааттьь PPoossttSSccrriipptt ффааййллоовв Печать PostScript файлов на принтере, который имеет интерпретатор PostScript'а очень проста; используйте _l_p_r, и принтер сам позаботится о всех деталях. Для тех, кто не имеет принтеры с интерпретаторами PostScript, мы обратимся к другим средствам. К счастью, доступны программы, которые могут читать PostScript, и транслировать его в язык, который будут понимать большинство принтеров. Вероятно наиболее известной программой является Ghostscript. Ответственностью Ghostscript'а является преобразование всех описаний в PostScript-файле в комманды, которые поймет принтер. Для печати PostScript-файла используя Ghostscript, вы должны сделать что-то подобное этому $ gs -dSAFER -dNOPAUSE -sDEVICE=deskjet -sOutputFile=\|lpr thesis.ps Заметим, что в вышеприведенном примере мы перенаправляли вывод Ghostscript на устройство _l_p_r используя опцию -ssOOuuttppuuttFFiillee. Ghostview -- это надстройка к Ghostscript для системы X Window. Это позволяет просматривать PostScript-файлы до того как печатать их. Ghostview и Ghostscript оба могут быть взяты с . 33..33.. ППееччааттьь PPDDFF--ффааййллоовв Фирма Adobe выпустила Acrobat reader для Linux, и он доступен на домашней странице компании Adobe . Его предшественник , xpdf, также доступен. Оба должны печатать на postscript устройстве. 33..44.. ППееччааттьь ффааййллоовв TTeeXX Один из самых легких путей печати файлов TeX -- это пробразовать их в PostScript и затем печатать их используя Ghostscript. Для того, чтобы сделать это сначала необходимо преобразовать TeX-файлы в формат известный как DVI (который остается независимым от устройства). Вы можете это сделать командами _t_e_x(1) или _l_a_t_e_x(1). Затем необходимо преобразовать DVI-файл в PostScript-файл используя программу _d_v_i_p_s. Все это будет выглядеть подобно этому когда вынберете. $ tex thesis.tex $ dvips thesis.dvi Сейчас вы готовы к печати результирующего PostScript-файла как описано выше. 33..55.. ППееччааттьь ффааййллоовв ооттффооррммааттиирроовваанннныыхх ппррооггррааммммоойй ttrrooffff $ groff -Tascii thesis.tr | lpr или , если вы предпочитаете, $ groff thesis.tr > thesis.ps и затем печатать PostScript-файл как описано выше. 33..66.. ППееччааттьь ссттрраанниицц mmaann $ man man | col -b | lpr Страницы man содержат предварительно отформатированные данные troff data, так что мы должны удалить любые подсвечивания, подчеркивания и прочее. Программа 'col' делает это великолепно, и мы перенаправим данные от программы man без использования команды more. 44.. РРааззнныыее ззааммееттккии Эти заметки не относятся к другим темам 44..11.. ФФооррммааттииррооввааннииее ддоо ппееччааттии Так как большинство ASCII-файлов не форматировано для печати, полезно отформатировать их каким-то образом до того как они будут напечатаны. Это может включать помещение заголовка и номера страницы на каждой странице. Установка двойного интервала, создание отступов или печать файлов в несколько колонок. Общее решение для того чтобы сделать -- использование препроцессора печати, такого как _p_r. $ pr +4 -d -h"Ph.D. Thesis, 2nd Draft" -l60 thesis.txt | lpr В примере выше, _p_r должен взять файл thesis.txt Пропустить первые три страницы (+4), установить длину страницы в 60 строк (-l60), выводить с двойным интервалом (-d), и добавить фразу "Ph.D. Thesis, 2nd Draft" к заголовку каждой страницы (-h). _L_p_r должен затем поместить в очередь вывод программы _p_r. Смотри справочные страницы для получения большей информации о использовании _p_r. 44..22.. ППееррееммееннннааяя ссррееддыы PPRRIINNTTEERR Все команды в системе печати Linux принимают опцию -PP. Эта опция позволяет пользователю указать какой принтер использовать для вывода. Если пользователь не указал какой принтер использовать, тогда будет использоваться устройство по умолчанию. Вместо указания какой принтер использовать когда вы печатаете, вы можете установить переменную среды PRINTER со значением имени принтера, который вы хотите использовать. Это делается по разному для каждого из командных процессоров. Например для _b_a_s_h вы можете сделать это следующим образом $ PRINTER="printer_name"; export PRINTER а для _c_s_h, это делается так % setenv PRINTER "printer_name" Эти команды могут быть помещены в ваш сценарий входа (.profile для _b_a_s_h, или .cshrc для _c_s_h), или выполнены из командной строки. (Смотрите _b_a_s_h(1) и _c_s_h(1) для большей информации о переменных среды). 55.. ООттввееттыы ннаа ЧЧаассттоо ЗЗааддааввааееммыыее ВВооппррооссыы FFAAQQ В1. Как я могу избавиться от ступенчатого эффекта? О1. Ступенчатый эффект возникает потому-что некоторые принтера ожидают завершения линии. Некоторые принтера требуют линий, которые заканчиваются последовательность возврат каретки/перевод строки (стиль DOS) вместо перевода строки, который используется в UNIX. Наиболее легкий путь для решения этой проблемы -- это посмотреть умеет ли ваш принтер между этими двумя стилями -- либо переключением DIP-переключателя, или посыланием специальной последовательности при старте каждого задания. Чтобы сделать это последним способом, вам необходимо создать фильтр (В2) Быстрое исправление -- использование фильтра в командой строке. Пример этого может быть таким. $ cat thesis.txt | todos | lpr В2. Что такое фильтр? О2. Фильтр -- это программа, которая читает со стандартного ввода (_s_t_d_i_n), выполняет некоторые действия над этим вводом, и пишет на стандартный вывод (_s_t_d_o_u_t). Фильтры используются для многих вещей, включая обработку текста. В3. Что такое _m_a_g_i_c фильтр? О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 каждый раз. 66.. РРеешшееннииее ппррооббллеемм Этот раздел посвящен некоторым общим вещам, которые могут неправильно работать в вашей системе печати. Если ваш принтер не работает: ╥ Друние задания работают? (проблема в приложении?) ╥ lpd запущен? (проверить это используя lpc) (контролер печати?) ╥ root может послать что-нибудь прямо на принтер? (сервис печати?) ╥ Можете вы печатать из под DOS? (проблема в кабеле/принтере?) Ответы на эти вопросы могут помочь найти решение. Посылайте другие советы для этого раздела . 77.. ССссыыллккии Этот раздел -- раздел ссылок на систему печати Linux. Я аостарался сохранить раздел ссылок этого документа насколько возможно полным. Если вы чуствуете, что я забыл важную ссылку, не стесняйтесь связаться со мной. До того как вы пошлете вопрос в группу USENET, рассмотрите следующее: ╥ Принтер принимает задания? (Используйте _l_p_c(8) для проверки). ╥ Ответы на ваш вопрос описаны в этом документе или HOWTO о печати, написанном Grant Taylor? Если любое из вышеупомянутых правда, вы должны подумать дважды до того как пошлете ваш вопрос. И когда вы в конце концов пошлете вопрос в группу новостей, постарайтесь включить необходимую информацию. Не говорите что либо подобное такому: "У меня проблемы с lpr, помогите пожплуйста". Сообщения такого типа скорее всего многими проигнорируются. Также постарайтесь включить номер версии ядра Linux, как возникает ошибка, и если есть, какое сообщение возвращает система. ИИннттееррааккттииввнныыее ссппррааввооччнныыее ссттррааннииццыы ╥ _c_a_t(1) соеденение и печать файлов ╥ _d_v_i_p_s(1) преобразовать TeX DVI-файл в PostScript ╥ _g_h_o_s_t_v_i_e_w(1) просмотр PostScript документов используя Ghostscript ╥ _g_r_o_f_f(1) надстройка для системы форматирования документов groff ╥ _g_s(1) Ghostscript интерпретатор/просмотрщик ╥ _l_p_c(8) программа контроля линейной печати ╥ _l_p_d(8) демон спулера линейной печати ╥ _l_p_q(1) программа проверки очереди спула ╥ _l_p_r(1) поставить задание на печать ╥ _l_p_r_m(1) удалить задания из очереди спула линейной печати ╥ _p_r(1) преобразовать текстовые файлы для печати ╥ _t_e_x(1) система форматирования и издания текстов ггррууппппыы ннооввооссттеейй UUSSEENNEETT ╥ comp.os.linux.* изобилие информации о Linux ╥ comp.unix.* обсуждения относящиеся к операционной системе UNIX