Index: head/de_DE.ISO8859-1/books/handbook/printing/chapter.xml =================================================================== --- head/de_DE.ISO8859-1/books/handbook/printing/chapter.xml +++ head/de_DE.ISO8859-1/books/handbook/printing/chapter.xml @@ -4,5448 +4,1189 @@ The FreeBSD German Documentation Project $FreeBSD$ $FreeBSDde: de-docproj/books/handbook/printing/chapter.xml,v 1.56 2012/02/16 20:07:18 bcr Exp $ - basiert auf: r43126 + basiert auf: r44529 --> - - Drucken - - SeanKellyBeigetragen von - - + + + Drucken + - JimMockRestrukturiert und aktualisiert durch + + + Warren + Block + + Beigetragen von + - StefanBethkeÜbersetzt von + + + Björn + Heidotting + + Übersetzt von + - + Trotz vieler Versuche es zu vermeiden, ist der Druck von + Informationen auf Papier immer noch eine wichtige Funktion. + Drucken hat zwei grundlegende Komponenten. Die Daten müssen an + den Drucker gesendet werden, und zwar in einer Form, die der + Drucker verstehen kann. + + + Schnellstart + + Die grundlegende Druckfunktion kann schnell eingerichtet + werden. Der Drucker muss lediglich fähig sein, normalen + ASCII-Text zu drucken. Informationen zum + Druck von anderen Dateien finden Sie in . + + + + Erstellen Sie ein Verzeichnis zur Speicherung der + Druckaufträge: + + &prompt.root; mkdir -p /var/spool/lpd/lp +&prompt.root; chown daemon:daemon /var/spool/lpd/lp +&prompt.root; chmod 770 /var/spool/lpd/lp + + + + Erstellen Sie als root die Datei + /etc/printcap mit folgendem + Inhalt: + + lp:\ + :lp=/dev/unlpt0:\ + :sh:\ + :mx#0:\ + :sd=/var/spool/lpd/lp:\ + :lf=/var/log/lpd-errs: + + + + Diese Zeile ist für einen Drucker, der an einem + USB-Port angeschlossen ist. + + Für einen Drucker, der am parallelen oder + Drucker-Port angeschlossen ist, verwenden + Sie: + + :lp=/dev/lpt0:\ + + Für einen Netzwerkdrucker verwenden Sie: + + :lp=:rm=network-printer-name:rp=raw:\ + + Ersetzen Sie + network-printer-name durch + den DNS-Namen des + Netzwerkdruckers. + + + + + + Aktivieren Sie lpd beim Systemstart, + indem Sie folgende Zeile in + /etc/rc.conf hinzufügen: + + lpd_enable="YES" - - Übersicht + Starten Sie den Dienst: - - LPD spooling system - - - - drucken - - - Mit &os; können Sie viele unterschiedliche Drucker - benutzen, von den ältesten Nadeldruckern bis zu den - neuesten Laserdruckern, und allen möglichen Geräten - dazwischen. Auf diese Weise können Sie hochwertige - Ausdrucke mit Ihren Programmen erzeugen. - - Sie können &os; auch so konfigurieren, dass es - Druckaufträge von anderen Computern über Ihr lokales - Netzwerk entgegennimmt, seien es &windows;-, &macos;- oder andere - &os;-Computer. &os; stellt sicher, dass die Druckaufträge in der - richtigen Reihenfolge bearbeitet werden und kann optional ein Deckblatt - mit dem Namen des Auftraggebers eines Druckauftrags aufgeben. - &os; kann auch Statistiken über die Computer und Benutzer - führen, die Ausdrucke in Auftrag geben. - - In diesem Kapitel erfahren Sie, wie Sie: - - - - &os;-Druckerwarteschlangen einrichten. - - - - Druckfilter installieren, die Druckaufträge je nach - Bedarf besonders behandeln und z.B. Dokumente automatisch - in eine Form umwandeln, die Ihr Drucker versteht. - - - - Druckaufträge mit einem Deckblatt versehen - können. - - - - Mit einem Drucker drucken können, der an einen - anderen Computer angeschlossen ist. - - - - Mit einem Drucker drucken können, der direkt an das - Netzwerk angeschlossen ist. - - - - die Größe von Druckaufträgen - beschränken können, oder bestimmte Benutzer von - den Benutzung des Drucksystems ausschließen - können. - - - - Statistiken aufzeichnen und die Benutzung des - Drucksystems nach Benutzern und Computern aufschlüsseln - können. - - - - Probleme beim Drucken diagnostizieren und beheben - können. - - - - Bevor Sie dieses Kapitel lesen: - - - - Machen Sie sich mit der Konfiguration und Installation - eines neuen Kernels vertraut (). - - - + &prompt.root; service lpd start +Starting lpd. - - Einführung + Drucken Sie eine Testseite: - Um einen Drucker mit &os; zu benutzen, können Sie - das Berkeley Line Printer Spooling System, das auch als - LPD-Drucksystem oder nur als - LPD bekannt ist, verwenden. - Dieses System zur Verwaltung von Druckaufträgen ist das - Standardsystem in &os;. Dieses Kapitel führt Sie in - LPD und dessen Konfiguration ein. - - Wenn Sie bereits mit LPD oder - einem anderen Drucksystem vertraut sind, können Sie direkt - im Abschnitt Einfache - Drucker-Konfiguration weiterlesen. - - LPD steuert alle Aspekte rund um - die Drucker, die an den Computer angeschlossen sind. Es ist - verantwortlich für: - - - - Die Zugriffskontrolle für direkt und über das - Netzwerk angeschlossene Drucker. - - - - Die Entgegennahme von Dateien, die gedruckt werden - sollen; eine so an das Drucksystem übergebene Datei wird als - DruckauftragDruckaufträge - bezeichnet. - - - - Den gleichzeitigen Zugriff von mehreren Benutzern auf - einen Drucker. Alle Druckaufträge werden in einer - Druckerwarteschlange gesammelt, und - nacheinander abgearbeitet. - - - - Den Druck von Deckblättern (auch als - Banner- oder Burst-Seiten - bezeichnet), damit Benutzer ihre Druckaufträge schnell innerhalb - eines Stapels von ausgedruckten Dokumenten finden können. - - - - Das Einstellen der korrekten Kommunikations-Parameter - für Drucker, die seriell angeschlossen sind. - - - - Das Senden von Druckaufträgen an ein - LPD-System auf einem anderen - Computer. - - - - Das Ausführen von speziellen Filtern, um - Druckaufträge in die unterschiedlichen - Seitenbeschreibungssprachen umzusetzen oder an die - Fähigkeiten eines Druckers anzupassen. - - - - Das Erfassen von Verrechnungsdaten für - Druckaufträge. - - - - Sie können LPD alle diese - Funktionen, oder auch nur einen Teil davon, ausführen - lassen, indem Sie die Konfigurationsdatei - (/etc/printcap) anpassen, und indem Sie - spezielle Filterprogramme bereitstellen. - - - Vorteile des Drucksystems - - Wenn Sie der einzige Benutzer sind, der mit Ihrem Computer - arbeitet, fragen Sie sich vielleicht, warum Sie die - Konfigurationsarbeit für das Drucksystem auf sich nehmen - sollten, wenn Sie Deckblätter, Abrechnungsdaten oder - Zugriffskontrolle nicht benötigen. Obwohl Sie direkt auf den - Drucker zugreifen können, bietet LPD - eine Reihe von Vorteilen: - - - - - LPD druckt im Hintergrund; - Sie müssen nicht erst darauf warten, dass Ihr - Druckauftrag an den Drucker übermittelt worden - ist. - + &prompt.root; printf "1. Der Drucker kann drucken.\n2. Dies ist die zweite Zeile.\n" | lpr - - LPD kann Druckaufträge - mit Kopf- oder Fußzeilen versehen, oder ein spezielles - Dateiformat, wie DVI von - &tex;&tex;, - automatisch in ein für den Drucker verständliches Format - umwandeln; Sie müssen diese Schritte nicht manuell - ausführen. - + + Wenn die beiden Zeilen nicht am linken Rand starten + und Sie einen Treppeneffekt + beobachten, lesen Sie . + - - Viele freie und kommerzielle Programme, mit denen Sie - drucken können, erwarten, mithilfe des - LPD-Drucksystems zu drucken. - Wenn Sie das Drucksystem konfiguriert haben, können - Sie einfacher mit neuer oder auch vorhandener Software - drucken. - - - + Mit lpr können nun Textdateien + gedruckt werden. Geben Sie den Dateinamen auf der + Kommandozeile an oder lassen Sie lpr + von einer Pipe lesen. + + &prompt.user; lpr textfile.txt +&prompt.user; ls -lh | lpr + + - - Grund-Konfiguration + + Druckerverbindungen - Um einen Drucker mit dem - LPD-Drucksystem benutzen zu - können, müssen Sie sowohl Ihren Drucker und die - Drucker-Schnittstelle als auch das - LPD-Drucksystem konfigurieren. - Dieser Abschnitt beschreibt zwei Konfigurationen: - - - - Abschnitt Einfache - Drucker-Konfiguration beschreibt, wie Sie einen - Drucker an Ihren Computer anschließen und - LPD so konfigurieren, dass - Sie Textdateien zum Drucker senden können. - - - - Abschnitt Erweiterte - Drucker-Konfiguration beschreibt, wie Sie mit - speziellen Dateiformaten umgehen können, wie Sie - Deckblätter drucken können, wie Sie den Zugriff auf - Drucker einschränken können, und wie Sie - Verrechnungsdaten aufzeichnen können. - - - - - Einfache Drucker-Konfiguration - - Dieser Abschnitt beschreibt, wie Sie die - LPD-Software konfigurieren, um - Ihren Drucker zu benutzen. Diese Grundlagen werden - erklärt: + Es gibt eine Vielzahl von Möglichkeiten, einen Drucker mit + einem Rechner zu verbinden. Kleine Desktop-Drucker werden in + der Regel mit dem USB-Anschluss verbunden, + ältere Modelle nutzen oft die parallele Schnittstelle. Einige + Drucker sind direkt mit einem Netzwerk verbunden, damit sie + leichter von mehreren Rechnern benutzt werden können. Nur noch + wenige Drucker verwenden einen seriellen Anschluss. - - - Abschnitt Hardware-Konfiguration - erläutert, wie Sie Ihren Drucker an Ihren Computer - anschließen können. - + &os; unterstützt die folgenden Arten von Druckern: + + + + USB - Abschnitt Software-Konfiguration - erklärt, wie Sie die - LPD-Konfigurationsdatei - (/etc/printcap) anpassen. + USB-Drucker können mit einem freien + USB-Anschluss des Rechners verbunden + werden. + + Wenn &os; einen USB-Drucker + erkennt, werden zwei Gerätenamen erstellt: + /dev/ulpt0 und + /dev/unlpt0. Beide Geräte leiten die + Daten an den Drucker weiter. Nach jedem Druckauftrag wird + der USB-Anschluss von + ultp0 zurückgesetzt. Das + Zurücksetzen kann bei einigen Druckern Probleme + verursachen, daher wird in der Regel stattdessen + unlpt0 verwendet, das den + Anschluss nicht zurücksetzt. - - - Wenn Sie einen Drucker einrichten möchten, der - über das Netzwerk angeschlossen ist (anstatt über - die serielle oder parallele Schnittstelle), lesen Sie bitte - Abschnitt Drucker mit - direkter TCP-Schnittstelle. - - Obwohl dieser Abschnitt Grund-Konfiguration - heißt, ist die Konfiguration relativ komplex. Es ist - vergleichsweise schwierig, einen Drucker mit Ihrem Computer - und dem LPD-Drucksystem zu - verbinden. Die weiteren Optionen, wie Kopfzeilen oder - Deckblätter, sind einfach zu konfigurieren, sobald die - Grund-Konfiguration erfolgreich abgeschlossen ist. - - - Hardware-Konfiguration - - Dieser Abschnitt beschreibt, über welche - Schnittstellen Sie einen Drucker mit Ihrem Computer - verbinden können. Er behandelt sowohl die - Schnittstellen und Kabel, als auch die Kerneloptionen, die - Sie benötigen, um &os; mit Ihrem Drucker - kommunizieren zu lassen. - - Wenn Sie Ihren Drucker bereits erfolgreich mit einem - anderen Betriebssystem auf Ihrem PC eingesetzt haben, - können Sie wahrscheinlich mit dem Abschnitt Software-Konfiguration - fortfahren. - - - Schnittstellen und Kabel - - Praktisch alle Drucker unterstützen mindestens - eine dieser Schnittstellen: - - - - SeriellDruckerSerielle - angeschlossene Drucker werden über eine serielle - Schnittstelle (auch RS-232 oder COM-Schnittstelle - genannt) mit Ihrem Computer verbunden. Diese - Schnittstelle wird von vielen unterschiedlichen - Systemen verwendet. Serielle Kabel sind leicht - erhältlich und können auch einfach selbst hergestellt - werden. Einige Drucker erfordern möglicherweise ein - spezielles Kabel oder besondere - Kommunikationseinstellungen. Die meisten seriellen - Schnittstellen von PCs besitzen eine maximale - Datenübertragungsrate von 115200 bps; zum - Ausdruck großer Grafiken sind serielle Drucker daher - ungeeignet. - - - - ParallelDruckerParallel - angeschlossene Drucker werden über eine parallele - Schnittstelle mit Ihrem Computer verbunden. Diese - Schnittstelle wird hauptsächlich von PCs und - Workstations benutzt. Die Schnittstelle bietet eine - höhere Datenübertragungsrate als serielle - Schnittstellen. Kabel sind leicht erhältlich, sind - aber vergleichsweise schwer selbst herzustellen. - Üblicherweise brauchen keine Kommunikationsparameter - festgelegt zu werden; dies macht die Einrichtung sehr - einfach. - - Die parallele Schnittstelle wird auch als - CentronicsCentronicsParallelport-Drucker-Schnittstelle - bezeichnet, nach dem Namen des Steckverbinders, der - hier häufig zum Einsatz kommt. - - - - USBDruckerUSB-Schnittstelle - (Universal Serial Bus) bieten noch höhere - Geschwindigkeiten als parallele Schnittstellen oder - serielle RS-232-Schnittstellen. USB-Kabel sind einfach - und billig. Zum Drucken ist die USB-Schnittstelle - besser geeignet als serielle oder parallele - Schnittstellen, auf vielen &unix; Systemen werden - USB-Schnittstellen jedoch nur unzureichend - unterstützt. Um Probleme zu vermeiden, sollten Sie - sich einen Drucker anschaffen, der sowohl eine - USB-Schnittstelle als auch eine parallele - Schnittstelle besitzt (viele Drucker besitzen heute - beide Schnittstellen). - - - - Im Allgemeinen versenden parallele Schnittstellen Daten nur in - eine Richtung (vom Computer zum Drucker), serielle Schnittstellen - und USB-Schnittstellen versenden Daten in beide Richtungen. - Moderne parallele Schnittstellen (EPP and ECP) übertragen - Daten bi-direktional nach dem Standard IEEE 1284. - - - PostScript - - - Ein Drucker kann auf zwei Arten bi-direktional - angesprochen werden. Die erste Methode benutzt einen - Druckertreiber, der die herstellerspezifische Sprache - des Druckers beherrscht. Diese Methode wird oft mit - Tintenstrahl-Druckern eingesetzt und dazu benutzt, - den Füllstand der Tintenpatronen und andere - Status-Informationen auszugeben. Die zweite Methode - wird benutzt, wenn der Drucker &postscript; beherrscht. - - Da ein &postscript;-Druckauftrag ein komplettes Programm - ist, kann es auch Daten an den Computer zurückliefern, ohne - überhaupt eine Seite Papier zu bedrucken. Auf diesem Wege - werden auch Probleme wie z.B. ein Papierstau vom Drucker an den - Computer übermittelt. Darüberhinaus ist dies - die effektivste Methode, um die tatsächlich gedruckte - Anzahl an Seiten vom Drucker abzufragen: ein &postscript;-Programm - ermittelt jeweils vor und direkt nach einem Druckauftrag den - Seitenzähler des Druckers, und vergleicht die beiden - Zählerwerte. - - - - Parallele Schnittstellen - - Um einen Drucker mit paralleler Schnittstelle an Ihren - Computer anzuschließen, verbinden Sie den Drucker - mit einer parallelen Schnittstelle Ihres Computers. Die - Dokumentation zu Ihrem Drucker oder Computer sollte Ihnen - hier weiterhelfen. - - Notieren Sie sich, mit welcher parallelen Schnittstelle des - Computers Sie den Drucker verbunden haben. Die meisten Computer - haben lediglich eine parallele Schnittstelle. - Der &os;-Gerätename der ersten Schnittstelle lautet ppc0, der der zweiten ppc1, und so weiter. Der - Gerätename für den Drucker an der ersten parallelen - Schnittstelle folgt dem selben Schema und lautet /dev/lpt0, usw. - - - - Serielle Schnittstellen - - Um einen Drucker mit serieller Schnittstelle an Ihren - Computer anzuschließen, verbinden Sie den Drucker - mit einer seriellen Schnittstelle Ihres Computers. Die - Dokumentation zu Ihrem Drucker oder Computer sollte Ihnen - hier weiterhelfen. - - Sollten Sie sich nicht sicher sein, welches das - richtige Kabel ist, können Sie eine - dieser Alternativen ausprobieren: - - - - Ein Modemkabel verbindet alle - Anschlüsse an einem Ende des Kabels eins-zu-eins - mit den Anschlüssen am anderen Ende des Kabels. - Ein solches Kabel wird auch als (engl.) - DTE-to-DCE- oder - DEE-zu-DÜE-Kabel - bezeichnet. - - - - Ein - NullmodemkabelNullmodemkabel - verbindet einige Signale eins-zu-eins, andere über - Kreuz (z.B. Sende- und Empfangsleitung), und verbindet - einige weitere direkt im Stecker miteinander. Ein - solches Kabel wird auch als (engl.) - DTE-to-DTE- oder - DEE-zu-DEE-Kabel bezeichnet. - - - - Ein Serielles Druckerkabel - schließlich, das für einige spezielle - Drucker benötigt wird, verbindet zusätzliche - Signale miteinander, anstatt sie im Stecker - zurückzuführen. - - - - - Baudrate - - - Parität - - - Flusssteuerung - - - Sie sollten auch die Kommunikationsparameter am - Drucker einstellen; üblicherweise gibt es dazu - DIP-Schalter, oder eine Option in der Menüführung am - Drucker. Wählen Sie die höchste - Bitrate (auch als bps - Bits pro Sekunde oder Baudrate bezeichnet), - die sowohl Ihr Drucker als auch Ihr Computer unterstützen. - Wählen Sie 7 oder 8 Bits, gerade, ungerade oder keine - Parität, und ein oder zwei Stoppbits. Wählen - Sie die Art der Flusssteuerung: keine, XON/XOFF (auch - als in-band- oder - Software-Flusssteuerung bezeichnet), - oder Hardware. Notieren Sie sich diese Einstellungen, damit Sie - sie später bei der Software-Konfiguration zur Verfügung - haben. - - - - - Software-Konfiguration - - Dieser Abschnitt beschreibt die notwendigen - Konfigurationsschritte, damit Sie mit dem - &os;-LPD-System drucken - können. - - Diese Schritte müssen Sie ausführen: - - - - Konfigurieren Sie Ihren Kernel, soweit notwendig, um - die Schnittstelle benutzen zu können, an die Ihr - Drucker angeschlossen ist. Abschnitt Kernel-Konfiguration - erklärt, welche Optionen Sie - benötigen. - - - - Konfigurieren Sie die Kommunikationseinstellungen - für die parallele Schnittstelle, sofern Sie sie - benutzen. Abschnitt Kommunikationseinstellungen - für die parallele Schnittstelle enthält - die Details. - - - - Prüfen Sie, ob Sie Daten an den Drucker senden - können. Abschnitt Prüfen der - Drucker-Kommunikation führt eine Reihe von - Möglichkeiten auf. - - - - Konfigurieren Sie LPD - für Ihren Drucker, indem Sie die Konfigurationsdatei - /etc/printcap anpassen. Details dazu finden - Sie im Abschnitt LPD - aktivieren: die - /etc/printcap-Datei. - - - - - Kernel-Konfiguration - - Der Betriebssystem-Kernel ist für eine bestimmte - Kombination aus Geräten kompiliert. Dies schließt - Ihre seriellen oder parallelen Schnittstellen mit ein. - Dementsprechend kann es notwendig sein, die Kernelkonfiguration um - weitere Schnittstellen zu erweitern. - - So können Sie prüfen, ob Ihr Kernel die - serielle Schnittstelle unterstützt, an die Sie den - Drucker angeschlossen haben: - - &prompt.root; grep sioN /var/run/dmesg.boot - - Ersetzen Sie N durch die - Nummer der seriellen Schnittstelle, beginnend bei Null. - Wenn Sie eine Ausgabe ähnlich der folgenden erhalten, - unterstützt ihr Kernel diese Schnittstelle: - - sio2 at port 0x3e8-0x3ef irq 5 on isa -sio2: type 16550A - - Erhalten Sie keine Ausgabe, oder eine Fehlermeldung, - wird die Schnittstelle nicht korrekt unterstützt. - - So können Sie prüfen, ob Ihr Kernel die - parallele Schnittstelle unterstützt, an die Sie den - Drucker angeschlossen haben: - - &prompt.root; grep ppcN /var/run/dmesg.boot - - Ersetzen Sie N durch die - Nummer der parallelen Schnittstelle, beginnend bei Null. - Wenn Sie eine Ausgabe ähnlich der folgenden erhalten, - unterstützt ihr Kernel diese Schnittstelle: - - ppc0: <Parallel port> at port 0x378-0x37f irq 7 on isa0 -ppc0: SMC-like chipset (ECP/EPP/PS2/NIBBLE) in COMPATIBLE mode -ppc0: FIFO with 16/16/8 bytes threshold - - Erhalten Sie keine Ausgabe, oder eine Fehlermeldung, - wird die Schnittstelle nicht korrekt unterstützt. - - Gegebenenfalls müssen Sie Ihren Kernel - umkonfigurieren und neu kompilieren, damit die von Ihnen - gewählte Schnittstelle unterstützt wird. - - Um Unterstützung für eine serielle Schnittstelle - hinzuzufügen, lesen Sie bitte Kapitel Konfiguration des &os; Kernels. - Um eine parallele Schnittstelle hinzuzufügen, lesen Sie bitte - ebenfalls jenes Kapitel als auch den folgenden Abschnitt Kommunikationseinstellungen - für die parallele Schnittstelle. - - - - - Kommunikationseinstellungen für die parallele - Schnittstelle - - Wenn Sie die parallele Schnittstelle zur Kommunikation - mit Ihrem Drucker benutzen, haben Sie die Wahl zwischen - Interrupt-gesteuerter oder Polling-Datenübertragung. - Der generische Druckergerätetreiber &man.lpt.4; in - &os; benutzt das &man.ppbus.4;-System, das die parallele - Schnittstelle mithilfe des &man.ppc.4;-Treibers steuert. - - - - Die Interrupt-gesteuerte - Datenübertragung ist die Voreinstellung im - GENERIC-Kernel. Der Treiber benutzt eine IRQ-Leitung, - um zu erfahren, wann der Drucker weitere Daten - empfangen kann. - - - - Bei der Polling-Methode - prüft der Treiber in regelmäßigen - Abständen, ob weitere Daten übertragen - werden können. - - - - Die Interrupt-gesteuerte Methode ist - überlicherweise schneller und verbraucht weniger - Rechenzeit als die Polling-Methode, es wird jedoch eine - eigene IRQ-Leitung für die Schnittstelle - benötigt. Darüberhinaus kann es mit einigen - Druckermodellen zu Problemen kommen, wenn die - Interrupt-gesteuerte Übertragung zum Einsatz - kommt. - - Die können die Kommunikationseinstellung entweder - in der Kernel-Konfiguration wählen, oder mittels des - &man.lptcontrol.8;-Programms zur Laufzeit - einstellen. - - So legen Sie die Kommunikationseinstellung - in der Kernel-Konfiguration fest: - - - - Ändern Sie Ihre Kernel-Konfigurationsdatei. - Finden Sie die Zeile, die mit device - ppc0 beginnt. Wenn Sie die zweite parallele - Schnittstelle konfigurieren möchten, suchen Sie - nach device ppc1, für die - dritte Schnittstelle ppc2, - usw. - - - - Um die Interrupt-Steuerung zu aktivieren, - passen Sie die folgende Zeile an: - - hint.ppc.0.irq="N" - - Ersetzen Sie N - durch die Nummer der IRQ-Leitung, die dieser - parallelen Schnittstelle zugewiesen ist. Stellen - Sie sicher, dass Ihre Kernel-Konfigurationsdatei den - &man.ppc.4;-Treiber enthält: - - device ppc - - - - Wenn Sie den Polling-Modus verwenden - möchten, entfernen Sie die folgende Zeile - aus /boot/device.hints: - - hint.ppc.0.irq="N" - - Sollte der Treiber die Schnittstelle dennoch - im Interrupt-Modus betreiben, könnte dies an - der Aktivierung durch das &man.acpi.4;-System in - &os; liegen. Bitte prüfen Sie die - ACPI- und die BIOS-Konfiguration. - - - - - - Wenn Sie Ihre Kernel-Konfigurationsdatei angepasst - haben, kompilieren und installieren Sie nun einen - neuen Kernel. Das Kapitel Konfiguration des - &os;-Kernels enthält weitere Details dazu. - - - - So können Sie die Kommunikationseinstellung - mit&man.lptcontrol.8; - ändern: - - - - Um die Interrupt-Steuerung für die - Schnittstelle N zu - aktivieren, geben Sie ein: - - &prompt.root; lptcontrol -i -d /dev/lptN - - - - Um den Polling-Modus für die Schnittstelle - N zu aktivieren, geben Sie - ein: - - &prompt.root; lptcontrol -p -d /dev/lptN - - - - Sie können diesen Befehl in - /etc/rc.local aufnehmen, damit er bei - jedem Systemstart automatisch ausgeführt wird. - &man.lptcontrol.8; enthält weitere Informationen. - - - - Kommunikation mit den Drucker prüfen - - Bevor Sie mit der Konfiguration des - LPD-Drucksystems fortfahren, - sollten Sie sicherstellen, das Sie erfolgreich Daten an - Ihren Drucker senden können. Es ist deutlich - einfacher, Kommunikations- und Konfigurationsprobleme - unabhängig voneinander zu lösen. - - Der Drucker kann mit einem Probeausdruck getestet werden. - Für alle Drucker, die normalen Text unmittelbar drucken - können, bietet sich das Programm &man.lptest.1; an: es - produziert alle 96 druckbaren ASCII-Zeichen auf 96 Zeilen. - - - PostScript - - - Für einen &postscript;-Drucker (oder andere - Drucker, die eine Seitenbeschreibungssprache verwenden) - muss ein passendes Programm an den Drucker gesendet - werden, z.B. dieses: - - %!PS -100 100 moveto 300 300 lineto stroke -310 310 moveto /Helvetica findfont 12 scalefont setfont -(Funktioniert dieser Drucker?) show -showpage - - Sie können dieses ProstScript-Programm in einer - Datei speichern, und mit den Beispielen in den folgenden - Abschnitt verwenden. - - - PCL - - - - Nicht alle Drucker, die eine Seitenbeschreibungssprache - verwenden, benötigen ein Test-Programm: z.B. HPs PCL - (das auch in vielen kompatiblen Druckern zum Einsatz zu kommt), - versteht normalen Text. Besondere Escape-Sequenzen werden - benutzt, um die erweiterten Möglichkeiten aufzurufen. - &postscript;-Drucker können in der Regel keinen normalen - Text direkt verarbeiten, weil sie ein &postscript;-Programm - erwarten, das eine Seite produziert. - - - - Einen Paralleldrucker prüfen - - Dieser Abschnitt führt vor, wie Sie die - Kommunikation mit Ihrem Drucker über die - paralleleDruckerParallel - Schnittstelle prüfen können. - - So testen Sie einen Drucker an einer - parallelen Schnittstelle: - - - - Werden Sie root mithilfe - des &man.su.1;-Befehls. - - - - Senden Sie Testdaten an den Drucker. - - - - Wenn Ihr Drucker reinen Text direkt drucken - kann, verwenden Sie &man.lptest.1;: - - &prompt.root; lptest > /dev/lptN - - Ersetzen Sie N - durch die Nummer der parallelen Schnittstelle, - an die der Drucker angeschlossen ist (angefangen - bei Null). - - - - Wenn Ihr Drucker &postscript; (oder eine - andere Seitenbeschreibungssprache) versteht, - senden Sie ein passendes Testprogramm an den - Drucker. Geben Sie folgenden Befehl ein: - - &prompt.root; cat file > /dev/lptN - - Ersetzen Sie N - durch die Nummer der parallelen Schnittstelle, - an die der Drucker angeschlossen ist (angefangen - bei Null). Geben Sie nun das Testprogramm ein, - Zeile für Zeile. Kontrollieren Sie jede - Zeile, bevor Sie die Eingabetaste drücken: - Sie können die Zeile später nicht mehr - ändern. Zum Schluss tippen Sie - - Ctrl - D - . - Wenn Sie ein anderes Zeichen nutzen, um das Ende - der Datei anzuzeigen, müssen Sie - natürlich die entsprechende - Tastenkombination für dieses Zeichen - betätigen. - - Sie können das Testprogramm auch in - einer Datei speichern, und dann diesen Befehl - aufrufen: - - &prompt.root; cat Testprogramm > /dev/lptN - - Ersetzen Sie Testprogramm - durch den Dateinamen, unter dem Sie das Testprogramm - gespeichert haben. - - - - - - Der Drucker sollte einige Zeilen oder eine Seite - drucken. Machen Sie sich keine Sorgen über falsche - Formatierungen: die Software-Konfiguration enthält - Informationen zum Umformatieren von Druckaufträgen. - - - - Einen seriellen Drucker prüfen - - - Drucker - serielle - - - Dieser Abschnitt führt vor, wie Sie die Kommunikation - mit Ihrem Drucker über die parallele Schnittstelle - prüfen können. - - So testen Sie einen Drucker an einer - seriellen Schnittstelle: - - - - Werden Sie root mithilfe - des &man.su.1;-Befehls. - - - - Ändern Sie die Datei - /etc/remote. Fügen Sie - den folgenden Eintrag hinzu: - - printer:dv=/dev/port:br#bps-rate:pa=parity - - - Baudrate - - - serieller Anschluss - - - Parität - - - Ersetzen Sie - Gerät durch den - Gerätenamen der seriellen Schnittstelle - (ttyu0 für die erste, - ttyu1 für die zweite, usw.), - Baudrate ist die - Geschwindigkeit und - Parität die - Parität (even für - gerade, odd für ungerade - oder none für keine), die - Sie am Drucker eingestellt haben. - - Hier ein Beispieleintrag für einen Drucker, - der über die dritte serielle Schnittstelle - angeschlossen ist, mit 19.200 Baud kommuniziert und - keine Parität verwendet: - - printer:dv=/dev/ttyu2:br#19200:pa=none - - - - Verbinden Sie sich mit dem Drucker über den - Befehl &man.tip.1;: - - &prompt.root; tip printer - - Kommt es hierbei zu einer Fehlermeldung, - ändern Sie den Eintrag in - /dev/cuaaN und verwenden Sie /dev/cuaaN - statt /dev/ttyuN. - - - - Senden Sie Testdaten an den Drucker. - - - - Wenn Ihr Drucker reinen Text direkt drucken - kann, verwenden Sie &man.lptest.1;: - - &prompt.user; $lptest - - - - Wenn Ihr Drucker &postscript; (oder eine andere - Seitenbeschreibungssprache) versteht, senden Sie ein - passendes Testprogramm an den Drucker. Geben Sie das - Testprogramm ein, Zeile für Zeile. Kontrollieren - Sie jede Zeile, bevor Sie die Eingabetaste drücken: - Sie können die Zeile später nicht mehr - ändern. Zum Schluss tippen Sie - Control-D. - - Sie können das Testprogramm auch in einer Datei - speichern, und dann diesen Befehl aufrufen: - - &prompt.user; >Testprogramm - - Ersetzen Sie Testprogramm - durch den Dateinamen, unter dem Sie das Testprogramm - gespeichert haben. Nachdem &man.tip.1; die Datei - gesendet hat, tippen Sie - Control-D. - - - - - - Der Drucker sollte einige Zeilen oder eine Seite - drucken. Machen Sie sich keine Sorgen über falsche - Formatierungen: die Software-Konfiguration enthält - Informationen zum Umformatieren von - Druckaufträgen. - - - - - <application>LPD</application> aktivieren: die - <filename>/etc/printcap</filename>-Datei - - Nachdem Sie Ihren Drucker angeschlossen haben, Ihren - Kernel richtig konfiguriert haben und erfolgreich einen - Testausdruck produziert haben, können Sie nun das - LPD-System konfigurieren. - - Sie konfigurieren LPD, indem - Sie die Datei /etc/printcap anpassen. - Da LPD die Datei jedes Mal liest, - wenn eine Aktion durchgeführt wird, werden - Änderungen an der Konfiguration sofort aktiv. - - - Drucker - Eigenschaften - - - Die &man.printcap.5;-Datei ist einfach aufgebaut. Sie - können /etc/printcap mit Ihrem - bevorzugten Texteditor bearbeiten. Sie verwendet dasselbe - Format wie auch /usr/share/misc/termcap - oder /etc/remote. Informationen zum - Format finden Sie in &man.cgetent.3;. - - Die Grund-Konfiguration des - LPD-Systems beinhaltet diese - Schritte: - - - - Wählen Sie einen Namen (und einige praktische - Abkürzungen) für die Druckerwarteschlage, und - tragen Sie ihn in die /etc/printcap-Datei - ein. Abschnitt Einen Namen - wählen enthält weitere Informationen. - - - - Schalten Sie den Druck von - DeckblätternDeckblätter - aus (dies ist standardmäßig eingeschaltet), indem Sie - das Attribut sh setzen. Abschnitt - Den Druck von - Deckblättern ausschalten erklärt, wie Sie dies - tun können. - - - - Legen Sie ein Pufferverzeichnis für die - Warteschlange an, und geben Sie den Pfad mittels des - sd-Attributs an: siehe Abschnitt Das Pufferverzeichnis - anlegen. - - - - Geben Sie den Gerätenamen für Ihren - Drucker mittels des lp-Attributs an: - siehe Abschnitt Festlegen der - Drucker-Gerätedatei. Ist Ihr Drucker - über eine serielle Schnittstelle angeschlossen, - benutzen Sie das Attribut ms#, - wie dies in Abschnitt Festlegen der - Kommunikationsparameter beschrieben ist. - - - - Installieren Sie einen Filter für reinen Text: - siehe Abschnitt Den - Textfilter installieren. - - - - Testen Sie die Konfiguration, indem Sie etwas mit - dem &man.lpr.1;-Befehl drucken. Die Abschnitte Die Konfiguration testen und - Fehlersuche und - Problembehebung enthalten weitere Informationen. - - - - - Drucker, die eine Seitenbeschreibungssprache wie - &postscript; verwenden, können keinen reinen Text - drucken. Es wird deshalb angenommen, dass Sie nur - solche Dateien drucken, die Ihr Drucker verarbeiten - kann. - - - Viele Anwender erwarten, dass sie normalen Text auf - allen Druckern drucken können. Viele Programme, die mit - LPD zusammenarbeiten, gehen ebenfalls von - dieser Annahme aus. Wenn Sie einen &postscript;-Drucker - installieren, und Sie sowohl &postscript;- als auch Textdateien - drucken möchten, sollten Sie einen weiteren - Konfigurationsschritt ausführen und einen - Text-zu-&postscript;-Filter installieren. Der Abschnitt Drucken von reinen - Textdateien auf einem &postscript;-Drucker - erklärt, wie Sie dies tun können. - - - Einen Namen wählen - - Der erste einfache Schritt ist, einen Namen für - Ihren Drucker zu wählen. Sie können diesen Namen - frei wählen, Sie sollten allerdings keine Sonderzeichen oder - Umlaute verwenden. Sie können mehrere Alias-Namen - vergeben. - - Ein Drucker in /etc/printcap - sollte den Alias lp haben. Dieser Name - wird standardmäßig von allen Druckbefehlen - verwendet, wenn auf der Befehlszeile oder in der - PRINTER-Umgebungsvariablen kein anderer - Drucker angegeben ist. - - Ebenso ist es üblich, eine ausführliche - Beschreibung des Druckermodells als letzten Alias-Namen zu - verwenden. - - Sobald Sie einen Namen und einige einfache Alias-Namen - ausgewählt haben, tragen Sie sie in die Datei - /etc/printcap ein. Beginnen Sie die - Zeile mit dem Namen des Druckers und fügen Sie alle - Alias-Namen an. Trennen Sie die Namen durch den - senkrechten Strich |. Fügen Sie an - das Ende der Zeile einen Doppelpunkt : - an. - - Das folgende Beispiel definiert zwei Drucker, einen - Diablo 630 Zeilendrucker, und einen Panasonic KX-P4455 - &postscript;-Laserdrucker: - - # -# /etc/printcap for host rose -# -rattan|line|diablo|lp|Diablo 630 Line Printer: - -bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4: - - Der erste Drucker hat den Namen - rattan, und hat die Alias-Namen - line, diablo, - lp und Diablo 630 Line - Printer. Da er den Alias-Namen - lp trägt, wird er - standardmäßig von den Druckprogrammen - verwendet. Der zweite Drucker heißt - bamboo, und hat die Alias-Namen - ps, PS, - S, panasonic und - Panasonic KX-P4455 PostScript - v51.4. - - - - Keine Deckblätter drucken - - - drucken - Deckblatt - - - Standardmäßig druckt das - LPD-System ein - Deckblatt vor jedem Druckauftrag, - die den Namen des Druckauftrags, den Benutzer und den - Computer angibt. Während der Einrichtung des Systems - und beim Testen stört das Deckblatt allerdings, - weshalb Sie sie zunächst deaktivieren sollten. - - Um den Druck von Deckblättern zu deaktivieren, - fügen Sie das Attribut sh zur - Druckerdefinition in /etc/printcap - hinzu. Hier ein Beispiel: - - # -# /etc/printcap for host rose - no header pages anywhere -# -rattan|line|diablo|lp|Diablo 630 Line Printer:\ - :sh: - -bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ - :sh: - - Beachten Sie die korrekte Formatierung: die beiden - Definitionen beginnen auf einer Zeile; weitere Zeilen der - Definition sind mit einem Tab-Zeichen - eingerückt, und alle Zeilen einer Definition, bis auf - die letzte, enden mit dem Backslash \. - - - - Das Pufferverzeichnis anlegen - - - Pufferverzeichnis - - - Druckaufträge - - - Der nächste Schritt ist, das - Pufferverzeichnis anzulegen. In - diesem Verzeichnis werden Druckaufträge zwischengespeichert, - während sie gedruckt werden. Gleichzeitig werden hier auch - einige Verwaltungsdateien des Systems abgelegt. - - Da sich die Dateien in diesem Verzeichnis häufig - ändern, ist es üblich, das Verzeichnis unter - /var/spool anzulegen. - Es ist nicht notwendig, Sicherungskopien der Dateien - herzustellen; das Verzeichnis kann nötigenfalls - leicht mit &man.mkdir.1; wieder angelegt werden. - - Es ist auch üblich, dem Verzeichnis denselben - Namen wie dem Drucker zu geben: - - &prompt.root; mkdir /var/spool/printer-name - - Wenn Sie viele Drucker verwenden, ist es am besten, - wenn Sie für die Pufferverzeichnisse ein eigenes - Unterverzeichnis in /var/spool - anlegen, wie dies hier für die beiden Beispieldrucker - rattan und bamboo - gezeigt wird: - - &prompt.root; mkdir /var/spool/lpd -&prompt.root; mkdir /var/spool/lpd/rattan -&prompt.root; mkdir /var/spool/lpd/bamboo - - - Um zu verhindern, dass alle Benutzer den Inhalt - aller Druckaufträge einsehen können, sollten - Sie die Rechte auf den Pufferverzeichnissen einschränken. - Die Verzeichnisse sollten dem - Benutzer daemon und der Gruppe - daemon gehören, und auch nur - vom Benutzer und der Gruppe les-, schreib- und - durchsuchbar sein. Für unsere - Beispieldrucker: - - &prompt.root; chown daemon:daemon /var/spool/lpd/rattan -&prompt.root; chown daemon:daemon /var/spool/lpd/bamboo -&prompt.root; chmod 770 /var/spool/lpd/rattan -&prompt.root; chmod 770 /var/spool/lpd/bamboo - - - Schließlich müssen Sie dem - LPD-System noch mitteilen, wo - Sie die Pufferverzeichnisse angelegt haben. Dazu geben Sie - in der Definition das Attribut sd an: + - # -# /etc/printcap for host rose - added spooling directories -# -rattan|line|diablo|lp|Diablo 630 Line Printer:\ - :sh:sd=/var/spool/lpd/rattan: + + Prallel (IEEE-1284) -bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ - :sh:sd=/var/spool/lpd/bamboo: + + Die parallele Schnittstelle ist + /dev/lpt0. Der Gerätename erscheint + unabhängig davon, ob ein Drucker angeschlossen ist oder + nicht. Eine automatische Erkennung findet nicht + statt. + + Die Hersteller haben sich weitgehend von diesem + älteren Anschluss verabschiedet und auch viele Rechner + haben keine parallele Schnittstelle mehr. Es existieren + jedoch Adapter, um einen parallelen Drucker an einem + USB-Port anzuschließen. Der Drucker + wird dann wie ein USB-Drucker + behandelt. Es können auch + Printserver verwendet werden, um + parallele Drucker direkt mit einem Netzwerk zu + verbinden. + + - Beachten Sie, dass der Druckername in der ersten - Spalte beginnt, und dass alle Folgezeilen mit einem - Tab eingerückt sind. - - Wenn Sie das sd-Attribut nicht - angeben, verwendet das System /var/spool/lpd als Verzeichnis. - - - - Festlegen der Drucker-Gerätedatei - - Nachdem Sie die korrekte Gerätedatei für die - Schnittstelle im Abschnitt Hardware-Konfiguration - identifiziert und angelegt haben, müssen Sie dem - LPD-System mitteilen, welche - Gerätedatei im Verzeichnis /dev es für die - Datenübertragung zum Drucker verwenden soll. - - Geben Sie die Gerätedatei durch das Attribut - lp in - /etc/printcap an. - - Wenn rattan an die erste parallele - Schnittstelle angeschlossen ist, und bamboo an - die sechste serielle, dann sieht /etc/printcap - so aus: + + Seriell (RS-232) - # -# /etc/printcap for host rose - identified what devices to use -# -rattan|line|diablo|lp|Diablo 630 Line Printer:\ - :sh:sd=/var/spool/lpd/rattan:\ - :lp=/dev/lpt0: - -bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ - sh:sd=/var/spool/lpd/bamboo:\ - :lp=/dev/ttyu5: - - Wenn Sie lp nicht angeben, versucht - LPD die Gerätedatei /dev/lp zu verwenden. /dev/lp ist zurzeit in &os; - nicht definiert. - - Wenn Ihr Drucker über eine parallele Schnittstelle - angeschlossen ist, können Sie mit dem Abschnitt Den Textfilter installieren - fortfahren. Verwenden Sie eine serielle Schnittstelle, beachten - Sie bitte den folgenden Abschnitt. - - - - Kommunikationsparameter festlegen - - - Drucker - serielle - - - Für seriell angeschlossene Drucker kann - LPD die Geschwindigkeit, - Parität und weitere Kommunikationsparameter - einstellen. Dies hat folgende Vorteile: - - - - Sie können die Parameter einfach in - /etc/printcap ändern, ohne - das Ausgabe-Filterprogramm anpassen zu - müssen. - - - - Dasselbe Ausgabe-Filterprogramm kann für - unterschiedliche Drucker verwendet werden, auch wenn - diese unterschiedliche Kommunikationseinstellungen - benötigen. - - - - Die folgenden Attribute legen die seriellen - Kommunikationsparameter fest: - - - - br#Baudrate - - - Setzt die Übertragungsgeschwindigkeit auf - Baudrate. - Baudrate kann - üblicherweise 50, 75, 110, 134.5, 150, 300, - 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400, - 57600, oder 115200 Bit pro Sekunde betragen. - - - - - ms#stty-Modi - - - Setzt die Eigenschaften für das Gerät, - nachdem es geöffnet wurde. Die verfügbaren - Eigenschaften sind in &man.stty.1; aufgeführt. - - - - - Wenn LPD das mit - lp angegebene Gerät öffnet, - setzt es die mit ms# angegebenen - Eigenschaften. Von besonderem Interesse sind hier die Modi - parenb, parodd, - cs5, cs6, - cs7, cs8, - cstopb, crtscts und - ixon, die in der - &man.stty.1;-Handbuchseite erläutert werden. - - Für den über die sechste serielle - Schnittstelle angeschlossenen Laserdrucker beträgt - die Geschwindigkeit 38.400 Baud, und es werden diese - Kommunikationseinstellungen verwendet: keine Parität - (-parenb), 8-Bit-Zeichen - (cs8), keine Modemsteuerung - (clocal) und Hardware-Flusssteuerung - (crtscts): - - bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ - :sh:sd=/var/spool/lpd/bamboo:\ - :lp=/dev/ttyd5:ms#-parenb cs8 clocal crtscts: - - - - Den Textfilter installieren - - - Druckfilter - - - Ein Textfilter, auch als - Eingangsfilter bezeichnet, ist ein - Programm, das von LPD - aufgerufen wird, wenn ein Druckauftrag verarbeitet wird. - Dabei wird die Standardeingabe des Programms mit der zu - druckenden Datei verbunden, und die Standardausgabe mit - dem im lp-Attribut angegebenen - Gerät. Das Programm sollte nun die Datei einlesen, - alle Übersetzungen durchführen, die für den - Drucker notwendig sind, und das Ergebnis über die - Standardausgabe an den Drucker senden. Textfilter werden - im Abschnitt Filter genauer - erläutert. - - Um einen einfachen Test durchzuführen, reicht ein - kleines Filterprogramm, dass schlicht /bin/cat - aufruft, um die Daten unverändert und den Drucker zu schicken. - &os; verfügt über das Programm lpf, - das Unterstreichung und Fettdruck für solche Drucker - ermöglicht, die ansonsten dazu nicht in der Lage wären. - Darüberhinaus gibt es viele andere Filter, die Sie einsetzen - können. lpf wird im Abschnitt lpf: ein Textfilter - ausführlich beschrieben. - - Legen Sie zunächst das folgende Shell-Skript als - /usr/local/libexec/if-simple mit - Ihrem bevorzugten Texteditor an: + + Serielle Anschlüsse sind veraltet und werden außer in + Nischenanwendungen nur noch selten verwendet. Die + Kabel, Stecker und die erforderliche Verkabelung sind oft + sehr unterschiedlich. + + Der Gerätename für einen seriellen Anschlüsse ist + /dev/cuau0 oder + /dev/cuau1. Es können auch + USB-Adapter verwendet werden. Diese + erscheinen als /dev/cuaU0. + + Damit mit dem Drucker kommuniziert werden kann, müssen + einige Kommunikationsparameter bekannt sein. Zu den + wichtigsten zählen die Baudrate + (BPS - Bits pro Sekunde) und die + Parität. Diese Werte variieren, + aber typische serielle Drucker verwenden eine Baudrate von + 9600 und keine Parität. + + - #!/bin/sh -# -# if-simple - Simple text input filter for lpd -# Installed in /usr/local/libexec/if-simple -# -# Simply copies stdin to stdout. Ignores all filter arguments. + + Netzwerk -/bin/cat && exit 0 -exit 2 + + Netzwerkdrucker werden direkt mit dem lokalen Netzwerk + verbunden. - Machen Sie die Datei ausführbar: + Der DNS-Name des Druckers muss + bekannt sein. Wenn dem Drucker eine dynamische Adresse + per DHCP zugeteilt wird, sollte das + DNS automatisch aktualisiert werden, so + dass der Drucker immer die richtige + IP-Adresse hat. Um dieses Problem zu + vermeiden, werden Netzwerkdruckern häufig statische + IP-Adressen zugeteilt. + + Die meisten Netzwerkdrucker verstehen Druckaufträge, + die über das LPD-Protokoll empfangen + werden. Sie können auch den Namen der Druckwarteschlange + angeben. Einige Drucker verarbeiten die Daten + unterschiedlich, je nachdem welche Warteschlange verwendet + wird. Zum Beispiel druckt eine + Raw-Warteschlange die Daten + unverändert, während eine + Text-Warteschlange den Text um + Wagenrückläufe ergänzt. - &prompt.root; chmod 555 /usr/local/libexec/if-simple + Viele Netzwerkdrucker können auch Daten drucken, die + direkt an Port 9100 gesendet werden. + + + - Konfigurieren Sie nun den Textfilter für Ihren - Drucker in /etc/printcap, indem Sie - das if-Attribut hinzufügen. Hier - die Konfiguration unserer beiden Beispieldrucker: + + Zusammenfassung - # -# /etc/printcap for host rose - added text filter -# -rattan|line|diablo|lp|Diablo 630 Line Printer:\ - :sh:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0:\ - :if=/usr/local/libexec/if-simple: - -bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ - :sh:sd=/var/spool/lpd/bamboo:\ - :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:\ - :if=/usr/local/libexec/if-simple: - - - Das Shell-Skript if-simple - steht im Verzeichnis /usr/share/examples/printing. - - - - - <application>LPD</application> aktivieren - - &man.lpd.8; wird von /etc/rc - gestartet, wenn die &man.rc.conf.5;-Variable - lpd_enable auf YES - gesetzt ist. Fügen Sie dazu diese Zeile in - /etc/rc.conf hinzu: - - lpd_enable="YES" - - Starten Sie Ihren Computer neu, oder starten Sie - &man.lpd.8; von Hand: - - &prompt.root; lpd - - - - Die Konfiguration testen - - Damit ist die einfache Konfiguration abgeschlossen. - Noch muss die Konfiguration aber getestet werden und etwaige - Probleme müssen behoben werden. Um die Konfiguration zu - testen, sollten Sie einen Probeausdruck mithilfe des Programms - &man.lpr.1; produzieren. &man.lpr.1; übergibt - Druckaufträge an das - LPD-System. - - Sie können &man.lpr.1; mit &man.lptest.1; - kombinieren, um Testdaten zu drucken. &man.lptest.1; wurde - im Abschnitt Kommunikation mit den Drucker - prüfen vorgestellt. - - So testen Sie die einfache - LPD-Konfiguration: - - &prompt.root; lptest 20 5 | lpr -PDruckername - - Ersetzen Sie Druckername - durch den Namen des Druckers, den Sie testen möchten. - Wenn Sie den Standard-Drucker testen möchten, rufen - Sie &man.lpr.1; ohne die Option auf. - Wenn Sie einen Drucker testen möchten, der nur - &postscript; versteht, müssen Sie ein - &postscript;-Testprogramm an &man.lpr.1; übergeben. - Ein Testprogramm, das Sie in einer Datei gespeichert haben, - können Sie mit dem Befehl - lpr Dateiname - an das LPD-System übergeben. - - Bei einem &postscript;-Drucker hängt das Ergebnis - naturgemäß vom Testprogramm ab. Wenn Sie - &man.lptest.1; verwenden, sollte das Ergebnis - ungefähr so aussehen: - - !"#$%&'()*+,-./01234 -"#$%&'()*+,-./012345 -#$%&'()*+,-./0123456 -$%&'()*+,-./01234567 -%&'()*+,-./012345678 - - Um sicherzustellen, dass alles richtig - funktioniert, sollten Sie jetzt ein größeres - &postscript;-Programm senden. Mit &man.lptest.1; können - Sie größere Datenmengen z.B. mit dem Befehl - lptest 80 60 erzeugen: &man.lptest.1; - produziert 60 Zeilen mit je 80 Zeichen. - - Wenn Sie nicht erfolgreich drucken können, finden - Sie im Abschnitt Fehlersuche und - Problembehebung weitere Informationen. - - + Verkabelte Netzwerkdrucker drucken in der Regel am + schnellsten und sind einfach einzurichten. Für den direkten + Anschluss am Rechner wird USB wegen seiner + Geschwindigkeit und Einfachheit bevorzugt. Parallele + Verbindungen funktionieren, haben jedoch ihre Begrenzung in + Bezug auf Kabellänge und Geschwindigkeit. Serielle + Verbindungen sind schwieriger zu konfigurieren und die + Verdrahtung unterscheidet sich zwischen den Modellen. Zudem + müssen Baudrate und Parität bekannt sein. Glücklicherweise + sind serielle Drucker selten geworden. - - Erweiterte Drucker-Konfiguration - - JohannKoisÜbersetzt von - - - - - - Dieser Abschnitt beschreibt den Einsatz von Filtern für - das Drucken speziell formatierter Seiten oder von - Deckblättern, das Drucken über ein Netzwerk sowie die - Beschränkung und Verrechnung der Druckernutzung. + + Gebräuchliche Seitenbeschreibungssprachen - - Filter - - Drucken - Filter - - - Obwohl LPD Netzwerkprotokolle, - Warteschlangen, Zugriffskontrollen und andere für das - Drucken wichtige Aspekte prinzipiell unterstützt, passiert - ein Großteil der wirklichen Arbeit - in den sogenannten Filtern. Dabei handelt - es sich um Programme, die direkt mit einem Drucker kommunizieren - und deren Gerätespezifika und spezielle Anforderungen - erfüllen. Im einfachsten Fall installiert man nur einen reinen - Textfilter, der mit beinahe allen Druckern funktionieren sollte. - (Lesen Sie dazu auch den Abschnitt Den Text-Filter - installieren.) - - Um die erweiterten Fähigkeiten von Druckern auch - einsetzen zu können, sollten Sie verstehen, wie Filter - arbeiten, da diese für die Bereitstellung dieser Funktionen - zuständig sind. Die schlechte Nachricht ist, dass - Sie diese Filter bereitstellen müssen. - Die gute Nachricht ist allerdings, dass diese in der Regel - bereits vorhanden sind. Ist dies nicht der Fall, können - Sie einen Filter meist relativ einfach selbst erstellen. - - Der Filter /usr/libexec/lpr/lpf wird - bereits mit &os; geliefert. Er kümmert sich um die - korrekte Behandlung von gelöschten Zeichen (das sogenannte - Backspacing), um im Text - enthaltene Tabulatoren, sowie um die Verrechnung von - Druckaufträgen. Das ist aber auch alles, was dieser - Filter kann. Zusätzliche Filter und für die Funktion - von Filtern nötige Komponenten finden sich aber in der - &os; Ports-Sammlung. + Daten, die an einen Drucker gesendet werden, müssen in einer + Sprache verfasst sein, die der Drucker verstehen kann. Diese + Sprachen werden Seitenbeschreibungssprachen oder + Page Description Languages + (PDL) genannt. - Dieser Abschnitt behandelt folgende Themen: + + + ASCII - - Der Abschnitt - Die Funktionsweise von Filtern versucht, einen - Überblick über die Rolle von Filtern innerhalb des - Druckprozesses zu geben. Sie sollten diesen Abschnitt lesen, - damit Sie verstehen, was unter der Haube - passiert, wenn LPD einen Filter - verwendet. Dieses Wissen wird Ihnen dabei helfen, Probleme, - die bei Installation von Filtern für verschiedene Drucker - entstehen können, vorauszusehen und zu beheben. + Schlichter ASCII-Text ist die + einfachste Möglichkeit, um Daten an einen Drucker zu + senden. Die Zeichen werden eins zu eins gedruckt: ein + A in den Daten erscheint beim Druck als + A auf dem Papier. Eine Formatierung + ist nur bedingt verfügbar und es gibt keine Möglichkeit, + eine Schriftart oder eine bestimmte Laufweite zu wählen. + Die Einfachheit von schlichtem + ASCII-Text bedeutet, dass Text ohne + bzw. wenig Codierung oder Übersetzung gedruckt werden + kann. Die gedruckte Ausgabe entspricht dem, was an den + Drucker gesendet wurde. + + Einige kostengünstige Drucker können keinen einfachen + ASCII-Text drucken. Das macht sie in + der Regel schwieriger einzurichten. + - - LPD geht davon aus, dass - jeder Drucker in der Lage ist, normalen Text zu drucken. - Für &postscript;- (oder andere sprachbasierte) Drucker - stellt dies allerdings ein Problem dar, da diese nicht in - der Lage sind, normalen Text direkt zu drucken. Der - Abschnitt Normalen Text auf - &postscript;-Druckern drucken beschreibt, wie Sie - dieses Problem lösen können. Besitzen Sie einen - &postscript;-Drucker, sollten Sie diesen Abschnitt lesen. - - - - &postscript; ist ein populäres Ausgabeformat, das - von vielen Programmen unterstützt wird. Es ist sogar - möglich, &postscript;-Code direkt zu schreiben. Leider - sind &postscript;-Drucker in der Regel relativ teuer. Der - Abschnitt &postscript; - auf Nicht-&postscript;-Druckern emulieren beschreibt, - wie Sie einen Textfilter anpassen müssen, um - &postscript;-Daten auf einem - nicht-&postscript;-fähigen Drucker - auszugeben. Haben Sie keinen &postscript;-Drucker, sollten - Sie insbesondere diesen Abschnitt lesen. - + + &postscript; - Der Abschnitt - - Konvertierungsfilter beschreibt eine Möglichkeit - zur automatischen Konvertierung verschiedener Dateiformate - in ein von Ihrem Drucker unterstütztes Format. Nachdem - Sie diesen Abschnitt gelesen haben, werden Sie in der Lage - sein, Ihren Drucker so zu konfigurieren, dass Sie durch die - Eingabe von lpr -t troff-Daten, - von lpr -d &tex;-DVI-Daten, - oder von lpr -v Rasterbilddaten - drucken können. - Daher sollten Sie diesen Abschnitt auf jeden Fall lesen. - + &postscript; ist fast das Gegenteil von + ASCII. Anstelle von einfachem Text, + besteht ein &postscript;-Programm aus einer Reihe von + Anweisungen, die das endgültige Dokument generieren. Es + können auch verschiedene Schriften und Grafiken benutzt + werden. Diese Fähigkeiten haben jedoch ihren Preis. Das + Programm, das die Seite generiert, muss zunächst erzeugt + werden. Normalerweise wird dieses Programm durch die + Anwendung erzeugt, so dass der Prozess für den Benutzer + transparent bleibt. - - Im Abschnitt - Ausgabefilter wird eine nur selten genutzte - Eigenschaft von LPD, die - sogenannten Ausgabefilter, beschrieben. Wenn Sie keine - - Deckblätter drucken müssen, können - Sie diesen Abschnitt überspringen. + Kostengünstige Drucker sind manchmal nicht kompatibel + mit &postscript;. + + + + PCL (Printer Command Language) - Der Abschnitt lpf: - Ein Textfilter beschreibt lpf, - einen kompletten, wenn auch einfachen Textfilter für - Zeilendrucker (oder auch Laserdrucker, die sich analog - verhalten), der bereits mit &os; geliefert wird. Wenn - Sie nur am Ausdruck von reinem Text interessiert sind, oder - wenn Ihr Drucker nur Schrott produziert, wenn - er auf Backspace-Zeichen trifft, sollten Sie sich - lpf näher ansehen. + PCL ist eine Erweiterung von + ASCII. Es enthält Escape-Sequenzen für + die Formatierung, Schriftauswahl und das Drucken von + Grafiken. Viele Drucker bieten Unterstützung für + PCL5, einige unterstützen auch das + neuere PCL6 oder + PCLXL. Die neueren Versionen sind + Kombinationen von PCL5 und bieten eine + schnellere Druckgeschwindigkeit. - - - - Eine Kopie der verschiedenen Skripte finden Sie im - Verzeichnis /usr/share/examples/printing. - - - - Die Funktionsweise von Filtern - - Bei einem Filter handelt es sich um ein ausführbares - Programm, das von LPD gestartet - wird, um den geräteabhängigen Teil der Kommunikation - mit einem Drucker zu übernehmen. - - Wenn LPD eine Datei über - einen Druckauftrag drucken will, startet es ein Filterprogramm. - Danach setzt es die Standardeingabe des Filters auf die zu - druckende Datei, die Standardausgabe auf den Drucker und die - Standardfehlerausgabe auf /dev/console (Voreinstellung) oder auf - die über die Option lf in - /etc/printcap festgelegte Datei. - - - troff - - - Welcher Filter von LPD mit - welchen Argumenten geladen wird, wird in der Datei - /etc/printcap oder durch die Argumente, - die der Anwender &man.lpr.1; auf der Kommandozeile - übergibt, festgelegt. Gibt der Anwender beispielsweise - lpr -t ein, startet - LPD über die - tf-Fähigkeit den troff-Filter für - den gewünschten Drucker. Wollen Sie hingegen normalen - Text drucken, wird der if-Filter gestartet. - (Für Ausnahmen von diesem Vorgehen lesen Sie bitte den - Abschnitt - Ausgabefilter.) - - Es gibt drei Arten von Filtern, die Sie in - /etc/printcap angeben können: - - - - Textfilter (die in der - LPD-Dokumentation als - input filter bezeichnet werden) sind - für den Druck von normalem Text zuständig. - Es handelt sich dabei um eine Art Standardfilter, da - LPD von jedem Drucker erwartet, - dass er normalen Text drucken kann. Aufgabe des - Textfilters ist es, sicherzustellen, dass gelöschte - Zeichen (Backspaces), - Tabulatoren und andere Sonderzeichen Ihren Drucker nicht - verwirren. Falls Sie für die Nutzung eines Druckers - bezahlen müssen, kann der Textfilter über die - Anzahl der gedruckten Zeilen auch die Anzahl der von Ihnen - gedruckten Seiten ermitteln. Der Textfilter wird mit - folgenden Argumenten gestartet: - - - filter-name - -c - -w width - -l length - -i indent - -n login - -h host - acct-file - - - Die einzelnen Argumente haben folgende Bedeutung: - - - - - - - Notwendig, wenn lpr - -l verwendet wird. - - - - - width - - - Der Wert der in - /etc/printcap festgelegten - Option pw (page - width). In der Voreinstellung - ist dieser Wert auf 132 gesetzt. - - - - - length - - - Der Wert der - pl-Fähigkeit - (page length), - Voreinstellung 66. - - - - - indent - - - Der durch lpr - -i festgelegte Einzug, - Voreinstellung 0. - - - - - login - - - Der Name des Benutzers, der die Datei - druckt. - - - - - host - - - Der Rechner, auf dem der Druckauftrag - gestartet wurde. - - - - - acct-file - - - Der Name der Verrechnungsdatei, in der die - Ergebnisse der - af-Fähigkeit gespeichert - werden. - - - - - - - Ein - KonvertierungsfilterDruckenFilter - konvertiert verschiedene Dateiformate in ein Format, das - Ihr Drucker auf Papier ausgeben kann. So kann etwa der - ditroff-Schriftsatz nicht direkt gedruckt werden, daher - müssen Sie einen Konvertierungsfilter installieren, um - diese Daten in ein Format zu bringen, das Ihr Drucker - verarbeiten und drucken kann. Der Abschnitt - Konvertierungsfilter enthält ausführliche - Informationen zu diesen Filtern. Konvertierungsfilter - können auch zur Verrechnung verwendet werden. Sie - werden mit folgenden Argumenten gestartet: - - - filter-name - -x pixel-width - -y pixel-height - -n login - -h host - acct-file - - - pixel-width ist der Wert - der px-Fähigkeit (Voreinstellung 0), - während pixel-height dem Wert - der py-Fähigkeit (Voreinstellung - ebenfalls 0) entspricht. - - - - Ausgabefilter werden nur verwendet, wenn - keine Textfilter vorhanden sind oder wenn Deckblätter - benötigt werden. Der Abschnitt Ausgabefilter - enthält weitere Informationen. Ausgabefilter - unterstützen nur zwei Argumente: - - - filter-name - -w width - -l length - - - Beide Argumente entsprechen den Optionen - und der - Textfilter. - - - - Alle Filter sollten mit folgenden Rückgabewerten - (Exitcodes) beendet werden: - - - - exit 0 - - - Der Filter hat die Datei erfolgreich gedruckt. - - - - - exit 1 - - - Der Filter war nicht in der Lage, die Datei zu - drucken und meldet diesen Exitcode an - LPD, um die Datei erneut - zu drucken. LPD startet - daraufhin den Filter erneut. - - - - - exit 2 - - - Der Filter war nicht in der Lage, die Datei zu - drucken. Bei diesem Exitcode soll - LPD aber nicht versuchen, - die Datei erneut zu drucken, sondern den Druckauftrag - verwerfen. - - - - - /usr/libexec/lpr/lpf, der mit &os; - gelieferte Textfilter, nutzt die Argumente page - width und page - length, um festzulegen, wann ein Seitenumbruch - (form feed) gesendet werden - soll sowie zur Verrechnung von Druckaufträgen. Dazu werden - der Benutzername, der für den Druckauftrag verwendete - Rechner sowie die Verrechnungsdatei ausgewertet, um die - entsprechenden Einträge zu erstellen. - - Wenn Sie auf der Suche nach Filtern sind, achten Sie - darauf, dass diese LPD-kompatibel sind. Dazu müssen - diese die oben beschriebenen Argumente unterstützen. - Wenn Sie planen, Ihre Filter selbst zu erstellen, müssen - diese ebenfalls die gleichen Argumente und Exitcodes - unterstützen. - - - - Normalen Text auf &postscript;-Druckern drucken - - Druckjob - - Sie sind der alleinige Benutzer Ihres Computers und Ihres - &postscript;-Druckers und Sie sind sich sicher, dass Sie - niemals normalen Text an Ihren Drucker senden werden? - Außerdem werden Sie niemals ein Programm verwenden, - um normalen Text auszudrucken? Nur wenn dies alles zutrifft, - können Sie diesen Abschnitt überspringen. - - Wollen Sie allerdings sowohl &postscript; als auch - normalen Text drucken, müssen Sie Ihren Drucker zuvor - entsprechend konfigurieren. Dazu muss Ihr Textfilter in der - Lage sein, zu unterscheiden, ob es sich bei einem ankommenden - Druckauftrag um normalen Text oder um &postscript;-Daten - handelt. Jeder &postscript;-Druckauftrag muss mit den Zeichen - %! beginnen (sehen Sie in Ihrem - Druckerhandbuch nach, ob Ihr Drucker weitere Sprachen - unterstützt). Sind dies die beiden ersten Zeichen eines - Druckauftrages, so handelt es sich um &postscript;-Daten, die - direkt gedruckt werden können. Fehlen diese Zeichen allerdings, - muss der Textfilter den Inhalt der Datei nach &postscript; - konvertieren, bevor die Datei gedruckt werden kann. - - Wie funktioniert diese Unterscheidung? - - - Drucker - seriell - - - Haben Sie einen seriellen Drucker, können Sie - lprps installieren. - lprps ist ein &postscript;-Druckerfilter, - der eine Zweiwegekommunikation mit einem Drucker - ermöglicht. Er aktualisiert die Druckerstatusdatei mit - Protokollinformationen des Druckers. Dadurch sind Anwender - und Administratoren in der Lage, den genauen Zustand des - Druckers zu prüfen (durch Meldungen wie toner - low oder paper jam). - Wichtiger ist allerdings, dass lprps - psif enthält, ein Programm, das - feststellen kann, ob ein ankommender Druckauftrag normalen - Text enthält. Ist dies der Fall, wird - textps (das ebenfalls mit - lprps geliefert wird) aufgerufen und die - Datei nach &postscript; konvertiert. Danach kann - lprps die Datei an den Drucker senden. - - lprps ist in der &os; - Ports-Sammlung enthalten. Je - nach der von Ihnen verwendeten Papiergröße - installieren Sie dazu den Port print/lprps-a4 oder print/lprps-letter. Nach - der Installation müssen Sie nur noch den Pfad zum - Programm psif angeben, das als Teil von - lprps installiert wird. Haben Sie - lprps über die Ports-Sammlung installiert, - fügen Sie folgende Zeile in den Eintrag Ihres - &postscript;-Druckers in - /etc/printcap ein: - - :if=/usr/local/libexec/psif: - - Zusätzlich sollten Sie die - rw-Fähigkeit aktivieren, um - LPD im Schreib- und Lesemodus - zu öffnen. - - Haben Sie hingegen einen parallelen &postscript;-Drucker, - was eine Zweiwegekommunikation mit Ihrem Drucker (auf die - lprps angewiesen ist) unmöglich - macht, können Sie das folgende Shell-Skript verwenden: - - #!/bin/sh -# -# psif - Drucke PostScript oder normalen Text auf einem PostScript-Drucker -# Script-Version; das ist NICHT die mit lprps gelieferte Version! -# Installiert unter: /usr/local/libexec/psif -# - -IFS="" read -r first_line -first_two_chars=`expr "$first_line" : '\(..\)'` - -if [ "$first_two_chars" = "%!" ]; then - # - # PostScript - einfach drucken. - # - echo "$first_line" && cat && printf "\004" && exit 0 - exit 2 -else - # - # Normaler Text - zuerst konvertieren, dann drucken. - # - ( echo "$first_line"; cat ) | /usr/local/bin/textps && printf "\004" && exit 0 - exit 2 -fi - - Für dieses Skript wurde textps - als seperates Programm installiert, um normalen Text nach - &postscript; zu konvertieren. Sie können aber auch jeden - anderen Text-nach-&postscript;-Konverter verwenden. Die - &os; Ports-Sammlung - enthält mit a2ps ein umfangreiches - Programm zur Konvertierung von normalem Text nach - &postscript;. - - - - &postscript; auf Nicht-&postscript;-Druckern emulieren - - - PostScript - Emulation - - - Ghostscript - - Bei &postscript; handelt es sich um den - de facto-Standard für hochwertigen - Schriftsatz und Druck. Leider ist &postscript; aber auch ein - teurer Standard. Glücklicherweise - hat Aladdin Enterprises daher eine freie - &postscript;-ähnliche Implementierung namens - Ghostscript entwickelt, die auch - unter &os; lauffähig ist. - Ghostscript kann fast jede - &postscript;-Datei lesen und auf den verschiedensten - Geräten ausgeben, darunter auch auf vielen - Nicht-&postscript;-Druckern. Durch die Installation von - Ghostscript und die Nutzung eines - speziellen Textfilters erreichen Sie, dass sich Ihr - Nicht-&postscript;-Drucker wie ein echter &postscript;-Drucker - verhält. - - Ghostscript ist in - verschiedenen Versionen in der &os; Ports-Sammlung enhalten, - die am häfigsten verwendete Version ist print/ghostscript-gpl. - - Um &postscript; zu emulieren, muss der Textfilter erkennen, ob er - eine &postscript;-Datei drucken soll. Ist dies nicht der Fall, wird - die Datei direkt an den Drucker geschickt. Anderenfalls wird die - Datei an Ghostscript übergeben, das - die Datei in ein Format konvertiert, das Ihr Drucker versteht. - - Dazu ein Beispiel. Das folgende Skript ist ein Textfilter - für den Drucker DeskJet 500 von Hewlett Packard. Nutzen - Sie einen anderen Drucker, müssen Sie die Option - beim Aufruf von gs - (Ghostscript) entsprechend anpassen. Eine Liste der von - Ghostscript unterstützten - Geräte erhalten Sie durch die Eingabe von - gs -h auf der - Kommandozeile. - - #!/bin/sh -# -# ifhp - Ghostscript-emuliertes PostScript auf einem HP DeskJet 500 drucken -# Installiert unter: /usr/local/libexec/ifhp - -# -# LF als CR+LF behandeln (um einen "Treppeneffekt" auf HP/PCL-Drucker -# zu vermeiden) -# -printf "\033&k2G" || exit 2 - -# -# Lies die ersten zwei Zeichen der Datei -# -IFS="" read -r first_line -first_two_chars=`expr "$first_line" : '\(..\)'` - -if [ "$first_two_chars" = "%!" ]; then - # - # Oh. Es ist PostScript; mit Ghostscript konvertieren, danach drucken. - # - /usr/local/bin/gs -dSAFER -dNOPAUSE -q -sDEVICE=djet500 \ - -sOutputFile=- - && exit 0 -else - # - # Normaler Text oder HP/PCL, einfach direkt drucken. Ans Ende setzen wir - # einen Seitenumbruch (also ein Form Feed), damit auch die letzte Seite - # ausgeworfen wird. - # - echo "$first_line" && cat && printf "\033&l0H" && -exit 0 -fi - -exit 2 - - Zuletzt müssen Sie LPD - noch durch die if-Fähigkeit über - den neuen Filter informieren: - - :if=/usr/local/libexec/ifhp: - - Das ist alles. Ab sofort sollte sowohl ein lpr - normaler.text - als auch ein lpr wasauchimmer.ps - funktionieren und beide Dateien sollten problemlos gedruckt - werden. - - - - Konvertierungsfilter + - Nachdem Sie Ihren Drucker wie unter Einfache Drucker-Konfiguration - eingerichtet haben, wollen Sie wahrscheinlich einige - Konvertierungsfilter installieren, damit Sie (abgesehen von - ASCII-Text) auch Ihre Lieblings-Dateiformate drucken - können. - - - Warum sollte ich einen Konvertierungsfilter - installieren? - - - &tex; - DVI-Dateien drucken - - - Konvertierungsfilter erleichtern das Drucken von - verschiedenen Dateiformaten. Nehmen wir beispielsweise an, - dass Sie sehr viel mit dem &tex;-Satzsystem arbeiten und - über einen &postscript;-Drucker verfügen. Eine - vom &tex;-System erzeugte DVI-Datei kann erst dann gedruckt - werden, nachdem diese nach &postscript; konvertiert wurde. - Dazu geben Sie Folgendes ein: - - &prompt.user; dvips seaweed-analysis.dvi -&prompt.user; lpr seaweed-analysis.ps - - Haben Sie einen Konvertierungsfilter für DVI-Dateien - installiert, können Sie die manuelle Konvertierung - überspringen, da dies nun LPD - für Sie erledigt. Wollen Sie eine DVI-Datei drucken, geben - Sie nur noch den folgenden Befehl ein: - - &prompt.user; lpr -d seaweed-analysis.dvi - - Durch die Verwendung der Option - wurde LPD angewiesen, unsere - DVI-Datei vor dem Druck zu konvertieren. Der Abschnitt - Formatierungs- - und Konvertierungsoptionen beschreibt die dabei - möglichen Optionen. - - Für jede Konvertierungsoption, die Ihr Drucker - unterstützen soll, müssen Sie einen eigenen - Konvertierungsfilter installieren und - dessen Pfad in der Datei /etc/printcap - angeben. Ein Konvertierungsfilter verhält sich im - Prinzip wie ein Textfilter bei einer einfachen - Druckerkonfiguration (lesen Sie dazu auch den Abschnitt Den Textfilter installieren), - allerdings konvertiert er die Datei in ein Format, das Ihr Drucker - versteht, anstatt normalen Text zu drucken. - - - - Welche Konvertierungsfilter sollte ich installieren? - - Sie sollten nur Filter installieren, die Sie auch - benötigen. Wenn Sie sehr viele DVI-Dateien drucken, - sollten Sie auch einen DVI-Konvertierungsfilter installieren. - Müssen Sie viele troff-Daten drucken, ist ein troff-Filter - hilfreich. - - Die folgende Tabelle listet die von - LPD unterstützten Filter - sowie die Einträge in /etc/printcap auf, - mit denen Sie diese Fähigkeiten aktivieren. Zusätzlich - wird angegeben, wie Sie lpr jeweils - aufrufen müssen: - - - - - - Dateityp - /etc/printcap-Fähigkeit - lpr-Option - - - - - - cifplot - cf - - - - - DVI - df - - - - - plot - gf - - - - - ditroff - nf - - - - - FORTRAN-Text - rf - - - - - troff - tf - - - - - Rasterdaten - vf - - - - - Normaler Text - if - keine, , or - - - - - - - Wollen Sie also lpr -d - verwenden, muss die df-Fähigkeit in - /etc/printcap aktiviert sein. - - FORTRAN - - Obwohl manche Leute etwas anderes behaupten, sind - Formate wie FORTRAN-Text und -Plot inzwischen nahezu - obsolet. Wenn Sie diese Formate dennoch benötigen, - installieren Sie einfach einen angepassten Filter. Wollen - Sie beispielsweise zwar Printerleaf-Dateien (also Dateien des - Desktop Publishing-Programms von Interleaf), aber keine - Plotdateien drucken, so können Sie einen - Printerleaf-Konvertierungsfilter installieren, der es durch - die Aktivierung der gf-Fähigkeit - erlaubt, diese Dateien direkt zu drucken. Nun müssen - Sie Ihren Mitarbeitern nur noch mitteilen, dass - lpr -g nun für - drucke Printerleaf-Dateien steht. - - - - Konvertierungsfilter installieren - - Da Konvertierungsfilter nicht zum Basissystem von &os; - gehören, sollten diese unter /usr/local installiert werden. - Häufig wird das Verzeichnis /usr/local/libexec verwendet, da es - sich bei Konvertierungsfiltern um spezielle Programme - handelt, die nur von LPD, aber - nicht von einem normalen Benutzer gestartet werden. - - Um einen Konvertierungsfilter zu aktivieren, müssen - Sie dessen Pfad zusätzlich zur benötigten Fähigkeit - in der Datei /etc/printcap eintragen. - - In unserem Beispiel wollen wir einen - DVI-Konvertierungsfilter für den Drucker - bamboo installieren. Unsere bereits - bekannte /etc/printcap wurde - allerdings um die df-Fähigkeit - für den Drucker bamboo erweitert: + + Host-basiert - # -# /etc/printcap des Rechners rose - neuer df-Filter für bamboo -# -rattan|line|diablo|lp|Diablo 630 Line Printer:\ - :sh:sd=/var/spool/lpd/rattan:\ - :lp=/dev/lpt0:\ - :if=/usr/local/libexec/if-simple: - -bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ - :sh:sd=/var/spool/lpd/bamboo:\ - :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:rw:\ - :if=/usr/local/libexec/psif:\ - :df=/usr/local/libexec/psdf: + + Hersteller können die Kosten eines Druckers + reduzieren, indem sie einen einfachen Prozessor und etwas + Speicher verbauen. Diese Drucker sind nicht in der Lage + normalen Text zu drucken. Stattdessen werden die Texte + und Grafiken von einem Treiber auf dem Host-Rechner + generiert und dann an den Drucker gesendet. Diese Drucker + werden Host-basierte Drucker genannt. + + Die Kommunikation zwischen dem Treiber und dem Drucker + wird oft durch proprietäre oder nicht dokumentierte + Protokolle realisiert, weshalb sie nur mit den gängigsten + Betriebssystemen funktionieren. + + + - Beim DVI-Filter handelt es sich um ein Shell-Skript - namens /usr/local/libexec/psdf: + + &postscript; in eine andere Sprache konvertieren - #!/bin/sh -# -# psdf - DVI-nach-PostScript Druckerfilter -# Installiert unter: /usr/local/libexec/psdf -# -# Wird von lpd aktiviert, wenn der Nutzer lpr -d eingibt. -# -exec /usr/local/bin/dvips -f | /usr/local/libexec/lprps "$@" + Viele Anwendungen aus der Ports-Sammlung und &os; + Werkzeuge können &postscript; erzeugen. Die folgende Tabelle + listet die verfügbaren Programme, um &postscript; in andere + PDLs zu konvertieren: + + + Ausgabe <acronym>PDL</acronym>s + + + + + Ausgabe + PDL + Generiert von + Hinweis + + + + + + PCL oder + PCL5 + print/ghostscript9 + -sDEVICE=ljet4 für + Schwarzweiß, -sDEVICE=cljet5 für + Farbe + + + + PCLXL oder + PCL6 + print/ghostscript9 + -sDEVICE=pxlmono für + Schwarzweiß, -sDEVICE=pxlcolor für + Farbe + + + + ESC/P2 + print/ghostscript9 + -sDEVICE=uniprint + + + + XQX + print/foo2zjs + + + + +
+
- Dieses Skript startet dvips im - Filtermodus (durch das Argument wird der - Druckauftrag über die Standardeingabe entgegengenommen). - Danach wird der &postscript;-Druckerfilter - lprps (lesen Sie dazu auch den Abschnitt Drucken von reinen - Textdateien auf einem &postscript;-Drucker) mit den von - LPD übergebenen Argumenten - gestartet. Das lprps-Werkzeug wiederum nutzt - diese Argumente, um die gedruckten Seiten zu verrechnen. - - - - Beispiele für Konvertierungsfilter - - Da es keine verbindliche Prozedur zur Installation eines - Druckerfilters gibt, folgen nun weitere Beispiele in diesem - Abschnitt. Verwenden Sie diese, um Ihre eigenen Filter zu - erstellen. Falls ein Filter Ihren Anforderungen bereits - entspricht, können Sie ihn auch direkt verwenden. - - Das erste Beispiel beschreibt einen Konvertierungsfilter - für GIF-Dateien für den Drucker LaserJet III-Si von - Hewlett Packard: + + Zusammenfassung - #!/bin/sh -# -# hpvf - Konvertiert GIF-Dateien nach HP/PCL, danach wird gedruckt. -# Installiert unter: /usr/local/libexec/hpvf + Um die Konfiguration einfach zu halten, wählen Sie einen + Drucker, der &postscript; oder auch PCL + unterstützt. Mit print/ghostscript können + diese Drucker &postscript; nativ verstehen. Wenn der Drucker + &postscript; oder PCL direkt unterstützt, + können Sie auch sofort einfache + ASCII-Textdateien drucken. + + Zeilenbasierte Drucker wie Tintenstrahldrucker + unterstützen in der Regel kein &postscript; oder + PCL. Dennoch können Sie + ASCII-Textdateien drucken. + print/ghostscript unterstützt die Sprachen + dieser Drucker. Jedoch ist der Druck von Grafiken auf diesen + Druckern oft sehr langsam, da aufgrund der großen Menge an + Daten übertragen und ausgedruckt werden müssen. + + Host-basierte Drucker sind oft schwieriger einzurichten. + Einige Drucker können überhaupt nicht benutzt werden, da sie + proprieräte PDLs verwerden. Solche + Drucker sollten Sie nach Möglichkeit vermeiden. + + Die Beschreibungen vieler PDLs finden + Sie auf . + Spezielle PDLs, die von einigen Druckern + verwendet werden finden Sie auf . + +
-PATH=/usr/X11R6/bin:$PATH; export PATH -giftopnm | ppmtopgm | pgmtopbm | pbmtolj -resolution 300 \ - && exit 0 \ - || exit 2 - - Dieser Filter konvertiert eine GIF-Datei in eine portable - Anymap, diese in ein portables Graustufenbild, dieses wiederum in - eine portable Bitmap, die schließlich in ein - LaserJet/PCL-kompatibles Format umgewandelt wird. + + Direktes Drucken - /etc/printcap muss für einen Drucker, - der diesen Filter nutzen will, folgenden Eintrag enthalten: + Für den gelegentlichen Druck können die Dateien auch direkt, + ohne zusätzliche Einstellungen, an den Drucker gesendet werden. + Zum Beispiel kann die Datei sample.txt + direkt an einen USB-Drucker gesendet + werden: + + &prompt.root; cp sample.txt /dev/unlpt0 + + Ob Sie direkt auf einen Netzwerkdrucker drucken können, + hängt von den Fähigkeiten des Druckers ab. Die meisten + akzeptieren jedoch Druckaufträge auf Port 9100, die Sie mit + &man.nc.1; an den Drucker senden können. So drucken Sie die + gleiche Datei auf einem Drucker mit dem + DNS-Namen + netlaser: - # -# /etc/printcap des Rechners orchid -# -teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ - :lp=/dev/lpt0:sh:sd=/var/spool/lpd/teak:mx#0:\ - :if=/usr/local/libexec/hpif:\ - :vf=/usr/local/libexec/hpvf: - - Das folgende Skript ist ein Konvertierungsfilter, der - das Drucken von troff-Daten des groff-Textsatzsystems - auf dem &postscript;-Drucker bamboo - ermöglicht: + &prompt.root; nc netlaser 9100 < sample.txt + - #!/bin/sh -# -# pstf - Konvertiert groff's troff-Daten nach PS, dann wird gedruckt. -# Installiert unter: /usr/local/libexec/pstf -# -exec grops | /usr/local/libexec/lprps "$@" + + <acronym>LPD</acronym> (Line Printer Daemon) - Dieses Skript nutzt wiederum lprps, - um mit dem Drucker zu kommunizieren. Wäre der Drucker - an einem parallelen Port angeschlossen, würde das Skript - so aussehen: + Drucken im Hintergrund wird Spooling + genannt. Ein Spooler (Warteschlange) ermöglicht es dem Benutzer + die Programme auf dem Rechner fortzusetzen, ohne warten zu + müssen bis der Druckauftrag abgeschlossen ist. + + &os; enthält den Spooler namens &man.lpd.8;. Druckaufträge + werden mit &man.lpr.1; übermittelt. + + + Konfiguration + + Erstellen Sie ein Verzeichnis zur Speicherung der + Druckaufträge und setzen Sie die Berechtigungen auf diesem + Verzeichnis, damit der Inhalt der Druckaufträge nicht von + anderen Benutzern eingesehen werden kann: + + &prompt.root; mkdir -p /var/spool/lpd/lp +&prompt.root; chown daemon:daemon /var/spool/lpd/lp +&prompt.root; chmod 770 /var/spool/lpd/lp + + Drucker werden in /etc/printcap + angelegt. Ein Eintrag für einen Drucker enthält dessen Name, + Anschluss sowie weitere Einstellungen. Erstellen Sie + /etc/printcap mit folgendem + Inhalt: + + lp:\ + :lp=/dev/unlpt0:\ + :sh:\ + :mx#0:\ + :sd=/var/spool/lpd/lp:\ + :lf=/var/log/lpd-errs: + + + + Der Name des Druckers. &man.lpr.1; sendet + Druckaufträge an den Drucker lp, es sei + denn, ein anderer Drucker wird mit der Option + angegeben. Der Standarddrucker sollte + also lp genannt werden. + + + + Der Anschluss, über den der Drucker verbunden ist. + Ersetzen Sie diese Zeile mit dem entsprechenden, hier + aufgeführten Verbindungstyp. - #!/bin/sh -# -# pstf - Konvertiert groff's troff-Daten nach PS, danach wird gedruckt. -# Installiert unter: /usr/local/libexec/pstf -# -exec grops + + + + + Verbindungstyp + Gerätename in + /etc/printcap + + - Das ist alles. Um den Filter verwenden zu können, - müssen Sie ihn allerdings noch in - /etc/printcap aktivieren: + + + USB + :lp=/dev/unlpt0:\ - :tf=/usr/local/libexec/pstf: + Der USB-Drucker. Falls + Probleme auftauchen, verwenden Sie stattdessen + ulpt0, das den + USB-Anschluss nach jedem + Gebrauch zurücksetzt. + - Das nächste Skript ist ein FORTRAN-Textfilter - für jeden Drucker, der normalen Text direkt drucken - kann und der hier für den Drucker - teak installiert wird: + + Parallel + :lp=/dev/lpt0:\ + - #!/bin/sh -# -# hprf - FORTRAN-Textfilter für den Drucker LaserJet 3si: -# Installiert unter: /usr/local/libexec/hprf -# + + Netzwerk + Für einen Drucker, der das + LPD-Protokoll + unterstützt: + + :lp=:rm=network-printer-name:rp=raw:\ + + Für Drucker, die den Druck über Port 9001 + unterstützen: + + :lp=9100@network-printer-name:\ + + Ersetzen Sie für beide Typen + network-printer-name + durch den DNS-Namen des + Netzwerkdruckers. + -printf "\033&k2G" && fpr && printf "\033&l0H" && - exit 0 -exit 2 - - Zusätzlich benötigen wir wiederum einen Eintrag in - /etc/printcap, um diesen Filter für den - Drucker teak zu aktivieren: - - :rf=/usr/local/libexec/hprf: - - Das letzte Beispiel ist etwas komplexer. Es soll ein - DVI-Filter für den bereits erwähnten - LaserJet-Drucker teak installiert werden. - Der erste Teil ist einfach: Sie müssen den Pfad des - DVI-Filters in /etc/printcap eintragen: - - :df=/usr/local/libexec/hpdf: - - Nun kommt der schwierige Teil: Sie müssen den - Filter funktionsfähig machen. Dazu benötigen Sie - einen DVI-nach-LaserJet/PCL-Konverter. - Glücklicherweise enthält die &os; Ports-Sammlung mit print/dvi2xx ein solches Programm. Nach - der Installation des Pakets verfügen wir über das - Programm dvilj2p, das zur Konvertierung - von DVI-Daten in zu den Druckern LaserJet IIp, LaserJet III, - sowie LaserJet 2000 kompatible Codes benötigt wird. - - Durch den Einsatz von dvilj2p wird - der Filter hpdf relativ komplex, da - dvilj2p nicht von der Standardeingabe - lesen kann, sondern als Eingabe einen Dateinamen erwartet. - Zusätzlich muss der Dateiname auf .dvi - enden, daher ist die Verwendung von /dev/fd/0 als Standardeingabe - problematisch. Wir können diese Problem aber umgehen, indem - wir einen temporären Dateinamen symbolisch nach /dev/fd/0 linken. - Dadurch wird dvilj2p gezwungen, dennoch von der - Standardeingabe zu lesen. - - Das letzte Problem, das wir noch lösen müssen, - ist, dass wir /tmp nicht als - temporären Link verwenden können. Symbolische - Links gehören dem User sowie der Gruppe - bin. Der Filter läuft aber als - User daemon. Außerdem ist - /tmp durch ein Sticky-Bit - gesichert. Daher kann der Filter den Link zwar erzeugen, ein - Aufräumen ist aber nicht mehr möglich, weil sich - die Eigentümer des Filters und des temporären - Verzeichnisses unterscheiden. - - Daher legt der Filter den symbolischen Link im - Arbeitsverzeichnis an, das gleichzeitig als Spooling-Verzeichnis - dient (festgelegt durch die Aktivierung - der sd-Fähigkeit in - /etc/printcap). Das Arbeitsverzeichnis - ist ein idealer Ort für den Filter, insbesondere da dieses - (manchmal) sogar über mehr freien Speicherplatz als /tmp verfügt. + + Seriell + :lp=/dev/cuau0:br=9600:pa=none:\ - Mit diesen Informationen sind wir nun in der Lage, den - Filter zu entwickeln: + Diese Werte sind für einen typischen + seriellen Drucker geeignet. Die Baudrate + beträgt 9600 und es wird keine Parität + benutzt. + + + + + - #!/bin/sh -# -# hpdf - DVI-Daten auf einen HP/PCL-Drucker drucken -# Installiert unter: /usr/local/libexec/hpdf + + Unterdrückt das Drucken eines Deckblattes zu Beginn + des Druckauftrags. + -PATH=/usr/local/bin:$PATH; export PATH + + Die maximale Größe des Druckauftrags wird nicht + begrenzt. + -# -# Eine Funktion zum Aufräumen unserer temporären Dateien. -# Diese finden sich im Arbeitsverzeichnis, das wir auch als -# Spooling-Verzeichnis für unseren Drucker verwenden werden. -# -cleanup() { - rm -f hpdf$$.dvi -} + + Das Verzeichnis zur Speicherung der Druckdaten. Jeder + Drucker verwendet ein eigenes Verzeichnis. + -# -# Eine Funktion, um fatale Fehler zu behandeln. Dazu die Meldung -# ausgeben, danach ein exit 2. Dadurch weiß LPD, dass es -# den Auftrag nicht noch einmal drucken soll. -# -fatal() { - echo "$@" 1>&2 - cleanup - exit 2 -} + + Die Logdatei, in welche die Fehler des Druckers + geschrieben werden. + + -# -# Wenn ein Anwender den Auftrag entfernt, sendet LPD ein SIGINT, daher -# wollen wir SIGINT und einige andere Signale abfangen (trappen), um -# nach der Konvertierung aufräumen zu können. -# -trap cleanup 1 2 15 + Nachdem Sie /etc/printcap erstellt + haben, verwenden Sie &man.chkprintcap.8; um die Datei auf + Fehler zu testen: -# -# Bevor wir anfangen, räumen wir noch auf. Sicher ist sicher. -# -cleanup + &prompt.root; chkprintcap -# -# Die DVI-Eingabedatei auf die Standardeingabe linken (die zu druckende -# Datei). -# -ln -s /dev/fd/0 hpdf$$.dvi || fatal "Konnte Symlink nicht anlegen!" + Beheben Sie alle gemeldeten Fehler, bevor Sie + fortfahren. -# -# Umwandeln: LF = CR+LF -# -printf "\033&k2G" || fatal "Konnte Drucker nicht initialisieren!" + Aktivieren Sie &man.lpd.8; in + /etc/rc.conf: -# -# Konvertieren und drucken. Da der Rückgabewert von dvilj2p -# unzuverlässig ist, ignorieren wir ihn einfach. -# -dvilj2p -M1 -q -e- dfhp$$.dvi + lpd_enable="YES" -# -# Aufräumen und beenden. -# -cleanup -exit 0 - - - - Automatische Konvertierung: Eine Alternative zu - Konvertierungsfiltern - - Alle in diesem Abschnitt besprochenen Konvertierungsfilter sind - zwar sehr hilfreich, allerdings müssen Sie nach wie vor bei - jedem Aufruf von &man.lpr.1; angeben, welchen Filter sie verwenden - wollen, was mit der Zeit sicher nervend wird. Schlimmer ist - allerdings, dass die Auswahl eines unpassenden Filters dazu - führen kann, dass Sie Hunderte Seiten Papier ausdrucken. - - Statt also Konvertierungsfilter zu installieren, - könnten Sie den Textfilter (der ohnehin der - Standardfilter ist) verwenden, um den zu druckenden - Dateityp zu erkennen und anschließend den korrekten - Konvertierungsfilter auszuwählen. Um den Dateityp - zu bestimmen, können Sie beispielsweise - file verwenden. Leider ist es bei - einigen Dateitypen problematisch, diese zu - unterscheiden. Daher könnten Sie für diese Dateitypen - dennoch einen Konvertierungsfilter installieren. - - apsfilter - - - Drucken - Filter - apsfilter - - - Die &os; Ports-Sammlung enthält mit - apsfilter (print/apsfilter) einen Textfilter, der - diese automatische Konvertierung durchführen kann. Er ist - in der Lage, normalen Text, &postscript;, DVI und beinahe jede - Art von Datei zu erkennen, diese zu konvertieren und auf - Ihren Drucker auszugeben. - - + Starten Sie den Dienst: - - Ausgabefilter + &prompt.root; service lpd start + - LPD unterstützt noch eine - weitere Filterart, die sogenannten Ausgabefilter. Diese sind - – analog zu einem Textfilter –  - für den Druck von normalem Text ausgelegt, allerdings - verfügen sie im Vergleich zu diesen nur über - sehr eingeschränkte Fähigkeiten. Wenn Sie einen - Ausgabefilter (aber keinen Textfilter) verwenden, dann - - - - startet LPD nur einen - Ausgabefilter für den kompletten Druckauftrag, statt - für jede Datei des Auftrags einen eigenen Filter zu - starten. - - - - kümmert sich LPD nicht - darum, den Beginn oder das Ende einer Datei innerhalb des - Druckauftrages zu finden. - - - - übergibt LPD weder - den Benutzer- noch den Rechnernamen desjenigen, der den - Druckauftrag erteilt hat, an den Ausgabefilter, was - eine Verrechnung von Druckaufträgen unmöglich - macht. Ausgabefilter unterstützen insgesamt nur - zwei Argumente: - - - filter-name - -w width - -l length - - - width basiert auf der - pw-Fähigkeit, - length hingegen auf der - pl-Fähigkeit des gewählten - Druckers. - - - - Lassen Sie sich von dieser angeblichen Einfachheit eines - Ausgabefilters nicht täuschen. Ausgabefilter sind - beispielsweise nicht dazu in der Lage, - jede Datei eines Druckauftrages auf einer neuen Seite zu - drucken. Dazu benötigen Sie einen Textfilter (die im - Abschnitt Den Textfilter - installieren beschrieben werden). Außerdem - sind Ausgabefilter in Wirklichkeit - komplexer, da sie den gesendeten - Bytestrom nicht nur auf Sonderzeichen hin untersuchen - müssen, sondern auch die Übertragung von Signalen - für LPD übernehmen - müssen. - - Sie benötigen Ausgabefilter - aber dann, wenn Sie Deckblätter drucken wollen, da - dazu Escape-Sequenzen und Initialisierungsstrings - erforderlich sind. (Es ist allerdings nicht - möglich, den Druck dieser Deckblätter - zu verrechnen, da LPD - keine Benutzer- oder Rechnerinformationen an den Ausgabefilter - übergibt.) - - LPD kann für den gleichen - Drucker sowohl Ausgabefilter als auch Textfilter verwenden. - In solchen Fällen verwendet LPD - den Ausgabefilter nur für den Druck von Deckblättern - (die im Abschnitt Deckblätter - näher beschrieben werden). Nach dem Druck des Deckblattes - erwartet LPD, dass sich der - Ausgabefilter selbst beendet. Dazu werden - zwei Bytes an den Ausgabefilter gesendet: ASCII 031, gefolgt - von ASCII 001. Wenn ein Ausgabefilter diese zwei Bytes - (031, 001) empfängt, sendet er das Signal - SIGSTOP an sich selbst. Nachdem - LPD den Rest des Druckauftrages - erledigt hat, wird der Ausgabefilter erneut gestartet, indem - ein SIGCONT an den Ausgabefilter - gesendet wird. - - Haben Sie nur einen Ausgabefilter, aber - keinen Textfilter installiert, dann - verwendet LPD den Ausgabefilter auch - für den Druck von normalem Text. Wie bereits erwähnt, - werden dabei allerdings alle Dateien des Druckauftrags unmittelbar - hintereinander gedruckt, Seitenumbrüche oder ein - zusätzlicher Papiervorschub sind also nicht möglich. - Da dieses Verhalten von Ihnen wahrscheinlich - nicht gewünscht wird, werden Sie in - fast allen Fällen einen zusätzlichen Textfilter - benötigen. - - Der weiter oben beschriebene Textfilter - lpf kann auch als Ausgabefilter verwendet - werden. Wenn Sie nur einen funktionierenden Ausgabefilter - benötigen, aber nicht den dafür benötigten - Code (zur Zeichenerkennung und zum Senden von Signalen) - schreiben wollen, sollten Sie sich lpf - näher ansehen. Sie können lpf - auch in ein Shell-Skript einbinden, um von Ihrem Drucker - benötigte Initialisierungscodes zu verarbeiten. - + + Drucken mit &man.lpr.1; - - <command>lpf</command>: Ein Textfilter + Mit lpr werden Dokumente an den + Drucker geschickt. Die Datei können Sie auf der Kommandozeile + angeben, oder über eine Pipe an lpr + schicken. Die beiden folgenden Kommandos sind gleichwertig, + sie schicken den Inhalt von doc.txt an + den Standarddrucker: + + &prompt.user; lpr doc.txt +&prompt.user; cat doc.txt | lpr + + Drucker können auch mit ausgewählt + werden. Um auf einen Drucker namens + laser zu drucken: - Der Textfilter (Eingabefilter) - /usr/libexec/lpr/lpf wird bereits mit - &os; geliefert. Er erlaubt das Einrücken der - Ausgabe (über lpr -i), die - Übergabe von Zeichen-Literalen - (über lpr -l), das Anpassen - der Druckposition bei gelöschten Zeichen - (Backspaces) oder Tabulatoren, - sowie die Verrechnung gedruckter Seiten. Zusätzlich - kann dieser Textfilter auch als Ausgabefilter arbeiten. - - lpf ist für viele verschiedene - Druckumgebungen geeignet. Zwar ist dieser Textfilter nicht - in der Lage, Initialisierungssequenzen an einen Drucker - zu senden, dieses Problem kann allerdings durch das Schreiben - und Ausführen eines Shell-Skripts (das diese Funktion - übernimmt) und das anschließende Aufrufen von - lpf gelöst werden. - - Seiten verrechnen - - verrechnen - Druckernutzung - - - Damit Sie lpf für die Verrechnung - von Druckaufträgen einsetzen können, müssen Sie - die korrekten Werte für die pw- und - pl-Fähigkeiten in - /etc/printcap eintragen. - lpf verwendet diese Werte, um festzustellen, - wieviel Text auf eine Seite passt und wieviele Seiten im - Druckauftrag enthalten sind. Weitere Informationen zur - Verrechnung der Druckernutzung enthält der Abschnitt - Die Druckernutzung - verrechnen. - + &prompt.user; lpr -Plaser doc.txt - - Deckblätter + + Filter - Wenn Sie viele Benutzer mit verschiedenen - Druckern verwalten müssen, sollten Sie - Deckblätter als notwendiges Übel - akzeptieren. - - - Bannerseiten - Deckblätter - - - Deckblätter - - Deckblätter (manchmal auch als - Bannerseiten oder - burst pages bezeichnet) geben an, wem - die Ausgabe eines Druckauftrags gehört. Sie werden - normalerweise in großen fetten Buchstaben gedruckt, - manchmal sogar mit zusätzlicher Umrandung, damit man - sie leichter von den tatsächlichen Seiten eines - Druckauftrages unterscheiden kann. Der Nachteil von - Deckblättern ist allerdings, dass es sich dabei um - eine zusätzliche zu druckende Seite handelt, die in - der Regel bereits nach wenigen Minuten wieder im Papierkorb - landet. Da aber für jeden Druckauftrag nur ein einziges - Deckblatt gedruckt wird, ist der Papierverbrauch in den - meisten Fällen tolerierbar. - - Das LPD-System kann - Deckblätter automatisch erzeugen, wenn - Ihr Drucker normalen Text direkt drucken kann. Haben Sie - hingegen einen &postscript;-Drucker, benötigen Sie ein - externes Programm, um die Deckblätter zu generieren - (Lesen Sie dazu auch den Abschnitt Deckblätter - auf &postscript;-Druckern erzeugen.). - - - Deckblätter aktivieren - - Im Abschnitt Einfache - Drucker-Konfiguration haben wir die Ausgabe von - Deckblättern durch die die Angabe der Option - sh - (suppress header) in - /etc/printcap deaktiviert. Um die - Ausgabe von Deckblättern wieder zu aktivieren, - müssen Sie daher die sh-Fähigkeit - wieder entfernen. - - Das klingt zu einfach? Wo ist der Haken? - - Sie haben recht. Es ist möglich, - dass Sie einen Ausgabefilter verwenden müssen, um die - nötigen Initialisierungsstrings an den Drucker zu senden. - Das folgende Beispiel beschreibt einen Ausgabefilter für - PCL-kompatible Drucker von Hewlett Packard: + In den bisher gezeigten Beispielen wurde lediglich eine + Textdatei an den Drucker gesendet. Solange der Drucker den + Inhalt dieser Dateien versteht, wird die Ausgabe korrekt + gedruckt werden. + + Einige Drucker sind nicht in der Lage einfachen Text zu + drucken. Es kann sogar sein, das die Eingabedatei gar keinen + Text enthält. + + Mit Hilfe von Filtern können Dateien + übersetzt oder verarbeitet werden. Ein typischer + Anwendungsfall ist die Umwandlung der Eingabedaten in ein + Format, das der Drucker verstehen kann, wie bspw. &postscript; + oder PCL. Filter können auch verwendet + werden um zusätzliche Funktionen hinzuzufügen, wie bspw. + Seitenzahlen oder das Hervorheben von Quellcode, um die + Lesbarkeit zu verbessern. + + Die hier beschriebenen Filter werden + Eingabefilter oder auch + Textfilter genannt. Diese Filter + übersetzen die eingehende Datei in verschiedene Formen. + Werden Sie mit &man.su.1; zu root, bevor Sie die + Dateien erstellen. + + Filter werden in /etc/printcap mit + der Kennung if= festgelegt. Um + /usr/local/libexec/lf2crlf als Filter + einzusetzen, bearbeiten Sie /etc/printcap + wie folgt: + + lp:\ + :lp=/dev/unlpt0:\ + :sh:\ + :mx#0:\ + :sd=/var/spool/lpd/lp:\ + :if=/usr/local/libexec/lf2crlf:\ + :lf=/var/log/lpd-errs: + + + + if= identifiziert den + Eingangsfilter, der auf den eingehenden Text angewendet + werden soll. + + + + + Der Backslash am Ende der Zeilen zeigt an, das ein + Eintrag für einen Drucker wirklich nur eine Zeile ist, in + der die einzelnen Einträge durch einen Doppelpunkt getrennt + sind. Das Beispiel hätte man auch wie folgt schreiben + können: + + lp:lp=/dev/unlpt0:sh:mx#0:sd=/var/spool/lpd/lp:if=/usr/local/libexec/lf2crlf:lf=/var/log/lpd-errs: + + + + Den Treppeneffekt verhindern + + Typische Textdateien enthalten einen Zeilenvorschub am + Ende jeder Zeile. Diese Zeilen erzeugen auf dem Drucker + einen Treppeneffekt: + + A printed file looks + like the steps of a staircase + scattered by the wind + + Ein Filter kann Zeilenumbrüche in Wagenrückläufe und + Zeilenumbrüche konvertieren. Erstellen Sie + /usr/local/libexec/lf2crlf mit + folgendem Inhalt: #!/bin/sh -# -# hpof - Ausgabefilter für PCL-kompatible Drucker von Hewlett Packard -# Installiert unter: /usr/local/libexec/hpof - -printf "\033&k2G" || exit 2 -exec /usr/libexec/lpr/lpf - - Geben Sie den Pfad des Ausgabefilters über die - of-Fähigkeit an. Weitere Informationen - finden Sie im Abschnitt Ausgabefilter. - - Das nächste Beispiel beschreibt die Datei - /etc/printcap des bereits erwähnten - Druckers teak. Allerdings sind nun die - Ausgabe von Deckblättern sowie der vorhin beschriebene - Ausgabefilter enthalten: - - # -# /etc/printcap für den Rechner orchid -# -teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ - :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\ - :if=/usr/local/libexec/hpif:\ - :vf=/usr/local/libexec/hpvf:\ - :of=/usr/local/libexec/hpof: - - Wenn ein Anwender nun einen Druckauftrag an den Drucker - teak schickt, wird für jeden - Druckauftrag ein Deckblatt erstellt. Benötigt ein - Anwender keine Deckblätter, kann er die Ausgabe dieser - Seiten durch die Verwendung von lpr - -h unterdrücken. Weitere, für - die Ausgabe von Deckblättern interessante &man.lpr.1;-Optionen - finden Sie im Abschnitt Deckblattoptionen. - - - LPD verwendet ein - Form Feed, um das Deckblatt - abzuschließen. Wenn Ihr Drucker ein anderes Zeichen - verwendet, um eine Seite auszuwerfen, geben Sie dieses - über die ff-Fähigkeit in - /etc/printcap an. - - - - - Deckblätter kontrollieren - - Haben Sie die Ausgabe von Deckblättern aktiviert, - gibt LPD eine ganze Seite in - großen Buchstaben aus, die den Anwender, den - verwendeten Rechner sowie den Druckauftrag beschreiben. - Das folgende Beispiel ist ein Deckblatt für den - Druckauftrag outline, der von - kelly auf dem Rechner rose - erstellt wurde: - - k ll ll - k l l - k l l - k k eeee l l y y - k k e e l l y y - k k eeeeee l l y y - kk k e l l y y - k k e e l l y yy - k k eeee lll lll yyy y - y - y y - yyyy - - - ll - t l i - t l - oooo u u ttttt l ii n nnn eeee - o o u u t l i nn n e e - o o u u t l i n n eeeeee - o o u u t l i n n e - o o u uu t t l i n n e e - oooo uuu u tt lll iii n n eeee - - - - - - +CR=$'\r' +/usr/bin/sed -e "s/$/${CR}/g" + Setzen Sie die Berechtigungen und machen Sie die Datei + ausführbar: + &prompt.root; chmod 555 /usr/local/libexec/lf2crlf - r rrr oooo ssss eeee - rr r o o s s e e - r o o ss eeeeee - r o o ss e - r o o s s e e - r oooo ssss eeee + Passen Sie /etc/printcap an, so + dass der neue Filter verwendet wird: + :if=/usr/local/libexec/lf2crlf:\ - - - - - - Job: outline - Date: Sun Sep 17 11:04:58 1995 - - LPD fügt ein - Form Feed an diesen Text an, - damit der eigentliche Druckauftrag auf einer neuen Seite - gestartet wird (es sei denn, Sie haben die - sf-Fähigkeit (suppress - form feeds) des jeweiligen Druckers in - /etc/printcap aktiviert). - - Wenn Sie dies wüschen, kann - LPD auch nur ein kurzes - Deckblatt ausgeben. Dazu verwenden Sie die - Option sb - (short banner) - in /etc/printcap. Dadurch erhalten Sie - ein Deckblatt ähnlich dem folgenden: - - rose:kelly Job: outline Date: Sun Sep 17 11:07:51 1995 - - In der Voreinstellung druckt LPD - zuerst das Deckblatt und danach den eigentlichen Druckauftrag. - Um diese Reihenfolge umzukehren, geben Sie die Option - hl (header - last) in /etc/printcap - ans. + Drucken Sie nochmal die gleiche Datei, um den Filter zu + testen. - - Deckblätter verrechnen + + Mit <package>print/enscript</package> normalen Text + auf &postscript;-Druckern drucken - Wenn Sie die in LPD eingebaute - Funktion zur Erstellung von Deckblättern verwenden, - werden Sie auf folgendes Paradigma stoßen: - Deckblätter müssen kostenlos - sein. - - Warum ist das so? - - Weil der Ausgabefilter das einzige externe Programm ist, - das zum Zeitpunkt der Erstellung des Deckblatts eine - Verrechnung durchführen könnte. Da Ausgabefilter - aber weder über Benutzer- noch über - Rechnerinformationen verfügen, ist es nicht - möglich, einen Druckauftrag einem bestimmten Benutzer - zuzuordnen. Da ein Benutzer die Ausgabe von Deckblättern - über lpr -h - unterdrücken kann, ist es auch nicht möglich, die Vorgabe - verrechne eine zusätzliche Seite in den Text- - oder Konvertierungsfilter (die über die zur Verrechnung - nötigen Benutzer- und Rechnerinformationen verfügen) - aufzunehmen, weil Benutzer sonst für Deckblätter - bezahlen müssten, die sie nicht gedruckt haben. - - Es ist ebenfalls nicht ausreichend, - jeden Filter eigene Deckblätter erzeugen zu lassen (und - sie dadurch verrechnen zu können). Wollte ein Benutzer - durch ein lpr -h die Ausgabe - eines Deckblattes unterdrücken, würde dieses nun trotzdem - verrechnet werden, da LPD keine - Informationen über die Verwendung der Option - an einen Filter weitergibt. - - Welche Möglichkeiten habe ich nun? - - Sie können: - - - - Das Paradigma von LPD einfach - akzeptieren und die Deckblätter gratis abgeben. - - - - Eine alternatives Drucksystem wie - LPRngLPRng - installieren. Der Abschnitt Alternativen zum - Standard-Drucksystem beschreibt verschiedene - Drucksysteme, die LPD - ersetzen können. - - - - Schreiben Sie einen intelligenten - Ausgabefilter. Normalerweise kümmert sich ein - Ausgabefilter nur um die Initialisierung des Druckers oder - um eine einfache Zeichenkonvertierung. Außerdem - eignet er sich für die Ausgabe von Deckblättern - und normalem Text, wenn Sie keinen Text- oder Eingabefilter - installiert haben. Haben Sie allerdings einen Textfilter - installiert, verwendet LPD - Ausgabefilter nur für die Ausgabe von Deckblättern. - Ein Ausgabefilter kann den Text des von - LPD erzeugten Deckblattes - untersuchen, um festzustellen, welcher Benutzer und welcher - Rechner den Druckauftrag gestartet hat. Leider weiß - der Ausgabefilter auch mit dieser Methode nicht, welche - Datei er zur Verrechnung verwenden soll (da der Name dieser - Datei durch die af-Fähigkeit - übergeben wird). Wenn Sie eine - Standard-Verrechnungsdatei verwenden, können Sie diese - in den Ausgabefilter einbauen. Um den Text des Deckblattes - zu untersuchen, verwenden Sie die - sh-Fähigkeit - (short header) in - /etc/printcap. Falls Ihnen das zuviel - Aufwand ist, freuen sich Ihre Benutzer sicher darüber, - wenn Sie ihnen den kostenlosen Druck von Deckblättern - erlauben. - - - - - - Deckblätter auf &postscript;-Druckern ausgeben + GNU + Enscript wandelt Textdateien in + formatiertes &postscript; um, die dann auf + &postscript;-Druckern gedruckt werden können. Das Programm + fügt auch Seitenzahlen und Zeilenumbrüche hinzu und stellt + andere Funktionen bereit, um gedruckte Textdateien besser + lesbar zu machen. Abhängig vom Papierformat können Sie + entweder print/enscript-letter oder + print/enscript-a4 aus der Ports-Sammlung + installieren. - In der Regel erzeugt LPD ein Deckblatt - mit normalem Text, das für viele verschiedene Drucker geeignet - ist. Da &postscript;-Drucker normalen Text aber nicht drucken - können, ist die LPD-Funktion zur - Erstellung von Deckblättern auf diesen Drucker relativ - sinnlos. - - Es sei denn, jeder Text- und Konvertierungsfilter erzeugt - über den Benutzer- und Rechnernamen sein eigenes, für - den jeweiligen Drucker geeignetes Deckblatt. Das Problem - dieser Methode ist allerdings, dass ein Anwender auch dann ein - Deckblatt erhält, wenn er dies über - lpr -h verhindern wollte. - - Das folgende Skript benötigt drei Argumente (den - Loginnamen des Benutzers, den Rechnernamen und den Namen - des Druckauftrages), um daraus ein einfaches - &postscript;-Deckblatt zu erzeugen: + Erstellen Sie + /usr/local/libexec/enscript mit diesem + Inhalt: #!/bin/sh -# -# make-ps-header - ein PostScript-Deckblatt auf stdout ausgeben -# Installiert unter: /sr/local/libexec/make-ps-header -# - -# -# Die folgenden Werte sind PostScript-Einheiten (72 pro Zoll). -# Passen Sie diese Werte für A4 oder die von Ihnen verwendete -# Papiergröße an: -# -page_width=612 -page_height=792 -border=72 - -# -# Argumente prüfen -# -if [ $# -ne 3 ]; then - echo "Usage: `basename $0` <user> <host> <job>" 1>&2 - exit 1 -fi - -# -# Diese Werte in Variablen speichern, damit der PostScript-Code -# übersichtlicher wird. -# -user=$1 -host=$2 -job=$3 -date=`date` - -# -# Sende den PostScript-Code an stdout. -# -exec cat <<EOF -%!PS +/usr/local/bin/enscript -o - -% -% Sicherstellen, dass es keine unerwünschten Wechselwirkungen mit -% dem folgenden Druckauftrag gibt. -% -save - -% -% Ziehe eine fette Umrandung. -% -$border $border moveto -$page_width $border 2 mul sub 0 rlineto -0 $page_height $border 2 mul sub rlineto -currentscreen 3 -1 roll pop 100 3 1 roll setscreen -$border 2 mul $page_width sub 0 rlineto closepath -0.8 setgray 10 setlinewidth stroke 0 setgray - -% -% Zeige den Benutzernamen groß und fett an. -% -/Helvetica-Bold findfont 64 scalefont setfont -$page_width ($user) stringwidth pop sub 2 div $page_height 200 sub moveto -($user) show - -% -% Und nun zeige noch die Einzelheiten an. -% -/Helvetica findfont 14 scalefont setfont -/y 200 def -[ (Job:) (Host:) (Date:) ] { -200 y moveto show /y y 18 sub def } -forall - -/Helvetica-Bold findfont 14 scalefont setfont -/y 200 def -[ ($job) ($host) ($date) ] { - 270 y moveto show /y y 18 sub def -} forall - -% -% Das wars. -% -restore -showpage -EOF - - Nun kann jeder Konvertierungs- oder Textfilter dieses - Skript aufrufen, um zuerst das Deckblatt zu erzeugen und - danach den Druckauftrag zu drucken. Das nächste - Beispiel enthält den bereits beschriebenen - DVI-Konvertierungsfilter, der hier um die Funktion zur - Erzeugung eines Deckblatts erweitert wurde: + Setzen Sie die Berechtigungen und machen Sie die Datei + ausführbar: - #!/bin/sh -# -# psdf - DVI-nach-PostScript - Druckerfilter -# Installiert unter: /usr/local/libexec/psdf -# -# Wird von lpd aufgerufen, wenn der Benutzer lpr -d verwendet. -# + &prompt.root; chmod 555 /usr/local/libexec/enscript -orig_args="$@" + Bearbeiten Sie /etc/printcap um den + neuen Filter zu verwenden: -fail() { - echo "$@" 1>&2 - exit 2 -} + :if=/usr/local/libexec/enscript:\ -while getopts "x:y:n:h:" option; do - case $option in - x|y) ;; # Ignore - n) login=$OPTARG ;; - h) host=$OPTARG ;; - *) echo "LPD started `basename $0` wrong." 1>&2 - exit 2 - ;; - esac -done - -[ "$login" ] || fail "No login name" -[ "$host" ] || fail "No host name" - -( /usr/local/libexec/make-ps-header $login $host "DVI File" - /usr/local/bin/dvips -f ) | eval /usr/local/libexec/lprps $orig_args - - Beachten Sie, dass der Filter die Liste der Argumente - überprüft, um den Benutzer- und den Rechnernamen - zu ermitteln. Dieser Vorgang ist prinzipiell für alle - Filter identisch. Der Textfilter benötigt allerdings - etwas andere Argumente, die im Abschnitt Die Funktionsweise von - Filtern beschrieben werden. - - Wie bereits erwähnt, deaktiviert diese Methode - leider die suppress header page-Option - (also die Option ) von - lpr. Benutzer können danach den - Ausdruck eines Deckblattes nicht mehr verhindern, da der - angepasste Filter zu jedem Druckauftrag automatisch ein - Deckblatt erstellt. - - Damit ein Benutzer bei Bedarf den Ausdruck eines - Deckblatts dennoch unterbinden kann, müssen Sie - auch hier den im Abschnitt - Deckblätter verrechnen beschriebenen - Trick einsetzen: Schreiben Sie einen Ausgabefilter, der - das von LPD erzeugte Deckblatt untersucht und daraus - eine &postscript;-Version erzeugt. Wenn der Benutzer - den Druckauftrag mit lpr -h - verschickt, erzeugt LPD kein Deckblatt, - was in weiterer Folge auch für Ihren Ausgabefilter gilt. - Soll hingegen ein Deckblatt erzeugt werden, liest der - Ausgabefilter den von LPD - übergebenen Text und erzeugt daraus ein für - Ihren &postscript;-Drucker geeignetes Deckblatt. - - Haben Sie Ihren &postscript;-Drucker über eine - serielle Verbindung angeschlossen, können Sie auch - lprps verwenden. In diesem Paket ist - mit psof auch ein Ausgabefilter - enthalten, der die eben beschriebenen Funktionen - übernehmen kann. Beachten Sie aber, dass Sie mit - psof keine Deckblätter verrechnen - können. + Testen Sie den Filter, indem Sie eine einfache Textdatei + drucken. - - - Drucken über ein Netzwerk + + &postscript; auf <acronym>PCL</acronym>-Druckern + drucken - - Drucker - Netzwerk - + Viele Programme erzeugen &postscript;-Dokumente. + Allerdings können kostengünstige Drucker oft nur Textdateien + oder PCL verstehen. Dieser Filter + wandelt &postscript;-Dateien in PCL + um, bevor die Datei an den Drucker geschickt wird. + Installieren Sie den Ghostscript &postscript; Interpreter + print/ghostscript9 aus der + Ports-Sammlung. - Netzwerkdruck + Erstellen Sie + /usr/local/libexec/ps2pcl mit diesem + Inhalt: - &os; unterstützt das Drucken über ein Netzwerk, also den - Versand von Druckaufträgen an einen entfernten Drucker. Man - unterscheidet dabei zwei Möglichkeiten: - - - - Den Zugriff auf einen an einem entfernten Rechner - angeschlossenen Drucker. Sie konfigurieren dabei auf Ihrem - System einen Drucker, der über eine konventionelle - serielle oder parallele Verbindung an einem anderen Rechner - angeschlossen ist. Danach richten Sie - LPD auf dem entfernten System - so ein, dass andere Drucker über das Netzwerk auf - diesen Drucker zugreifen können. Der Abschnitt - Auf entfernten - Rechnern installierte Drucker beschreibt, wie Sie - dazu vorgehen müssen. - - - - Den Zugriff auf einen direkt an ein Netzwerk - angeschlossenen Drucker. Ein solcher Drucker verfügt - anstelle (oder zusätzlich zu) einer parallelen oder - seriellen Schnittstelle über eine Netzwerkschnittstelle. - Ein solcher Drucker kann sich auf zwei Arten verhalten: - - - - Er kann das LPD-Protokoll - direkt unterstützen und sogar Druckjobs von entfernten - Rechner verwalten. In diesem Fall verhält sich der - Drucker wie ein normaler Rechner, auf dem - LPD läuft. Lesen Sie den - Abschnitt - Auf entfernten Rechnern installierte Drucker, um - einen solchen Drucker einzurichten. - - - - Er könnte Verbindungen über ein - Netzwerk unterstützen. In diesem Fall - verbinden Sie den Drucker mit einem - Rechner Ihres Netzwerks, der danach für die - Verwaltung von Druckaufträgen sowie den - tatsächlichen Druck verantwortlich ist. Der - Abschnitt Drucker mit - direkter TCP-Schnittstelle enthält - Hinweise zur Installation derartiger Drucker. - - - - - - - Auf entfernten Rechnern installierte Drucker - - Das LPD-Drucksystem - unterstützt den Versand von Druckaufträgen an - andere Rechner, auf denen entweder - LPD läuft oder die zu - LPD kompatibel sind. Dadurch - können Sie einen Drucker auf einem Rechner installieren - und von anderen Rechnern des Netzwerks darauf zugreifen. - Außerdem werden Drucker mit direkter TCP-Schnittstelle - unterstützt, wenn diese das - LPD-Protokoll - unterstützen. - - Um diese Art des Druckens über ein Netzwerk zu - aktivieren, installieren Sie zuerst Ihren Drucker auf einem - Rechner Ihres Netzwerks, dem sogenannten - printer host. Die dazu nötigen - Schritte werden im Abschnitt - Einfache Drucker-Konfiguration beschrieben. Falls - Sie eine erweiterte Druckerkonfiguration benötigen, - sollten Sie auch den Abschnitt Erweiterte - Drucker-Konfiguration lesen. Danach testen Sie, ob - der Drucker alle von Ihnen aktivierten - LPD-Fähigkeiten - unterstützt. Stellen Sie auch sicher, dass Ihr - lokales System berechtigt ist, den - LPD-Dienst auf dem - entfernten System zu nutzen (lesen - Sie dazu den Abschnitt - Druckaufträge auf entfernten Druckern - beschränken). - - - Drucker - Netzwerk - - - Netzwerkdrucker - - Wenn Sie einen Drucker mit einer zu - LPD kompatiblen - Netzwerkschnittstelle verwenden, handelt es sich beim - printer host um den Drucker selbst, - und der Druckername ist der von Ihnen - für diesen Drucker vorgegebene Name. Lesen Sie die - Dokumentation Ihres Druckers und/oder der Netzwerkschnittstelle - Ihres Druckers, um dies zu klären. + #!/bin/sh +/usr/local/bin/gs -dSAFER -dNOPAUSE -dBATCH -q -sDEVICE=ljet4 -sOutputFile=- - - - Wenn Sie einen Hewlett Packard Laserjet-Drucker - verwenden, sorgt der Druckername text - für eine automatische LF-zu-CRLF-Konvertierung. In - diesem Fall wird das hpif-Skript - nicht benötigt. - + Setzen Sie die Berechtigungen und machen Sie die Datei + ausführbar: - Danach müssen Sie auf jedem Rechner, der auf diesen - Drucker zugreifen soll, einen entsprechenden Eintrag in - deren /etc/printcap aufnehmen. Dazu - werden folgende Informationen benötigt: - - - - Der Name des Eintrags. Entspricht in der Regel dem - Eintrag auf dem printer host. - - - - Lassen Sie den Eintrag für die - lp-Fähigkeit leer, schreiben Sie - also :lp=:. - - - - Erzeugen Sie ein Spooling-Verzeichnis und geben Sie - dessen Pfad über die - sd-Fähigkeit an. - LPD speichert Ihre - Druckaufträge in diesem Verzeichnis, bevor sie an den - Drucker geschickt werden. - - - - Geben Sie den Namen des printer - hosts über die - rm-Fähigkeit an. - - - - Geben Sie den Namen des Druckers (auf dem - printer host) über die - rp-Fähigkeit an. - - - - Das ist alles. Sie benötigen weder - Konvertierungsfilter, noch Seitengrößen oder - sonstige Angaben in Ihrer lokalen - /etc/printcap. - - Dazu ein Beispiel. Der Rechner rose - verfügt über zwei Drucker, bamboo - und rattan. Wir wollen nun allen Benutzern - des Rechners orchid erlauben, diese Drucker - zu verwenden. Es folgt nun wieder die bereits aus dem Abschnitt - - Deckblätter verwenden bekannte - /etc/printcap für den Rechner - orchid. Diese enthielt bereits einen Eintrag - für den Drucker teak. Zusätzlich - tragen wir nun die zwei Drucker des Rechners - rose ein: - - # -# /etc/printcap für den Rechner orchid - mit zusätzlichen -# Einträgen für die (entfernten) Drucker auf dem Rechner rose -# + &prompt.root; chmod 555 /usr/local/libexec/ps2pcl -# -# teak ist ein lokaler Drucker und direkt mit orchid verbunden: -# -teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ - :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\ - :if=/usr/local/libexec/ifhp:\ - :vf=/usr/local/libexec/vfhp:\ - :of=/usr/local/libexec/ofhp: + Die &postscript;-Eingabe wird von dem Skript erst in + PCL umgewandelt, bevor es an den Drucker + geschickt wird. -# -# rattan ist mit rose verbunden, Druckaufträge für rattan gehen daher -# an den Rechner rose: -# -rattan|line|diablo|lp|Diablo 630 Line Printer:\ - :lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan: + Bearbeiten Sie /etc/printcap um den + neuen Filter zu verwenden: -# -# bamboo ist ebenfalls mit rose verbunden: -# -bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ - :lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo: + :if=/usr/local/libexec/ps2pcl:\ - Nun müssen wir nur noch die Spooling-Verzeichnisse - auf dem Rechner orchid erzeugen: + Testen Sie den Filter mit einem kleinen + &postscript;-Programm. - &prompt.root; mkdir -p /var/spool/lpd/rattan /var/spool/lpd/bamboo -&prompt.root; chmod 770 /var/spool/lpd/rattan /var/spool/lpd/bamboo -&prompt.root; chown daemon:daemon /var/spool/lpd/rattan /var/spool/lpd/bamboo - - Damit können Benutzer des Rechners - orchid die Drucker rattan - und bamboo verwenden. Ein Benutzer gibt - auf orchid beispielsweise ein: - - &prompt.user; lpr -P bamboo -d sushi-review.dvi - - Die Anwendung LPD auf dem Rechner - orchid kopiert daraufhin den Druckauftrag in das - Spooling-Verzeichnis /var/spool/lpd/bamboo und stellt fest, - dass es sich um einen DVI-Auftrag handelt. Sobald - rose über genug freien Platz im - bamboo-Spooling-Verzeichnis verfügt, - würden die beiden LPD die Datei auf - den Rechner rose transferieren. Diese Datei - verbleibt danach in der Druckerwarteschlange des Rechners - rose, bis der Ausdruck der Datei abgeschlossen ist. - Vor dem Ausdruck würde die Datei noch von DVI nach &postscript; - konvertiert werden, da es sich bei bamboo um einen - an den Rechner rose angeschlossenen - &postscript;-Drucker handelt. + &prompt.user; printf "%%\!PS \n /Helvetica findfont 18 scalefont setfont \ +72 432 moveto (PostScript printing successful.) show showpage \004" | lpr - - Drucker mit direkter TCP-Schnittstelle + + Intelligente Filter - Wenn Sie eine Netzwerkkarte für Ihren Drucker kaufen, - können Sie zwei verschiedene Versionen wählen: - Eine Version, die ein Drucksystem emuliert (die teure Version), - oder eine Version, die sich verhält, als wäre der - Drucker an eine serielle oder parallele Schnittstelle - angeschlossen (die billige Version). Dieser Abschnitt - beschreibt die billige Variante. Bevorzugen Sie die teure - Variante, sollten Sie den Abschnitt Auf entfernten - Rechnern installierte Drucker nochmals lesen. - - Das Format der Datei /etc/printcap - erlaubt es Ihnen, anzugeben, welche serielle oder parallele - Schnittstelle verwendet werden soll und (falls Sie eine - serielle Schnittstelle verwenden) welche Parameter (Baudrate, - Flußkontrolle, Behandlung von Tabulatoren, Konvertierung - von neuen Zeilen und andere mehr) Sie verwenden wollen. Es - gibt allerdings keine Möglichkeit, eine Verbindung zu - einem Drucker zu definieren, der einen TCP/IP- oder einem - anderem Netzwerkport auf Druckaufträge hin abfragt. - - Um Daten an einen Netzwerkdrucker zu schicken, müssen - Sie daher ein Kommunikationsprogramm entwickeln, das von - Text- und Konvertierungsfiltern aufgerufen werden kann. Dazu - ein Beispiel. Das Skript netprint - übernimmt alle Daten von der Standardeingabe und schickt - sie an einen Netzwerkdrucker. netprint - erwartet zwei Argumente: Als erstes Argument wird der Hostname - des Druckers und als zweites Argument der Port, über den - die Verbindung erfolgen soll, übergeben. Dabei handelt - sich allerdings um eine Ein-Wege-Kommunikation (von &os; zum - Drucker). Viele Netzwerkdrucker unterstützen aber auch - eine Zwei-Wege-Kommunikation, deren Vorteile (Abfrage des - Druckerstatus, die Verrechnung von Druckaufträgen und - andere mehr) Sie vielleicht nutzen wollen. - - #!/usr/bin/perl -# -# netprint - Textfilter für einen Netzwerkdrucker -# Installiert unter: /usr/local/libexec/netprint -# -$#ARGV eq 1 || die "Usage: $0 <printer-hostname> <port-number>"; - -$printer_host = $ARGV[0]; -$printer_port = $ARGV[1]; - -require 'sys/socket.ph'; - -($ignore, $ignore, $protocol) = getprotobyname('tcp'); -($ignore, $ignore, $ignore, $ignore, $address) - = gethostbyname($printer_host); - -$sockaddr = pack('S n a4 x8', &AF_INET, $printer_port, $address); - -socket(PRINTER, &PF_INET, &SOCK_STREAM, $protocol) - || die "Can't create TCP/IP stream socket: $!"; -connect(PRINTER, $sockaddr) || die "Can't contact $printer_host: $!"; -while (<STDIN>) { print PRINTER; } -exit 0; - - Dieses Skript kann für verschiedene Filter - eingesetzt werden. Das folgende Beispiel verwendet den - an ein Netzwerk angeschlossenen Zeilendrucker Diablo 750-N. - Dieser Drucker empfängt zu druckende Daten auf dem - Port 5100. Der Hostname des Druckers lautet - scrivener. - Daher sieht der Textfilter für diesen Drucker wie folgt - aus: + Ein Filter kann sehr nützlich sein, wenn er die + Eingabe erkennt und sie automatisch in ein für den Drucker + verständliches Format umwandelt. Die ersten beiden Zeichen + in einer &postscript;-Datei sind in der Regel + %!. Ein Filter ist in der Lage diese + beiden Zeichen zu erkennen. &postscript;-Dateien können + unverändert an einen &postscript;-Drucker geschickt werden. + Textdateien können, wie eben gezeigt, mit + Enscript in &postscript; + umgewandelt werden. Erstellen Sie + /usr/local/libexec/psif mit diesem + Inhalt: #!/bin/sh # -# diablo-if-net - Textfilter für den Diablo-Drucker `scrivener'. -# Drucker lauscht auf Port 5100. -# Installiert unter: /usr/local/libexec/diablo-if-net -# -exec /usr/libexec/lpr/lpf "$@" | /usr/local/libexec/netprint scrivener 5100 - - - - - Den Druckerzugriff beschränken - - - Drucker - den Zugriff beschränken - - - Dieser Abschnitt beschreibt, wie Sie den Druckerzugriff - beschränken können. Das - LPD-Drucksystem erlaubt Ihnen die - Kontrolle darüber, wer lokal oder über ein Netzwerk - auf einen Drucker zugreifen darf, ob mehrere Kopien erstellt - werden dürfen und wie groß Druckaufträge und - Druckerwarteschlangen werden dürfen. - - - Den Ausdruck von mehreren Kopien verhindern - - Das LPD-System macht es dem - einzelnen Benutzer einfach, mehrere Kopien einer Datei zu - drucken. So werden mit lpr -#5 - beispielsweise fünf Kopien jeder Datei des Druckauftrags - erstellt. Ob dies gut oder schlecht ist, müssen Sie - selbst entscheiden. - - Wenn Sie der Meinung sind, dass multiple Kopien eine - unnötige Beanspruchung Ihres Druckers darstellen, - sollten Sie die -Opion von &man.lpr.1; - deaktivieren, indem Sie die - sc-Fähigkeit in Ihre - /etc/printcap aufnehmen. Verwendet ein - Benutzer dennoch die Option , erhält - er daraufhin folgende Meldung: - - lpr: multiple copies are not allowed - - Wenn Sie den Zugriff auf einen entfernten Drucker - (wie in Abschnitt Auf entfernten - Rechnern installierte Drucker beschrieben) konfiguriert - haben, müssen Sie die sc-Fähigkeit - auch auf den entfernten Rechnern, die auf Ihren Drucker - zugreifen dürfen, in /etc/printcap - eintragen, damit Benutzer diese Vorgabe nicht durch den Wechsel - auf einen anderen Rechner umgehen können. - - Dazu ein Beispiel. Es handelt sich dabei um die Datei - /etc/printcap auf dem Rechner - rose. Der Drucker rattan - soll multiple Kopien zulassen, auf dem Laserdrucker - bamboo sollen multiple Kopien hingegen - nicht erlaubt sein, daher müssen wir für diesen - Drucker die sc-Fähigkeit - aktivieren: - - # -# /etc/printcap für den Rechner rose - multiple Kopien auf bamboo verbieten -# -rattan|line|diablo|lp|Diablo 630 Line Printer:\ - :sh:sd=/var/spool/lpd/rattan:\ - :lp=/dev/lpt0:\ - :if=/usr/local/libexec/if-simple: - -bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ - :sh:sd=/var/spool/lpd/bamboo:sc:\ - :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:rw:\ - :if=/usr/local/libexec/psif:\ - :df=/usr/local/libexec/psdf: - - Außerdem müssen wir noch die - sc-Fähigkeit in der Datei - /etc/printcap des Rechners - orchid aktivieren. Parallel dazu untersagen - wir das Erstellen von multiplen Kopien auf dem Drucker - teak: - - # -# /etc/printcap für den Rechner orchid - lokal machen wir keine multiplen Kopien -# Lokaler Drucker teak oder entfernter Drucker bamboo: -teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ - :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:sc:\ - :if=/usr/local/libexec/ifhp:\ - :vf=/usr/local/libexec/vfhp:\ - :of=/usr/local/libexec/ofhp: - -rattan|line|diablo|lp|Diablo 630 Line Printer:\ - :lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan: - -bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ - :lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:sc: - - Durch die Verwendung der - sc-Fähigkeit ist zwar die Verwendung - von lpr -# nicht mehr - möglich, ein Benutzer kann aber weiterhin &man.lpr.1; mehrmals - hintereinander aufrufen oder eine Datei mehrfach in den gleichen - Druckauftrag aufnehmen: - - &prompt.user; lpr forsale.sign forsale.sign forsale.sign forsale.sign forsale.sign - - Auch dieser Mißbrauch Ihres Druckers kann verhindert - werden, falls Sie dies wünschen. Diese Maßnahmen - werden in diesem Abschnitt allerdings nicht behandelt. - - - - Den Zugriff auf bestimmte Drucker beschränken - - Sie können angeben, wer auf welchem Drucker drucken - darf, wenn Sie den Gruppenmechanismus von &unix; in Kombination - mit der rg-Fähigkeit von - /etc/printcap einsetzen. Weisen Sie dazu - alle Benutzer, die auf einen Drucker zugreifen dürfen, - einer gemeinsamen Gruppe zu und geben Sie diese Gruppe - über die rg-Fähigkeit an. - - Wenn Benutzer, die dieser Gruppe nicht angehören (dies - gilt auch für root), werden diese durch - die Meldung begrüsst, wenn Sie diesen Drucker verwenden - wollen. - - lpr: Not a member of the restricted group - - Analog zur sc-Fähigkeit - (suppress multiple copies) müssen - Sie die rg-Fähigkeit auch auf allen - entfernten Rechnern aktivieren, die auf Ihren Drucker - zugreifen dürfen (lesen Sie dazu auch den Abschnitt - Auf entfernten - Rechnern installierte Drucker). - - Wollen wir beispielsweise allen Benutzern die Verwendung - des Druckers rattan, aber nur Mitgliedern - der Gruppe artists die Verwendung des - Druckers bamboo erlauben, passen wir die - bereits bekannte /etc/printcap des - Rechners rose entsprechend an: - - # -# /etc/printcap des Rechners rose - Zugriffsbeschränkung für bamboo -# -rattan|line|diablo|lp|Diablo 630 Line Printer:\ - :sh:sd=/var/spool/lpd/rattan:\ - :lp=/dev/lpt0:\ - :if=/usr/local/libexec/if-simple: - -bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ - :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:\ - :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:rw:\ - :if=/usr/local/libexec/psif:\ - :df=/usr/local/libexec/psdf: - - Die Datei /etc/printcap des Rechners - orchid wird dadurch nicht beeinflusst. Jeder - Benutzer des Rechners orchid kann also - weiterhin den Drucker bamboo verwenden. - - - Für jeden Drucker kann nur eine einzige - priviligierte Gruppe erstellt werden. - - - - - Die Größe von Druckaufträgen kontrollieren - - Druckaufträge - - Wenn Sie viele Benutzer haben, die Ihre Drucker verwenden - dürfen, werden Sie wahrscheinlich eine Obergrenze für - Dateien angeben wollen, die Benutzer an Ihren Drucker senden - dürfen. Dies ist sinnvoll, weil Speicherplatz für - Spooling-Verzeichnisse nur begrenzt verfügbar ist und Sie stets - sicherstellen müssen, dass auch die Druckaufträge anderer - Benutzer verarbeitet werden können. - - - Druckauftrag - kontrollieren - - - LPD verwendet die - mx-Fähigkeit, um die maximal erlaubte - Größe von Dateien eines Druckauftrags anzugeben. - Dieser Wert wird in 1.024 Bytes großen - BUFSIZ-Blöcken angegeben. Setzen Sie - diesen Wert auf Null, gibt es keine - Größenbeschränkung. Existiert die - mx-Fähigkeit hingegen überhaupt - nicht, so gilt ein Limit von 1.000 Blöcken. - - - Diese Limits gelten nur für die Größe - von Dateien innerhalb eines - Druckauftrages, nicht aber für - die Gesamtgröße des Druckauftrags. - - - LPD lehnt eine Datei auch dann - nicht ab, wenn sie das Limit des Druckers überschreitet. - Vielmehr wird die Datei bis zum Erreichen des Limits in die - Warteschlange geladen, danach wird der Druck gestartet. Der - das Limit überschreitende Rest wird hingegen verworfen - und nicht gedruckt! - - Mit diesem Wissen können wir nun Limits für die - Drucker rattan und bamboo - definieren. Da &postscript;-Dateien der Gruppe - artists in der Regel sehr groß - sind, setzen wir ein Limit von fünf Megabytes. Für - den Druck von normalen Text (auf dem Drucker - rattan) setzen wir hingegen kein Limit: - - # -# /etc/printcap für den Rechner rose +# psif - Print PostScript or plain text on a PostScript printer # +IFS="" read -r first_line +first_two_chars=`expr "$first_line" : '\(..\)'` -# -# Kein Größenlimit: -# -rattan|line|diablo|lp|Diablo 630 Line Printer:\ - :sh:mx#0:sd=/var/spool/lpd/rattan:\ - :lp=/dev/lpt0:\ - :if=/usr/local/libexec/if-simple: - -# -# Ein Limit von 5 Megabyte: -# -bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ - :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\ - :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:rw:\ - :if=/usr/local/libexec/psif:\ - :df=/usr/local/libexec/psdf: - - Auch diese Limits gelten nur für lokale Benutzer. - Wenn Sie den Zugriff auf Ihren Drucker auch über ein - Netzwerk erlauben wollen, unterliegen die Benutzer dieser - Rechner diesen Limits nicht. Daher müssen Sie diese - Limits über die mx-Fähigkeit - auch in der /etc/printcap jedes - Rechners definieren, der Ihren Drucker verwenden darf. - Der Abschnitt - Auf entfernten Rechnern installierte Drucker - enthält weitere Informationen zum Drucken über - ein Netzwerk. - - Es gibt eine weitere Möglichkeit, um die - Größe von Druckaufträgen von entfernten - Rechnern zu beschränken. Lesen Sie dazu den Abschnitt - - Druckaufträge von entfernten Rechnern - beschränken. - - - - Druckaufträge von entfernten Rechnern - beschränken - - Das LPD-System bietet mehrere - Möglichkeiten, um Druckaufträge zu beschränken, - die auf entfernten Rechnern gestartet wurden: - - - - Rechner beschränken - - - Sie können festlegen, von welchen entfernten - Rechnern ein lokaler LPD - Druckaufträge annimmt, indem Sie die Dateien - /etc/hosts.equiv sowie - /etc/hosts.lpd entsprechend - anpassen. LPD - überprüft diese Dateien, um festzustellen, - ob ein Druckauftrag von einem Rechner stammt, der in - einer dieser Dateien aufgeführt ist. Ist dies - nicht der Fall, lehnt LPD - den Druckauftrag ab. - - Der Aufbau dieser Datei ist sehr einfach: Jede - Zeile enthält einen einzigen Rechnernamen. - Beachten Sie aber, dass - /etc/hosts.equiv auch vom - &man.ruserok.3;-Protokoll benötigt wird und - Änderungen dieser Datei auch Programme wie - &man.rsh.1; und &man.rcp.1; beeinflussen - können. - - Das folgende Beispiel beschreibt die Datei - /etc/hosts.lpd auf dem Rechner - rose: - - orchid -violet -madrigal.fishbaum.de - - Durch diese Vorgaben akzeptiert rose - nur noch Druckaufträge von den Rechnern - orchid, violet, - und madrigal.fishbaum.de. - Versucht ein anderer Rechner, auf den - LPD von - rose zuzugreifen, wird dieser - Druckauftrag abgelehnt werden. - - - - - Größenbeschränkungen - - - Sie können festlegen, wieviel Speicherplatz - auf dem Dateisystem, in dem das Spooling-Verzeichnis - liegt, mindestens frei sein muss. Dazu erzeugen Sie im - Spooling-Verzeichnis Ihres lokalen Druckers die Datei - minfree. In dieser Datei geben - Sie an, wieviele 512 Byte große - Blöcke auf Ihrer Platte frei sein müssen, - damit ein Druckauftrag von einem entfernten Rechner - akzeptiert wird. - - Durch diese Vorgabe können Sie sicherstellen, - dass Benutzer von entfernten Rechnern Ihr Dateisystem - nicht zumüllen. Außerdem - können Sie damit lokale Benutzer bevorzugen, da - diese auch dann noch Druckaufträge erteilen - dürfen, wenn der verfügbare Plattenplatz - unter das in der Datei minfree - definierte Limit gefallen ist. - - Legen wir nun die Datei minfree - für den Drucker bamboo an. Zuerst - untersuchen wir /etc/printcap, um - das Spooling-Verzeichnis für diesen Drucker zu - finden. Das folgende Beispiel zeigt den Eintrag - für den Drucker bamboo: - - bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ - :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\ - :lp=/dev/ttyu5:ms#-parenb cs8 clocal crtscts:rw:mx#5000:\ - :if=/usr/local/libexec/psif:\ - :df=/usr/local/libexec/psdf: - - Das Spooling-Verzeichnis wird über die - sd-Fähigkeit festgelegt. - Wir wollen, dass mindestens drei Megabyte - (also 6144 Blöcke) freier Plattenplatz - vorhanden sein müssen, damit - LPD einen Druckauftrag - von einem entfernten Rechner akzeptiert: - - &prompt.root; echo 6144 > /var/spool/lpd/bamboo/minfree - - - - - Benutzer beschränken - - - Sie können auch festlegen, welche entfernten - Benutzer Ihren lokalen Drucker verwenden dürfen, - indem Sie die rs-Fähigkeit in - /etc/printcap definieren. Wenn - für den Eintrag eines lokalen Druckers die - rs-Fähigkeit definiert ist, - akzeptiert LPD - Druckaufträge von entfernten Rechnern nur dann, - wenn der Benutzer, der den - Druckauftrag gesendet hat, auch über ein - gleichnamiges Benutzerkonto auf dem lokalen Rechner - verfügt. Ist dies nicht der Fall, lehnt - LPD den Druckauftrag ab. - - Diese Fähigkeit ist besonders in Umgebungen - nützlich, in denen beispielsweise verschiedene - Abteilungen ein gemeinsames Netzwerk teilen, wobei - einige Benutzer zu mehreren Abteilungen gehören. - Haben diese Benutzer auch ein Benutzerkonto auf Ihrem - System, so können sie Ihren Drucker auch von - ihrer eigenen Abteilung aus nutzen. Wollen Sie zwar - den Zugriff auf Ihren Drucker, nicht - aber den Zugriff auf Ihre übrigen - Ressourcen erlauben, können Sie für diese - Benutzer einen sogenannten Token-Account - ohne Heimatverzeichnis und mit einer nutzlosen Shell - wie /usr/bin/false erstellen. - - - - - - - - Die Druckernutzung verrechnen +case "$first_two_chars" in +%!) + # %! : PostScript job, print it. + echo "$first_line" && cat && exit 0 + exit 2 + ;; +*) + # otherwise, format with enscript + ( echo "$first_line"; cat ) | /usr/local/bin/enscript -o - && exit 0 + exit 2 + ;; +esac - - Drucker - verrechnen - - - Sie wollen die Nutzung Ihrer Drucker kostenpflichtig machen? - Warum auch nicht? Papier und Tinte kosten Geld. Auch eine - regelmäßige Wartung muss bezahlt werden. Nachdem Sie - einen Preis festgelegt haben, den Sie für jede - gedruckte Seite verrechnen wollen, stellt sich die Frage, wie Sie - die Verrechnung der Druckkosten technisch umsetzen - können. - - Die schlechte Nachricht ist, dass das - LPD-System dabei wenig hilfreich ist. - Die Verrechnung von Druckaufträgen hängt stark vom - verwendeten Drucker, den zu druckenden Dateiformaten und - Ihren Anforderungen an die Verrechnung - der Druckernutzung ab. - - Um die Verrechnung der Druckernutzung zu implementieren, - müssen Sie sowohl Ihre Textfilter (um den Druck von - normalem Text abzurechnen) als auch Ihre Konvertierungsfilter - (um den Druck sonstiger Formate abzurechnen) entsprechend - anpassen, damit diese die Zahl der gedruckten Seiten - ermitteln können. Leider können Sie dazu nicht - einen einfachen Ausgabefilter verwenden, da diese die - Verrechnung von Druckaufträgen nicht unterstützen. - Weitere Informationen zu den verschiedenen Filterarten finden - Sie im Abschnitt Filter. + Setzen Sie die Berechtigungen und machen Sie die Datei + ausführbar: - Prinzipiell gibt es zwei Möglichkeiten, wie Sie diese - Verrechnung umsetzen können: + &prompt.root; chmod 555 /usr/local/libexec/psif - - - Die periodische Verrechnung wird - häufiger verwendet, da sie einfacher zu implementieren - ist. Wenn ein Druckauftrag ausgeführt wird, - schreibt der Filter den Benutzer, den verwendeten Rechner - sowie die Anzahl der gedruckten Seiten in eine - Verrechnungsdatei. Nach einem zu definierenden Zeitraum - werden diese Dateien ausgewertet, die Gesamtzahl der - von einem Benutzer gedruckten Seiten bestimmt und dem - jeweiligen Benutzer verrechnet. Danach werden alle - Protokolldateien zurückgesetzt, und die Protokollierung - beginnt von Neuem. - + Bearbeiten Sie /etc/printcap um den + neuen Filter zu verwenden: - - Die unmittelbare Verrechnung wird - nur selten eingesetzt, das sie schwieriger zu implementieren - ist. Bei dieser Methode wird der Druckauftrag verrechnet, - sobald der Drucker verwendet wird. Dadurch können Sie - beispielsweise verhindern, dass ein Benutzer seine erlaubte - Druckquote überschreitet. - Zusätzlich können Sie es Ihren Benutzern erlauben, - deren Druckquote abzufragen oder anzupassen. Allerdings - benötigen Sie eine Datenbank, um Benutzer und deren - Quoten verwalten zu können. - - + :if=/usr/local/libexec/psif:\ - Das LPD-Drucksystem - unterstützt beide Methoden. Allerdings müssen Sie - die benötigen Filter sowie den zur Verrechnung nötigen - Code selbst bereitstellen. Der Vorteil dabei ist allerdings, - dass Sie in der Wahl Ihrer Verrechnungsmethode äußerst - flexibel sind. So können Sie sich etwa für die - periodische oder die unmittelbare Verrechnung entscheiden. Sie - können festlegen, welche Informationen Sie erfassen wollen: - Benutzernamen, Rechnernamen, die Art der Druckaufträge, - die Anzahl der gedruckten Seiten, den Papierverbrauch, den - Zeitaufwand für die Bearbeitung eines Druckauftrages und - viele andere mehr. Dazu müssen Sie Ihre Filter entsprechend - anpassen, damit diese Informationen erfassst und gespeichert - werden. - - - Kurzanleitung für die Implementierung der - Druckerverrechnung - - &os; bietet Ihnen zwei Programme, um eine periodische - Verrechnung rasch zu implementieren. Dabei handelt es sich - um den im Abschnitt lpf: Ein Textfilter - behandelten Textfilter sowie um &man.pac.8;, ein Programm, - mit dem Sie Einträge aus Verrechnungsdateien auslesen - und aufsummieren können. - - Wie bereits im Abschnitt Filter erwähnt, - startet LPD den Text- oder - Konvertierungsfilter mit dem Namen der Verrechnungsdatei als - Argument. Dadurch weiß der Filter, in welche Datei - er einen Verrechnungseintrag schreiben soll. Der Name dieser - Datei wird über die af-Fähigkeit - in /etc/printcap festgelegt. Falls die - Datei nicht über einen absoluten Pfad angegeben wird, - handelt es sich um einen Pfad relativ zum - Spooling-Verzeichnis. - - LPD startet - lpf mit den Argumenten page width - und page length, die über die - pw- und pl-Fähigkeit - definiert werden. Das Kommando lpf verwendet - diese Argumente danach, um den Papierverbrauch zu bestimmen. Nachdem - die Datei an den Drucker geschickt wurde, wird ein - Verrechnungseintrag in die Verrechnungsdatei geschrieben. Ein - solcher Eintrag sieht dabei ähnlich den folgenden aus: - - 2.00 rose:andy -3.00 rose:kelly -3.00 orchid:mary -5.00 orchid:mary -2.00 orchid:zhang - - Sie sollten für jeden Drucker eine eigene - Verrechnungsdatei verwenden, da lpf - die Verrechnungsdatei nicht sperren kann. Sind also - gleichzeitig zwei lpf-Instanzen aktiv, - kann es dazu kommen, dass Ihre Verrechnungsdatei zerstört - wird, wenn beide Instanzen gleichzeitig in die gleiche Datei - schreiben. Damit für jeden Drucker eine eigene - Verrechnungsdatei angelegt wird, fügen Sie den - Eintrag af=acct in - /etc/printcap ein. Dadurch wird für - jeden Drucker eine separate Verrechnungsdatei mit dem Namen - acct im Spooling-Verzeichnis des - jeweiligen Druckers erzeugt. - - Wenn Sie Ihre Daten erfasst haben und die entstandenen - Kosten Ihren Benutzern verrechnen wollen, starten Sie - &man.pac.8;. Dazu wechseln Sie in das Spooling-Verzeichnis - des auszuwertenden Druckers und geben pac - ein. Dadurch erhalten Sie eine Ausgabe ähnlich - der folgenden: - - Login pages/feet runs price -orchid:kelly 5.00 1 $ 0.10 -orchid:mary 31.00 3 $ 0.62 -orchid:zhang 9.00 1 $ 0.18 -rose:andy 2.00 1 $ 0.04 -rose:kelly 177.00 104 $ 3.54 -rose:mary 87.00 32 $ 1.74 -rose:root 26.00 12 $ 0.52 - -total 337.00 154 $ 6.74 - - Folgende Argumente können an &man.pac.8; - übergeben werden: - - - - - - - Gibt an, welcher Drucker - ausgewertet werden soll. Diese Option setzt voraus, - dass für die af-Fähigkeit - in /etc/printcap ein absoluter - Pfad angegeben wurde. - - - - - - - - Sortiert die Ausgabe nach den verursachten Kosten - anstelle einer alphabetischen Sortierung der - Benutzernamen. - - - - - - - - Ignoriert den Rechnernamen in Verrechnungsdateien. - Ist diese Option gesetzt, ist der Benutzer - smith auf dem Rechner - alpha mit dem Benutzer - smith auf dem Rechner - gamma identisch. Ist diese Option - nicht gesetzt, handelt es sich um unterschiedliche - Benutzer. - - - - - - - - Berechnet die entstandenen Kosten aus dem - Preis in Dollar pro Seite - statt aus dem über die - pc-Fähigkeit in - /etc/printcap definierten Preis. - In der Voreinstellung sind dies zwei Cent pro Seite. - Sie können aber auch einen eigenen - Preis in Form einer - Gleitkommazahl angeben. - - - - - - - - Die Sortierreihenfolge umkehren. - - - - - - - - Die Verrechnungsdatei in einer neuen Datei - aufsummieren und die originale Verrechnungsdatei - zurücksetzen. - - - - - name - - - - Verrechnungsinformationen nur für die - angegebenen Benutzernamen ausgeben. - - - - - In der Voreinstellung gibt &man.pac.8; aus, wieviele - Seiten von welchem Benutzer auf welchem Rechner gedruckt - wurden. Wenn Rechnernamen für Sie uninteressant sind - (weil sich Benutzer beispielsweise auf jedem Rechner - anmelden können), sollten Sie pac - -m verwenden, um die folgende Ausgabe zu - erhalten: - - Login pages/feet runs price -andy 2.00 1 $ 0.04 -kelly 182.00 105 $ 3.64 -mary 118.00 35 $ 2.36 -root 26.00 12 $ 0.52 -zhang 9.00 1 $ 0.18 - -total 337.00 154 $ 6.74 - - - Um den zu verrechnenden Betrag zu ermitteln, verwendet - &man.pac.8; die pc-Fähigkeit von - /etc/printcap (Voreinstellung 200, dieser - Wert entspricht 2 Cents). Geben Sie hier (als Hundertfaches - des tatsächlichen Wertes) den Preis pro Seite an, den - Sie verrechnen wollen. Sie können diesen Wert - überschreiben, wenn Sie &man.pac.8; mit der Option - ausführen. Beachten Sie dabei aber, - dass Sie in diesem Fall die Einheiten in Dollar angeben, und - nicht als Hundertfaches des tatsächlichen Cent-Betrages. - So steht - - &prompt.root; pac -p1.50 - - beispielsweise für einen Preis von einem Dollar und - fünfzig Cent pro Seite. - - Der Aufruf von pac -s - führt schließlich dazu, dass die aufsummierten - Informationen in einer eigenen Auswertedatei gespeichert werden. - Diese hat den gleichen Namen wie die Verrechnungsdatei, es wird - lediglich ein _sum an den Dateinamen - angehängt. Danach wird die Verrechnungsdatei - zurückgesetzt. Wenn Sie &man.pac.8; erneut aufrufen, - wird die Auswertedatei eingelesen, um die Startbeträge - zu erhalten, alle weiteren Informationen stammen danach - aus der normalen Verrechnungsdatei. + Um den Filter zu testen, drucken Sie &postscript;- und + einfache Textdateien. - - Wie kann man die Anzahl der gedruckten Seiten - ermitteln? - - Um die Druckernutzung auch nur annähernd genau - verrechnen zu können, müssen Sie ermitteln, wieviel - Papier ein Druckauftrag verbraucht. Die Bestimmung dieses - Wertes ist das zentrale Problem, das Sie lösen müssen, - wenn Sie Druckaufträge kostenpflichtig machen wollen. - - Normaler Text stellt in der Regel kein Problem dar: Sie - zählen dazu nur die Zeilen des Druckauftrages und - dividieren diesen Wert durch die Anzahl der Zeilen pro Seite, - die Ihr Drucker bietet. Allerdings dürfen Sie dabei - nicht vergessen, dass gelöschte Zeichen - (Backspaces) Zeilen - überschreiben. Außerdem können sich lange - logische Zeilen (im Druckauftrag) über mehrere - physikalische Zeilen (am Ausdruck) erstrecken. - - Der im Abschnitt lpf: - Ein Textfilter vorgestellte Textfilter - lpf berücksichtigt diese - Besonderheiten. Wenn Sie einen eigenen Textfilter für - die Verrechnung der Druckernutzung schreiben wollen, sollten - Sie sich daher den Quellcode von lpf - näher ansehen. - - Aber was ist mit anderen Dateiformaten? - - Für die DVI-nach-LaserJet- oder für die - DVI-nach-&postscript;-Konvertierung können Sie die - Protokolldateien von dvilj oder - dvips auslesen, um festzustellen, wieviele - Seiten konvertiert wurden. Die gleiche Methode könnte - auch mit anderen Dateitypen funktionieren. - - Alle diese Methoden haben aber das Problem, dass ein - Drucker möglicherweise nicht alle Seiten des - Druckauftrages drucken kann. So könnte es etwa zu einem - Papierstau kommen, der Toner könnte zu Ende gehen oder - es könnte ein Druckerdefekt - auftreten – trotzdem würden alle Seiten - des Druckauftrages verrechnet werden. - - Was kann man dagegen tun? - - Es gibt nur eine einzige sichere - Methode, um die Druckernutzung exakt - zu bestimmen. Besorgen Sie sich einen Drucker, der das - verbrauchte Papier protokolliert und verbinden Sie ihn - über eine serielle oder eine Netzwerkverbindung. - Nahezu alle &postscript;-Drucker, aber auch viele andere - Modelle und Druckertypen (beispielsweise Laserdrucker von - Imagen) sind dazu in der Lage. Passen Sie die Filter - für diese Drucker entsprechend an, damit diese - nach jedem Druckauftrag die Anzahl der gedruckten Seiten - ermitteln und verrechnen Sie Druckaufträge - ausschließlich über diesen - Wert. Danach müssen Sie sich um die Anzahl - der gedruckten Zeilen oder um mögliche Druckerprobleme - nie mehr kümmern. + + Weitere intelligente Filter - Sie können aber auch großzügig sein und alle - Ausdrucke kostenlos abgeben. + Einen Filter zu schreiben, der verschiedene Arten von + Eingaben erkennen und formatieren kann, ist eine große + Herausforderung. print/aspfilter aus der + Ports-Sammlung ist auch ein intelligenter Filter, der + Dutzende Dateitypen automatisch in eine für den Drucker + verständliche PDL umwandeln kann. + Weitere Details finden Sie auf . - - - - Drucker verwenden - - JohannKoisÜbersetzt von - - - - - - - Drucker - verwenden - - - Dieser Abschnitt beschreibt, wie Sie einen unter &os; - konfigurierten Drucker verwenden können. Die folgende - Liste bietet einen Überblick über wichtige - Anwenderbefehle: - - - - &man.lpr.1; - - - Einen Druckauftrag drucken - - - - - &man.lpq.1; - - - Eine Druckerwarteschlange prüfen - - - - - &man.lprm.1; - - - Einen Druckauftrag aus einer Warteschlange entfernen - (stornieren) - - - - - Zusätzlich existiert mit &man.lpc.8; ein Befehl zur - zur Steuerung von Druckern und Druckerwarteschlangen, der im - Abschnitt Drucker verwalten - näher beschrieben wird. - - Jeder der drei Befehle &man.lpr.1;, &man.lprm.1;, sowie - &man.lpq.1; akzeptiert die Option - , - mit der Sie den zu verwendenden Drucker (der dazu in - /etc/printcap definiert sein muss) - festlegen. Dadurch sind Sie in der Lage, Druckaufträge - zu erstellen, zu stornieren, oder den Status Ihrer - Druckaufträge zu überprüfen. Verwenden Sie die - Option nicht, wird der in der Umgebungsvariable - PRINTER definierte Drucker verwendet. Existiert - diese Variable nicht, greifen diese Befehle auf den Drucker - lp zurück. - - Im Folgenden steht der Begriff - Standarddrucker daher - für den über die Umgebungsvariable PRINTER - definierten Drucker, oder, falls diese Variable nicht existiert, - für den Drucker lp. - - - Druckaufträge erstellen - - Um eine Datei zu drucken, geben Sie folgenden Befehl ein: - - &prompt.user; lpr filename ... - - printing - - Dadurch wird jede angegebene Datei an den Standarddrucker - geschickt. Wenn Sie keine Datei angeben, liest &man.lpr.1; - die zu druckenden Daten von der Standardeingabe. Um - beispielsweise einige wichtige Systemdateien zu drucken, geben - Sie folgenden Befehl ein: - - &prompt.user; lpr /etc/host.conf /etc/hosts.equiv - - Um einen bestimmten Drucker auszuwählen, verwenden Sie: - - &prompt.user; lpr -P printer-name filename ... - - Das folgende Beispiel gibt eine ausführliche Liste aller - im Arbeitsverzeichnis enthaltenen Dateien auf den Drucker - rattan aus: - - &prompt.user; ls -l | lpr -P rattan - - Da keine Dateien an &man.lpr.1; übergeben werden, liest - lpr die zu druckenden Daten von der - Standardeingabe, in unserem Fall also die Ausgabe des Befehls - ls -l. - - &man.lpr.1; akzeptiert auch verschiedene Optionen zur - Formatierung und Konvertierung von Dateien, zur Erzeugung von - multiplen Ausdrucken und so weiter. Lesen Sie dazu den - Abschnitt Druckoptionen. - - - - Druckaufträge verwalten - Druckauftrag + + Mehrere Warteschlangen - Wenn Sie &man.lpr.1; verwenden, werden alle zu druckenden - Daten in ein Paket, den sogenannten Druckauftrag, - gepackt und an LPD geschickt. Jeder - Drucker verfügt über eine Druckerwarteschlange, in der Ihre - Druckaufträge gemeinsam mit denen anderer Benutzer verbleiben, bis - sie gedruckt werden können. Zuerst eintreffende - Druckaufträge werden dabei auch zuerst gedruckt. - - Um die Druckerwarteschlange des Standarddruckers anzuzeigen, - verwenden Sie &man.lpq.1;. Wollen Sie einen anderen Drucker - abfragen, müssen Sie die Option - verwenden. Der Befehl - - &prompt.user; lpq -P bamboo - - zeigt so die Druckerwarteschlange des Druckers - bamboo an. Dieser Befehl liefert eine - Ausgabe ähnlich der folgenden: - - bamboo is ready and printing -Rank Owner Job Files Total Size -active kelly 9 /etc/host.conf, /etc/hosts.equiv 88 bytes -2nd kelly 10 (standard input) 1635 bytes -3rd mary 11 ... 78519 bytes - - Derzeit enthält die Warteschlange von - bamboo drei Druckaufträge. Dem ersten - Auftrag, der vom Benutzer kelly erstellt wurde, wurde die - Auftragsnummer (job number) 9 zugewiesen. - Analog erhält jeder Druckerauftrag eine eindeutige Nummer - zugewiesen. Diese Nummern sind nur dann von Bedeutung, wenn - Sie einen Druckauftrag stornieren wollen. Der Abschnitt - Druckaufträge - stornieren beschreibt, wie Sie dazu vorgehen. - - Der Auftrag mit der Nummer 9 besteht aus zwei Dateien, - mehrere an &man.lpr.1; übergebene Dateien werden also als - Teil eines (gemeinsamen) Druckauftrags betrachtet. Dieser - Druckauftrag ist derzeit aktiv (beachten Sie den Status - active in der Spalte Rank), - wird also gerade gedruckt. Der zweite Auftrag besteht aus - Daten, die von der Standardeingabe an &man.lpr.1; - übergeben wurden. Der dritte Auftrag wurde vom Benutzer - mary erstellt. Er ist sehr viel - größer als die anderen Aufträge. Da der - Pfad der zu druckenden Datei aufgrund seiner Länge nicht - in der Spalte Files Platz hat, werden von - &man.lpq.1; nur drei Punkte angezeigt. - - Die erste Zeile der Ausgabe von &man.lpq.1; ist ebenfalls - sehr nützlich: Sie beschreibt den momentanen Druckerstatus - (oder zumindest, was LPD denkt, - dass der Drucker gerade macht). - - &man.lpq.1; unterstützt auch die Option - zur Erstellung einer ausführlicheren - Ausgabe. Die Eingabe von lpq -l - erzeugt für unser obiges Beispiel die folgende Ausgabe: - - waiting for bamboo to become ready (offline ?) -kelly: 1st [job 009rose] - /etc/host.conf 73 bytes - /etc/hosts.equiv 15 bytes - -kelly: 2nd [job 010rose] - (standard input) 1635 bytes - -mary: 3rd [job 011rose] - /home/orchid/mary/research/venus/alpha-regio/mapping 78519 bytes + Die Einträge in /etc/printcap sind + nichts anderes als Definitionen von Warteschlangen. Für jeden + Drucker können eine oder mehrere Warteschlangen definiert + werden. Kombiniert mit Filtern bieten mehrere Warteschlangen + eine bessere Kontrolle über die Druckaufträge. + + Als Beispiel dient ein vernetzter + &postscript;-Laserdrucker in einem Büro. Die meisten Benutzer + möchten einfache Textdateien drucken, aber ein paar + fortgeschrittene Anwender sollen in der Lage sein, + &postscript;-Dateien direkt zu drucken. Hierfür werden zwei + Einträge für den Drucker in /etc/printcap + erstellt: + + textprinter:\ + :lp=9100@officelaser:\ + :sh:\ + :mx#0:\ + :sd=/var/spool/lpd/textprinter:\ + :if=/usr/local/libexec/enscript:\ + :lf=/var/log/lpd-errs: + +psprinter:\ + :lp=9100@officelaser:\ + :sh:\ + :mx#0:\ + :sd=/var/spool/lpd/psprinter:\ + :lf=/var/log/lpd-errs: + + Dokumente, die zum textprinter + geschickt werden, werden wie im vorherigen Beispiel durch den + Filter /usr/local/libexec/enscript + formatiert. Fortgeschrittene Anwender können + &postscript;-Dateien direkt auf dem Drucker + psprinter drucken, wo keine + Filterung stattfindet. + + Mit mehreren Warteschlangen können Sie einen direkten + Zugriff auf alle Arten von Druckerfunktionen zur Verfügung + stellen. Ein Duplex-Drucker könnte zwei Warteschlangen + verwenden, eine für den gewöhnlichen Druck und eine für den + Duplexdruck. - - Druckaufträge stornieren - - Mit &man.lprm.1; können Sie einen Druckauftrag - stornieren. Häufig ist &man.lprm.1; auch noch in der - Lage, einen bereits aktiven Auftrag abzubrechen, allerdings - wird dabei in der Regel trotzdem ein Teil des Auftrages oder - der gesamte Auftrag gedruckt. - - Um einen Druckauftrag auf dem Standarddrucker zu - stornieren, müssen Sie zuerst die Auftragsnummer - über &man.lpq.1; ermitteln. Danach geben Sie - Folgendes ein: - - &prompt.user; lprm Job-Nummer - - Um einen Druckauftrag eines anderen Druckers zu stornieren, - benötigen Sie wiederum die Option . Der - folgende Befehl entfernt den Druckauftrag mit der Nummer 10 - aus der Warteschlange des Druckers - bamboo: - - &prompt.user; lprm -P bamboo 10 - - &man.lprm.1; unterstützt verschiedene Kurzbefehle: - - - - lprm - - - - Entfernt alle Druckaufträge (des Standarddruckers), - die von Ihnen erstellt wurden. - - - - - lprm user - - - Entfernt alle Druckaufträge (des Standarddruckers), - die vom Benutzer user erstellt - wurden. Der Superuser kann im Gegensatz zu einem normalen - Benutzer auch Aufträge anderer Benutzer entfernen. - - - - - lprm - - - Wenn Sie weder eine Auftragsnummer, einen Benutzernamen, - noch die Option angeben, entfernt - &man.lprm.1; den aktiven Druckauftrag auf dem - Standarddrucker, falls dieser Auftrag von Ihnen erstellt - wurde. Der Superuser kann hingegen jeden aktiven - Druckauftrag abbrechen. - - - - - Verwenden Sie zusätzlich die Option - zu den eben beschriebenen Kurzbefehlen, wenn Sie diese auf einen - anderen Drucker als den Standarddrucker anwenden wollen. So - entfernt der folgende Befehl beispielsweise alle - Druckaufträge des aktuellen Benutzers aus der - Druckerwarteschlange des Druckers - rattan: - - &prompt.user; lprm -P rattan - - - - Wenn Sie in einer Netzwerkumgebung arbeiten, erlaubt es - &man.lprm.1; Ihnen nur, Druckaufträge auf dem Rechner - zu stornieren, auf dem sie erstellt wurden. Dies gilt selbst - dann, wenn der gleiche Drucker auch auf anderen Rechnern des - Netzwerks verfügbar ist. Die folgende Befehlsfolge - veranschaulicht diesen Umstand: - - &prompt.user; lpr -P rattan myfile -&prompt.user; rlogin orchid -&prompt.user; lpq -P rattan -Rank Owner Job Files Total Size -active seeyan 12 ... 49123 bytes -2nd kelly 13 myfile 12 bytes -&prompt.user; lprm -P rattan 13 -rose: Permission denied -&prompt.user; logout -&prompt.user; lprm -P rattan 13 -dfA013rose dequeued -cfA013rose dequeued - - - + + Druckaufträge steuern und überwachen - - Abseits von normalem Text: Druckoptionen + Es stehen verschiedene Programme zur Verfügung um + Druckaufträge zu überwachen und den Druckbetrieb zu + steuern. + + + &man.lpq.1; + + &man.lpq.1; zeigt den Status der Druckaufträge des + Benutzers an. Druckaufträge anderer Benutzer werden nicht + angezeigt. + + Dieser Befehl zeigt die anstehenden Druckaufträge eines + Benutzers für einen Drucker an: + + &prompt.user; lpq -Plp +Rank Owner Job Files Total Size +1st jsmith 0 (standard input) 12792 bytes + + Der folgende Befehl zeigt die anstehenden Druckaufträge + eines Benutzers für alle Drucker an: + + &prompt.user; lpq -a +lp: +Rank Owner Job Files Total Size +1st jsmith 1 (standard input) 27320 bytes + +laser: +Rank Owner Job Files Total Size +1st jsmith 287 (standard input) 22443 bytes + + + + &man.lprm.1; + + Mit &man.lprm.1; können Druckaufträge gelöscht werden. + Normale Benutzer dürfen lediglich ihre eigenen Aufträge + löschen. root + kann hingegen jeden beliebigen Auftrag löschen. + + Dieser Befehl löscht alle anstehenden Druckaufträge + eines Druckers: + + &prompt.root; lprm -Plp - +dfA002smithy dequeued +cfA002smithy dequeued +dfA003smithy dequeued +cfA003smithy dequeued +dfA004smithy dequeued +cfA004smithy dequeued + + Mit dem folgenden Befehl löschen Sie einen bestimmten + Druckauftrag. Benutzen Sie &man.lpq.1;, um die Nummer des + Auftrags zu finden. + + &prompt.user; lpq +Rank Owner Job Files Total Size +1st jsmith 5 (standard input) 12188 bytes +&prompt.user; lprm -Plp 5 +dfA005smithy dequeued +cfA005smithy dequeued + + + + &man.lpc.8; + + Mit &man.lpc.8; kann der Druckerstatus überprüft und + verändert werden. lpc wird zusammen mit + einem Kommando und optional mit einem Druckernamen + aufgerufen. Mit all können alle Drucker + angesprochen werden, auf denen das Kommando ausgeführt + werden soll. Normale Benutzer können sich den Status mit + &man.lpc.8; ansehen. Nur root darf Kommandos + ausführen, die den Status des Druckers verändern. + + Dieser Befehl zeigt den Status von allen Druckern + an: + + &prompt.user; lpc status all +lp: + queuing is enabled + printing is enabled + 1 entry in spool area + printer idle +laser: + queuing is enabled + printing is enabled + 1 entry in spool area + waiting for laser to come up + + Der Drucker kann die Annahme neuer Druckaufträge + verweigern. Anschließend sollen Aufträge wieder akzeptiert + werden: + + &prompt.root; lpc stop lp +lp: + printing disabled +&prompt.root; lpc start lp +lp: + printing enabled + daemon started + + Starten Sie den Drucker nach einem Fehler neu: + + &prompt.root; lpc restart lp +lp: + no daemon to abort + printing enabled + daemon restarted + + Schalten Sie die Warteschlange aus und deaktivieren Sie + den Druck. Sie können den Benutzern gleichzeitig eine + Nachricht hinterlassen: + + &prompt.root; lpc down lp Ersatzteile werden am Montag ankommen +lp: + printer and queuing disabled + status message is now: Ersatzteile werden am Montag ankommen + + Reaktivieren Sie den Drucker: + + &prompt.root; lpc up lp +lp: + printing enabled + daemon started - &man.lpr.1; unterstützt verschiedene Optionen zur - Formatierung von Text, zur Konvertierung von Grafik- und - anderen Dateiformaten, zur Erzeugung von multiplen Kopien, - zur Verwaltung von Druckaufträgen und andere mehr. - Dieser Abschnitt beschreibt einige dieser Optionen. - - - Formatierungs- und Konvertierungsoptionen - - Die folgenden &man.lpr.1;-Optionen kontrollieren die - Formatierung von in einem Druckauftrag enthaltenen Dateien. - Verwenden Sie diese Optionen, wenn Ihr Druckauftrag keinen - normalen Text enthält, oder wenn Sie normalen Text - mit &man.pr.1; formatieren wollen. - - &tex; - - Der folgende Befehl druckt so beispielsweise eine - DVI-Datei (des &tex;-Satzsystems) namens - fish-report.dvi auf - dem Drucker bamboo: - - &prompt.user; lpr -P bamboo -d fish-report.dvi - - Diese Optionen gelten für jede Datei des - Druckauftrags, daher ist es nicht möglich beispielsweise - DVI- und ditroff-Dateien über den gleichen Druckauftrag - zu drucken. Sie müssen diese Dateien vielmehr über - getrennte Druckaufträge drucken, wobei Sie jeweils - geeignete Konvertierungsoptionen verwenden. - - - Alle Optionen mit Ausnahme von und - setzen einen installierten und - für den jeweiligen Drucker konfigurierten - Konvertierungsfilter voraus. So benötigt die Option - den DVI-Konvertierungsfilter. Diese - Filter werden im Abschnitt - Konvertierungsfilter ausführlich - beschrieben. - - - - - - - - Druckt cifplot-Dateien. - - - - - - - - Druckt DVI-Dateien. - - - - - - - - Druckt FORTRAN-Textdateien. - - - - - - - - Druckt Plot-Daten. - - - - - - - - Rückt die Ausgabe um - anzahl Spalten ein, lassen - Sie anzahl weg, wird der Text - um 8 Spalten eingerückt. Beachten Sie aber, dass - diese Option nicht mit allen Konvertierungsfiltern - funktioniert. - - - Zwischen der Option und der - der Zahl darf dabei kein Leerzeichen stehen. - - - - - - - - - Druckt Text inklusive vorhandener Steuerzeichen. - - - - - - - - Druckt ditroff-Dateien (geräteunabhängiges - troff). - - - - - -p - - - Formatiert normalen Text mit &man.pr.1;, bevor der - Ausdruck erfolgt. - - - - - - - - Verwende titel auf dem - &man.pr.1;-Deckblatt anstelle des Dateinamens. Diese - Option ist nur wirksam, wenn sie gemeinsam mit der - Option verwendet. - - - - - - - - Druckt troff-Daten. - - - - - - - - Druckt Rasterdaten. - - - - - Dazu ein Beispiel. Der folgende Befehl druckt eine - formatierte Version der Manualpage zu &man.ls.1; auf den - Standarddrucker: - - &prompt.user; zcat /usr/share/man/man1/ls.1.gz | troff -t -man | lpr -t - - &man.zcat.1; dekomprimiert den Quellcode der Manualpage - &man.ls.1; und reicht ihn an &man.troff.1; weiter, das - ihn formatiert und daraus GNU troff-Daten erzeugt. Diese - werden wiederum an &man.lpr.1; weitergereicht, das den - Druckauftrag schließlich an - LPD übergibt. Da die Option - von &man.lpr.1; verwendet wurde, - konvertiert das Drucksystem die GNU troff-Daten zuvor in - ein Format, das der Standarddrucker verstehen und ausgeben - kann. + Weitere Kommandos und Optionen finden Sie in + &man.lpc.8;. + - - Druckaufträge verwalten + + Gemeinsam genutzte Drucker - Die folgenden Optionen von &man.lpr.1; weisen - LPD an, den Druckauftrag auf - verschiedene Art und Weise zu behandeln: - - - - -# anzahl - - - Erzeugt anzahl Ausdrucke - jeder im Druckauftrag enthaltenen Datei anstelle eines - einzigen Exemplars. Diese Option kann von einem - Administrator deaktiviert werden, um die Beanspruchung - des Druckers zu verringern. Lesen Sie den Abschnitt - - Den Ausdruck von mehreren Kopien verhindern, - wenn Sie diese Funktion benötigen. - - Das folgende Beispiel druckt drei Kopien der Datei - parser.c, - gefolgt von drei Kopien von - parser.h auf - den Standarddrucker: - - &prompt.user; lpr -#3 parser.c parser.h - - - - - -m - - - Verschickt eine E-Mail, nachdem der Druckauftrag - beendet wurde. Verwenden Sie diese Option, sendet - LPD Ihnen eine E-Mail, wenn - es die Bearbeitung Ihres Druckauftrages abgeschlossen - hat. Diese Nachricht enthält Informationen - darüber, ob Ihr Auftrag erfolgreich erledigt wurde - oder ob ein Fehler auftrat. Ist dies der Fall, wird - meist noch angegeben, welcher Fehler auftrat. - - - - - -s - - - Kopiert die Dateien nicht in das - Spooling-Verzeichnis, sondern verlinkt stattdessen - symbolisch auf diese Dateien. - - Wenn Sie einen umfangreichen Druckauftrag erstellen, - werden Sie diese Option wahrscheinlich verwenden wollen. - Einerseits sparen Sie dadurch Speicherplatz im - Spooling-Verzeichnis (im schlimmsten Fall könnte - Ihr Druckauftrag ansonsten das Dateisystem des - Spooling-Verzeichnis zum Überlaufen bringen), - andererseits sparen Sie dadurch auch Zeit, weil - LPD die in Ihrem Druckauftrag - enthaltenen Dateien nicht in das Spooling-Verzeichnis - kopieren muss. - - Da LPD in diesem Fall die - Originaldateien verwendet, muss sichergestellt sein, - dass diese nicht verändert werden, bevor der - Ausdruck abgeschlossen ist. - - - Wenn Sie auf einen entfernten Drucker drucken, - muss LPD die Dateien dennoch - vom lokalen auf den entfernten Rechner kopieren. In - diesem Fall spart die Option - Speicherplatz lediglich im lokalen Spooling-Verzeichnis, - nicht aber im entfernten. Dennoch ist diese Option auch in - diesem Fall nützlich. - - - - - - -r - - - Löscht die im Druckauftrag enthaltenen Dateien, - nachdem sie in das Spooling-Verzeichnis kopiert oder - unter Verwendung der Option - gedruckt werden. Verwenden Sie diese Option daher - nur mit äußerster Vorsicht! - - - + In Unternehmen und Schulen werden Drucker häufig von + mehreren Benutzern genutzt. Es werden zusätzliche Funktionen + angeboten, um die gemeinsame Nutzung von Druckern zu + erleichtern. + + + Aliase + + Der Druckername wird in der ersten Zeile von + /etc/printcap festgelegt. Weitere + Namen oder Aliase können nach dem + Druckernamen hinzugefügt werden. Aliase werden vom Namen + durch das Pipe-Zeichen | getrennt: + + lp|repairsprinter|salesprinter:\ + + Anstelle des Druckernamens können Aliase verwendet + werden. Zum Beispiel können Mitarbeiter der + Verkaufsabteilung wie folgt auf ihren Drucker + drucken: + + &prompt.user; lpr -Psalesprinter sales-report.txt + + Mitarbeiter der Reparaturabteilung drucken auf dem + Drucker mit: + + &prompt.user; lpr -Prepairsprinter repairs-report.txt + + Alle Dokumente werden auf diesem einen Drucker gedruckt. + Wenn die Verkaufsabteilung größer wird und die Abteilung + einen eigenen Drucker benötigt, kann der Alias entfernt und + für einen neuen Drucker verwendet werden. Die Mitarbeiter + in beiden Abteilungen benutzen zum Drucken weiterhin die + gleichen Befehle, nur dass die Aufträge der + Verkaufsabteilung jetzt zum neuen Drucker gesendet + werden. - - Deckblatt-Optionen + + Deckblätter - Die folgenden &man.lpr.1;-Optionen passen den Text an, - der auf einem Deckblatt eines Druckauftrages ausgegeben - wird. Wird die Ausgabe von Deckblättern auf dem - Zieldrucker unterdrückt, bleiben diese Optionen - wirkungslos. Lesen Sie den Abschnitt Deckblätter, - wenn Sie diese Funktion benötigen. - - - - -C text - - - Ersetzt den Rechnernamen auf dem Deckblatt durch - text. Der Rechnername ist - dabei in der Regel der Name des Rechners, auf dem der - Druckauftrag erstellt wurde. - - - - - -J text - - - Ersetzt den Namen des Druckauftrages auf dem - Deckblatt durch text. Der - Name des Druckauftrages entspricht in der Regel dem - Namen der ersten Datei des Druckauftrages oder - stdin, wenn Sie die - Standardeingabe an den Drucker weiterleiten. - - - - - -h - - - Verhindert den Ausdruck von Deckblättern. - - - Ob diese Option funktioniert, hängt von der - Art und Weise ab, wie Deckblätter auf Ihrem - System erzeugt werden. Lesen Sie den Abschnitt - - Deckblätter für weitere - Informationen. - - - - + Bei einem viel benutzten Drucker kann es für die + Anwender schwierig sein, ihre Dokumente in einem großen + Papierstapel wiederzufinden. Um dieses Problem zu lösen, + können Deckblätter verwendet werden. + Dabei wird vor jedem Druckauftrag ein Deckblatt mit dem + Benutzernamen und dem Dokumentnamen gedruckt. Deckblätter + werden manchmal auch als + Banner oder + Trennseite bezeichnet. + + Das Aktivieren der Deckblätter hängt davon ab, ob der + Drucker direkt über ein USB, paralleles + oder serielles Kabel, oder über ein Netzwerk mit dem Rechner + verbunden ist. + + Wenn der Drucker direkt verbunden ist, aktivieren Sie + die Deckblätter durch Entfernen der Zeile + :sh:\ (Supress + Header) in + /etc/printcap. Diese Deckblätter + verwenden lediglich einen Zeilenvorschub für neue Zeilen. + Einige Drucker benötigen den Filter + /usr/share/examples/printing/hpif um + den Treppeneffekt zu vermeiden. Der Filter konfiguriert + PCL-Drucker so, dass sowohl + Zeilenumbrüche als auch Zeilenvorschübe verwendet werden, + wenn ein Zeilenvorschub empfangen wird. + + Für Netzwerkdrucker müssen Deckblätter auf dem Drucker + selbst konfiguriert werden, da Einträge für Deckblätter in + /etc/printcap ignoriert werden. Die + Einstellungen sind über einen Webbrowser zugänglich und + stehen in der Regel auf der Hauptseite der + Konfigurations-Webseite zur Verfügung. + - - Drucker verwalten - - Als Administrator Ihres Systems ist es Ihre Aufgabe, Drucker - zu installieren, zu konfigurieren und zu testen. Um mit Ihrem - Drucker zu kommunizieren, können Sie &man.lpc.8; verwenden. - Dadurch sind Sie in der Lage, - - - - Ihre Drucker zu starten und zu beenden. - + + Referenzen - - Die Warteschlangen Ihrer Drucker zu aktivieren und zu - deaktivieren. - + Beispieldateien: + /usr/share/examples/printing/. - - Die Reihenfolge der Druckaufträge zu - ändern. - - + Das 4.3BSD Line Printer Spooler + Manual, + /usr/share/doc/smm/07.lpd/paper.ascii.gz. - Am Anfang dieses Abschnitts steht die Erklärung - einiger Begriffe. Wenn ein Drucker beendet - ist, wird der Inhalt seiner Warteschlange nicht gedruckt. - Druckaufträge können zwar weiterhin erstellt werden, - diese verbleiben aber solange in der Warteschlange, bis der - Drucker wieder gestartet oder die - Warteschlange gelöscht wird. - - Ist eine Warteschlange deaktiviert, - kann (mit Ausnahme von root) kein Benutzer - mehr einen Druckauftrag erteilen. Ist die Warteschlange hingegen - aktiviert, können Druckaufträge - erteilt werden. Ist ein Drucker zwar - gestartet, die Warteschlange hingegen - deaktiviert, werden dennoch alle noch in - der Warteschlange vorhandenen Druckaufträge gedruckt. - - Im Allgemeinen benötigen Sie - root-Rechte, um &man.lpc.8; einsetzen zu - können. Als normaler Benutzer erlaubt es Ihnen &man.lpc.8; - lediglich, den Druckstatus abzufragen und einen hängenden - Drucker neu zu starten. - - Es folgt nun eine Zusammenfassung der Befehle von - &man.lpc.8;. Die meisten dieser Befehle benötigen das - Argument printer-name, mit dem Sie - angeben, auf welchen Drucker der Befehl angewendet werden soll. - Wenn Sie für printer-name - all angeben, wird der Befehl auf alle in - /etc/printcap definierten Drucker - angewendet. - - - - abort - printer-name - - - Bricht den aktuellen Druckauftrag ab und beendet den - Drucker. Solange die Warteschlange aktiviert ist, - können allerdings weiterhin Druckaufträge - erteilt werden. - - - - - clean - printer-name - - - Entfernt veraltete Dateien aus dem - Spooling-Verzeichnis des Druckers, da diese manchmal nicht - vollständig von LPD - entfernt werden können. Dies ist insbesondere dann - der Fall, wenn während der Bearbeitung des - Druckauftrages Fehler auftraten. Dieser Befehl sucht - dabei nach Dateien, die nicht in das Spooling-Verzeichnis - gehören und entfernt diese. - - - - - disable - printer-name - - - Deaktiviert die Annahme neuer Druckaufträge. - Solange der Drucker nicht beendet wird, werden weiterhin - alle in der Warteschlange enthaltenen Auftrage bearbeitet - und gedruckt. root kann jederzeit - Druckaufträge erstellen, selbst dann, wenn die - Druckerwarteschlange deaktiviert ist. - - Dieser Befehl ist besonders nützlich, wenn Sie - einen neuen Drucker testen müssen oder einen neuen - Filter installiert haben. Dazu deaktivieren Sie die - Warteschlange des Druckers und erstellen Ihre - Druckaufträge als root. - Andere Benutzer können erst dann einen Druckauftrag - erstellen, wenn Sie Ihre Tests abgeschlossen haben und - die Druckerwarteschlange mit enable - wieder reaktivieren. - - - - - down printer-name - nachricht - - - Beendet einen Drucker. Äquivalent zu - disable, gefolgt von - stop. Die von Ihnen definierte - nachricht wird als - Druckerstatus angezeigt, wenn ein Benutzer die - Warteschlange des Druckers mit &man.lpq.1; oder - mit lpc status abfragt. - - - - - enable - printer-name - - - Aktiviert die Warteschlange eines Druckers. Erteilte - Druckaufträge können zwar erteilt werden, diese - werden aber nur dann gedruckt, wenn der Drucker auch - gestartet ist. - - - - - help - command-name - - - Ausgaben von hilfreichen Informationen zu - command-name. Wird kein - command-name angegeben, wird - die Liste der verfügbaren Befehle ausgegeben. - - - - - restart - printer-name - - - Startet den Drucker. Normale Benutzer können diesen - Befehl verwenden, um einen hängenden - LPD zu reaktivieren, sie sind - allerdings nicht berechtigt, einen Drucker zu starten, der mit - stop oder down beendet - wurde. Dieser Befehl ist äquivalent zu - abort, gefolgt von - start. - - - - - start - printer-name - - - Startet den Drucker, um die in der Warteschlange - enthaltenen Aufträge zu drucken. - - - - - stop - printer-name - - - Beendet den Drucker. Der Drucker beendet den aktiven - Druckauftrag noch, danach wird kein weiterer in der - Warteschlange enthaltener Auftrag gedruckt. Obwohl der - Drucker beendet wurde, können weiterhin - Druckaufträge erteilt werden, solange die - Warteschlange nicht deaktiviert wurde. - - - - - topq printer-name - job-or-username - - - Sortiert die Druckerwarteschlange des Druckers - printer-name um, wobei - der Auftrag mit der angegebenen - Auftragsnummer, - oder Druckaufträge, die von - username erstellt wurden, an - den Beginn der Warteschlange gesetzt werden. Für - diesen Befehl kann die Option all - nicht als printer-name - verwendet werden. - - - - - up - printer-name - - - Startet einen Drucker. Das Gegenstück zu - down. Äquivalent zu - start, gefolgt von - enable. - - - - - &man.lpc.8; akzeptiert diese Befehle direkt auf der - Kommandozeile. Geben Sie keinen Befehl ein, wird - &man.lpc.8; im interaktiven Modus gestartet. In diesem - Modus können Sie solange Befehle eingeben, bis Sie - exit oder quit - eingeben. + Manualpages: &man.printcap.5;, &man.lpd.8;, &man.lpr.1;, + &man.lpc.8;, &man.lprm.1;, &man.lpq.1;. - - Alternativen zum - <application>LPD</application>-Drucksystem - - Wenn Sie dieses Kapitel bis hierher gelesen haben, wissen - Sie so gut wie alles über - LPD, das Standarddrucksystem von - &os;. Wahrscheinlich sind Ihnen bereits einige - Unzulänglichkeiten dieses Systems aufgefallen, und Sie - fragen sich nun, welche anderen Drucksysteme es für &os; - gibt. - - - - LPRng + + Andere Drucksysteme - - LPRng - - LPRng steht für - LPR: the Next Generation. Dabei handelt es - sich um eine von Grund auf neu geschriebene Version von PLP. - LPRng wurde von Patrick Powell und Justin Mason, dem - Hauptmaintainer von PLP, entwickelt. Die offizielle - Webseite von LPRng ist unter - http://www.lprng.org/ zu finden. - - - - CUPS - - - CUPSCUPS, - das Common UNIX Printing - System, stellt eine portable - Abstraktionsschicht dar, die das Drucken auf allen - &unix;-artigen Betriebsystemen ermöglicht. - CUPS wurde von Easy Software - entwickelt, um &unix;-Herstellern und -Benutzern eine - einheitliche Standardlösung für den Druck von Dokumenten - zu bieten. - - CUPS verwendet das Internet - Printing Protocol (IPP), um - Druckaufträge und -warteschlangen zu verwalten. - Zusätzlich werden die Protokolle - Line Printer Daemon - (LPD), - Server Message Block - (SMB), und - AppSocket/JetDirect), - unterstützt, wenn auch nur mit eingeschränkter - Funktionalität. Ausserdem ermöglicht - CUPS das Auffinden von - Netzwerkdruckern sowie die Verwendung auf - PostScript Printer - Description (PPD) - basierender Druckoptionen. - - Die offizielle Webseite von CUPS - ist http://www.cups.org/. - - - - - HPLIP - - - HPLIPHPLIP, - das HP &linux; Imaging and Printing System, ist eine von - HP entwickelte Sammlung von Programmen, die Unterstützung - für das drucken, scannen und faxen bei HP-Geräten bieten. - Diese Programm-Sammlung verwendet - CUPS als Grundlage für einige - seiner Druck-Eigenschaften. - - Die Hauptseite für HPLIP ist - http://hplipopensource.com/hplip-web/index.html. - - - - - - - Problembehandlung - - Wenn Sie eine einfache Testseite mit &man.lptest.1; gedruckt - haben, könnte eines der folgenden Probleme aufgetreten - sein: - - - - Der Druck hat erst mit einer gewissen Verzögerung - geklappt oder das bedruckte Blatt verblieb im Drucker, so als - wäre der Druckvorgang noch nicht abgeschlossen. - - - Die Testseite wurde zwar gedruckt, danach tat sich - allerdings nichts mehr. Vielleicht mussten Sie sogar eine - Taste Ihres Druckers, etwa PRINT REMAINING oder FORM FEED - drücken, damit der Druckvorgang fortgesetzt wurde. - - Wenn das der Fall ist, hat der Drucker vermutlich vor - dem eigentlichen Drucken gewartet, ob noch weitere Daten - für Ihren Druckauftrag gesendet werden. Um dieses - Problem zu beheben, können Sie den Textfilter - anweisen, ein Form Feed - -Zeichen (oder ein anderes entsprechendes Zeichen) an den - Drucker zu senden. Dies reicht für gewöhnlich - aus, um den Drucker zum Druck des noch im internen - Puffer verbliebenen Textes zu bewegen. Dadurch kann auch - sichergestellt werden, dass jeder neue Druckauftrag auf - einer neuen Seite beginnt. - - Der folgende Ersatz für das Shell-Skript - /usr/local/libexec/if-simple gibt - ein Form Feed aus, nachdem der Auftrag an - den Drucker geschickt wurde: - - #!/bin/sh -# -# if-simple - Einfacher Eingabefilter für lpd -# Installiert unter /usr/local/libexec/if-simple -# -# Kopiert stdin einfach nach stdout. Ignoriert alle Filter-Argumente. -# Schreibt ein Form-Feed-Zeichen (\f) nach dem Ende des Druckauftrages. - -/bin/cat && printf "\f" && exit 0 -exit 2 - - - - - Der Drucker erzeugte einen Treppeneffekt - (staircase effect). - - - Sie haben einen Ausdruck ähnlich dem folgenden - erhalten: - - !"#$%&'()*+,-./01234 - "#$%&'()*+,-./012345 - #$%&'()*+,-./0123456 - - Sie sind zu einem weiteren Opfer des - Treppeneffekts geworden. Verursacht - wird dieser Effekt durch unterschiedliche Ansichten - darüber, welche Zeichen den Beginn einer neuen Zeile - anzeigen sollen. &unix;-ähnliche Betriebssysteme - verwenden dafür ein einzelnes Zeichen: - ASCIIASCII-Code - 10, auch als Line Feed (LF) - bekannt. - &ms-dos;MS-DOS, - &os2;OS/2 und - andere Betriebssysteme verwenden stattdessen ein - Zeichenpaar: ASCII-Code 10 und - ASCII-Code 13, Carriage - Return (CR). Viele Drucker verwenden in - der Voreinstellung die Konvention von &ms-dos;, um - Zeilenumbrüche darzustellen. - - Wenn Sie unter &os; drucken, wird nur das Zeichen - Line Feed verwendet. Der - Drucker erkennt dieses Zeichen und erweitert den - Druckbereich um eine Zeile, verbleibt zum Druck des - nächsten Zeichens aber in derselben horizontalen - Position. Das ist der Grund für die Verwendung des - Carriage Return: Es setzt - die Position für das folgende Zeichen auf den linken - Rand der Seite. - - &os; erwartet von einem Drucker das folgende - Verhalten: - - - - - - Drucker empfängt CR - Drucker druckt CR - - - - Drucker empfängt LF - Drucker druckt CR + LF - - - - - - Es gibt mehrere Möglichkeiten, dieses Verhalten zu - erreichen: - - - - Verändern Sie die Konfiguration Ihres Druckers, - um die Interpretation dieser Zeichen zu verändern. - Lesen Sie Ihr Druckerhandbuch, wenn Sie nicht wissen, - was Sie dazu tun müssen. - - - Wenn Sie auf Ihrem Rechner neben &os; noch - andere Betriebssysteme verwenden, müssen Sie - Ihren Drucker möglicherweise anschließend - erneut konfigurieren, damit die - Zeichen CR und LF unter diesen Systemen korrekt - interpretiert werden. Ist dies bei Ihnen der Fall, - werden Sie wohl eine der folgenden Lösungen - bevorzugen. - - - - - Lassen Sie LF durch den Treiber der seriellen - Schnittstelle automatisch in CR+LF konvertieren. - Selbstverständlich funktioniert dies nur mit - Druckern, die an einer seriellen Schnittstelle - angeschlossen sind. Um diese Möglichkeit zu - nutzen, müssen Sie die - ms#-Fähigkeit verwenden und - in /etc/printcap den - onlcr-Modus für den Drucker - aktivieren. - - - - Senden Sie eine Escape-Sequenz - an den Drucker, damit das Zeichen LF zeitweilig anders - behandelt wird. Suchen Sie im Handbuch Ihres Druckers - nach den von Ihrem Drucker unterstützten - Escape-Sequenzen. Wenn Sie eine entsprechenden - Escape-Sequenz finden, müssen Sie den Textfilter so - anpassen, dass zuerst die Escape-Sequenz und - anschließend der Druckauftrag gesendet wird. - - PCL - - Es folgt nun ein Bespieltextfilter für einen - Drucker, der die Hewlett Packard PCL Escape-Sequenzen - versteht. Dieser Filter veranlasst den Drucker, - LF-Zeichen als Folgen von LF+CR aufzufassen. - Anschließend wird der Druckauftrag gesendet. Als - Abschluss wird ein Form - Feed gesendet, um die letzte Seite des - Druckauftrags auszuwerfen. Dieses Beispiel sollte mit - nahezu allen Druckern von Hewlett Packard - funktionieren. - - #!/bin/sh -# -# hpif - Einfacher Text-Eingabefilter für lpd für auf HP-PCL basierende Drucker -# Installiert unter /usr/local/libexec/hpif -# -# Kopiert stdin einfach nach stdout. Ignoriert alle Filterargumente. -# Weist den Drucker an LF als CR+LF zu interpretieren. -# Wirft die Seite nach dem Drucken aus. - -printf "\033&k2G" && cat && printf "\033&l0H" && exit 0 -exit 2 - - Das nächste Beispiel aus - /etc/printcap beschreibt den - Rechner orchid, an dessen Parallelport - ein Drucker angeschlossen ist. Es handelt sich dabei um - einen Hewlett Packard LaserJet 3Si, der den Namen - teak verwendet. Als Textfilter wird - das Skript aus dem letzten Beispiel verwendet: - - # -# /etc/printcap für den Rechner orchid -# -teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ - :lp=/dev/lpt0:sh:sd=/var/spool/lpd/teak:mx#0:\ - :if=/usr/local/libexec/hpif: - - - - - - - Alle Zeilen wurden in die gleiche Zeile gedruckt. - - - Der Drucker hat niemals eine neue Zeile begonnen. Alle - Zeilen des Textes wurden in eine einzige Zeile gedruckt. - - Dieses Problem ist das Gegenteil des - oben beschriebenen Treppeneffekts und kommt wesentlich - seltener vor. Die von &os; zum Abschluss einer Zeile - benutzten LF-Zeichen werden als CR-Zeichen interpretiert. - Dadurch wird die Druckposition zwar auf den linken Rand - der Seite, aber nicht um eine Zeile nach unten gesetzt. - - Konfigurieren Sie Ihren Drucker, um die folgende - Interpretation der Zeichen LF und CR zu erzwingen: - - - - - - Drucker empfängt - Drucker druckt - - - - - - CR - CR - - - - LF - CR + LF - - - - - - - - - Manche Zeichen wurden nicht gedruckt. - - - Der Drucker hat in jeder Zeile einige Zeichen nicht - gedruckt. Vielleicht ist das Problem auch während des - Druckens schlimmer geworden, und der Drucker hat immer mehr - Zeichen nicht gedruckt. - - Dieses Problem entsteht, weil der Drucker mit der - Geschwindigkeit, mit der die Daten über die serielle - Schnittstelle (an einer parallelen Schnittstelle sollte das - Problem nicht auftreten) eintreffen, nicht mithalten kann. - Es gibt zwei Möglichkeiten, dieses Problem zu - lösen: - - - - Wenn der Drucker die Flusskontrolle mit XON/XOFF - unterstützt, können Sie in der - ms#-Fähigkeit den - ixon-Modus aktivieren. - - - - Unterstützt der Drucker die Anfrage zum - Senden/Löschen des Sende-Hardware-Handshakes (allgemein - bekannt als RTS/CTS, dann sollten Sie den - crtscts-Modus in der - ms#-Fähigkeit aktivieren. - Stellen Sie aber sicher, dass das verwendete - Druckerkabel auch für die Hardware-Flusskontrolle - geeignet ist. - - - - - - - Es wurden nur wirre Zeichen gedruckt. + Neben dem in &os; enthaltenen &man.lpd.8; existieren noch + weitere Drucksysteme. Diese Systeme bieten zusätzliche + Funktionen und Unterstützung für andere Protokolle. + + + <acronym>CUPS</acronym> + (Common &unix; Printing System) + + CUPS ist ein beliebtes Drucksystem, das + für viele Betriebssysteme erhältlich ist. + CUPS unter &os; wird in einem separaten + Artikel beschrieben: + CUPS on &os;. + - - Anstelle des gewünschten Textes wurden nur - zufällige Zeichen gedruckt. + + HPLIP - Dieses Problem wird ebenfalls durch falsche - Konfigurationsparameter im Zusammenhang mit einem seriellen - Drucker verursacht. Kontrollieren Sie die bps-Rate in der - br-Fähigkeit und die - Paritätseinstellung - (Parity) in der - ms#-Fähigkeit. Überprüfen - Sie außerdem, ob der Drucker auch tatsächlich die - gleichen Einstellungen verwendet, die in - /etc/printcap definiert wurden. - - + Hewlett Packard stellt ein Drucksystem zur Verfügung, das + viele ihrer Drucker unterstützt. Der Port heißt + print/hplip. Die Webseite befindet sich + unter . + Der &os;-Port kümmert sich um alle Details während der + Installation. Informationen zur Konfiguration finden Sie + unter . + - - Der Drucker hat überhaupt nicht reagiert. + + LPRng - - Wenn gar nichts passiert ist, dann liegt das vermutlich - an &os; und nicht am Drucker. Aktivieren Sie die - Protokollierung (lf-Fähigkeit) - für den entsprechenden Drucker in der Datei - /etc/printcap. Es folgt nun ein - Beispieleintrag für den Drucker - rattan, bei dem die - lf-Fähigkeit aktiviert wurde. - - rattan|line|diablo|lp|Diablo 630 Line Printer:\ - :sh:sd=/var/spool/lpd/rattan:\ - :lp=/dev/lpt0:\ - :if=/usr/local/libexec/if-simple:\ - :lf=/var/log/rattan.log - - Versuchen Sie jetzt noch einmal zu drucken. - Überprüfen Sie die Protokolldatei (in unserem - Beispiel /var/log/rattan.log) auf - etwaige Fehlermeldungen. Versuchen Sie aufgrund dieser - Meldungen, das Problem zu beheben. - - Wenn Sie keine Protokolldatei festlegen, verwendet - LPD in der Voreinstellung /dev/console für die Ausgabe - der Fehlermeldungen. - - - + LPRng wurde als eine + verbesserte Alternative zu &man.lpd.8; entwickelt. Der Port + heißt sysutils/LPRng. Weitere + Informationen und Dokumentation finden Sie unter . +