In dit document wordt beschreven hoe je het line printer spooling systeem kunt gebruiken waarin het Linux besturingssysteem voorziet. Deze HOWTO is het aanvullende document op de Linux Printing Setup HOWTO, waarin de installatie en setup van het Linux afdruksysteem worden beschreven. Het materiaal dat in deze HOWTO wordt gepresenteerd, zou even relevant voor alle varianten van het BSD besturingssysteem in aanvulling op het Linux besturingssysteem moeten zijn.
Opmerking van Mark Komarinski <markk@auratek.com>: Ik zou graag Matt Foster willen bedanken voor het vele werk dat hij deed in het herschrijven van deze HOWTO. Ik hou zijn stijl aan, en maak zonodig toevoegingen om alles up-to-date te houden.
Opmerking van Matt Foster <mwf@engr.uark.edu>: Deze versie van de Linux Printing HOWTO is een volledig herschreven versie van de originele die is geschreven door Grant Taylor <grant@god.tufts.edu> en Brian McCauley <B.A.McCauley@bham.ac.uk>. Ik heb getracht het materiaal in dit verslag door Grant en Brian's HOWTO gepresenteerd, te behouden, maar ik heb de presentatiestijl en de diepgang van het materiaal drastisch gewijzigd. Ik heb het gevoel dat dit de HOWTO meer compleet maakt en daardoor gemakkelijker is te lezen. Ik kan alleen maar hopen dat je het daarmee eens bent.
Opnieuw geïndexeerd, andere wijzigingen om geschikt te maken voor de nieuwe RedHat docs. Bedankt Ed!
Enkele namen die in deze HOWTO worden vermeld, maken aanspraak op copyrights en/of handelsmerken van bepaalde personen of bedrijven. Deze namen komen voluit of in initialen voor in deze HOWTO.
Alle vertalingen, afgeleide werken, of gebundelde werken waarin enige Linux HOWTO documenten zijn verwerkt, moeten worden voorzien van deze copyright melding.
Dat wil zeggen dat je geen afgeleide werken van een HOWTO mag produceren en aanvullende beperkingen op de distibutie ervan mag opleggen. Uitzonderingen op deze regels kunnen onder bepaalde voorwaarden worden toegestaan; neem alsjeblieft contact op met de Linux HOWTO coördinator via het hieronder gegeven adres.
In het kort, we willen verspreiding van deze informatie zoveel mogelijk aanmoedigen via zo veel mogelijk kanalen. We willen echter het copyright op deze HOWTO documenten blijven behouden, en zouden graag in kennis worden gesteld van plannen om deze HOWTO's opnieuw te distribueren.
Neem voor vragen alsjeblieft contact op met Tim Bynum, de Linux HOWTO coördinator, via <linux-howto@sunsite.unc.edu>. Je mag het commando finger toepassen op dit adres voor het telefoonnummer en aanvullende contactinformatie.
Ik adviseer dat als je deze HOWTO wilt afdrukken, je de PostScript versie download. Het is op een dusdanige wijze opgemaakt dat het er aantrekkelijker uitziet en gemakkelijker is om te lezen. Je kunt de PostScript versie van één van de vele Linux distributie sites halen (zoals SunSITE ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/).
Bedankt aan alle mensen die de tijd namen om de alpha versie van deze HOWTO te lezen en met vele behulpzame opmerkingen en suggesties reageerde ---een aantal van jullie zal je opmerkingen in deze versie weergegeven zien.
Deze sectie bespreekt het afdrukken van bestanden, het nakijken van de afdrukwachtrij, het verwijderen van taken uit de wachtrij, het opmaken van bestanden voordat ze worden afgedrukt, en het configureren van je afdrukomgeving.
Het Linux afdruksysteem---het lp systeem---is een port van de broncode geschreven door de Regents van de University van California voor de Berkeley Software Distributie versie van het UNIX besturingssysteem.
Verreweg de eenvoudigste manier om onder het Linux besturingssysteem af te drukken is door het bestand direct naar het afdrukapparaat te sturen. Een andere manier om dit te doen is, door het commando cat te gebruiken. Als gebruiker root, is het mogelijk om iets te doen als
In dit geval is /dev/lp een symbolische koppeling naar het werkelijke afdrukapparaat ---of het nu een dot-matrix, laserprinter, letterzetter, of plotter is. (Zie ln(1) voor meer informatie over symbolische koppelingen.)
Om beveiligingsredenen, zijn alleen de gebruiker root en gebruikers in dezelfde groep als de print daemon bevoegd om direct naar de printer te schrijven. Dit is de reden waarom commando's zoals lpr, lprm, en lpq moeten worden gebruikt om toegang tot de printer te krijgen.
Daarom moeten gebruikers lpr gebruiken om een bestand af te drukken. Het commando lpr zorgt voor al het werk dat in het begin nodig is om een bestand af te drukken, en geeft de controle vervolgens over aan een ander programma lpd, de line printing daemon. De line printing daemon vertelt de printer vervolgens hoe het bestand moet worden afgedrukt.
Als lpr wordt uitgevoerd, kopieert het eerst het aangegeven bestand naar een bepaalde directory (de spooldirectory) waar het bestand bewaard blijft totdat lpd het afdrukt. Zodra lpd is verteld dat er een af te drukken bestand is, zal het een kopie van zichzelf voortbrengen (als programmeurs noemen we dit forking). Deze kopie zal ons bestand afdrukkken terwijl de originele kopie op meer verzoeken wacht. Dit maakt het mogelijk dat er tegelijkertijd meerdere taken in de wachtrij kunnen worden geplaatst.
Als filename niet is opgegeven, verwacht lpr dat de invoer van standaardinvoer (meestal het toetsenbord, of de uitvoer van een ander programma) komt. Dit stelt de gebruiker in staat de uitvoer van een commando naar de print-spooler om te leiden. Zoals,
Het lpr commando accepteert diverse argumenten op de commandoregel die de gebruiker toestaat controle uit te oefenen over hoe het werkt. Een aantal van de meest gebruikte argumenten zijn: -Pprinter specificeert de te gebruiken printer, -h onderdrukt het afdrukken van de de burst pagina, -s maakt een symbolische koppeling aan in plaats van het bestand te kopiëren naar de spooldirectory (handig voor grote bestanden), en -#num geeft het aantal af te drukken kopieën weer. Een voorbeeld interactie met lpr zou kunnen zijn
Dit commando zal een symbolische koppeling aanmaken naar het bestand thesis.txt in de spooldirectory voor de printer met de naam dj, waar het zal worden verwerkt door lpd. Het zal vervolgens een tweede kopie afdrukken van thesis.txt.
Gebruik het commando lpq, om de inhoud van de afdrukwachtrij te bekijken. Aangeroepen zonder argumenten, retourneert het de inhoud van de wachtrij van de standaardprinter.
Een andere nuttige mogelijkheid van elk afdruksysteem is de bevoegdheid om een taak die voorheen in de wachtrij is gezet, te annuleren. Gebruik hiervoor lprm.
Het commando hierboven annuleert alle afdruktaken waarvan de gebruiker die het commando aanriep, eigenaar is. Een enkele afdruktaak kan worden geannuleerd door eerst het job nummer, dat wordt aangegeven door lpq, te verkrijgen en dat nummer dan aan lprm door te geven. Bijvoorbeeld,
Het lpc(8) programma wordt gebruikt om de printer, waarin lpd voorziet, te besturen. Je kunt een printer of zijn wachtrijen instellen of onklaar maken, ingangen binnen een wachtrij herschikken, en een statusrapport verkrijgen over de printers en hun wachtrijen. Lpc wordt meestal gebruikt in een setup waar meerdere printers aan één machine hangen.
Hiermee zal het programma lpc worden opgestart. Standaard kom je nu in een interactieve modus, en kun je beginnen met het aanroepen van commando's. De andere optie is om een lpc commando op de commandoregel aan te roepen.
Een lijst met de beschikbare commando's staat in de lpd man page, maar hier zijn een paar van de belangrijkste commando's die je kunt gebruiken. Opmerkingen die zijn gemarkeerd met een optie kunnen zowel door een printernaam (lp, print, etc) als het sleutelwoord all worden aangeroepen, wat alle printers betekent.
Even een opmerking tussendoor over RedHat's verbazingwekkende printtool programma. Het lijkt erop dat het alles doet wat een magicfilter zou doen. RedHat installeert al veel van de programma's om het filteren te doen. Hier kun je zien hoe ik mijn printer heb ingesteld onder RH 4.0 met een HP LJ 4L aangesloten op mijn parallelle poort (zou evengoed hetzelfde voor andere versies van RH kunnen zijn).
Word root en start de afdruktool op (als je het commando su hebt gebruikt, heb je er ook aan gedacht om de opdracht SETENV DISPLAY :0.0 en xhost + te geven, toch?)
Vul het invoerfilter in - Selecteer een printertype, resolutie, en papiergrootte (ljet4, 300x300, en letter)
Door het /etc/printcap bestand met de hand aan te passen, kun je voor iedere fysieke printer meerdere printerdefinities hebben. Één voor verschillende papierformaten, resoluties, enz.
Het afdrukken van grafische bestanden naar een printer hangt meestal af van de soort grafische bestanden die je omzet, en de soort printer waarnaar je je afdruktaken wilt sturen. Van Dot matrix is meestal geen sprake, te wijten aan de verschillen in de manier waarop dot-matrix met grafische bestanden omgaat. Je beste kans in deze situatie is om te bekijken of je printer compatibel is met een Epson of een IBM ProPrinter, en dan de grafische bestanden converteert naar PostScript, en vervolgens Ghostscript gebruikt (zie volgende sectie) om de grafische bestanden af te drukken.
Als je een laserprinter hebt, liggen de zaken een stuk gemakkelijker aangezien de meeste compatibel zijn met PCL. Dit geeft je een aantal opties. Een aantal programma's zullen hun uitvoer direct in PCL sturen. Als dit niet zo is, kunnen programma's zoals NetPBM ze omzetten in PCL. De laatste optie is om ghostscript (zie de volgende sectie) te gebruiken.
Je absoluut beste optie is om packages zoals NetPBM en Ghostscript te installeren en vervolgens een magic filter te installeren om de grafische bestanden automatisch te laten verwerken.
PostScript bestanden afdrukken op een printer met een PostScript interpreter is eenvoudig; gebruik gewoon lpr, en de printer zorgt voor alle details. Voor degenen die geen printer met PostScript mogelijkheden hebben, moeten we onze toevlucht nemen tot andere middelen. Gelukkig zijn er programma's beschikbaar die iets zinvols van PostScript kunnen maken, en het naar een taal vertalen die de meeste printers zullen begrijpen. Waarschijnlijk is Ghostscript hiervan het meest bekende programma.
Ghostscript's verantwoordelijkheid is om alle beschrijvingen in een PostScript bestand, te converteren naar commando's die de printer zal begrijpen. Om een PostScript bestand met behulp van Ghostscript af te drukken, zou je iets kunnen doen als
Merk op dat we in het voorbeeld hierboven in werkelijkheid de uitvoer van Ghostscript door middel van een pipe-symbool doorgeven aan het lpr commando door gebruik te maken van de optie -sOutputFile.
Ghostview is een interface naar Ghostscript voor het X Window Systeem. Het staat toe dat je een PostScript bestand bekijkt voordat je het afdrukt. Ghostview en Ghostscript kunnen allebei worden gehaald van ftp://prep.ai.mit.edu/pub/gnu/.
Adobe heeft een Acrobat lezer voor Linux uitgegeven, en het is beschikbaar vanaf de home page van Adobe http://www.adobe.com. De voorganger, xpdf, is ook beschikbaar. Beide zouden naar een postscript device moeten kunnen afdrukken.
Een van de gemakkelijkste manieren om TeX bestanden af te drukken is om ze te converteren naar PostScript en ze dan met behulp van Ghostscript af te drukken. Om dit te kunnen doen, moet je ze eerst omzetten van TeX naar een formaat dat bekend staat als DVI (dit staat voor device-independent). Je kunt dit doen met het tex(1) commando. Daarna moet je het DVI bestand converteren naar een PostScript bestand met behulp van dvips. Dit zou er allemaal als volgt uit kunnen zien als je het intikt:
Nu ben je er klaar voor om het resulterende PostScript bestand af te drukken zoals hierboven is beschreven.
De man pages bestaan uit voorgeformatteerde troff gegevens, dus we moeten het ontdoen van alle highlighting, onderstrepingen, enz. Het 'col' programma doet dit best aardig en aangezien we de gegevens door middel van een pipe doorgeven, zal het man programma, het programma more niet gebruiken.
Gezien de meeste ASCII bestanden niet zijn opgemaakt voor het afdrukken, is het handig om ze op een bepaalde manier op te maken voordat ze werkelijk worden afgedrukt. Dit zou in kunnen houden het op iedere pagina plaatsen van een titel en paginanummer, het instellen van de marges, dubbel spatiëren, inspringen, of afdrukken van een bestand in meerdere kolommen. Een algemene manier om dit te bewerkstelligen is door van een afdrukvoorbewerker zoals pr gebruik te maken.
In het voorbeeld hierboven, zal pr van het bestand thesis.txt de eerste drie pagina's overslaan (+4), het aantal regels per pagina instellen op zestig regels (-l60), de uitvoer dubbel spatiéren (-d), en de woorden "Ph.D. Thesis, 2nd Draft" bovenaan iedere pagina (-h) toevoegen. Lpr zal de uitvoer van pr dan in de wachtrij plaatsen. Zie de online manual page voor meer informatie over het gebruik van pr.
Alle commando's in het Linux afdruksysteem accepteren de -P optie. Deze optie staat de gebruiker toe om aan te geven welke printer voor uitvoer te gebruiken. Als een gebruiker niet aangeeft welke printer te gebruiken, dan zal als uitvoerapparaat uit worden gegaan van de standaardprinter.
In plaats van het iedere keer aangeven van de printer die moet worden gebruikt als je iets afdrukt, kun je de omgevingsvariabele PRINTER instellen op de naam van de printer die je wilt gebruiken. Dit wordt op verschillende manieren voor iedere shell bereikt. Voor bash kun je dit doen met
Deze commando's kunnen in je login scripts worden gezet (.profile voor bash, of .cshrc voor csh), of aangeroepen vanaf de commandoregel. (Zie bash(1) en csh(1) voor meer informatie over omgevingsvariabelen).
A1. Het staircase effect wordt veroorzaakt door de manier waarop sommige printers verwachten dat regels worden beëindigd. Sommige printers willen een regel die eindigt met een carriage-return/line-feed reeks (in de stijl van DOS) in plaats van de line-feed reeks die wordt gebruikt voor UNIX-type systemen. De gemakkelijkste manier om dit te herstellen is om na te gaan of je printer op de één of andere manier tussen de twee stijlen kan schakelen --- óf door het omzettten van een DIP switch, óf door aan het begin van iedere afdruktaak het sturen van een escape reeks. Om het laatste te doen, moet je een filter aanmaken.(zie Q2).
Een snelle oplossing is om een filter te gebruiken op de commandoregel. Een voorbeeld hiervan zou kunnen zijn
A2. Een filter is een programma dat leest van standaardinvoer (stdin), deze invoer bewerkt, en naar standaarduitvoer (stdout) schrijft. Filters worden voor een heleboel dingen gebruikt, tekstverwerking inbegrepen.
A3. Een magic filter is een filter die een actie gebaseerd op het bestandstype uitvoert. Als het bestand bijvoorbeeld een onopgemaakt tekstbestand is, zou het 't bestand met gebruik van de normale methoden gewoon afdrukken. Als het bestand een PostScript bestand is, of met enig andere opmaak, dan zou het afgedrukt worden door van een andere methode (ghostscript) gebruik te maken. Twee voorbeelden hiervan zijn magicfilter en APSfilter. Iets om bij de filters rekening mee te houden is dat de geschikte programma's moeten zijn geïnstalleerd voordat je het filter installeert.
De reden hiervoor is dat zodra het magicfilter wordt geïnstalleerd, het je systeem afzoekt naar bepaalde programma's (zoals ghostscript - als het dit vindt - dan weet het dat het PostScript gegevens kan afhandelen), en zichzelf dan, gebaseerd op wat het vindt, aanmaakt. Om alle afdrukbestanden af te kunnen handelen, zal je waarschijnlijk op z'n minst het volgende moeten hebben geïnstalleerd:
A4. Misschien. Printers die alleen de WPS commando's accepteren, zullen onder Linux niet werken. Printers die WPS en andere commando's accepteren (zoals de Canon BJC 610) zullen werken, zolang als ze op iets anders zijn ingesteld dan het WPS formaat. Andere printers, zoals sommige HP DeskJet 820Cxi/Cse, zullen onder Linux *niet* werken. Met dat te hebben gezegd, Linux kan handelen als een print server (Zie Samba) voor Win95 machines, zolang Win95 drivers voor die printers heeft.
Q5. Wat voor een systeem is dit? Ik kan niet meer dan 6 pagina's afdrukken of anders krijg ik de foutmelding "file too large".
A5. Één van de opties in het bestand /etc/printcap relateert aan de maximumgrootte van een afdrukbestand. De standaardwaarde is 1000 diskblokken (ongeveer 500k?). Voor PostScript bestanden en gelijken, zal dit je 6-8 pagina's geven, inclusief grafische gegevens. Zorg ervoor dat je de volgende regel aan de printerdefinitie toevoegt:
De voornaamste reden hiervoor is te voorkomen dat de spoolpartitie volloopt. Er is nog een andere manier om dit te doen, door lpr een soft link aan te laten maken vanuit de spooldirectory naar je afdrukbestand. Maar je moet er iedere keer aan denken dat je de -s optie toevoegt aan lpr.
In deze sectie worden een aantal algemene zaken behandeld die fout kunnen gaan met je afdruksysteem.
Dit is een sectie met referenties naar het Linux afdruksysteem. Ik heb getracht de referentie sectie van deze HOWTO zoveel mogelijk samen te vatten. Als je denkt dat ik een belangrijke referentie ben vergeten, aarzel dan alsjeblieft niet om contact met me op te nemen.
Als iets van het bovenstaande waar is, dan mag je je wel twee keer bedenken voordat je je vraag post. En probeer ter zake doende informatie in te sluiten als je uiteindelijk naar een nieuwsgroep post. Probeer niet om gewoon zoiets te zeggen als, "Ik heb problemen met lpr, help alsjeblieft". Dit soort berichten zal beslist door velen worden genegeerd. Probeer ook de kernelversie die je gebruikt, te vermelden, hoe de fout ontstond en als die er zijn, de specifieke foutmeldingen die het systeem retourneerde.