Im Katalog suchen

Linux - Wegweiser zur Installation & Konfiguration, 3. Auflage

Online-Version

Copyright © 2000 by O'Reilly Verlag GmbH & Co.KG

Bitte denken Sie daran: Sie dürfen zwar die Online-Version ausdrucken, aber diesen Druck nicht fotokopieren oder verkaufen. Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

Wünschen Sie mehr Informationen zu der gedruckten Version des Buches Linux - Wegweiser zur Installation & Konfiguration oder wollen Sie es bestellen, dann klicken Sie bitte hier.


vorheriges Kapitel Inhaltsverzeichnis Stichwortverzeichnis nächstes Kapitel

Verwalten der Druckerdienste

Linux hat - verglichen mit den Drucksystemen, die die meisten PCs verwenden - ein ziemlich kompliziertes Drucksystem. Es ermöglicht es, daß mehrere Benutzer gleichzeitig Dokumente aus einer oder mehreren Applikationen an einen Drucker senden können, ohne warten zu müssen, bis die Verarbeitung des vorhergehenden Dokuments abgeschlossen ist. Das Drucksystem verarbeitet die Dateien so, daß sie auf verschiedenen Druckern, die auf verschiedene Art und Weise an den Rechner angeschlossen sind, immer korrekt ausgedruckt werden. Wenn Sie in einem Netzwerk drucken, können die Dateien auf einem Rechner erzeugt und auf einem Drucker, der an einen anderen Rechner angeschlossen ist, ausgedruckt werden.

Dieser ganze Vorgang passiert ohne viel Aufsehen, wenn Sie den »Drucken«-Knopf in einer Applikation drücken oder einen Befehl wie lpr verwenden, um ein Dokument zu drucken. Dieses Dokument wird jedoch nicht direkt an den Drucker geschickt, sondern zunächst in einem speziellen Verzeichnis abgelegt, welches das Spool-Verzeichnis des Druckers genannt wird. »Spool« bedeutet dabei, daß die Dokumente eines nach dem anderen aus dem Verzeichnis entnommen werden, wenn der Drucker gerade wieder frei ist. Jeder Drucker hat sein eigenes Spool-Verzeichnis.

Wenn Linux gestartet wird, lädt es einen Druckerdämon (einen unabhängig ablaufenden Prozeß) namens lpd. Dieser Prozeß überprüft regelmäßig jedes Spool-Verzeichnis, ob Dateien vorliegen, die gedruckt werden sollen. Wenn der Prozeß eine Datei findet, dupliziert er sich. Der neue lpd übernimmt die Kontrolle des Drucker-Spoolers, in dem die Datei stand, und reiht sie in die Druckerwarteschlange ein. Er schickt die Datei aber erst an den Drucker, wenn die letzte fertig gedruckt ist. Der Haupt-lpd startet einen lpd für jedes Spool-Verzeichnis auf dem System, wenn eine Datei dorthin gestellt wird, so daß es genauso viele lpd-Dämonen wie aktive Spool-Verzeichnisse zuzüglich des Haupt-lpds geben kann. Jeder untergeordnete lpd existiert so lange, bis sein Spool-Verzeichnis leer ist.

Während der Installation von Linux auf Ihrem System wurde der Drucker-Port Ihres Systems mit einer im /dev-Verzeichnis stehenden Gerätedatei assoziiert. Der nächste Schritt besteht darin, diesen Gerätenamen mit den bequemen Druckernamen zu verbinden, die Sie in Druckbefehlen verwenden. Dies ist die Aufgabe der Druckerbeschreibungsdatei /etc/printcap.

Eine andere Schlüsselaufgabe bei der Druckerverwaltung besteht darin, sicherzustellen, daß die benötigten Filter für lpd bereitstehen, wenn Dokumente zum Drukken formatiert werden müssen. Diese Filter werden ebenfalls in der Datei /etc/printcap angegeben. Wir werden noch einiges über sie in diesem Abschnitt zu sagen haben.

Es gibt einige Pakete zur Druckerunterstützung für Linux. Die meisten Distributionen verwenden ein von BSD abgeleitetes Paket, das den lpd-Dämon enthält. Diese Pakete beinhalten auch eine Reihe von Hilfsprogrammen und Manpage-Dokumenten, um das traditionelle Unix-Druckverfahren auch unter Linux zu unterstützen. Das BSD-Drucksystem hat nicht so viele administrative Werkzeuge oder Kontrollprogramme für die Benutzer wie zum Beispiel das Druckverwaltungssystem aus System V Unix (das den lpsched-Dämon verwendet), sondern jeder Benutzer kontrolliert die Druckdateien, die er oder sie zum Drucker schickt. Dieser Abschnitt dieses Kapitels beschreibt die Installation und Konfiguration des BSD-Druckpakets. (Die verschiedenen Werkzeuge zum Drucken werden im Abschnitt »Drucken« in Kapitel 9, Editoren, Textwerkzeuge, Grafiken und Drucken, beschrieben.)

Einige Linux-Distributionen enthalten ein Druckerverwaltungswerkzeug, das die Druckerinstallation und -verwaltung mit Hilfe einer graphischen Schnittstelle vereinfacht. Solche Werkzeuge werden vom Hersteller, der sie vertreibt, dokumentiert, und wenn Sie diese benutzen möchten, dann tun Sie das gern. Sie funktionieren durch Verwendung derselben Werkzeuge und Dateien, die wir hier beschreiben, bieten aber eine weniger genaue Kontrolle. Sie können Ihnen zu Beginn viele Schwierigkeiten ersparen, machen aber nicht immer alles richtig. Wenn Sie eine Installation, die mit diesen Werkzeugen gemacht wurde, korrigieren oder optimieren wollen, sollten Sie auch die in diesem Abschnitt beschriebenen Vorgänge durcharbeiten.

Die Druckerhardware

Bevor Sie das Drucksystem einrichten, sollten Sie sicherstellen, daß die Drucker online sind. Wenn Sie auch andere Betriebssysteme wie OS/2, Coherent oder DOS verwenden, können Sie die Hardware dort testen, um sicherzustellen, daß sie angeschlossen ist und korrekt funktioniert, bevor Sie Linux starten. Diese Kontrolle eliminiert unmittelbar eine der Hauptquellen von Sorgen und Am-Kopf-Kratzen. Entsprechend sollte das System im Netzwerk eingebunden sein und alle Protokolle funktionieren, bevor Sie das Drucken im Netzwerk einrichten.

buch.eps


Kapitel 9

Sie installieren die Druckdienste als Benutzer root, das heißt mit Superuser-Privilegien. Der Superuser ist außer dem lpd-Druckerdämon der einzige Benutzer, der direkt auf den Drucker schreiben kann, indem er Ausgaben auf die zugehörige Gerätedatei macht. Andere Benutzer können keine Ausgaben direkt an den Drucker schicken, sondern müssen die Druckwerkzeuge verwenden.

Bevor Sie richtig anfangen, können Sie Ihre Superuser-Rechte mißbrauchen, um zu überprüfen, ob die Gerätedateien auf Ihrem Rechner auch wirklich mit den eigentlichen Geräten verbunden sind. Schicken Sie einfach eine kurze ASCII-Datei per Ausgabeumleitung an den Drukker. Wenn Sie zum Beispiel einen Drucker an der ersten parallelen Schnittstelle haben, ist sein Gerätename vermutlich entweder /dev/lp0 oder /dev/lp1, je nach Ihrer Installation. Der folgende Befehl sendet den Inhalt einer Testdatei, /etc/lptest, an den Drucker und überprüft so, ob dieser korrekt installiert ist. (Wenn Sie einen der früheren PostScript-Drucker haben, müssen Sie statt dessen möglicherweise eine kleine PostScript-Testdatei schicken, um zu verhindern, daß der Drucker verwirrt wird.)

lptest > /dev/lp1

Das Hilfsprogramm lptest wurde entwickelt, um bequem überprüfen zu können, ob ein ASCII-Drucker oder ein Terminal korrekt arbeitet. Es sendet eine vorbereitete Datei aus 96 ASCII-Zeichen, die ein »schräges« Muster bilden, aus. Die Standardausgabe von lptest unter Linux sind 16.000 Zeichen, die in Zeilen mit je 79 Zeichen angeordnet sind. Dies ist genug, um mehr als eine Druckseite zu erzeugen. Wenn Sie lptest ohne Argumente aufrufen, gibt es seine Standardausgabe auf dem Bildschirm aus, so daß Sie sehen können, was an den Drukker geschickt werden soll. Der Befehl lptest erlaubt es Ihnen, die Breite der Ausgabe und die auszugebenden Spalten zu begrenzen. Um beispielsweise eine 35 Zeichen breite Ausgabe von sechs Zeilen zu bekommen, würden Sie folgendes eingeben:

lptest 35 6

Die Ausgabe sollte ziemlich genau so aussehen:

!"#$%&'()*+,-./0123456789:;<=>?@ABC "#$%&'()*+,-./0123456789:;<=>?@ABCD #$%&'()*+,-./0123456789:;<=>?@ABCDE $%&'()*+,-./0123456789:;<=>?@ABCDEF %&'()*+,-./0123456789:;<=>?@ABCDEFG &'()*+,-./0123456789:;<=>?@ABCDEFGH

Diese Ausgabe ist kurz genug, daß Sie beim Test des Druckers nicht zu viel Papier verbrauchen, und lang genug, um viele offensichtliche Druckprobleme feststellen zu können.

Natürlich können Sie auch den Befehl cat verwenden, um eine Datei an den Drukker zu schicken. Um eine PostScript-Testdatei an einen PostScript-Drucker zu schicken, geben Sie zum Beispiel ein:

cat testdatei.ps > /dev/lp1

Wenn Sie einen seriellen Drucker haben, versuchen Sie, die Ausgabe auf die serielle Schnittstelle umzuleiten, mit der der Drucker verbunden ist. Für die erste serielle Schnittstelle (COM1: in DOS) verwenden Sie:

lptest > /dev/ttys0

oder:

lptest > /dev/ttyS0

Stellen Sie sicher, daß Sie die richtige serielle Schnittstelle verwenden: Versuchen Sie nicht, die Ausgabe etwa an eine serielle Maus zu schicken. Wenn Ihr serieller Drucker an der zweiten seriellen Schnittstelle angeschlossen ist, wird er als /dev/ttyS1 oder /dev/ttys1 angesprochen.

Wenn Sie einen Seitendrucker haben, der Teilseiten zwischenspeichert, müssen Sie möglicherweise den Drucker offline schalten und den Seitenvorschub-Knopf drükken, damit die letzte Teilseite gedruckt wird. Vergessen Sie nicht, den Drucker hinterher wieder online zu schalten. (Wenn Sie einen solchen Drucker haben, der Teilseiten zwischenspeichert, ist es hilfreich, wenn Sie Linux ein Seitenvorschubzeichen an den Drucker schicken lassen. Dies kann entweder durch einen entsprechenden Eintrag in der Datei /etc/printcap geschehen oder dadurch, daß ein Filter das Zeichen an die zu druckende Datei anhängt. Wir werden diese Möglichkeiten später besprechen.)

Wenn Ihr kleiner Test in leiterartigem Text resultierte (also Text, der etwa so aussieht wie in dem folgenden Beispiel), der dann von der Seite verschwindet, hat der Drucker kein Zeilenende-Zeichen (CR) am Ende jeder Zeile eingefügt.

!"#$%&'()*+,-./0123456789:;<=>?@ABC "#$%&'()*+,-./0123456789:;<=>?@ABCD #$

Möglicherweise wissen Sie bereits, was hier passiert ist. Textdateien verwenden ein Newline-Zeichen (auch als Linefeed bekannt, ASCII) am Ende jeder Zeile. MS-DOS verwendet sowohl Newline- als auch Zeilenende-Zeichen. Ihr Drucker war also auf DOS-artige Zeilenenden eingestellt, die sowohl Newline- als auch Zeilenende-Zeichen am Ende jeder Zeile haben. Um eine Unix-Textdatei ausdrucken zu können, können Sie entweder einen Druckerfilter installieren, der für die richtige Umsetzung sorgt, oder den Drucker so einstellen, daß er bei Auftreten eines Newline-Zeichens »anständig« an den Zeilenanfang zurückkehrt. Oft muß dazu nur ein DIP-Schalter umgestellt werden. Schlagen Sie dazu in Ihrem Druckerhandbuch nach. (Und seien Sie vorsichtig mit der Veränderung von Druckereinstellungen, wenn Sie mehrere Betriebssysteme verwenden.)

Die leiterartigen Texte sind überhaupt kein Problem, wenn Sie einen Drucker haben, der eine Seitenbeschreibungssprache wie PostScript (die allgemein verwendete Seitenbeschreibungssprache von Adobe) verwendet, und wenn Sie reine Textdateien immer vor dem Ausdruck in diese Sprache übersetzen. Solche Filtervorgänge werden später in diesem Kapitel beschrieben.

Ressourcen sammeln

