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 bytesVsimnete 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 deniedOops! Tak na tohle jsem nemel pravo. Ted spravne:
smrt:~$ lprm 117 dfA117Aa00357 dequeued cfA117Aa00357 dequeuedHmm, 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 %%BeginPrologPro 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=eps9highNo 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).