  Linux Drucker HOWTO
  Grant Taylor (gtaylor@picante.com), Jens Vonderheide
  (Jens_Vonderheide@wharfrat.fido.de) und Robert Fendt
  (fendt@student.physik.uni-dortmund.de)
  v3.17-3, 14. September 1998

  Dieser Text ist eine Zusammenfassung von Informationen, wie man unter
  Linux (und anderen UNIX-Derivaten) Dokumente generiert, ansieht,
  druckt oder faxt.


  1.  Einleitung

  Die Drucker HOWTO sollte alles beinhalten, was sie wissen mssen, um
  Druckdienste auf Linux-Maschinen einzurichten. Die Installation von
  Druckern unter Linux ist zwar komplizierter als bei anderen
  Betriebssystemen, dafr ist die Lsung von Linux bzw. Unix erheblich
  flexibler und auch in groen Netzverbunden ohne Probleme einsetzbar.

  Dieses Dokument ist so strukturiert, da die meisten Leute nur etwa
  die erste Hlfte lesen mssen. Die meisten der schwierigeren und
  situationsabhngigen Informationen finden sich in der zweiten Hlfte
  und knnen im Inhaltsverzeichnis leicht gefunden werden, wobei ein
  Groteil der Informationen in den Abschnitten ``Distributionsabhngige
  Lsungen'' bzw. ``Ghostscript'' wahrscheinlich von den meisten Leuten
  gebraucht wird.

  Diese HOWTO ist mit der Version 3 komplett neu geschrieben worden,
  deshalb sind viele Informationen aus frheren Versionen
  verlorengegangen. Das ist Absicht, da die alten Versionen 60 Seiten
  und mehr umfaten und den Erzhlflu einer toten Schildkrte hatten.
  Wer hier keine passende Antwort findet, sollte zum einen die
  vorhergehende Version auf der Printing HOWTO Home Page


       http://www.picante.com/~gtaylor/pht/


  durchsuchen und zum anderen dem Autor einen Nachricht hinterlassen,
  was in dieser HOWTO noch stehen sollte.

  Die alten Versionen stehen nur in englischer Sprache zur Verfgung.

  Die Printing HOWTO-Home Page ist eine gute Stelle, um die aktuelle
  (englische) Version dieser HOWTO zu bekommen.

  Die deutsche Version ist auf


       http://www.tu-harburg.de/dlhp/


  zu bekommen.  Hier sind auch weitere deutsche bersetzungen zu haben.
  Fr die Koordination des deutschen HOWTO-Projekts ist Marco Budde
  (Budde@tu-harburg.de) verantwortlich.


  1.1.  Anmerkungen zur bersetzung

  Die bersetzer haben sich bemht, mglichst wrtlich zu bersetzen.
  Daher wurden in dieser HOWTO-bersetzung auch die Stze 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.

  Um die Verstndlichkeit zu erhalten, sind einige Fachbegriffe, die im
  Englischen selbst-erklrend sind, unbersetzt geblieben:

     Spool
        Warteschlange. Hier warten Druckauftrge, bis der Drucker
        bereit ist.


     Device
        Wrtlich: Gert. Kann sich auf ein physikalisches Gert wie den
        Drucker beziehen, bezeichnet aber meistens ein logisches Gert
        fr Linux, z.B. lp1.


     Manual Page
        Handbuchseite. Beschreibt einen Befehl o.. Wird durch man
        <Befehl> angezeigt.



  1.2.  Copyright

  Dieses Dokument ist urheberrechtlich geschtzt. Das Copyright fr die
  englische Printing HOWTO, auf der dieses Dokument basiert, liegt bei
  Grant Taylor. Das Copyright fr die deutsche bersetzung liegt bei
  Jens Vonderheide, Robert Fendt und Marco Budde.

  Das Dokument darf gem der GNU GPL kostenlos verbreitet werden. Das
  bedeutet, da der Text sowohl ber elektronische wie auch
  physikalische Medien ohne die Zahlung von Lizenzgebhren verbreitet
  werden darf, solange dieser Copyright-Hinweis nicht entfernt wird.
  Eine kommerzielle Verbreitung ist erlaubt und sogar erwnscht. Bei
  einer Verbreitung in Papierform ist das deutsche HOWTO-Projekt
  hierber zu informieren.


  2.  Wie druckt man?

  Wenn lpd bereits so eingerichtet ist, da man drucken kann, dann mu
  nur noch der Gebrauch des lpr-Kommandos erlernt werden.  Dieses ist
  jedoch nicht Gegenstand dieser HOWTO. Zu diesem Thema gibt es eine
  eigene HOWTO, die Printing Usage HOWTO.

  Wenn Sie allerdings ein neues System oder einen neuen Drucker haben,
  dann werden Sie die Druckdienste auf die eine oder andere Weise
  einrichten mssen, bevor Sie drucken knnen.


  3.  Kernel-Drucker-Devices

  3.1.


  lp-Device

  Der Linux-Kernel (<=2.1.32), falls das lp-Device einkompiliert oder
  geladen wurde (die Ausgabe von cat /proc/devices sollte das Device lp
  einschlieen), stellt ein oder mehr Devices /dev/lp0, /dev/lp1 und
  /dev/lp2 zur Verfgung. Diese werden nicht dynamisch zugeordnet,
  sondern korrespondieren vielmehr mit einer bestimmten I/O-Adresse der
  Hardware. Das heit, da der erste Drucker entweder lp0 oder lp1 sein
  kann, abhngig von der verwendeten Hardware. Testen Sie einfach beides
  ;-).

  Einige Leute haben berichtet, da ihre bidirektionalen lp-Ports nicht
  erkannt wurden, wenn sie ein altes, unidirektionales Kabel
  verwendeten. berprfen Sie also, ob Sie ber ein vernnftiges Kabel
  verfgen.

  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 spten 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 gendert hat; es bleibt abzuwarten, ob es auch
  eine einfache Kommandozeilen-Methode gibt.

  Es gibt ein kleines Utility namens tunelp, mit dem man als root den
  verwendeten Interrupt, die bertragungsgeschwindigkeit und anderes
  eines lp-Device einstellen kann.

  Wenn der Treiber in den Kernel eingebunden wurde, knnen mit der
  lp=-Option whrend des Bootvorganges die Portadressen und Interrupts
  eingestellt werden. Die Option hat folgenden Syntax:



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




  Um die Portadresse 0x378 und keinen Interrupt (Polling) zu verwenden,
  wrde dann folgendes benutzt werden:



       lp=0x378,0




  Mit nachfolgender Option wrde die Adresse 0x278 mit dem Interrupt 5
  und die Adresse 0x387 mit dem Interrupt 7 verwendet werden:



       lp=0x278,5,0x378,7





  Die Einstellungen des letzten Beispieles spiegeln die Standardwerte
  fr die beiden parallelen Schnittstellen wieder.

  Wenn diese Funktion benutzt wird, mssen alle Ports angegeben werden,
  die bercksichtigt werden sollen, es gibt keine Voreinstellungen. Der
  eingebaute Treiber kann mit lp=0 deaktiviert werden.

  Wenn der Treiber als Modul geladen wird, knnen die Adressen und
  Interrupts in der blichen Syntax dem insmod-Kommando bergeben
  werden. Falls der kerneld Verwendung findet, knnen die Einstellungen
  in der Datei /etc/conf.modules vorgenommen werden.  Die Parameter sind
  io=port0,port1,port2 und irq=irq0,irq1,irq2. Weitere Informationen
  liefert die Manual Page zu insmod.

  Der Quelltext fr den Linux Parallelporttreiber befindet sich in der
  Datei /usr/src/linux/drivers/char/lp.c.


  3.2.  parport-Device

  Beginnend mit Kernel 2.1.33 (und verfgbar als Patch fr 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 qulten: ein Port kann
  mit anderen Treibern geteilt werden, den verfgbaren Parallelports
  werden dynamisch Device-Nummern zugeordnet, anstatt eine feste
  Zuordnung zu erzwingen, und einiges mehr.

  Die Verfgbarkeit des parport-Devices hat eine ganze Reihe neuer
  Treiber fr den Parallelport ermglicht, so z.B. fr parallele ZIP-
  Laufwerke, externe CD-ROMs und Festplatten. Einige davon sind auch fr
  Kernel 2.0.x verfgbar; weitere Informationen hierzu finden sich im
  WWW.

  Eine Dokumentation zum parport-Treiber ist in den Kernelquellen in der
  Datei Documentation/parport.txt zu finden. Auch ein Blick auf die
  parport-Webseite unter folgender Adresse knnte sinnvoll sein:

       http://www.cyberelk.demon.co.uk/parport.html



  3.3.  Serielle Devices

  Die Devices serieller Schnittstellen heien unter Linux /dev/ttySx,
  wobei x die spezielle Schnittstelle bezeichnet. Die erste serielle
  Schnittstelle wre also /dev/ttyS0.

  Das Programm stty erlaubt es, interaktiv die Einstellungen fr die
  seriellen Schnittstellen anzusehen oder zu verndern; mit setserial
  knnen einige erweiterte Attribute eingestellt werden und IRQs bzw.
  I/O-Adressen fr nicht-standardmige Schnittstellen konfiguriert
  werden. Weitere Informationen ber serielle Schnittstellen knnen in
  der Serial HOWTO nachgelesen werden.

  Wenn man einen langsamen seriellen Drucker mit serieller Flukontrolle
  benutzt, kann es sein, da einige Druckauftrge nicht vollstndig
  ausgedruckt werden. Das kann mit der seriellen Schnittstelle
  zusammenhngen. Damit die von einem Programm gelieferten Daten nicht
  verloren gehen, wenn der Drucker per Flukontroller 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.

  Diese Puffer kann 4096 Zeichen aufnehmen. 30 Sekunden nachdem das
  Programm das Schnittstellendevice geschlossen hat, lscht 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.

  Wenn der Befehl

       cat file > /dev/ttySx


  kurze Dateien komplett ausdruckt, bei lngeren aber das Ende abschnei
  det, knnte genau dieser Fall vorliegen.
  Die 30-Sekunden-Wartezeit kann durch die closing_wait-
  Kommandozeilenoption von setserial (Version 2.12 oder spter)
  eingestellt werden. Die seriellen Schnittstellen eines Rechners werden
  blicherweise durch einen Aufruf von setserial in einer der
  Bootdateien initialisiert.  Der Aufruf fr den Port, an dem der
  Drucker hngt, kann so modifiziert werden, da zusammen mit den
  anderen Parametern die closing_wait-Option eingestellt wird.



  4.



  Untersttzte Drucker

  Der Linux-Kernel untersttzt praktisch alle Drucker, die man an eine
  serielle oder parallele Schnittstelle anschlieen kann, aber es gibt
  einige Dinge, auf die man achten sollte, und auch einige Drucker, die
  Sie nicht werden benutzen knnen, obwohl sie elektrisch gesehen mit
  Linux kommunizieren knnen.

  Zu diesen gehren vor allem jene inkompatiblen Drucker, die auf das
  Windows Printing System angewiesen sind. In Prospekten oder
  Handbchern werden diese Drucker gerne als Drucker fr Windows oder
  als GDI-Drucker bezeichnet. Diese Drucker funktionieren nicht mit
  Linux. Dieses liegt darin begrndet, da diese Drucker im Prinzip nur
  das eigentliche Druckwerk und eine Schnittstelle zum PC enthalten. Das
  fhrt 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 fr Windows und
  selbst dort gibt es teilweise Probleme, passende Treiber zu bekommen.
  Wenn Sie Linux einsetzen mchten, sollten Sie also sehr aufpassen,
  nicht einen GDI-Drucker zu kaufen. Auch sonst lohnt sich die
  Anschaffung von GDI-Druckern nicht, da vernnftige Gerte kaum teurer
  sind und erheblich weniger Probleme verursachen. Wenn Sie bereits
  einen solchen Drucker besitzen, gibt es Mglichkeiten, um Linux zur
  Zusammenarbeit zu bewegen, aber diese sind unzureichend.  Weitere
  Informationen zu diesem Typ von Druckern finden Sie in Abschnitt
  ``GDI-Drucker''.

  Die beste Wahl fr Linux sind Drucker, die einen Interpreter fr
  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 ausschlielich auf PostScript als Druckersprache gesetzt, da
  PostScript viele Vorteile bietet. Gegen Drucker mit PostScript-
  Untersttzung sprechen vor allem die Kosten. PostScript findet man
  standardmig eigentlich nur bei teurer Laserdruckern.  Ganz selten
  gibt es auch Tintenstrahldrucker mit PostScript.  Bei den meisten
  Druckern mu man fr die PostScript-Untersttzung mindestens
  Zusatzkosten von 300,- DM einkalkulieren.

  Wenn Sie die zustzlichen Kosten eines PostScript-Druckers scheuen, so
  knnen Sie einen Drucker anschaffen der von Ghostscript untersttzt
  wird. Ghostscript ist ein kostenloser PostScript-Interpreter fr
  Linux. Mittels dieses Programmes knnen Sie PostScript-Daten in die
  Druckersprache Ihres Druckers bersetzen. Ihr Drucker wird also quasi
  zu einem PostScript-Drucker. Auf der Ghostscript Homepage, die Sie
  unter der Adresse

       http://www.cs.wisc.edu/~ghost/


  erreichen, finden Sie eine Liste der untersttzten Drucker und Infor
  mationen ber den Status von neuen und experimentellen Treibern.



  Adobe hat eine neue Druckersprache namens PrintGear entwickelt. Es
  handelt sich dabei wohl um eine stark vereinfachte Sprache im
  Binrformat, die einiges von PostScript geerbt hat, aber nicht dazu
  kompatibel ist. Anscheinend gibt es bisher keine Untersttzung durch
  Ghostscript fr diese neue Druckersprache.



  4.1.

  Drucker-spezifische Bemerkungen

  Dieser Abschnitt ist unvollstndig und wird es immer sein. Aber die
  enthaltenen Informationen sollten korrekt sein.

     Canon BJ-10ex
        Ein Bericht schlgt 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
        Untersttzung fr Canon-Drucker in Ghostscript, so da sich
        dieses Problem erledigt haben drfte.


     Lexmark
        Lexmark stellt viele verschiedene Drucker her; viele sind
        allerdings GDI-Drucker:


       Color Jetprinter 1000

       Color Jetprinter 1020 (non Business Edition)

       Color Jetprinter 2030

       Color Jetprinter 2050

       Color Jetprinter 2070

       Color Jetprinter 7000

       Color Jetprinter 7200

       Winwriter 100

       Winwriter 150c

       Winwriter 200


  5.


  Welche Spool-Software?

  Bis vor kurzem war die Wahl fr Linux-Anwender einfach; jeder
  verwendete denselben alten 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 verndern. 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 erhltlich ist. LPRng
  ist fr groe Installationen wesentlich einfacher zu verwalten und
  besitzt einen nicht so erschreckend zusammengewrfelten Code wie der
  ursprngliche lpd. Es kann sogar wirklich von sich behaupten, sicher
  zu sein; es gibt keine SUID-Teile, und es untersttzt Authentisierung
  via PGP oder Kerberos.

  Im Moment ist der lpd wohl fr die meisten Linuxanwender trotz der
  neuen Mglichkeiten der anderen Programme die beste Lsung. Denn
  obwohl es sich nicht um das schnste 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 lpd
  auskennen und einem so helfen knnen. Auerdem ist der lpd in vielen
  Unix-Bchern gut dokumentiert.

  Weitere Informationen ber LPRng sind auf der LPRng-Seite zu finden:

       http://www.astart.com/lprng/LPRng.html



  6.  Grundlagen

  Damit das Drucken gut funktioniert, ist es wichtig, die Funktionsweise
  des lpd-Systems zu verstehen.

  Lpd steht fr Line Printer Daemon und bezieht sich je nach
  Zusammenhang entweder auf den Daemon selbst oder auf die gesamten
  Programme, die fr das Druck-Spooling zustndig sind.  Hierzu gehren:


     lpd
        Dieses ist der eigentlich Daemon, der fr die Ausgabe der Daten
        auf den Drucker sorgt.


     lpr
        Mittels dieses Befehls kann der Anwender Druckauftrge in die
        Warteschlange des lp-Daemon abschicken.


     lpq
        Listet die Auftrge in einer Drucker-Warteschlange auf.


     lpc
        Der Lpd-Systemkontrollbefehl. Mit lpc knnen die Warteschlangen
        gestoppt, gestartet, umsortiert, etc. werden.


     lprm
        lprm entfernt einen Auftrag aus der Warteschlange.


  Und wie pat das alles zusammen? Nun, wenn der Computer bootet, wird
  der lpd gestartet. Der Daemon durchsucht die Datei /etc/printcap, um
  festzustellen, fr welche Drucker Warteschlangen verwaltet werden.
  Jedesmal, wenn man lpr aufruft, nimmt lpr mit dem lpd durch den Named
  Socket /dev/printer Verbindung auf und bergibt dem lpd die zu
  druckende Datei und einige Informationen, wer druckt und wie zu
  drucken ist. lpd druckt dann die Datei auf dem passenden Drucker aus.

  Das lp-System wurde ursprnglich entwickelt, als die meisten Drucker
  Zeilendrucker waren. Die Drucker kannten weder verschiedene
  Zeichenstze 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 begrndet, da auch
  heute das lp-System einzig die Aufgabe hat, die Druckdaten, z.B. in
  PCL oder PostScript, an den Drucker zu bertragen.


  7.  Grundeinstellungen

  7.1.


  Traditionelle lpd-Konfiguration

  Die Minimaleinstellungen fr lpd liefern ein System, das Dateien in
  Warteschlangen verwalten und sie drucken kann. Es kmmert 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.

  Um eine neue Warteschlange zu erzeugen, mu man einen Eintrag in
  /etc/printcap hinzufgen und ein neues Spool-Verzeichnis unter
  /var/spool/lpd erzeugen.

  Ein Eintrag in /etc/printcap sieht etwa so aus:


       # lokaler DeskJet 500
       lp|dj|deskjet:\
               :sd=/var/spool/lpd/dj:\
               :mx#0:\
               :lp=/dev/lp0:\
               :sh:




  Dies definiert eine Warteschlange mit den Namen lp, dj und deskjet,
  wobei /var/spool/lpd/dj als Spool-Verzeichnis benutzt wird. Die
  maximale Gre der Auftrge ist nicht begrenzt und am Anfang der
  Druckauftrge wird kein Deckblatt, z.B. mit dem Namen der Person, die
  den Druckauftrag abgeschickt hat, ausgegeben. Der Drucker wrde in
  diesem Beispiel an /dev/lp0 hngen.

  Jetzt wre der richtige Augenblick, um die printcap Manual Page zu
  lesen.

  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 gewhnlichen UNIX-Textdatei an den Deskjet schickt, wird
  man folgende Ausgabe erhalten:



       Zeile eins
                 Zeile zwei
                           Zeile drei




  Verursacht wird dieser Fehler dadurch, da Linux einen Zeilenumbruch
  in einer Textdatei anders kodiert als DOS und Windows, deren Kodierung
  die meisten Drucker erwarten. Wrde eine PostScript-Datei ausgegeben,
  wrde der Drucker einfach die PostScript-Befehle ausdrucken, statt
  diese zu interpretieren.
  Offensichtlich wird mehr bentigt, und genau das ist die Aufgabe von
  Filtern. Dem aufmerksamen Leser werden bei der printcap Manual Page
  die Spool-Attribute if und of aufgefallen sein. if, der Inputfilter,
  ist genau das, was wir jetzt brauchen.

  Um das Problem mit dem Zeilenumbruch beim Drucken von Textdateien zu
  lsen, knnte man ein Shellskript mit dem Namen filter schreiben, das
  die Kodierung des Zeilenumbruches anpat. Damit der lpd dieses Skript
  aufruft, mu dem printcap-Eintrag des Druckers eine if-Zeile
  hinzugefgt werden:



       lp|dj|deskjet:\
               :sd=/var/spool/lpd/dj:\
               :mx#0:\
               :lp=/dev/lp0:\
               :if=/var/spool/lpd/dj/filter:\
               :sh:




  Ein einfaches Filterskript knnte sein:



       #!perl
       # Die obige Zeile mu den kompletten Pfad zu perl
       # enthalten. Dieses Skript mu ausfhrbar sein:
       #    chmod 755 filter

       while(<STDIN>){chop $_; print "$_\r\n";};

       # Eventuell mchte man, da am Ende des Druckauftrages
       # ein Seitenvorschub ausgefhrt wird. Dieses ist
       # insbesondere bei Tintenstrahl- und  Laserdruckern
       # sinnvoll:

       #print "\f";




  Wrde man das System so konfigurieren, htte man eine Warteschlange,
  die wunderbar fr UNIX-Textdateien funktionieren wrde. Natrlich gibt
  es vier Millionen bessere Mglichkeiten, diesen Filter zu schreiben,
  aber wenige sind so anschaulich. Der Leser mge dieses effizienter
  gestalten.


  Das einzige verbleibende Problem besteht darin, da man heute meistens
  keine Textdateien drucken mchte. Vielmehr sollen meistens PostScript-
  oder Grafikdateien ausgegeben werden. Auch dieses Problem lt sich
  mit einem Inputfilter lsen. 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.

  So ein Filter wird Magic-Filter genannt. Man sollte sich nicht die
  Mhe machen und selber einen schreiben, solange man keine wirklich
  ungewhnlichen Sachen drucken will. Es gibt bereits einige wirklich
  gute Filter. Der APS-Filter ist einer der besten Filter. Viele Linux-
  Distributionen werden auch mit Setup Tools fr den Drucker
  ausgeliefert, die die Konfiguration von Druckern und passenden Filtern
  deutlich erleichtern.
  7.2.  Dateizugriffsrechte

  Auf Grund von hufigen Nachfragen folgt hier eine Liste der
  Zugriffsrechte der wichtigen Dateien, wie sie auf meinem System
  gesetzt sind. Es gibt sicherlich bessere Mglichkeiten, aber so wurde
  das System installiert und es funktioniert.



       -r-sr-sr-x   1 root     lp    /usr/bin/lpr*
       -r-sr-sr-x   1 root     lp    /usr/bin/lprm*
       -rwxr--r--   1 root     root  /usr/sbin/lpd*
       -r-xr-sr-x   1 root     lp    /usr/sbin/lpc*
       drwxrwxr-x   4 root     lp    /var/spool/lpd/
       drwxr-xr-x   2 root     lp    /var/spool/lpd/lp/





  lpd mu momentan als root aufgerufen werden, da nur root das Recht
  hat, den Netzwerk-Port fr lp zu belegen. Im Prinzip knnte der Daemon
  nach der Initialisierung seine UID ndern, wie das eigentlich jeder
  gut programmierte Daemon machen sollte.  Der lpd tut dieses zur Zeit
  aber nicht.


  8.

  Woher man Drucker-Software bekommt

  Viele fertige Filterpakete und weitere Software rund ums Drucken sind
  auf folgendem Server zu finden:


       metalab.unc.edu:/pub/Linux/system/printing/


  Hier knnen auch Utilities wie psutils, a2ps, mpage, dvitodvi, flpr
  usw. bezogen werden.

  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 mengefhrte printcap-Einrichtung
  verfgt und praktisch mit allen denkbaren Datentypen klarkommt. Wenn
  Ihr Distributor keine gute Druckereinrichtung mitliefert, ist APS die
  richtige Wahl.


  9.  Distributionsabhngige Lsungen

  Dieser Abschnitt ist per Definition unvollstndig. Sie knnen gerne
  Details Ihrer eigenen Lieblingsdistribution schicken.


  9.1.

  Red Hat

  Red Hat besitzt ein grafisches Druckerverwaltungsprogramm (im Control
  Panel), mit dem man sowohl entfernte als auch lokale Drucker
  einrichten kann. Es lt den Benutzer einen von Ghostscript
  untersttzten Drucker und das Unix Device, auf das gedruckt werden
  soll, auswhlen und installiert sowohl eine Drucker-Queue in
  /etc/printcap als auch ein kurzes PostScript- und ASCII-Filterscript,
  das auf gs und auf nenscript basiert. Diese Lsung funktioniert
  ziemlich gut, und ist fr normale Anforderungen einfach einzurichten.


  9.2.  Sonstige Distributionen

  Der Autor bittet um Informationen, was andere Distributionen machen.


  10.


  Ghostscript

  Ghostscript, das von


       http://www.cs.wisc.edu/~ghost/


  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 untersttzen
  PostScript direkt. Ghostscript allerdings ist frei und bersetzt die
  PostScriptbefehle in die Drucksprache des verwendeten Druckers. Wenn
  Ghostscript in Verbindung mit einem lpd-Eingabefilter verwendet wird,
  erhlt man einen virtuellen PostScript-Drucker und das erleichtert das
  Leben enorm.

  Ghostscript gibt es in zwei Ausfhrungen. Die kommerzielle Version von
  Ghostscript, Aladdin Ghostscript, darf zwar frei verwendet, aber nicht
  mit kommerziellen Linux-Distributionen verbreitet werden. Die
  kommerzielle Version ist dem freien Ghostscript normalerweise um
  ungefhr ein Jahr voraus; im Moment untersttzt es beispielsweise
  bereits das Portable Document Format (PDF) des Adobe Acrobat, whrend
  die lteren Ghostscripts dies nicht tun.

  Die freie Version von Ghostscript ist GNU Ghostscript. Die GNU-Version
  ist einfach eine ltere Version von Aladdin Ghostscript, die
  freundlicherweise GNU berlassen wurde. Ein groes Lob hierfr an
  Aladdin fr diese Regelung; mehr Softwarehersteller sollten freie
  Software so untersttzen.

  Was Sie auch immer mit gs anfangen, vergewissern Sie sich unbedingt,
  es mit der Option fr ausgeschaltete Dateizugriffe (-dSAFER) zu
  starten. PostScript ist eine voll funktionale Sprache und erlaubt z.B.
  das Ausfhren von externen Programmen, was zu echten
  Sicherheitsproblemen fhren kann, da z.B. der lpd ja als root luft.

  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
  knnten Sie in Ihrer Gegend der erste mit einem PDF-fhigen Drucker
  sein.


  10.1.  Aufruf von Ghostscript

  Normalerweise wird Ghostscript von dem Magic-Filter aufgerufen, den
  Sie verwenden; allerdings ist es zur Fehlersuche oft ntzlich,
  Ghostscript direkt aufzurufen.

  gs -help gibt eine kurze, informative bersicht ber die Optionen und
  verfgbaren Treiber aus. Hierbei sollte man beachten, da nur die
  Treiber angezeigt sind, die in gs einkompiliert worden sind. Falls der
  gewnschte Drucker nicht angezeigt wird, knnte es sich also lohnen,
  gs selbst zu kompilieren.

  Sie knnen gs fr Testzwecke folgendermaen aufrufen:

       gs optionen -q -dSAFER -sOutputFile=/dev/lp1 test.ps



  10.2.  Feineinstellung der Ausgabe

  Es gibt eine Reihe von Dingen, die man machen kann, wenn die Ausgabe
  von gs nicht zufriedenstellend ist. Tatschlich knnen Sie alles
  machen, was Ihnen Spa macht, da Ihnen der Quelltext zur Verfgung
  steht.


  10.2.1.  Position und Gre

  Die Position, die Gre und das Seitenverhltnis 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.
  Unglcklicherweise ist jeder Treiber anders, so da sich schlecht
  pauschal sagen lt, was wie eingestellt werden mu.  Aber die meisten
  Treiber sind ausreichend gut kommentiert.


  10.2.2.  Gamma, Punktgre usw.

  Die meisten Nicht-Laserdrucker leiden unter der Tatsache, da ihre
  Punkte recht gro sind, so da sich die einzelnen Punkte teilweise
  berdecken. Dies fhrt 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 lib-Verzeichnis und fgen Sie ihren Namen dem gs-Aufruf
  genau vor der eigentlichen zu druckenden Datei hinzu. Eventuell mssen
  die tatschlichen Werte der Datei an den verwendeten Drucker angepat
  werden. Niedrigere Werte fhren 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.


       ---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<---





  Es ist durch Vernderung dieser Werte auch mglich, Drucker zu
  korrigieren, die irgendeine Art von Farbfehler besitzen. Wenn Sie so
  etwas tun, ist es empfehlenswert, die Datei colorcir.ps zu benutzen,
  die Ghostscript im examples-Verzeichnis als Testseite beiliegt.


  11.  Drucker in einem Netzwerk

  Eine der Fhigkeiten von lpd ist es, da man ber ein Netzwerk auf
  Druckern drucken kann, die physikalisch an einen anderen Rechner
  angeschlossen sind. Mit einer sorgfltigen Kombination von
  Filterskripten und anderen Utilities kann man mit lpr transparent auf
  allen mglichen Druckern ber alle mglichen Netzwerke drucken.


  11.1.  UNIX/lpd Server

  Um es anderen Rechnern zu ermglichen, auf dem eigenen Drucker zu
  drucken, mssen diese Rechner in /etc/hosts.equiv oder /etc/hosts.ldp
  aufgelistet werden. Hierbei sollte man beachten, da 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 rs-Attribut benutzt; siehe dazu auch die lpd
  Manual Page fr mehr Informationen.


  11.1.1.  Client

  Um auf einem anderen Rechner zu drucken, erstelle man einen
  /etc/printcap-Eintrag wie diesen:



       # DeskJet 500 als Netzwerkdrucker
       lp|dj|deskjet:\
               :sd=/var/spool/lpd/dj:\
               :rm=geraet.da.draussen.de:\
               :rp=druckername:\
               :lp=/dev/null:\
               :sh:




  Hierbei gibt rm die Internetadresse des Rechners, an dem der Drucker
  angeschlossen ist, und rp die Warteschlange an.  Beachten Sie, da es
  weiterhin ein Spool-Verzeichnis auf dem lokalen Rechner gibt, das von
  lpd verwaltet wird. Wenn der Netzwerkrechner beschftigt oder nicht
  erreichbar ist, bleiben Druckauftrge des lokalen Rechners im
  Spoolverzeichnis, bis sie gesendet werden knnen.


  11.1.2.

  rlpr

  Man kann auch rlpr benutzen, um einen Druckauftrag direkt in eine
  Warteschlange auf einem Netzwerkrechner zu schicken, ohne sich die
  Mhe zu machen, den lokalen lpd entsprechend einzurichten.  Das ist
  besonders sinnvoll, wenn man nur selten auf verschiedenen Druckern
  druckt.  Aus der Beschreibung von rlpr:


  rlpr verwendet TCP/IP, um Druckauftrge an lpd-Server in einem
  Netzwerk zu schicken.


  Anders als bei lpr mssen die Netzwerkdrucker dem lokalen Rechner
  nicht bekannt sein (z.B. durch /etc/printcap). Deshalb ist rlpr
  wesentlich flexibler und bentigt weniger Verwaltung.


  rlpr kann berall da verwendet werden, wo ein traditionelles lpr
  verwendet werden kann und ist abwrts-kompatibel zum traditionellen
  BSD lpr.

  Der Hauptvorteil von rlpr ist die Mglichkeit, von berall nach
  berall zu drucken, ohne Rcksicht darauf, wie das System, von dem aus
  man drucken will, konfiguriert ist. rlpr kann genau wie das
  traditionelle lpr als Filter arbeiten, so da Clients, die auf einem
  Netzwerkrechner laufen (z.B. Netscape, XEmacs, etc.) ohne grere
  Probleme auf Ihrem lokalen Rechner drucken knnen.


  rlpr ist erhltlich von:

       metalab.unc.edu:/pub/Linux/system/Printing/




  11.2.



  Win95, WinNT, LanManager oder Samba Server

  Es ist mglich, mit dem smbclient-Programm (Bestandteil des Samba-
  Pakets) eine lpd-Warteschlange fr einen TCP/IP-basierenden SMB-
  Druckservice einzurichten.  Samba beinhaltet hierfr ein Script namens
  smbprint. Kurz gesagt legt man eine Konfigurationsdatei fr den
  gewnschten Drucker im Spoolverzeichnis an und installiert das
  smbprint-Script als if.

  Der /etc/printcap-Eintrag sieht wie folgt aus:



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





  Sie sollten die Dokumentation im smbprint-Skript lesen, um weitere
  Informationen zu erhalten.

  Man kann auch smbclient verwenden, um eine Datei direkt an einen SMB-
  Druckservice zu schicken, ohne lpd zu benutzen. Wie dieses
  funktioniert, ist in der Manual Page nachzulesen.


  11.3.



  Netware Server

  Im ncpfs-Paket ist ein Programm namens nprint enthalten, das die
  gleichen Funktionen wie smbprint fr NetWare bietet. ncpfs ist
  erhltlich bei:

       metalab.unc.edu:/pub/Linux/system/filesystems/ncpfs/


  Auszug dem LSM-Eintrag von Version 0.16:



  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 hher
  bentigt. ncpfs funktioniert nicht mit 1.3.x-Kernels unter
  1.3.54.



  Damit nprint ber lpd arbeitet, schreibt man ein kleines Shellscript,
  das als if fr die entsprechende lpd-Warteschlange aufgerufen wird.
  Dieses Script gibt die Druckdaten, die es vom dem lpd erhlt, dann auf
  dem Netware-Drucker aus.



       sub2|remote-NWprinter:\
               :lp=/dev/null:sh:\
               :sd=/var/spool/lpd/sub2:\
               :if=/var/spool/lpd/nprint-script:




  Das nprint-script knnte ungefhr so aussehen:



       #! /bin/sh
       # Als erstes sollten Sie den guest Account mit keinem
       # Pawort ausprobieren!

       /usr/local/bin/nprint -S net -U name -P passwd \
                             -q printq-name -





  11.4.



  Apple Server

  Im netatalk-Paket ist etwas hnliches wie nprint und 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 hierfr das Linux Netatalk HOWTO
  auf http://thehamptons.com/anders/netatalk/ an.


  11.5.

  Drucker mit Ethernetanschlu

  Drucker fr den professionellen Einsatz verfgen hufig ber ein
  Ethernet-Interface. Die meisten dieser Gerte untersttzen direkt das
  lp-Protokoll, so da man sie einfach per lpd und der rp-Option
  ansprechen. Man sollte den Anweisungen folgen, die mit dem Drucker
  oder dem Netzwerkadapter des Druckers geliefert wurden.  Ein Drucker
  von HP knnte z.B. mit einem solchem printcap-Eintrag arbeiten:




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





  HP LaserJet Drucker mit JetDirect Interface stellen im allgemeinen
  zwei eingebaute Queues zur Verfgung:

     raw
        Akzeptiert Druckdaten in PCL und eventuell PostScript.

     text
        Kann zum Druck von reinen ASCII-Dateien verwendet werden, wobei
        der beschriebene Treppeneffekt automatisch korrigiert wird.

  Wenn Sie eine JetDirect Plus3 3-Port Box besitzen, besitzen die Queues
  die Bezeichnungen raw1, text2 usw.

  In einem groen Netz, in dem einige Drucker kein PostScript
  untersttzen, knnte es sinnvoll sein, einen Print-Server
  einzurichten, auf dem alle Rechner drucken und auf dem alle
  Ghostscript-Jobs laufen.

  Dies erlaubt Ihrem Linux-Rechner auch, als Spool-Server zu arbeiten,
  so da die Netzwerkbenutzer ihre Druckauftrge schnell beenden und
  weiterarbeiten knnen, ohne darauf warten zu mssen, da der Drucker
  erst fremde Auftrge fertigstellt.

  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).

  Anscheinend beachten einige HP Netzwerkdrucker die
  Deckblatteinstellungen nicht, die von den Clients geschickt werden;
  Sie knnen das intern generierte Deckblatt abschalten, indem Sie sich
  per telnet auf den Drucker einloggen, zweimal Return drcken und
  danach banner: 0 gefolgt von quit eingeben.  Sie knnen auch andere
  Einstellungen auf diese Art verndern; tippen Sie ? ein, um eine Liste
  angezeigt zu bekommen.


  11.5.1.  Alte HP-Drucker

  Einige Drucker und externe Druckserver haben zwar eine
  Ethernetschnittstelle, untersttzen jedoch nicht das lp-Protokoll.
  Oftmals finden statt dessen spezielle Treiber Verwendung, die fr
  Linux natrlich nicht existieren. Einige dieser Gerte speichern
  Druckauftrge auch nicht zwischen, so da es einen Rechner geben mu,
  der Druckjobs sammelt und nacheinander an den Drucker schickt.

  Erwhnenswert in dieser Kategorie sind frhe JetDirect und einige
  JetDirectEx Karten. Grundstzlich mu man zum Drucken auf diesen
  Drucker eine TCP-Verbindung zu dem Drucker auf einem bestimmten Port
  (typischerweise 9100, oder 9100, 9101 und 9102 fr 3-Port Boxen)
  ffnen und den Druckauftrag hier durch schicken. Das kann u.a. in Perl
  implementiert werden:





  #!/usr/bin/perl
  # Dank gebhrt 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&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 fr 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;
  }






  11.6.

  Filter fr Netzwerkdrucker

  Eine Eigenart von lpd ist, da ein if fr Netzwerkdrucker nicht
  aufgerufen wird. Wenn das ntig sein sollte, kann man eine doppelte
  Warteschlange einrichten und den Job an die zweite Warteschlange
  weitergeben. Ein Beispiel fr eine passende printcap knnte so
  aussehen:



       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:




  Das passenden filter-lj-5-Script wre dabei:



       #!/bin/sh
       gs <options> -q -dSAFER -sOutputFile=- - | \
               lpr -Plj-5-remote -U$5





  Die Option -U von lpr funktioniert nur, wenn 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 printcap.



  11.7.



  Windows Client

  Drucken von einem Windows (oder wohl auch OS/2) Client auf eine
  Linuxmaschine wird ber SMB direkt untersttzt, wenn man das Samba-
  Paket benutzt, das auch die Benutzung Ihres Linux-Filesystems von
  Windows aus ermglicht.

  Samba beinhaltet eine ziemlich vollstndige Dokumentation, und es gibt
  die recht gute Samba-FAQ, welche sich ebenfalls damit beschftigt. Sie
  knnen 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 sttzen sorgt manchmal fr
  ein besseres Druckbild, ist aber etwas mehr administrativer Aufwand
  bei vielen Windows-Rechnern. Sie sollten es daher zuerst mit
  PostScript versuchen.


  11.8.



  Apple Client

  Netatalk untersttzt das Drucken von Apple-Clients ber EtherTalk.
  Siehe hierfr auch die Netatalk HOWTO Page unter:


       http://thehamptons.com/anders/netatalk/



  11.9.



  Netware Client

  Das ncpfs-Paket beinhaltet einen Daemon namens pserver, der benutzt
  werden kann, um Dienste fr eine NetWare Druck-Queue zur Verfgung zu
  stellen. Soweit ich es verstanden habe, bentigt dieses System ein
  Bindery-basiertes NetWare, z.B. 2.x, 3.x oder 4.x, mit
  eingeschaltetem Bindery-Zugriff.

  Fr mehr Informationen ber ncpfs und sein pserver-Programm sollten
  Sie einen Blick auf die ncpfs FTP-Site unter folgender Adresse werfen:

       ftp.gwdg.de:/pub/linux/misc/ncpfs/




  12.

  GDI-Drucker

  Wie schon vorher erklrt wurde, werden einige Drucker unter Linux
  nicht untersttzt, 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 fr Windows bei, die PCL per Software
  emulieren, was fr andere Betriebssysteme natrlich nicht sehr
  hilfreich ist. In einigen extremen Fllen besitzen die Drucker nicht
  einmal eine normale Parallelverbindung, sondern bentigen auch noch
  spezielle Treiber fr die Ansteuerung der Schnittstelle.

  In jedem Fall gibt es einige mgliche Auswege, wenn Sie eine solche
  Zitrone erwischt haben. Der beste Ausweg drfte sein, den Drucker an
  einen Windowsbenutzer weiterzuverkaufen.


  12.1.  Der Ghostscript Windows Druckertreiber

  Es gibt mittlerweile einen Windows Druckertreiber (namens mswinpr2),
  der einen Druckauftrag durch Ghostscript leitet, bevor er ihn druckt.
  Das Prinzip ist hnlich einem if-Filter bei einem 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.

  Wenn Sie dieses zum Laufen bringen, knnen Sie den Anweisungen oben
  folgen, um von Linux aus ber das Netzwerk auf einen Windows-Drucker
  zu drucken und es so Rechnern zu ermglichen, auf Ihrer Zitrone zu
  arbeiten.

  Smtliche ntige Software sollte auf der Ghostscript-Homepage, siehe
  Abschnitt ``Ghostscript'', verfgbar sein.


  12.2.

  pbm2ppa

  Einige HP Drucker benutzen die Printing Performance Architecture.
  Diese wird ber einen Umweg durch den pbm2ppa Umsetzer von Tim Norman
  untersttzt. Im Grunde benutzt man Ghostscript, um PostScript in eine
  Bitmapgrafik im pbm-Format umzuwandeln, und dann pbm2ppa, um aus
  dieser das druckerspezifische ppa-Format zu generieren, das dann auf
  dem Drucker ausgegeben werden kann. Mittlerweile knnte es dieses
  Programm auch als Ghostscript Druckertreiber geben.


  Die ppa-Software kann von der ppa Homepage heruntergeladen werden, die
  unter folgender Adresse zu finden ist:


       http://www.rpi.edu/~normat/technical/ppa/


  pbm2ppa untersttzt einige Modelle der Serien HP 720, 820 und 1000;
  bitte lesen Sie die Anleitung zum Paket fr mehr Details zur ppa-
  Drucker Untersttzung.


  13.  Faxen

  13.1.


  Faxen mit einem Modem

  Es gibt einige Faxprogramme, mit denen man faxen und Dokumente
  empfangen kann. Eines der komplexesten ist Sam Lefflers HylaFax,
  erhltlich bei SGI:
       ftp.sgi.com


  Es untersttzt alle mglichen Funktionen, von mehreren Modems bis zum
  Broadcasting.

  SuSE liefert einen Java HylaFax-Client, der angeblich auf jeder Java
  Plattform (inklusive Windows und Linux) luft. Es gibt auch Fax-
  Clients, die nicht in Java geschrieben worden sind, fr die meisten
  Plattformen; Linux kann mit ziemlicher Sicherheit Ihren Netzwerk-Fax-
  Anforderungen gengen.

  Ebenfalls verfgbar, und die bessere Wahl fr die meisten Linuxrechner
  ist efax.  Dieses ist ein einfaches Programm, das Faxe sendet. Das
  getty-Programm mgetty kann Faxe empfangen und mit manchen Modems auch
  einen Anrufbeantworter emulieren.


  13.2.  Remote Printing Service

  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.


  Es werden hierbei bertragungsformate wie ASCII oder PostScript
  untersttzt. Weitere Informationen finden Sie z.B. auf der Remote
  Priting WWW-Seite unter:

       http://www.tpc.int/




  14.  Textverarbeitung

  Hier kommt man in ein wahres Rattennest an Software. Grundstzlich
  kann man nicht nur auf die speziell fr Linux erhltlichen Programme
  zurckgreifen, sondern z.B. auch ltere Programme fr Windows oder DOS
  ber einen Emulator benutzen. Dieses ist allerdings aus verschiedenen
  Grnden nicht ratsam.


  14.1.  Formatierungssprachen

  Die meisten Formatierungssprachen sind am besten fr groe oder sich
  wiederholende Projekte geeignet, in denen man dem Computer die
  Kontrolle ber das Layout berlassen mchte, damit alles einheitlich
  aussieht.  Folgende Sprachen haben eine groe Verbreitung unter Linux
  Benutzern:




     nroff
        Diese war eine der ersten Formatierungssprachen fr UNIX. Manual
        Pages sind das hufigste Beispiel fr Texte, die mit *roff-
        Makros formatiert wurden; einige Leute schwren 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


     man -t foo | lpr



     TeX
        TeX und das Makropaket LaTeX gehren zu den am hufigsten
        verwendeten Formatierungssprachen auf UNIX-Systemen. LaTeX wird
        vor allem fr technische Werke eingesetzt, da es eigentlich das
        einzige Textverarbeitungssystem ist, mit dem man mathematische
        Formel vernnftig setzen kann und das ohne Probleme mit sehr
        groen Dokumenten umgehen kann. Ein weiterer Vorteil ist, da
        LaTeX eigentlich fr fast jeden Rechnertyp diese Erde verfgbar
        ist und selbst auf sehr langsamen Rechnern problemlos luft.

        TeX wird, vor allem von Leuten, die es noch nie benutzt haben,
        nachgesagt, es wre 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 fr einen Text es sich handelt, also z.B. um eine
        berschrift. Die Formatierung bernimmt LaTeX.

        Das Ausgabeformat von TeX ist dvi und kann mit dvips oder dvilj
        nach PostScript bzw. Hewlett Packards PCL konvertiert werden.


     SGML
        Bei SGML werden in einem noch viel strkeren 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. Auerdem ist es sehr leicht, die eigentliche
        Formatierung von einigen 1000 Dateien nachtrglich 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:


          http://www.sgmltools.org/


     Dieses Paket ist jedoch nicht vollstndig 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.



  14.2.  WYSIWYG

  Mittlerweile gibt es keinen Mangel an WYSIWYG
  Textverarbeitungssoftware mehr. Es gibt mehrere vollstndige Office-
  Pakete:


     StarOffice
        Die deutsche Firma StarDivision bietet ihr StarOffice fr 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 fr 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 Miachtung fast aller UNIX-Standards. So bringt das
        Programm einen eigenen Window-Manager und Desktop mit, die
        beide, wie die Oberflche selbst auch, Win95 nachempfunden sind.


     LyX
        LyX ist ein Frontend fr LaTeX, das vielversprechend aussieht.
        Auf der LyX Homepage gibt es weitere Informationen:


          http://www-pu.informatik.uni-tuebingen.de/users/ettrich/


     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.


     Das Andrew User Interface System
        AUIS beinhaltet ez, einen WYSIWYG-artigen Editor mit
        grundlegenden Textverarbeitungsfhigkeiten, HTML und voller
        MIME-eMail- und Newsgroup-Untersttzung. Leider wird AUIS nicht
        lnger gepflegt.


     Koffice
        Das KDE-Projekt arbeitet an einem kompletten Office-Paket.
        Dieses drfte zur Zeit aber noch nicht benutzbar sein.


     GNOME
        Auch das GNOME-Projekt arbeitet an mehreren Office-Tools mit
        GNU-Lizenz. Allerdings sind noch keine verfgbar.


     WordPerfect
        Es existiert eine auf Linux portierte Version von Corels
        WordPerfect. Informationen hierzu finden sich unter:

          http://www.corel.com


     Corel hat auerdem bekanntgegeben, da man plant, zuknftig weitere
     Produkte nach Linux zu portieren.


     Applixware
        Eine recht weite Verbreitung hat das kommerzielle Officepaket
        Applixware unter Linux-Benutzern gefunden. Das Programmpaket
        kann recht preiswert von allen greren Linux-Vertreibern
        bezogen werden.  Applix ist fr viele Plattformen verfgbar und
        beinhaltet eine Tabellenkalkulation, eine Textverarbeitung, ein
        Prsentationspaket usw. Es gibt eine weitere Version von Applix
        in Java namens ApplixAnyWhere. Weitere Informationen zu diesen
        Paketen sind unter

          http://www.applixware.com

     erhltlich.



  15.  Voransicht von druckbaren Sachen auf dem Bildschirm

  Unter Linux knnen viele Datenformate, die fr 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 ntzlich sein, da dieses dann nicht immer
  gleich zur Korrektur ausgedruckt werden mu, zum anderen knnen so
  auch die Dokumente anderer Autoren auf dem Bildschirm betrachtet
  werden.


  15.1.  PostScript

  Ghostscript kann nicht nur zur Ausgabe von PostScriptdateien auf
  Druckern verwendet werden, sondern es ermglicht mittels des
  X11-Treibers auch, solche Dateien auf dem Bildschirm anzuzeigen.
  Allerdings wird man in den wenigsten Fllen Ghostscript direkt
  aufrufen. Viel mehr benutzt man einen der beiden PostScript-
  Betrachter:


    Ghostview

    gv

  Beide Programme benutzen intern Ghostscript. Sie erlauben es, bequem
  zwischen den einzelnen Seiten zu blttern, bestimmte Seiten
  auszuwhlen, um sie zu speichern oder zu drucken und vieles mehr. Es
  empfiehlt sich, nur gv anstelle von Ghostview zu verwenden, da gv ber
  einige zustzliche Mglichkeiten verfgt und im Gegensatz zu Ghostview
  noch aktiv entwickelt wird.

  Neben PostScript kann gv auch PDF-Dateien anzeigen.


  15.2.  TeX DVI

  TeX DeVice-Independant-files (gerteunabhngige Dateien) knnen unter
  X11 mit xdvi betrachtet werden. Um einige Beschrnkungen von TeX zu
  umgehen, binden einige Makropakete direkt PostScript-Befehle in die
  DVI-Dateien ein. Da xdvi diese Daten nicht selbst auswerten kann, wird
  auch hier auf Ghostscript zurckgegriffen, so da es empfehlenswert
  ist, Ghostscript zu installieren, wenn man TeX benutzt.

  Es gibt ebenfalls einen VT100-Treiber. Er wird dgvt genannt.  Tmview
  benutzt die svgalib statt X11, um die Dateien anzuzeigen.  Da die
  svgalib jedoch nicht mehr weiterentwickelt wird und auch eine
  Insellsung von Linux ist, sollte besser auf xdvi zurckgegriffen
  werden.


  15.3.


  Adobe PDF

  Adobes Acrobat Reader gibt es auch fr Linux. Er kann von der Adobe-
  WWW-Seite bezogen werden:

       http://www.adobe.com/


  Neben dem Programm von Adobe gibt es noch das freie Programm xpdf, das
  jedoch etliche Einschrnkungen 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.



  16.  Serielle Drucker unter lpd

  16.1.  Einstellungen in der printcap

  lpd besitzt 5 Attribute, die in der /etc/printcap eingestellt werden
  knnen, um die Einstellungen einer seriellen Schnittstelle zu
  kontrollieren, an die der Drucker angeschlossen ist.  Die Beschreibung
  der Attribute ist in der printcap Manual Page zu finden, wobei man vor
  allem die Bedeutung von br#, fc#, xc#, fs# und xs# beachten sollte.
  Die letzten vier dieser Attribute sind Bitmaps, die fr die
  Einstellungen dieser Schnittstelle stehen. Das br#-Attribut ist
  einfach die Baudrate, z.B.  `br#9600':


  Es ist sehr einfach, die stty-Einstellungen in printcap Flags zu
  bersetzen. Wenn ntig, studieren Sie nun bitte die Manual Page von
  stty.


  Benutzen Sie 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 knnte die Ausgabe von `stty
  -a' fr eine Schnittstelle z.B.  aussehen.



       # 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




  Die einzigen Unterschiede zwischen diesen Einstellungen und der
  Initialisierung beim Booten sind -clocal, -crtscts und ixon. Die
  Ausgabe bei ihrer Schnittstelle kann durchaus anders aussehen, da
  dieses von der Flukontrolle Ihres Druckers abhngt.

  Wirklich verwendet wird stty auf eine etwas ungewhnliche Weise.
  Ursprnglich war stty dafr gedacht, die Einstellungen eines Terminals
  anzupassen. Deswegen gibt stty die Steuerzeichen auf der
  Standardausgabe aus. Um mit dem Programm die Einstellungen einer
  beliebigen seriellen Schnittstelle zu manipulieren, mu deshalb wie
  oben das <-Zeichen verwendet werden.

  Sobald die stty-Einstellungen richtig sind, man also mit

  cat datei > /dev/ttyS2


  eine Datei an der Drucker, hier an /dev/ttyS2, schicken kann, sollte
  man die Datei /usr/src/linux/include/asm-i386/termbits.h betrachten.
  Diese Datei enthlt viele #define- und einige struct-Zeilen. Man
  betrachte den Abschnitt, der mit



       /* c_cflag bit meaning */
       #define CBAUD   0000017




  anfngt. Dieser Abschnitt listet die Bedeutungen der fc#- und
  fs#-Teile auf. Ihnen wird auffallen, da die Namen (nach den
  Baudraten) mit einer der stty-Ausgabeleitungen bereinstimmen. Habe
  ich nicht gesagt, da es leicht sein wrde?


  Achten Sie auf die Einstellungen, die mit einem - in der stty-
  Ausgabe anfangen. Wenn man alle diese Nummern aufsummiert (sie sind
  oktal), erhlt man die Bits, die man lschen will. Also ist das die
  fc#-Einstellung.  Erinnern Sie sich daran, da Sie diese Bits direkt
  nach dem Lschen setzen werden, also knnen Sie einfach fc#0177777
  verwenden.


  Jetzt macht man das gleiche fr die Einstellungen, die kein - vor
  sich haben. In dem Beispiel sind die wichtigsten CS8 (0000060), HUPCL
  (0002000) und CREAD (0000200). Beachten Sie auch die Flags fr die
  Baudrate.  Zhlen Sie alle zusammen und Sie bekommen in diesem
  Beispiel 0002275 heraus. Dieses ist der Wert fr die fs#-Option.


  Machen Sie das gleiche mit set und clear fr den nchsten Abschnitt
  der Includedatei, "c_lflag bits".


  16.2.  ltere serielle Drucker, die Zeichen verschlucken

  Jon Luckey hat festgestellt, da einige ltere serielle Drucker mit
  sehr schlechten seriellen Interfaces und kleinen Buffern wirklich Stop
  meinen, wenn sie das mit ihrer Flukontrolle sagen. Er fand heraus,
  da sich das Problem lsen lt, wenn der FIFO-Buffer des 16550-UARTs
  mit setserial ausgeschaltet wird. Hierfr gibt man einfach den UART-
  Typ 8250 an.



  17.  Dank

  Die Informationen ber smbprint sind aus einem Artikel von Marcel
  Roelofs (marcel@paragon.nl).


  Die Informationen ber nprint, um NetWare-Drucker zu verwenden, wurden
  von Michael Smith (mikes@bioch.ox.ac.uk) zur Verfgung gestellt.


  Der Abschnitt Serielle Drucker und lpd ist von Andrew Tefft
  (teffta@engr.dnet.ge.com).


  Der Teil ber die Gammakorrektur und weitere Tips rund um Ghostscript
  stammt von Andreas (quasi@hub-fue.franken.de).


  Die zwei Abschnitte ber die 30-Sekunden-closing_wait des seriellen
  Treibers sind von Chris Johnson (cdj@netcom.com).


  Robert Hart hat ein paar hervorragende Abschnitte ber das Einrichten
  eines Printservers fr vernetzte HPs eingeschickt, die ich wrtlich
  verwendet habe.


  Besonderer Dank geht an die vielen von euch, die auf Tippfehler,
  falsche URLs und Sachfehler im Dokument im Laufe der Jahre aufmerksam
  gemacht haben.


















































