Задача за печат в спулера lpd узнава, че трябва да печата, както и получава информация за това кой подава задачата и как трябва да бъде отпечатана. След това lpd отпечатва задачата на съответния принтер



Дата28.02.2017
Размер59.58 Kb.
Печат под Linux


Когато имате PostScript принтер Вие просто нямате никакви проблеми да печатате под Linux. Не е така обаче, ако принтерът Ви не е PostScript, а масовите принтери са именно такива.


Правилото гласи, че трябва да използвате ghostscript, което е основният начин да се справите с проблема.
Някои програми като WordPerfect предлагат собствени драйвери за някои принтери. Тъй като ghostscript растеризира цялата страница и я печата като голяма графика, а драйверите на WordPerfect използват вградените шрифтове на принтера (или upload-ват такива при някои модели) може да се окаже, че скоростта на печат е по-добра в сравнение с тази при използването на ghostscript. Но понякога пък не може да се постигне качеството, което дава ghostscript. Трябва да се пробват и двата начина и да се прецени кой е по-добрият в конкретната ситуация.

Инсталиране на HP DeskJet принтер под Linux
(Как си пуснах моят HP DeskJet 400 можете да прочетете тук.)

Kak става печатането? Когато системата се зарежда се стартира и lpd-демона (Line Printer Daemon). Той търси файла /etc/printcap за да разбере на какви принтери ще управлява спулирането. Всеки път, когато някой стартира lpr - user-командата за обръщение към спулера (lpr се обръща към lpd през /dev/printer и вкарва нова задача за печат в спулера). lpd узнава, че трябва да печата, както и получава информация за това кой подава задачата и как трябва да бъде отпечатана. След това lpd отпечатва задачата на съответния принтер.


Тази система е още от времето, когато повечето принтери са били наистина line (линейни) - хората са печатали изключително ASCII текст. Сега е необходимо само малко допълнение за да се накара lpd да посрещне съвременните изисквания за печат.
Toва, което трябва да се направи за да се конфигурира принтера за работа под Linux e да се добави oпашка за lpd и съответно да се добави запис в /etc/printcap за тази опашка, kakто разбира се и да се създаде самата директория за спулера в /var/spool/lpd.
Toзи запис изглежда така:

# 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.


До тук добре, но ще забележите, че принтерът Ви (може би) се държи малко странно. Например да не разбира края на реда или да печата стъпаловидно. Ефектите са различни за различните принтери. Възниква нуждата от филтър, който да улавя и коригира странностите на принтера. Това става с добавянето на един if оператор в нашия /etc/printcap файл и той вече изглежда така:

lp|dj|deskjet:\

:sd=/var/spool/lpd/dj:\

:mx#0:\

:lp=/dev/lp0:\

:if=/var/spool/lpd/dj/filter:\

:sh:

А самият филтър може да бъде скрипт като този:



#!perl

# The above line should really have the whole path to perl

# This script must be executable: chmod 755 filter

while(){chop $_; print "$_\r\n";};

# You might also want to end with a form feed: print "\f";

Вероятно ще Ви се наложи да си направите няколко такива филтъра, които да управляват принтера по различен начин за различните ситуации. Вече се сещате, нали, че хубаво би било ако този филтър може да разпознава какъв тип документ ще се печата и сам да си сменя поведението. Разбира се, че има такива - oбикновено се наричат "magic филтри". Много популярен е APS филтъра, но Вашата Linux дистрибуция може да успява да управлява принтерът Ви още по-добре.


Трябва да си оправите правата на файловете и директориите, свързани с печата. Могат да изглеждат примерно така:

-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/

Можете да си вземете готови филтри от Metalab, както и друг софтуер за печат.


Сега остава да си запуснете ghostscript-a. Винаги, когато стартирате gs го правете с опцията -dSAFER за да си спестите излишни главоболия. Не забравяйте, че PostScript е съвсем пълноценен език за програмиране и колкото е мощен за да ви създаде удобства, така и можете да свършите големи поразии.
Обикновено gs се стартира от magic филтъра. gs -help ще ви даде информация за опциите и за компилираните в ghostscript драйвери.
Можете да пробвате следния ред за тестване на gs:
gs options -q -dSAFER -sOutputFile=/dev/lp1 test.ps

