De Linux Afdruk HOWTO

Grant Taylor <gtaylor+pht@picante.com>
Vertaald door: Ellen Bokhorst bokkie@nl.linux.org

Versie 3.30, 19/11/1999 06:00:35


Dit is de Linux Afdruk HOWTO, een verzameling met informatie over hoe je alle afdrukken onder Linux (en andere Unices in het algemeen) kunt genereren, bekijken en faxen.

1. Introductie

In de Afdruk HOWTO zou alles moeten staan wat je moet weten om je op weg te helpen bij het instellen van afdrukservices op je Linuxbox(en). Het is echter gecompliceerder dan in de aanwijs-en-klik wereld van Microsoft en Apple, maar het is ook flexibeler, en zeker gemakkelijker te beheren voor groot opgezette LAN's.

Dit document is zo opgezet dat de meeste mensen slechts ongeveer de eerste helft ervan nodig zullen hebben. Veel van de meer onbekende en situatie-afhankelijke informatie staat in het laatste gedeelte van dit document en kan eenvoudig worden opgezocht via de inhoudsopgave. Daarentegen zal waarschijnlijk bijna iedereen de meeste informatie uit paragraaf 9 of 10 nodig hebben.

Aangezien versie 3.x volledig is herschreven, is veel van de informatie van vorige edities verloren gegaan. Dit komt door het ontwerp. De voorgaande HOWTO's hadden een grootte van ca 60 gedrukte pagina's en dit was niet prettig leesbaar. Als je geen oplossing in dit document vindt voor de problemen die je ondervindt, word je aangemoedigd om a) de voorgaande versie door te nemen, te vinden bij de Printing HOWTO HomePage en b) een bericht achter te laten, waarin je aangeeft wat in dit document zou moeten staan, maar er niet in staat.

De Printing HOWTO Home Page is een goede plek om naar de laatste versie te zoeken; het wordt natuurlijk ook gedistribueerd vanaf Metalab (metalab.unc.edu) en je vriendelijke lokale LDP mirror.

1.1 Historie