O.K., Sie haben Ihren Drucker aufgebaut und angeschlossen. Jetzt sollten Sie Ausdrucke aller Ihnen zur Verfügung stehenden Informationen zum Thema anfertigen (zumindest aber die Manpages der hier beschriebenen Hilfsprogramme und Dateien zum Drucken und das Printing-HOWTO). Außerdem ist es nützlich, die technischen Daten des Druckers parat zu haben. Diese werden oft nicht mehr mit dem Drucker mitgeliefert, können aber normalerweise von einem vom Druckerhersteller betriebenen FTP-Server oder aus einer Mailbox heruntergeladen werden. Während Sie solche Informationen herunterladen, schauen Sie sich ein wenig um, ob Sie Dokumentationen (wie Beschreibungen der Druckerfehlermeldungen und ihrer Bedeutungen) finden, die bei der Verwaltung und Fehlersuche nützlich sein könnten. Die meisten Drukkerhersteller bieten auch ein technisches Handbuch für den Drucker zum Kauf an. Dies kann dasselbe sein wie das normale Handbuch, muß aber nicht.

Beispielsweise finden Sie auf dem FTP-Server von Hewlett-Packard, unter ftp://boi.external.hp.com, technische Datenblätter, Produktspezifikationen, Informationen zur Schnittstellenkonfiguration, PostScript-, PCL- und HP-GL-Testdateien, um Ihren Drucker (und die Filter) zu testen, Beschreibungen der Kontrollsequenzen, die Sie an den Drucker schicken können, um sein Verhalten zu beeinflussen, und Dokumente, die erklären, wie Sie lpd-basierte Druckdienste mit HPs JetAdmin-Paket (und damit auch mit Netware-vernetzten Druckern) integrieren.

Bevor wir jetzt mit der Installation beginnen, atmen Sie tief durch und seien Sie geduldig. Die Konfiguration von Druckdiensten ist eine Fähigkeit, die man nicht an einem Tag erlernt. Wenn Sie halbwegs standardisierte Geräte haben und erfolgreich eines dieser neuen Drucker-Management-Programme verwenden können, um schnell und effizient Druckdienste installieren und konfigurieren zu können, dann freuen Sie sich! Sie können dann immer noch die Installation optimieren, indem Sie die Verfahren benutzen, die wir hier im folgenden beschreiben. Außerdem können Sie vielleicht Filter und Hilfsprogramme einsetzen, die speziell dafür geschrieben worden sind, alle Features Ihres Druckers zu unterstützen. Wenn Sie sich entschlossen haben, eine erfolgreiche Druckerinstallation umzukonfigurieren, stellen Sie sicher, daß Sie sich alle Änderungen notieren, so daß Sie wieder zurückkönnen, wenn die Änderungen nicht das bewirken, was Sie erwartet haben.

Auswählen der Druckersoftware

