Naprej Nazaj Kazalo

8. Kako usposobiti zadeve

Za večino namestitev lahko verjetno ta razdelek v celoti ignorirate -- namesto tega lahko skočite kar na razdelek Rešitve dobaviteljev ali, še bolje, pogledate dokumentacijo vaše distribucije. Večina distribucij Linuxa ima eno ali več ,,trotl-zihr`` orodij za vse, kar opisujemo tukaj, za navadne tiskalnike.

Če orodje iz vaše distribucije za vas ne deluje ali bi radi imeli možnost interaktivnega nadziranja tiskalniških izbir, kadar tiskate, bi morali uporabljati kak drug sistem. PDQ je dobra izbira; ponuja zelo dobro funkcionalnost in ga je preprosto usposobiti. APS Filter je drug dober sistem; zelo enostavno nastavlja vrste in filtre za LPD v večini kakršnihkoli sistemov Unix.

Uporabljate lahko tudi vmesnike za tiskalniški sistem s spletnega mesta Linux Printing, da povežete številne proste gonilnike v več čakalnih sistemov. Ko bo ta projekt enkrat končan, bodo ti vmesniki ponujali najboljšo funkcionalnost: podprti so vsi slogi gonilnikov, ki so prosto programje, na voljo so nastavljive izbire in podprtih je večina tiskalniških čakalnih sistemov.

8.1 Nastavitev PDQ

PDQ lahko prikroji bodisi naduporabnik bodisi uporabnik Janez. Spremembe, ki jih naredi root, se zapišejo v /etc/printrc in prizadenejo vsakogar, medtem ko Janezove spremembe spremenijo le njegovo osebno datoteko .printrc. Vse se nanaša na obe vrste nastavitev.

Če v vaši distribuciji ni vnaprej pakiranega PDQ, morate dobiti izvirno kodo s spletne strani PDQ in jo prevesti sami. To je preprosto prevajanje, a najprej se morate prepričati, ali imate nameščene različne razvojne knjižnice GTK, C-jevsko razvojno knjižnico, prevajalnik gcc, make in morda še nekaj drugih razvojnih reči.

Gonilniki in vmesniki

PDQ dovoli, da uporabniki izberejo tiskalnik, na katerega želijo tiskati. Tiskalnik je v PDQ definiran kot kombinacija ,,gonilnika`` in ,,vmesnika``. Tako gonilniki kot vmesniki so pravzaprav le koščki besedila v nastavitveni datoteki za PDQ.

Vmesnik za PDQ pove vse o tem, kako pošiljati podatke tiskalniku. Najpogostejši vmesniki, ki so že definirani v vzorčni datoteki printrc v distribuciji PDQ, so:

local-port

Vmesnik za krajevna vrata se pogovarja z vzporednimi ali zaporednimi vrati stroja, v katerem teče PDQ. Z uporabo tega vmesnika lahko PDQ tiska neposredno na vaša vzporedna vrata. Vedite, da lahko v večuporabniških sistemih to povzroča zmedo in če imate omrežje, se bo vmesnik local-port nanašal le na en sistem. V teh primerih lahko definirate surovo nefiltrirano vrsto za lpd na vratih in tiskate na sistemski strežnik lpd natanko enako z vseh sistemov in računov brez kakršnihkoli težav. Ta vmesnik ima za argument ime naprave; tipična vrednost bi bila /dev/lp0.

bsd-lpd

Vmesnik za LPD kot v BSD se pogovarja prek omrežja s strežnikom LPD ali z omrežnim tiskalnikom, ki govori kot LPD. PDQ podpira oddajo opravil, preklic in poizvedbe na vmesnike LPD. Ta vmesnik ima za argumenta ime računalnika in ime čakalne vrste.

appletalk

Ta vmesnik vam omogoča tiskanje prek omrežja Appletalk; če imate tiskalnik priključen na vaš Macintosh, je to pravi način. Za delovanje ta vmesnik potrebuje paket Netatalk.

