Linux Drucker HOWTO <author>Grant Taylor (<tt>gtaylor@picante.com</tt>), Jens Vonderheide (<tt>Jens_Vonderheide@wharfrat.fido.de</tt>) und Robert Fendt (<tt>fendt@student.physik.uni-dortmund.de</tt>) <date>v3.17-3, 14. September 1998 <abstract> Dieser Text ist eine Zusammenfassung von Informationen, wie man unter Linux (und anderen UNIX-Derivaten) Dokumente generiert, ansieht, druckt oder faxt. </abstract> <toc> <sect>Einleitung <nidx>Drucker</nidx> <p> Die <em>Drucker HOWTO</em> sollte alles beinhalten, was sie wissen müssen, um Druckdienste auf Linux-Maschinen einzurichten. Die Installation von Druckern unter Linux ist zwar komplizierter als bei anderen Betriebssystemen, dafür ist die Lösung von Linux bzw. Unix erheblich flexibler und auch in großen Netzverbunden ohne Probleme einsetzbar. <p> Dieses Dokument ist so strukturiert, daß die meisten Leute nur etwa die erste Hälfte lesen müssen. Die meisten der schwierigeren und situationsabhängigen Informationen finden sich in der zweiten Hälfte und können im Inhaltsverzeichnis leicht gefunden werden, wobei ein Großteil der Informationen in den Abschnitten <ref id="DE-Drucker-HOWTO-distribution" name="Distributionsabhängige Lösungen"> bzw. <ref id="DE-Drucker-HOWTO-ghostscript" name="Ghostscript"> wahrscheinlich von den meisten Leuten gebraucht wird. <p> Diese HOWTO ist mit der Version 3 komplett neu geschrieben worden, deshalb sind viele Informationen aus früheren Versionen verlorengegangen. Das ist Absicht, da die alten Versionen 60 Seiten und mehr umfaßten und den Erzählfluß einer toten Schildkröte hatten. Wer hier keine passende Antwort findet, sollte zum einen die vorhergehende Version auf der Printing HOWTO Home Page <tscreen><htmlurl url="http://www.picante.com/˜gtaylor/pht/" name="http://www.picante.com/˜gtaylor/pht/"></tscreen> durchsuchen und zum anderen dem Autor einen Nachricht hinterlassen, was in dieser HOWTO noch stehen sollte. <p> Die alten Versionen stehen nur in englischer Sprache zur Verfügung. <p> Die <htmlurl url="http://www.picante.com/˜gtaylor/pht/" name="Printing HOWTO-Home Page"> ist eine gute Stelle, um die aktuelle (englische) Version dieser HOWTO zu bekommen. <p> Die deutsche Version ist auf <tscreen> <htmlurl url="http://www.tu-harburg.de/dlhp/" name="http://www.tu-harburg.de/dlhp/"> </tscreen> zu bekommen. Hier sind auch weitere deutsche Übersetzungen zu haben. Für die Koordination des deutschen HOWTO-Projekts ist Marco Budde (<tt><htmlurl url="mailto:Budde@tu-harburg.de" name="Budde@tu-harburg.de"></tt>) verantwortlich. <sect1>Anmerkungen zur Übersetzung <p> Die Übersetzer haben sich bemüht, möglichst wörtlich zu übersetzen. Daher wurden in dieser HOWTO-Übersetzung auch die Sätze des Autors, die in der ersten Person geschrieben sind, ohne Änderung übernommen. Im folgenden bezieht sich daher »Ich« auf den Autor des englischen Original HOWTO-Textes, Grant Taylor. <p> Um die Verständlichkeit zu erhalten, sind einige Fachbegriffe, die im Englischen selbst-erklärend sind, unübersetzt geblieben: <descrip> <tag/Spool/ Warteschlange. Hier »warten« Druckaufträge, bis der Drucker bereit ist. <tag/Device/ Wörtlich: Gerät. Kann sich auf ein physikalisches Gerät wie den Drucker beziehen, bezeichnet aber meistens ein logisches Gerät für Linux, z.B. <tt/lp1/. <tag/Manual Page/ Handbuchseite. Beschreibt einen Befehl o.ä. Wird durch <tt>man <Befehl></tt> angezeigt. </descrip> <sect1>Copyright <p> Dieses Dokument ist urheberrechtlich geschützt. Das Copyright für die englische <em>Printing HOWTO</em>, auf der dieses Dokument basiert, liegt bei Grant Taylor. Das Copyright für die deutsche Übersetzung liegt bei Jens Vonderheide, Robert Fendt und Marco Budde. Das Dokument darf gemäß der GNU <em><htmlurl url="DE-GPL.html" name="GPL"></em> kostenlos verbreitet werden. Das bedeutet, daß der Text sowohl über elektronische wie auch physikalische Medien ohne die Zahlung von Lizenzgebühren verbreitet werden darf, solange dieser Copyright-Hinweis nicht entfernt wird. Eine kommerzielle Verbreitung ist erlaubt und sogar erwünscht. Bei einer Verbreitung in Papierform ist das deutsche HOWTO-Projekt hierüber zu informieren. <sect>Wie druckt man? <p> Wenn <tt/lpd/ bereits so eingerichtet ist, daß man drucken kann, dann muß nur noch der Gebrauch des <tt/lpr/-Kommandos erlernt werden. Dieses ist jedoch nicht Gegenstand dieser HOWTO. Zu diesem Thema gibt es eine eigene HOWTO, die <em><htmlurl name="Printing Usage HOWTO" url="http://metalab.unc.edu/LDP/HOWTO/Printing-Usage-HOWTO.html"></em>. <p> Wenn Sie allerdings ein neues System oder einen neuen Drucker haben, dann werden Sie die Druckdienste auf die eine oder andere Weise einrichten müssen, bevor Sie drucken können. <sect>Kernel-Drucker-Devices <sect1>lp-Device <nidx>Device!lp</nidx> <nidx>lp-Device</nidx> <nidx>Device!plip</nidx> <nidx>plip-Device</nidx> <nidx>Drucker!parallel Schnittstelle</nidx> <p> Der Linux-Kernel (<=2.1.32), falls das lp-Device einkompiliert oder geladen wurde (die Ausgabe von <tt>cat /proc/devices</tt> sollte das Device lp einschließen), stellt ein oder mehr Devices <tt>/dev/lp0</tt>, <tt>/dev/lp1</tt> und <tt>/dev/lp2</tt> zur Verfügung. Diese werden <em/nicht/ dynamisch zugeordnet, sondern korrespondieren vielmehr mit einer bestimmten I/O-Adresse der Hardware. Das heißt, daß der erste Drucker entweder <tt/lp0/ oder <tt/lp1/ sein kann, abhängig von der verwendeten Hardware. Testen Sie einfach beides ;-). <p> Einige Leute haben berichtet, daß ihre bidirektionalen lp-Ports nicht erkannt wurden, wenn sie ein altes, unidirektionales Kabel verwendeten. Überprüfen Sie also, ob Sie über ein vernünftiges Kabel verfügen. <p> Man kann nicht die plip- und lp-Treiber gleichzeitig auf einem Port laufen lassen. Man kann aber einen der beiden Treiber entweder manuell oder mit dem kerneld (mit Kernelversion 2.x oder späten 1.3.x) laden. Wenn man die Interrupts u.ä. sinnvoll setzt, kann man lp auf dem einen und plip auf dem anderen Port laufen lassen. Jemand hat das gemacht, indem er die Treiber geändert hat; es bleibt abzuwarten, ob es auch eine einfache Kommandozeilen-Methode gibt. <p> Es gibt ein kleines Utility namens <idx>tunelp</idx>, mit dem man als root den verwendeten Interrupt, die Übertragungsgeschwindigkeit und anderes eines lp-Device einstellen kann. <p> Wenn der Treiber in den Kernel eingebunden wurde, können mit der <tt>lp=</tt>-Option während des Bootvorganges die Portadressen und Interrupts eingestellt werden. Die Option hat folgenden Syntax: <tscreen><verb> lp=port0[,irq0[,port1[,irq1[,port2[,irq2]]]]] </verb></tscreen> Um die Portadresse 0x378 und keinen Interrupt (Polling) zu verwenden, würde dann folgendes benutzt werden: <tscreen><verb> lp=0x378,0 </verb></tscreen> Mit nachfolgender Option würde die Adresse 0x278 mit dem Interrupt 5 und die Adresse 0x387 mit dem Interrupt 7 verwendet werden: <tscreen><verb> lp=0x278,5,0x378,7 </verb></tscreen> <p> Die Einstellungen des letzten Beispieles spiegeln die Standardwerte für die beiden parallelen Schnittstellen wieder. <p> Wenn diese Funktion benutzt wird, müssen <em/alle/ Ports angegeben werden, die berücksichtigt werden sollen, es gibt keine Voreinstellungen. Der eingebaute Treiber kann mit <tt>lp=0</tt> deaktiviert werden. <p> Wenn der Treiber als Modul geladen wird, können die Adressen und Interrupts in der üblichen Syntax dem insmod-Kommando übergeben werden. Falls der kerneld Verwendung findet, können die Einstellungen in der Datei <tt>/etc/conf.modules</tt> vorgenommen werden. Die Parameter sind <tt/io=port0,port1,port2/ und <tt/irq=irq0,irq1,irq2/. Weitere Informationen liefert die Manual Page zu <tt/insmod/. <p> Der Quelltext für den Linux Parallelporttreiber befindet sich in der Datei <tt>/usr/src/linux/drivers/char/lp.c</tt>. <sect1>parport-Device <nidx>Device!parport</nidx> <nidx>parport-Device</nidx> <p> Beginnend mit Kernel 2.1.33 (und verfügbar als Patch für Kernel 2.0.30) ist das lp-Device eigentlich nur noch ein Client des neuen parport-Devices. Die Erweiterung um das parport-Device beseitigt einige der Probleme, die den alten lp-Treiber quälten: ein Port kann mit anderen Treibern »geteilt« werden, den verfügbaren Parallelports werden dynamisch Device-Nummern zugeordnet, anstatt eine feste Zuordnung zu erzwingen, und einiges mehr. <p> Die Verfügbarkeit des parport-Devices hat eine ganze Reihe neuer Treiber für den Parallelport ermöglicht, so z.B. für parallele ZIP-Laufwerke, externe CD-ROMs und Festplatten. Einige davon sind auch für Kernel 2.0.x verfügbar; weitere Informationen hierzu finden sich im WWW. <p> Eine Dokumentation zum parport-Treiber ist in den Kernelquellen in der Datei <tt>Documentation/parport.txt</tt> zu finden. Auch ein Blick auf die <em/parport-Webseite/ unter folgender Adresse könnte sinnvoll sein: <tscreen><htmlurl url="http://www.cyberelk.demon.co.uk/parport.html" name="http://www.cyberelk.demon.co.uk/parport.html"></tscreen> <sect1>Serielle Devices <nidx>Drucker!serielle Schnittstelle</nidx> <p> Die Devices serieller Schnittstellen heißen unter Linux <tt>/dev/ttySx</tt>, wobei <tt>x</tt> die spezielle Schnittstelle bezeichnet. Die erste serielle Schnittstelle wäre also <tt>/dev/ttyS0</tt>. <p> Das Programm <tt/stty/ erlaubt es, interaktiv die Einstellungen für die seriellen Schnittstellen anzusehen oder zu verändern; mit <tt/setserial/ können einige erweiterte Attribute eingestellt werden und IRQs bzw. I/O-Adressen für nicht-standardmäßige Schnittstellen konfiguriert werden. Weitere Informationen über serielle Schnittstellen können in der <em><htmlurl url="http://metalab.unc.edu/LDP/HOWTO/Serial-HOWTO.html" name="Serial HOWTO"></em> nachgelesen werden. <p> Wenn man einen langsamen seriellen Drucker mit serieller Flußkontrolle benutzt, kann es sein, daß einige Druckaufträge nicht vollständig ausgedruckt werden. Das kann mit der seriellen Schnittstelle zusammenhängen. Damit die von einem Programm gelieferten Daten nicht verloren gehen, wenn der Drucker per Flußkontroller dem Computer mitteilt, daß er zur Zeit keine weiteren Daten empfangen kann, weil sein Speicher voll ist, speichert der Treiber der seriellen Schnittstelle die Daten in einen Puffer. <p> Diese Puffer kann 4096 Zeichen aufnehmen. 30 Sekunden nachdem das Programm das Schnittstellendevice geschlossen hat, löscht der Treiber den Puffer. Falls der Drucker also nicht schnell genug ist, in den 30 Sekunden die im Puffer stehenden Daten zu empfangen, gehen diese verloren. <p> Wenn der Befehl <tscreen>cat file > /dev/ttySx</tscreen> kurze Dateien komplett ausdruckt, bei längeren aber das Ende abschneidet, könnte genau dieser Fall vorliegen. <p> Die 30-Sekunden-Wartezeit kann durch die <tt>closing_wait</tt>-Kommandozeilenoption von <tt/setserial/ (Version 2.12 oder später) eingestellt werden. Die seriellen Schnittstellen eines Rechners werden üblicherweise durch einen Aufruf von <tt/setserial/ in einer der Bootdateien initialisiert. Der Aufruf für den Port, an dem der Drucker hängt, kann so modifiziert werden, daß zusammen mit den anderen Parametern die <tt>closing_wait</tt>-Option eingestellt wird. <sect>Unterstützte Drucker <nidx>Drucker!unterstützte</nidx> <nidx>Drucker!GDI</nidx> <nidx>Drucker!PostScript</nidx> <nidx>Drucker!PrintGear</nidx> <p> Der Linux-Kernel unterstützt praktisch alle Drucker, die man an eine serielle oder parallele Schnittstelle anschließen kann, aber es gibt einige Dinge, auf die man achten sollte, und auch einige Drucker, die Sie nicht werden benutzen können, obwohl sie elektrisch gesehen mit Linux kommunizieren können. <p> Zu diesen gehören vor allem jene inkompatiblen Drucker, die auf das <em/Windows Printing System/ angewiesen sind. In Prospekten oder Handbüchern werden diese Drucker gerne als »Drucker für Windows« oder als GDI-Drucker bezeichnet. Diese Drucker funktionieren <em>nicht</em> mit Linux. Dieses liegt darin begründet, daß diese Drucker im Prinzip nur das eigentliche Druckwerk und eine Schnittstelle zum PC enthalten. Das führt dazu, daß der PC viele Aufgaben beim Drucken übernehmen muß, die der Drucker normalerweise selbst erledigt. Die gesamte Intelligenz des Druckers steckt deshalb in den Druckertreibern, die auf dem PC installiert sind. Bisher gibt es solche Treiber nur für Windows und selbst dort gibt es teilweise Probleme, passende Treiber zu bekommen. Wenn Sie Linux einsetzen möchten, sollten Sie also sehr aufpassen, nicht einen GDI-Drucker zu kaufen. Auch sonst lohnt sich die Anschaffung von GDI-Druckern nicht, da vernünftige Geräte kaum teurer sind und erheblich weniger Probleme verursachen. Wenn Sie bereits einen solchen Drucker besitzen, gibt es Möglichkeiten, um Linux zur Zusammenarbeit zu bewegen, aber diese sind unzureichend. Weitere Informationen zu diesem Typ von Druckern finden Sie in Abschnitt <ref id="DE-Drucker-HOWTO-gdi" name="GDI-Drucker">. <p> Die beste Wahl für Linux sind Drucker, die einen Interpreter für PostScript enthalten. Fast jedes Unix-Programm produziert PostScript-Daten, wenn gedruckt werden soll, so daß es offensichtlich keine schlechte Idee ist, einen Drucker zu verwenden, der diese Seitenbeschreibungssprache direkt versteht. Im professionellen Bereich wird fast ausschließlich auf PostScript als Druckersprache gesetzt, da PostScript viele Vorteile bietet. Gegen Drucker mit PostScript-Unterstützung sprechen vor allem die Kosten. PostScript findet man standardmäßig eigentlich nur bei teurer Laserdruckern. Ganz selten gibt es auch Tintenstrahldrucker mit PostScript. Bei den meisten Druckern muß man für die PostScript-Unterstützung mindestens Zusatzkosten von 300,- DM einkalkulieren. <p> Wenn Sie die zusätzlichen Kosten eines PostScript-Druckers scheuen, so können Sie einen Drucker anschaffen der von Ghostscript unterstützt wird. Ghostscript ist ein kostenloser PostScript-Interpreter für Linux. Mittels dieses Programmes können Sie PostScript-Daten in die Druckersprache Ihres Druckers übersetzen. Ihr Drucker wird also quasi zu einem PostScript-Drucker. Auf der <em>Ghostscript Homepage</em>, die Sie unter der Adresse <tscreen><htmlurl url="http://www.cs.wisc.edu/˜ghost/" name="http://www.cs.wisc.edu/˜ghost/"></tscreen> erreichen, finden Sie eine Liste der unterstützten Drucker und Informationen über den Status von neuen und experimentellen Treibern. <p> Adobe hat eine neue Druckersprache namens <em/PrintGear/ entwickelt. Es handelt sich dabei wohl um eine stark vereinfachte Sprache im Binärformat, die einiges von PostScript geerbt hat, aber nicht dazu kompatibel ist. Anscheinend gibt es bisher keine Unterstützung durch Ghostscript für diese neue Druckersprache. <sect1>Drucker-spezifische Bemerkungen <nidx>Drucker!Canon</nidx> <nidx>Drucker!Lexmark</nidx> <p> Dieser Abschnitt ist unvollständig und wird es immer sein. Aber die enthaltenen Informationen sollten korrekt sein. <descrip> <tag/Canon BJ-10ex/ Ein Bericht schlägt vor, daß der Canon sehr viel besser im Epson LQ Modus arbeitet, der per DIP-Schalter eingeschaltet werden kann. Anscheinend war die Ausgabe im Canon-Modus unterbrochen oder falsch. Andererseits gibt es mittlerweile bessere Unterstützung für Canon-Drucker in Ghostscript, so daß sich dieses Problem erledigt haben dürfte. <tag/Lexmark/ Lexmark stellt viele verschiedene Drucker her; viele sind allerdings GDI-Drucker: <itemize> <item>Color Jetprinter 1000 <item>Color Jetprinter 1020 (non Business Edition) <item>Color Jetprinter 2030 <item>Color Jetprinter 2050 <item>Color Jetprinter 2070 <item>Color Jetprinter 7000 <item>Color Jetprinter 7200 <item>Winwriter 100 <item>Winwriter 150c <item>Winwriter 200 </itemize> </descrip> <sect>Welche Spool-Software? <nidx>Drucker!Spoolsoftware</nidx> <nidx>LPRng</nidx> <nidx>lpd</nidx> <p> Bis vor kurzem war die Wahl für Linux-Anwender einfach; jeder verwendete denselben alten <tt/lpd/, der fast komplett aus der Net-2-Distribution von BSD übernommen wurde. Auch heute liefern die meisten Distributoren noch diese Software aus. Aber das beginnt sich zu verändern. SVR4-ähnliche Systeme wie Sun Solaris kommen mit einem komplett anderen Spool-Paket, das auf lpsched beruht. Es gibt ferner Anzeichen, daß einige Linux-Distributoren auf LPRng umsteigen werden, eine wesentlich neuere Implementierung, die frei erhältlich ist. LPRng ist für große Installationen wesentlich einfacher zu verwalten und besitzt einen nicht so erschreckend zusammengewürfelten Code wie der ursprüngliche <tt/lpd/. Es kann sogar wirklich von sich behaupten, sicher zu sein; es gibt keine SUID-Teile, und es unterstützt Authentisierung via PGP oder Kerberos. <p> Im Moment ist der <tt/lpd/ wohl für die meisten Linuxanwender trotz der neuen Möglichkeiten der anderen Programme die beste Lösung. Denn obwohl es sich nicht um das schönste System handelt, funktioniert es sehr gut, wenn es erst einmal eingerichtet ist. Sollten Probleme auftauchen, hat man den Vorteil, daß sich viele Leute mit dem <tt/lpd/ auskennen und einem so helfen können. Außerdem ist der <tt/lpd/ in vielen Unix-Büchern gut dokumentiert. <p> Weitere Informationen über LPRng sind auf der LPRng-Seite zu finden: <tscreen><htmlurl url="http://www.astart.com/lprng/LPRng.html" name="http://www.astart.com/lprng/LPRng.html"></tscreen> <sect>Grundlagen <p> Damit das Drucken gut funktioniert, ist es wichtig, die Funktionsweise des lpd-Systems zu verstehen. <p> Lpd steht für <em/Line Printer Daemon/ und bezieht sich je nach Zusammenhang entweder auf den Daemon selbst oder auf die gesamten Programme, die für das Druck-Spooling zuständig sind. Hierzu gehören: <p> <descrip> <tag><tt>lpd</tt></tag> Dieses ist der eigentlich Daemon, der für die Ausgabe der Daten auf den Drucker sorgt. <tag><tt>lpr</tt></tag> Mittels dieses Befehls kann der Anwender Druckaufträge in die Warteschlange des lp-Daemon abschicken. <tag><tt>lpq</tt></tag> Listet die Aufträge in einer Drucker-Warteschlange auf. <tag><tt>lpc</tt></tag> Der Lpd-Systemkontrollbefehl. Mit <tt/lpc/ können die Warteschlangen gestoppt, gestartet, umsortiert, etc. werden. <tag><tt>lprm</tt></tag> <tt/lprm/ entfernt einen Auftrag aus der Warteschlange. </descrip> <p> Und wie paßt das alles zusammen? Nun, wenn der Computer bootet, wird der <tt/lpd/ gestartet. Der Daemon durchsucht die Datei <tt>/etc/printcap</tt>, um festzustellen, für welche Drucker Warteschlangen verwaltet werden. Jedesmal, wenn man <tt/lpr/ aufruft, nimmt <tt/lpr/ mit dem <tt/lpd/ durch den Named Socket <tt>/dev/printer</tt> Verbindung auf und übergibt dem <tt/lpd/ die zu druckende Datei und einige Informationen, wer druckt und wie zu drucken ist. <tt/lpd/ druckt dann die Datei auf dem passenden Drucker aus. <p> Das lp-System wurde ursprünglich entwickelt, als die meisten Drucker Zeilendrucker waren. Die Drucker kannten weder verschiedene Zeichensätze noch Grafikmodi. Es wurde vom lp-Daemon einfach der Text im ASCII-Format an den Drucker übertragen. Daß das lp-System auch heute noch verwendet werden kann, liegt darin begründet, daß auch heute das lp-System einzig die Aufgabe hat, die Druckdaten, z.B. in PCL oder PostScript, an den Drucker zu übertragen. <sect>Grundeinstellungen <sect1>Traditionelle lpd-Konfiguration <nidx>Drucker!/etc/printcap</nidx> <nidx>printcap</nidx> <nidx>/etc/printcap</nidx> <p> Die Minimaleinstellungen für <tt/lpd/ liefern ein System, das Dateien in Warteschlangen verwalten und sie drucken kann. Es kümmert sich aber nicht darum, ob der Drucker die Dateien überhaupt versteht und wird vermutlich keine ansehnlichen Ausgaben produzieren. Trotzdem ist diese einfache Konfiguration der erste Schritt, um das System zu verstehen. <p> Um eine neue Warteschlange zu erzeugen, muß man einen Eintrag in <tt>/etc/printcap</tt> hinzufügen und ein neues Spool-Verzeichnis unter <tt>/var/spool/lpd</tt> erzeugen. <p> Ein Eintrag in <tt>/etc/printcap</tt> sieht etwa so aus: <tscreen><verb> # lokaler DeskJet 500 lp|dj|deskjet:\ :sd=/var/spool/lpd/dj:\ :mx#0:\ :lp=/dev/lp0:\ :sh: </verb></tscreen> Dies definiert eine Warteschlange mit den Namen <tt/lp/, <tt/dj/ und <tt/deskjet/, wobei <tt>/var/spool/lpd/dj</tt> als Spool-Verzeichnis benutzt wird. Die maximale Größe der Aufträge ist nicht begrenzt und am Anfang der Druckaufträge wird kein Deckblatt, z.B. mit dem Namen der Person, die den Druckauftrag abgeschickt hat, ausgegeben. Der Drucker würde in diesem Beispiel an <tt>/dev/lp0</tt> hängen. <p> Jetzt wäre der richtige Augenblick, um die <em>printcap Manual Page</em> zu lesen. <p> <nidx>Drucker!Treffeneffekt</nidx> Das obige Beispiel sieht sehr einfach aus, hat aber ein Problem. Wenn man nicht Dateien an das Drucksystem übergibt, die ein DeskJet 500 verstehen kann, wird dieser Drucker seltsame Sachen ausgeben. Wenn man z.B. eine gewöhnlichen UNIX-Textdatei an den Deskjet schickt, wird man folgende Ausgabe erhalten: <tscreen><verb> Zeile eins Zeile zwei Zeile drei </verb></tscreen> Verursacht wird dieser Fehler dadurch, daß Linux einen Zeilenumbruch in einer Textdatei anders kodiert als DOS und Windows, deren Kodierung die meisten Drucker erwarten. Würde eine PostScript-Datei ausgegeben, würde der Drucker einfach die PostScript-Befehle ausdrucken, statt diese zu interpretieren. <p> <nidx>printcap!Filter</nidx> <nidx>Drucker!Filter</nidx> <nidx>printcap!if-Option</nidx> Offensichtlich wird mehr benötigt, und genau das ist die Aufgabe von Filtern. Dem aufmerksamen Leser werden bei der <em>printcap Manual Page</em> die Spool-Attribute <tt/if/ und <tt/of/ aufgefallen sein. <tt/if/, der Inputfilter, ist genau das, was wir jetzt brauchen. <p> Um das Problem mit dem Zeilenumbruch beim Drucken von Textdateien zu lösen, könnte man ein Shellskript mit dem Namen <tt/filter/ schreiben, das die Kodierung des Zeilenumbruches anpaßt. Damit der <tt/lpd/ dieses Skript aufruft, muß dem <tt/printcap/-Eintrag des Druckers eine <tt/if/-Zeile hinzugefügt werden: <tscreen><verb> lp|dj|deskjet:\ :sd=/var/spool/lpd/dj:\ :mx#0:\ :lp=/dev/lp0:\ :if=/var/spool/lpd/dj/filter:\ :sh: </verb></tscreen> Ein einfaches Filterskript könnte sein: <tscreen><verb> #!perl # Die obige Zeile muß den kompletten Pfad zu perl # enthalten. Dieses Skript muß ausführbar sein: # chmod 755 filter while(<STDIN>){chop $_; print "$_\r\n";}; # Eventuell möchte man, daß am Ende des Druckauftrages # ein Seitenvorschub ausgeführt wird. Dieses ist # insbesondere bei Tintenstrahl- und Laserdruckern # sinnvoll: #print "\f"; </verb></tscreen> Würde man das System so konfigurieren, hätte man eine Warteschlange, die wunderbar für UNIX-Textdateien funktionieren würde. Natürlich gibt es vier Millionen bessere Möglichkeiten, diesen Filter zu schreiben, aber wenige sind so anschaulich. Der Leser möge dieses effizienter gestalten. <p> Das einzige verbleibende Problem besteht darin, daß man heute meistens keine Textdateien drucken möchte. Vielmehr sollen meistens PostScript- oder Grafikdateien ausgegeben werden. Auch dieses Problem läßt sich mit einem Inputfilter lösen. Dazu muß einfach der obige Zeilenumbruch-Filter erweitert werden. Wenn man einen Filter schreibt, der beliebige Dateitypen akzeptiert und diese in DeskJet-geeignete Ausgaben umwandelt, hat man wirklich einen cleveren Druck-Spooler. <p> So ein Filter wird <em/Magic/-Filter genannt. Man sollte sich nicht die Mühe machen und selber einen schreiben, solange man keine wirklich ungewöhnlichen Sachen drucken will. Es gibt bereits einige wirklich gute Filter. Der <idx>APS-Filter</idx> ist einer der besten Filter. Viele Linux-Distributionen werden auch mit Setup Tools für den Drucker ausgeliefert, die die Konfiguration von Druckern und passenden Filtern deutlich erleichtern. <sect1>Dateizugriffsrechte <nidx>Drucker!Dateizugriffsrechte</nidx> <p> Auf Grund von häufigen Nachfragen folgt hier eine Liste der Zugriffsrechte der wichtigen Dateien, wie sie auf meinem System gesetzt sind. Es gibt sicherlich bessere Möglichkeiten, aber so wurde das System installiert und es funktioniert. <tscreen><verb> -r-sr-sr-x 1 root lp /usr/bin/lpr* -r-sr-sr-x 1 root lp /usr/bin/lprm* -rwxr--r-- 1 root root /usr/sbin/lpd* -r-xr-sr-x 1 root lp /usr/sbin/lpc* drwxrwxr-x 4 root lp /var/spool/lpd/ drwxr-xr-x 2 root lp /var/spool/lpd/lp/ </verb></tscreen> <p> <tt/lpd/ muß momentan als root aufgerufen werden, da nur root das Recht hat, den Netzwerk-Port für lp zu belegen. Im Prinzip könnte der Daemon nach der Initialisierung seine UID ändern, wie das eigentlich jeder gut programmierte Daemon machen sollte. Der <tt/lpd/ tut dieses zur Zeit aber nicht. <sect>Woher man Drucker-Software bekommt <nidx>Drucker!Bezugsquellen</nidx> <p> Viele fertige Filterpakete und weitere Software rund ums Drucken sind auf folgendem Server zu finden: <tscreen><htmlurl name="metalab.unc.edu:/pub/Linux/system/printing/" url="ftp://metalab.unc.edu/pub/Linux/system/printing/"></tscreen> Hier können auch Utilities wie psutils, a2ps, mpage, dvitodvi, flpr usw. bezogen werden. <p> Eine Zeitlang gab es mehrere Pakete, die alle versuchten, die Druckereinrichtung zu vereinfachen. Sie existieren wahrscheinlich alle noch, aber eines der besten und aktuellsten ist das APS-Filter Paket von Andreas Klemm, das über eine menügeführte <tt/printcap/-Einrichtung verfügt und praktisch mit allen denkbaren Datentypen klarkommt. Wenn Ihr Distributor keine gute Druckereinrichtung mitliefert, ist APS die richtige Wahl. <sect>Distributionsabhängige Lösungen <label id="DE-Drucker-HOWTO-distribution"> <p> Dieser Abschnitt ist per Definition unvollständig. Sie können gerne Details Ihrer eigenen Lieblingsdistribution schicken. <sect1>Red Hat <nidx>Drucker!Red Hat</nidx> <nidx>Red Hat</nidx> <p> Red Hat besitzt ein grafisches Druckerverwaltungsprogramm (im Control Panel), mit dem man sowohl entfernte als auch lokale Drucker einrichten kann. Es läßt den Benutzer einen von Ghostscript unterstützten Drucker und das Unix Device, auf das gedruckt werden soll, auswählen und installiert sowohl eine Drucker-Queue in <tt>/etc/printcap</tt> als auch ein kurzes PostScript- und ASCII-Filterscript, das auf <tt/gs/ und auf <tt/nenscript/ basiert. Diese Lösung funktioniert ziemlich gut, und ist für normale Anforderungen einfach einzurichten. <sect1>Sonstige Distributionen <p> Der Autor bittet um Informationen, was andere Distributionen machen. <sect>Ghostscript <label id="DE-Drucker-HOWTO-ghostscript"> <nidx>Ghostscript</nidx> <p> Ghostscript, das von <tscreen><htmlurl name="http://www.cs.wisc.edu/˜ghost/" url="http://www.cs.wisc.edu/˜ghost/"></tscreen> bezogen werden kann, ist ein unglaublich wichtiges Programm, um unter Linux zu drucken. Die meisten Programme unter Unix generiert PostScript und nur wenige, meistens teurere Drucker unterstützen PostScript direkt. Ghostscript allerdings ist frei und übersetzt die PostScriptbefehle in die Drucksprache des verwendeten Druckers. Wenn Ghostscript in Verbindung mit einem <tt/lpd/-Eingabefilter verwendet wird, erhält man einen virtuellen PostScript-Drucker und das erleichtert das Leben enorm. <p> Ghostscript gibt es in zwei Ausführungen. Die kommerzielle Version von Ghostscript, <em/Aladdin Ghostscript/, darf zwar frei verwendet, aber nicht mit kommerziellen Linux-Distributionen verbreitet werden. Die kommerzielle Version ist dem freien Ghostscript normalerweise um ungefähr ein Jahr voraus; im Moment unterstützt es beispielsweise bereits das Portable Document Format (PDF) des Adobe Acrobat, während die älteren Ghostscripts dies nicht tun. <p> Die freie Version von Ghostscript ist <em/GNU Ghostscript/. Die GNU-Version ist einfach eine ältere Version von Aladdin Ghostscript, die freundlicherweise GNU überlassen wurde. Ein großes Lob hierfür an Aladdin für diese Regelung; mehr Softwarehersteller sollten freie Software so unterstützen. <p> Was Sie auch immer mit <tt/gs/ anfangen, vergewissern Sie sich unbedingt, es mit der Option für ausgeschaltete Dateizugriffe (<tt/-dSAFER/) zu starten. PostScript ist eine voll funktionale Sprache und erlaubt z.B. das Ausführen von externen Programmen, was zu echten Sicherheitsproblemen führen kann, da z.B. der <tt/lpd/ ja als root läuft. <p> Was PDF angeht, so ist Adobes Portable Document Format in Wirklichkeit wenig mehr als organisiertes PostScript in einer gepackten Datei. Ghostscript kommt mit PDF genausogut klar wie mit PostScript. Daher könnten Sie in Ihrer Gegend der erste mit einem PDF-fähigen Drucker sein. <sect1>Aufruf von Ghostscript <p> Normalerweise wird Ghostscript von dem Magic-Filter aufgerufen, den Sie verwenden; allerdings ist es zur Fehlersuche oft nützlich, Ghostscript direkt aufzurufen. <p> <tt>gs -help</tt> gibt eine kurze, informative Übersicht über die Optionen und verfügbaren Treiber aus. Hierbei sollte man beachten, daß nur die Treiber angezeigt sind, die in <tt/gs/ einkompiliert worden sind. Falls der gewünschte Drucker nicht angezeigt wird, könnte es sich also lohnen, <tt/gs/ selbst zu kompilieren. <p> Sie können gs für Testzwecke folgendermaßen aufrufen: <tscreen> gs <em>optionen</em> -q -dSAFER -sOutputFile=/dev/lp1 test.ps </tscreen> <sect1>Feineinstellung der Ausgabe <p> Es gibt eine Reihe von Dingen, die man machen kann, wenn die Ausgabe von <tt/gs/ nicht zufriedenstellend ist. Tatsächlich können Sie alles machen, was Ihnen Spaß macht, da Ihnen der Quelltext zur Verfügung steht. <sect2>Position und Größe <p> Die Position, die Größe und das Seitenverhältnis des Bildes auf einer Seite wird vom spezifischen Druckertreiber in Ghostscript kontrolliert. Wenn Sie feststellen, daß Ihre Seiten gestaucht oder gestreckt ausgegeben werden oder um einen Faktor 2 zu groß sind, sollten Sie vielleicht in das Quelltext-Modul Ihres Treibers schauen und all die Parameter einstellen, die Ihnen auffallen. Unglücklicherweise ist jeder Treiber anders, so daß sich schlecht pauschal sagen läßt, was wie eingestellt werden muß. Aber die meisten Treiber sind ausreichend gut kommentiert. <sect2>Gamma, Punktgröße usw. <p> Die meisten Nicht-Laserdrucker leiden unter der Tatsache, daß ihre Punkte recht groß sind, so daß sich die einzelnen Punkte teilweise überdecken. Dies führt dazu, daß Bilder zu dunkel ausgegeben werden. Wenn Sie dieses Problem haben, sollten Sie Ihre eigene Korrekturfunktion verwenden. Erstellen Sie einfach die folgende Datei im Ghostscript <tt/lib/-Verzeichnis und fügen Sie ihren Namen dem <tt/gs/-Aufruf genau vor der eigentlichen zu druckenden Datei hinzu. Eventuell müssen die tatsächlichen Werte der Datei an den verwendeten Drucker angepaßt werden. Niedrigere Werte führen zu einem helleren Ausdruck. Besonders, wenn der benutzte Treiber den Floyd-Steinberg Algorithmus verwendet, um Farben zu rastern, sind kleine Werte (0.20-0.15) wahrscheinlich eine gute Wahl. <tscreen><verb> ---8<---- gamma.ps ----8<--- %! %transfer functions for cyan magenta yellow black {0.3 exp} {0.3 exp} {0.3 exp} {0.3 exp} setcolortransfer ---8<------------------8<--- </verb></tscreen> <p> Es ist durch Veränderung dieser Werte auch möglich, Drucker zu korrigieren, die irgendeine Art von Farbfehler besitzen. Wenn Sie so etwas tun, ist es empfehlenswert, die Datei <tt/colorcir.ps/ zu benutzen, die Ghostscript im <tt/examples/-Verzeichnis als Testseite beiliegt. <sect>Drucker in einem Netzwerk <nidx>Drucker!Netzwerk</nidx> <p> Eine der Fähigkeiten von <tt/lpd/ ist es, daß man über ein Netzwerk auf Druckern drucken kann, die physikalisch an einen anderen Rechner angeschlossen sind. Mit einer sorgfältigen Kombination von Filterskripten und anderen Utilities kann man mit <tt/lpr/ transparent auf allen möglichen Druckern über alle möglichen Netzwerke drucken. <sect1>UNIX/lpd Server <nidx>Drucker!Netzwerk!lp</nidx> <p> Um es anderen Rechnern zu ermöglichen, auf dem eigenen Drucker zu drucken, müssen diese Rechner in <tt>/etc/hosts.equiv</tt> oder <tt>/etc/hosts.ldp</tt> aufgelistet werden. Hierbei sollte man beachten, daß <tt/hosts.equiv/ viele weitere Effekte hat; man sollte sich sicher sein, was man tut, wenn man hier einen Rechner auflistet. Man kann auch nur bestimmten Benutzern des anderen Rechners erlauben, auf dem eigenen Drucker zu drucken, indem man das <tt/rs/-Attribut benutzt; siehe dazu auch die <em>lpd Manual Page</em> für mehr Informationen. <sect2>Client <p> Um auf einem anderen Rechner zu drucken, erstelle man einen <tt>/etc/printcap</tt>-Eintrag wie diesen: <tscreen><verb> # DeskJet 500 als Netzwerkdrucker lp|dj|deskjet:\ :sd=/var/spool/lpd/dj:\ :rm=geraet.da.draussen.de:\ :rp=druckername:\ :lp=/dev/null:\ :sh: </verb></tscreen> Hierbei gibt <tt/rm/ die Internetadresse des Rechners, an dem der Drucker angeschlossen ist, und <tt/rp/ die Warteschlange an. Beachten Sie, daß es weiterhin ein Spool-Verzeichnis auf dem lokalen Rechner gibt, das von <tt/lpd/ verwaltet wird. Wenn der Netzwerkrechner beschäftigt oder nicht erreichbar ist, bleiben Druckaufträge des lokalen Rechners im Spoolverzeichnis, bis sie gesendet werden können. <sect2>rlpr <nidx>rlpr</nidx> <nidx>Drucker!rlpr</nidx> <p> Man kann auch <tt>rlpr</tt> benutzen, um einen Druckauftrag direkt in eine Warteschlange auf einem Netzwerkrechner zu schicken, ohne sich die Mühe zu machen, den lokalen <tt/lpd/ entsprechend einzurichten. Das ist besonders sinnvoll, wenn man nur selten auf verschiedenen Druckern druckt. Aus der Beschreibung von <tt>rlpr</tt>: <p> <tt/rlpr/ verwendet TCP/IP, um Druckaufträge an <tt/lpd/-Server in einem Netzwerk zu schicken. <p> Anders als bei <tt/lpr/ müssen die Netzwerkdrucker dem lokalen Rechner nicht bekannt sein (z.B. durch <tt>/etc/printcap</tt>). Deshalb ist <tt/rlpr/ wesentlich flexibler und benötigt weniger Verwaltung. <p> <tt/rlpr/ kann überall da verwendet werden, wo ein traditionelles <tt/lpr/ verwendet werden kann und ist abwärts-kompatibel zum traditionellen BSD <tt/lpr/. <p> Der Hauptvorteil von <tt/rlpr/ ist die Möglichkeit, <em>von überall nach überall</em> zu drucken, ohne Rücksicht darauf, wie das System, von dem aus man drucken will, konfiguriert ist. <tt/rlpr/ kann genau wie das traditionelle lpr als Filter arbeiten, so daß Clients, die auf einem Netzwerkrechner laufen (z.B. Netscape, XEmacs, etc.) ohne größere Probleme auf Ihrem lokalen Rechner drucken können. <p> <tt/rlpr/ ist erhältlich von: <tscreen><htmlurl name="metalab.unc.edu:/pub/Linux/system/Printing/" url="ftp://metalab.unc.edu/pub/Linux/system/Printing/"></tscreen> <sect1>Win95, WinNT, LanManager oder Samba Server <nidx>Drucker!Netzwerk!Windows</nidx> <nidx>Drucker!Netzwerk!Samba</nidx> <nidx>Samba!Drucker</nidx> <p> Es ist möglich, mit dem <tt>smbclient</tt>-Programm (Bestandteil des Samba-Pakets) eine <tt/lpd/-Warteschlange für einen TCP/IP-basierenden SMB-Druckservice einzurichten. Samba beinhaltet hierfür ein Script namens <tt/smbprint/. Kurz gesagt legt man eine Konfigurationsdatei für den gewünschten Drucker im Spoolverzeichnis an und installiert das <tt/smbprint/-Script als <tt/if/. <p> Der <tt>/etc/printcap</tt>-Eintrag sieht wie folgt aus: <tscreen><verb> lp|remote-smbprinter:\ :lp=/dev/null:sh:\ :sd=/var/spool/lpd/lp:\ :if=/usr/local/sbin/smbprint: </verb></tscreen> <p> Sie sollten die Dokumentation im <tt/smbprint/-Skript lesen, um weitere Informationen zu erhalten. <p> Man kann auch <tt>smbclient</tt> verwenden, um eine Datei direkt an einen SMB-Druckservice zu schicken, ohne <tt>lpd</tt> zu benutzen. Wie dieses funktioniert, ist in der Manual Page nachzulesen. <sect1>Netware Server <nidx>Drucker!Netzwerk!Netware</nidx> <nidx>Netware</nidx> <nidx>ncpfs!Drucker</nidx> <p> Im ncpfs-Paket ist ein Programm namens <tt/nprint/ enthalten, das die gleichen Funktionen wie <tt/smbprint/ für NetWare bietet. ncpfs ist erhältlich bei: <tscreen><htmlurl url="ftp://metalab.unc.edu/pub/Linux/system/filesystems/ncpfs/" name="metalab.unc.edu:/pub/Linux/system/filesystems/ncpfs/"></tscreen> Auszug dem LSM-Eintrag von Version 0.16: <quote> Mit ncpfs kann man Laufwerke auf dem Netzwerk-Server unter Linux mounten. Man kann auch über Netware-Warteschlangen drucken und Netware-Warteschlangen im Linux Drucksystem spoolen. Es wird ein Kernel 1.2.x oder 1.3.54 oder höher benötigt. ncpfs funktioniert <em>nicht</em> mit 1.3.x-Kernels unter 1.3.54. </quote> <p> Damit <tt/nprint/ über <tt/lpd/ arbeitet, schreibt man ein kleines Shellscript, das als <tt/if/ für die entsprechende <tt/lpd/-Warteschlange aufgerufen wird. Dieses Script gibt die Druckdaten, die es vom dem <tt/lpd/ erhält, dann auf dem Netware-Drucker aus. <tscreen><verb> sub2|remote-NWprinter:\ :lp=/dev/null:sh:\ :sd=/var/spool/lpd/sub2:\ :if=/var/spool/lpd/nprint-script: </verb></tscreen> Das <tt>nprint-script</tt> könnte ungefähr so aussehen: <tscreen><verb> #! /bin/sh # Als erstes sollten Sie den guest Account mit keinem # Paßwort ausprobieren! /usr/local/bin/nprint -S net -U name -P passwd \ -q printq-name - </verb></tscreen> <sect1>Apple Server <nidx>Drucker!Netzwerk!Appletalk</nidx> <nidx>Netatalk!Drucker</nidx> <nidx>Appletalk</nidx> <p> Im netatalk-Paket ist etwas Ähnliches wie <tt/nprint/ und <tt/smbclient/ enthalten. Andere Leute haben die Vorgehensweise beim Drucken über und von einem Apple-Netzwerk aus wesentlich besser beschrieben, als ich es jemals werde; bitte schauen Sie sich hierfür das <em>Linux Netatalk HOWTO</em> auf <tt><htmlurl name="http://thehamptons.com/anders/netatalk/" url="http://thehamptons.com/anders/netatalk/"></tt> an. <sect1>Drucker mit Ethernetanschluß <nidx>Drucker!Netzwerk!Ethernetanschluß</nidx> <p> Drucker für den professionellen Einsatz verfügen häufig über ein Ethernet-Interface. Die meisten dieser Geräte unterstützen direkt das lp-Protokoll, so daß man sie einfach per lpd und der <tt/rp/-Option ansprechen. Man sollte den Anweisungen folgen, die mit dem Drucker oder dem Netzwerkadapter des Druckers geliefert wurden. Ein Drucker von HP könnte z.B. mit einem solchem <tt/printcap/-Eintrag arbeiten: <tscreen><verb> lj-5|remote-hplj:\ :lp=/dev/null:sh:\ :sd=/var/spool/lpd/lj-5:\ :rm=printer.name.com:rp=raw: </verb></tscreen> <p> HP LaserJet Drucker mit <idx>JetDirect</idx> Interface stellen im allgemeinen zwei eingebaute Queues zur Verfügung: <descrip> <tag/raw/ Akzeptiert Druckdaten in PCL und eventuell PostScript. <tag/text/ Kann zum Druck von reinen ASCII-Dateien verwendet werden, wobei der beschriebene Treppeneffekt automatisch korrigiert wird. </descrip> Wenn Sie eine JetDirect Plus3 3-Port Box besitzen, besitzen die Queues die Bezeichnungen »raw1«, »text2« usw. <p> In einem großen Netz, in dem einige Drucker kein PostScript unterstützen, könnte es sinnvoll sein, einen Print-Server einzurichten, auf dem alle Rechner drucken und auf dem alle Ghostscript-Jobs laufen. <p> Dies erlaubt Ihrem Linux-Rechner auch, als Spool-Server zu arbeiten, so daß die Netzwerkbenutzer ihre Druckaufträge schnell beenden und weiterarbeiten können, ohne darauf warten zu müssen, daß der Drucker erst fremde Aufträge fertigstellt. <p> Um dies zu erreichen, richten Sie eine Queue auf Ihrem Linux-Rechner ein, die auf den HP Laserjet mit Ethernetkarte verweist (siehe oben). Nun stellen Sie alle Clientrechner in Ihrem LAN so ein, daß sie die Linux-Queue benutzen (z.B. lj-5 im Beispiel oben). <p> Anscheinend beachten einige HP Netzwerkdrucker die Deckblatteinstellungen nicht, die von den Clients geschickt werden; Sie können das intern generierte Deckblatt abschalten, indem Sie sich per telnet auf den Drucker einloggen, zweimal Return drücken und danach <tt/banner: 0/ gefolgt von <tt/quit/ eingeben. Sie können auch andere Einstellungen auf diese Art verändern; tippen Sie <tt/?/ ein, um eine Liste angezeigt zu bekommen. <sect2>Alte HP-Drucker <nidx>Drucker!Netzwerk!HP</nidx> <p> Einige Drucker und externe Druckserver haben zwar eine Ethernetschnittstelle, unterstützen jedoch nicht das <tt/lp/-Protokoll. Oftmals finden statt dessen spezielle Treiber Verwendung, die für Linux natürlich nicht existieren. Einige dieser Geräte speichern Druckaufträge auch nicht zwischen, so daß es einen Rechner geben muß, der Druckjobs sammelt und nacheinander an den Drucker schickt. Erwähnenswert in dieser Kategorie sind frühe JetDirect und einige JetDirectEx Karten. Grundsätzlich muß man zum Drucken auf diesen Drucker eine TCP-Verbindung zu dem Drucker auf einem bestimmten Port (typischerweise 9100, oder 9100, 9101 und 9102 für 3-Port Boxen) öffnen und den Druckauftrag hier durch schicken. Das kann u.a. in Perl implementiert werden: <tscreen><verb> #!/usr/bin/perl # Dank gebührt Dan McLaughlin, der die Originalversion # dieses Skriptes geschrieben hat. $fileName = @ARGV[0]; open(IN,"$fileName") || die "Kann Datei $fileName nicht öffnen"; $dpi300 = "\x1B*t300R"; $dosCr = "\x1B&ero;k3G"; $ends = "\x0A"; $port = 9100 unless $port; $them = "bach.sr.hp.com" unless $them; $AF_INET = 2; $SOCK_STREAM = 1; $SIG{'INT'} = 'dokill'; $sockaddr = 'S n a4 x8'; chop($hostname = `hostname`); ($name,$aliases,$proto) = getprotobyname('tcp'); ($name,$aliases,$port) = getservbyname($port,'tcp') unless $port =˜ /^\d+$/;; ($name,$aliases,$type,$len,$thisaddr) = gethostbyname($hostname); ($name,$aliases,$type,$len,$thataddr) = gethostbyname($them); $this = pack($sockaddr, $AF_INET, 0, $thisaddr); $that = pack($sockaddr, $AF_INET, $port, $thataddr); if (socket(S, $AF_INET, $SOCK_STREAM, $proto)) { # print "socket ok\n"; } else { die $!; } # Gibt dem Socket eine Adresse if (bind(S, $this)) { # print "bind ok\n"; } else { die $!; } # Ruft den Server auf. if (connect(S,$that)) { # print "connect ok\n"; } else { die $!; } # Setzt Befehlspuffer für den Socket. select(S); $| = 1; select(STDOUT); # print S "@PJL ECHO Hi $hostname! $ends"; # print S "@PJL OPMSG DISPLAY=\"Job $whoami\" $ends"; # print S $dpi300; # Durch Aufteilung Deadlock verhindern. if($child = fork) { print S $dosCr; print S $TimesNewR; while (<IN>) { print S; } sleep 3; do dokill(); } else { while(<S>) { print; } } sub dokill { kill 9,$child if $child; } </verb></tscreen> <sect1>Filter für Netzwerkdrucker <nidx>Drucker!Netzwerk!Filter</nidx> <nidx>printcap!Netzwerkdrucker</nidx> <p> Eine Eigenart von <tt/lpd/ ist, daß ein <tt/if/ für Netzwerkdrucker nicht aufgerufen wird. Wenn das nötig sein sollte, kann man eine doppelte Warteschlange einrichten und den Job an die zweite Warteschlange weitergeben. Ein Beispiel für eine passende <tt/printcap/ könnte so aussehen: <tscreen><verb> lj-5:remote-hplj:\ :lp=/dev/null:sh:\ :sd=/var/spool/lpd/lj-5:\ :if=/usr/lib/lpd/filter-lj-5: lj-5-remote:lp=/dev/null:sh:rm=printer.name.com:\ :rp=raw:sd=/var/spool/lpd/lj-5-raw: </verb></tscreen> Das passenden <tt/filter-lj-5/-Script wäre dabei: <tscreen><verb> #!/bin/sh gs <options> -q -dSAFER -sOutputFile=- - | \ lpr -Plj-5-remote -U$5 </verb></tscreen> <p> Die Option <tt/-U/ von <tt/lpr/ funktioniert nur, wenn <tt/lpr/ als ein Daemon gestartet wurde und setzt den Namen des Auftraggebers in der weitergegebenen Warteschlange. Man sollte eventuell eine stabilere Methode verwenden, um den Benutzernamen zu ermitteln, denn manchmal ist es nicht Argument 5. Weitere Informationen finden sich in der Manual Page zur <tt>printcap</tt>. <sect1>Windows Client <nidx>Drucker!Netzwerk!Windows</nidx> <nidx>Drucker!Netzwerk!Samba</nidx> <nidx>Samba!Drucker</nidx> <p> Drucken von einem Windows (oder wohl auch OS/2) Client auf eine Linuxmaschine wird über SMB direkt unterstützt, wenn man das Samba-Paket benutzt, das auch die Benutzung Ihres Linux-Filesystems von Windows aus ermöglicht. <p> Samba beinhaltet eine ziemlich vollständige Dokumentation, und es gibt die recht gute <em>Samba-FAQ</em>, welche sich ebenfalls damit beschäftigt. Sie können entweder einen Magic-Filter auf dem Linuxrechner einrichten und PostScript darauf ausgeben, oder druckerspezifische Treiber auf allen Windows-Maschinen installieren und eine Queue ganz ohne Filter benutzen. Sich auf die Windows-Treiber zu stützen sorgt manchmal für ein besseres Druckbild, ist aber etwas mehr administrativer Aufwand bei vielen Windows-Rechnern. Sie sollten es daher zuerst mit PostScript versuchen. <sect1>Apple Client <nidx>Drucker!Netzwerk!Appletalk</nidx> <nidx>Netatalk!Drucker</nidx> <nidx>Appletalk</nidx> <p> Netatalk unterstützt das Drucken von Apple-Clients über EtherTalk. Siehe hierfür auch die <em>Netatalk HOWTO</em> Page unter: <tscreen><htmlurl name="http://thehamptons.com/anders/netatalk/" url="http://thehamptons.com/anders/netatalk/"></tscreen> <sect1>Netware Client <nidx>Drucker!Netzwerk!Netware</nidx> <nidx>ncpfs!Drucker</nidx> <nidx>Netware</nidx> <p> Das ncpfs-Paket beinhaltet einen Daemon namens pserver, der benutzt werden kann, um Dienste für eine NetWare Druck-Queue zur Verfügung zu stellen. Soweit ich es verstanden habe, benötigt dieses System ein »Bindery«-basiertes NetWare, z.B. 2.x, 3.x oder 4.x, mit eingeschaltetem Bindery-Zugriff. <p> Für mehr Informationen über ncpfs und sein pserver-Programm sollten Sie einen Blick auf die ncpfs FTP-Site unter folgender Adresse werfen: <tscreen><htmlurl url="ftp://ftp.gwdg.de/pub/linux/misc/ncpfs/" name="ftp.gwdg.de:/pub/linux/misc/ncpfs/"></tscreen> <sect>GDI-Drucker <label id="DE-Drucker-HOWTO-gdi"> <nidx>GDI-Drucker</nidx> <p> Wie schon vorher erklärt wurde, werden einige Drucker unter Linux nicht unterstützt, weil sie keine normale Druckersprache benutzen, sondern den Hauptprozessor benutzen, um das Bild auszurechnen, das dann mit fester Geschwindigkeit an den Drucker übertragen wird. Manchmal verstehen solche Drucker auch etwas anderes als normales PCL. Meistens ist dieses jedoch nicht der Fall, statt dessen liegen den Druckern manchmal Treiber für Windows bei, die PCL per Software emulieren, was für andere Betriebssysteme natürlich nicht sehr hilfreich ist. In einigen extremen Fällen besitzen die Drucker nicht einmal eine normale Parallelverbindung, sondern benötigen auch noch spezielle Treiber für die Ansteuerung der Schnittstelle. <p> In jedem Fall gibt es einige mögliche Auswege, wenn Sie eine solche »Zitrone« erwischt haben. Der beste Ausweg dürfte sein, den Drucker an einen Windowsbenutzer weiterzuverkaufen. <sect1>Der Ghostscript Windows Druckertreiber <nidx>mswinpr2</nidx> <p> Es gibt mittlerweile einen Windows Druckertreiber (namens mswinpr2), der einen Druckauftrag durch Ghostscript leitet, bevor er ihn druckt. Das Prinzip ist ähnlich einem <tt/if/-Filter bei einem <tt/lpd/. Es gibt auch einen neuen Ghostscripttreiber, der nicht eine spezielle Druckersprache verwendet, sondern über die Windows-Druckschnittstelle druckt. Zusammengenommen sollte dies einem Windows-Rechner erlauben, PostScript auf einem Windows-only-Drucker über den Herstellertreiber auszugeben. <p> Wenn Sie dieses zum Laufen bringen, können Sie den Anweisungen oben folgen, um von Linux aus über das Netzwerk auf einen Windows-Drucker zu drucken und es so Rechnern zu ermöglichen, auf Ihrer »Zitrone« zu arbeiten. <p> Sämtliche nötige Software sollte auf der Ghostscript-Homepage, siehe Abschnitt <ref id="DE-Drucker-HOWTO-ghostscript" name="Ghostscript">, verfügbar sein. <sect1>pbm2ppa <nidx>pbm2ppa</nidx> <nidx>Drucker!HP PPA</nidx> <p> Einige HP Drucker benutzen die <em/Printing Performance Architecture/. Diese wird über einen Umweg durch den <tt/pbm2ppa/ Umsetzer von Tim Norman unterstützt. Im Grunde benutzt man Ghostscript, um PostScript in eine Bitmapgrafik im pbm-Format umzuwandeln, und dann <tt/pbm2ppa/, um aus dieser das druckerspezifische ppa-Format zu generieren, das dann auf dem Drucker ausgegeben werden kann. Mittlerweile könnte es dieses Programm auch als Ghostscript Druckertreiber geben. <p> Die ppa-Software kann von der ppa Homepage heruntergeladen werden, die unter folgender Adresse zu finden ist: <tscreen><htmlurl url="http://www.rpi.edu/˜normat/technical/ppa/" name="http://www.rpi.edu/˜normat/technical/ppa/"></tscreen> <tt/pbm2ppa/ unterstützt einige Modelle der Serien HP 720, 820 und 1000; bitte lesen Sie die Anleitung zum Paket für mehr Details zur ppa-Drucker Unterstützung. <sect>Faxen <nidx>Fax</nidx> <sect1>Faxen mit einem Modem <nidx>HylaFax</nidx> <nidx>efax</nidx> <p> Es gibt einige Faxprogramme, mit denen man faxen und Dokumente empfangen kann. Eines der komplexesten ist Sam Lefflers <em/HylaFax/, erhältlich bei SGI: <tscreen><htmlurl url="ftp://ftp.sgi.com" name="ftp.sgi.com"></tscreen> Es unterstützt alle möglichen Funktionen, von mehreren Modems bis zum Broadcasting. <p> SuSE liefert einen Java HylaFax-Client, der angeblich auf jeder Java Plattform (inklusive Windows und Linux) läuft. Es gibt auch Fax-Clients, die nicht in Java geschrieben worden sind, für die meisten Plattformen; Linux kann mit ziemlicher Sicherheit Ihren Netzwerk-Fax-Anforderungen genügen. <p> Ebenfalls verfügbar, und die bessere Wahl für die meisten Linuxrechner ist <em/efax/. Dieses ist ein einfaches Programm, das Faxe sendet. Das getty-Programm <em/mgetty/ kann Faxe empfangen und mit manchen Modems auch einen Anrufbeantworter emulieren. <sect1>Remote Printing Service <p> Einige Firmen und Organisationen bitten im Internet das Versenden und teilweise auch das Empfangen von Faxen per EMail oder WWW an. Teilweise werden diese Leistungen sogar kostenlos angeboten, wobei dann neben dem eigentlichen Dokument oft auch Werbung übermittelt wird. <p> Es werden hierbei Übertragungsformate wie ASCII oder PostScript unterstützt. Weitere Informationen finden Sie z.B. auf der <em>Remote Priting</em> WWW-Seite unter: <tscreen><htmlurl url="http://www.tpc.int/" name="http://www.tpc.int/"></tscreen> <sect>Textverarbeitung <p> Hier kommt man in ein wahres Rattennest an Software. Grundsätzlich kann man nicht nur auf die speziell für Linux erhältlichen Programme zurückgreifen, sondern z.B. auch ältere Programme für Windows oder DOS über einen Emulator benutzen. Dieses ist allerdings aus verschiedenen Gründen nicht ratsam. <sect1>Formatierungssprachen <p> Die meisten Formatierungssprachen sind am besten für große oder sich wiederholende Projekte geeignet, in denen man dem Computer die Kontrolle über das Layout überlassen möchte, damit alles einheitlich aussieht. Folgende Sprachen haben eine große Verbreitung unter Linux Benutzern: <p> <descrip> <tag><tt>nroff</tt></tag> <nidx>nroff</nidx> <nidx>groff</nidx> <nidx>man</nidx> Diese war eine der ersten Formatierungssprachen für UNIX. Manual Pages sind das häufigste Beispiel für Texte, die mit *roff-Makros formatiert wurden; einige Leute schwören darauf, aber nroff hat eine recht komplizierte Syntax und findet deshalb heute kaum noch Verwendung. Man sollte aber trotzdem wissen, daß man eine Manual Page mit groff direkt nach PostScript konvertieren kann. Die meisten man-Befehle machen das mit <tscreen>man -t foo | lpr</tscreen> <tag/TeX/ <nidx>TeX</nidx> <nidx>LaTeX</nidx> TeX und das Makropaket LaTeX gehören zu den am häufigsten verwendeten Formatierungssprachen auf UNIX-Systemen. LaTeX wird vor allem für technische Werke eingesetzt, da es eigentlich das einzige Textverarbeitungssystem ist, mit dem man mathematische Formel vernünftig setzen kann und das ohne Probleme mit sehr großen Dokumenten umgehen kann. Ein weiterer Vorteil ist, daß LaTeX eigentlich für fast jeden Rechnertyp diese Erde verfügbar ist und selbst auf sehr langsamen Rechnern problemlos läuft. <p> TeX wird, vor allem von Leuten, die es noch nie benutzt haben, nachgesagt, es wäre schwierig zu bedienen und im Zeitalter der Officeprodukte schlicht veraltet. Solchen Aussagen sollte man nicht viel Bedeutung schenken. Die Grundfunktionen erlernt man in wenigen Stunden. Der Hauptvorteil von LaTeX ist, daß der Benutzer im Gegensatz zu vielen anderen Programmen keine Layout-Kenntnisse haben muß, sondern LaTeX im Prinzip nur mitteilen muß, um was für einen Text es sich handelt, also z.B. um eine Überschrift. Die Formatierung übernimmt LaTeX. <p> Das Ausgabeformat von TeX ist <tt/dvi/ und kann mit <tt/dvips/ oder <tt/dvilj/ nach PostScript bzw. Hewlett Packards PCL konvertiert werden. <tag/SGML/ <nidx>sgml-tools</nidx> Bei SGML werden in einem noch viel stärkeren Maß wie bei LaTeX der Inhalt und die Formatierung getrennt. Der Benutzer beschreibt im Idealfall nur den Inhalt der einzelnen Zeilen. Nach Fertigstellung des Textes wird dieser dann mit speziellen Konvertern in die eigentlichen Ausgabeformate umgesetzt. Durch die Trennung von Inhalt und Formatierung ist es zum einen sehr leicht, die Dateien in viele verschiedene Ausgabeformate zu konvertieren. Außerdem ist es sehr leicht, die eigentliche Formatierung von einigen 1000 Dateien nachträglich mit wenigen Befehlen zu ändern. Unter Linux findet zur Zeit vor allem das freie sgml-tools Paket Verwendung, mit dem z.B. alle HOWTOs geschrieben werden: <tscreen><htmlurl url="http://www.sgmltools.org/" name="http://www.sgmltools.org/"></tscreen> Dieses Paket ist jedoch nicht vollständig fehlerfrei und die Trennung von Inhalt und Formatierung ist bisher nur sehr begrenzt realisiert. Zur Zeit wird daran gearbeitet, daß Paket auf die bekannte DocBook-DTD umzustellen. </descrip> <sect1>WYSIWYG <p> Mittlerweile gibt es keinen Mangel an WYSIWYG Textverarbeitungssoftware mehr. Es gibt mehrere vollständige Office-Pakete: <descrip> <tag/StarOffice/ <nidx>StarOffice</nidx> Die deutsche Firma StarDivision bietet ihr StarOffice für Linux zum kostenlosen Download im Internet an. Allerdings darf diese Version nur privat genutzt werden und leider auch nicht mit den Linux Distributionen zusammen verbreitet werden. Eine kommerzielle Version wird von Caldera verkauft. StarOffice ist vor allem für Benutzer interessant, die mit diesem Programm bereits unter anderen Betriebssystemen wie Windows gearbeitet haben. Gegen die Nutzung sprechen zum einen die enormen Anforderungen an die eigene Hardware, eine schnelle 586er CPU mit 64 MB Speicher sind das absolute Minimum, und zum anderen die Mißachtung fast aller UNIX-Standards. So bringt das Programm einen eigenen Window-Manager und Desktop mit, die beide, wie die Oberfläche selbst auch, Win95 nachempfunden sind. <tag/LyX/ <nidx>LyX</nidx> LyX ist ein Frontend für LaTeX, das vielversprechend aussieht. Auf der LyX Homepage gibt es weitere Informationen: <tscreen><htmlurl url="http://www-pu.informatik.uni-tuebingen.de/users/ettrich/" name="http://www-pu.informatik.uni-tuebingen.de/users/ettrich/"></tscreen> Es gibt auch eine KDE-gerechte Version von LyX namens Klyx; der Autor von LyX und der Initiator des KDE-Projekts sind ein und dieselbe Person. <tag/Das Andrew User Interface System/ <nidx>AUIS</nidx> AUIS beinhaltet <tt/ez/, einen WYSIWYG-artigen Editor mit grundlegenden Textverarbeitungsfähigkeiten, HTML und voller MIME-eMail- und Newsgroup-Unterstützung. Leider wird AUIS nicht länger gepflegt. <tag/Koffice/ <nidx>Koffice</nidx> Das KDE-Projekt arbeitet an einem kompletten Office-Paket. Dieses dürfte zur Zeit aber noch nicht benutzbar sein. <tag/GNOME/ <nidx>GNOME</nidx> Auch das GNOME-Projekt arbeitet an mehreren Office-Tools mit GNU-Lizenz. Allerdings sind noch keine verfügbar. <tag/WordPerfect/ <nidx>WordPerfect</nidx> <nidx>Corel WordPerfect</nidx> Es existiert eine auf Linux portierte Version von Corels WordPerfect. Informationen hierzu finden sich unter: <tscreen><htmlurl url="http://www.corel.com" name="http://www.corel.com"></tscreen> Corel hat außerdem bekanntgegeben, daß man plant, zukünftig weitere Produkte nach Linux zu portieren. <tag/Applixware/ <nidx>Applixware</nidx> Eine recht weite Verbreitung hat das kommerzielle Officepaket Applixware unter Linux-Benutzern gefunden. Das Programmpaket kann recht preiswert von allen größeren Linux-Vertreibern bezogen werden. Applix ist für viele Plattformen verfügbar und beinhaltet eine Tabellenkalkulation, eine Textverarbeitung, ein Präsentationspaket usw. Es gibt eine weitere Version von Applix in Java namens ApplixAnyWhere. Weitere Informationen zu diesen Paketen sind unter <tscreen><htmlurl url="http://www.applixware.com" name="http://www.applixware.com"></tscreen> erhältlich. </descrip> <sect>Voransicht von druckbaren Sachen auf dem Bildschirm <p> Unter Linux können viele Datenformate, die für den Druck fertig formatierte Dokumente erhalten, nicht nur gedruckt, sondern auch auf dem Bildschirm angezeigt werden. Dies kann zum einen bei der Erstellung eines Dokumentes nützlich sein, da dieses dann nicht immer gleich zur Korrektur ausgedruckt werden muß, zum anderen können so auch die Dokumente anderer Autoren auf dem Bildschirm betrachtet werden. <sect1>PostScript <p> Ghostscript kann nicht nur zur Ausgabe von PostScriptdateien auf Druckern verwendet werden, sondern es ermöglicht mittels des X11-Treibers auch, solche Dateien auf dem Bildschirm anzuzeigen. Allerdings wird man in den wenigsten Fällen Ghostscript direkt aufrufen. Viel mehr benutzt man einen der beiden PostScript-Betrachter: <itemize> <item><idx>Ghostview</idx> <item><idx>gv</idx> </itemize> Beide Programme benutzen intern Ghostscript. Sie erlauben es, bequem zwischen den einzelnen Seiten zu blättern, bestimmte Seiten auszuwählen, um sie zu speichern oder zu drucken und vieles mehr. Es empfiehlt sich, nur gv anstelle von Ghostview zu verwenden, da gv über einige zusätzliche Möglichkeiten verfügt und im Gegensatz zu Ghostview noch aktiv entwickelt wird. Neben PostScript kann gv auch PDF-Dateien anzeigen. <sect1>TeX DVI <nidx>xdvi</nidx> <p> TeX DeVice-Independant-files (geräteunabhängige Dateien) können unter X11 mit <tt/xdvi/ betrachtet werden. Um einige Beschränkungen von TeX zu umgehen, binden einige Makropakete direkt PostScript-Befehle in die DVI-Dateien ein. Da <tt/xdvi/ diese Daten nicht selbst auswerten kann, wird auch hier auf Ghostscript zurückgegriffen, so daß es empfehlenswert ist, Ghostscript zu installieren, wenn man TeX benutzt. <p> Es gibt ebenfalls einen VT100-Treiber. Er wird <tt/dgvt/ genannt. <tt/Tmview/ benutzt die svgalib statt X11, um die Dateien anzuzeigen. Da die svgalib jedoch nicht mehr weiterentwickelt wird und auch eine Insellösung von Linux ist, sollte besser auf <tt/xdvi/ zurückgegriffen werden. <sect1>Adobe PDF <nidx>Adobe Acrobat</nidx> <nidx>xpdf</nidx> <nidx>gv</nidx> <nidx>PDF</nidx> <p> Adobes Acrobat Reader gibt es auch für Linux. Er kann von der Adobe-WWW-Seite bezogen werden: <tscreen><htmlurl name="http://www.adobe.com/" url="http://www.adobe.com/"></tscreen> <p> Neben dem Programm von Adobe gibt es noch das freie Programm <tt/xpdf/, das jedoch etliche Einschränkungen im Vergleich zu dem Programm von Adobe hat und deshalb nicht zu empfehlen ist. Eine gute Alternative stellt allerdings gv mit Ghostscript da. So berechnet gv immer die komplette Seite, so daß man wesentlich besser scrollen kann. Nachteilig ist allerdings, daß es keine Suchfunktion gibt. <sect>Serielle Drucker unter lpd <sect1>Einstellungen in der printcap <p> <tt/lpd/ besitzt 5 Attribute, die in der <tt>/etc/printcap</tt> eingestellt werden können, um die Einstellungen einer seriellen Schnittstelle zu kontrollieren, an die der Drucker angeschlossen ist. Die Beschreibung der Attribute ist in der <em>printcap Manual Page</em> zu finden, wobei man vor allem die Bedeutung von <tt/br#/, <tt/fc#/, <tt/xc#/, <tt/fs#/ und <tt/xs#/ beachten sollte. Die letzten vier dieser Attribute sind Bitmaps, die für die Einstellungen dieser Schnittstelle stehen. Das <tt/br#/-Attribut ist einfach die Baudrate, z.B. `<tt/br#9600/': <p> <nidx>stty</nidx> Es ist sehr einfach, die <tt/stty/-Einstellungen in <tt/printcap/ Flags zu übersetzen. Wenn nötig, studieren Sie nun bitte die Manual Page von <tt/stty/. <p> Benutzen Sie <tt/stty/, um die Schnittstelle zum Drucker so einzustellen, daß man eine Datei über sie mit cat an den Drucker schicken kann, und diese dann korrekt ausgegeben wird. So könnte die Ausgabe von `<tt/stty -a/' für eine Schnittstelle z.B. aussehen. <tscreen><verb> # stty -a < /dev/ttyS2 speed 9600 baud; rows 0; columns 0; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; min = 1; time = 0; -parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon -ixoff -iuclc -ixany -imaxbel -opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 -isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke </verb></tscreen> Die einzigen Unterschiede zwischen diesen Einstellungen und der Initialisierung beim Booten sind <tt/-clocal/, <tt/-crtscts/ und <tt/ixon/. Die Ausgabe bei ihrer Schnittstelle kann durchaus anders aussehen, da dieses von der Flußkontrolle Ihres Druckers abhängt. <p> Wirklich verwendet wird <tt/stty/ auf eine etwas ungewöhnliche Weise. Ursprünglich war <tt/stty/ dafür gedacht, die Einstellungen eines Terminals anzupassen. Deswegen gibt <tt/stty/ die Steuerzeichen auf der Standardausgabe aus. Um mit dem Programm die Einstellungen einer beliebigen seriellen Schnittstelle zu manipulieren, muß deshalb wie oben das <tt/</-Zeichen verwendet werden. <p> Sobald die <tt/stty/-Einstellungen richtig sind, man also mit <tscreen>cat datei > /dev/ttyS2</tscreen> eine Datei an der Drucker, hier an <tt>/dev/ttyS2</tt>, schicken kann, sollte man die Datei <tt>/usr/src/linux/include/asm-i386/termbits.h</tt> betrachten. Diese Datei enthält viele <tt>#define</tt>- und einige <tt/struct/-Zeilen. Man betrachte den Abschnitt, der mit <tscreen><verb> /* c_cflag bit meaning */ #define CBAUD 0000017 </verb></tscreen> anfängt. Dieser Abschnitt listet die Bedeutungen der <tt/fc#/- und <tt/fs#/-Teile auf. Ihnen wird auffallen, daß die Namen (nach den Baudraten) mit einer der <tt/stty/-Ausgabeleitungen übereinstimmen. Habe ich nicht gesagt, daß es leicht sein würde? <p> Achten Sie auf die Einstellungen, die mit einem »<tt/-/« in der <tt/stty/-Ausgabe anfangen. Wenn man alle diese Nummern aufsummiert (sie sind oktal), erhält man die Bits, die man löschen will. Also ist das die <tt/fc&num/-Einstellung. Erinnern Sie sich daran, daß Sie diese Bits direkt nach dem Löschen setzen werden, also können Sie einfach <tt/fc#0177777/ verwenden. <p> Jetzt macht man das gleiche für die Einstellungen, die kein »<tt/-/« vor sich haben. In dem Beispiel sind die wichtigsten <tt/CS8/ (0000060), <tt/HUPCL/ (0002000) und <tt/CREAD/ (0000200). Beachten Sie auch die Flags für die Baudrate. Zählen Sie alle zusammen und Sie bekommen in diesem Beispiel 0002275 heraus. Dieses ist der Wert für die <tt/fs#/-Option. <p> Machen Sie das gleiche mit <tt/set/ und <tt/clear/ für den nächsten Abschnitt der Includedatei, <tt/"c_lflag bits"/. <sect1>Ältere serielle Drucker, die Zeichen verschlucken <p> Jon Luckey hat festgestellt, daß einige ältere serielle Drucker mit sehr schlechten seriellen Interfaces und kleinen Buffern <em/wirklich/ Stop meinen, wenn sie das mit ihrer Flußkontrolle sagen. Er fand heraus, daß sich das Problem lösen läßt, wenn der FIFO-Buffer des 16550-UARTs mit <tt/setserial/ ausgeschaltet wird. Hierfür gibt man einfach den UART-Typ 8250 an. <sect>Dank <p> Die Informationen über <tt/smbprint/ sind aus einem Artikel von Marcel Roelofs (<tt><htmlurl name="marcel@paragon.nl" url="mailto:marcel@paragon.nl"></tt>). <p> Die Informationen über <tt/nprint/, um NetWare-Drucker zu verwenden, wurden von Michael Smith (<tt><htmlurl name="mikes@bioch.ox.ac.uk" url="mailto:mikes@bioch.ox.ac.uk"></tt>) zur Verfügung gestellt. <p> Der Abschnitt <em/Serielle Drucker und lpd/ ist von Andrew Tefft (<tt><htmlurl name="teffta@engr.dnet.ge.com" url="mailto:teffta@engr.dnet.ge.com"></tt>). <p> Der Teil über die Gammakorrektur und weitere Tips rund um Ghostscript stammt von Andreas (<tt><htmlurl name="quasi@hub-fue.franken.de" url="mailto:quasi@hub-fue.franken.de"></tt>). <p> Die zwei Abschnitte über die 30-Sekunden-<tt>closing_wait</tt> des seriellen Treibers sind von Chris Johnson (<tt><htmlurl name="cdj@netcom.com" url="mailto:cdj@netcom.com"></tt>). <p> Robert Hart hat ein paar hervorragende Abschnitte über das Einrichten eines Printservers für vernetzte HPs eingeschickt, die ich wörtlich verwendet habe. <p> Besonderer Dank geht an die vielen von euch, die auf Tippfehler, falsche URLs und Sachfehler im Dokument im Laufe der Jahre aufmerksam gemacht haben. </article>