Um von Linux aus drucken zu können, müssen Sie das BSD-Drucksystem installieren. Dieses stellt zwar die Werkzeuge zur Verfügung, unterstützt aber keine modernen Drucker, weil es entwickelt worden ist, um die Zeilendrucker und Geräte zu unterstützen, die man in den Computerräumen der sechziger und siebziger Jahre üblicherweise vorgefunden hat. Um auch moderne Drucker zu unterstützen, gibt es mächtige Ergänzungspakete, die alle Features bereitstellen, die Benutzer heute erwarten. (Der FTP-Server ftp://metalab.unc.edu und seine Spiegel enthalten die Pakete, die wir hier erwähnen.)

Icon

Kapitel 9

In diesem Abschnitt beschreiben wir die wichtigsten Pakete, um moderne Druckdienste zu unterstützen. Wir gehen davon aus, daß auf Ihrem Rechner mindestens der Textformatierer groff, das Seitenformatierungspaket Ghostscript und das Filterpaket GNU Enscript vorhanden sind, deren Verwendung in Kapitel 9 beschrieben wird. Die meisten Linux-Distributionen enthalten diese bereits, zusätzlich zu diversen anderen Formatierungs- und Druckwerkzeugen. Wenn Ihre Distribution diese Programme nicht enthält, können Sie sie von den üblichen Linux-FTP-Sites herunterladen oder von der CD einer anderen Distribution nehmen.

Es macht einen Unterschied, von wo Sie Ihre Formatierungs- und Filterpakete beziehen. Wenn Sie beispielsweise Ghostscript aus einer europäischen Distribution nehmen, ist das Format vermutlich auf DIN-A4-Papier anstelle des in den USA üblichen 8,5x11-Inch-Papierformats eingestellt. Auf jeden Fall kann der Default aber einfach durch eine lpr-Option, die an den Filter weitergegeben wird, überschrieben werden. Alternativ dazu können Sie die Programme auch selbst aus den Quellen kompilieren.

Der Trend in der Druckertechnologie geht von zeichenorientierten Ausgaben weg und zu Seitenbeschreibungssprachen (Page Description Language, PDL) hin, die fortgeschrittene Kontrolle über Grafiken und Zeichensätze ermöglichen. Die beliebteste PDL ist auf jeden Fall PostScript, die im Unix- und Internetbereich allgemein akzeptiert worden ist. Dies liegt zu einem großen Teil an der Existenz von Ghostscript, einer PostScript-Implementierung von Aladdin Enterprises. Ghostscript wird unter anderem unter der GNU General Public License und durch die Free Software Foundation vertrieben, zusammen mit einer großen Zeichensatz-Bibliothek, die mit beiden Versionen und auch mit anderen PostScript-Interpretern verwendet werden kann.

Ghostscript implementiert fast alle Anweisungen der Sprache PostScript und unterstützt Dateibetrachtungsprogramme wie Ghostview, mit denen PostScript-Dokumente in X-Fenstern angezeigt werden können. Außerdem sind exzellente Filter verfügbar, die PostScript-Ausgaben in andere Druckersprachen wie Hewlett-Packards PCL und in Rastergrafiken, die auf vielen Tintenstrahl-, Nadel- und Laserdrukkern druckbar sind, konvertieren. Ghostscript ist ein unverzichtbares Werkzeug, wenn Sie irgend etwas außer einfachen Zeichenausgaben drucken wollen, und kommt mit einer Reihe von Werkzeugen zur Konvertierung von Grafikformaten sowie Filtern. Ja, Ghostscript kann sogar PDF-Dateien erzeugen, also Dateien, die der Adobe Portable Document Specification gehorchen.

Ghostscript allein könnte jedoch möglicherweise nicht ausreichend sein, denn es bietet nicht genug Kontrollmöglichkeiten zum Umschalten zwischen PostScript- und Textmodi. Obwohl Ghostscript einen Filter bereitstellt, der diese Fähigkeit hat (und vieles mehr), erfüllt der Filter nenscript die Ansprüche von Einfachheit, Flexibilität und Zuverlässigkeit für die meisten Systeme doch mehr. Daher besprechen wir hier nenscript.

Eine typische Linux-Installation zum Formatieren und Drucken verwendet vielleicht vorrangig groff zum Formatieren und zur Erzeugung von PostScript-Ausgaben, die dann von Ghostscript zum Drucken oder Anzeigen aufbereitet werden. Oft gibt es daneben auch andere Drucksysteme, die installiert werden, um den Vorlieben bestimmter Benutzer entgegenzukommen, oder die es ermöglichen, Dateien zu formatieren, die in verschiedenen Formaten vorliegen.

Überprüfen der Druckwerkzeuge

Vermutlich ist es sinnvoll für Sie, wenn Sie auch das Formatierungspaket installieren. Selbst wenn Sie nicht die vollständige -Distribution installieren wollen, sollten Sie wenigstens das Hilfsprogramm xdvi installieren, um -Ausgaben und Texinfo-Dateien in einem X-Fenster ansehen zu können. Andere Filter können DVI-Dateien in PostScript (dvips) oder PCL (dvilj) konvertieren, wenn Sie Ghostscript nicht mögen oder die eingebauten Drukkerzeichensätze verwenden wollen, um eine effiziente Datenübertragung und einen schnellen Ausdruck zu erreichen.

Auch das Lout-Paket sollten Sie in Erwägung ziehen, wenn es um ein effizientes und kompaktes Paket zum Formatieren von Dokumenten zur PostScript-Ausgabe geht. Es unterstützt Level 2 PostScript und die Adobe Document Structuring Conventions, verbraucht vergleichsweise wenig Speicher und wird mit einer Dokumentation geliefert, die gut genug ist, um die Verwendung des Pakets schnell zu erlernen. Lout erzeugt keine Zwischenausgabe, sondern wandelt markierte Eingaben direkt in PostScript um.

Um Grafik- und X-Programme zu unterstützen, sollten Sie auch noch andere Werkzeuge installieren, von denen einige vermutlich auch in Ihrer Distribution enthalten sind. Eine Sammlung der aktuellen Versionen der beliebtesten Pakete zur Druckunterstützung für Linux finden Sie im Linux-Archiv auf ftp://metalab.unc.edu im Verzeichnis /pub/Linux/system/printing. Die Pakete netpbm und pbmplus unterstützen eine große Anzahl an Grafikformatkonvertierungen. (Solche Formate müssen nach PostScript konvertiert werden, bevor Sie sie ausdrucken können.) Das Ghostview-Paket enthält Programme, um PostScript-Dateien unter X ansehen zu können, und bietet auch PostScript- und PDF-Unterstützung für andere Programme wie zum Beispiel Webbrowser.

Icon

Kapitel 9

Das ImageMagick-Paket, beschrieben im Abschnitt »ImageMagick« in Kapitel 9, verdient es, gesondert erwähnt zu werden. Mit diesem Paket können Sie eine große Anzahl an Grafikformaten in einem X-Fenster anzeigen. (Zum Anzeigen von PostScript-Grafiken werden Ghostview und Ghostscript verwendet.) Die meisten Grafikdateien, die Sie ausdrucken können, können Sie auch mit ImageMagick betrachten.

Ein sogenanntes »magisches« Filterpaket kann Ihnen auch viele Probleme bei der Konfiguration und Unterstützung verschiedener Dokumentenausgabeformate ersparen. Wir besprechen hier (kurz) das magische Filterpaket APSfilter, aber vielleicht wollen Sie statt dessen lieber das Magic-Filter-Paket verwenden. Sie finden beide auf ftp://metalab.unc.edu . Mehr über magische Filter finden Sie im Abschnitt »Magische Filter: APSfilter und Alternativen« weiter hinten in diesem Kapitel.

Wenn Sie auch Faxgeräte verwenden wollen, kann das Hilfsprogramm mit Ghostscript verwendet werden, um Gruppe-3-Faxdateien auszugeben. Um ein Klasse-1- oder Klasse-2-Faxmodem an Ihrem Linux-Rechner anzusteuern, können Sie das mgetty+sendfax-Paket verwenden, das in vielen Distributionen enthalten ist, oder das noch mächtigere, aber auch komplexere Paket Hylafax installieren und konfigurieren.

Es gibt einige zusätzliche Werkzeuge, um doppelseitiges Drucken auf Laserdrukkern zu ermöglichen, sowie Pakete, die PostScript in weniger verbreitete Druckersteuerungssprachen, wie sie beispielsweise von Canon- und IBM-Proprinter-Geräten verwendet werden, konfigurieren. Weiterhin gibt es ein Paket, mit dem auf Laserdruckern und Bitmap-Geräten in Chinesisch ausgedruckt werden kann. Die meisten dieser Pakete betreffen die Verwaltung der Druckdienste nicht direkt, weswegen wir sie hier nicht besonders detailliert besprechen, aber wenn Sie sie verwenden wollen, dann wäre jetzt ein guter Zeitpunkt, sie zu installieren.

Im Interesse Ihrer Benutzer sollten Sie alle Manpages zu den installierten Paketen ebenfalls an den richtigen Stellen installieren. Starten Sie danach /sbin/makewhatis (/usr/bin/mandb auf Debian-Systemen), um die Indexdatei der Manpages, die bei der Informationssuche hilft, neu aufzubauen. Einige Pakete wie Ghostscript enthalten auch noch zusätzliche Dokumentation, die Sie ausdrucken oder auf dem Rechner zum Nachschlagen bereithalten können. (Diese Dokumente sind in Linux-Distributionen oft nicht enthalten, aber Sie können sie per FTP von den Servern beziehen, wo diese Pakete entwickelt und gewartet werden. Die GNU-Archive erreichen Sie beispielsweise per anonymem FTP unter ftp://GNU.ai.mit.edu .)

Die Auswahl und Anwendung von Filtern wird weiter unten im Abschnitt »Druckfilter« beschrieben.

Einrichten der Datei printcap

Das wichtigste bei der Druckerkonfiguration ist das Erzeugen korrekter Einträge in der Druckerbeschreibungsdatei /etc/printcap. Ein einfacher Printcap-Eintrag für einen »HP Laserjet 4MP«-Laserdrucker, der an der ersten (bidirektionalen) parallelen Schnittstelle auf einem PC mit ISA-Bus angeschlossen ist, könnte etwa so aussehen: Fu▀noten 1

ljet|lp|ps|Postscript|600dpi 20MB memory|local|LPT1:\ :lp=dev/lp0:rw:\ :sd=/var/spool/lpd/ljet4:mx#0:mc#0:pl#72:pw#85:\ :lf=/var/log/lpd-errs:if=/usr/local/cap/ljet4:

Erschrecken Sie nicht! Wenn Sie die folgenden Abschnitte gelesen haben, werden Sie Printcap-Dateien mit Leichtigkeit lesen können.

Icon

Die Datei /etc/printcap sollte jeden Drucker und jede Druckerschnittstelle oder Adresse - seriell, parallel, SCSI, USB oder vernetzt - enthalten, die in Ihrem System verwendet wird. Aktualisieren Sie die Datei nach jeder Hardwareänderung. Und denken Sie wie immer daran, daß manche Hardwareumbauten nur bei abgeschaltetem Strom vorgenommen werden sollten.

Regeln zum Schreiben von Printcap-Dateien

Die Regeln zum Schreiben von Printcap-Dateien sind kurz zusammengefaßt:

Druckernamen

Die meisten Druckereinträge beginnen traditionellerweise mit einem kurzen Drukkernameneintrag im ersten Feld, gefolgt von mindestens einem längeren Druckernamen und einem längeren beschreibenden Eintrag als letzten Namen des Feldes. Sowohl ljet als auch Postscript sind also Namen des Druckers mit folgendem Eintrag:

ljet|lp|ps|Postscript|600 dpi 20MB memory|local|LPT1:

Dokumente können an jeden Drucker, der in einer Namenszeile in /etc/printcap auftaucht, geschickt werden.

Vorschläge zur Namensgebung der Drucker sind der Hersteller (HP, Epson), der Typ des Druckers (ps, pcl) oder einer seiner speziellen Modi. Der »Deskjet 540«-Drucker sollte beispielsweise zwei Definitionen in der Printcap-Datei haben, eine zum schwarzweißen Drukken und eine für Farbdruck. Die zu verwendenden Filter werden vermutlich die für den Deskjet 500 bzw. 550C sein. Um die Administration zu vereinfachen, können Sie Druckernamen verwenden, die den Namen von Filtern oder Filterparametern für ein bestimmtes Gerät entsprechen. Wenn Sie also einen LaserJet 4 haben und nur den ljet4-Filter dafür verwenden wollen, ist ljet4 ein naheliegender Name für den Drucker. Analog könnte ein Nadeldrucker 72dpi genannt werden, wenn er über seinen Eintrag für niedrige Auflösung angesprochen wird, und 144dpi, wenn der Eintrag für höhere Auflösung verwendet wird.

Wenn Sie ein Druckerverwaltungsprogramm verwenden, das zu Ihrer Distribution gehört, müssen Sie eventuell einigen willkürlichen Regeln beim Erstellen der Printcap-Einträge folgen, um zu vermeiden, daß die Werkzeuge versagen. Beispielsweise muß bei Red Hats Drukkerverwaltungsprogramm der Name hp immer der erste Name des ersten aktiven Druckereintrags der Printcap-Datei bleiben. Das bedeutet für Sie, daß, wenn Sie den Standarddrucker ändern müssen, Sie den neuen Standarddrucker an die Spitze der Liste stellen müssen und dann den hp-Druckernamen vom alten Standarddrucker entfernen und dem neuen voranstellen. Um Verwirrung bei der Verwendung der Spool-Verzeichnisse zu vermeiden, sollten Sie das Verzeichnis /var/spool/lpd/lp beibehalten und ein neues Verzeichnis mit dem Namen anlegen, unter dem Sie den Drucker tatsächlich ansprechen wollen. Wenn Sie also Ihre Dateien an einen Drucker namens moa schicken wollen, müssen Sie ein Verzeichnis namens /var/spool/lpd/moa mit den richtigen Zugriffsrechten anlegen und angeben, daß dieses Verzeichnis als Spool-Verzeichnis für diesen Drucker fungieren soll. Die Einrichtung von Drukkerverzeichnissen wird im nächsten Abschnitt beschrieben.

Weitere Printcap-Variablen

Die Printcap-Datei enthält eine Reihe von Variablen, denen Sie Werte zuweisen können. Manche sind ziemlich allgemein und andere spezifisch für eine bestimmte Implementierung des jeweiligen lpd. Die meisten Variablen geben Seitenparameter, Dateien, Verzeichnisse, Filter, Einstellungen für Kommunikationskanäle und Befehle zur Fernsteuerung an. Wann immer Sie eine Printcap-Datei für ein neues System anlegen, lesen Sie die Printcap-Manpage, um sicherzugehen, daß Sie die richtigen Variablennamen verwenden. In einer Printcap-Datei gesetzte Variablen, die nicht bekannt sind, werden zur weiteren Verarbeitung an den Filter weitergereicht.

Die Printcap-Variablen, die wir hier beschreiben, sind in etwa in der Reihenfolge ihrer Wichtigkeit sortiert. Einige Variablen haben Boolesche Werte und gelten als gesetzt, wenn sie vorhanden sind. Andere werden mit dem Zuweisungsoperator (=) oder dem Operator für numerische Werte (#) und einem Wert gesetzt; in diesen Fällen steht die Variable links vom Operator und die Zeichenkette oder Zahl dahinter. Beispiele für die Verwendung der Variablen, die in der folgenden Liste beschrieben werden, finden Sie in der anschließenden ausgedachten /etc/printcap-Musterdatei. Die Printcap-Manpage enthält eine vollständigere Aufstellung der von lpd erkannten Variablen.

sd
Gibt das von diesem Drucker verwendete Spool-Verzeichnis an. Spool-Verzeichnisse sollten alle im selben Verzeichnisbaum (auf einer schnellen Festplatte) liegen. Dieser Verzeichnisbaum ist normalerweise /var/spool. Auch für Drucker auf anderen Rechnern werden Spool-Verzeichnisse definiert. Jede Spool-Datei sollte einen der diesem Drucker zugewiesenen Namen tragen.
lp
Weist einen lokalen Drucker zu, der normalerweise über eine parallele, serielle oder SCSI-Schnittstelle angeschlossen ist. Der Variablen lp muß eine Gerätedatei im /dev-Verzeichnis zugewiesen werden, die wiederum ein Link auf das physikalische Gerät sein darf. Die Variable lp muß vorhanden sein, wenn es sich um einen lokalen Drucker handelt. Sie sollte nicht vorhanden sein, wenn die Variable rp vorhanden ist (das heißt, der Drucker-Spooler befindet sich auf einem anderen Rechner). Fu▀noten 2 Wenn lp an ein serielles Gerät zugewiesen wird, muß mit br die Baudrate gesetzt werden.
lf
Gibt die Logdatei an, um Fehlermeldungen abzuspeichern. Alle Drucker sollten diese Variable setzen und normalerweise dieselbe Logdatei verwenden. Fehlermeldungen enthalten den Namen des Druckers und können auf Probleme mit der Druckumgebung des Benutzers, der Rechnerkonfiguration, den verwendeten Kommunikationskanälen oder manchmal auch mit der Druckerhardware selbst hinweisen.
rw
Diese Variable sollte angegeben werden, wenn der Drucker in der Lage ist, über eine bestimmte Gerätedatei Daten an den Rechner zurückzuschicken. Die Variable rw teilt lpd mit, daß das Gerät zum Lesen und Schreiben geöffnet werden sollte. Das kann besonders für serielle und SCSI-PostScript-Drucker nützlich sein, die oft ziemlich hilfreiche Fehlermeldungen an lpd zurückschicken, der diese in der Fehler-Logdatei abspeichert.
mx
Gibt die maximale Größe eines Druckauftrags im Spool-Verzeichnis an. 0 (der Default mx#0) bezeichnet keine Beschränkung; jeder andere Wert setzt die Beschränkung in logischen Blöcken. Normalerweise ist es nicht sinnvoll, die Jobgröße zu beschränken, aber Sie könnten beispielsweise einen Wert verwenden, der geringfügig kleiner ist als der zu erwartende minimal verfügbare Speicherplatz auf der Festplatte.
if
Gibt den zu verwendenden Eingabefilter an. Wenn Sie keinen Eingabe-(if-) oder Ausgabe-(of-)Filter angeben, verwendet das System den Default-Filter /usr/sbin/lpf. Für manche DOS-artigen Zeichendrucker ist das ausreichend. Einige nützliche Filter kommen mit den Formatierungsprogrammen. Außerdem gibt es einige flexible »magische Filter«, die (üblicherweise korrekt) anhand der Eingabedatei erkennen, welcher Filter angewendet werden muß. Siehe dazu den folgenden Abschnitt »Druckfilter«.
of
Gibt den zu verwendenden Ausgabefilter an. Wenn der Variablen of ein Wert zugewiesen wird, der Variablen if aber nicht, wird der Filter einmal verwendet, sobald das Gerät geöffnet wird. Alle Aufträge in der Warteschlange werden dann abgeschickt, ohne den Filter noch einmal anzuwenden, bis die Warteschlange leer ist (und lpd die Sperrdatei aus dem Spool-Verzeichnis entfernt). Dies macht normalerweise keinen Sinn, kann aber verwendet werden, wenn zum Beispiel Faxe an ein Faxmodem, das an einer Wählverbindung hängt, gesendet werden sollen.
Wenn sowohl die Variable if als auch die Variable of vorhanden ist, verarbeitet der if-Filter die Datei ganz normal, der mit of angegebene Filter gibt aber eine Trennseite aus, bevor der Eingabefilter angewendet wird. Die effiziente Verwendung von Eingabe- und Ausgabefiltern in derselben Warteschlange ist eine notorisch schwierige Angelegenheit.
br
Gibt die Datenübertragungsrate (Baudrate) der seriellen Schnittstelle an. Dieser Wert muß angegeben werden, wenn der Drucker über eine serielle Schnittstelle angesprochen wird. Ein Doppelkreuz steht vor dem numerischen Wert, der die Datenübertragungsrate in Bits per Sekunde angibt (was in Wirklichkeit nicht der Baudrate entspricht, die die tatsächliche Übertragungsrate im Gegensatz zur maximalen angibt). Die angegebene Übertragungsrate sollte keine Hardwarebeschränkungen überschreiten. Wenn beispielsweise Ihre serielle Schnittstelle 57,6 Kbps verträgt, der Drucker aber nur 28,8 Kbps, dann sollte die angegebene Übertragungsrate 28,8 Kbps nicht überschreiten (also vielleicht br#19200). Die unterstützten Übertragungsraten sind die üblichen Vielfachen der seriellen Kommunikation: 300, 600, 1200, 2400, 4800, 9600 usw. Wenn die Variable br gesetzt wird, können eine Reihe weiterer Variablen gesetzt werden, die Einfluß auf die Datenübertragung haben, aber die meisten sind in einer typischen Linux-Installation nicht sinnvoll. Das Standardverhalten sollte für Ihre Druckbedürfnisse ausreichend sein, aber wenn Sie über eine serielle Schnittstelle drukken wollen, sollten Sie trotzdem die Einträge zu den Variablen fc, fs, xc und xs in der Printcap-Manpage lesen.
pl
Gibt die Seitenlänge von Zeichengeräten (und Druckern, die über einen Zeichenmodus verfügen) in Zeilen bei Verwendung des Standardzeichensatzes an. Beispielsweise bezeichnet pl#70 eine DIN-A4-Seite bei 6 Zeilen pro Inch. Damit ist noch Platz zum Abreißen der Seite, und einige Beschränkungen anderer Geräte, wie beispielsweise Tintenstrahldrucker, die nicht bis ganz an die Kante herandrucken können, werden auch noch berücksichtigt. Wird normalerweise zusammen mit der Variablen pw verwendet.
pw
Gibt die Breite der Seite in Zeichen des Standardzeichensatzes für Zeichengeräte an. Wird wie die Variable pl gesetzt, beispielsweise bedeutet pw#85 10 Zeichen pro Zoll bei einer bedruckbaren Seitenbreite von 8,5 Zoll.
px
Gibt die Anzahl der auf der X-Achse zu verwendenden Pixel bei Bitmap-Grafiken an.
py
Gibt die Anzahl der auf der Y-Achse zu verwendenden Pixel bei Bitmap-Grafiken an.
sh
Unterdrückt das Drucken von Kopf- oder Trennseiten. Sollte in den meisten Fällen gesetzt sein.
rp
Gibt den Namen des zu verwendenden entfernten Druckers an. Diese Variable darf nicht gesetzt werden, wenn die Variable lp für denselben Drucker gesetzt ist. Die Druckeransteuerung wird vom Rechner vorgenommen, der in der immer mit rp zusammen anzugebenden Variable rm angegeben wird. Normalerweise müssen in diesem Fall nur die Spool- und Fehlerlog-Variablen gesetzt werden.
rm
Gibt den entfernten Rechner an, der den entfernten Drucker ansteuert. Die rm zugewiesene Host-ID sollte im Netzwerk bekannt sein (also zum Beispiel in /etc/hosts oder NIS verzeichnet sein).
rs
Beschränkt den Zugriff auf lokale Drucker auf solche Benutzer, die einen Account auf dem System haben.
rg
Gibt eine eingeschränkte Gruppe an, die den Drucker benutzen darf. Um den Drucker beispielsweise für den Superuser zu reservieren, können Sie rg=root eingeben.
sf
Unterdrückt das Senden eines Seitenvorschubs an den Drucker am Ende des Druckauftrags.
ff
Weist das Zeichen oder die Zeichenkette zum Seitenvorschub für dieses Gerät zu. Der Default ist STRG-L (entspricht ff='\f'), was für die meisten Geräte korrekt ist.
fo
Sendet vor jeder Datei einen Seitenvorschub an das Gerät.
mc
Gibt die maximale Anzahl an druckbaren Kopien an. Die Werte sind dieselben wie für die Variable mx; normalerweise sollten beliebig viele Kopien (mc#0) erlaubt sein, was auch der Default ist.
sc
Unterdrücken von Kopien (entspricht mc#1).

Beispiel 8-1 enthält eine Printcap-Datei, die viele der oben besprochenen Variablen vorführt.

Beispiel 8-1: Beispiel für eine /etc/printcap-Datei

# und tschuess, liebe Ausdrucke hp|west|spigot|berkeley|TI MicroLaser Turbo:\ :mx#0:rp=lp:\ :lp=:sd=/var/spool/lpd:rm=spigot.berk.ora.com:\ :lf=/var/log/lpd-errs: # ab in den Druckerraum kiwi|810|rint|Big Apple|Apple 810 via EtherTalk:\ :lp=/var/spool/lpd/kiwi:sh:\ :sd=/var/spool/lpd/kiwi:pl#72:pw#85:mx#0:\ :lf=/var/log/lpd-errs:if=/usr/local/cap/kiwi: # ueber die geschuetzte serielle Verbindung samoa|S|PostScript|secure|QMS 1725 by serial adapter:\ :lp=dev/tty01:br#38400:rw:xc#0:xs#0400040:sh:\ :sd=/var/spool/lpd/samoa:pl#72:pw#85:mx#0:mc#0:\ :lf=/var/log/lpd-errs:if=/usr/local/cap/samoa: # ueber das Subnetz im Druckerraum moa|ps|QMS 1725 via Ethernet:\ :lp=/var/spool/lpd/moa/moa:rm=agapornis:rp=samoa:\ :sd=/var/spool/lpd/moa:mx#0:sh:\ :lf=/var/log/lpd-errs:if=/usr/local/cap/samoa:

Ghostscript konfigurieren

Ghostscript ist in den Standard-Linux-Paketen enthalten; es ist ein unverzichtbares Hilfsprogramm in einer X-Umgebung und auch dann nützlich, wenn Sie X nicht verwenden. Ghostscript kann Grafiken auf einem Standard-VGA-Bildschirm ausgeben, selbst wenn kein Window Manager läuft, und auch PostScript-formatierte Dateien verarbeiten und erzeugen, ohne daß ein graphischer Bildschirm vorhanden ist. Sie können herausfinden, für welche Geräte und Formate Ghostscript auf Ihrem System konfiguriert worden ist, indem Sie es im interaktiven Modus starten. Geben Sie dazu ein:

$ gs

Ghostscript wird im interaktiven Modus gestartet und wartet auf Ihre Anweisungen:

GS>

Sie können jetzt nach den Gerätenamen fragen, für die Ghostscript konfiguriert ist, und Ghostscript wird diese ausgeben:

GS> devicenames == [/pkm /sj48 /la75plus /t4693d2 /pjxl300 /cdj500 /mgr8 flzw /ppm /okiibm /la70 /iwlo /ljet3d /pjxl /cdjcolor /mgrgray8 fg32d /pnm /oce9050 /declj250 /bjc600 /ljet2p /st800 /stcolor /png256 /mgrgray2 fcrle /pgnm /m8510 /lbp8 /bj200 /pdfwrite /pjetxl /eps9high /pnggray /bitcmyk /faxg32d /pgm /jetp3852 /epson /lp2563 /paintjet /appledmp /x11cmyk /pcx24b /bit /dfaxlow /pbm /cp50 /tek4696 /lj4dith /djet500c /x11 /pcx16 f24nc /pkmraw /ccr /ln03 /t4693d4 /deskjet /cdj550 /pcxmono fpack /ppmraw /r4081 /la75 /nullpage /ljet4 /iwlq /cdjmono /mgr4 fg4 /pnmraw /oki182 /la50 /iwhi /ljet3 /cdj850 /cdeskjet /png16m /mgrgray4 fg3 /pgnmraw /necp6 /lips3 /epsonc /laserjet /x11mono /png16 /mgrmono /faxg4 /pgmraw /imagen /bjc800 /bj10e /pj /eps9mid /x11alpha /pngmono /bitrgb /faxg3 /pbmraw /ibmpro /ap3250 /ljetplus /dnj650c /pcx256 /psmono /dfaxhigh /xes /lj250 /t4693d8 /djet500 /miff24 /pcxgray f12nc] GS> quit $

Wenn Sie kein X verwenden und Ghostscript beim Aufruf nicht initialisiert werden kann und sich beschwert, daß es kein X-Display öffnen kann, dann ist das erste Gerät, für das Ghostscript konfiguriert ist, das »X Window System«-Gerät. Ghostscript verwendet das erste Gerät als Standardgerät. Sie können dieses Problem umgehen, indem Sie ein anderes Gerät angeben, für das Ghostscript konfiguriert worden ist, zum Beispiel gs -sDEVICE=epson. Sie können sich gegen dieses Problem für die Zukunft absichern, indem Sie die globale Umgebungsvariable GS_DEVICE auf den Namen eines anderen Geräts setzen, das auf Ihrem System von Ghostscript geöffnet werden kann.

Wenn Sie so ein ungewöhnliches Ausgabegerät haben, daß die Standardinstallation von Ghostscript es nicht unterstützt, müssen Sie entweder Ghostscript neu übersetzen, um dieses Gerät zu unterstützen, oder die Ausgabe von Ghostscript durch einen Filter schicken, der sie in eine Form konvertiert, die von Ihrem Ausgabegerät verstanden werden kann. Ghostscript wird mit Makefiles geliefert und ist einfach zu übersetzen, wenn Sie sich an die Ghostscript-Dokumentation halten, die mit der Distribution geliefert wird.

Je mehr graphische Werkzeuge, X Window Manager, Spiele und Anwendungen Sie benutzen, um so wahrscheinlicher ist es, daß Sie Ghostscript neu installieren müssen, um es Ihren Anforderungen anzupassen. Lesen Sie die Ghostscript-Dokumentation, bevor Sie das Makefile ausführen, das im Paket enthalten ist. (Die Neuinstallation von Ghostscript erfordert es, daß Sie gcc installiert haben.)

Sie können die Umgebungsvariable GSDIR setzen, um den Pfad der ausführbaren Datei von ghostscript anzugeben, sowie die Variable GS_LIB, falls Sie Ghostscript-Hilfsprogramme kompilieren müssen, um sie Ihrer Installation hinzuzufügen. Zum Beispiel:

export GSDIR=/usr/bin export GS_LIB=/usr/lib/ghostscript:/usr/local/lib/fonts:/usr/X11R6/fonts

Setzen Sie die Variable GS_LIB_DEFAULTS, bevor Sie Ghostscript neu kompilieren; siehe dazu die gs-Manpage.

Das Ghostscript-Paket enthält auch einige PostScript-Programme, die nützliche Funktionen zur Druckerunterstützung enthalten, darunter auch einige fortgeschrittene Druckverfahren, die wir hier nicht besprechen. Die Datei gs_init.ps beeinflußt speziell das generelle Verhalten von Ghostscript. Zusätzliche Skripten (Filter, Shell-Skripten usw.) finden Sie in /usr/lib/ghostscript oder /usr/local/lib/ghostscript. Nützlich für Sie könnten zum Beispiel die Programme ps2epsi.ps, das PostScript in Encapsulated PostScript konvertiert, und ps2ascii.ps, das PostScript-Dateien in reine Textdateien konvertiert, sein.

Druckfilter

Wie wir bereits erwähnt haben, wird jedes Dokument durch einen Filter geschleust, bevor es zum Drucker kommt. Dafür sorgt die Variable if in der Printcap-Datei. Druckfilter bekommen Sie aus Ihrer Linux-Distribution, vom Hersteller des Druckers, aus dem Internet, oder Sie schreiben selbst einen neuen oder setzen vorhandene Filter und Shell-Utilities zusammen.

Ein Eingabefilter kann auch dazu verwendet werden, um den Zugang zum Drucker auf bestimmte Benutzer oder Benutzergruppen oder auch auf alle Benutzer mit einem Account auf einem bestimmten Rechner zu beschränken. Typische mit if verwendete Filter sind ausführbare Shell-Skripten, die die Textdatei verarbeiten; aber es kann jedes Programm verwendet werden, das einen Eingabedatenstrom entgegennimmt und für die Ausgabe auf dem Drukker aufbereitet.

Es wird in kommerziellen Linux-Distributionen immer populärer, einen Filter interaktiv zusammenzubauen. Während diese Filter meistens noch verbesserungsfähig sind, können sie doch als Ausgangspunkt nützlich sein. Die Red Hat-Distribution hat beispielsweise das folgende Shell-Skript (namens /var/spool/lpd/ljet4/filter) Fu▀noten 3 auf einem unserer Rechner anhand von Informationen, die im Druckermanager eingegeben wurden, sowie anhand von Defaults angelegt. Die Datei /etc/printcap wurde dahingehend verändert, diesen Filter zu verwenden, der sich als völlig ausreichend für unser System herausstellte:

#!/bin/sh DEVICE=ljet4 RESOLUTION=600x600 PAPERSIZE=letter SENDEOF= nenscript -TUS -ZB -p- | if [ "$DEVICE" = "PostScript" ]; then cat - else gs -q -sDEVICE=$DEVICE \ -r$RESOLUTION \ -sPAPERSIZE=$PAPERSIZE \ -dNOPAUSE \ -dSAFER \ -sOutputFile=- - fi if [ "$SENDEOF" != "" ]; then printf "" fi exit 0

An diesem Filter ist nichts besonders Exotisches. Zunächst werden einige Variablen gesetzt, die später als Argumente für den Ghostscript-Befehl dienen. Das Skript läßt die Ausgabe durch nenscript laufen und leitet die PostScript-Dateien an Ghostscript weiter. Der Seitenausgabe wird durch Setzen der Variable SENDEOF am Anfang der Datei Rechnung getragen. Beispielsweise würde

SENDEOF='\f'

am Ende der Datei einen Seitenvorschub an den Drucker schicken.

Icon

[91] Printing HOWTO

Vielleicht wollen Sie das Skript verändern und einen speziell für den LaserJet 4 entworfenen Filter verwenden, wie etwa das ljet4-Filterpaket, und auch das Drucken von -DVI-Dateien vorsehen, indem diese durch dvips laufen und dann an Ghostscript weitergegeben werden. Eine grundlegende Besprechung, wie man einen Filter anlegt, finden Sie im »Linux Printing HOWTO«.

Wenn Sie einen Zeichendrucker verwenden, der ein Zeilenende-Zeichen am Ende der Zeile erwartet, wird der sich mit Linux nicht so gern anfreunden wollen, denn Linux folgt der Unix-Tradition, indem es Zeilen mit einem Zeilenvorschub (LF) und nicht mit einem Zeilenende-Zeichen beendet. Um auch auf diesen Druckern einen korrekten Zeilenwechsel zu erreichen, muß der Filter das Zeilenende-Zeichen einfügen. Das kann entweder durch Codieren dieser Fähigkeit im Filter oder durch Verwendung eines Filters, der bereits die Fähigkeit hat, ein Zeichen einzusetzen, geschehen.

Einige Druckerhersteller stellen Filter und Utilities für ihre Drucker bereit; insbesondere dann, wenn die üblichen Lösungen nicht ausreichen, um die Fähigkeiten des Druckers auszunutzen. Beispielsweise stellt Hewlett-Packard das JetAdmin-Paket mit Filtern zur Verfügung, um seine in einem TCP/IP-Netzwerk adressierbaren LaserJet-Drucker zu unterstützen.

Der Standardfilter, der mit dem BSD-Druckerverwaltungspaket geliefert wird, ist /usr/sbin/lpf. Dieser Filter ist nicht dokumentiert und sollte am besten ignoriert werden, es sei denn, Sie wollen sich die Quellen holen und das Programm in Einzelschritten durchlaufen, um seine Fähigkeiten kennenzulernen. (Die vollständigen BSD-Quellen dafür finden Sie im Paket lpr-secure im Printing-Verzeichnis unter ftp://metalab.unc.edu.)

Die meisten Druckfilter-Bedürfnisse, die Sie haben, wurden bereits vor langer Zeit bedacht; es gibt viele Filter, um Ihre Bedürfnisse zu erfüllen. Wenn Sie

apropos filter

eingeben, werden Sie wahrscheinlich eine ganze Reihe von Filtern sehen, die auf Ihrem Rechner installiert sind.

Das Ändern von Filtern ist einfach. Sie müssen nur die Eingabefilter-Spezifikation (if) in der Datei /etc/printcap ändern, um den Filter anzugeben, den Sie haben wollen, und dann lpd beenden und neu starten, was Sie mit dem lpc-Utility machen können. Geben Sie (als root) ein:

lpc restart all

Das lpc-Utility teilt Ihnen alle lpd-Prozesse, die es beendet, mit und startet dann lpd erneut. Wenn Dateien im Drucker-Spooler auf ihren Ausdruck gewartet haben, wird lpc auch mitteilen, daß es einen lpd-Dämon für diesen Drucker gestartet hat. Das Utility lpc zur Druckerkontrolle beschreiben wir später in diesem Kapitel im Abschnitt »Kontrollieren der Druckerdienste mit lpc«.

Lesen Sie die Manpage eines Filters genau, und probieren Sie einige Testdateien aus, bevor Sie einen neuen, merkwürdigen Druckfilter verwenden. Es ist uns oft passiert, daß Filter sich nicht so »wie in der Manpage angekündigt« verhalten. Oft ist die Dokumentation veraltet, oder der Filter wurde mit anderen Konfigurationsparametern kompiliert als denjenigen, von denen die Dokumentation ausgegangen ist. Das Testen all der Funktionen, die Sie von dem Filter erwarten, bevor Sie ihn endgültig installieren, ist unumgänglich. Zwei gute Filterpakete, nenscript und APSfilter, werden im nächsten Abschnitt besprochen.

Der Filter nenscript

Der nenscript-Filter ist ein typischer, moderner Filter für Linux. Wenn er in Ihrer Distribution enthalten ist, sollten Sie ihn unter /usr/bin/nenscript finden. Ansonsten wird er in /usr/local/bin installiert. nenscript beeinflußt Kopf- und Fußzeilen, rotierenden Text usw. und produziert (durch Aufrufen von Ghostscript) aus reinem ASCII-Text PostScript-Code, der den Adobe Document Structuring Conventions gehorcht. Er schickt die Ausgabe an den Drucker, der in der Umgebungsvariable NENSCRIPT des Benutzers steht, wenn diese gesetzt ist, ansonsten an den Drucker in der Umgebungsvariable PRINTER. Wenn keine der beiden Variablen gesetzt ist, verwendet nenscript den Standarddrucker, den lpr verwenden möchte.

Wenn nenscript mit der Option -Z aufgerufen wird, leitet er PostScript-Dateien weiter, ohne sie zu verändern. nenscript untersucht die Eingabedatei und unterdrückt die Formatierung, wenn die ersten beiden Zeichen %! sind. Wenn natürlich die ersten beiden Zeichen etwas anderes als %! sind, zum Beispiel weil ein Seitenvorschub als erstes Zeichen in der Datei steht, dann wird die Datei nicht als PostScript erkannt, selbst wenn es sich um gültiges PostScript handelt. Das kann leicht passieren, wenn andere Filter die Datei bearbeiten, bevor sie bei nenscript ankommt. Natürlich kann eine Datei auch %! als erste Zeichen haben und trotzdem kein PostScript (oder nicht standardgemäßes PostScript) sein und deswegen nicht korrekt ausgedruckt werden, wenn sie an einen PostScript-Drucker geht. Es gibt intelligentere Filter für diese Überprüfungen, darunter Magic-Filter und APSfilter, aber nenscript entspricht vielleicht exakt Ihren Ansprüchen, insbesondere wenn Sie nur auf einen PostScript-Drucker drucken.

Wenn Sie den nenscript-Filter für einen PostScript-Drucker auf Ihrem System verwenden, können Sie die -Z-Option per Default für alle User-Shells in der Umgebungsvariablen NENSCRIPT verwenden, damit PostScript-Dateien durchgereicht werden.

Es gibt noch andere, vergleichbare Filter. Der nenscript-Filter emuliert den traditionellen Unix-Enscript-Filter. Ein Shell-Skript, das im nenscript-Paket mitgeliefert wird, ruft nenscript so auf, daß der Filter sich verhält, als wäre er ein (ähnlicher) traditioneller Unix-Filter namens pstext.

Alles, was Sie machen müssen, um nenscript als Filter zum Drucken Ihrer Dateien zu verwenden, ist sicherzustellen, daß nenscript im Suchpfad installiert ist und daß die Drucker, für die nenscript als Filter fungieren soll, so eingestellt werden, daß der nenscript-Filter aufgerufen wird. Der Printcap-Eintrag kann direkt auf den nenscript-Filter zeigen, wenn Sie die systemweiten Defaults für die Optionen mit der Umgebungsvariable NENSCRIPT einstellen, oder Sie können einen einfachen Filter erstellen, der nenscript aufruft - ungefähr so wie in der Beispieldatei weiter oben. Überprüfen Sie die Besitzer und Zugriffsrechte der Verzeichnisse und Dateien, nachdem Sie die Printcap-Datei geändert und die Filter eingerichtet haben.

Magische Filter: APSfilter und Alternativen

Die wandlungsfähigsten Filter sind die sogenannten »magischen« Filter. Ein magischer Filter untersucht die Eingabedateien, die ihm übergeben werden, und filtert die Ausgabe anhand dessen, was er über das Format der Datei herausgefunden hat. Wenn er beispielsweise eine DVI-Datei sieht, die an einen PostScript-Drucker geschickt wird, wird er einen anderen Filter (zum Beispiel dvips) anwenden, um die Datei zum Drucken in das PostScript-Format zu konvertieren. Das ist sehr praktisch, aber ab und zu kann sich der Filter auch irren. Wenn das passiert, kann der Benutzer die Datei erneut abschicken und dabei Kommandozeilenoptionen angeben, die die vorzunehmende Filterung explizit anfordern; oder er kann auch die Datei selbst vorbereiten, indem er sie durch die erforderlichen Filter schickt, bevor sie zum Drucken an lpr übergeben wird. Es gibt einige gute magische Filterpakete, darunter APSfilter (den wir hier zur näheren Erläuterung ausgewählt haben), Magic-Filter und den gslp.ps-Filter, der mit vollständigen Ghostscript-Paketen geliefert wird.

Leider liefern einige Linux-Distributionen die zusätzlichen Utilities oder Dokumentationen von Ghostscript nicht mit, aber Sie können sich jederzeit eine vollständige Ghostscript-Distribution per FTP aus dem GNU-Archiv (ftp://ftp.gnu.org) oder einem seiner Spiegel holen. Sie bekommen das APSfilter-Paket vom FTP-Server ftp://metalab.unc.edu aus dem Verzeichnis /pub/Linux/system/printing. Der primäre FTP-Server für das Magic-Filter-Paket ist das Linux-Archiv unter ftp://tsx-11.mit.edu. Der Ghostscript-Filter gslp.ps ist in PostScript geschrieben und kann deswegen nur mit Ghostscript (oder Adobe PostScript) verwendet werden.

Das APSfilter-Paket für Linux ist eine Portierung des für FreeBSD entwickelten Pakets. Aus diesem Grund gilt es, einige Vorüberlegungen zu machen, damit bei der Installation des APSfilter-Pakets alles ordentlich konfiguriert wird. Auf einem Linux-Rechner ist es wohl am besten, das APSfilter-Paket in /usr/lib/apsfilter zu installieren. Das Paket kommt von ftp://metalab.unc.edu als gzipte, getarte Datei. Um das Paket auszupacken, stellen Sie es in das Verzeichnis /usr/lib/apsfilter und geben

gunzip apsfilter*gz

ein. Daraus resultiert zunächst eine tar-Datei. Zum Zeitpunkt des Schreibens installiert sich diese tar-Datei nicht richtig, wenn einfach nur tar im apsfilter-Verzeichnis aufgerufen wird. Geben Sie statt dessen im apsfilter-Verzeichnis

tar -vxf apsfilter*.tar -C /usr/lib

ein. Jetzt entpackt sich das APSfilter-Paket in Unterverzeichnisse im apsfilter-Verzeichnis.

Wechseln Sie jetzt in das Verzeichnis apsfilter. Bevor Sie den Befehl SETUP aufrufen, müssen Sie noch sicherstellen, daß alle Filter, die APSfilter verwenden soll, installiert und konfiguriert sind. In der Datei /usr/lib/apsfilter/FAQ können Sie einiges über wichtige und nützliche Pakete lesen.

Bevor Sie die Installation starten, lesen Sie die Datei INSTALL, um vor Überraschungen sicher zu sein. Starten Sie dann ./SETUP. Das Programm überprüft die Anwesenheit und Lage von graphischen Utilities und anderen Filtern, die APSfilter verwendet, um Dateien in eine auf Ihrem Drucker ausdruckbare Form zu bringen.

Das SETUP-Skript macht Meldung über den Installationserfolg oder -mißerfolg. Wenn Sie mehr als einen Drucker oder mehr als einen Modus für einen einzelnen Drucker installieren wollen, können Sie das Programm auch noch einmal starten. Wenn Sie beispielsweise einen »Deskjet 540«-Drucker installieren, wollen Sie vermutlich die dj500-Definition für die schwarze und die dj550c-Definition für die farbige Tintenpatrone verwenden. APSfilter verwendet sehr lange Verzeichnisnamen für seine Spool-Verzeichnisse, ob es Ihnen gefällt oder nicht. Wenn Sie Ihnen nicht gefallen, können Sie die Namen der Spool-Verzeichnisse natürlich ändern und die dazugehörigen Verzeichnisfelder im zugehörigen Eintrag in /etc/printcap anpassen. Kürzen Sie aber nicht den Namen des verwendeten Filters; der Pfad muß bleiben. Wir empfehlen Ihnen nicht, die Dinge schöner machen zu wollen, bevor Sie nicht sicher sind, daß sie funktionieren.

Bevor Sie Ihre neue Einstellung ausprobieren können, müssen Sie noch den Drukkerdämon neu starten:

/usr/sbin/lpc restart all

APSfilter macht systemweite Variableneinstellungen für die Druckerdefinitionen in der Datei /etc/apsfilterrc. Es kann interessant sein, diese Datei einmal zu lesen. Häufig auftretende Probleme beim Drucken sind die üblichen Probleme mit Dateibesitz und Zugriffsrechten; vergessen Sie also nicht, das immer zu überprüfen. Lesen Sie dann die Dateien FAQ und TROUBLESHOOTING im Verzeichnis /usr/ lib/apsfilter.

Wenn Ihre APSfilter-Installation nicht funktioniert, können Sie immer noch zur alten Konfiguration zurückkehren, indem Sie die von APSfilter gesicherte Datei /etc/printcap.orig wieder in /etc/printcap umbenennen.

APSfilter benennt seine Drucker sequentiell, beginnend mit lp1. Lassen Sie sich nicht verwirren, das hat nichts mit dem tatsächlichen physikalischen Gerät zu tun, das dem Drucker zugewiesen ist. Auch hier können Sie die Namen verändern.

APSfilter ermöglicht es, einige Beschränkungen aufzulockern, so daß sich einzelne Benutzer eine eigene Datei .apsfilterrc in ihren Home-Verzeichnissen anlegen können. Per Default ist das aber nicht erlaubt, was etwas mehr Sicherheit bedeutet.

Die neueste Version von Magic-Filter (zum jetzigen Zeitpunkt ist das Version 1.2) läßt sich bemerkenswert einfach installieren und ist eine gute Alternative zu APSfilter. Es gibt allerdings keinerlei Hilfe bei der Installation. Obwohl es eine nützliche Manpage gibt, gibt es nicht sehr viel Informationen, die Ihnen bei der Installation helfen könnten, die für die meisten Drucker notwendigen Änderungen vorzunehmen. Aber insbesondere, wenn Sie einen vielseitig verwendbaren Drucker haben, der mehrere Sprachen versteht (PostScript, PCL5, Text usw.), kann es lohnend sein, sich die Mühe mit der Installation zu machen.

Elemente des BSD-Drucksystems: Dateien, Verzeichnisse und Utilities

Das Druckerverwaltungssystem erwartet von Ihnen, daß Sie Verzeichnisse anlegen, die den Druckernamen in der Printcap-Datei entsprechen, um die Dateien zum Drucken abzulegen. Außerdem müssen Sie andere Dateien anlegen, um den Druckvorgang selbst zu kontrollieren. Sie müssen die Verzeichnisse und Dateien mit den richtigen Besitzern und Zugriffsrechten anlegen, und auch die Drucker-Utilities müssen die richtigen Zugriffsrechte haben.

Druckerverzeichnisse einrichten

Sie haben von Ihrer Installation ein Standard-Spool-Verzeichnis. Idealerweise liegt dieses Verzeichnis auf einer Festplatte mit niedrigen Zugriffszeiten. Das allgemeine Spool-Verzeichnis (/var/spool) wird normalerweise für Mail, News und UUCP-Verbindungen genauso wie für die Druckdateien verwendet. Wir empfehlen Ihnen, dies beizubehalten; es ist unter Linux der Standard. Einige Utilities oder Filter, die Sie sich besorgen, erwarten möglicherweise, daß /usr/spool/lpd der Pfad für den Drucker-Spooler ist. Falls dies der Fall ist, müssen Sie das ändern. Natürlich können Sie ein Verzeichnis /usr/spool anlegen und einen Link auf /var/spool setzen, aber das ist nur dann sinnvoll, wenn /usr und /var auf derselben Festplatte (bzw. auf derselben Partition) liegen.

Sie müssen Ihre eigenen Drucker-Spooler-Verzeichnisse anlegen. Das Verzeichnis /var/spool/lpd ist der Standardpfad für jedes Unterverzeichnis eines Druckers. Jeder Name eines Drucker-Unterverzeichnisses muß der Druckername im ersten Feld im zugehörigen /etc/printcap-Eintrag sein. Beispielsweise ist /var/spool/lpd/moa der richtige Verzeichnisname für einen Drucker, bei dem moa im Namensfeld des Printcap-Eintrags steht. Ebenso muß der Eintrag in /etc/printcap eine sd-Variable haben, die auf das Spool-Verzeichnis zeigt (zum Beispiel sd=/var/spool/lpd /moa).

Sie sollten lp nicht als Name eines Spool-Verzeichnisses verwenden, es sei denn, Sie wollen nie mehr als einen Drucker in Ihrem System oder Netzwerk haben, denn lp ist der Standarddrucker. (Wenn Ihr Standarddrucker irgendwo anders im Netz steht, werden die Dateien trotzdem zunächst nach /var/spool/lpd/lp geschrieben, bevor lpd sie an den Druckerdämon auf dem entfernten Rechner weiterreicht.) Möglicherweise haben Sie ein Druckerverwaltungsprogramm, das ein Spool-Verzeichnis namens lp automatisch anlegt, aber Sie können ja immer noch die Printcap-Datei editieren, um einen anderen Verzeichnisnamen zu wählen.

Der Name des Spool-Verzeichnisses sollte der erste Name sein, der im zugehörigen Eintrag in /etc/printcap aufgeführt wird, damit es leichter ist, den Drucker zu ideizieren. Der Printcap-Eintrag wird dann mit den Namen verknüpft, mit denen die Utilities lpq und lpc über den Zustand der Druckerwarteschlange berichten.

Zugriffsrechte für Dateien, Verzeichnisse und Utilities

Das häufigste Problem beim Einrichten von Druckdiensten liegt in den Zugriffsrechten von Dateien und Verzeichnissen. Tabelle 8-1 gibt die wichtigen Dateien, Verzeichnisse und Utilities an, die zur BSD-Druckerverwaltung unter Linux gehören. Die Installationsorte können - abhängig von Ihrer Distribution - etwas anders sein. Die in der folgenden Tabelle angegebenen Zugriffsrechte sind Empfehlungen für die Dateien und Verzeichnisse des Drucksystems. (Zusätzliche Filter und nicht standardmäßige Spool-Pfade können in /etc/printcap angegeben werden.) Andere Zugriffsrechte funktionieren möglicherweise auch, aber wenn Sie Probleme mit den Zugriffsrechten haben, können Sie hier nachschlagen. Ein Stern in der ersten Spalte von Tabelle 8-1 gibt an, daß es viele Dateien mit den Namen der einzelnen Drucker geben kann.

Verzeichnis oder Datei Zugriffsrechte Eigentümer/
Gruppe
Beschreibung
/dev/ttys1 crwsr----- root/lp Typische Gerätedatei für serielle Drucker
/dev/lp1 crws------ root/lp Typische Gerätedatei für parallele (nicht bidirektionale) Drukker
/usr/bin/lpc -rwsrwsr-x root/lp Verwaltet die Spooler-Dienste
/usr/bin/lpr -rwsrwsr-x root/lp Nimmt die zu druckende Datei entgegen, fügt Verarbeitungsdaten hinzu und stellt beide in den Spooler
/usr/bin/lpq -rwsrwsr-x root/lp Zeigt die »gespoolten« Dateien mit Daten über den Benutzer und die Warteschlange an
/usr/bin/lprm -rwsrwsr-- root/lp Entfernt Druckjobs aus dem Spooler
/usr/bin/tunelp -rwsr-sr-- root/lp Testet Druckerdienste, um sie zu verbessern
/usr/bin/lptest -rwxr-xr-x root/root Gibt eine ASCII-Datei aus, um den Drucker und das Display zu testen
usr/sbin/lpd -rwsr-s--- root/lp Der Dämon, der die Druckverwaltung unter Verwendung der Printcap-Daten und von lpr übergebenen -Daten abwickelt
/usr/sbin/lpf -rwxr-xr-x root/lp Primitive BSD-Textfilter
/usr/sbin/pac -rwxr--r-- root/root BSD-Utility, das über die Drukkerbenutzung, nach Benutzern sortiert, Auskunft gibt
/var/spool/ drwxr-sr-x root/daemon Grundlegender Speicherort für temporäre Dateien
/var/spool/lpd -rws--s--x root/lp Standardpfad für das Drucker-Spooler-System
/var/spool/lpd/* drwxr-sr-x root/lp Spool-Unterverzeichnisse für jeden definierten Drucker
/var/spool/lpd/*/filter -rwxr-xr-x root/lp Filter, die vom Red Hat-Drukkerverwaltungswerkzeug für jedes Spool-Verzeichnis angelegt werden
/var/spool/lpd/lpd.lock -rw-rw---- root/lp Lock-Datei für die lpd-Warteschlange
/var/spool/lpd/*/.seq -rw-rw---- lp/lp Folgendatei, die lpd verwendet, um die »g-espoolten« Dateien zu ordnen
/var/spool/lpd/*/lock -rw------- root/lp lpd schreibt Lock-Dateien, um zu verhindern, daß die nächste Datei geschickt wird, bevor der Drukker -wieder bereit ist
/var/spool/lpd/*/status -rw------- lp/lp Hier speichert lpd den neuesten Statusbericht der Drucker ab
/var/log/lp-acct -rw------- root/root Buchführungsdatei, aus der pac seine Daten -bezieht Fu▀noten 1
/var/log/lpd-errs -rw-rw-r- root/lp BSD-Standard-Logdatei für lpd-Fehler




 Fu▀noten 1 Diese Datei bleibt leer, bis die Buchführung auf Linux portiert worden ist oder Ghostscript so konfiguriert wird, daß es seine begrenzten Meldungen dort ablegt, und die Datei schreibbar für alle gemacht wird.

Die gewöhnlichen Druckerverwaltungs-Utilities unter Linux legen die Druckdatei mit dem Besitzer root und der Gruppe lp an. BSD-Distributionen verwenden traditionell auch den Besitzer root, aber die Gruppe daemon. Sie können beide Gruppen verwenden, aber wenn Sie daemon und lp mit verschiedenen Utilities und Dateien mischen, bekommen Sie Probleme. Seien Sie insbesondere vorsichtig, wenn Sie Utilities aus anderen Paketen hinzufügen.

Angenommen, Sie müssen (als root) das Drucker-Spooler-Verzeichnis /var/spool /lpd anlegen. Sie führen den Befehl

mkdir /var/spool/lpd

aus. Wenn /var/spool die üblichen Zugriffsrechte hatte, hat das neue lpd-Verzeichnis die Zugriffsrechte drwxrwxr-x, was zuviel ist.

Wenn Sie den Befehl

chmod 755 /var/spool/lpd

eingeben, werden die Zugriffsrechte auf drwxr-xr-x geändert. Das ist schon fast perfekt, aber nur fast. Sie müssen das setuid-Bit setzen, so daß lp per setuid zu root werden kann:

chmod +s /var/spool/lpd

Jetzt sind die Zugriffsrechte drwsr-sr-x, und so soll es auch sein. Die Gruppe sollte aber lp und nicht root sein, also müssen Sie auch das noch beheben:

chgrp lp /var/spool/lpd

Legen Sie die Spool-Verzeichnisse für jeden Drucker als Unterverzeichnisse von /var/spool/lpd auf die gleiche Weise an, und legen Sie dann mit touch eine .seq-Datei in jedem Drucker-Verzeichnis an:

touch .seq

Ausprobieren des Druckerdämons

Der Dämon lpd liest die Datei /etc/printcap ein und schickt dann Dateien an Drukker, indem er sie an die Gerätedatei im /dev-Verzeichnis weiterleitet. Die meisten Drucker an Linux-Rechnern sind entweder seriell (üblicherweise mit den Namen /dev/ttys0, /dev/ttys1 usw.) oder parallel (/dev/lp0, /dev/lp1 oder /dev/lp2, abhängig von den physikalischen Adressen, die die Schnittstellen benutzen). Die Schnittstellenzuweisungen werden im Abschnitt »Problemsuche im Drucksystem« beschrieben. Ein häufiger Fehler beim Konfigurieren der Druckerdienste besteht darin, die falsche Schnittstelle zu nehmen.

Sie können ein virtuelles Gerät, zum Beispiel /dev/fax, mit einem tatsächlichen Gerät durch Anlegen eines symbolischen Links verknüpfen, also zum Beispiel:

ln -s /dev/ttys1 /dev/fax

Damit können die Benutzer Skripten und Filter einrichten, die /dev/fax benutzen. Sie können einfach das physikalische Gerät (zum Beispiel ein Faxmodem) umbauen, indem Sie /dev/fax entfernen und neu mit einem Link auf das neue Gerät anlegen.

Der BSD-Druckerdämon ist dafür bekannt, einfach wegzusterben oder die Arbeit völlig einzustellen. Der Fairneß halber muß gesagt werden, daß das heute seltener vorkommt als noch vor ein paar Jahren, aber es kommt noch vor. Wenn das passiert, beenden Sie einfach den alten Dämon und starten Sie einen neuen. Wenn lpd aber nicht zuverlässig genug ist, muß das ja einen Grund haben. Es könnte mit der Umgebung des Benutzers etwas nicht in Ordnung sein, die bei lpd angegebenen Kommandozeilenoptionen waren vielleicht falsch, oder ein fehlerhafter Filter sendet einem Drucker Konfigurationsdaten, die dieser nicht mag. Sie können jedoch ruhigen Gewissens davon ausgehen, eine »ziemlich gute« Druckerinstallation zu haben. Wenn Sie trotzdem Probleme haben, lesen Sie den Abschnitt »Problemsuche im Drucksystem«.

O.K., lassen Sie uns überprüfen, ob Sie ein funktionierendes Druckersystem haben. Nachdem Sie alle diese Veränderungen vorgenommen haben, können Sie sicher sein, daß lpd nicht mehr weiß, was los ist. Starten Sie also den Befehl ps, um die Prozeß-ID des lpd-Prozesses herauszufinden. Geben Sie dann

kill -9 Prozess-ID

ein, um den angegebenen Prozeß zu beenden. Fu▀noten 4 Jetzt sollte bei Ihnen kein Druckerdämon laufen. Geben Sie einfach /usr/sbin/lpd ein, um den Druckerdämon zu starten.

Während Sie jetzt den LEDs an der Frontblende Ihres Druckers zuschauen (wenn da überhaupt welche sind), schicken Sie eine Datei (immer noch als root) an den Drucker:

lptest | lpr

Die von lptest gesendete ASCII-Datei sollte jetzt auf Ihrem Standarddrucker ausgedruckt werden, so wie es in Ihrer /etc/printcap-Datei angegeben ist. Wenn das nicht passiert, haben Sie ein Konfigurationsproblem, das nichts mit Zugriffsrechten zu tun hat.

Hat der Drucker irgendeine Aktivität gezeigt? Hat Ihr Standarddrucker ein Spool-Verzeichnis? Hat dieses Verzeichnis eine .seq-Datei? Überprüfen Sie die Datei /var/log/lpd-errs, und sehen Sie nach, ob da irgend etwas Hilfreiches steht. Verwenden Sie den Befehl lpc, um einen Bericht über den Zustand des Druckerdämons und des Spoolers zu bekommen.

Wenn alles andere gut aussieht, stellen Sie sicher, daß der Drucker auch die Schnittstelle verwendet, unter der Sie ihn erwartet haben. Das machen Sie, indem Sie eine Datei direkt an die Schnittstelle schicken, also zum Beispiel:

# lptest > /dev/lp1

Oder, um einen seriellen Drucker zu testen:

# lptest > /dev/ttys1

Und so weiter. Wenn nichts davon funktioniert, überprüfen Sie erneut Ihre /etc/printcap-Datei. Ist der Eintrag korrekt aufgebaut? Stehen keine Leerzeichen oder Tabulatoren hinter dem Fortsetzungszeichen (\)? Ist die Druckerwarteschlange korrekt angegeben? Taucht der Name lp irgendwo als einer der Druckernamen im Namensfeld auf? Ist der erste Name im Namensfeld derselbe Name wie der des Spool-Verzeichnisses?

Lassen Sie uns jetzt aber annehmen, daß Sie diesen ersten kleinen Test ohne Blessuren überstanden und einen wunderschönen Ausdruck im Ausgabefach Ihres Druckers haben. Als nächstes kommt die richtige Herausforderung. Können Sie auch als normaler Benutzer drucken? Loggen Sie sich ein (oder verwenden Sie su), um ein normaler Benutzer zu werden. Versuchen Sie jetzt dasselbe Experiment noch einmal. Wenn es wieder funktioniert: Herzlichen Glückwunsch, Sie haben jetzt einen Drucker! Wenn nicht, haben Sie immerhin ein Problem, und zwar vermutlich eines, das mit der Zugehörigkeit oder den Zugriffsrechten eines Verzeichnisses oder einer Datei zu tun hat. Sie wissen, was Sie jetzt tun müssen. Lesen Sie in den Manpages von chgrp, chmod und chown nach, und gehen Sie die Liste der Dateien und Verzeichnisse durch, um Ihr Problem zu finden und zu beheben. Machen Sie das so lange, bis auch Otto Normalbenutzer drucken kann.

Kontrollieren der Druckerdienste mit lpc

Das Utility lpc dient dazu, Druckerwarteschlangen zu verwalten. Es verlangt für die meisten Funktionen root-Rechte. lpc berichtet über alle Druckerwarteschlangen und die zugehörigen lpd-Dämonen. Sie können auch Berichte über einen bestimmten Drucker oder Benutzer anfordern. Um einen Bericht über alle Drucker und Benutzer abzufragen, geben Sie ein:

$ lpc status ibis: queuing is enabled printing is enabled no entries no daemon present crow: queuing is enabled printing is enabled 1 entry in spool area crow is ready and printing ada: queuing is disabled printing is disabled no entries no daemon present

Das Einreihen von Dateien in die Warteschlange kann mit lpc enable erlaubt und mit lpc disable verboten werden. Der Befehl lpc disable setzt dazu die Ausführungsberechtigung für Gruppen der Lock-Datei im Spool-Verzeichnis des Druckers um.

Das Drucken kann mit lpc start gestartet und mit lpc stop angehalten werden. Druckjobs, die in der Warteschlange stehen, wenn ein Drucker angehalten wird, bleiben dort, bis der Drucker wieder freigegeben wird. Der Befehl lpc stop schreibt eine Lock-Datei in das Spool-Verzeichnis des Druckers und beendet den Druckerdämon für diese Warteschlange, erlaubt aber das ordnungsgemäße Beenden des aktuellen Druckjobs. Der Befehl lpc abort funktioniert wie stop, bricht aber jeden Druckjob sofort ab. (Weil der Job nicht beendet wurde, bleibt er erhalten und wird von neuem gestartet, wenn der Drucker wieder freigegeben wird.)

Der Befehl lpc down ist eine Kombination aus disable und stop, der Befehl lpc up das Gegenteil davon.

Sie können die Ausgabe auch auf einen Drucker begrenzen:

$ lpc status crow: crow: queuing is enabled printing is enabled 1 entry in spool area crow is ready and printing

Die Möglichkeit, sich Zustandsberichte ausgeben zu lassen, ist für jeden nützlich; lpc erlaubt daher allen Benutzern die Verwendung dieses Befehls. Die richtige Arbeit für lpc gibt es erst bei Druckerproblemen. Manchmal stirbt ein Druckerdämon, und die Druckjobs sammeln sich an. Manchmal ist bei einem Drucker das Papier oder die Tinte alle, oder der Drucker ist ganz kaputt. Jobs im Spooler müssen angehalten oder in einen anderen Spooler verschoben werden, wo sie ausgedruckt werden können. Manchmal hat auch jemand einen besonders dringenden Druckauftrag, der an die Spitze der Warteschlange verschoben werden muß.

Der Befehl lpc ist ein klassischer Unix-Befehl, verschlossen und streng. Wenn Sie einfach nur lpc eingeben, bekommen Sie lediglich einen Prompt:

lpc>

Der Befehl ist interaktiv und wartet auf Ihre Anweisungen. Sie können durch Eingabe von help oder eines Fragezeichens Hilfe bekommen. lpc antwortet und erzeugt einen neuen Prompt. Durch Eingabe eines Fragezeichens bekommen Sie:

# lpc lpc> ? Commands may be abbreviated. Commands are: abort enable disable help restart status topq ? clean exit down quit start stop up lpc>

Sie können noch weitere Hilfe bekommen, indem Sie nach Hilfe für einen bestimmten Befehl fragen. Um beispielsweise mehr über das Neustarten einer blokkierten Warteschlange zu erfahren, geben Sie ein:

lpc> help restart restart kill (if possible) and restart a spooling daemon lpc>

Die Hilfemeldungen von lpc bringen aber keine Informationen über die weiteren Argumente, die Sie bei manchen Teilbefehlen eingeben können. Hier hilft die Manpage weiter. Die meisten Befehle akzeptieren die Eingabe von all oder den Namen eines Drucker-Spoolers als zusätzliches Argument.

Der Befehl lpc topq erwartet als erstes Argument den Namen eines Drucker-Spoolers und Druckjobnummern oder Benutzer-IDs als folgende Argumente. Die Argumente werden verwendet, um die Druckerwarteschlange umzustellen. Um beispielsweise den Job 237 an die Spitze der ada-Warteschlange zu stellen, gefolgt von allen Jobs des Benutzers bckeller, geben Sie ein:

lpc> topq ada 237 bckeller

Der lpd-Dämon wird den Job 237 starten, sobald der aktuelle Job beendet ist, und alle Jobs, die bckeller gehören, nach vorn in die Warteschlange stellen. Wenn Sie sehr ungeduldig sind, könnten Sie auch die Befehle abort und clean verwenden, um den aktuellen Druckjob zu löschen und dann mit topq den Job an die Spitze zu stellen, den Sie dort haben wollen, bevor Sie mit restart einen neuen lpd erzeugen und die Warteschlange wieder neu starten.

Wenn Sie den Befehl stop verwenden, um einen (oder alle) Drucker-Spooler anzuhalten, können Sie eine Nachricht an alle Benutzer im System schicken. Ein Beispiel:

lpc> stop ada "Drucker Ada abgeschaltet, um Toner-Kartusche auszuwechseln."

Wenn Sie größere Umbauvorhaben an den Drucker-Spoolern vornehmen wollen, Warteschlangen anhalten und Dateien durch die Gegend bewegen müssen, ist es sinnvoll, den Befehl cleanup zu verwenden. Das minimiert das Risiko, daß irgendeine verwaiste Datei den lpd-Dämon zum Absturz bringt.

lpc> clean

Lassen Sie sich dann einen neuen Zustandsbericht ausgeben, und starten Sie alle angehaltenen Drucker-Spooler neu, bevor Sie das Programm verlassen. Es gibt einen Unterschied zwischen dem Abbrechen und dem Anhalten eines Prozesses sowie dem Abschalten einer Warteschlange. Wenn Sie eine Warteschlange abschalten (zum Beispiel mit lpc down ada), können Sie lpd nicht mehr veranlassen, diesen Spooler zu bedienen, bis Sie mit lpc up ada alles wieder angeschaltet haben. Entsprechend müssen Sie eine Warteschlange nach dem Anhalten weiterlaufen lassen oder neu starten.

Verfolgen Sie die Geschehnisse weiter, wenn Sie Drucker-Spooler-Probleme mit lpc beseitigen. Zusätzliche Zustandsberichte werden Ihnen Auskunft geben, ob die Probleme wirklich gelöst worden sind.

Sie sollten mit der Beschäftigung mit lpc nicht warten, bis die Katastrophe da ist, denn der Durchlauf eines Druckjobs durch einen Linux-Spooler kann sehr schnell gehen, insbesondere dann, wenn der Drucker viel Speicher hat, um die an ihn geschickten Jobs abzuspeichern. Lesen Sie die Manpage genau durch, und arbeiten Sie mit lpc so weit, daß Sie mit den Möglichkeiten vertraut sind, die lpc Ihnen zur Kontrolle der Drucker-Spooler und von lpd-Dämonen bietet.

Sie können Teilbefehle abkürzen, sofern die Abkürzungen noch eindeutig sind. Im unten gezeigten Beispiel steht h für help:

lpc> h topq

Um den lpc-Befehl zu verlassen, geben Sie

lpc> quit

oder

lpc> exit

ein.

Optimierung der Druckerdienste

Um die Performanz zu verbessern, können Sie zunächst versuchen, die physikalischen Einstellungen zu optimieren. Sie sollten versuchen, die maximalen Datenflußraten zu Ihren Druckern herauszubekommen. Aber geben Sie keine höhere Datenflußrate als von Ihrem Drucker unterstützt an, es sei denn, der Drucker ist in der Lage, Signale zur Flußkontrolle an den Druckerdämon zu schicken. Sie müssen also über eine bidirektionale Datenübertragung verfügen (und der Drucker muß die notwendigen Signale zurückschicken) oder sich auf eine Übertragungsgeschwindigkeit beschränken, bei der keine Daten auf dem Weg zum Drucker verlorengehen. Sie müssen mit diesen Einstellungen vermutlich etwas experimentieren, um bei begrenzter Bandbreite die bestmögliche Performanz herauszuquetschen.

Alte serielle und parallele Schnittstellenkarten für PCs verfügen nicht über den Durchsatz wie neuere Karten. Neuere serielle Karten haben schnellere I/O-Prozessoren. Neuere parallele Schnittstellen sind üblicherweise schneller und erfüllen den EPP-Standard für bidirektionale Kommunikation, wodurch lpd den Datenfluß besser kontrollieren kann. Eine deutliche Performanzverbesserung ist vielleicht nur ein paar Mark entfernt.

Wenn Ihr Drucker einfach nur langsam ist und keine Druckjobs zwischenpuffern kann, gewinnen Sie natürlich nicht besonders viel, indem Sie die Übertragungsrate erhöhen, aber es kann immer noch ein Gewinn sein, die Interrupt-gesteuerte Flußkontrolle anstelle des Schnittstellen-Pollings zu verwenden, wenn die Hardware das zuläßt.

Sie können eine Reihe von Drucker-Optimierungen mit dem tunelp-Utility vornehmen. Lesen Sie sich die Manpage sorgfältig durch, bevor Sie irgendwelche Versuche in dieser Richtung machen. Wenn ein Tuning-Versuch scheitert, müssen Sie eventuell den Drucker aus- und wieder einschalten, um ihn in den Ausgangszustand zu bringen. Vergessen Sie auch nicht, mit lpc den lpd-Dämon nach jeder Änderung der Konfiguration neu zu starten. Machen Sie eine Sicherungskopie Ihrer funktionierenden Einstellungen, bevor Sie mit tunelp herumexperimentieren.

Ein sehr guter Start mit tunelp ist es einzustellen, daß ein Ausdruck bei einem Druckerfehler abgebrochen wird und Sie darüber eine Meldung erhalten. (Der Default ist, den Ausdruck nicht abzubrechen.) Mit dieser Einstellung können Sie Ihre Testphase verkürzen. Um diese Einstellung zu erhalten, geben Sie als root ein:

tunelp -aon

Wenn Sie einen Drucker verwenden, der an der parallelen Schnittstelle angeschlossen ist, und diese Schnittstelle auch Interrupt-gesteuertes Drucken zuläßt, können Sie tunelp verwenden, um den Zugriff auf den Drucker zu beschleunigen:

tunelp /dev/lp1 -i7

Dieses Beispiel schaltet die von Interrupt 7 kontrollierte Schnittstelle auf Interrupt-gesteuertes Drucken um. Wenn der nächste Druckversuch nach dieser Umstellung scheitert, sollten Sie die Schnittstelle zurücksetzen und zum nicht-Interrupt-gesteuerten Polling zurückkehren:

tunelp /dev/lp1 -r -i0

Wenn Sie den Interrupt eines Gerätes nicht kennen, können Sie diesen mit tunelp -q abfragen, worauf die IRQ-Einstellung angezeigt wird.

Sie können den Ausdruck möglicherweise etwas beschleunigen, indem Sie die Wartezeit reduzieren, die der Treiber wartet, wenn er ein Zeichen eine bestimmte Anzahl von Malen vergeblich zum Drucker schicken wollte. Ein schneller Laserdrucker beispielsweise kommt vermutlich mit sehr kurzen Pausen aus und benötigt nicht so viele Übertragungsversuche. Um ein Zeichen zehnmal vor der Pause auszugeben zu versuchen (Standardeinstellung sind 250 Versuche) und die Pause auf eine Hundertstelsekunde zu reduzieren, geben Sie ein:

tunelp /dev/lp1 -c10 -t1

Das -t erwartet einen numerischen Wert, der als Hundertstelsekunden interpretiert wird. Die standardmäßig eingestellte Pause ist eine Zehntelsekunde lang.

Beachten Sie, daß die Übertragungsrate, die sich möglicherweise für normale Textdateien als optimal herausgestellt hat, für Grafikdateien, die üblicherweise langsamer verarbeitet werden, weniger effizient sein kann.

Wenn Sie mit dem Optimieren Ihres Drucksystems fertig sind, wollen Sie vermutlich den Abbruch-Schalter wieder zurücksetzen, damit in Zukunft Ausdrucke bei Druckerfehlern nicht mehr abgebrochen werden:

tunelp -aoff

Das Utility tunelp wird immer noch weiterentwickelt. Lesen Sie die Manpage, um sich über die Fähigkeiten Ihrer Version zu informieren.

Problemsuche im Drucksystem

Wenn Sie ein Druckerproblem haben, lassen Sie sich zunächst von lpc einen Zustandsbericht geben. Die Druckerdämonen sollten lebendig und gesund sein; es sollten auch keine Fehler angezeigt werden. Sie können auch den Inhalt von /var/spool/lpd/druckername/status zu Rate ziehen und nachsehen, ob hier ein Fehler vom Drucker gemeldet wurde. Überprüfen Sie /var/log/lpd-errs, ob hier von lpd Fehler gemeldet wurden. Wenn Sie Ghostscript verwenden und die Berichtsfunktionen eingeschaltet haben, können Sie /sbin/pac auf die Logdatei von Ghostscript anwenden, um einen Bericht zu erhalten, aus dem mögliche - von Ghostscript erzeugte - Fehlermeldungen hervorgehen. (Solange unter Linux noch keine System-Buchführung zur Verfügung steht, können Sie auch genausogut /var/log/lp-acct für diese Berichte verwenden. Sie müssen die Datei dazu schreibbar für alle machen.)

Werfen Sie einen zweiten Blick auf den Zustandsbericht von lpc. Gelangen die Dateien überhaupt in den Drucker-Spooler? Kommen sie von dort wieder heraus? Sind die notwendigen Dateien für lpd vorhanden (.seq, lock usw.)? Wenn lpc status einen Drucker namens » : « meldet, ist mindestens eine fehlerhafte Zeile in /etc/printcap; das letzte Zeichen einer fortgesetzten Zeile muß der Backslash sein, nicht ein Leer- oder Tabulatorzeichen.

Manchmal ist /etc/printcap falsch eingestellt, so daß lpd die Datei falsch weiterleitet. Um das auszuprobieren, bereiten Sie eine Datei zum Drucken vor, aber speichern Sie sie, statt sie in den Drucker-Spooler zu stellen. Sehen Sie sich die Datei an. Ist sie so, wie Sie es erwarten? Machen Sie einige Überprüfungen:

Wenn Sie eine Textdatei ausprobieren, versuchen Sie, die Datei auf dem Bildschirm auszugeben und sie durch ein Utility wie less zu schicken, und untersuchen Sie das Ergebnis. Auch ein selbstgebauter Filter kann Fehler verursachen.

Manchmal ist es schwierig, den Ursprung eines Druckproblems herauszufinden. Probleme mit der Druckerkonfiguration können zum Beispiel durch überschriebene Defaults versteckt oder auch erst hervorgerufen werden. Vielleicht müssen Sie sich zunächst einmal die Druckgewohnheiten eines bestimmten Benutzers ansehen und sich von dort vorarbeiten. Benutzer können in ihren Startdateien Umgebungsvariablen setzen, die ihren Standarddrucker und das Verhalten von Formatierungsprogrammen und Filtern einstellen. Die Default-Werte des Systems werden oft durch Umgebungsvariablen überschrieben, diese dann wiederum durch Kommandozeilenargumente von lpr oder einem anderen Utility.

Wenn ein Druckjob nicht normal beendet wird, kann es notwendig sein, die Lock-Datei für den Spooler (/var/spool/lpd/druckername/lock) zu löschen, bevor lpd eine andere Datei aus dem Spooler an den Drucker schickt. Der lpd-Dämon legt die Lock-Datei an und löscht sie nach vollendetem Druckauftrag wieder. Sie können mit lpc den Druckerdämon anhalten und das Spool-Verzeichnis aufrufen, bevor Sie von neuem anfangen.

Einige Probleme resultieren auch aus der Datenübertragung. Ein Drucker kann Zeichen verlieren oder nicht gegen den angebotenen Datenstrom ankommen, insbesondere dann, wenn er alt und langsam oder das Kabel ungewöhnlich lang ist. Ein mögliches Symptom dafür ist das korrekte Ausdrucken von einfachem Text, aber das Anhalten und Ausgeben von Müll, wenn eine Grafik gedruckt werden soll. Wenn Sie ein solches Problem im Verdacht haben, sollten Sie die Pause, bevor Daten erneut gesendet werden, vergrößern und die Warteschleife verlangsamen. Dies können Sie bequem mit dem Utility tunelp einstellen:

tunelp -t200 -w5

Mit diesem Befehl teilen Sie lpd mit, daß er zwischen den Versuchen zwei Sekunden warten soll. Mit der Option -w wird die Anzahl der Schleifen zwischen den Strobe-Signalen eingestellt. Normalerweise ist -w auf 0 eingestellt. Weitere Informationen zu tunelp finden Sie im Abschnitt »Verwalten der Druckerdienste«.

Wenn es so aussieht, als würde nie ein lpd auf Ihrem System laufen, wird er vielleicht beim Hochfahren des Systems nicht gestartet. Wenn das der Fall ist, dann fügen Sie eine Zeile /etc/lpd an das Ende der Datei /etc/rc.d/c.local an. Die meisten Linux-Installationen starten lpd heutzutage im Rahmen der Default-Installation.

Manche Probleme treten erst dann auf, wenn Sie ein anderes Paket verwenden wollen, das durch Zugriffe auf das gleiche Gerät Konflikte verursacht. Beispielsweise versucht UUCP eine serielle Schnittstelle über den Gerätetreiber für /dev/ttyS* anzusprechen. UUCP ist aber ein Dämon mit größeren Privilegien als lp, so daß er das Gerät (fehlerhafterweise) auf einer Zugriffsstufe belassen kann, auf der lpd nicht darauf zugreifen kann.

Die Linux-Distribution des BSD-Druckpakets wird normalerweise in der Gruppe lp installiert. Bei traditionellen BSD-Druckerverwaltungsinstallationen gehört lpd daemon und ist Mitglied der Gruppe daemon. (Es gibt keine spezielle lp-Gruppe zum Drucken.) Wenn Sie den Verdacht haben, daß hier ein subtiles Problem mit dem Zugriff auf Geräte durch verschiedene Prozesse vorliegt, können Sie die Gruppenzugehörigkeit auf daemon ändern, natürlich genauso wie die Verzeichnis- und Dateizugriffsrechte. Damit wäre die ursprüngliche BSD-Konfiguration wiederhergestellt. Eine bessere Lösung wäre es aber, die problematischen Geräte zu ideizieren und den Besitzer auf lp zu ändern, da UUCP auch auf Geräte, die lp gehören, zugreifen kann. Vergessen Sie aber nicht, daß eine serielle Schnittstelle über verschiedene virtuelle Geräte mit dem tatsächlichen Gerät verbunden sein kann; Sie müssen den Eigentümer der tatsächlichen Schnittstelle korrekt setzen.

Ab und zu glaubt ein Benutzer, daß sein Druckjob an den »falschen« Drucker geht. Das deutet normalerweise auf ein Problem mit den Umgebungsvariablen hin. Überprüfen Sie Ihre Datei /etc/printcap erneut, aber auch die Umgebungsvariablen des Benutzers. Zum Beispiel kann der Benutzer die GS_DEVICE-Umgebungsvariable gesetzt haben, die Ghostscript als Standarddrucker verwendet. Wenn die Verarbeitung durch Ghostscript vor der Verarbeitung durch nenscript stattfindet, kann die Druckerzuweisung von Ghostscript auf nenscript gesetzt sein, womit die Umgebungsvariablen NENSCRIPT und PRINTER überschrieben werden. So etwas kann auch merkwürdige Ergebnisse verursachen, wenn einer der überschriebenen Parameter die anderen gesetzt läßt, so daß beispielsweise ein Filter ein bestimmtes Seitenlayout für einen Drucker vornimmt, der Ausdruck aber auf einen anderen Drukker geht.

Ältere PostScript-Drucker ignorieren teilweise ganz einfach normale ASCII-Dateien. Wenn ein Benutzer sich über verschwindende Ausgaben beklagt, kann es sein, daß die Datei nicht durch nenscript läuft, um in PostScript eingekapselt zu werden. Selten kann es auch vorkommen, daß nenscript zu dem Schluß kommt, daß es sich bereits um PostScript handelt, und deswegen keine Änderungen vornimmt.

Ein Drucker, der mehrere Sprachen spricht und weiß, wann er zwischen den Modi (zum Beispiel zwischen PCL und normalem Text) umschalten muß, wirft möglicherweise die Seite trotzdem nicht aus, wenn eine Datei desselben Typs unmittelbar nach der vorhergehenden in die Warteschlange gestellt wird. Wenn dies passiert, können Sie erzwingen, daß der Filter einen Seitenvorschub schickt, bevor eine Datei des gleichen Typs kommt (siehe dazu den Beispielfilter im Abschnitt »Druckfilter« weiter vorn), mit dem Risiko, manchmal leere Seiten auszudrucken.

Die Adressierung paralleler Drucker kann verwirrend sein. Auf einem System mit einem XT-Bus wird die erste parallele Schnittstelle als /dev/lp0 an der Adresse 0x3bc angesprochen. Auf einem gewöhnlichen ISA-Rechner ist die erste parallele Schnittstelle /dev/lp1 an der Adresse 0x378, was wiederum auf XT-Rechnern die zweite parallele Schnittstelle ist (und das Gerät /dev/lp1). Die übliche zweite serielle Schnittstelle auf ISA-Systemen ist - wie erwartet - /dev/lp2 an der Adresse 0x278. Es gibt jedoch einige ungewöhnliche Kombinationen wie beispielsweise Systeme mit drei parallelen Schnittstellen (wenn diese korrekt installiert sind, werden die Schnittstellen als /dev/lp0, /dev/lp1 und /dev/lp2 angesprochen). Auch die IRQ-Zuweisungen können ungewöhnlich sein und Probleme mit sich bringen, wenn Sie Interrupt-gesteuertes Drucken einstellen wollen.

Wenn sonst gar nichts hilft, überprüfen Sie noch einmal die initiale Installation, überprüfen Sie, ob die Hardware auch wirklich korrekt angeschlossen ist, überprüfen Sie die Hardware - wenn möglich - von einem anderen Betriebssystem aus, überprüfen Sie die Geräte als Benutzer root usw.

 Fu▀noten 1
In diesem Kapitel verwenden wir ljet4 in mehreren Beispielen. Sie sollten sich aber darüber im klaren sein, daß es den »HP Laserjet 4«-Drucker in verschiedenen Versionen gibt. Einige davon verstehen nur PCL5, andere auch PostScript. Wenn Sie sich dessen nicht bewußt sind, können Sie sehr frustrierende Erlebnisse haben, wenn Sie etwa versuchen, einen Druckerfilter zu debuggen, der beispielsweise PostScript erwartet, Ghostscript aber PCL5 ausgibt.
 Fu▀noten 2
Ein besonderer Fall tritt auf, wenn der anzusprechende Drucker ein echter Netzwerkdrucker ist, das heißt, wenn er eine eigene IP-Adresse hat. In diesem Fall wird der Variablen lp der Name einer Dummy-Datei zugewiesen, die verwendet wird, um eine temporäre Sperre zu setzen, wenn der Drucker gerade benutzt wird. Die Dokumentation des Netzwerkdruckers sollte das Vorgehen zum Einrichten und Verwalten der Druckdienste, die ihn ansprechen sollen, erläutern.
 Fu▀noten 3
Es ist für Druckerverwaltungsprogramme, die Sie beim Einrichten des Drucksystems verwenden, eine bequeme Sache, den Filter im Spool-Verzeichnis des Druckers unterzubringen. Vielleicht wollen Sie aber lieber all Ihre Druckfilter und Grafikkonverter nach alter Unix-Tradition im selben Verzeichnis aufbewahren, zum Beispiel in /usr/sbin oder /var/spool/lpd/filters. Natürlich muß in jedem Fall jeder Filter einen eindeutigen Namen tragen.
 Fu▀noten 4
Es ist vielleicht einfacher, den Befehl lpc dazu zu verwenden. Wenn Ihr Root-Desktop zudem ein Druckerverwaltungswerkzeug hat, können Sie wahrscheinlich einfach auf den lpd-Knopf drücken, um den Druckerdämon zu beenden und neu zu starten.


vorheriges Kapitel Inhaltsverzeichnis Stichwortverzeichnis nächstes Kapitel


Weitere Informationen zum Linux - Wegweiser zur Installation & Konfiguration

Weitere Online-Bücher & Probekapitel finden Sie in unserem Online Book Center


O'Reilly Home | O'Reilly-Partnerbuchhandlungen | Bestellinformationen | Kontaktieren Sie uns
International | Über O'Reilly | Tochterfirmen

© 2000, O'Reilly Verlag