Gonilnik PDQ pove vse o tem, kako pregnesti tiskalniške podatke v format, ki ga razume določen tiskalnik. Za postscriptne tiskalnike bo to vključevalo pretvorbo iz ASCII v postscript; za nepostscriptne bo to vključevalo pretvorbo z ghostscriptom iz postscripta v jezik tiskalnika.

Če nobena od vključenih specifikacij gonilnika ne ustreza vašemu tiskalniku, si preberite spodnji razdelek o tem, kako napisati svojo.

Definiranje tiskalnikov

Za definiranje tiskalnika v PDQ:

To pa je tudi vse, kar je; večina dela je v iskanju ali ustvarjanju ustreznih specifikacij gonilnika, če ne najdete že narejene.

Ustvarjanje deklaracije gonilnika PDQ

Tu se bomo sprehodili po zgledu, kako narediti deklaracijo gonilnika za PDQ. Preden začnete, pa je vendarle več mest, na katerih najdete že narejeno deklaracijo gonilnika:

Na več mest lahko pogledate za podatke, potrebne, da napišete svoj lastni gonilnik za PDQ:

Če morate izdelate svojo lastno specifikacijo gonilnika ali ste izboljšali eno iz distribucije PDQ ali enega od programov za generiranje gonilnikov za PDQ, prosim, delite svoj izdelek s svetom! Pošljite mi ga na naslov gtaylor+pht@picante.com in zagotovil bom, da ga bodo našli naslednji uporabniki PDQ za vašo vrsto tiskalnika.

Zdaj pa se sprehodimo po pisanju specifikacije gonilnika, ki je naveden v zbirki podatkov Printing HOWTO kot delujoč, a zanj ne morete najti specifikacij gonilnika PDQ. Kot zgled tiskalnika bom uporabil Canon BJC-210.

Najprej pogledamo vnos v zbirki podatkov za ta tiskalnik. Opazite, da je podprt ,,popolnoma``, torej lahko pričakujemo enake (ali boljše) rezultate kot uporabniki Windows. Pomembni podatki so na dveh mestih v vnosu:

Notes (zapiski)

Zapiski v človeško berljivem formatu bodo pogosto vsebovali koristne informacije. Za nekatere tiskalnike je na voljo tudi povezava More Info, ki se navadno nanaša na spletno stran z več podatki, ki jo vzdržuje kak uporabnik tega tiskalnika, ali na spletno stran gonilnika.

Driver List (seznam gonilnikov)

Večina tiskalnikov ima seznam gonilnikov, za katere je znano, da delujejo. To je najpomembnejši del. Lahko sledite povezavam na stran, specifično za gonilnik, na kateri bo pogosto več podatkov o tem, kako izvajati gonilnik, ali pa povezavi na spletno stran gonilnika, če obstaja.

Specifikacija gonilnika PDQ ima dve logični funkciji: uporabniško interakcijo in obdelavo tiskalniškega opravila. V datoteki sta zastopani na treh mestih:

deklaracije izbir

Te določajo, katere izbire lahko uporabnik nastavlja, in deklarirajo spremenljivke PDQ za rabo v poznejših delih gonilnika.

jezikovni filtri

Ti obdelajo tiskalniško opravilo iz kateregakoli formata, v katerem je prišel (navadno postscript ali ASCII), v jezik, ki ga lahko razume

tiskalnik (na primer PCL). Tu so na voljo vrednosti izbir, pa tudi v izhodnem filtru.

izhodni filter

Ta končni filter poveže tiskalniške podatke ne glede na vrsto vhoda; pogosto so tu nastavljene izbire tiskanja.

Oglejmo si vsako od teh za Canon BJC-210:

Izbire

Seznam gonilnikov za ta tiskalnik vključuje gonilnika bj200 in bjc600, oba sta gonilnika vrste ghostscript. Zapiski svetujejo, da za črno-belo tiskanje uporabimo bj200.

Kar se torej tiče uporabnika, BJC-210 podpira eno uporabno izbiro: uporabnik bi moral izbrati barvno ali črno-belo tiskanje. To deklarirajmo kot izbiro, imenovano ,,MODE``:

option {
  var = "MODE"
  desc = "Način tiskanja"
  # default_choice "Color"    # odkomentirajte, da bo privzeto barvno
  choice "BW" {
    # Del z vrednostjo (value) dodeli spremenljivki MODE, karkoli
    # pač želite. Tu bomo dodelili besedilo, ki se spreminja med
    # dvema naboroma izbir za dva načina v ghostscriptu.
    value = "bj200"
    help = "Hitro črno tiskanje s črno kartušo."
    desc = "Le-črno"
  }
  choice "Color" {
    value = "bjc600"
    help = "Barvno tiskanje."
    desc = "Barvno"
  }
}

Z zgornjimi deklaracijami bo uporabnik v pogovornem oknu gonilnika, ko bo tiskal v xpdq, videl izbiro med načinoma ,,Color`` in ,,BW``. V orodju pdq lahko v ukazni vrstici določi -oBW ali -oColor. Privzeto vrednost lahko nastavite v xpdq ali, kot smo jo zgoraj, s ključno besedo default_choice.

Jezikovno filtriranje

PDQ navadno prepozna svoj vhod z ukazom file(1). Za vsako vrsto datoteke, ki jo vrne file, ki bi jo radi obdelovali, ponudite stavek language_driver. Stavek je sestavljen predvsem iz skripta, ki obdeluje tiskalniški jezik v kateremkoli (!) skriptnem jeziku, ki ga želite (privzeta je navadna Bournova lupina).

V našem primeru želimo tiskati postscript in ASCII na našem BJC-210. To zahteva dva jezikovna gonilnika: enega, da poganjamo ghostscript za postscriptna opravila, in drugega, da za opravila v ASCII dodajamo znake za povratek v vrstici (angl. carriage return, CR).

# Uporabi se prvi language_driver v datoteki, ki ustreza temu,
# kar pravi file(1).
language_driver ps {
  # file(1) vrne "PostScript document text conforming at..."
  filetype_regx = "postscript"
  convert_exec = {
    gs -sDEVICE=$MODE -r360x360 \     # izbire gs iz zbirke podatkov
       -q -dNOPAUSE -dBATCH -dSAFER \ # "navadne" izbire ghostscripta
       -sOutputFile=$OUTPUT $INPUT    # predelaj INPUT v datoteko OUTPUT

    # Ti dve zadnji vrstici bosta pogosto isti za vse tiskalnike,
    # podprte z gs. Vrstica gs... pa bo drugačna za vsak tiskalnik.
  }
}

# Vrsto text deklariramo po vrsti postscript, ker bo ukaz "file"
# pogosto opisal postscriptno datoteko kot besedilno (kar tudi je).
language_driver text {
  # Brez filetype_regx; iščemo ime gonilnika: "text"
  convert_exec = {#!/usr/bin/perl
     # program v perlu, le zato, ker to lahko storimo!
     my ($in, $out) = ($ENV{'INPUT'}, $ENV{'OUTPUT'});
     open INPUT, "$in";
     open OUTPUT, ">$out";
     while(<INPUT>) {
        chomp;
        print OUTPUT, "$_\r\n";
     }
  }
}

To je to! Medtem ko drugi tiskalniki morda potrebujejo filtriranje izhoda (kot je opisano v naslednjem razdelku), so zgornji stavki vse, kar je potrebno za BJC-210. Vse skupaj le še zavijemo znotraj poimenovanega stavka driver:

driver canon-bjc210-0.1 {
  option {
    var = "MODE"
    desc = "Način tiskanja"
    # default_choice "Color"    # odkomentirajte, da bo privzeto barvno
    choice "BW" {
      # Del z vrednostjo (value) dodeli spremenljivki MODE, karkoli
      # pač želite. Tu bomo dodelili besedilo, ki se spreminja med
      # dvema naboroma izbir za dva načina v ghostscriptu.
      value = "bj200"
      help = "Hitro črno tiskanje s črno kartušo."
      desc = "Le-črno"
    }
    choice "Color" {
      value = "bjc600"
      help = "Barvno tiskanje."
      desc = "Barvno"
    }
  }

  # Uporabi se prvi language_driver v datoteki, ki ustreza temu,
  # kar pravi file(1).
  language_driver ps {
    # file(1) vrne "PostScript document text conforming at..."
    filetype_regx = "postscript"
    convert_exec = {
      gs -sDEVICE=$MODE -r360x360 \     # izbire gs iz zbirke podatkov
         -q -dNOPAUSE -dBATCH -dSAFER \ # "navadne" izbire ghostscripta
         -sOutputFile=$OUTPUT $INPUT    # predelaj INPUT v datoteko OUTPUT

      # Ti dve zadnji vrstici bosta pogosto enaki za vse tiskalnike,
      # podprte z gs. Vrstica gs... pa bo drugačna za vsak tiskalnik.
    }
  }

  # Vrsto text deklariramo po vrsti postscript, ker bo ukaz "file"
  # pogosto opisal postscriptno datoteko kot besedilno (kar tudi je).
  language_driver text {
    # Brez filetype_regx; iščemo ime gonilnika: "text"
    convert_exec = {#!/usr/bin/perl
       # program v perlu, le zato, ker to lahko storimo!
       my ($in, $out) = ($ENV{'INPUT'}, $ENV{'OUTPUT'});
       open INPUT, "$in";
       open OUTPUT, ">$out";
       while(<INPUT>) {
          chomp;
          print OUTPUT, "$_\r\n";
       }
    }
  }
}

Filtriranje izhoda

Če želite nekaj dodati pred vsa tiskalniška opravila ali za njih ali narediti neke vrste preslikavo na vseh podatkih vseh vrst, potem to spada v stavek filter_exec. Naš mali Canon ne potrebuje takih stavkov, a le zaradi zgleda je tu preprosta ilustracija, ki prikazuje, kako podpreti dupleksiranje in izbiro ločljivosti s tiskalnikom Laserjet ali klonom, ki govori PJL:

driver generic-ljet4-with-duplex-0.1 {
  # Najprej, dva stavka z izbirami za stvari, ki jih lahko
  # izbere uporabnik:
  option {
    var = "DUPLEX_MODE"
    desc = "Način dupleksiranja"
    default_choice = "SIMPLEX"
    choice "SIMPLEX" {
      value = "OFF"
      desc = "Enostranski natisi"
    }
    choice "DUPLEX" {
      value = "ON"
      desc = "Dvostranski natisi"
    }
  }

  option {
    var = "GS_RES"
    desc = "Ločljivost"
    default_choice = "DPI600"
    choice "DPI300" {
      value = "-r300x300"
      desc = "300 dpi"
    }
    choice "DPI600" {
      value = "-r600x600"
      desc = "600 dpi"
    }
  }

  # Zdaj lahko obdelamo postscriptni vhod z gonilnikom ljet4
  # za ghostscript:
  language_driver ps {
    filetype_regx = "postscript"
    convert_exec = {
       gs -sDEVICE=ljet4 $GS_RES \
          -q -dNOPAUSE -dBATCH -dSAFER \
          -sOutputFile=$OUTPUT $INPUT
    }
  }

  # Na koncu zavijemo opravilo v ukaze PJL:
  filter_exec {
    # zahteva echo z možnostjo pošiljanja ubežnih kod...
    echo -ne '\33%-12345X' > $OUTPUT

    echo "@PJL SET DUPLEX=$DUPLEX_MODE"    >> $OUTPUT
    # Dodaste lahko dodatne ukaze @PJL kakor v zgornji vrstici.
    # Zagotovo pa vedno pripenjajte (>>) na izhodno datoteko!

    cat $INPUT >> $OUTPUT
    echo -ne '\33%-12345X' >> $OUTPUT
  }
}

8.2 Nastavitev LPD

