Grant Taylor gtaylor+pht@picante.com
превод Росен Караиванов selibum@yahoo.com
Версия 5.15 от 15.01.2001 04:47:37
Настоящия превод е от November 25, 2001
Пред вас е документът "Как да отпечатавме под Linux", съдържащ информация какво трябва да направите, ако искате да генерирате, прегледате и отпечатате към принтер или факс каквото и да е под GNU/Linux (и други видове Unix като цяло). Почти всичко от написаното тук важи в голяма степен и за потребителите, използващи свободен софтуер на други, Unix - подобни операционни системи.
Бележка на преводача: ще приемам с благодарност всички забележки и коментари по превода, дори и дребни.
"Как да отпечатваме под Linux" би трябвало да съдържа всичко, което ви е необходимо да знаете, за да можете да настроите услугите за печат на вашата Linux машина/и. Както обикновенно става в живота, това е малко по - сложно от посочи - с - мишката - и - щракни светът на Microsoft и Apple, но освен това то е по - гъвкаво, и със сигурност по - лесно за администриране на големи локални мрежи.
Настоящият документ е структуриран по такъв начин, че за мнозинството от четящите го ще е достатъчно да прочетат първата половина от него (приблизително). По - мъглявата и зависима от различните ситуации информация е концентрирана главно във втората половина; тя може лесно да бъде открита в Съдържанието. За мнозинството от хората навярно най - важно ще бъде да прочетат написаното в глави 10 и 11.
Ако намирате този документ, или Интернет страницата LinuxPrinting.org за ползотворни, не пропускайте шанса да си купите нещо (мастило например), като проследите съответните връзки на страницата; такива покупки подпомагат страницата и документа.
Тъй като версиите 3.х и нагоре са изцяло пренаписани, липсва много от информацията от предишните редакции на документа. Това е направено умишлено,понеже по - старите версии достигаха големина от 60 печатни страници и нагоре. Ако не откриете отговора на вашия въпрос тук, ви препоръчвам следното: а)прегледайте по - старите версиин на адрес LinuxPrinting.org , и б)напишете ми писмо за това какво трябва да съдържа документа, а го няма.
LinuxPrinting.org е правилното място за откриване на последната версия; естествено, документа се публикува от metalab.unc.edu , и неговите най - близки до вас огледални копия на LDP.
Старал съм се да използвам еднаква терминология в целия домумент, с оглед на това и потребителите на свободни Unix - подобни операционни системи (ОС), и тези с други ОС, използващи свободен софтуер, да имат полза от написаното. За беда се срещат много нееднозначни термини, а освен тях има и много проблематични еднозначни термини; за да бъдат ясни нещата, по - долу съм изложил малък речник на използваните термини:
В момента четете четвъртото поколение на документа "Как да печатаме подLinux". Ето накратко неговата история:
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in Section 20.
Копирането, разпространяването и/или променянето на този документ е позволено при спазване условията на GNU Лиценза за Свободна Документация, Версия 1.1 или следващи, публикувани от Free Software Foundation; без Invariant Sections, без Front-Cover Texts, и без Back-Cover Texts. В част 20 има копие на GNU Лиценза.
Настоящият превод се явява Modified Version според условията на Лиценза за Свободна Документация, и следва да се разпространява съобразно този Лиценз.
Най - бързият начин да започнете да отпечатвате е да използвате съответните инструменти за настройка, предоставени от доставчика ви. Изхождайки от преположението, че в тях има поддръжка за драйвер за вашия принтер, и също така предполагайки, че вашият доставчик ви е предоставил този драйвер, следва основните настройки да бъдат направени лесно и бързо по този начин. Повече информация за инструментите за настройка, предоставяни от различните доставчици, можете да намерите в част 9.
Ако не се получи с инструментите на доставчика ви, би трябвало да си изясните дали въобще ще можете да ползвате вашия принтер. Проверете списъка на съвместимите принтери в част 5.3.1, а също и в споменатата тук Интернет страница.
Ако има работещ драйвер за вашия принтер, проверете дали разполагате с този драйвер, и се снабдете с него ако го нямате. В повечето случаи ще можете да намерите Ghostscript пакет, включващ нови и предоставени от трета страна драйвери. Ако не намерите, може да си компилирате сами; това не е лека задача, но за сметка на това е добре документирана. в част 10 можете да намерите повече информация за Ghostscript.
След като инсталирате драйвера, опитайте отново да направите настройките за принтера си с помощта на инструментите на доставчика ви. В случай на неуспех, изберете си някой от предоставяните от трета страна инструменти, описани в част 8. Ако и така не успеете, ще трябва сами да направите настройките; отново погледнете в част 8.
Ако и след това резултата е несполучлив, ще трябва да проверите дали не грешите някъде. Вероятно ще бъде най - добре първо да прочетете целия документ, за да придобиете усещане как работят нещата; така ще бъдете в по - добра позиция при търсене на грешки.
В Usenet групите comp.os.linux.hardware, comp.os.linus.setup, и comp.periphs.printers има множество общи запитвания, свързани с разпечатването. Въпросните групи са много посещавани, и със сигурност там можете да се намери отговор; проверете също и в архивите на Deja.com. Аз също съм създал няколко linuxprinting.foo новинарски групи; те са достъпни едновременно и като форуми на Интернет страници, и през NNTP; вижте на страницата в Интернет.
Поразровете се също така и в Интернет за решение на вашия проблем. Като начало би било добре да погледнете на LinuxPrinting.org; там има връзки към други станици и проекти. Получавам множество писма с въпроси, отговорите на които могат да бъдат намерени на моята страница, или в документацията доставена ви с принтера.
Ако ви е необходима допълнителна помощ, моля опитайте с новинарските групи, кореспондентските списъци, отдела за поддръжка на вашия доставчик, и т.н., преди да попитате мен. Въпреки че се опитвам да отговоря на всяко писмо, което съм получил, на практика не съм успял да изпратя отговор на около 10 % от получените през последната година писма. И нещата ще се влошават за в бъдеще. Ако все пак искате да се свържете с мен, направете го чрез форумите на LinuxPrinting.org; така ще имате шанс да получите отговори и от други хора, като същевременно въпросът ви, и евентуалните отговори, ще останат на публично място в архива.
На практика вие използвате различни команди, когато искате да печатате, в зависимост от софтуера за управление на печат който използвате.
Мнозинството от операционните системи в наше време се доставят с lpd, така че тази част се явява неприложима. Нека го кажа сега, аз препоръчвам на хората да инсталират и използват PDQ в мнозинството от случаите, вместо (или като добавка към) lpd. PDQ е навярно най - лесна за разбиране и ползване, докато CUPS е сред по - мощните системи, предназначени за много по - опитни потребители. И при двете системи поддръжката на различни настройки по принтерите, и възможностите за интересни конфигурации, са много по - добри, отколкото при LPD.
Когато използвате PDQ, вместо командата lpr трябва да използвате командите pdq или xpdq. И двете работят почти като lpr, т.е. те отпечатват зададените им файлове, или стандартния вход ако не е зададен файл.
Xpdq е приложение за X Windows, което показва списък от наличните принтери и обобщена информация за опашката от задачи за отпечатване (включваща текущите и предишни задачи). Във File менюто има предостваени две възможности - едната е да се отпечатват определени файлове, а другата - да се отпечатва стандартния вход. Във диалога Driver Options, можете да изберете каквито искате настройки, от зададените за вашия драйвер за принтера; обикновено се избира дали да се дуплексира, каква да бъде разделителната способност, какъв вид хартия се използва, с какви размери, и т.н.
Командата за отпечатване от команден ред при PDQ системата е наречена просто pdq. В мнозинството от ситуациите тя може да се използва на мястото на lpr; тя възприема -Р аргумента за определяне на принтер. Също както и lpr, pdq отпечатва или зададения файл (файлове), или стандартния вход.
Настройките за принтера могат да се променят посредством -о и -а аргументите.
Ако вече сте настроили lpd системата да отпечатвате на принтера си, или вашия системен администратор е направил това, или пък вашият системен доставчик, тогава всичко, което трябва да направите, е да научите как да използвате командата lpr. Документа "Printing Usage HOWTO" изчерпателно покрива тази тема, както и някои допълнителни подробности, касаещи управлението на опашката за отпечатваните задачи. Можете също така просто да прочетете man страницата на lpr(1).
Казано с прости думи, трябва да посочите името на опашката за печат с -Р, и да зададете името на файла, който ще отпечатвате (или нищо, ако печатате от стандартния вход). По традиция настройките на драйвера не могат да се променят от lpr, но различните системи понякога приемат определени аргументи като -o, -Z, или -J.
Болшинството от системите за отпечатване, сами по себе си, предоставят като средство за общуване само най - основни команди за командния ред. Възможно е, вместо да използвате директно lpr, да пожелаете да придобиете и използвате по - обогатен интерфейс. Лесните за използване графични интерфейси, като цяло, дават възможност да се променят множество от настройките за разпечатване (например кой принтер, какъв тип хартия, и др.). Е, някои от тях могат да имат и допълнителни възможности.
GPR, създаден от Thomas Hall, изпозлзва част от кода на CUPS за филтриране на Postscript задачи, и предоставя на ползвателите се лесен контрол върху настройките на задачите за печат. Някои от тези настройки (като многократен печат, избор на страници, и др.), са вградени директно в GRP, докато мнозинството от останалите са реализирани в принтера, или във филтрите на системата за управление на печата.
GPR работи с LPD или LPRng; може и да се компилира специално, за да работи с усъвършенстваната от VA Linux версия на LPD. Когато е нормално компилиран, той използва директно libppd на VA, за да произведе специфичния за принтера Postscript, и след това го предава на командата lpr. Когато е компилиран за LPD на VA, той предоставя Postscript задачата ви за печат непроменена на командата lpr, заедно с добавка от настройки, които сте указали. Това е доказуемо най - добрият път, тъй като той позволява на системата за печат да препрати Postscript на различен принтер. За нещастие този случай изисква специалната за VA Linux версия на LPD, соято все още не е много разпространена (макар инсталацията и , разбира се, да е рутинна).
За да използвате GPR, първо си изберете принтер (според името на LPD опашката), и се уверете, че GPR е заредил правилния PPD файл. Ако не го е направил, ще се наложи вие да уточните името на PPD файла, и да изберете желаните настройки на принтера в диалога Printer Configuration (този диалог се появява при натискането на бутона Printer Configuration; в него има спечифични настройки за принтера, взети от PPD файла).
Веднъж след като сте направили настройките на принтера си в GRP, вие можете да отпечатвате, като укажете името на файла за печат, и изберете подходящите настройки от панелите 'Common' или 'Advanced'. Настройките от панела 'Common' са вградени в директно в GPR за всички принтери, докато тези в 'Advanced' се дефинират от PPD файла за вашия принтер. Можете да видите тези панели с настройки на Фигура 2 и Фигура 3.
Ако използвате CUPS и KDE, навярно бихте спряли избора си на QtCUPS - един приятен инструмент за управление на CUPS - разпечатването с графичен интерфейс. Заедно с него получавате и библиотека, която се грижи за тясната взаимообвързаност с KDE средата; разработчиците на KDE могат с минимални изменения да поддържат CUPS разпечатването през QtCUPS.
Също както в XPP, в QtCUPS наскоро добавиха цифрови настройки за поддръжка на Foomatic, така че свободни драйвери за CUPS с Foomatic ще бъдат напълно контролируеми от графичния интерфейс.
Друг добър избор за CUPS представлява програмата XPP (вж. Фигура 5). XPP и изграден на основите на библиотеката FLTK, и следователно признава единствено графичния интерфейс.
За да разпечатате нещо с ХРР, просто стартирайте програмата хрр и посочете файл за печат (или нищо, в случай че използвате хрр на мястото на lpr за разпечатване от стандартния вход). След това изберете принтер от списъка с конфигурираните принтери, и направете желаните от вас настройки по различните панели. На Фигура 6 можете да видите примерен панел със стандартни CUPS настройки .
Когато се използва с моята система за драйверен интерфейс Foomatic, ХРР ще ви позволи да използвате и цифрови параметри, за които няма поддръжка в CUPS. Сред тях обикновено са неща като разширено управление на цветовете, изравняване на касетата, и т.н. На Фигура 7 можете да видите такъв пример.
Можете да запазите всички промени, които сте направили по настройките, като натиснете бутона 'Save Settings'.
PDQ лесно може да се настрои да отпечатва към опашките за печат на мнозинството от използваните системи, а синтаксисът на настройките му позволява много лесно да се дефинират каквито пожелаете филтри и потребителски настройки за отпечатваните неща. Следователно можете много успешно да използвате xpdq за посредник на LPD - разпечатването.
За повече информация вижте в част 6.2.
Има два напълно различни драйвера за паралелния порт; кой от драйверите ще използвате, зависи от версията на ядрото ви (последното можете да разберете с командата uname -a). Драйверът беше променен във версията на ядрото 2.1.33; на практика всички съвременни системи използват ядра с версия 2.2 или по - висока, така че спокойно можете да скочите оттук направо на разела за parport устройството.
Има наколко детайла, които са общи за двата драйвера. И най - вече следното: много хора откриват че Linux не може да открие паралелният порт на компютъра им, докато не забранят "Plug and Play" във BIOS. (Това не е изненадващо; проблемите със PnP при не-PCI устройства при Windows и въобще навсякъде са близо до бедствени).
Linux ядрото (версия <= 2.1.32), при положение че сте компилирали в него или заредили като модул драйвера за lp устройството (изходът от cat /proc/devices трябва да съдържа устройството lp ако то е заредено), предоставя едно или повече от следните устройства: /dev/lp0 , /dev/lp1 и /dev/lp2. Тези устройства НЕ се присвояват динамично, всяко съответства на определен входно/изходен адрес. Това означава, че вашият първи принтер може да бъде lp0 или lp1, в зависимост от ващия хардуер. Просто опитайте и двете.
Някои потребители съобщават, че техните двупосочни lp портове не могат да бъдат открити от ядрото, когато използват стари еднопосочни принтерски кабели. Проверете дали изполвате съвременен кабел.
Не е възможно да използвате драйверите lp и plip едновременно на един и същи порт (до версия 2.0 на ядрото). Обаче може да зареждате единия или другия драйвер ръчно, или чрез kerneld при версии на ядрото 2.х (и след 1.3.х). Чрез внимателно настройване на прекъсванията и др. такива се предполага, че можете да стартирате plip на един порт и lp на друг; с нетърпение очаквам някой да ми каже че е направил успешно това само от команден ред.
Има едно малко приспособление, наречено tunelp, с помощта на което, като root, можете да настроите използването на прекъсванията от lp устройствата при ядра 2.0 и нагоре, а също и други неща.
Когато lp драйверът е компилиран в ядрото, можете да използвате командния ред на LILO/LOADLIN , за да установите адреса и прекъсването на порта, които драйверът да използва.
Синтаксис: lp=port0[,irq0[,port1[,irq1[,port2[,irq2]]]]]
Например: lp=0x378,0 или lp=0x278,5,0x378,7
Забележете, че когато изпозвате този метод, трябва да посочите *всички* портове, които искате да бъдат взети пред вид, няма значения по премълчаване. Можете да деактивирате вградения в ядрото драйвер посредством lp=0.
Когато драйверът се зарежда като модул, е възможно да се уточнят входно/изходния адрес и прекъсването на командния ред на програмата insmod (или във /etc/conf.modules за да въздействате на kerneld), използвайки обикновения синтаксис за аргументи на модулите. Параметрите са io=port0,port1,port2 и irq=irq0,irq1,irq2. За повече информация относно insmod командата можете да прочетете нейната man страница.
**За тези от вас, които (подобно на мен) никога не могат да открият стандартните номера на портовете, когато им потрябват, те са като във вторият пример по-горе. Другият порт (lp0) е на 0х3bc. Нямям идея кое прекъсване използва той.
Първичният код на драйвера за паралелния порт в Linux ядрото се намира в
/usr/src/linux/drivers/char/lp.c
Започвайки от ядро 2.1.33 (достъпно и като кръпка към ядро 2.0.30), lp устройството се явява просто клиент на новото устройство parport. Добавянето на parport коригира известна част от проблемите, които бяха причинявани от стария lp драйвер - то може да споделя порта с други драйвери, може динамично да присвоява на достъпните паралелни портове номера на устройствата (вместо да прави фиксирана връзка между входно/изходните адреси и устройствата), и т.н.
Навлизането на новото устройство parport даде възможност да се появят множество драйвери за устройства за паралелния порт, като Zip устройства, записващи CD-R/RW устройства, и т.н. Някои от тези драйвери могат да бъдат открити и за версии на ядрото 2.0; просто потърсете в Интернет.
Главната разлика, както навярно забелязвате (поне докато става въпрос за отпечатване), е че ядрата, базирани на parport устройството, динамично присвояват lp устройствата към паралелните портове. Така това, което под Linux 2.0 е било lp1, може под Linux 2.2 да бъде, да речем, lp1. Уверете се, че сте проверили как стои този въпрос, ако сте обновили старото си ядро с lp драйвер, с по-ново с parport драйвер.
Най - често срещаните проблеми с това устройство произлизат обикновено от неправилната му настройка:
Серийните устройства под Linux обикновено носят имена като /dev/ttyS1. Полезното приложение stty ви дава възможност да разгледате и промените настройките на серийния порт; setserial ви дава възможност да конфигурирате допълнителни подробности, и да настроите прекъсванията и входно/изходните адреси за някои по-нестандартни портове. Повечко неща по въпроса можете да прочетете в Serial-HOWTO.
Когато използвате бавен сериен принтер с контрол на потока, е възможно да ви се случи някои от поставените задачи за отпечатване да не бъдат изпълнени докрай. Причината за това може да бъде в серийният порт, който в стандартния случай изчиства от буфера си непредадените символи 30 секунди след като порта бъде затворен. Буферът побира до 4096 символа, и в случай че вашият принтер използва контрол на потока и е толкова бавен, че да не може да приеме всичката информация от буфера за 30-те секунди след като софтуера за печат затвори серийния порт, вие ще изгубите (т.е. няма да се отпечата) последното съдържание на буфера. Ако командата cat file > dev/ttyS2 води до пълни разпечатки при къси файлове, но недопечатва по - дълги, навярно сте изпаднали в описаната ситуация.
30 секундният интервал може да бъде променен посредством настройката от командния ред "closing_wait" на командата setserial (версии 2.12. и следващи). Първоначалното установяване на серийноте портове на машината обикновено се извършва чрез извикване на setserial във файла rc.serial. С това извикване може да се промени "closing_wait" на серийният порт за отпечатване, както и други негови параметри.
Аз нямам на разположение USB устройство, така че всичко което мога да предложа е само насочващо. След като си направите настройките веднъж, ще имате на разположение файлът за устройство /dev/usb/lp0, който, подобно на този за паралелния порт, можете да посочите в printcap, или като местно устройство на PDQ.
USB е добре документирана в Интернет страницата Linux USB. Би трябвало да имате някакви, малки или големи успехи, с по - късните версии на ядрата 2.2 и с всички версии на ядро 2.4.
Linux ядрото позволява да "говорите" на почти всички принтери, които се включват към серийния, паралелния , или USB порт, плюс всеки принтер в мрежата. За съжаление, само това не е достатъчно; трябва също да можете да генерирате информация, която принтерът разбира. Основната част от несъвместимите принтери са тези, обозначававани като "Windows" или "GDI" принтери. Те са наречени така, понеже всичко, или поне една част от език за управление на принтера и конструктивните детайли на механизма му за печатане не са документирани. Обикновено производителите на такива принтери доставят драйвери за Windows, и спокойно ги продават на потребители на Windows; затова и тези принтери биват наричани Win-принтери. Има и случаи, в които производителя доставя драйвери за NT, OS/2 или друга операционна система.
Много от въпросните принтери не работят със свободен софтуер. Някои от Win - принтерите работят, а други само донякъде (обикновено защото някой, използвайки реверсивно инжинерство е установил детайлите, необходими за написване на драйвер). Вижте по - долу списъка с поддържаните принтери за повече подробности за определени модели.
Някои от принтерите заемат междинно положение между двете крайности. Част от моделите на NEC например, предоставят проста форма на поддръжка на стандартния език за отпечатване PCL, което позволява на ползващите софтуер, "говорещ" PCL, да отпечатват с 300dpi, но само NEC знаят как да извадят от тези принтери 600dpi отпечатка.
Имайте пред вид, че ако вече притежавате такъв Win-принтер, могат да се намерят заобиколни начини да се отпечатва на тях от Linux машина, но те не са много лесни, и аз лично не съм ги изпробвал. Във част 12 на настоящия документ можете да намерите повече информация за този тип принтери.
Говорейки за това кои принтери работят със свободен софтуер, най - добрият избор е да си купите принтер, имащ вградена във вътрешното програмно осигуряване (firmware) поддръжка за Postscript. Почти целия софтуер за Un*x, използван за обработване материали за печат, дава като краен резултат информация в Postscript формат, така че очевидно би било хубаво да притежавате принтер, който директно поддържа Postscript. За съжаление тази поддръжка се среща най - вече при лазерните принтери, и в някои случаи се явява скъпа добавка.
Софтуерът по Un*x, а също и книгоиздателската индустрия като цяло, са спрели избора си за предпочитан език за управление на принтери на Postscript. Това се е случило по няколко причини:
Отказвайки се от (големия) бюджет, необходим за закупуването на Postscript принтер, на вас ви остава да използвате кой да е принтер, поддържан от Ghostscript - свободният Postscript интерпретатор, използван като заместител на вградената поддръжка на Postscript в принтерите. Трябва да се отбележи, че съобразявайки се с лиценза му, мнозинството от GNU/Linux дистрибуциите се разпространяват с малко остарели версии на Ghostscript. За щастие, обикновенно винаги може да се намери поготвена последната версия на Ghostscript в областта contrib на всяка дистрибуция.
Понастоящем Adobe имат нов език за принтери, наречен PrintGear. Мисля, че това е доста опростен език в двоичен формат, имащ свойства като Postscript, но несъвместим с него. И не съм чувал той да се поддържа от Ghostscript. Но някои от поддърржащите PrintGear принтери изглежда поддържат и друг език като PCL, и те биха могли да работят с GNU/Linux (ако PCL езикът е въведен в принтера а не във Windows драйвера).
Ако искате да си купите принтер, можете да проверите предварително на много места дали той ще работи. Целта на съвместно поддържаната база данни за принтери към "Printing HOWTO" е да дава разбираема оценка за състоянието на поддръжката на печата в GNU/Linux. По - долу можете да намерите част от нея; не пропускайте да проверите страницата в Интернет за повече детайли и информация кой драйвер да използвате.
За тези от вас, които искат да си купят нов принтер, най - добре ще бъде да се консултират със списъка от предлаганите от мен принтери. В този списък има предимно цветни мастиленоструйни и монохромни лазерни принтери. Имате възможност да подкрепите настоящия документ, и страницата в Интернет, като проследите някоя от връзките там към различни производители, си купите нещо от тях.
На страницата за съвместими принтери на Ghostscript има списък от работещи принтери, а също и връзки към други страници.
На Dejanews можете да откриете стотици съобщения, от типа на "това работи", и "това не работи". Проверете и на трите места, и когато сте готови, увверете се дали вашият принтер е правилно вписан в базата данни. Ако не е, изпратете вашата информация, така че за в бъдеще той да бъде вписан правилно в този документ.
Изброеното тук представлява обобщение на станицата в Интернет. Последната включва основни параметри на принтерите, бележки, връзки към информация за драйвери, поддържана от други потребители документация, Web страници на производителите, и интерфейсни скриптове за използването на драйвери с различни системи за печат (в това число LPD, LPRng, PDQ и CUPS). Версията на този списък в Интернет освен това е жизнена - хората могат да добавят информация по всяко време, така че проверявайте я по - често. И накрая, ако вашият принтер го няма в списъка - добавете го!
Имайте пред вид, че настоящият списък не е евангелие; хората понякога добавят неправилна информация, която аз все някога ще отстраня. Вписвания, които аз лично не съм проверил дали са верни, са отбелязани със звездичка (*). Проверете на Dejanews, дали някой е успял да накара съответния принтер от този списък да работи, преди да си го купите. Ако не можете да откриете информация в Dejanews, пишете ми, и аз ще ви свържа с човекът, направил вписването за съответния принтер.
Принтерите са категоризирани в три типа.
И без повече приказки, ето го и самия списък на съвместимите принтери:
Вписванията, отбелязани със звездичка (*), са частично подозрителни.
Малко е трудно да се избере принтер в наши дни; произвеждат се много модели, сред които можете да избирате. Ето и някои съвети при пазаруването:
Аз притежавам HP DeskJet 500, Lexmark Optra 40, и Canon BJC-4100. Всички те работят отлично: НР и Canon са стари модели, добре поддържани от Ghostscript; Optrа е по - съвременен цветен мастиленоструен принтер с пълна поддръжка на Postscript и PCL 5 (!).
Притежавам също така и Hawking Technology 10/100 Ethernet печатен сървър (модел 7117, в действителност произведен от Zero One Technologies в Тайван); той ми позволява да сложа принтера на всяко място, до което наблизо има електрически контакт и мрежов накрайник, вместо да го слагам до компютъра. Предтавлява една кутийка, на която в единия край се свързва кабела от паралелния порт на принтера, а на другия си край има Ethernet жак. Единствения му недостатък е, че не позволява двупосочна комуникация, и аз не мога да уредя нещата така, че да получавам електронна поща, когато мастилото свърши.
До скоро изборът на потребителите на Linux беше прост - всички използваха все същия стар lpd , пренесен почти дословно от първичния код на BSD Net-2. Дори и в наши дни, мнозинството от доставчиците на софтуер продължават да го включват в дистрибуциите си. Но нещата вече почват да се променят. Системи от типа SVR-4, включително Solaris на Sun, се доставят със съвсем различен софтуер за управление на печата, базиран основно на lpsched.
В наши дни има няколко добри системи, между които може да се избира. Описъл съм ги всички по - долу в документа; PDQ е най - простата съвременна система с графичен интерфейс; тя е подходяща както за редови домашни потребители, така и за хора, работещи с големи мрежи (в съчетание с LPD). За бизнес среди, където обикновено има мрежови Postscript принтери, програмата за крайни потребители GPR в съчетание с LPRng е добра алтернатива; тя борави директно с PPD настройките, и има малко по - малко хубав интерфейс. В други ситуации е добре да се избере CUPS; в него също има отлична поддръжка за Postscript принтери, а освен това предлага и поддръжка за IPP, има интерфейс за браузър, и още доста други особености.
LPD, оригиналният демон за линеен печат на BSD Unix (LPD = Line Printer Daemon), е стандарт от много години за Unix. Може да откриете негова версия за всяка разновидност на Unix; той има доста скромен набор от възможности по исторически причини. Въпреки своята донякъде уникална история, в наши дни той все още може да бъде полезен в ролята на основна система за буферизиране на печата. За да бъде реално използваем със съвременните принтери, той се нуждае от още доста добавки, като съпътстващи филтриращи скриптове и програми за крайните потребители. Но такива има, и всичко това работи.
LPD е също така името, дадено в RFC 1179 на протокола за мрежов печат. На този мрежов протокол може да "говори" не само самият LPD демон, но и всеки мрежов сървър за печат, мрежов принтер, и всяка друга съществуваща система за буферизиране на печата; LPD е най - малкото общо кратно при стандартизирания мрежов печат.
LPRng (вж. част 6.3) е много по - добра реализация на основния LPD дизайн в сравнение с обикновения; ако трябва да използвате LPD, използвайте вместо него LPRng. Налага се да използвате много по - малко тайнствени магии, за да го накарате да върши това, което искате, а и каквато и магия да има в него, тя е добре документирана.
По света има множество първични програмни кодове за LPD. BSD Unix навярно е официалният собственик, но всеки друг добавя каквото си поиска, и го слага където си поиска; нещата са объркани до такава степен, че е трудно да се каже със сигурност точно кой вариант на LPD притежавате. От наличните такива, този предлаган от VA Linux има някои малки изменения, с които потребителският интерфейс става доста по - гъвкав. В LPD вариантът, намиращ се на SourceForge, можете да подавате различни настройки от командния ред посредством -о атрибута; тези настройки след това се подават към филтрите. Това наподобява на допълненията, предлагани от някои от традиционните Unix доставчици, и е подобно също на (макар и несъвместомо с) -z настройката на LPRng.
Ако сте се спрели на LPD, най - добрия начин да го използвате е посредтвом приложения за крайни потребители. Можете да избирате между няколко такива; GRP (вж. част 3.3) и XPDQ (вж. част 6.2) са навярно най - добрите. Има и други; разкажете ми за тях ако ги познавате.
PDQ е система за управление на печата без централен демон, която има вграден, разумен синтаксис за настройки на драйвери. Тя предоставя възможност да се декларират настройки за печат, и предлага на потребителите приложения за команден ред или с графичен интерфейс, с които да се извършат тези настройки; пред потребителя излиза една красива диалогова кутия, в която могат да се изберат желаната разделителна способност, вида на хартията, и т.н. (вж. Фигура 8)
Стартирането на всичките филтри на системата ви дава големи предимства като потребител: възможните проблеми със сигурността от Postscript вече почти липсват, могат да се печатат множество свързани LATEX файлове, и други.
Аз използвам тази система понастоящем; написал съм си файлове със настройки за моите принтери; много такива файлове идват наготово с дистрибуцията, така че има достатъчно примери как и вие да си направите своите. Създал съм също така няколко помощни инструмента, с които се автоматизира създаването на настройки за драйверите, за да помогна на всички вас.
PDQ не без недостатъци: най забележимия е, че обработва цялата задача за печат, преди да я изпрати на принтера. Това означава, че за големи задачи PDQ може да бъде просто непрактично; стотици мегабайти ще се копират напред - назад по твърдия ви диск. Още по -лошо, при бавни драйвери, като тези на качествените мастиленоструйни принтери, задачата няма да почне да се отпечатва преди Ghostscript и драйвера да завършат обработката и. Това може да отнеме много минути след подаването и за печат.
Ако имате много потребители, много принтери, или каквaто и да е сложнa сistema, ви препоръчвам да използвате PDQ като лицева част на основано на LPD - протокол мрежово отпечатване (можете да отпечатвате чрез lpd - протокола на локалната машина). В много ситуации бих ви препоръчал да използвате като основа на разпечатващата система не стария lpd на BSD, а LPRng.
Някои GNU/Linux доставчици (включително Caldera) предоставят LPRng, една доста по - съвременна реализация на LPD системата за буфериране на печата. LPRng е много по - лесна за управление при големи инсталации (разбирай: наличие на повече от един принтер, каквито и да е серийни принтери, или някакви странни не-lpd мрежови принтери), и основите на управлението и са по - малко страховити от тези на стандартната lpd . Тя дори може да претендира че е сигурна - няма SUID изпълними файлове, и поддържа система за потвърждение на достъпа чрез PGP или Kerberos.
LPRng също така включва някои примерни начини за настройка на най - срещаните мрежови принтери - основно моделите LaserJet на HP, в които има и приспособления за водене на отчетност. Ако ви е необходима повече информация за LPRng, проверете на домашната страница на системата в Интернет. LPRng използва малко или повече същия базов модел за филтриране, както и BSP lpd, така че поддръжка за LPD, описана на моята страница, важи също и за LPRng. По този начин може ефективно да използвате свободни драйвери за много принтери
LPRng се разпространява или под GPL, или под Artistic license.
PPR e Postscript-центрична система за буфериране на печата, със способност да изследва Postscript материалите в сурово състояние, благодарение на която PPD има някои много хубави черти. Тя предоставя добри възможности за отчетност, добра поддръжка за Appletalk, SMB, и LPD клиенти, и много по - добра система за управление на грешките, отколкото lpd. PPR, както и всички описани тук системи, може да извиква Ghostscript в случай на работа с неподдържащи Postscript принтери.
Научих съвсем наскоро за PPR; не знам някой да е изпробвал тази система. Тя е създадена, и се използва в Trinity College. Лицензът и е в стил BSD - свободна за всички, като се изисква посочване на създателите.
Изхождайки от написаното в документацията и, тя е донякъде експериментална. Неправилни Postscript задачи не се отпечатват; вместо това те се връщат, и за потребителя остава задачата да коригира Postscript. Това прави използването на системата не особено подходящо в някои ситуации, макар че мнозинството от потребителите генерират Postscript с някой от малкото, добре известни генератори на Postscript, така че в крайна сметка това не е от голяма важност.
Едно интересно ново лице на сцената е "CUPS", реализация на Internet Printing Protocol, базиран на HTTP и дефиниран в RFC протокол, целящ да замени достопочтения (и престарял) LPD протокол. Реализацията на CUPS се осъществява от Michael Sweet от Easy Software Products; CUPS се разпространява с лиценза GPL.
Аз най - накрая успях да накарам системата CUPS да свърши някои работи, и тя ги свърши както беше рекламирана. Тя притежава някои много хубави черти, в това число чувствително управление на настройките; HTTP (web), графичен, и за командния ред интерфейси; и MIME - базирана филтрираща система със силна поддръжка за Postscript. Тъй като обаче системата CUPS е все още е доста нова, тя има множество недостатъци, и ми е трудно засега (версия 1.1) да я препоръчам за големи работни среди, или за такива с висока степен на сигурност. Все пак, тя е едно изтънчено решение за малки работни среди, или за големи среди с доверени потребители.
Също както и другите системи, CUPS може да се използва с мнозинството от съществуващите драйвери. За нещастие, малко е трудно да накарате по - необичайните драйвери да работят (или поне ако искате да ползвате всичките им възможности); най - добре е да намерите готови PPD файл и филтриращ скрипт, за да заработи драйвера ви. Има поне четири типа драйвери, които можете да използвате с CUPS:
За да работи добре системата за печат, трябва да знаете как работи вашата система за буфериране на печата. По прицип всички системи работят по един и същи начин, макар и редът в който се изпълняват операциите да не е един и същ навсякъде, и някои системи да изпускат стъпка или две:
Pdq идва от "Print, Don't Queue" (буквално:"печатай, не буферизирай"), и начина по който работи напълно съответства на името му. Когато използвате PDQ за да отпечатате нещо, се случва следната последователност от събития:
Lpd идва от Line Priner Daemon (демон за печат на линейни принтери), и когато се говори за него в различни случаи, се имат предвид и демона, и сбора от програми за управление системата за печат. Те са:
Има много програми, подпомагащи написванетона LPD филтър. Сред тях са:
В стандартни ситуации бихте могли изцяло да прескочите тази част от документа, и да отидетена частта по - долу, в която са описани решенията на Системните доставчици, или още по - добре - направо на документацията на доставчиците. Мнозинството от GNU/Linux дистрибуциите се доставят с един или повече "глупакоустойчиви" инструменти (приложения), с които може да се направи всичко описано тук за често срещаните принтери.
В случай, че въпросните инструменти на доставчиците дадат неудовлетворителни резултати, или имате желание непосредствено да оказвате влияние на настройките за печат, когато отпечатвате, би трябвало да изполвате някоя друга система. PDQ е един добър избор; той е функционален и лесен за настройка. Друга добра система е APS Filter; тя безпроблемно конфигурира опашките и филтрите на LPD при мнозинството от Unix системите.
Можете също така да използвате интерфейсите за системи за печат от Интернет страницата LinuxPrinting.org, като свръзка между множеството свободни драйвери и няколкото състеми за буфериране печата. Когато проекта бъде завършен, тези интерфейси ще предлагат най - добрата функционалност: те поддържат всички видове свободни драйвери, има възможност потребителят да си избира настройки, и се поддържат всички системи за буферизация на печата.
Конфигурирането на PDQ може да се направи както от root, така и от всеки редови потребител на системата. Първият извършва промени във файла /etc/printrc ; тези промени влияят на всички. Вторите могат само да променят личния си файл .printrc Всичко описано по - долу, важи и за двата вида конфигуриране.
Ако PDQ не е част от вашата дистрибуция, можете да вземете първичния му код от домашната страница в Интернет на PDQ , и да си го компилирате сами. Компилирането протича лесно, в случай че предварително сте проверили дали в системата ви са инсталирани необходимите за случая разнообразни библиотеки за разработка на GTK, библиотеките за разработка на С, компилатора gcc, make, и навярно още няколко неща за разработчици.
PDQ системата позволява на потребителя си да избере на кой принтер да се извърши разпечатването. В PDQ принтерът се дефинира като съвкупност от "драйвер" и "интерфейс". И драйверът, и интерфейса, на практика представляват отделни участъци от текст във конфигурационния файл на PDQ.
PDQ интерфейсът казва всичко, относно това как да бъде изпратена информацията до принтера. Най - изпозлваните интерфейси, които могат да се открият и в предварително подготвения към дистрибуцията printrc файл са:
Ако някой от включените в PDQ драйвери не е подходящ за вашия принтер, прочетете по - долу как можете сами да си го напишете.
За да дефинирате принтер в PDQ:
Сега ще ви преведа стъпка по стъпка през процеса на създаване на драйвер за PDQ. Преди да направите това обаче, потърсете из множеството възможни места дали вече няма готов:
Сега, нека да преминем през етапите на създаване на драйвер за принтер, който в базата данни е посочен като работещ, но не можете да намерите драйвер за него. Ще използвам за пример принтера Canon BJC-210.
Първо, поглеждаме какво е вписването в базата данни за този принтер. Забележете, че за него има отлична поддръжка - wписан е като "отличенн", и следователно може да очакваме да получим сравними (или по - добри) резултати от Windows потребителите. Важната информация е на две места във вписването:
В списъка от драйвери за този принтер има драйвери за два модела - bjc200 и bjc600, като и двата са от Ghostscript тип. Според бележките за монохромен печат се предлага ползването на bjc200.
ВJC-210 поддържа една хубава настройка: може да се избира между цветен и чено-бял печат. Нека да декларираме това като настройка по избор, наречена "MODE":
option {
var = "MODE"
desc = "Print Mode"
# default_choice "Color" # премахвайки коментара 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"
}
}
Имайки горните choice декларации, потребителят ще види избор мецду Color или BW в диалога настройки за драйвера, когато отпечатва с xpdq. При инструмента за команден ред pdq може да се посочи -oBW или -oColor. Кое от тях да бъде по дефиниция се определя от xpdq, или се декларира с ключовата дума default_choice.
PDQ определя типа на входната си информация с командата file(1). За всеки тип, върнат за файла който обработвате, и който желаете да бъде обработван, трябва да осигурите подраздел language_driver. Подразделът най - често съдържа скрипт за обработване към езика за печат, написан на който поискате (!) скриптов език (по дефиниция се използва обичайния Bourne shell).
В настоящия случай, ние искаме да отпечатваме Postscript и ASCII на нашия BJC-210. За това са необходими два езикови драйвера: един да стартира Ghostscript за Postscript задачи, и друг да добавя carriage return към ASCII задачите:
# Използва се първият language_driver във настоящия файл,
# съответстващ на резултата от изпълнението на file(1)
language_driver ps {
# file(1) returns "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 canon-bjc210-0.1 {
option {
var = "MODE"
desc = "Print Mode"
# default_choice "Color" # премахвайки коментара 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) returns "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";
}
}
}
}
В случай, че искате да добавяте нещо в началото или края на всяка задача за печат, или да правите някъкъв вид преобразуване върху цялата информация от всеки тип, трябва да го направите в подраздела filter_exec. Нашият малък Canon не се нуждае от такъв подраздел, но тук, само за пример, ще покажем как се реализира дуплексиране и избор на разделителната способност при LaserJet, или подобен принтер, който говори PJL!
driver generic-ljet4-with-duplex-0.1 {
# Първо, два избираеми подраздела за ибираеми от потребителя неща:
option {
var = "DUPLEX_MODE"
desc = "Duplex Mode"
default_choice = "SIMPLEX"
choice "SIMPLEX" {
value = "OFF"
desc = "One-sided prints"
}
choice "DUPLEX" {
value = "ON"
desc = "Two-sided prints"
}
}
option {
var = "GS_RES"
desc = "Resolution"
default_choice = "DPI600"
choice "DPI300" {
value = "-r300x300"
desc = "300 dpi"
}
choice "DPI600" {
value = "-r600x600"
desc = "600 dpi"
}
}
# Сега поемаме Postscript от входа с драйвера ljet4 на Ghostscript
language_driver ps {
filetype_regx = "postscript"
convert_exec = {
gs -sDEVICE=ljet4 $GS_RES \
-q -dNOPAUSE -dBATCH -dSAFER \
-sOutputFile=$OUTPUT $INPUT
}
}
# Накрая, обгръщаме задачата с PJL команди:
filter_exec {
# requires echo with escape code ability...
echo -ne '\33%-12345X' > $OUTPUT
echo "@PJL SET DUPLEX=$DUPLEX_MODE" >> $OUTPUT
# Може да прибавите допълнителни @PJL commands, като тази от горната линия.
# Не забравяйте винаги да добавяте (>>) към изходния файл!
cat $INPUT >> $OUTPUT
echo -ne '\33%-12345X' >> $OUTPUT
}
}
Мнозинството от GNU/Linux системите се разпространяват с LPD. Тук ще бъде описана съвсем основна настройка на LPD; по - нататък в документа има подробности за създаването на сложни филтри и за мрежовите настройки.
При минимално направена конфигурация на lpd се получава система, която може да приема и подрежда файловете за печат, и да ги печата. Така настроената система не се интересува дали принтера разбира това, което му се подава, и навярно няма да получите много добри разпечатки с нея. Но все от някъде трябва да се започне.
За да добавите опашка за печат към lpd, трябва да направите вписване в /etc/printcap, и да създадете нова буферна поддиректория в /var/spool/lpd.
Едно вписване в /etc/printcap изглежда по следния начин:
# LOCAL djet500
lp|dj|deskjet:\
:sd=/var/spool/lpd/dj:\
:mx#0:\
:lp=/dev/lp0:\
:sh:
Така се дефинира буфер, наречен lp, dj или deskjet, намиращ се в директорията /var/spool/lpd/dj, нямащ ограничение за големината на отделните задачи, от който се отпечатва към устройството /dev/lp0, и който няма заглавна страница (с името на човека, който отпечатва, и т.н.), която да добавя в началото на всяка задача за печат.
Сега отидете да прочетете man страницата на printcap.
Горното вписване изглежда доста просто, но има уловка - в случай, че не пращам за печат на DeskJet 500 файлове, които той рабира, принтера ми ще отпечата странни неща. Например, ако изпратя обикновен Unix текстов файл към този принтер, той ще възприеме символите за нов ред като символи, и ще отпечата нещо такова:
This is line one.
This is line two.
This is line three.
При отпечатването на Postscript файл към този буфер, ще се получи една красива разпечатка на Postscript командите, при това със "стъпаловидния ефект", но не и нещо полезно.
Става ясно, че е необходимо още нещо, а именно филтриране. По - наблюдателните от вас, които са прочели man страницата на printcap, навярно са забелязали атрибутите if и of. Е, if, или входящ филтър (Input Filter), е точно това, от което се нуждаем.
Ако напишем малък скрипт, наречена filter, който да коригира отпечатването на нов ред, "стъпаловидния ефект" ще бъде отстранен. Така че ще трябва да добавим една if линия към горното вписване:
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>){chomp $_; print "$_\r\n";};
# Може да добавите накрая ред за изваждане последната страница: print "\f";
Ако направим описаното, ще имамаме вече буфер за печат, към който ще можем да отпечатваме обикновени Unix текстови файлове, и да получаваме приемливи резултати. (Да, има четири милиона по - добри начина да се напише този филтър, но малко от тях са така илюстративни. Можете да се опитате да напишете нещо по - ефективно).
Единственият останал ни проблем е това, че отпечатването на прост текст вече не е актуално - със сигурност би било по - добре да може да отпечатваме Postscript, и други форматирани или графични типове информация. Е, да, това не е трудно да се направи. Трябва просто да се направят добавки към горния прост филтър.
Такъв филтър вече ще се нарича magic-филтър. Той играе същата роля, както и езиковите филтри при PDQ. Не се опитвайте сами да напишете такъв, освен ако не се налага да отпечатвате нещо по - странно, вече има написани много добри такива, и към повечето от тях има лесни за ползване диалогови инструменти за настройка. Просто трябва да си изберете подходящ готов филтър:
Докато много от версиите на LPD не се справят достатъчно добре с Postscript (без значение от настройките), комбинацията от наскоро осъвременените от VA Linux версии на LPD и на филтърния софтуер на RedHat, дава доста по - добри резултати на Postscript принтери. Понастоящем тази система работи само с RedHat 6.2, макар че не е трудно пакета да се приспособи и за други дистрибуции.
Новата система на VA използва PPD файлове (PPD = Postscript Priner Definition). PPD файловете се доставят от производителите на принтери, и в тях са декларирани настройките на принтера, както и Postscript кода, необходим за да бъдат те активирани. При VA системите, нормалната LPD схема работи по малко по - различен начин:
Можете да получите RPM пакети, или компресиран в .tar.gz първичен код, от страницата на проекта на SourceForge. За подробности по инсталирането прочетете микро-HOWTO документа по този въпрос на проекта. Ето и най - важното: трябва да деинсталирате RedHat версиите на lpd и rhs-printfilters изцяло, и да инсталирате VA весиите им, плюс ppdfilt, grp, и още няколко полезни инструмента.
Ще се наложи да си набавите и PPD файлове за вашия Postscript принтер. PPD файлове обикновено се намират много лесно. VA Linux и HP разпространяват PPD файлове за много от моделите LaserJet. Други производители също осигуряват такива файлове за своите принтери, а и Adobe дотавят PPD файлове за много принтери.
Понастоящем цялата тази инсталация е малко трудна. Но бъдещите инструменти за инсталиране ще се изграждат на основата на библиотеката за конфигуриране на принтери libprinterconf, която позволява едновременно автоматично откриване, и rhs-printfilters настройване и на мрежови, и на локални принтери.
Забележете, че GRP може да се използва самостоятелно, без усъвършенствания LPD или дори rhs-printfilters. GRP може да се компилира с всичките знания, необходими му да обработва директно Postscript задачи. Това би могло да бъде една по - лесна - за инсталиране възможност, подходяща за хора, на които на практика никога не им се налага да изплзват lpr директно.
Веднъж след като сте настроили LPD системата с Postscript възможности на VA, вие можете да управлявате настройките на принтера си по два начина:
За да използвате GRP, първо трябва да се уверите, че сте определили правилния PPD файл. След това настройките на принтера ще бъдат достъпни за вас в панела "Advanced". Основните настройки на ppdfilt ще бъдат достъпни от панела "Common".
Тази команда lpr поддържа атрибута -о. С него можете да укажете които желаете двойки настройка/стойност от вашия PPD файл. Ето една примерна част от PPD файл:
*OpenUI *PrintQuality/Print Quality: PickOne
*DefaultPrintQuality: None
*OrderDependency: 150 AnySetup *PrintQuality
*PrintQuality None/Printer Setting: ""
*PrintQuality Quick/QuickPrint: "<< /DeviceRenderingInfo ...
*PrintQuality Normal/Normal: "<< /DeviceRenderingInfo << /...
*PrintQuality Pres/Presentation: "<< /DeviceRenderingInfo ...
*PrintQuality Image/1200 Image Quality: "<< /DeviceRenderi...
*CloseUI: *PrintQuality
За настройката PrintQuality възможните стойности са Quick, Normal, Pres, и Image. Може да подадете например следната команда:
%lpr -o PrintQuality:Image file.ps
Има множество настройки, които са общи за всички принтери, и които можете да изпозвате допълнително към тези от PPD файла. Сред тях са:
Пoнеже това е много популярен въпрос, включвам по - долу списък с правата за достъп на интересни файлове от моята система. Има множество по - добри начини, като използването на SIGD двоични файлове и без да се прави всичко 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 трябва да се изпълнява като root, за да може да се свърже с lp порта с нисък номер. Навярно ще стане UID lp.lp или нещо подобно след свързването, но аз мисля че не става. Това е просто още една причина да избегнете употребата на оригиналния LPD от BSD.
PDQ използва различна схема на работа, без централен демон, и има различни програми. Единствените SUID root програми са тези за lpd интерфейса - lpd_cancel, lpd_print, и lpd_status; те са SUID понеже съвременните Unix сървъри за печат изискват заявките за печат да идват от привилегирован порт. В случай, че единствените принтери, за които използвате bsd-lpd интерфейса на PDQ, са свързани към мрежови сървъри за печат (като HP JetDireck или Lexmark MArkNet адаптерите), няма нужда да установявате SUID бита на тези програми.
Големите системи, под което разбирам мрежи с два или повече принтера или сървъра, имат специални изисквания. По - долу има някои съвети. При наистина големи системи, простото боравене с информацията в printcap/filters може да се превърне в сложен проблем; Cisco Enterprise Print System е подходящо решение за такива ситуации, като добра отправна точка, или като завършено решение, в зависимост от нуждите ви. В средни до големи системи ще се чувствате добре с вградените особености на LPRng.
Обикновения LPD ви предлага много малко възможности да водите отчет за печата. Можете да посочите името на файла за отчетност в атрибута af на printcap, но той просто се предава като аргумент към if филтъра. За вас остава задачата да накарате if филтъра си да прави вписвания във файла за отчетност, и за вас също остава последващата обработка на този файл (традиционният формат е използваем главно за линейни принтери, и труден за обработване с Perl, така че няма причина да го запазвате). Също така, ако използвате моята програма lpdomatic като филтър, ще се наложи да направите промени, тъй като тя зависи от подвания и от конфигурационен файл име на файла за отчет.
Ghostscript разползга с оператора PageCount, с който можете да преброявате отпечатаните страници за всяко задание; просто забождате няколко линии postscript в края на заданието за печат, за да получите запис във файла за отчет; това най - добре може да бъде онагледено с примера unix-lpr.sh, намиращ се в първичния код на Ghostscript.
Вземете си бележка, че използването на unix-lpr за отчетност, води до запис във файл от интерпретатора Ghostscript, и се явява несъвместимо с препоръчваната настройка -dSAFER. По добро решение би било да се пита принтера с PJL команда след всяка задача, или да се напише малкa postscript програмка, която да извежда на стандартния изход броя на страниците; там информацията може да се улови без да има запис във файл.
Системата за буфериране LPRng включва специфична за НР примерна реализация на отчетност; предполагам, че се пита принтера с PJL команда. Тази технология би трябвало да работи с мнозинството PJL, Postscript, или SNMP принтери, а които имате двупосочна комуникация.
Ако имате мрежов принтер поддържащ SNMP, можете да използвате програмата npadmin за запитвания относно броя на отпечатваните страници след всяко разпечатване. Това трябва да става безпроблемно за всички задачи. Вижте в част 11.10.1 за повече информация за npadmin.
Тази част от документа по дефиниция е незавършена. Чувствайте се свободни да ми изпращате подробности за вашите любими дистрибуции. Понастоящем не ми е известно да има дистрибуция която да поддържа, или дори да доставя, софтуерът, който аз препоръчвам за единични потребители: PDQ. Няколко дистрибуции вече имат поддръжка за CUPS, системата с най - голяма функционалност за момента; някои дори използват моят основан на база данни конфигурационен инструмент.
Има множество предоставяни от трети страни пакети за улесняване настройките по печата в Unix. Те са разгледани в част 8; за подробности вижте подсекциите там.
RedHat предоставят инструмента с графичен интерфейс printtool, с който може да се добавят местни или мрежови принтери. Той ви позволява да изберете поддържан от Ghostscript тип принтер, и също файл на Unix устройство, към който да извършвате печата; след това определя опашка за отпечатване в /etc/printcap, и използва програма за филтриране от пакета rhs-printfilters; в последната има поддръжка за Postscript и други често срещани входни типове данни. Това решение върши доста добра работа, и в общия случай извършването на настроойките става лесно.
RedHat 6.x се разпространявава с версия на BSD LPD; RedHat 7.0 изглежда използва по дефиниция LPRng.
Мястото, в което RedHat се провалят, са случаите с принтери, неподдържани от стандартния Ghostscript идващ с дистрибуцията (който е с GNU GPL лиценз, за разлика от Aladdin Ghostscript, и съответно поддържа по - малкък брой принтери). Направете проверка във списъка с поддържаните принтери по - горе (или В ИНТЕРНЕТ), в случай че не можетеда отпечатвате както искате с доставения ви от RedHat софтуер. Ако вашият притнер не се поддържа от инструментите на RedHat, може да се наложи да инсталирате предоставяната от Aladdin версия на Ghostscript, а може би още по - добре ще бъде да използвате пакетите lpdomatic или apsfilter, които "знаят" всичко за принтерите, поддържани от последните версии на Ghostscript, а и за други.
В бъдещите версии на RedHat инструмента printtool ще бъде пренаписан да поддържа повече принтери, като има намерения да буде извършена подмяна и на rhs-printfilters (текущия филтър има затруднения с някои принтери, например не-PCL моделите DeskJet на HP и повечето от тези на Lexmark). Също така, могат да бъдат могат да бъдат включени и някои от чертите на разработената от VA Linux система PPD.
Дистрибуцията Debian предлага избор между стандартния lpd, LPRng и CUPS; LPRng или CUPS са навярно по - добрият избор. PDQ се предлага в нестабилната версия (понастоящем наречена sid) на дистрибуцията. Debian предоставя също и разнообразни инструменти за конфигуриране на печата; версия 5 или следваща на apsfilter е най - доброто, на което можете а заложите, тъй като в тази версия има поддръжка аа схемата за uniprint драйвери на LPRng и Ghostscript.
Системата за печат на дистрибуцията SuSE Linux се основава на apsfilter, с хякои разширения; при SuSE apsfilter разпознава всички често срещани файлови формати (включително HTML, ако е инсталиран html2ps). Съществуват два начина да се настрои печат при SuSE системите:
Wolf Rogner ми изпрати впечатленията си за затрудненията които е изпитал при настроиването на печата със SuSE. Може да ви се случат някои от следните неща:
Caldera предлага LPRng. Нямам представа какви инструменти за конфигуриране се предлагат.
Наскоро назначих служител на Caldera да поддържа базата данни на Linuxprinting.org; очевидно те смятат за в бъдеще да предлагат основани на CUPS и Foomatic системи за печат.
Corel се базира на Debian, така че всичко, казано по - горе за Debian важи и тук. Има добавен и собствен инструмен за настройка, основаващ се на библиотеката sysAPS, която от своя стрна използва моята база от данни. Със сигурност са я направили като част от WordPerfect.
Corel поддържат нюзгрупата corelsupport.linux.printing. Болшинството от приказките в нея са за WordPerfect и CorelLinux.
Версия 7.2b1 на Mandrake се предлага стандартно с CUPS. Програмата QtCUPS осигурява чисто фрафичен административен интерфейс. Имаха някои проблеми да включат колкото е възможно повече драйвери, и затова предоставят CUPS PPD файлове, изградени с кода на моя интерфейс foomatic.
Мисля, че по - ранните версии на Mandrake се предлагаха с с инструмента на RedHat printtool.
Slackware пристига с APS Filter. SETUP скриптът от apsfilter се инсталира като команда apsfilterconfig. Би трябвало да успеете да направите подходящи настройки просто като я стартирате.
Възможно е Slackware да включва и други системи; не разполагам с дистрибуцията, за да се запозная с нея.
Моля, изпратете ми информация какво е направено по въпроса в другите дистрибуции!
Ghostscript е една много значима програма за печатането със свободен софтуер. Преобладаващата част от работещия под Unix софтуер генерира Postscript, което обикновено ви струва по $100 допълнително на принтер. От своя страна, Ghostscript е свободен продукт, който може да генерира езика за печат на вашия принтер от получения от приложенията Postscript. Когато го свържете с драйвера на PDQ или с входящия филтър на lpd, получавате виртуален Postscript принтер, и правите живота си значително по - лесен.
Ghostscript може да бъде намерен в няколко форми. Търговската версия на Ghostscript, нареченаAladdin Ghostscript, може да се използва свободно за лични нужди, но не може да бъде част от комерсиално разпространявани пакети. Тя обикновено е с около една година по - напред от свободната версия на Ghostscript; в момента например, в нея има поддръжка за много цветни мастиленоструйни принтери, каквато липсва в по - старите версии на Ghostscript; поддръжката за PDF е също доста по - добра.
Главната свободна версия на Ghostscript е GNU Ghostscript, и представлява просто остаряла версия на Aladdin Ghostscript. Тази донякъде неудобна ситуация позвлява на Aladdin да бъдат напълно самофинансиращ се проект; водещите версии се правят от L Peter и няколко разработчика, и се лицензират на производители на хардуер и софтуер за включване в комерсиални продукти. За нещастие, тази схема от една страна осигурява работа на L Peter по Ghostscript за години напред, но от друга страна потиска включването на голямото общество разработчици на свободен софтуер. Специално авторите на драйвери намират ситуацията за лоша. Плановете на L Peter да напуска дават правомощия на голяма общност от разработчици да се включат в проекта, и затова той предвижда промени в лиценза, и е създал проект на SourceForge.
Третат версия на Ghostscript е ESP Ghostscript, поддържана от Easy Software Products (авторите на CUPS) по договор с Epson. ESP Ghostscript представлява съвкупност от драйвери от gimp-print проекта и GNU Ghostscript, плюс някои корекции. Тази версия още не е съвсем готова, но и това ще стане скоро, и тя със сигурност ще улесни живота на собствениците на управлявани от Gimp-print принтери.
Каквото и да правите с gs, уверете се, че го стартирате с аргумента, забраняващ достъпа до файлове (-dSAFER). Postscript е напълно функционален език, и лошо написана негова програма може да ви докара доста главоболия.
Ако става въпрос за PDF, формата за преносими документи (Portable Document Format) на Adobe (поне до 1.3), той е просто малко повече от добре подреден Postscript в компресиран файл. Ghostscript се справя добре с входяща информация от типа PDF, също както и Postscript. Така че вие можете да се окажете първи във ващия блок, който има PDF-принтер.
Най - често Ghostscript бива стартиран от филтъра, който сте избрали (аз ви препоръчвам apsfilter, ако вашият доставчик не предоставя нищо, което да ви върши работа), но също така е много удобно да го стартирате самостоятелно на ръка, за да проверявате за евентуални грешки.
Изпълнявайки командата gs -help ще получите кратък списък от наличните настройки и драйвери (имайте пред вид, че това е списъка от вградените при компилирането драйвери, а не главния списък с всички налични драйвери).
За да изпитате работата на Ghostscript или даден файл, можете да изпълните следната примерна команда: gs OPTIONS -q -dSAFER -sOutputFile=/dev/lp1 test.ps
Има множество настройки, които бихте могли да промените, в случай че изхода от gs не ви удовлетворява (в действителност, можете да правите каквито ви хрумнат дяволии, стига това да ви доставя удоволствие - все пак разполагате с първичния код).
Някои от тези настройки, както и други, описани в потребителското ръководство на Ghostscript (файлът Use.htm в Ghostscript дистрибуцията; вероятно се намира в /usr/doc или /usr/share/doc на вашата система) са чудесни кандидати за драйверни настройки във вашата филтрираща система, или в декларациите за драйвери на PDQ.
Местоположението, големината, и съотношението между страните на изображението на една страница се определят от специфичния за принтера драйвер в Ghostscript. Ако сметнете, че вашите страници се отпечатват твърде къси, или твърде дълги, или твърде големи (2 пъти повече), бихте могли да погледнете първичния код на драйвера и да променяте параметри там, където ви се стори уместно. За нещастие, всеки драйвер е различен, така че аз на практика нямам възможност да ви кажа какво къде да промените, но повечето от тях са доста добре документирани.
Мнозинството не - лазерни принтери страдат от факта, че точките им са доста големи. От това и отпечатваните картини са твърде тъмни. Ако установите, че при вас този проблем е налице за драйвер, нямащ друга възможност за настройка, ще трябва да използвате собствена функция за прехвърляне. Просто създайте следния файл във директорията с библиотеките на 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).
Към много от драйверите за новите мастиленоструйни принтери има аргументи за командния ред, или различни допълнителни файлове към драйвера, чрез които може да се променя гама параметъра (и други параметри), с цел да се подобри отпечатваното от принтера при използване на различни типове хартия. Добре ще е да проучите тези неща по - подробно, преди да започнете да си играете да правите настройки по Postscript.
Стандартният dithering за цвят на Ghostscript е оптимизиран за устройства с ниска разделителна способност. Ghostscript обработва образа доста грубо, с цел да се получи изход за печат с 60 ppi (това не са dpi, а ppi - "очевидните" цветни точки на инч след обработката). В резултат на това и от съвременните цветни принтери излизат лоши отпечатки; особено мастиленоструйните принтери, когато използват фотохартия, са способни на много по - високи стойности ppi.
За да преодолеете този проблем, използвайте настройката -dDITHERPPI=x на Ghostscript, където х е стойнотта, която искате да използвате. Това може и да има ефект, а може и да няма при всички драйвери; много от новите драйвери (например stp драйвера за Epson Stylus) използват свои методи за обработка на образа и не се съобразяват с тази настройка. А за някои драйвери и двата начина важат (например при bjc600 за Canon BubbleJet).
На практика при Ghostscript dithering е доста основно. Много неща, необходими за качествено отпечатване на съвременните принтери, просто липсват в Ghostscript. Има различни проекти, които работят по разрешаването на този проблем, но техния прогрес е ограничен от лиценза на Ghostscript, който налага разработка в стил "катедрала". Започвайки от Open Source Printing Summit 2000 събирането, всички необходими хора говорят за това, така че очаквайте ситуацията да се промени в скоро време.
Една от особеностите на повечето системи за буфериране на печата е, че те поддържат разпечатването през мрежа към принтери, физически свързани към друга машина. С внимателно подбрана комбинация от програми за филтриране, и използвайки ралични полезни приложения, можете да печатате към принтери, свързани във всяка