Нека да разгледаме един конкретен пример
Ще използваме magic филтър и нашият /etc/printcap файл ще изглежда така:

#best=600x600,norm=300x300(300x600 for plain text), draft=150x150)
lp|dj|dj600|HP DeskJet 600:\

:lp=/dev/lp1:sd=/var/spool/lpd/dj600:\

:sh:pw#80:pl#72:px#1440:mx#0:\

:rf=/usr/sbin/dj600m-best-filter:\

:if=/usr/sbin/dj600m-norm-filter:\

:df=/usr/sbin/dj600m-draft-filter:\

:nf=/usr/sbin/dj600m-quick-filter:\

:gf=/usr/sbin/dj600c-best-filter:\

:cf=/usr/sbin/dj600c-norm-filter:\

:tf=/usr/sbin/dj600c-draft-filter:\

:vf=/usr/sbin/dj600c-quick-filter:\

:af=/var/log/lp-acct:lf=/var/log/lp-errs:

djc|dj600c|HP DeskJet 600c:\

:lp=/dev/lp1:sd=/var/spool/lpd/dj600c:\

:sh:pw#80:pl#72:px#1440:mx#0:\

:if=/usr/sbin/dj600c-norm-filter:\

:df=/usr/sbin/dj600c-draft-filter:\

:rf=/usr/sbin/dj600c-best-filter:\

:af=/var/log/lp-acct:lf=/var/log/lp-errs:

Всъщност тук става въпрос за два принтера - черно-бял и цветен.

lp=/dev/lp1

Дефинираме устройството и порта.

sd=/var/spool/lpd/dj600

А тук спулинг директорията.

sh

Не искаме да печатаме заглавна страница.



pw#80

Ширината на страницата е 80 символа.

pl#72

Дължината на страницата е 72 реда.



px#1440

Ширината на страницата е 1440 пиксела.

mx#0

Неограничен размер на файла за печат.



af=/var/log/lp-acct

Счетоводен файл

lf=/var/log/lp-errs

Файл за грешки.

Ето и таблицата на опциите във файла /etc/printcap:


Ключ

Мнемоничен

Запис в
/etc/printcap


Качество

Цвят

Първоначално







if

нормално

не




-f

final

rf

най-добро

не

Fortran

-d

draft

df

чернова

не

DVI (tex)

-c

colour

cf

нормално

да

cifplot

-g

good

gf

най-добро

да

plot(3)

-t

test

tf

чернова

да

troff

-n




nf







ditroff

-v




vf







raster image

Специални благодарности на Andy Mortimer за въпросната конфигурация.


От тук можете да download-нете архив с девет конфигурационни файла, някои използвани от горния /etc/printcap-файл.

Още един по-семпъл пример
Нека пуснем HP DeskJet 660C. Предполагаме, че принтера е свързан към /dev/lp1. Добавяме следното в /etc/printcap:

# HP DeskJet 660C

lp|hpdj:\

:lp=/dev/lp1:\

:sd=/var/spool/lpd/hpDeskJet:\

:mx#0:\

:if=/var/spool/lpd/hpDeskJet/filter:\

:lf=/var/spool/lpd/hpDeskJet/errs:\

:sh:

Убедете се, че правата на /etc/printcap са r--r--r-- и като root изпълнете следните команди



cd /var/spool/lpd

mkdir hpDeskJet

chown root.daemon /var/spool/lpd/hpDeskJet

chmod ug=rwx,o=rx /var/spool/lpd/hpDeskJet
cd hpDeskJet

touch .seq errs status lock

chown root.daemon .seq errs status lock

chmod ug=rw,o=r .seq errs status lock

Създайте следния файл /var/spool/lpd/hpDeskJet/filter



#!/bin/sh

/usr/bin/gs -dSAFER -dNOPAUSE -sPAPERSIZE=a4 \

-sDEVICE=cdj550 -dBitsPerPixel=32 -dShingling=1 -dDepletion=1 \

-sOutputFile=- -q -

И изпълнете следващите команди:



chmod ug=rwx,o=rx filter

Накрая отпечатайте тестова страница с командата



lpr /usr/lib/ghostscript/examples/colorcir.ps

Не е много сложно нали?... :-)


База данных защищена авторским правом ©obuch.info 2016
отнасят до администрацията

    Начална страница