Tipy a triky: konfigurace tiskarny pod Linuxem


Taky jste nekdy chteli tisknout pod linuxem, a zakysli (fujtajbl slovo) jste na necem ?


Takze jak na to: jako prvni musite mit v jadre podporu pro tiskarnu. Linux pouziva tzv. polling driver, ktery nepouziva preruseni. V praxi se jadro obcas koukne, jestli si tiskarna zada data, a potom je tam dejme tomu max. 1ms pere co to de. Tim se naplni buffer tiskarny (na chvili). Takze puvodni preruseni tiskarny (IRQ 7,5) muzete pouzit treba na soundblaster.
Konfigurace tiskarny v jadre viz konfigurace jadra

Ve slackware je balik, kde jsou programy pro ovladani tiskarny. Tyto programy jsou:


Souvisejici soubory:


Po instalaci baliku techto programu v slackware budete jiste hned po zapojeni tiskarny schopni tisknout prikazem
lpr <jmeno_souboru_na_tisk>
a overit si, zda je soubor skutecne zarazen do fronty:

smrt:~$ lpq
lp is ready and printing
Rank   Owner      Job  Files              Total Size
active root       116  lp-acct            25 bytes
1st    uzivatel   117  web2c.h            1683 bytes
Vsimnete si sloupce job. Tim je jednoznacne urcen soubor k tisku v tiskove fronte. Pokud budete potrebovat vyjmout nejaky jiz zarazeny tiskovy job, provede se to prikazem:
smrt:~$ lprm 116 
cfA116Aa00308: Permission denied
cfA116Aa00308: Permission denied
Oops! Tak na tohle jsem nemel pravo. Ted spravne:
smrt:~$ lprm 117
dfA117Aa00357 dequeued
cfA117Aa00357 dequeued
Hmm, takze zarazeni a vyjmuti z fronty bychom meli. Ted jeste co kdyz jsou soubory ve fronte, tiskarna je zapnuta a nic se nedeje ? Muze pomoci tento prikaz:
smrt:~$ lpc
lpc> help
Commands may be abbreviated.  Commands are:

abort   enable  disable help    restart status  topq    ?
clean   exit    down    quit    start   stop    up
lpc> status
gen:
        queuing is enabled
        printing is enabled
        1 entry in spool area
        lp is ready and printing
lp:
        queuing is enabled
        printing is enabled
        1 entry in spool area
        lp is ready and printing
ps:
        queuing is enabled
        printing is enabled
        1 entry in spool area
        lp is ready and printing
lpc>
Nerozepisuji se prilis k jednotlivym prikazum programu lpc, kazdy si je jiste prelouska sam, kdyz to bude potrebovat (ja zatim ne krome toho 'status').

Jak jiste vidite, ve vypisu je uvedeno vice tiskaren. Neznamena to, ze mam doma skutecne tri tiskarny. Pouze jsem si nadefinoval vice logickych tiskaren. Proc ?

V unixu je k tiskarnam standartne pristupovani pres prikaz lpr. Ten ma za ukol spravovat frontu tisku (tedy pridavat do ni joby). Protoze ale na jednom pocitaci muzete mit dve tiskarny nebo dokonce muzete mit tiskarnu pripojenu pres sit (tisknout si z evropy v australii) na vzdalenem print-serveru, musi byt moznost nejak specifikovat na kterou tiskarnu chcete tisknout z aplikacnich programu. Proto ma kazda definovana tiskarna sve jmeno (podobne jako si v winlame muzete nahrat asi tak maximalne 10 ovladacu pro tiskarny). Zde se vam pri tisku nevyhodi okno na obrazovku, kam ze to chcete vyblit vase data, ale specifikujete jmeno tiskarny jako parametr. Aplikacni program potom zavola program lpr s parametry -P<printer> , tedy pro tisk na tiskarne s symbolickym nazvem epson1:
lpr -Pepson1 mujzdrojak.c

Aplikace tez predavaji programu lpr typ dat na tisk (ascii, TeX *.dvi, postscript *.ps, rasterove formaty....) prepinaci -c, -d, -f, -g ..... Vase tiskarna musi byt schopna tyto formaty tisknout. Zde ale vznika problem. Laserove tiskarny maji vetsinou v sobe postscript a jehlickove zase vetsinou umi emulovat grafiku EPSONa (8,24 jehel). Vetsi problem je toto pro jehlove tiskarny, protoze postscript (docela casto pouzivany format pro dokumenty v UNIXu) definuje fonty, ktere maji 'lejzrovky' v sobe. Vypada asi takto:

%!PS-Adobe-3.0
%%BoundingBox: 54 72 535 761
%%Creator: Mozilla (NetScape) HTML->PS
%%DocumentData: Clean7Bit
%%Orientation: Portrait
%%Pages: 5
%%PageOrder: Ascend
%%Title: Tipy a triky: printer
%%EndComments
%%BeginProlog
Pro lidi, co maji lejzrovky, nebude problem je nastavit. Pokud vsak mate epsona a chteli byste na nem tisknout grafiku a pekne dokumenty, tak holt budete muset udelat filtr, ktery vam prelozi za pomoci lokalnich fontu standartni vstupni format (predpokladam postscript) do rasteroveho formatu vasi tiskarny. Tento filtr bude volan zarourovane, tj. demon lpd pusti original data na standartni vstup vaseho skriptu ktery by na svem vystupu mel produkovat to co poleze do tiskarny (v tomto skriptu muzete poslat tiskarne jakoukoli inicializaci, pripadne muzete kazdou stranku vypsat nejakou peprnou nadavku, aby meli uzivatele radost (;-)). Nazorne je to videt z obrazku (jaky filtr ma lpd pouzit zjisti z /etc/printcap).