Večino sistemov Linux dobite z LPD. Ta razdelek opisuje zelo osnovno usposobitev LPD; nadaljnji razdelki pokrivajo podrobnosti izdelave zapletenih filtrov in omrežnih nastavitev.

Osnovna nastavitev LPD

Najmanjša sestava lpd naredi sistem, ki sprejema datoteke v čakalno vrsto in jih natisne. Ne ozira se na to, ali jih vaš tiskalnik sploh razume, in vam verjetno ne bo dovoljeval izdelave privlačnega izhoda. A nekje moramo začeti.

Če želite dodati tiskalniško čakalno vrsto v lpd, morate dodati vnos v datoteko /etc/printcap in narediti nov čakalni imenik pod /var/spool/lpd.

Vnos v /etc/printcap je videti podobno:

# LOKALNI djet500
lp|dj|deskjet:\
        :sd=/var/spool/lpd/dj:\
        :mx#0:\
        :lp=/dev/lp0:\
        :sh:
To definira čakalno vrsto, imenovano lp, dj ali deskjet, ki čaka v imeniku /var/spool/lpd/dj, brez omejitev velikosti za posamezno opravilo, ki tiska na napravo /dev/lp0 in nima naslovne strani (z imenom tistega, ki tiska ipd.) dodane pred tiskalniško opravilo.

Zdaj z ukazom man printcap preberite stran v referenčnem priročniku za printcap

Zgornje je videti zelo preprosto, a prav tu se skriva kleč -- če ne pošiljate datotek, ki jih DeskJet 500 lahko razume, bo ta DeskJet tiskal čudne stvari. Če, denimo, pošljete povsem navadno tekstovno datoteko Unixa tiskalniku deskjet, bo ta dobesedno razumel znake za novo vrstico in dobili bomo:

To je prva vrstica.
                   To je druga vrstica.
                                       To je tretja vrstica.
in tako naprej. Tiskanje postscriptne datoteke v to čakalno vrsto nam bo dalo čudovit izpis ukazov postscripta, izpisanih s tem ,,stopničastim učinkom``, a nobenega uporabnega izhoda.

Gotovo je treba več dela in to je namen filtriranja. Tisti med vami, ki dobro opažate in ste prebrali referenčno stran o printcap, ste morda opazili atribute čakalne vrste (angl. spool attributes) if in of. No, if ali vhodni filter je natanko to, kar tu potrebujemo.

Če napišemo majhen ukazni skript, imenovan filter, ki doda znake za pomik na začetek vrste (angl. carriage return, CR) pred znake za konec vrstice, bomo s tem odpravili stopničavost besedila. Torej moramo v naš vnos v printcap dodati vrstico z if:

lp|dj|deskjet:\
        :sd=/var/spool/lpd/dj:\
        :mx#0:\
        :lp=/dev/lp0:\
        :if=/var/spool/lpd/dj/filter:\
        :sh:
Preprost filtrirni skript filter bi lahko bil:
#!perl
# Zgornja vrstica mora v resnici vsebovati polno pot do
# tolmača perl.
# Ta skript mora biti izvedljiv: chmod 755 filter
while(<STDIN>){chomp $_; print "$_\r\n";};
# Morda boste želeli končati z znakom za izmet strani:
# print "\f";
Če naredimo zgornje, smo dobili čakalno vrsto, ki zna tiskati datoteke z običajnimi besedili v Unixu in dobi smiselne rezultate. (Da, štiri milijone boljših načinov je, da napišemo ta filter, a le malo je tako nazornih. To lahko naredite tudi učinkoviteje.)

Edina preostala težava je, da tiskanje navadnega besedila pravzaprav ni preveč moderno -- gotovo bi bilo bolje, če bi lahko tiskali postscript in druge urejene ali grafične vrste izhodov. No ja, bilo bi, in to je preprosto storiti. Metoda je preprosta razširitev zgornjega filtra za popravo vrstic.

Tak filter se imenuje magični filter (angl. magic filter). Igra enako vlogo kakor jezikovni filtri v PDQ. Ne utrujajte se s pisanjem tega, razen če morate tiskati res čudne zadeve -- veliko je že napisanih in večina ima orodja za preprosto interaktivno nastavitev. Preprosto bi morali le izbrati primeren že napisani filter:

LPD-O-Matic

Ldpomatic je filter, zasnovan, da bi uporabljal podatke o tiskalnikih iz zbirke podatkov Linux Printing. Kmalu bo podpiral praktično vse gonilnike, ki so prosto programje, skupaj z običajnimi gonilniki za ghostscript, gonilniki Uniprint in raznimi filtrirnimi programi, ki krožijo naokoli. Deluje z različnimi vrstami LPD, tudi s pravim BSD, LPRng in novim LDP VA Linux ter omogoča izbiranje možnosti.

APS Filter

Pripomoček apsfilter je filter, zasnovan za uporabo v številnih različnih Unixih. Podpira praktično vse gonilnike za ghostscript. Tudi ta deluje z različnimi vrstami LPD, tudi s pravim BSD in LPRng. Trenutno je to najbrž najboljši sistem neodvisnih izdelovalcev za nepostscriptne tiskalnike.

RHS-Printfilters

RHS-Printfilters je filtrirni sistem, ki ga je izdelalo podjetje Red Hat. Mislim, da so ga začeli prilagati različici 4 Red Hat Linuxa, kot orodje v ozadju za preprosto uporabno grafično orodje printtool. Druge distribucije, tudi Debian, zdaj prilagajo kombinacijo rhs-printfilters/printtool kot tiskalno možnost. Torej je ta sistem nedvomno največkrat nameščen.

Filtrirni sistem RHS temelji na zbirki podatkov s seznamom v ASCII, ki se razširja poleg njega. Ta seznam podpira številne gonilnike vrste ghostscript in uniprint, vendar ne filtrirnih gonilnikov. Tako narejeni filtri tudi ne podpirajo veliko na področju izbir, ki jih lahko uporabnik nadzira med tiskanjem.

Pripomoček printtool postavi datoteko, imenovano postscript.cfg, v tiskalniški čakalni imenik. V tej datoteki je v slogu Bournove lupine vsaka nastavitev spremenljivka. V nenavadnih primerih lahko naredite uporabne spremembe neposredno v nastavitveni datoteki, česar printtool ne bi dovolil; tipično bi to bila določitev nenavadnega gonilnika za ghostscript ali ime datoteke PPD za različico RHS-Printfilters podjetja VA.

VA Linux je v skladu s pogodbo s HP izdelal nekaj izboljšav sistema RHS-Printfilters. S pravimi različicami je zdaj mogoče izbrati možnosti za postscriptne tiskalnike, ki jih krmilijo Adobove datoteke PPD. Ta sistem pokrivam v razdelku LPD za postscriptne tiskalnike.

Pri teh filtrih je še en kavelj: starejše različice lpd za oddaljene tiskalnike ne poganjajo filtrov if, večina novejših pa ga poganja (čeprav pogosto brez argumentov). Različice LPD, ki jih dobite s sodobnimi distribucijami Linuxa in FreeBSD, ga; večina komercialnih Unixov, ki še vedno prilagajo LPD, ima različico, ki ga ne. Več podatkov o tem najdete v razdelku o omrežnem tiskanju v nadaljevanju tega dokumenta. Če imate le krajevno povezane tiskalnike, vas to ne bo prizadevalo.

LPD za postscriptne tiskalnike

Medtem ko večina različic LPD postscripta ne obdeluje dostojno (pustimo uporabniške izbire), je VA Linux pred kratkim spremenil LPD in filtrirno programje Red Hata, da zdaj precej dobro podpira postscriptne tiskalnike. Trenutno ta sistem deluje le z Red Hat Linuxom 6.2, čeprav se paketi zlahka prilagodijo tudi za druge distribucije.

Kako to deluje

