Inhoudsopgave
De hoofdstuk beschrijft een simpele printerconfiguratie, als voorbeeld wordt een HP Deskjet 690C gebruikt die verbonden is aan de eerste parallele poort. Eerst zal het systeem geconfigureerd worden om tekstdocumenten te printen en daarna zal de configuratie uitgebreid worden voor het printen van postscript documenten met behulp van het ghostscript programma.
Na de installatie is het nog niet mogelijk te printen, omdat
de lpd printer spooler daemon nog
niet gestart is.
Om lpd tijdens het starten te laden
moet de volgende regel in /etc/rc.conf
:
lpd=NO
veranderd worden in:
lpd=YES
Deze verandering wordt actief bij het herstarten van het systeem, maar de daemon kan nu handmatig gestart worden met:
#
lpd -s
Voer het volgende commando uit om te controleren of lpd aktief is:
#
ps ax | grep lpd
179 ?? Is 0:00.01 lpd
Als u geen lpd ziet in de uitvoer van het vorige commando, is de daemon niet aktief.
Voor het configureren van /etc/printcap
is
het verstandig eerst een printertest uit te voeren om te controleren
of de connectie werkt.
Bijvoorbeeld:
#
lptest 20 10 > /dev/lpt0
Om te zien hoe de uitvoer er uit moet zien kunt u het commando uitvoeren zonder de uitvoer te omleiden naar de printer:
#
lptest 20 10
Een veel voorkomend probleem is dat de uitvoer van de printer niet correct uitgelijnd is in kolommen, maar het de vorm heeft van een “trap”. Dit betekent gewoonlijk dat uw printer ingesteld is om een nieuwe regel te beginnen bij de linkermarge nadat het zowel een <CR> (carriage return, ASCII 13) als een <LF> (line feed, ASCII 10) karakter ontvangen heeft. NetBSD stuurt alleen een <LF> karakter. U kunt dit probleem oplossen door:
de configuratie van de printer aan te passen
een simpele printer filter te gebruiken (wordt later beschreven)
in het vorige voorbeeld is de lpd spooler
niet betrokken, omdat de programma-uitvoer rechtstreeks
naar de printer device is gestuurd (/dev/lpt0
)
en niet <spooled> is.
Deze sectie beschrijft hoe de voorbeeldprinter zodanig geconfigureerd kan worden dat het tekstdocumenten afdrukt.
De printer moet geconfigureerd zijn in het
/etc/printcap
bestand; de configuratie bestaat
uit een printer id (de naam van de printer) en een beschrijving voor
de printer. De ld id wordt standaard door
veel programma's gebruikt.
Voorbeeld 10.1. /etc/printcap
lp|local printer|HP DeskJet 690C:\ :lp=/dev/lpa0:sd=/var/spool/lpd/lp:lf=/var/log/lpd-errs:\ :sh:pl#66:pw#80:if=/usr/local/libexec/lpfilter:
Het formaat en de opties worden gedetailleerd beschreven in printcap(5). Let op dat er een invoer filter gespecificeerd is (met de if optie) die zorgt dat het "trap probleem" opgelost wordt:
if=/usr/local/libexec/lpfilter
Voorbeeld 10.1, “/etc/printcap
” gebruikt de lpa#
device (polled driver) voor de printer, in plaats van de
lpd# (door een interrupt aangedreven driver).
Het gebruikt van interrupts kan problemen opleveren met sommige
printers, waaronder de HP Deskjet 690C: afdukken gaat erg langzaam
en het afdrukken van een postscript kan uren duren.
Dit probleem is op te lossen door de lpa
driver te gebruiken. Het is ook mogelijk een kernel te compileren
waarin lpd "gepolled" wordt.
De configuratie in printcap specifiseert ook een spool directory, die aangemaakt moet worden; deze directory zal door de lpd daemon gebruikt worden om de data op te slaan die afgedrukt gaat worden.
#
cd /var/spool/lpd
#
mkdir lp
#
chown daemon:daemon lp
#
chmod 770 lp
Het enige deel dat nog mist is de lpfilter
invoer filter, die geschreven moet worden. De enige taak die
door deze filter uitgevoerd wordt is de printer zodanig
te configureren dat het "trapprobleem" opgelost is voordat
de tekst die afgedrukt moet worden naar de printer gestuurd
wordt.
De printer die in dit voorbeeld gebruikt wordt vereist een
initialisatiereeks:
“ESC &k2G
”.
Voorbeeld 10.2. /usr/local/libexec/lpfilter
#!/bin/sh # Treat LF as CR+LF printf "\033&k2G" && cat && exit 0 exit 2
#
cd /usr/local/libexec
#
chmod 755 lpfilter*
er is een andere filter die gebruikt kan worden:
\:if=/usr/libexec/lpr/lpf:
Deze filter is veel complexer dan de filter die hiervoor
is geïntroduceerd. Het is geschreven om de uitvoer
van nroff te verwerken en kan omgaan
met onderstreping, breidt tab karakters uit en converteert
LF naar CR + LF.
De broncode van deze filter kan gevonden worden in
/usr/src/usr.sbin/lpr/filters/lpf.c
.
Het lptest commando kan nu opnieuw gestart worden, deze keer met het gebruik van de lpd spooler:
#
lptest 20 10 | lpr -h
Het lpr programma maakt gebruik van de spooler
om data naar de printer te sturen; de -h
optie
schakelt het printen van een banner pagina uit (dit is niet
noodzakelijk vanwege de sh optie in
/etc/printcap
).
U kunt het "trapprobleem" met een verschillende gereedschappen en methodes oplossen, bijvoorbeeld met behulp van C programma's. De oplossing die getoond is heeft het voordeel dat het erg simpel is.
Nu het afdrukken van eenvoudige teksten werkt, zal de functionaliteit voor het afdrukken van PostScript bestanden toegevoegd worden. De simpele printer die in dit voorbeeld gebruikt wordt kan niet rechtstreeks PostScript bestanden afdrukken; er dient een programma gebruikt te worden die een PostScript document converteert naar een reeks van commando's die de printer begrijpt. Het Ghostscript programma, uit de package collectie, kan voor dit doel gebruikt worden . In deze sectie wordt uitgelegd hoe u Ghostscript kunt configureren voor het afdrukken van PostScript bestanden op een HP Deskjet 690C.
Er zal een tweede id gebruikt worden in
/etc/printcap
: deze nieuwe id zal een andere
invoerfilter gebruiken, deze zal Ghostscript genoemd worden en
het afdrukken van een PostScript document afhandelen.
Daarom zullen tekstdocumenten afgedrukt worden op de
lp printer en PostScript documenten op de
ps printer: beide configuraties gebruiken
dezelfde fysieke printer, maar gebruiken verschillende filters.
Hetzelfde resultaat kan bereikt worden met een andere configuratie. Er kan bijvoorbeeld één configuratie gebruikt worden met één filter, de filter moet in staat zijn te determineren wat het formaat is van het document dat afgedrukt wordt. Deze benadering leidt tot een complexere filter; als deze benadering u aanspreekt kunt u overwegen het magicfilter programma uit de package collectie te gebruiken: het heeft deze functionaliteit en kan veel andere dingen automatisch doen.
Het nieuwe /etc/printcap
kan er als volgt
uitzien:
Voorbeeld 10.3. /etc/printcap
lp|local printer|HP DeskJet 690C:\ :lp=/dev/lpa0:sd=/var/spool/lpd/lp:lf=/var/log/lpd-errs:\ :sh:pl#66:pw#80:if=/usr/local/libexec/lpfilter: ps|Ghostscript driver:\ :lp=/dev/lpa0:sd=/var/spool/lpd/ps:lf=/var/log/lpd-errs:\ :mx#0:sh:if=/usr/local/libexec/lpfilter-ps:
Optie mx#0
is erg belangrijk voor het afdrukken
van Postscript bestanden, omdat het grootterestricties op
af te drukken bestanden elimineert; PostScript bestanden zijn vaak
erg groot. De if
verwijst naar de nieuwe filter.
Er is ook een nieuwe spool directory.
De laatste stap is het aanmaken van een nieuwe spool directory en het filterprogramma.
#
cd /var/spool/lpd
#
mkdir ps
#
chown daemon:daemon ps
#
chmod 770 ps
De filter voor PostScript uitvoer is complexer dan de tekstfilter:
het bestand dat afgedrukt moet worden moet doorgevoerd worden
aan GhostScript, die op zijn beurt een reeks van commando's in
de printertaal naar de printer stuurt.
We hebben het nu gepresteerd een goedkope kleurenprinter om
te zetten in een apparaat dat geschikt is voor PostScript uitvoer,
dankzij het NetBSD besturingssysteem en een aantal krachtige
vrije software programma's.
De opties die gebruikt worden om Ghostscript
te configureren zijn beschreven in de Ghostscript documentatie:
cdj550
is het apparaattype dat gebruikt wordt om
de HP printer aan te sturen.
Voorbeeld 10.4. /usr/local/libexec/lpfilter-ps
#!/bin/sh # Treat LF as CR+LF printf "\033&k2G" || exit 2 # Print the postscript file /usr/pkg/bin/gs -dSAFER -dBATCH -dQUIET -dNOPAUSE -q -sDEVICE=cdj550 \ -sOutputFile=- -sPAPERSIZE=a4 - && exit 0 exit 2
Samenvattend zijn er twee verschillende printernamen aangemaakt op het systeem, die beide verwijzen naar dezelfde fysieke printer, maar verschillende opties, verschillende filters en verschillende spool directories gebruiken. Er kunnen nu tekst- en PostScript bestanden afgedrukt worden. Om PostScript bestanden te printen moet de Ghostscript package geïnstalleerd zijn.
Deze sectie toont een aantal nuttige BSD commando's voor het administreren van printers en afdrukopdrachten. Naast het reeds genoemde lpr commando en lpd zijn er:
toont de rij van afdrukopdrachten.
verwijdert opdrachten uit de printer rij.
controleert het afdruksysteem, schakelt printers en printermogelijkheden aan en uit.
Het is mogelijk het afdruksysteem zodanig te configureren
dat er afgedrukt kan worden op een printer die verbonden is
aan een andere host.
Laten we zeggen dat u, bijvoorbeeld, op de wotan
host werkt en u wilt afdrukken op een printer die verbonden is
met de
loge host.
Het /etc/printcap
bestand van loge is
gelijk aan Voorbeeld 10.3, “/etc/printcap
”.
Het wordt mogelijk vanaf wotan PostScript bestanden te printen
met behulp van de Ghostscript op loge.
De eerste stap is te zorgen dat loge afdrukopdrachten van
de wotan host accepteert.
Hiertoe moet eerst een regel met wotan's hostnaam toegevoegd
worden aan het /etc/hosts.lpd
bestand
op loge. Het formaat van dit bestand is erg simpel: elke
regel bevat de naam van een host die toegang tot de printer
mag hebben.
Standaard luistert de daemon alleen maar op UNIX domain sockets.
Om te zorgen dat de daemon ook inkomend netwerkverkeer accepteert
moet aan /etc/rc.conf
het volgende worden
toegevoegd:
lpd_flags=""
Vervolgens moet het /etc/printcap
bestand
op wotan geconfigureerd worden zodat het afdrukopdrachten naar
loge stuurt. Bijvoorbeeld:
lp|line printer on loge:\ :lp=:sd=/var/spool/lpd/lp:lf=/var/log/lp-errs:\ :rm=loge:rp=lp ps|Ghostscript driver on loge:\ :lp=:sd=/var/spool/lpd/lp:lf=/var/log/lp-errs:\ :mx#0:\ :rm=loge:rp=ps
Er zijn vier fundamentele verschillen tussen deze configuratie
en die van Voorbeeld 10.3, “/etc/printcap
”:
De definitie van “lp” is leeg.
De “rm” optie definieert de naam van de host waaraan de printer verbonden is.
De “rp” optie definieert de naam van de printer die verbonden is met de andere host.
Het is niet noodzakelijk invoerfilters te specificeren, omdat de definities op de loge host gebruikt zullen worden.
Nu zullen de afdrukopdrachten voor “lp” en “ps” op wotan automatisch naar de printer die aan loge verbonden is gestuurd worden.