Dit is de derde generatie van de Printing HOWTO, dus voor de derde keer compleet herschreven. De historie van de PHT kan op deze manier te boek worden gesteld:

  1. Ik schreef de printing-howto in 1992 als reactie op de te vele vragen met betrekking tot het afdrukken in comp.os.linux en postte het. Dit dateerde het HOWTO project voor een paar maanden vervroegd en was de eerste FAQlet die een `howto' werd genoemd. Deze uitgave was in plain ascii.
  2. Na me te hebben aangesloten bij het HOWTO-project, werd de Printing-HOWTO samengevoegd met een lpd FAQ van Brian McCauley <B.A.McCauley@bham.ac.uk>; we waren voor ongeveer twee jaar mede-auteur van de PHT. Op een bepaald moment voegden we het samen met het werk van Karl Auer <Karl.Auer@anu.edu.au>. Deze generatie van de PHT was in TeXinfo, en beschikbaar in PS, HTML, Ascii, en Info.
  3. Na de PHT voor meer dan een jaar te hebben laten rotten en vallen, en een niet succesvolle poging om iemand anders te krijgen om het te beheren, vond deze omwerking plaats. Deze generatie van de PHT is geschreven in SGML door gebruik te maken van de LinuxDoc DTD en het SGML-Tools-1 package. Beginnend met versie 3.27, is het verenigd met een samenvatting van een bijbehorende printerondersteunings database; voor 3.27 stond er in deze HOWTO nooit een printer-compatibiliteitenlijst (!).

1.2 Copyright

Dit document valt onder het Copyright (c) 1992-1999 door Grant Taylor. Voel je vrij dit document te kopiëren en te herdistribueren overeenkomstig de voorwaarden van de GNU General Public License, revisie 2 of later.

2. Hoe af te drukken

Als je reeds lpd hebt ingesteld om naar je printer af te drukken, of je systeembeheerder heeft dit al gedaan, of je verkoper deed dit voor je, dan hoef je alleen nog te leren hoe je het commando lpr kunt gebruiken. De Printing Usage HOWTO gaat hierover, en een paar andere wachtrij-manipulatie-commando's die je waarschijnlijk zou moeten kennen.

Als je echter een nieuw systeem of nieuwe printer hebt, dan zul je, op wat voor manier dan ook, je afdrukservices in moeten stellen voordat je af kunt drukken. Lees verder!

3. Kernel afdrukapparaten

Er zijn twee compleet verschillende device-drivers voor de parallelle poort; welke je gebruikt is afhankelijk van je kernelversie (je kunt achter je versie komen via het commando uname -a). De driver is in Linux 2.1.33 gewijzigd.

Een paar details zijn hetzelfde voor beide stijlen drivers. Hetgeen veel mensen hebben gemerkt, is dat Linux hun parallelle poort niet zal detecteren tenzij ze in hun PC BIOS "Plug en Play" de-activeren. (Dit is geen verrassing; de waarnemingsreputatie van PnP of niet-PCI devices onder Windows en elders is een ramp gebleken).

3.1 Het lp device (kernels <=2.1.32)

De Linux kernel (<=2.1.32), waarbij er van uit wordt gegaan dat je het lp device in hebt gecompileerd of geladen (in de uitvoer van cat /proc/devices zou het device lp voor moeten komen als het is geladen), voorziet in één of meer /dev/lp0, /dev/lp1, en /dev/lp2. Deze worden NIET dynamisch toegewezen, maar corresponderen ieder met een specifiek hardware I/O adres. Dit betekent dat je eerste printer, afhankelijk van je hardware, lp0 of lp1 kan zijn. Probeer gewoon beiden.

Een paar gebruikers rapporteerden dat hun bi-directionele lp poorten niet werden gedetecteerd als zij een oudere uni-directionele printerkabel gebruikten. Controleer of je een behoorlijke kabel hebt.

Men kan de plip en lp drivers niet tegelijkertijd op een gegeven poort gebruiken (in ieder geval niet onder 2.0). Je kunt echter de ene of de andere driver op ieder moment zowel handmatig hebben geladen als door kerneld met versie 2.x (en latere 1.3.x) kernels. Door zorgvuldig de interrupts en dergelijke in te stellen, kun je naar men mag aannemen plip op de ene poort en lp op de andere poort gebruiken. Iemand deed dit door de drivers te wijzigen; Ik wacht met spanning op een succesvol rapport van iemand die dit slechts door middel van een slimme commando-regel doet.

Er is een kleine utility met de naam tunelp in omloop gebracht waar je het Linux 2.0 interrupt-gebruik, de polling-snelheid, en andere opties van het Linux 2.0 lp-device, als root, mee af kunt stellen.

Als de lp-driver in de kernel is ingebouwd, zal de kernel een lp= optie accepteren om de interrupts en io-adressen in te stellen:

Als de lp driver in de kernel is ingebouwd, zou je de LILO/LOADLIN
commando-regel kunnen gebruiken om de poortadressen en interrupts in te
stellen, waarvan de driver gebruik zal gaan maken.

Syntax:      lp=port0[,irq0[,port1[,irq1[,port2[,irq2]]]]]

Bijvoorbeeld:   lp=0x378,0   of   lp=0x278,5,0x378,7 **

Merk op dat als dit kenmerk wordt gebruikt, je *alle* poorten die
je zult gaan gebruiken, moet specificeren, er zijn geen standaards.
Je kunt een ingebouwde driver met lp=0 de-activeren.

Geladen als een module, is het mogelijk io-adressen en interrupts op de insmod commando-regel (of in /etc/conf.modules om kerneld te beïnvloeden) op te geven door gebruik te maken van de gebruikelijke argumentensyntax van een module. De parameters zijn io=port0,port1,port2 en irq=irq0,irq1,irq2. Lees de manpage van insmod voor meer informatie hierover.

**Voor degenen onder jullie die (me aardig vinden) nooit de standaard poortnummers kunnen vinden als je ze nodig hebt, ze zijn als in het tweede voorbeeld hierboven. De andere poort (lp0) bevindt zich op 0x3bc. Ik zou niet weten van welk interrupt het gewoonlijk gebruik maakt.

De source-code voor de Linux 2.0 parallelle poort-driver staat in /usr/src/linux/drivers/char/lp.c.

3.2 Het parport-device (kernels >= 2.1.33)

Beginnend met kernel 2.1.33 (en beschikbaar als een patch voor kernel 2.0.30), is het lp-device slechts een client van het nieuwe parport-device. De aanvulling van het parport device corrigeert een aantal problemen die bij het oude lp-device optraden - het kan de poort met andere drivers delen, het wijst dynamisch beschikbare parallelle poorten toe aan device-nummers in plaats van dat het een vaste communicatie-verbinding tussen I/O adressen en poortnummers, enz. forceert.

De komst van het parport-device heeft voor een hele schare nieuwe parallelle poortdrivers gezorgd, voor zaken als Zipdrives, Backpack CD-ROM's en disks, enzovoort. Een aantal hiervan zijn ook beschikbaar in versies voor 2.0 kernels; kijk hiervoor rond op het web.

Het belangrijkste verschil dat je op zal vallen, zover het printen betreft is, dat kernels die op de parport zijn gebaseerd, de lp-devices dynamisch aan parallelle poorten toewijzen. Dus wat lp1 onder Linux 2.0 was, kan onder Linux 2.2 heel goed lp0 zijn. Zorg ervoor dat je dit controleert, als je een upgrade van een lp-driver-kernel naar een parport-driver-kernel uitvoert.

Het meest voorkomende probleem dat zich met dit device schijnt voor te doen heeft te maken met een onjuiste configuratie:

De Distributie

Een aantal Linux-distributies worden met een onjuiste setup van /etc/modules.conf (of /etc/conf.modules) geleverd, waardoor de driver niet juist wordt geladen als je het nodig hebt. Met een recente modutils schijnen de juiste magische regels in modules.conf als volgt te moeten zijn:

alias           /dev/printers   lp
alias           /dev/lp*        lp
alias   parport_lowlevel parport_pc
De BIOS

In de BIOS van veel PC's is de parallelle poort als een Plug & Play device ingesteld. Hiermee wordt het een perfect eenvoudig apparaat, dat bijna altijd aanwezig is, onnodig gecompliceerd gemaakt; schakel de PnP instelling voor je parallelle poort uit ("LPT1" in veel BIOS'sen) als je parallelle poort niet door de Linux-driver wordt herkend. De juiste instelling wordt vaak "legacy", "ISA" of "0x378" genoemd, maar waarschijnlijk niet "disabled".

Je kunt ook het bestand Documentation/parport.txt in je kernel sources lezen, of de parport website bekijken.

3.3 Seriële devices

Seriële devices worden onder Linux iets dergelijks als /dev/ttyS1 genoemd. Het utility stty staat je toe om de instellingen voor een seriële poort interactief te bekijken of in te stellen; setserial staat je toe een aantal uitgebreide kenmerken te beheren en IRQ's en I/O adressen te configureren voor de niet-standaard poorten. Een verdere bespreking van seriële poorten onder Linux kun je vinden in de Serial-HOWTO.

Als je gebruik maakt van een langzame seriële printer met flow control, kan het zijn dat je bemerkt dat een aantal van je afdruktaken worden afgebroken. Dit kan te wijten zijn aan de seriële poort, wiens standaardgedrag is om alle niet verzonden tekens te wissen, die zich na 30 seconden nadat het poortdevice is gesloten nog in de buffer bevinden. De buffer kan 4096 tekens vasthouden. Als je printer flow control gebruikt en het langzaam is, kan het alle data uit de buffer niet binen 30 seconden nadat de afdruksoftware de seriële poort heeft gesloten, verwerken. Het laatste deel van de inhoud van de buffer zal hierdoor verloren gaan. Als het commando cat file > /dev/ttyS2 voor korte bestanden volledige afdrukken produceert, maar langere bestanden afbreekt, kan het zijn dat hiervan sprake is.

De 30 seconden-interval kan via de commando-regeloptie "closing_wait" van setserial (versie 2.12 en later) worden aangepast. De seriële poorten van een computer worden gewoonlijk door een aanroep van setserial in het opstartbestand rc.serial geïnitialiseerd. De aanroep voor de seriële afdrukpoort kan worden gewijzigd door de closing_wait tegelijkertijd in te stellen met de andere parameters van de poort.

4. Ondersteunde Printers

De Linux kernel ondersteunt in het algemeen iedere printer die je in een seriële of parallelle poort kunt pluggen, maar er zijn dingen om op te letten, en printers die je niet zult kunnen gebruiken, zelfs al kunnen ze (elektronisch gesproken) met Linux communiceren. Hoofdzakelijk bevinden zich tussen deze incompatibele printers, printers waarnaar als "Windows" of "GDI" printers wordt gerefereerd. Ze worden zo genoemd, omdat een deel of de gehele printerbesturingstaal en de ontwerpdetails van het afdrukmechanisme niet zijn gedocumenteerd. De verkoper zal in een Windows-driver voorzien en met veel genoegen alleen aan Windows gebruikers verkopen; daarom worden ze Winprinters genoemd. In een aantal gevallen voorziet de verkoper ook in drivers voor NT, OS/2 of andere besturingssystemen.

Veel van deze printers werken niet met Linux. Een paar daarvan doen dit wel, en een aantal daarvan werken slechts een beetje (meestal omdat iemand aan de details, die nodig waren om een driver te schrijven, is gekomen, met behulp van reverse engineering). Zie de printerondersteuningslijst hieronder voor details over specifieke printers.

Een paar printers zitten daar tussenin. Een aantal van de modellen van NEC implementeren bijvoorbeeld een eenvoudige vorm van de standaard printertaal PCL, waarmee met PCL-sprekende software is toegestaan tot 300dpi af te drukken, maar alleen NEC weet hoe het de volledige 600dpi uit deze printers kan halen.

Merk op dat als je al één van deze Winprinters hebt, er omslachtige manieren zijn om het voor elkaar te krijgen dat Linux ernaar kan printen, maar ze veroorzaken nogal wat narigheid en ik heb het zelf nooit geprobeerd. Zie Sectie 12 van dit document voor een verdere bespreking van printers die alleen voor Windows zijn bestemd.

4.1 Postscript

Voor wat betreft de printers die wel onder Linux werken, is de beste keuze een printer met ingebouwde PostScript ondersteuning te kopen. Bijna alle Unix software waarmee afdrukbare uitvoer wordt geproduceerd, produceert het in PostScript, dus uiteraard zou het fijn zijn om aan een printer te komen die PostScript direct ondersteunt. Helaas is de ondersteuning voor Postscript buiten het laserprinter domain schaars, en soms is het een kostbare uitbreiding.

Unix software, en de publicerende industrie in het algemeen, hebben Postscript algemeen erkend als de printerbesturingstaal van hun keuze. Dit gebeurde om verscheidene redenen:

Keuze van het tijdstip

Postscript kwam als onderdeel van de Apple Laserwriter, een perfecte combinatie met de Macintosh, het systeem dat op grote schaal verantwoordelijk is voor de desktop publishing revolutie van de 80'r jaren.

Z'n device-onafhankelijkheid

Postscript programma's kunnen worden uitgevoerd om uitvoer te genereren op een pixel-scherm, een vector scherm, een faxmachine, van bijna alle soorten afdrukmechanismen, zonder dat het originele programma daarvoor nodig is. De Postscript uitvoer ziet er op ieder Postscript device hetzelfde uit, op z'n minst binnen de beperkingen van de capaciteiten van het device. Voor de aanmaak van PDF, wisselden mensen online complexe documenten als Postscript-bestanden uit. De enige reden dat deze standaard het niet "uithield", was omdat Windows-computers meestal niet waren voorzien van een Postscript previewer, dus Adobe specificeerde hyperlinks en compressie voor Postscript, noemde het resultaat PDF, distribueerde er previewers voor, en vond een markt voor hun "distiller" tools (de functionaliteit waar ook door ghostscript's ps2pdf en pdf2ps programma's in is voorzien).

Het is een echte programmeertaal

Postscript is een complete programmeertaal; je kunt software schrijven om er bijna alles mee te doen. Dit is vooral handig voor het definiëren van subroutines aan het begin van je programma, om complexe zaken te herproduceren telkens weer het hele document door, zoals een logo of een grote "CONCEPT" op de achtergrond.

Het is open

Postscript is volledig gespecificeerd in een voor het publiek beschikbare serie boeken (die je bij iedere goede boekwinkel kunt kopen). Alhoewel Adobe het uitvond en in de dominante commerciële implementatie voorziet, produceren andere verkopers, zoals Aladdin, ook nog onafhankelijke gecodeerde implementaties.

4.2 Niet-Postscript

Als je het (grotere) budget niet hebt, dat nodig is om een Postscript-printer te kopen, kun je elke printer gebruiken die door Ghostscript wordt ondersteund. Ghostscript is de vrij-verkrijgbare Postscript interpreter, die in de plaats van de feitelijke printer Postscript ondersteuning, wordt gebruikt. Op de Ghostscript Home Page staat een lijst met ondersteunde printers en informatie over de status van nieuwe en experimentele drivers. Merk op dat op deze pagina ondersteunde printers van de laatste versie van Ghostscript staan, terwijl de meeste Linux distributies slechts een wat verouderde versie van Ghostscript mee kunnen leveren vanwege de licentie. Gelukkig bestaat er een voorverpakt en up-to-date package Ghostscript dat in ieder contributiegebied beschikbaar wordt gesteld. Help alsjeblieft de Ghostscript printerondersteunings pagina door je successen en mislukkingen te rapporteren, waar om wordt gevraagd.

Adobe heeft nu een nieuwe printertaal met de naam "PrintGear". Ik denk dat het een sterk vereenvoudigde taal in binair formaat is, met wat Postscript erfenissen, maar zonder Postscript compatibiliteit. En ik weet niet of Ghostscript het ondersteunt. Maar het schijnt dat een aantal PrintGear printers een andere taal zoals PCL ondersteunen, en deze printers zullen met Linux werken (als de PCL in de printer is geïmplementeerd en niet in een Windows-driver).

4.3 Welke printers werken?

Als je een printer wilt kopen, kun je op verscheidene plaatsen kijken, om er achter te komen of het zal werken. De coöperatieve beheerde Printing HOWTO printer database streeft ernaar een uitgebreide lijst met de stand van Linux printer ondersteuning te zijn. Een samenvatting ervan staat hieronder; controleer het online voor meer details en informatie voor welke driver je moet gebruiken.

Ghostscript's printer compatibiliteitenpagina bevat een lijst met een aantal werkende printers, als ook links naar andere pagina's. En Dejanews bevat honderden "het werkt" en "het werkt niet" verklaringen. Probeer ze alle drie en als je dit gedaan hebt, controleer dan of je printer aanwezig is en klopt in de database, zodat het in de toekomst juist in dit document zal worden weergegeven.

Printer compatibiliteitenlijst

Deze sectie is een samenvatting van de online versie. De online versie bevat ook de basisspecificaties, opmerkingen, links naar driver-informatie, gebruikers-beheerde documentatie, webpages van fabrikanten, enzovoort. De online versie van deze lijst is ook interactief; mensen kunnen continue printers toevoegen en doen dit ook, dus zorg ervoor dat je deze ook controleert. Als laatste, als je printer niet in de lijst staat, voeg deze dan toe!

Printers staan hier in vier categoriën onderverdeeld:

Perfectly

Perfect printers werken perfect - je kunt afdrukken met de volledige mogelijkheden van de printer, inclusief kleur, de volledige resolutie, enz. In een paar gevallen staan printers, met ongedocumenteerde "resolutie vergroting" modes die niet werken, als perfect weergegeven; in het algemeen is het verschil in de afdrukkwaliteit klein genoeg dat het niet waard is om je druk om te maken.

Mostly

Je kunt prima afdrukken, maar er zijn kleine beperkingen van bepaalde aard met betrekking tot afdrukken of andere faciliteiten.

Partially

Je kunt afdrukken, maar misschien niet in kleur, of alleen in een lage resolutie. Zie de online kolom met opmerkingen voor informatie over de beperking.

Paperweight

Je kunt geen ene moer afdrukken; dit zal typisch te wijten zijn aan het ontbreken van een driver en/of documentatie over hoe er één geschreven kan worden.

Aangezien in deze informatie door dozijnen mensen is voorzien, wordt in geen van de gevallen gegarandeerd dat ze correct is. Het zou echter makkelijk te bevestigen moeten zijn vanaf de webpages van de driver en websites van de fabrikanten.

En zonder verdere ophef is hier de printer-compatibiliteitenlijst:

Apple

Perfectly

LaserWriter 16/600, LaserWriter IINTX, LaserWriter Select 360.

Mostly

12/640ps.

Paperweight

StyleWriter 2500.

Avery

Perfectly

Personal Label Printer+.

Mostly

Personal Label Printer.

Brother

Perfectly

HL-1070, HL-10V, HL-10h, HL-1260, HL-2060, HL-4Ve, HL-630, HL-660, HL-720, HL-730, HL-760, HL-8.

Mostly

HJ-400, HL-1040, HL-1050, HL-1060, HL-1250, MFC 6550MC.

Partially

MC-3000, MFC 7150C.

Paperweight

HL-820.

Canon

Perfectly

BJ-10e, BJ-20, BJ-200, BJ-330, BJ-5, BJC-210, BJC-250, BJC-4000, BJC-4100, BJC-4200, BJC-4300, BJC-4400, BJC-600, BJC-6000, BJC-610, BJC-620, BJC-70, BJC-800, LBP-1260, LBP-1760, LBP-4+, LBP-4U, LBP-8A1, LBP-8II, LIPS-III.

Mostly

BJ-300, BJC-1000, BJC-2000, BJC-240, BJC-4310SP, BJC-7004, BJC-80, LBP-4sx.

Partially

BJC-4550, BJC-7000, BJC-7100, MultiPASS C2500, MultiPASS C3500, MultiPASS C5000, Multipass C3000, Multipass C5500.

Paperweight

BJC-5000, LBP-460, LBP-660, Multipass L6000.

Citizen

Perfectly

ProJet II, ProJet IIc.

Partially

printiva600C.

DEC

Perfectly

DECWriter 500i, DECwriter 110i, DECwriter 520ic, LN03.

Partially

1800.

Dymo-CoStar

Perfectly

ASCII 250, ASCII+, EL40, EL60, LabelWriter II, LabelWriter XL, LabelWriter XL+, SE250, SE250+, Turbo.

Epson

Perfectly

ActionLaser 1100, LP 8000, LQ 850, SQ 1170, Stylus Color, Stylus Color 400, Stylus Color 440, Stylus Color 640, Stylus Color 800, Stylus Color 850, Stylus Color II, Stylus Color IIs, Stylus Pro XL.

Mostly

EPL 5700, Stylus 300, Stylus Color 3000, Stylus Color 500, Stylus Color 740.

Partially

Stylus Color 300, Stylus Color 900, Stylus Photo 700, Stylus Photo 750, Stylus Photo EX.

Fujitsu

Perfectly

PrintPartner 10V, PrintPartner 16DV, PrintPartner 20W, PrintPartner 8000.

HP

Perfectly

2000C, 2500C, Color LaserJet 4500, DeskJet 1200C, DeskJet 1200C/PS, DeskJet 1600C, DeskJet 1600Cm, DeskJet 310, DeskJet 400, DeskJet 420C, DeskJet 500, DeskJet 500C, DeskJet 510, DeskJet 520, DeskJet 540, DeskJet 550C, DeskJet 600, DeskJet 610C, DeskJet 610CL, DeskJet 612C, DeskJet 660C, DeskJet 670C, DeskJet 672C, DeskJet 682C, DeskJet 690C, DeskJet 694C, DeskJet 697C, DeskJet 810C, DeskJet 812C, DeskJet 850C, DeskJet 855C, DeskJet 882C, DeskJet 890C, DeskJet 970Cxi, LaserJet 1100, LaserJet 1100A, LaserJet 2 w/PS, LaserJet 2100M, LaserJet 2P, LaserJet 3, LaserJet 3P w/PS, LaserJet 4, LaserJet 4 Plus, LaserJet 4050N, LaserJet 4L, LaserJet 4M, LaserJet 4P, LaserJet 5, LaserJet 5000, LaserJet 5L, LaserJet 5M, LaserJet 5MP, LaserJet 5P, LaserJet 6L, LaserJet 6MP, LaserJet 6P, LaserJet 8000, LaserJet 8100, Mopier 320, PaintJet XL300.

Mostly

DesignJet 650C, Designjet 750 C Plus, DeskJet 1120C, DeskJet 870C, DeskJet 880C, DeskJet 895C, DeskJet 895Cxi, DeskJet 970Cse, LaserJet 2, LaserJet 2100.

Partially

DeskJet 1000C, DeskJet 710C, DeskJet 712C, DeskJet 720C, DeskJet 722C, DeskJet 820C, OfficeJet 500, OfficeJet 600, OfficeJet 625, OfficeJet Pro 1150C.

Paperweight

LaserJet 3100.

IBM

Perfectly

4019, 4029 10P, 4303 Network Color Printer, Page Printer 3112, ProPrinterII.

Kyocera

Perfectly

F-3300, FS-1700+, FS-600, FS-800, P-2000.

Mostly

FS-3500.

Lexmark

Perfectly

4039 10plus, Optra Color 1200, Optra Color 1275, Optra Color 40, Optra Color 45, Optra E, Optra E+, Optra E310, Optra Ep, Optra K 1220, Optra R+, Optra S 1250, Optra S 1855, Valuewriter 300.

Mostly

1000, 1100, 2070, 5000, 5700, 7000, 7200.

Partially

1020 Business, 2030, Winwriter 400, Z51.

Paperweight

1020, 2050, 3000, 3200, Winwriter 100, Winwriter 150c, Winwriter 200, Z11.

Minolta

Perfectly

PagePro 6, PagePro 6e, PagePro 6ex, PagePro 8.

Partially

PagePro 8L.

NEC

Perfectly

P2X, SilentWriter LC 890, Silentwriter2 model 290, SuperScript 660i.

Partially

SuperScript 100C, SuperScript 1260, SuperScript 150C, SuperScript 650C, SuperScript 750C, SuperScript 860, SuperScript 870.

Paperweight

SuperScript 610plus, SuperScript 660, SuperScript 660plus.

Oce

Perfectly

3165.

Okidata

Perfectly

8p, OL 410e, OL 600e, OL 610e/PS, OL 800, OL 810e/PS, OL400ex, OL810ex, OL830Plus, Okipage 10e, Okipage 12i, Okipage 20DXn, Okipage 6e, Okipage 6ex, Okipage 6w, Okipage 8c.

Mostly

OL 400w, Okipage 4w, Super 6e.

Partially

ML 192+, OL 610e/S.

Paperweight

Okijet 2010, Okijet 2500, Okipage 8w.

Olivetti

Perfectly

JP350S, JP450, PG 306.

PCPI

Perfectly

1030.

Panasonic

Perfectly

KX-2135, KX-P1123, KX-P1124, KX-P1150, KX-P2023, KX-P2150, KX-P4410, KX-P4450, KX-P5400, KX-P8420, KX-P8475.

Mostly

KX-P2123, KX-P6150.

Partially

KX-P6500.

Paperweight

KX-P6100, KX-P6300 GDI, KX-P8410.

Printrex

Partially

820 DL.

QMS

Perfectly

2425 Turbo EX.

Mostly

ps-810.

Ricoh

Perfectly

4801, 6000.

Paperweight

Aficio Color 2206, Afico FX10.

Samsung

Perfectly

ML-5000a.

Paperweight

ML-85G.

Seiko

Perfectly

SpeedJET 200.

Mostly

SLP, SLP 120, SLP 220, SLP EZ30, SLP Plus, SLP Pro.

Sharp

Perfectly

AR-161.

Star

Perfectly

NL-10.

Mostly

LC 90, LC24-200.

Paperweight

WinType 4000.

Tally

Perfectly

MT908.

Tektronix

Perfectly

4696, 4697, Phaser 780, Phaser IISX, Phaser PX.

Xerox

Perfectly

DocuPrint 4508, DocuPrint C55, DocuPrint N17, DocuPrint N32.

Mostly

DocuPrint P12, DocuPrint P8e, Document Homecentre, XJ6C.

Partially

WorkCentre 450cp, XJ8C.

Paperweight

DocuPrint P8, WorkCentre XD120f.

4.4 Hoe koop je een printer?

Het is tegenwoordig wat moeilijk een printer uit te kiezen; er zijn nogal wat modellen om uit te kiezen. Hier zijn een aantal tips:

Kosten

Je krijgt waarvoor je betaalt. De meeste printers onder de $200 zullen redelijk goed afdrukken, maar de kosten per pagina zijn erg hoog. Bij een aantal printers heb je voor één of twee cartridges al weer een nieuwe printer! De goedkoopste printers gaan echter niet erg lang mee. De minst dure printers hebben een MTBF van ongeveer 3 maanden!

Inkjets

De printkoppen van een Inkjet zullen op den duur verstopt raken, wat niet te repareren is, dus heb je de mogelijkheid de kop op één of andere manier te vervangen. De printkoppen van Inkjets zijn duur, dus je kunt de kop beter maar alleen vervangen wanneer het echt nodig is. Het schijnt dat de Epson Stylus printers koppen hebben die hersteld kunnen worden, en dat HP DeskJets de koppen in de cartridges hebben geïntegreerd. Canons hebben cartridges bestaande uit drie delen die onafhankelijk van elkaar vervangbare inktreservoirs; ik vind dit ontwerp wel prettig. OTOH, de HP cartridges zijn niet zoveel duurder, en HP is over de gehele linie beter; Canon is vaak de derde keus vanuit het oogpunt van kwaliteit.

Lasers

Laserprinters consumeren een drum en toner. Het goedkoopste ontwerp heeft de toner en drum in één grote cartridge; deze ontwerpen zijn het duurst in het gebruik. De beste ontwerpen voor grote hoeveelheden maken gebruik van gewone tonerpoeder of tenminste aparte tonercartridges en drums.

Fotografie

De beste kleurenuitvoer van foto's komt van doorlopende tone-printers zoals de Tektronix Phasers (waxy dye) of de Alps series (één of ander droog inkt-proces). Een paar van de Alps units zijn werkelijk te veroorloven, maar deze werken nog niet onder Linux (IIRC ze zijn gedocumenteerd). De meer algemene voor foto gespeciliseerde inkjets maken meestal gebruik van 6 kleuren CMYKcm afdrukken of zelfs van een 7 kleuren CMYKcmy proces; alleen modellen met Postscript ondersteuning werken onder Linux, aangezien Ghostscript deze kleuren modellen niet schijnt te ondersteunen. Goede CMYK uitvoer is echter niet te versmaden. Alle printers gespecialiseerd in foto's zijn duur in het gebruik; óf je blauw raakt altijd op en je moet de gehele cartridge vervangen, of je betaalt nogal veel aan de individuele kleurnavullingen voor je dure foto-printer.

Snelheid

Snelheid is evenredig aan verwerkingskracht, bandbreedte, en in het algemeen de kosten van de printer. De snelste printers zijn netwerk postscript printers met krachtige interne processors. Printers voor de gewone consument zijn deels afhankelijk van de snelheid van Ghostscript, wat je nog iets kunt beïnvloeden met een redelijk goede krachtige computer; in het bijzonder kunnen volledige kleurenpagina's grote hoeveelheden host-memory consumeren.

Dot Matrix

Als je op carbonformulieren af wilt drukken, heb je een impact printer nodig; veel bedrijven produceren nog steeds dot matrix printers, de meeste daarvan emuleren traditionele Epson modellen en werken dus prima.

Labels

Er zijn twee series ondersteunde labelprinters; zoek naar de Dymo-Costar en de Seiko SLP modellen. Het kan zijn dat andere modellen niet werken. Avery maakt ook diverse groottes sticheretiketten in 8.5x11 formaat die je voor je gewone printer kunt gebruiken.

Plotting

Grote conceptformaten worden tegenwoordig meestal door monster inkjets ondersteund; HP is een populaire keuze. Middelgrote (11x17) inkjets worden gewoonlijk ook voor kleinere afdrukken gebruikt. Veel plotting van deze soort wordt gedaan met de talen RTL, HP-GL, en HP-GL/2, wat allen eenvoudige HP's eigen vector-talen zijn die gewoonlijk direct door applicatie-software worden gegenereerd.

5. Welke spooling software?

Tot voor kort, was de keuze voor Linux gebruikers eenvoudig - iedereen draaide hetzelfde oude lpd dat voornamelijk letterlijk afkomstig is van de Net-2 code van BSD. Zelfs nu nog leveren de meeste verkopers deze software. Maar dit is op SVR4 lijkende systemen - waaronder Sun's Solaris - aan het wijzigen. Ze komen met een volledig ander print spooling package, geconcentreerd rondom lpsched. En er zijn tekenen dat een aantal verkopers van Linux over zullen stappen op de levering van LPRng, een veel minder oude printspooling implementatie dat vrij-verkrijgbaar is. LPRng is voor grote installaties veel gemakkelijker te beheren. (lees: meer dan één printer, elke seriële printer, van of elke bijzondere niet-lpd netwerkprinter) en heeft een minder ontzaglijk willekeurige codebase dan het stereotiepe lpd. Er kan zelfs eerlijk van worden beweerd dat het veilig is - er zijn geen SUID binaries, en het ondersteunt authenticatie via PGP van Kerberos.

Een interessante nieuwkomer is "CUPS", een implementatie van het Internet Printing Protocol, een RFC-gedefinieerde vervangend protocol voor het eerbiedwaardige lpd-protocol. De primaire implementatie hiervan is de open-source component van het commerciële product "Easy Print", welke bestaat uit een intelligente spooler en een verzameling commerciële printerdrivers gebouwd rond Ghostscript.

Voor het moment, zelfs in het licht van de nieuwe opties, is lpd voor de meeste Linux-gebruikers waarschijnlijk prima. Ondanks dat het niet het geweldigste systeem is, werkt het prima zodra het éénmaal is ingesteld, het wordt goed begrepen en is uitgebreid in Unix-boeken van derden gedocumenteerd.

Als je graag meer informatie over LPRng zou willen hebben, kijk dan op de LPRng Web Page. In toekomstige versies van deze HOWTO zal informatie over het gebruik van zowel LPRng als de gewone lpd worden opgenomen.

6. Hoe het werkt, basis

Om het afdrukken goed te kunnen laten werken, zul je moeten begrijpen hoe het lpd-systeem werkt.

Lpd staat voor Line Printer Daemon, en verwijst in verschillende contexten naar zowel de daemon als de gehele verzameling programma's waarmee print spooling wordt gedraaid. Dit zijn:

lpdDe spooling daemon.

Één hiervan draait om alles op een computer te besturen, EN één draait per printer op het moment dat de printer aan 't afdrukken is.

lpr

Het gebruikers spooling commando. Lpr zoekt contact met lpd en brengt een nieuwe afdruktaak in de spool.

lpq

Toont de taken in een wachtrij.

lpc

Het Lpd systeem beheercommando. Met lpc kun je de afdrukwachtrijen stoppen, starten, opnieuw ordenen, enz.

lprm

lprm zal een taak uit de print spool verwijderen.

Maar hoe valt dit nu samen? Als het systeem wordt opgestart, wordt lpd uitgevoerd. Het scant het bestand /etc/printcap om kennis te nemen van de printers waar het spools voor zal gaan beheren. Iedere keer als iemand lpr opstart, zoekt lpr contact met lpd via de named socket /dev/printer, en geeft lpd zowel het bestand dat moet worden afgedrukt en wat informatie over wie aan het afdrukken is en hoe het moet worden afgedrukt. Lpd drukt op zijn beurt vervolgens het bestand af op de daarvoor bestemde printer.

Het lp-systeem werd van origine ontworpen toen de meeste printers nog regelprinters waren - dat hield in dat mensen meestal plain ascii afdrukte. Waar het op neer komt, is dat er slechts wat extra scriptwerk voor nodig is om te zorgen dat lpd heel goed werkt voor de hedendaagse afdruktaken, die vaak in PostScript, of tekst, of dvi, of.... staan.

7. Hoe zaken in te stellen, basis

7.1 Traditionele lpd configuratie

De minimale setup voor lpd resulteert in een systeem die de bestanden in een wachtrij kan plaatsen en ze kan afdrukken. Het zal er geen enkele aandacht aan schenken, of je printer ze zal begrijpen of niet, en zal je waarschijnlijk geen aantrekkelijke uitvoer laten produceren. Toch is het de eerste stap naar begrip, dus lees verder!

Om een afdrukwachtrij aan lpd toe te voegen, moet je een record in /etc/printcap, en de nieuwe spooldirectory onder /var/spool/lpd aanmaken.

Een record in /etc/printcap ziet er ongeveer zo uit:

# LOCAL djet500
lp|dj|deskjet:\
        :sd=/var/spool/lpd/dj:\
        :mx#0:\
        :lp=/dev/lp0:\
        :sh:
Hiermee wordt een spool met de naam lp, dj, of deskjet gedefinieerd, tijdelijke opslag in de directory /var/spool/lpd/dj, zonder een maximumlimiet per taak, die afdrukt naar het device /dev/lp0, en zonder bannerpage (met de naam van de persoon die het afdrukte, enz) aan het begin van de afdruktaak toegevoegd.

Lees nu de manpage voor printcap.

Het bovenstaande lijkt zeer eenvoudig, maar er is een valstrik - tenzij ik bestanden verstuur die een DeskJet 500 kan begrijpen, zal deze DeskJet vreemde dingen afdrukken. Het versturen van bijvoorbeeld een gewoon Unix-tekstbestand naar een Deskjet resulteert in letterlijk geïnterpreteerde newlines, en geeft me:

Dit is regel één.
                 Dit is regel twee.
                                  Dit is regel drie.
Het afdrukken van een PostScript bestand naar deze spool zou resulteren in een prachtige lijst met PostScript-commando's, afgedrukt met dit "staircase effect", maar geeft geen bruikbare uitvoer.

Er is duidelijk meer voor nodig, en dit is het doel van filteren. De oplettenden onder jullie, die de printcap manpage hebben gelezen, is misschien de kenmerken if en of opgevallen. if, of de invoerfilter, is nu net wat we hier nodig hebben.

Als we een klein shell-script met de naam filter schrijven waarmee carriage returns voor de newlines worden ingevoegd, kan het trapsgewijze afdrukken worden uitgeschakeld. Dus we moeten een if regel aan ons printcap-record van hierboven toevoegen:

lp|dj|deskjet:\
        :sd=/var/spool/lpd/dj:\
        :mx#0:\
        :lp=/dev/lp0:\
        :if=/var/spool/lpd/dj/filter:\
        :sh:
Een eenvoudig filterscript zou kunnen zijn:
#!perl
# In de regel hierboven zou het hele pad naar perl moeten worden opgenomen
# Dit script moet uitvoerbaar zijn: chmod 755 filter
while(<STDIN>){chop $_; print "$_\r\n";};
# Je wilt misschien ook nog met een form feed eindigen: print "\f";
Als we het bovenstaande zouden doen, zouden we een spool hebben waarnaar we reguliere Unix tekstbestanden zouden kunnen printen om zinvolle resultaten te verkrijgen. (Ja, er zijn vier miljoen betere manieren om dit filter te schrijven, maar weinig zo illustratief. Je wordt aangemoedigd dit efficiënter te doen.)

Het enige resterende probleem is het afdrukken van plain tekst - zeker het zou beter zijn om PostScript en andere geformatteerde grafische uitvoer te kunnen afdrukken. Ja, dat is zo, en het is makkelijk te doen. De methode is eenvoudig een uitbreiding van het hierbovenstaande linefeed-herstel filter. Als je een filter schrijft dat willekeurige bestandstypes als invoer accepteert en DeskJet-uitvoer voor iedere situatie produceert, dan heb je inderdaad een slimme print spooler!

Een dergelijk filter wordt een magic filter genoemd. Doe geen moeite om er zelf één te schrijven, tenzij je nogal bizarre zaken afdrukt - er zijn er al vele goede voor je geschreven en op het net verkrijgbaar. APS Filter behoort tot de beste, of er moet zich in je Linux-distributie een printersetup-tool bevinden die het je allemaal nogal makkelijk maakt.

7.2 Bestandspermissies

Op veler verzoek, voeg ik hieronder een lijst in van de permissies van de interessante bestanden op mijn systeem. Er zijn wat betere manieren om dit te doen, ideaal gezien door alleen gebruik te maken van SGID binaries en niet alles als SUID root in te stellen, maar zo kwam mijn systeem uit de verpakking, en voor mij werkt het. (Eerlijk gezegd, als je verkoper zelfs geen werkende lpd kan leveren, heb je nog wat te doorstaan).

-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 moet thans als root worden gedraaid zodat het verbonden kan worden met de laag-genummerde lp service poort. Het zou waarschijnlijk ingesteld moeten staan met UID lp.lp of iets dergelijks na binding, maar ik denk niet dat dit zo is.

8. Verkrijgen van Afdruksoftware

Veel reeds geschreven filterpackages (en andere printer-gerelateerde software) is beschikbaar vanaf Metalab. Dergelijke utility's zoals psutils, a2ps, mpage, dvitodvi, flpr, enz zijn daar allemaal te vinden.

Er verschenen zelfs verscheidene packages die allen probeerden de printerconfiguratie makkelijker te maken. Ze bestaan waarschijnlijk allemaal nog, maar één van de beste en meest up-to-date is het APS Filter package van Andreas Klemm, welke een menugestuurd printcap configuratieprogramma heeft en praktisch alle denkbare typen invoer afhandelt. Als je verkoper je geen mooi afdruksetuptool levert, is APS Filter de manier om het te doen.

9. Verkopers Oplossingen

Deze sectie is, per definitie, onvolledig. Stuur gerust details in van je favoriete distributie.

9.1 Red Hat

Red Hat heeft een GUI afdrukbeheertool (in de control panel) waarmee remote printers en printers op lokale devices kunnen worden ingesteld. Je kunt er een door ghostscript ondersteund printertype mee uitkiezen en een Unix apparaatbestand om naar af te drukken, vervolgens installeert het een afdrukwachtrij in /etc/printcap en schrijft een kort PostScript-en-ascii magicfilter gebaseerd rondom gs en nenscript. Deze oplossing werkt tamelijk goed, en is voor het instellen van alledaagse situaties erg simpel.

Waar Red Hat niet in slaagt is, als je een printer hebt, die niet door hun standaard Ghostscript (welke GNU is in plaats van Aladdin Ghostscript, en welke minder printers ondersteunt) wordt ondersteund. Controleer de printer-compatibiliteitenlijst hierboven (of online) als je bemerkt dat je geen juiste afdrukken met de Red Hat software kunt produceren. Als je printer niet door de tools van Red Hat wordt ondersteund, zul je misschien een versie van Aladdin Ghostscript moeten installeren. Je zult waarschijnlijk ook beter af zijn als je het apsfilter package gebruikt, welke bekend is met de printers die door de late modellen van Ghostscripts worden ondersteund.

9.2 Debian

Debian biedt een keuze uit plain lpd en LPRng; LPRng is waarschijnlijk een betere keuze. Ik geloof dat Debian ook een keuze uit configuratietools voor de printer biedt; apsfilter versie 5 of later is waarschijnlijk je beste kans, aangezien die versie ondersteuning toevoegt voor LPRng en Ghostscript's uniprint driver schema.

9.3 Andere Distributies

Stuur me alsjeblieft informatie op over wat andere distributies doen!

10. Ghostscript

Ghostscript is een ongelofelijk veelbetekenend programma voor het afdrukken onder Linux. De meeste afdruksoftware onder Unix genereert PostScript, wat typisch een $100 optie voor een printer is. Ghostscript is echter vrij-verkrijgbaar en zal de taal van je printer vanuit PostScript genereren. Wanneer verbonden met je lpd input filter, geeft het je een virtuele PostScript printer en vereenvoudigt het 't leven enorm.

Ghostscript is in twee vormen beschikbaar. De commerciële versie van Ghostscript, met de naam Aladdin Ghostscript, mag vrij worden gebruikt voor persoonlijk gebruik, maar mag niet door commerciële Linux distributies worden gedistribueerd. Het loopt gewoonlijk ongeveer een jaar vooruit op de vrij-verkrijgbare Ghostscript; op het moment ondersteunt het bijvoorbeeld veel kleuren inktjets die de oudere Ghostscripts niet ondersteunen.

De vrij verkrijgbare versie van Ghostscript is GNU Ghostscript, en is gewoon een verouderde versie van Aladdin ghostscript aan GNU geschonken. (Roem aan Aladdin voor deze regeling; meer verkopers van software zouden vrije software op deze manier moeten ondersteunen, als het niet mogelijk is dat ze hun geheel ontwikkelde code distribueren).

Wat je ook doet met gs, wees er heel erg zeker van dat je het met de optie voor het deactiveren van bestandstoegang (-dSAFER) uitvoert. PostScript is een volledig functionele taal, en een slecht PostScript programma zou je een aardige hoofdpijn kunnen bezorgen.

PDF, het Portable Document Format van Adobe is in feite niet veel meer dan georganiseerd PostScript in een gecomprimeerd bestand. Ghostscript kan PDF invoer afhandelen net als het dat met PostScript doet. Dus je kunt de eerste van je groep zijn met een PDF-capabele printer.

10.1 Ghostscript Aanroepen

Ghostscript zal draaien met wat voor magic filter je ook installeert (ik raad je apsfilter aan als je verkoper je niet iets leverde waar je wat aan hebt), maar voor het opsporen van fouten is het vaak handig het direct uit te voeren.

gs -help zal een beknopte informatieve lijst met opties en beschikbare drivers geven (merk op dat dit de lijst met drivers is die is ingecompileerd, niet de hoofdlijst met alle beschikbare drivers).

Misschien wil je gs wel draaien voor testdoeleinden zoals: gs options -q -dSAFER -sOutputFile=/dev/lp1 test.ps.

10.2 Ghostscript uitvoer fijnafstemmen

Er zijn een aantal dingen die je kunt doen als de uitvoer van gs niet naar je tevredenheid is (eigenlijk kun je alles doen wat je maar wilt, aangezien je de source hebt).

Uitvoer lokatie en grootte

De lokatie, grootte en breedte/hoogte-verhouding van de afbeelding op een pagina wordt bepaald door de printer-specifieke driver in ghostscript. Als je bemerkt dat je pagina's er te vroeg afgebroken, of te lang, of te groot met een factor twee uitkomen, wil je misschien eens kijken in de source module van je driver en de parameters erin aanpassen. Helaas is iedere driver anders, dus ik kan je niet echt zeggen wat je aan moet passen, maar de meeste zijn redelijk goed gedocumenteerd.

Gamma, dotsizes, enz.

De meeste niet-laser printers hebben als nadeel dat hun dots nogal groot zijn. Dit resulteert in te donkere afbeeldingen. Als je dit probleem ervaart zou je je eigen transportfunctie moeten gebruiken. Maak gewoon het volgende bestand aan in de ghostscript lib-dir en voeg de naam ervan toe aan de gs call vlak voor het eigenlijke bestand. Misschien dat je de feitelijke waarden aan je printer aan moet passen. Hoe lager de waarde hoe helderder de afdruk. Vooral als je driver gebruik maakt van een Floyd-Steinberg algoritme om kleuren in rasters in te delen, zijn lagere waarden ( 0.2 - 0.15 ) waarschijnlijk een goede keus.

---8<---- gamma.ps ----8<---
%!
%transfer functions for cyan magenta yellow black
{0.3 exp} {0.3 exp} {0.3 exp} {0.3 exp} setcolortransfer
---8<------------------8<---

Het is ook mogelijk printers met wat colour fault te verbeteren door deze waarden aan te passen. Als je iets dergelijks doet, raad ik je aan het bestand colorcir.ps te gebruiken, dat bij ghostscript zit (in de examples/ subdir), als een testpagina.

Voor veel van de nieuwere kleuren-inkjetdrivers bestaan commando-regel opties of verschillende upp driver files, welke gamma en andere wijzingen implementeren om de printer voor verschillende papiersoorten aan te passen. Je zou hiernaar moeten kijken voordat je met Postscript aan de gang gaat om zaken te herstellen.

11. Hoe afdrukken naar een printer over het netwerk

Één van de mogelijkheden van lpd is dat het afdrukken over het netwerk naar printers ondersteunt, die fysiek met een andere machine zijn verbonden. Je kunt er voor zorgen dat lpr transparant naar printers op alle soorten netwerken af kan drukken, als je zorgt voor een zorgvuldige combinatie van filterscripts en bij elkaar passende utility's.

11.1 Naar een Unix/lpd host

Om remote computers toe te staan naar je printer af te drukken, moet je de lijst met computers in /etc/hosts.equiv of /etc/hosts.lpd bijwerken. (Merk op dat hosts.equiv nog heel wat andere effecten heeft; wees er zeker van dat je weet wat je aan het doen bent als je je computer hier i vermeldt). Je kunt alleen bepaalde gebruikers op de andere computers toestaan om naar je printer af te drukken door het specificeren van de rs attribuut; lees de lpd man page voor informatie hierover.

Met lpd

Om naar een andere machine af te drukken, voeg je als volgt gegevens toe aan /etc/printcap:

# REMOTE djet500
lp|dj|deskjet:\
        :sd=/var/spool/lpd/dj:\
        :rm=machine.out.there.com:\
        :rp=printername:\
        :lp=/dev/null:\
        :sh:
Noot: Er bevindt zich op de lokale computer nog steeds een spooldirectory die door lpd wordt beheerd. Als de remote machine bezet of offline is, kunnen afdruktaken van de lokale computer in het spoolgebied wachten tot ze kunnen worden verzonden.

Met rlpr

Je kunt rlpr ook gebruiken een afdruktaak direct naar een wachtrij op een remote computer te sturen. Dit is vooral handig in situaties waar je slechts bij gelegenheid naar een diversiteit aan printers afdrukt. Vanuit de aankondiging voor rlpr:

Rlpr gebruikt TCP/IP om taken naar lpd-servers, waar dan ook op een netwerk, af te drukken.

In tegenstelling tot lpr, vereist het *niet* dat de remote printers expliciet bekend zijn bij de machine vanwaar je af wilt drukken, (d.w.z. door /etc/printcap) en is dus aanmerkelijk flexibeler en vereist minder beheer.

rlpr kan overal worden gebruikt waar ook een traditionele lpr zou kunnen worden gebruikt, en het is backwards compatibel met de traditionele BSD lpr.

De belangrijkste kracht die door rlpr wordt bereikt is de kracht om op afstand *van overal naar iedere plaats* af te drukken zonder rekening te houden met hoe het systeem vanwaar je wilt afdrukken werd geconfigureerd. Rlpr kan net als de traditionele lpr als een filter werken, zodat clients die op een remote computer worden uitgevoerd, zoals netscape, xemacs, enz., enz., zonder al te veel moeite naar je lokale computer af kunnen drukken.

Rlpr is beschikbaar vanaf Metalab.

11.2 Naar een Win95, WinNT, LanManager, of Samba printer

Er is een Printing naar Windows mini-HOWTO waarin meer informatie staat dan hierin is te vinden.

Het is mogelijk een lpd wachtrij te besturen via de smbclient programma (onderdeel van de samba suite) naar een op TCP/IP gebaseerde SMB print service. Samba bevat hiervoor een script met de naam smbprint. In het kort komt het erop neer dat je een configuratiebestand voor de specifieke printer waar het om gaat in de spooldirectory plaatst, en het smbprint-script als de if installeert.

Het /etc/printcap record ziet er ongeveer zo uit:

lp|remote-smbprinter:\
    :lp=/dev/null:sh:\
    :sd=/var/spool/lpd/lp:\
    :if=/usr/local/sbin/smbprint:

Je zou de documentatie in het smbprint script moeten lezen, voor meer informatie over hoe je dit in kunt stellen.

Je kunt ook de smbclient gebruiken, om een bestand direct aan een SMB afdrukservice aan te leveren zonder dat lpd daarbij betrokken is. Zie de man page.

11.3 Naar een NetWare Printer

In de ncpfs suite bevindt zich een utility genaamd nprint welke in dezelfde functionaliteit voorziet als smbprint maar dan voor NetWare. Je kunt ncpfs verkrijgen bij Metalab. Vanuit het LSM record voor versie 0.16:

Met ncpfs kun je volumes van je netwareserver onder Linux mounten. Je kunt ook naar een netware afdrukwachtrij afdrukken en spool netware afdrukwachtrijen naar het Linux afdruk systeem. Je hebt kernel 1.2.x of 1.3.54 en hoger nodig. ncpfs werkt NIET met enige 1.3.x kernels lager dan 1.3.54.

Om ervoor te zorgen dat nprint via lpd werkt, schrijf je een klein shell-script om stdin op de NetWare printer af te drukken, en dat installeer je als de if voor een lpd afdrukwachtrij. Je zult iets krijgen als:

sub2|remote-NWprinter:\
        :lp=/dev/null:sh:\
        :sd=/var/spool/lpd/sub2:\
        :if=/var/spool/lpd/nprint-script:
Bij benadering kan het nprint-script er ongeveer zo uitzien:
#! /bin/sh
# Je zou eerst de guest account zonder wachtwoord moeten proberen!
/usr/local/bin/nprint -S net -U name -P passwd -q printq-name -

11.4 Naar een EtherTalk (Apple) printer

Het netatalk package bevat iets degelijks als nprint en smbclient. Anderen hebben de procedure voor het afdrukken van en naar een Apple netwerk veel beter beschreven dan ik dat ooit zal kunnen; zie de Linux Netatalk-HOWTO.

11.5 Naar een HP of andere ethernet printer

HP's en een aantal andere printers worden met een ethernet interface geleverd waarnaar je met gebruik van lpd direct af kunt drukken. Je zou de instructies die met je printer werden meegeleverd of de netwerk adaptor moeten lezen, maar in het algemeen, "draaien" dergelijke printers lpd, en voorzien in één of meer wachtrijen waarnaar je kunt afdrukken. Een HP zou bijvoorbeeld met een volgend printcap kunnen werken:

lj-5|remote-hplj:\
        :lp=/dev/null:sh:\
        :sd=/var/spool/lpd/lj-5:\
        :rm=printer.name.com:rp=raw:

HP Laserjet printers met Jet Direct interfaces ondersteunen in het algemeen twee ingebouwde lpd wachtrijen - "raw" welke PCL accepteren (en mogelijk Postscript) en "text" welke recht toe recht aan ascii accepteert (en automatisch het staircase effect bestrijdt). Als je een JetDirect Plus3 three-port box hebt, worden de wachtrijen "raw1", "text2", enzovoort genoemd.

Merk op dat de ISS-organisatie een verzameling denial of service attacks heeft herkend waardoor HP Jetdirect interfaces vastlopen. De meeste daarvan zijn in de herfst van 98 aangepakt.

Op grote schaal, vooral in een grote omgeving waar een aantal printers geen Postscript ondersteunen, kan het nuttig zijn een toegewezen printserver in te stellen waarnaar alle computers afdrukken en waarop alle ghostscripts taken worden gedraaid.

Hierdoor is het ook mogelijk dat je Linux-box als een spoolserver voor de printer fungeert zodat je netwerkgebruikers hun afdruktaken snel kunnen volbrengen en verder kunnen gaan zonder op de printer te wachten totdat enige andere taak is afgedrukt welke door een ander was gezonden. Dit is ook aan te bevelen als je oudere niet te herstellen HP Jetdirects hebt; het vermindert de kans dat de printers vast komen te zitten.

Stel hiervoor een wachtrij in op je linux-box welke naar de ethernet toegeruste HP LJ verwijst (zoals hierboven). Stel nu alle clients op je LAN zo in dat ze naar de Linux wachtrij verwijzen (bv lj-5 in het voorbeeld hierboven).

Een aantal HP netwerk-printers slaan blijkbaar geen acht op de banner page instelling die door clients wordt gezonden; je kunt hun intern gegenereerde banner page uitschakelen door naar de printer te telnetten, tweemaal een return te geven, in te tikken "banner: 0" gevolgd door "quit". Er zijn bovendien nog andere instellingen die je op deze manier kunt wijzigen; tik een "?" in voor een lijst.

De volledige range aan instellingen kan worden beheerd door HP's WebJet software. Dit package draait als een daemon, en accepteert via een toegewezen poort http-verzoeken. Het voorziet in formulieren en Java-applets waarmee de HP-printers op het netwerk kunnen worden bestuurd. In theorie kan het ook Unix afdrukwachtrijen beheren, maar het doet dit door gebruik te maken van de rexec service, welke volledig onveilig is. Ik adviseer je die mogelijkheid niet te gebruiken.

Naar oudere HP's

Een aantal printers (en printer netwerk "black boxen") ondersteunen alleen goedkope kleine zonder protocol ingesloten TCP-verbindingen. In deze categorie bevinden zich de vroege modellen van de JetDirect (waaronder een aantal JetDirectEx) kaarten. Eigenlijk moet je een verbinding met de printer op een specifieke poort openen om naar de printer af te drukken (typisch een 9100, of 9100, 9101 en 9102 voor three-port boxes) en je afdruktaak ernaar toe sturen. LPRng (wat je eigenlijk daarvoor in de plaats zou moeten gebruiken, als je deze sectie leest) heeft ingebouwde ondersteuning voor het opzetten van afdruktaken naar willekeurige TCP-poorten, maar met BSD lpd is het niet zo gemakkelijk. Het beste is waarschijnlijk het kleine utility genaamd netcat te verkrijgen en te gebruiken. Als dat niet lukt, kan het onder andere in Perl worden geïmplementeerd:

#!/usr/bin/perl
# Met dank aan Dan McLaughlin voor het schrijven van de originele versie van
# dit script (En aan Jim W. Jones voor het naast Dan zitten toen hij me
# schreef voor hulp ;-)

$fileName = @ARGV[0];

open(IN,"$fileName") || die "Kan het bestand $fileName niet openen";

$dpi300     = "\x1B*t300R";
$dosCr      = "\x1B&k3G";
$ends = "\x0A";

$port =  9100 unless $port;
$them = "bach.sr.hp.com" unless $them;

$AF_INET = 2;
$SOCK_STREAM = 1;
$SIG{'INT'} = 'dokill';
$sockaddr = 'S n a4 x8';

chop($hostname = `hostname`);
($name,$aliases,$proto) = getprotobyname('tcp');
($name,$aliases,$port) = getservbyname($port,'tcp')
    unless $port =~ /^\d+$/;;
($name,$aliases,$type,$len,$thisaddr) =
        gethostbyname($hostname);
($name,$aliases,$type,$len,$thataddr) = gethostbyname($them);
$this = pack($sockaddr, $AF_INET, 0, $thisaddr);
$that = pack($sockaddr, $AF_INET, $port, $thataddr);

if (socket(S, $AF_INET, $SOCK_STREAM, $proto)) {
#    print "socket ok\n";
}
else {
    die $!;
}
# Geef de socket een adres.
if (bind(S, $this)) {
#    print "bind ok\n";
}
else {
    die $!;
}

# Roep de server aan.

if (connect(S,$that)) {
#    print "connect ok\n";
}
else {
    die $!;
}

# Set socket to be command buffered.

select(S); $| = 1; select(STDOUT);

#    print S "@PJL ECHO Hi $hostname! $ends";
#    print S "@PJL OPMSG DISPLAY=\"Job $whoami\" $ends";
#    print S $dpi300;

# Avoid deadlock by forking.

if($child = fork) {
    print S $dosCr;
    print S $TimesNewR;

    while (<IN>) {
        print S;
    }
    sleep 3;
    do dokill();
} else {
    while(<S>) {
        print;
    }
}

sub dokill {
    kill 9,$child if $child;
}

11.6 Een if voor remote printers uitvoeren

Één eigenaardigheid van lpd is dat de if niet voor remote printers wordt uitgevoerd. Als je bemerkt dat je een if nodig hebt, kun je dit doen door een dubbele wachtrij in te stellen en de taak opnieuw in de wachtrij te plaatsen. Zie de volgende printcap voor een voorbeeld:

lj-5:\
        :lp=/dev/null:sh:\
        :sd=/var/spool/lpd/lj-5:\
        :if=/usr/lib/lpd/filter-lj-5:
lj-5-remote:lp=/dev/null:sh:rm=printer.name.com:\
        :rp=raw:sd=/var/spool/lpd/lj-5-raw:
rekening houdend met dit filter-lj-5 script:
#!/bin/sh
gs <options> -q -dSAFER -sOutputFile=- - | \
        lpr -Plj-5-remote -U$5

De -U optie van lpr werkt alleen als lpr als een daemon wordt uitgevoerd, en het stelt de naam juist in van degene die de afdrukopdracht gaf. Je zou waarschijnlijk een meer robuuste methode moeten gebruiken om de gebruikersnaam te verkrijgen, aangezien het in een aantal gevallen niet argument 5 is. Zie de man page van printcap.

11.7 Vanaf Windows

Afdrukken vanaf een Windows (of waarschijnlijk, OS/2) client naar een Linux server wordt direct ondersteund via SMB door middel van het gebruik van het SAMBA package, waarmee ook het delen van bestanden van je Linux bestandssysteem naar Windows clients wordt ondersteunt.

Samba bevat tamelijk complete documentatie, en er is tevens een goede Samba FAQ die daarop van toepassing is. Je kunt zowel een magic filter op de Linux-box configureren en er PostScript naar afdrukken, als printer-specifieke drivers op alle Windows-computers installeren en daar wachtrijen voor instellen zonder dat daar filters voor nodig zijn. Op de Windows drivers vertrouwen kan in een aantal gevallen betere uitvoer produceren, maar is wat meer administratief gedoe als er veel Windows boxen zijn. Dus probeer eerst Postscript.

11.8 Vanaf een Apple

Netatalk ondersteunt het afdrukken vanaf Apple clients over EtherTalk. Zie de Netatalk HOWTO Page voor meer informatie.

11.9 Vanaf Netware

Het ncpfs package bevat een daemon genaamd pserver welke kan worden gebruikt om in een service te voorzien naar een NetWare afdrukwachtrij. Van wat ik ervan heb begrepen, vereist dit systeem een op Bindery gebaseerde NetWare, bv 2.x, 3.x, of 4.x met bindery toegang geactiveerd.

Zie de ncpfs FTP site voor meer informatie over ncpfs en zijn pserver-programma.

12. Printers die alleen voor Windows zijn bestemd

Zoals eerder besproken, wordt een aantal printers als zodanig niet ondersteund, omdat ze geen normale printertaal spreken, en in plaats daarvan gebruik maken van de computer's CPU om een bitmap weer te geven, die dan vervolgens weer op een vastgestelde snelheid naar de printer wordt doorgegeven. In een paar gevallen, spreken deze printers ook nog iets normaals, zoals PCL, maar vaak kunnen ze dat niet. In een aantal (werkelijk goedkope) gevallen, maakt de printer zelfs geen gebruik van een gewone parallelle verbinding maar is afhankelijk van de driver van de verkoper om datgeen te emuleren wat hardware gedrag zou moeten zijn (als belangrijkste flow control).

In ieder geval zijn er een paar mogelijk tijdelijke oplossingen als je met een dergelijke strop zit opgescheept.

12.1 De Ghostscript Windows redirector

Er is nu een Windows printerdriver beschikbaar (met de naam mswinpr2) waarmee een afdruktaak door Ghostscript gaat voordat het uiteindelijk wordt afgedrukt. (Lijkt nogal op een if filter in LDP van Unix). Er is ook een nieuwe Ghostscript driver die afdrukt door gebruik te maken van GDI-calls. Dit alles bijelkaar zou(tm) het mogelijk moeten maken dat een Windows computer, via de driver van de verkoper, PostScript kan printen naar een printer die alleen voor Windows is bestemd.

Als je dat werkend hebt, kun je de instructies hierboven voor het afdrukken naar een Windows printer over het netwerk vanuit Linux volgen om Unix (en andere Windows, Mac, enz) hosts naar je printer te laten afdrukken.

Ik heb dit nooit gebruikt aangezien ik geen winprinter heb, dus het kan voor jou anders uitpakken. Alle software die je ervoor nodig hebt zou beschikbaar moeten zijn vanaf de home page van Ghostscript. (zie de links in de Ghostscript sectie van dit document).

12.2 Lexmarks

Een aantal HP printers gebruiken "Printing Performance Architecture" (marketingstaal voor "we waren te goedkoop om PCL te implementeren"). Dit wordt via een omweg ondersteund via de pbm2ppa translator geschreven door Tim Norman. Eigenlijk maak je gebruik van ghostscript om PostScript in een bitmapped image in pbm formaat weer te geven en gebruik je vervolgens pbm2ppa om dit in een printer-specifiek ppa-bitmapformaat te vertalen, klaar om naar de printer te worden gedumpt. Het kan zijn dat dit programma er inmiddels ook in een ghostscript driverformaat is.

Er zijn nu ook drivers voor de 5700, 1000, 1100, 2070 en anderen. Zie de lijst met ondersteunde printers hierboven en mijn website voor meer informatie over het verkrijgen van deze drivers.

De ppa-software kan worden gehaald vanaf de ppa home page; pbm2ppa ondersteunt een aantal modellen van de HP 720, 820, en 1000; lees de documentatie die met het package wordt meegeleverd, voor meer details over de ppa printerondersteuning.

12.3 Het pbm2l7k programma

De meeste goedkope Lexmark-inkjets maken gebruik van een eigen taal en heten daarom Winprinters. Henryk Paluch heeft echter een programma geschreven waarmee op een Lexmark 7000 in zwart kan worden afgedrukt. Hopelijk zal hij in staat zijn er achter te komen hoe in kleur af te drukken en de ondersteuning naar andere Lexmark-inkjets uit te breiden. Zie http://bimbo.fjfi.cvut.cz/~paluch/l7kdriver/ voor meer informatie.

13. Hoe naar een fax machine af te drukken

13.1 Een faxmodem gebruiken

Er zijn een aantal faxprogramma's waarmee je kunt faxen en documenten kunt ontvangen. Één van de meest complexe is HylaFax van Sam Leffler, beschikbaar vanaf ftp.sgi.com. Het ondersteunt van alles, van meerdere modems tot broadcasting.

SuSE levert een Java HylaFax client, waarvan wordt beweerd dat het op elk Java platform werkt (waaronder Windows en Linux). Voor de meeste platformen zijn er ook niet-Java fax-clients; Linux kan bijna zeker al je netwerk faxbehoeften afhandelen.

Ook beschikbaar en voor de meeste Linux-boxen een betere keuze is efax, een eenvoudig programma waarmee faxen kunnen worden verzonden. Het getty programma mgetty kan faxen ontvangen (en op een aantal modems zelfs voicemail!).

13.2 Gebruiken van Remote Printing Service

Er wordt een experimentele service geboden die je een emailbericht laat zenden met hetgeen je afgedrukt zou willen hebben, zodanig dat het elders op een fax-machine verschijnt. Er worden mooie formaten zoals postscript ondersteund, dus zelfs al zou de globale dekking ongelijkmatig zijn, dan kan dit nog steeds een zeer nuttige service zijn. Zie de Remote Printing WWW Site voor meer informatie over het afdrukken via de remote afdrukservice.

14. Hoe genereer je iets dat waard is om af te drukken

Hier belanden we in een echt rattennest met software. Eigenlijk kan Linux vele typen bibliotheken met variërende graden van succes draaien: Linux/x86, Linux/Alpha, Linux/Sparc, Linux/foo, iBCS, Win16/Win32s (met dosemu en, ooit, met Wine), Mac/68k (met Executor), en Java. Ik zal slechts native Linux en algemene Unix software bespreken.

Voor Linux zelf, zijn de mogelijkheden voornamelijk beperkt tot datgene wat voor Unix in het algemeen beschikbaar is:

14.1 Markup languages

De meeste markup languages zijn meer geschikt voor grote of herhalende projecten, waar je de computer de layout van de tekst wilt laten beheren om uniformiteit te verkrijgen.

nroff

Dit was één van de eerste Unix markup talen. Man pages zijn de meest algemene voorbeelden van hetgeen in *roff macros is geformatteerd; veel mensen zweren erbij, maar nroff heeft, vind ik in ieder geval, een geheimzinniger syntax dan nodig is, en het is voor nieuwe werken waarschijnlijk een magere keuze. Het is echter waard om te weten dat je met groff een man page direct in postscript kan zetten. De meeste man commando's zullen dit voor je doen met man -t foo | lpr.

TeX

TeX, en het macropackage LaTeX, is één van de meest gebruikte markup languages onder Unix. Technische werkstukken worden vaak in LaTeX geschreven omdat het de layout zaken sterk vereenvoudigd en het nog steeds één van de weinige tekstverwerkings systemen is die wiskunde zowel compleet als goed ondersteunen. Het uitvoerformaat van TeX is dvi, en wordt geconverteerd naar PostScript of Hewlett Packard's PCL met dvips of dvilj. Als je TeX of LaTeX wilt installeren, installeer dan de gehele teTeX groep aan packages; het bevat alles.

SGML

Er bestaat tenminste één vrij-verkrijgbare sgml parser die zowel beschikbaar is voor Unix als voor Linux; het vormt de basis van het Linuxdoc-SGML's homegrown document systeem. Het kan bovendien andere DTD's ondersteunen.

HTML

Iemand deed de suggestie dat het voor eenvoudige projecten, voldoende zou kunnen zijn, het in HTML te schrijven en het met Netscape af te drukken. Ik ben het daar niet mee eens, maar YMMV.

14.2 WYSIWYG Tekstverwerkers

Er is niet langer enig tekort aan WYSIWYG tekstverwerkings software. Verscheidene complete office suites zijn beschikbaar, inclusief één die vrij in het gebruik is voor persoonlijk gebruik (StarOffice).

StarOffice

De organisatie Sun Microsystes distribueert StarOffice voor Linux vrij over het net. Deze volledig ontwikkelde office suite heeft alle faciliteiten die je zou verwachten, en om de prijs hoef je het niet te laten. Er is een mini-HOWTO die beschrijft hoe je het kunt verkrijgen en installeren. Het genereert PostScript of PCL, dus zou met de meeste printers die op andere wijze onder Linux werken, moeten kunnen werken. Klaarblijkelijk is het een Office-kloon en is het nogal opgeblazen; dit zijn waarschijnlijk twee equivalente feiten!.

WordPerfect

Corel distribueert een basisversie van Word Perfect 8 vrij voor Linux, en ze hebben gesuggereerd dat ze bovendien ook Corel Draw en Quattro Pro zullen gaan distribueren, zodra ze zijn geport. Dit is waarschijnlijk de beste optie als je een ARM computer hebt; Corel fabriceert de op ARM- gebaseerde Netwinder Linux computers en het is bijna zeker dat ze overal ARM Linux versies van aanbieden. Je kunt ook de geheel ontwikkelde versie en support, tegelijkertijd of apart kopen. De Linux WordPerfect Fonts and Printers pagina heeft informatie over het configureren van WordPerfect voor gebruik met Ghostscript of z'n ingebouwde printerdrivers (welke klaarblijkelijk identiek zijn aan de WordPerfect drivers voor DOS, als je printer niet in de WP8-distributie voorkomt).

Applix

Applix is een cross-platform (d.w.z., diverse Unices, Windows, en anderen) office suite die door het Applix bedrijf wordt verkocht. Red Hat en SuSE verkochten het zelf toen het nog het enige was wat te verkrijgen was; nu worden de verkopen weer door Applix geregeld.

AbiWord

AbiWord is énén van de verscheidene GPL WYSIWYG tekstverwerkers-projecten; deze heeft een functioneel basisprogramma geproduceerd. Er wordt gewerkt aan integratie met de Gnome desktop.

LyX

LyX is een front-end naar LaTeX wat er veelbelovend uitziet. Zie de LyX Homepage voor meer informatie. Er is een versie van LyX in KDE-styl, genaamd Klyx; de auteur van LyX en de aanstichter van KDE zijn één en dezelfde persoon.

Maxwell

Maxwell is een eenvoudige op MS RTF-formaat gebaseerde tekstverwerker welke als een commercieel produkt begon, maar nu onder de GPL wordt gedistribueerd.

Het Andrew User Interface System

AUIS bestaat uit een WYSIWYG-style editor met de meeste basis tekstverwerkingsmogelijkheden, HTML mogelijkheden, en volledige MIME email en newsgroup ondersteuning. Helaas wordt AUIS niet langer beheerd.

Koffice

Het KDE project werkt aan een volledige office suite. Ik denk dat het nog geen tijd is voor de eerste uitgave. De tekstverwerker zal waarschijnlijk een afgeleide van LyX zijn.

GNOME

Het GNOME project werkt ook hard aan diverse onder GNU gelicentieerde office tools. Er zijn er echter nog geen beschikbaar.

Andere verkopers zouden gerust een berichtje bij me achter kunnen laten met hun aanbiedingen.

15. Van te voren op scherm bekijken van afdrukbare zaken

Bijna alles wat je kunt printen, kan ook op het scherm worden bekeken.

15.1 PostScript

Ghostscript heeft een X11-driver die het beste kan worden gebruikt onder het beheer van de PostScript previewer gv. Met de laatste versies van deze programma's zou je bovendien PDF-bestanden moeten kunnen bekijken. Merk op dat gv z'n oudere previewer "Ghostview" heeft vervangen; de nieuwe gebruikersinterface is mooier en heeft meer faciliteiten dan de gewone oude Athena gui van ghostview.

15.2 TeX dvi

TeX DeVice Independant bestanden kunnen van tevoren onder X11 worden bekeken met xdvi. Moderne versies van xdvi roepen ghostscript aan om de bijzonderheden van PostScript weer te geven.

Er bestaat bovendien een VT100 driver. Het wordt dgvt genoemd. Tmview werkt met Linux en svgalib.

15.3 Adobe PDF

Adobe's Acrobat Reader is beschikbaar voor Linux; download het gewoon vanaf hun website http://www.adobe.com/.

Je kunt ook xpdf gebruiken, het is freeware en de source wordt meegeleverd, en ik denk dat Ghostview het bekijken van PDF-bestanden met gs onder X11 inmiddels ondersteunt.

16. Seriële printers onder lpd

16.1 Instelling in printcap

Lpd voorziet in vijf attributen die je in /etc/printcap in kunt stellen om alle instellingen van de seriële poort waarop de printer is aangesloten, te beheren. Lees de printcap man page en let op de betekenissen van br#, fc#, xc#, fs# en xs#. De laatste vier van deze attributen zijn bitmaps die de instellingen voor de poorten aangeven. Het br# attribuut is gewoon de baud rate, bv `br#9600'.