Novi sistem podjetja VA uporablja definicijske datoteke za postscriptni tiskalnik (angl. Postscript Printer Definition, PPD). Datoteke PPD prilagajo prodajalci tiskalnikov in deklarirajo dostopne izbire tiskalnika skupaj s postscriptno kodo, potrebno, da se aktivirajo. S sistemom VA običajna shema LPD deluje malo drugače:

  1. Uporabnik lahko določi izbire z zastavico -o. Če, denimo, tiskate na prosojnice, lahko določite -o MediaType:Transparency. Alternativno lahko za določitev izbir v pogovornem oknu uporabite uporabniški vmesnik GPR; posnetke zaslona z GPR lahko vidite v razdelku o GPR
  2. LPR poda izbire sistemu LPD kot razširjeni atribut v nadzorni datoteki za LPD.
  3. Podatki z razširjenimi izbirami se podajo paketu RHS-Printfilters v okoljski spremenljivki, ta pa potem uporabi ppdfilt, da doda te izbire podatkov za natis.

Pridobivanje in namestitev

Pakete RPM ali arhive z izvirno kodo dobite s spletnega mesta projekta na SourceForge. Podrobnosti o namestitvi najdete na namestitveni micro-HOWTO tega projekta. V bistvu morate v celoti odmestiti Red Hatove različice paketov printtool, lpd in rhs-printfilters, nato pa namestiti različice podjetja VA, plus ppdfilt, gpr in še nekaj drugih pripomočkov.

Potrebovali boste tudi datoteke PPD za vaše postscriptne tiskalnike. Datoteke PPD je navadno precej lahko najti. VA Linux in HP distribuirate datoteke PPD za številne modele Laserjet. Drugi izdelovalci ponujajo datoteke PPD za svoje tiskalnike, podjetje Adobe pa razpečuje datoteke PPD za mnogo tiskalnikov.

Trenutno je precej tega težko namestiti. Vendar bodo prihodnja namestitvena orodja zgrajena nad knjižnico za namestitev tiskalnika, imenovano libprinterconf, ki omogoča samodejno zaznavanje in nastavitev rhs-printfilter za omrežne in krajevne tiskalnike.

Opomba: GPR je moč uporabljati tudi samostojno, brez spremenjenega sistema LPD ali celo RHS-Printfilters. GPR se lahko prevede neposredno z vso potrebno logiko za gnetenje postscriptnih opravil. To je lahko preprostejša izbira za namestitev za tiste, ki jim nikoli ni zares treba tiskati z neposredno uporabo lpr.

Nadzorovanje postscriptnih izbir

Ko enkrat vzpostavite postscriptni sistem LPD podjetja VA, lahko tiskalniške izbire nadzorujete na dva načina:

z grafičnim vmesnikom

Če želite uporabljati GPR, najprej preverite, ali ste podali pravilno datoteko PPD. Potem bodo tiskalniške izbire dostopne na pultu ,Advanced`. Osnovne izbire za ppdfilt bodo dostopne na pultu ,Common`.

z ukazno vrstico

Ta lpr podpira izbiro -o. Katerikoli par izbira/vrednost iz vaše datoteke PPD lahko podaste z izbiro -o. Oglejte si, na primer, ta stavek iz datoteke 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

Za izbiro PrintQuality so možne vrednosti Quick, Normal, Pres ali Image. Podali bi lahko ukaz kod:

% lpr -o PrintQuality:Image file.ps

Obstajajo številne izbire, skupne vsem tiskalnikom, ki bodo delale poleg tistih iz vaše datoteke PPD. Te vključujejo:

page-ranges

Določite lahko obseg strani, ki naj se natisnejo. Na primer, page-ranges:2-3.

page-set

Tiskate lahko le na lihe ali le na sode strani. Na primer, page-set:odd za lihe strani.

number-up

Na vsaki strani papirja lahko tiskate več strani. Na primer, number-up:2.

Druge izbire so podrobno razložene na strani referenčnega priročnika za ppdfilt.

Dovoljenja datotek