A ted proc mam nadefinovany tri logicke tiskarny (i kdyz fyzicky sdili tu samou): z nekterych programu se neda nastavit typ formatu tisku (aplikace nerekne lpr, jaky typ dat ze to vlastne tiskne) a tiskarna ze sebe zacne chrlit textovou podobu postscriptu. Proto mam tiskarnu nazvanou ps, protoze pak vim ze kdyz chci tisknout postscript, tak to na ni poslu a nestaram se dale o nic. Stejne mam tiskarnu na *.dvi LaTeXove soubory a tiskarnu na ciste testove dokumenty (defaultni).

Ukazka tisku na moji emulovanou ps tiskarnu z Netscape 1.1N:


Neplette si logicka jmena tiskaren lp s zarizenimi /dev/lp? !!. Treba ja jsem si nechal puvodni defaultni tiskarnu gen (pouzivam na text a primy tisk z dosemu). Potom jsem si nadefinoval tiskarnu lp, ktera umi tisknout *.dvi LaTeXove soubory (mam humusnou radoby-EPSON-kompatibilni tiskarnu, ktera je 9-jehlova). Ukazka z meho souboru /etc/printcap pro defaultni textovou tiskarnu (ta neza#zovana radka):

#       @(#)etc.printcap        5.2 (Berkeley) 5/5/88
#
# DecWriter over a tty line.
#lp|ap|arpa|ucbarpa|LA-180 DecWriter III:\
#       :br#1200:fs#06320:tr=\f:of=/usr/lib/lpf:lf=/usr/adm/lpd-errs:
#lp:lp=/dev/lp0:sd=/usr/spool/lp0:of=/usr/lib/lpf: lf=/usr/adm/lpd-errs
#
# Generic printer:
gen:lp=/dev/lp1:sd=/usr/spool/lp1:sh
#
Dalsi je tiskarna na tisk postscriptu. Musel jsem v ni nadefinovat externi filtr, ktery konvertuje PS>EPSON. Existuji sice filtry specielne delane pro tento ucel (IMHO), ale velice jednoduse se da pouzit program gs (snad ghostscript nebo co to je) s parametry -sDEVICE=epson a vystupem jdoucim na standartni vystup. Tady je vypis skriptu pseps (jako postscript-epson) ktery mam ulozen pro prehlednost v /etc/ (tenhle skript je spustitelny).
#!/bin/sh
/usr/bin/gs -q -dYO=1 -dXO=1 -dSAFER  -sDEVICE=epson -r240x72 \
-dNOPAUSE -sOutputFile=- -
# -dSAFER -r120x216 
#-sDEVICE=eps9high
No a ted prislusna pasaz z /etc/printcap, ktera tenhle skript definuje jako filtr:
lp|bam|Epson FX-80:lp=/dev/lp1:sd=/usr/spool/lp1:sh:mx#0:\
             :df=/etc/dvieps:\
             :if=/usr/sbin/lpf:

#postscript printer emulation
ps|lp1|Epson FX-80-ps:lp=/dev/lp1:sd=/usr/spool/lp1:sh:mx#0:\
             :df=/etc/dvieps:\
             :if=/etc/pseps:
Jak si jiste muzete vsimnout, tohle je pro dve tiskarny. Obe z nich maji zarazen filtr /etc/dvieps (dvi-epson), ktery jeste uvedu. Nicmene tiskarna ps ma jako standartni filtr pseps, zatimco lp ma nejakou humusarnu (sam nevim co ten program dela ;-) . Takze ps tiskne postscriptove, i kdyz ji to nereknete. Obe tiskarny vsak maji stejnou spool frontu, a tisknou i na stejnou fyzickou tiskarnu (/dev/lp1).

Tady je filtr dvieps, konvertujici format dvi (LaTeX) na data pro epson (tenhle skript vola nejaky program dvips, ktery konvertuje LaTeX>PS, a pak se teprve konverti PS>EPSON). To je humus.

#!/bin/sh
dvips -f | \
/usr/bin/gs -q -dSAFER -sDEVICE=eps9high -r120x216 \
 -dNOPAUSE -sOutputFile=- -
Mnohem jednoduseji tohle vsechno resi Red Hat. Udelam priste.

Na zaver: lpr ma i jine parametry (man lpr), root muze zrusit print job komukoli, pro dalsi parametry tiskaren (man printcap), zarizeni /dev/lp? nemusi mit stejne poradi v jakem je nachazi dos, 1 logicka tiskarna muze mit i vice nazvu (ps|lp1|Epson FX-80-ps).


Zpatky na hlavni stranku