Het is erg makkelijk te vertalen van stty instellingen naar printcap flag instellingen. Als je dit moet doen, kijk dan nu in de man page van stty.

Gebruik stty om de printerpoort in te stellen zodanig dat je er met cat een bestand naar kunt sturen en het correct af kunt drukken. Zo ziet mijn `stty -a' voor mijn printerpoort eruit:

dina:/usr/users/andy/work/lpd/lpd# stty -a < /dev/ttyS2
speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr 
-igncr -icrnl ixon -ixoff -iuclc -ixany -imaxbel
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 
bs0 vt0 ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase
-tostop -echoprt -echoctl -echoke
De enige wijzigingen hiertussen en de wijze waarop de poort tijdens het opstarten wordt geïnitialiseerd zijn -clocal, -crtscts, en ixon. Je poort kan echter heel goed anders zijn, afhankelijk van hoe je printer flow control afhandelt.

Je gebruikt stty eigenlijk op een wat vreemde manier. Aangezien stty op de terminal opereert naar zijn standaardinvoer, gebruik je het om een gegeven seriële poort te manipuleren door gebruik te maken van het `<' teken als hierboven.

Zodra je stty-instellingen goed staan, zodanig dat `cat file > /dev/ttyS2' (in mijn geval) het bestand naar de printer stuurt, kijk dan naar het bestand /usr/src/linux/include/asm-i386/termbits.h. Hierin staan een heleboel #defines en een paar structs. Je wilt dit bestand met cat misschien wel naar de printer sturen, (je hebt dat nu werkend, toch?) en het als kladpapier gebruiken. Ga naar de sectie die begint met

/* c_cflag bit meaning */
#define CBAUD   0000017
Deze sectie geeft een opsomming van de betekenis van de fc# en fs# bits. Je zult merken dat de namen daar (na de baud rates) overeenkomen met één van de regels van de uitvoer van stty. Zei ik niet dat dit makkelijk zou zijn?

Let op welke van die instellingen door een - in je stty uitvoer worden voorafgegaan. Tel al die nummers bijelkaar op (ze staan in het octale stelsel). Hiermee worden de bits die je wilt schonen voorgesteld, dus het resultaat is je fc# capaciteit. Denk er uiteraard aan dat je direct na het schonen de bits in zal gaan stellen, dus je kan gewoon gebruiken `fc#0177777' (zo doe ik het).