Na zahtevo ljudstva dodajam spodaj izpis dovoljenj zanimivih datotek mojega sistema. Veliko boljših načinov je, da to storite, idealno z uporabo binarnih datotek SGID in ne tako, da vse napravite SUID root, a tak sistem sem dobil ob nakupu in kar se mene tiče, deluje. (Povsem odkrito, če vam prodajalec ne more prodati niti delujočega strežnika lpd, ste v godlji.)

-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 se mora trenutno poganjati kot root, da se lahko povezuje z nizko oštevilčenimi vrati opravila lp. Verjetno mora po povezovanju postati UID lp.lp ali nekaj takega, a mislim, da ne postane. To je še en razlog, da se izogibate izvirnega LPD iz BSD.

PDQ uporablja drugačno shemo, ki ni osredotočena na pritajene strežnike (angl. daemon-centric), zato ima druge programe. Edini programi, ki so nastavljeni SUID root, so vmesniški programi za LPD lpd_cancel, lpd_print in lpd_status; ti so SUID, ker pravi tiskalniški strežniki v Unixu zahtevajo, da tiskalniški zahtevki pridejo od privilegiranih vrat. Če so edini tiskalniki, za katere uporabljate vmesnik PDQ za BSD-LPD, omrežni tiskalniški strežniki (kot adapterja HP JetDirect ali LexMark MarkNet), potem vam na teh programih ni treba nastaviti bita SUID.

8.3 Velike namestitve

Velike namestitve, s čimer mislim na omrežja, ki obsegajo več kot dva tiskalnika ali računalnika, imajo posebne potrebe. Spodaj je nekaj nasvetov. Za zares velika okolja je težava že razširjanje filtrirnih podatkov v datoteki printcap. To rešuje Cisco Enterprise Print System in je verjetno dobra vstopna točka ali skoraj popolna rešitev, odvisno od vaših potreb. Srednje velika do velika okolja so lahko dobro podprta z domorodnimi lastnostmi LPRng.

8.4 Obračunavanje

Običajni LPD vam ne ponudi prav dosti pomoči pri obračunavanju (angl. accounting). Določite lahko ime obračunske datoteke v atributu af datoteke printcap, a to se le prenese kot argument vašem filtru if. Sami morate poskrbeti za to, da vaš filter if piše vnose v obračunsko datoteko, in sami morate pozneje obdelati obračunsko datoteko (tradicionalna oblika je predvsem primerna za vrstične tiskalnike in je ni trivialno razčleniti v Perlu, zato ni razloga, da bi jo obdržali). Tudi, če kot svoj filter uporabljate moj program lpdomatic, boste morali narediti spremembe, saj je odvisen od tega, da dobi podano nastavitveno datoteko kot ,,obračunsko`` ime datoteke.

ghostscript ponuja operator PageCount, ki ga lahko uporabljate za štetje števila strani v vsakem opravilu; pravzaprav na konec opravila le dodaste nekaj vrstic postscripta, ki izpišejo vnos v obračunsko datoteko; najboljši zgled za to najdete v datoteki unix-lpr.sh v distribuciji izvirne kode ghostscripta.

Vedite, da izvedba obračunavanja v unix-lpr piše v datoteko iz tolmača ghostscript in torej ni združljiva s priporočeno izbiro -dSAFER. Boljša rešitev bi bila, da po vsakem opravilu z ukazom PJL povprašate tiskalnik, ali naj napišete delček kode v postscriptu, ki izpiše števec strani na stdout, kjer ga lahko zajamete, ne da bi morali pisati v datoteko.

Tiskalniški čakalni strežnik LPRng vključuje zgled izvedbe obračunavanja, specifičen za HP; domnevam, da vpraša tiskalnik s PJL. Ta tehnika bi morala delati z večino tiskalnikov PJL, postscript ali SNMP, s katerimi imate dvosmerno komunikacijo.

Če imate omrežni tiskalnik, ki podpira SNMP, lahko uporabljate program npadmin, da po vsakem opravilu povprašate po številu strani. To bi moralo delovati pravilno za vsa tiskalniška opravila. Glej razdelek Npadmin za več podatkov o orodju npadmin.


Naprej Nazaj Kazalo