Doe nu hetzelfde voor die instellingen (opgesomd in deze sectie) die in je stty uitvoer geen - ervoor hebben. In mijn voorbeeld zijn de belangrijkste CS8 (0000060), HUPCL (0002000), en CREAD (0000200). Let ook op de flags voor je baud rate (de mijne is 0000015). Tel deze allemaal bijelkaar op, en in mijn voorbeeld krijg je 0002275. Dit gaat in je fs# capaciteit (`fs#02275' werkt in mijn voorbeeld prima).

Doe hetzelfde met set en clear voor de volgende sectie van het include bestand, "c_lflag bits". In mijn geval hoefde ik niets in te stellen, dus ik gebruik gewoon `xc#0157777' en `xs#0'.

16.2 Oudere seriële printers die tekens weglaten

Jon Luckey wijst erop dat een aantal oudere seriële printers met ten-cent seriële interfaces en kleine buffers echt stop bedoelen als ze dit zeggen met flow control. Hij kwam erachter dat het de-activeren van de FIFO in zijn 16550 seriële poort van zijn Linux box met setserial het probleem met de weggevallen tekens corrigeerde (je specificeert het uart-type kennelijk als een 8250 om dit te doen).

17. Credits

De smbprint informatie komt van een artikel door Marcel Roelofs <marcel@paragon.nl>.

In de nprint informatie over het gebruik van Netware printers is voorzien door Michael Smith <mikes@bioch.ox.ac.uk>.

De seriële printers onder de lpd sectie komt van Andrew Tefft <teffta@engr.dnet.ge.com>.

Het stuk over gamma's en dergelijke voor gs werd ingezonden door Andreas <quasi@hub-fue.franken.de>.

De twee paragrafen over de 30 seconden closing_wait van de seriële driver is bijgedragen door Chris Johnson <cdj@netcom.com>.

Robert Hart zond een paar uitstekende paragrafen over het instellen van een printserver naar netwerk HP's die ik woordelijk gebruikte.

En speciale dank aan de velen van jullie die in de loop der jaren hebben gewezen op typfouten, slechte url's en fouten in het document.