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

  Da dies eine bersetzung ist, werden die Versionsnummern beibehalten,
  d.h. die deutsche bersetzung beginnt mit Version 3.9.

  Die Drucker HOWTO  sollte alles beinhalten, was Sie wissen mssen, um
  Ihnen dabei zu helfen, Druckdienste auf Ihrer/n Linux-Maschine(n)
  einzurichten. Wie im Leben ist es etwas komlizierter als in der Klick-
  Herum Welt von Microsoft und Apple, aber es ist dafr ein wenig
  flexibler und in groen Netzen auf jeden Fall leichter zu handhaben.

  Dieses Dokument ist strukturiert, so dass 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 Kapiteln 9 bzw. 10 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 verloren
  gegangen. Das ist Absicht, da die frheren HOWTOs 60 Seiten und mehr
  umfaten, und den Erzhlflu einer toten Schildkrte hatten. Wer hier
  keine passende Antwort finden, sollte a) die vorhergehende Version auf
  der Printing HOWTO Home Page (http://www.picante.com/~gtaylor/pht/)
  durchsuchen und b) dem Autor einen Nachricht hinterlassen, was in der
  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, sie ist auch auf
  sunsite.unc.edu im LDP-Bereich erhltlich.

  Die deutsche Version ist auf

       http://www.tu-harburg.de/~semb2204/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 gelassen worden:

     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.

     Man-page
        Anleitungsseite. Beschreibt einen Befehl o.. Wird durch "man
        <Befehl>" angezeigt.

     Permissions
        Zugriffsrechte von Dateien (Files). Bestimmt, wem die Datei
        gehrt, wer wie darauf zugreifen darf u.a.
  1.2.  Geschichte

  Dies ist die dritte Generation, d.h. die dritte komplette Neufassung
  der Printing HOWTO. Die Geschichte der PHT ist diese:

  1. Ich schrieb die Printing HOWTO als Antwort auf zu viele Fragen zum
     Drucken in comp.os.linux, und postete sie.  Dieses Posting war
     einige Monate vor dem HOWTO-Projekt und war damit die erste FAQ,
     die eine `HOWTO' genannt wurde. Diese Version war in reinem ASCII.

  2. Nachdem Ich dem HOWTO-Projekt beitrat, wurde die Printing HOWTO mit
     einem Lpd FAQ von Brian McCauley (B.A.McCauley@bham.ac.uk)
     verschmolzen, und wir arbeiteten als Co-Autoren an der PHT etwa 2
     Jahre lang weiter zusammen.  In dieser Zeit wurde auch die Arbeit
     von Karl Auer (Karl.Auer@anu.edu.au) eingebaut. Diese Generation
     der PHT war in TeXinfo, und erhltlich in PS, HTML, Ascii und Info.

  3. Nachdem die PHT fr ber ein Jahr vor sich hin gerottet war, und
     ein Versuch, jemand anders fr die Weiterfhrung zu gewinnen,
     scheiterte, entstand diese Neufassung. Diese Generation der PHT ist
     in Linuxdoc-SGML (auch bekannt als die sgml-Tools).

  1.3.  Geschichte der deutschen bersetzung

  Die deutsch-sprachigen Versionen sind reine bersetzungen, die
  Geschichte stimmt daher weitestgehend mit der oben genannten
  Geschichte berein. Die erste bersetzte HOWTO war die Version 3.9,
  der bersetzer bemht sich, neue englisch-sprachige Versionen
  mglichst schnell einzubauen.

  1.4.  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 und Robert Fendt.

  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 es druckt, oder der System-
  Betreuer es bereits eingerichtet hat, dann mu nur der Gebrauch des
  lpr-Kommandos erlernt werden. Die Printing Usage HOWTO bezieht sich
  darauf, und auf einige weitere Kommandos, die man kennen sollte.

  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. Also: weiterlesen!

  3.  Kernel-Drucker-Devices

  3.1.  Das lp-Device

  Das Linux-Kernel (<=2.1.32), falls das lp-Device eincompiliert 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, das 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 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
  (http://www.picante.com/~gtaylor/pht/man/tunelp.8.html), mit dem man
  als root Interrupts, Geschwindigkeit und anderes am lp-Device
  einstellen kann.

  Wenn die Option in Kernel 2.x oder einigen 1.3.x-Kernels compiliert
  wurde, kann eine lp= Option (ber LILO/LOADLIN) gewhlt werden, um die
  Portadressen und Interrupts einzustellen:

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

       Beispiel:    lp=0x378,0   oder   lp=0x278,5,0x378,7 **

  ** Fr alle diejenigen, die sich nie an die Standard-Porteinstellungen
  erinnern knnen, wenn sie sie brauchen (so wie ich): sie entsprechen
  dem zweiten Beispiel oben. Der andere Port (lp0) liegt bei 0x3bc;
  keine Ahnung, was fr einen Interrupt er benutzt.

  Hinweis: Wenn diese Funktion benutzt wird, mssen alle Ports angegeben
  werden, die bercksichtigt werden sollen, es gibt keine
  Voreinstellungen. Man kann einen eingebauten Treiber mit lp=0
  deaktivieren.

  Wenn das Device als Modul geladen wird (nur in 2.x und spten 1.3.x
  Kernels), knnen die Adressen und Interrupts in der blichen Syntax im
  insmod-Kommando angegeben werden (oder in /etc/conf.modules fr den
  kerneld). Die Parameter sind io=port0,port1,port2 und
  irq=irq0,irq1,irq2. Auf der Man-page zu insmod gibt es weitere
  Informationen.

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

  3.2.  Das parport-Device (Kernelversionen >= 2.1.33)

  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-Device. Die Erweiterung um das parport-Device beseitigt einige
  der Probleme, die den alten lp Treiber qulen - es kann den Port mit
  anderen Treibern "teilen", es ordnet verfgbaren Parallelports
  dynamisch Device-Nummern zu, anstatt eine feste Zuordnung zu
  erzwingen, und einiges mehr.

  Die Verfgbarkeit des parport-Device hat eine ganze Reihe neuer
  Treiber fr den Parallelport ermglicht, so z.B. fr ZIP-Laufwerke,
  externe CD-ROMs und Festplatten usw. Einige davon sind auch fr Kernel
  2.0.x verfgbar; schauen Sie sich im Web um.

  Ich werde den parport-Treiber vollstndiger beschreiben, sobald ich
  ihn selbst benutze; in der Zwischenzeit knnen Sie das File
  Documentation/parport.txt in den Kernelquellen oder auf
  http://www.cyberelk.demon.co.uk/parport/parport.txt lesen, oder einen
  Blick auf die parport-Webseite
  (http://www.cyberelk.demon.co.uk/parport.html) werfen.

  3.3.  Serielle Devices

  Serielle Devices heien blicherweise unter Linux /dev/ttyS1 oder
  hnlich. Das Programm stty
  (http://www.picante.com/~gtaylor/pht/man/stty.1.html) erlaubt es,
  interaktiv die Einstellungen fr die seriellen Schnittstellen
  anzusehen oder zu verndern; mit setserial
  (http://www.picante.com/~gtaylor/pht/man/setserial.8.html) 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 (http://sunsite.unc.edu/LDP/HOWTO/Serial-HOWTO.html)
  nachgelesen werden.

  Wenn man einen langsamen seriellen Drucker mit Flukontrolle benutzt,
  kann es sein, da einige Druckauftrge abgeschnitten werden. Das kann
  an den seriellen Schnittstellen liegen, die standardmig 30 Sekunden,
  nachdem das Schnittstellendevice geschlossen wurde, alle nicht
  gesendeten Zeichen lschen.  Der Puffer hlt bis zu 4096 Zeichen, wenn
  der Drucker Flukontrolle verwendet und nicht schnell genug ist, um
  innerhalb von 30 Sekunden, nachdem die Software die Schnittstelle
  geschlossen hat, alle Daten aus dem Puffer zu empfangen, ist das Ende
  des Pufferinhalts verloren.  Wenn der Befehl cat file > /dev/ttyS2
  kurze Dateien komplett ausdruckt, bei lngeren aber das Ende
  abschneidet, 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 im
  rc.serial Bootfile 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 einen
  seriellen oder parallelen Port 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 (Oft werden sie schwammig mit "fr Windows"
  bezeichnet, oder als "GDI"-Drucker). Diese Drucker funktionieren nicht
  mit Linux. Sie sind "strohdoof" und auf den Hauptprozessor angewiesen,
  um den grten Teil der Arbeit zu machen, die normalerweise von der
  CPU des Druckers erledigt wird. Unglcklicherweise kann diese Aufgabe
  nur von den Treibern des Herstellers erledigt werden, welche nur fr
  Windows verfgbar sind. Also: kaufen Sie nicht einen solchen Drucker,
  wenn Sie ihn mit Linux verwenden wollen. (Wenn Sie bereits einen
  solchen Drucker besitzen: es gibt Mglichkeiten, um Linux zur
  Zusammenarbeit zu bewegen, aber diese sind unzureichend und ich habe
  es nie selbst versucht. Beachten Sie Kapitel 12 dieses Dokuments fr
  eine weitergehende Besprechung von Windows-only-Druckern.)

  Bezglich der Drucker, die mit Linux funktionieren, so ist die beste
  Wahl ein Drucker mit eingebautem PostScript-Support.  Fast jede Unix-
  Software, die Druckfhigkeiten besitzt, produziert PostScript-Daten,
  also wre es offensichtlicherweise am besten, einen Drucker zu nehmen,
  der PostScript direkt untersttzt.  Unglcklicherweise ist PostScript-
  Support selten bei nicht-Laserdruckern, und auerdem teilweise
  kostenpflichtiges Zubehr.

  Wenn Sie die (Mehr-)Ausgabe scheuen, die ntig ist, um einen
  PostScript-Drucker zu kaufen, so knnen Sie jeden Drucker verwenden,
  der von Ghostscript untersttzt wird, einem freien PostScript-
  Interpreter, der bei fehlender echter PostScript-Untersttzung
  Verwendung findet. Auf der Ghostscript Homepage
  (http://www.cs.wisc.edu/~ghost/) finden Sie eine Liste der
  untersttzten Drucker und Informationen ber den Status von neuen und
  experimentellen Treibern. Bitte helfen Sie dabei, die Ghostscript-
  Druckerseite zu verbessern, indem Sie der Bitte nachkommen, Ihre
  (Mi-)Erfolge mitzuteilen.

  Adobe hat eine neue Druckersprache namens "PrintGear" entwickelt. Ich
  denke, es handelt sich dabei um eine stark vereinfachte Sprache im
  Binrformat, die einiges von PostScript geerbt hat, aber nicht dazu
  kompatibel ist. Ferner habe ich nichts davon gehrt, da es von
  Ghostscript untersttzt wird. Einige PrintGear-Drucker scheinen auch
  eine zweite Sprache wie z.B. PCL zu untersttzen, und solche Drucker
  funktionieren mit Linux.

  4.1.  Drucker-spezifische Bemerkungen

  Dieser Abschnitt ist unvollstndig und wird es immer sein. Aber die
  Informationen, die ich hier schreibe, sollten korrekt sein.

     Canon BJ-10ex
        Ein Bericht schlgt vor, da der Canon sehr viel besser im Epson
        LQ Modus arbeitet (per DIP-Schalter zu setzen). Anscheinend war
        die Ausgabe im Canon-Modus unterbrochen oder falsch.
        Andererseits gibt es mittlerweile besseren Canon-Support in
        Ghostscript, so da sich dieses Problem erledigt haben drfte.

     Lexmark
        Lexmark (frher Teil von IBM, glaube ich) stellt viele
        verschiedene Drucker her; viele sind allerdings Windows-only
        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 Linuxanwender einfach - jeder
  verwendete dasselbe alte lpd, das fast wrtlich aus der
  Net-2-Distribution von BSD genommen wurde. Auch heute liefern die
  meisten Distributoren noch diese Software. 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 das
  ursprngliche lpd. Es can sogar wirklich von sich behaupten, sicher zu
  sein - es gibt keine SUID-Teile, und es untersttzt Authentisierung
  via PGP oder Kerberos.

  Im Moment ist lpd wohl fr die meisten Linuxanwender die beste Lsung,
  auch mit den neuen Mglichkeiten verglichen. Obwohl es nicht das
  schnste System ist, funktioniert es gut, sobald es einmal
  eingerichtet ist, es kennen sich viele Leute damit aus und es ist in
  vielen Unix-Bchern gut dokumentiert.

  Weitere Informationen ber LPRng sind auf der LPRng-Seite
  (http://www.astart.com/lprng/LPRng.html) zu finden. Zuknftige
  Versionen dieser HOWTO werden sowohl ber lpd als auch ber LPRng
  Informationen enthalten.

  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 oder auf die gesamten Programme,
  die fr das Druck-Spooling zustndig sind. Das sind:

       lpd
        Der Spooling-Daemon. Einer kontrolliert alles auf einer
        Maschine, UND einer pro Drucker luft, solange der Drucker
        druckt.

       lpr
        Der Spooling-Befehl fr den Anwender. Lpr ruft lpd auf und setzt
        einen neuen Druckauftrag (Job) in den Spool.

       lpq
        Listet die Jobs 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
  lpd gestartet. Es durchsucht die Datei /etc/printcap, um
  festzustellen, fr welche Drucker es Spools verwaltet. Jedes Mal, wenn
  man lpr aufruft, nimmt lpr mit lpd durch den named socket /dev/printer
  Verbindung auf und bergibt 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 - das heit, die meisten Anwender druckten reines
  ASCII. Wie sich herausgestellt hat, ist nur wenig mehr Aufwand ntig,
  damit lpd mit heutigen Druckauftrgen klarkommt, die hufig in
  PostScript sind, oder Text oder dvi oder...

  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 nicht
  darum, ob der Drucker die Dateien berhaupt versteht und wird
  vermutlich keine ansehnlichen Ausgaben produzieren. Trotzdem ist es
  der erste Schritt zum Verstndnis, also weiterlesen!

  Um eine Warteschlange zu lpd hinzuzufgen, 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 djet500
       lp|dj|deskjet:\
               :sd=/var/spool/lpd/dj:\
               :mx#0:\
               :lp=/dev/lp0:\
               :sh:

  Dies definiert einen Spool namens lp, dj oder deskjet mit dem Spool-
  Verzeichnis /var/spool/lpd/dj, ohne maximale Auftragsgre, der auf
  das Device /dev/lp0 ausgibt und am Anfang des Druckauftrags kein
  Deckblatt hinzufgt (mit dem Namen der Person, die gedruckt hat,
  etc.).

  Jetzt wre der richtige Augenblick, um die printcap Man-page zu lesen.

  Das obige Beispiel sieht sehr einfach aus, hat aber ein Problem. Wenn
  man keine Files sendet, die ein DeskJet 500 verstehen kann, wird
  dieser Deskjet seltsame Sachen drucken. Wenn man z.B. eine
  gewhnlichen UNIX-Textdatei an den Deskjet schickt, interpretiert er
  die Zeilenwechsel "wrtlich" und gibt aus:

       Dies ist Zeile eins.
                           Dies ist Zeile zwei.
                                               Dies ist Zeile drei.

  und so weiter. Der Ausdruck einer PostScript-Datei wrde eine schne
  Liste der PostScript-Befehle geben, mit diesem "Treppenstufeneffekt"
  ausgedruckt, aber keine sinnvolle Ausgabe.

  Offensichtlich wird mehr bentigt, und genau das ist die Aufgabe des
  Filterns. Dem aufmerksame Leser werden bei der printcap man-page die
  Spool-Attribute if und of aufgefallen sein. if, der Inputfilter, ist
  genau das, was wir jetzt brauchen.

  Wenn man ein kleines Shellscript namens filter schreibt, da
  Zeilenumbrche (CR) vor die Newlines setzt, wird der
  "Treppenstufeneffekt" verhindert. Also mu in den printcap-Eintrag
  eine if-Zeile eingefgt werden:

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

  Ein einfaches Filterscript knnte sein:

       #!perl
       # The above line should really have the whole path to perl
       # This script must be executable: chmod 755 filter
       while(<STDIN>){chop $_; print "$_\r\n";};
       # You might also want to end with a form feed: print "\f";

  Wenn man das machen wrde, htte man einen Spool, in den man
  gewhnliche UNIX-Textdateien drucken kann und sinnvolle Ergebnisse
  bekme. (Ja, es gibt vier Millionen bessere Mglichkeiten, diesen
  Filter zu schreiben, aber wenige so anschauliche. Der Leser mge dies
  effizienter gestalten.)

  Das einzige verbleibende Problem besteht darin, da gewhnlichen Text
  zu drucken nichts Besonderes ist - es wre sicherlich besser, wenn man
  PostScript und andere formatierte Texte oder Grafik-Ausgaben drucken
  knnte. Ja, das wre es, und es ist einfach zu machen. 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 einige wirklich gute im
  Netz. Der APS-Filter ist einer der besten, oder Ihre Linux-
  Distribution hat vielleicht ein Drucker-Setup Tool, das all dies
  deutlich vereinfacht.

  7.2.  File Permissions

  Auf Grund von hufigen Nachfragen folgtt hier eine Liste der
  Permissions der wichtigen Dateien, wie sie auf meinem System gesetzt
  sind. Es gibt bessere Mglichkeiten, im Idealfall ohne SUID root,
  sondern mit SGID Binrdateien, aber so wurde das System installiert
  und es funktioniert. (Ehrlich gesagt, wenn ein Verkufer noch nicht
  einmal ein funktionierendes lpd liefern kann...)

       -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, damit es die lp Service-
  Ports mit niedrigen Nummern ansprechen kann. Es sollte vielleicht UID
  lp.lp oder so etwas nach der Anbindung werden, aber das tut es wohl
  nicht. Dumm, das.

  8.  Woher man Drucker-Software bekommt

  Viele fertige Filterpakete (und andere Druckersoftware) kann man unter

       ftp://sunsite.unc.edu/pub/Linux/system/printing/

  finden. Utilities wie psutils, a2ps, mpage, dvitodvi, flpr usw. finden
  sich alle hier.

  Eine Zeitlang gab es mehrere Pakete da drauen, die alle versuchten,
  die Druckereinrichtung zu vereinfachen. Sie existieren wahrscheinlich
  alle noch, aber eines der besten und aktuellsten is 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 Sie einen von Ghostscript untersttzten
  Drucker auswhlen und das Unix Device, auf das gedruckt werden soll,
  und installiert sowohl eine Drucker-Queue in /etc/printcap als auch
  ein kurzes PostScript-und-ASCII Filterscript, das auf gs und auf
  nenscript (http://www.picante.com/~gtaylor/pht/man/nenscript.1.html)
  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 (http://www.cs.wisc.edu/~ghost/) ist ein unglaublich
  wichtiges Programm, um unter Linux zu drucken. Die meiste Software
  unter Unix generiert PostScript, was hufig ein DM200-Zubehr ($100,
  d. bers.) fr einen Drucker bedeutet. Ghostscript allerdings ist
  frei, und generiert aus den PostScriptdaten Daten in der Sprache Ihres
  Druckers. Wenn er in Verbindung mit Ihrem lpd Eingabefilter eingesetzt
  wird, sorgt er fr einen virtuellen PostScript-Drucker und erleichtert
  das Leben enorm.

  Ghostscript gibt es in zwei Ausfhrungen. Die kommerzielle Version von
  Ghostscript, "Aladdin Ghostscript", darf zwar frei verwendet, aber
  nicht auf kommerziellen Linux-Distributionen verbreitet werden. Es ist
  dem freien Ghostscript normalerweise 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", und ist
  einfach eine ltere Version des 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
  (http://www.picante.com/~gtaylor/pht/man/gs.1.html) anfangen,
  vergewissern Sie sich unbedingt, es mit der Option fr ausgeschaltete
  Dateizugriffe (-dSAFER) zu starten. PostScript is eine voll
  funktionale Sprache, und ein schlechtes PostScript-Programm knnte
  Ihnen ziemliche Kopfschmerzen bereiten.

  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, es
  direkt aufzurufen.

  gs -help gibt eine kurze, informative bersicht ber die Optionen und
  verfgbaren Treiber aus (beachten Sie bitte, da dies die Liste der
  einkompilierten Treiber ist, nicht die vollstndige Liste aller
  verfgbaren Treiber).

  Sie knnen gs fr Testzwecke folgendermaen aufrufen:

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

  10.2.  Feineinstellung der Ghostscript-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 der Ausgabe

  Die Position, 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 ich Ihnen nicht
  sagen kann, was Sie einstellen mssen, aber die meisten sind
  ausreichend gut kommentiert.

  10.2.2.  Gamma, Punktgre usw.

  Die meisten nicht-Laserdrucker leiden unter der Tatsache, da ihre
  Punkte recht gro sind. Dies fhrt dazu, da Bilder zu dunkel
  ausgegeben werden. Wenn Sie dieses Problem haben, sollten Sie Ihre
  eigene bertragungsfunktion verwenden. Erstellen Sie einfach die
  folgende Datei im Ghostscript lib-Verzeichnis und fgen Sie ihren
  Namen dem gs-Aufruf hinzu, genau vor der eigentlichen Druckdatei.
  Vielleicht mssen Sie die tatschlichen Werte Ihrem eigenen Drucker
  anpassen. Niedrigere Werte fhren zu einem helleren Ausdruck.
  Besonders, wenn Ihr 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, empfehle ich Ihnen die Benutzung der Datei colorcir.ps, die
  Ghostscript als Testseite beiliegt (im examples/ -Unterverzeichnis).

  11.  Wie man auf einen Drucker ber ein Netzwerk druckt

  Eine der Fhigkeiten von lpd liegt darin, 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.  Auf einen UNIX/lpd Host

  Um es anderen Rechnern zu ermglichen, auf dem eigenen Drucker zu
  drucken, mssen diese in /etc/hosts.equiv oder /etc/hosts.ldp
  aufgelistet werden. Achtung: hosts.equiv hat viele weitere Effekte;
  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 Man-page fr mehr
  Informationen.
  11.1.1.  Mit lpd

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

       # NETZWERK djet500
       lp|dj|deskjet:\
               :sd=/var/spool/lpd/dj:\
               :rm=geraet.da.draussen.com:\
               :rp=printername:\
               :lp=/dev/null:\
               :sh:

  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.  Mit rlpr

  Man kann auch rlpr benutzen, um einen Druckauftrag direkt in eine
  Warteschlange auf einem Netzwerkrechner zu schicken, ohne sich die
  Mhe zu machen, 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 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. Es 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:

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

  11.2.  Auf einen Win95, WinNT, LanManager oder Samba-Drucker

  Es ist mglich, eine lpd-Warteschlange mit dem smbclient-Programm (ein
  Teil des Samba-Pakets) zu einem TCP/IP-basierenden SMB-Druckservice zu
  schicken. 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. Hierzu siehe die Man-
  page.

  11.3.  Auf einen Netware-Drucker

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

       sunsite.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. Man bentigt Kernel 1.2.x oder 1.3.54 oder hoeher.
       ncpfs funktioniert NICHT mit 1.3.x-Kernels unter 1.3.54.)

  Damit nprint ber lpd arbeitet, schreibt man ein kleines Shellscript,
  um stdin auf dem Netware-Drucker zu drucken und installiert es als if
  fr eine lpd Warteschlange. Man erhlt so etwas wie:

       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
       # You should try the guest account with no password first!
       /usr/local/bin/nprint -S net -U name -P passwd -q printq-name -

  11.4.  Auf einen EtherTalk- (Apple-) Drucker

  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.  Auf einen HP oder anderem Ethernet-Drucker

  HPs und einige andere Drucker besitzen ein Ethernet-Interface, auf dem
  man direkt mit lpd drucken kann. Man sollte den Anweisungen folgen,
  die mit dem Drucker oder Netzwerkadapter geliefert wurden, aber
  generell lassen solche Drucker lpd "laufen" und stellen eine oder
  mehrere Warteschlangen zur Verfgung. Ein HP zum Beispiel knnte 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", die PCL (und eventuell
  PostScript) akzeptiert, und "text", die reines ASCII erwartet (und
  automatisch den Treppeneffekt korrigiert). Wenn Sie eine JetDirect
  Plus3 drei-Port Box besitzen, besitzen die Queues die Bezeichnungen
  "raw1", "text2" usw.

  In einem groen Netz, besonders 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 einen
  Telnet auf den Drucker ausfhren, zweimal Return drcken und danach
  "banner: 0" gefolgt von "quit". Sie knnen auch andere Einstellungen
  auf diese Art verndern; tippen Sie "?" ein, um eine Liste angezeigt
  zu bekommen.

  11.5.1.  Auf alten HPs

  Einige Drucker (und Drucker-Netzwerk "Black Boxes") untersttzen nur
  ein kleines "Nicht-Protokoll" mit reinen TCP-Verbindungen.
  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 drei-Port Boxen)
  ffnen und den Druckauftrag hierdurch schicken. Das kann u.a. in Perl
  implementiert werden:

  #!/usr/bin/perl
  # Thanks to Dan McLaughlin for writing the original version of this
  # script (And to Jim W. Jones for sitting next to Dan when writing me
  # for help ;)

  $fileName = @ARGV[0];

  open(IN,"$fileName") || die "Kann Datei $fileName nicht oeffnen";

  $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 fuer 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.  Ein if fr Netzwerkdrucker

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

       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:

  mit diesem passenden filter-lj-5-Script:

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

  Die -U-Option bei 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 Usernamen zu ermitteln, denn manchmal ist es
  nicht Argument 5. Siehe auch die Man-page zu printcap.

  11.7.  Von Windows aus.

  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 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.  Von einem Apple aus.

  Netatalk untersttzt das Drucken von Apple-Clients ber EtherTalk.
  Siehe hierfr auch die Netatalk HOWTO Page
  (http://thehamptons.com/anders/netatalk/).

  11.9.  Von Netware aus.

  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 werfen
  (ftp://ftp.gwdg.de/pub/linux/misc/ncpfs/).

  12.  Windows-only printers

  Wie ich schon worher erklrt habe, 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 geleitet wird. Manchmal
  verstehen solche Drucker auch etwas anderes wie normales PCL, aber
  meistens nicht. In einigen (wirklich billigen) Fllen besitzen die
  Drucker nicht einmal eine normale Parallelverbindung, sondern
  bentigen den Herstellertreiber, um zu emulieren, was eigentlich die
  Hardware machen sollte (hauptschlich Handshaking).

  In jedem Fall gibt es einige mgliche Auswege, wenn Sie eine solche
  "Zitrone" erwischt haben.

  12.1.  Der Ghostscript Windows Druckertreiber

  Es gibt mittlerweile einen Windows Druckertreiber (namens mswinpr2),
  der einen Druckkauftrag durch Ghostscript leitet, bevor er ihn druckt.
  (hnlich einem if-Filter im Unix lpd.) Es gibt auch einen neuen
  Ghostscriptttreiber, der ber Windows- (GDI-) Aufrufe druckt.
  Zusammengenommen sollte(tm) dies einer Windowsmaschine erlauben,
  PostScript auf einen Windows-only Drucker ber den Herstellertreiber
  auszugeben.

  Wenn Sie dies zum Laufen bringen, knnen Sie den Anweisungen oben
  folgen, um von Linux aus ber das Netzwerk auf einen Windowsdrucker zu
  drucken, um es so Unixrechnern (oder einem anderen Windows, Mac usw.)
  zu ermglichen, auf Ihrer "Zitrone" zu arbeiten.

  Es sei klargestellt, da Ich dies nie ausprobiert habe, weil ich
  keinen Windowsdrucker besitze, daher mag Ihr Erfolg unterschiedlich
  ausfallen. Smtliche ntige Software sollte auf der Ghostscript-
  Homepage (siehe Links im Ghostscript-Abschnitt) verfgbar sein.

  12.2.  Das pbm2ppa Programm

  Einige HP Drucker benutzen die "Printing Performance Architecture"
  (marktgerecht fr "wir waren zu billig, um PCL zu benutzen"). 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
  den Drucker ausgegeben werden kann. Mittlerweile knnte es dieses
  Programm auch als Ghostscript Druckertreiber geben.

  Die ppa-Software kann von der ppa Homepage
  (http://www.rpi.edu/~normat/technical/ppa/) heruntergeladen werden;
  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.  Wie man auf einem Faxgert druckt

  13.1.  Mit einem Faxmodem

  Es gibt einige Faxprogramme, mit denen man faxen und Dokumente
  empfangen kann. Eines der komplexesten ist Sam Lefflers HylaFax,
  erhltlich von 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 nicht-Java
  Fax-Clients fr die meisten Plattformen; Linux kann mit ziemlicher
  Sicherheit Ihren Netzwerk Fax Anforderungen gengen.

  Ebenfalls verfgbar, und die bessere Wahl fr die meisten Linuxboxen:
  efax (http://www.picante.com/~gtaylor/pht/man/efax.1.html).  Das ist
  ein einfaches Programm, das Faxe sendet. Das getty-Programm mgetty
  kann Faxe empfangen (und sogar Sprache mit einigen Modems!).

  13.2.  Mit dem Remote Printing Service

  Es gibt einen experimentellen Dienst, an den man eine eMail senden
  kann, die dann irgendwo anders auf einem Faxgert erscheint. Es werden
  Formate wie PostScript untersttzt, so da es ein sehr sinnvoller
  Dienst ist, obwohl die globale Untersttzung lckenhaft ist. Fr
  weitere Informationen siehe die "Remote Printing WWW Site"
  (http://www.tpc.int/).

  14.  Wie man etwas Druckbares herstellt.

  Hier kommt man in ein wahres Rattennest an Software. Grundstzlich
  kann man viele verschiedene Typen von Binrdateien mit
  unterschiedlichem Erfolg laufen lassen: Linux/x86, Linux/Alpha,
  Linux/Sparc, Linux/foo, iBCS, Win16/Win32s (mit dosemu und irgendwann
  mit Wine) und Mac/68k (mit Executor). Ich werde nur reine Linux und
  UNIX-Programme behandeln.

  Fr Linux selbst ist man hauptschlich auf die fr UNIX generell
  erhltlichen Programme beschrnkt:

  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. Ein schnes Zeichen in einer Formatierungssprache knnte
  schmerzhaft sein...

     nroff
        Diese war eine der ersten Formatierungssprachen fr UNIX. Man-
        pages sind das hufigste Beispiel fr Texte, die mit *roff-
        Makros formatiert wurden; einige Leute schwren darauf, aber
        nroff hat fr mich eine kompliziertere Syntax als ntig und ist
        deshalb wohl eine schlechte Wahl fr neue Texte. Man sollte aber
        trotzdem wissen, da man eine Man-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. Technische Werke
        werden hufig in LaTeX geschrieben, denn es vereinfacht die
        Layoutfragen stark und ist immer noch eines der wenigen
        Textverarbeitungssysteme, da mathematische Formeln komplett und
        gut untersttzt. Das Ausgabeformat von TeX ist dvi und kann mit
        dvips oder dvilj nach PostScript bzw. Hewlett Packards PCL
        konvertiert werden.

     SGML
        Es gibt mindestens einen freien sgml-Parser fr Unix und Linux;
        es bildet die Basis des selbst entwickelten Dokumentensystems
        von Linuxdoc-SGML. Es kann auch andere DTDs untersttzen.

     HTML
        Jemand hat vorgeschlagen, einfache Projekte in HTML zu schreiben
        und mit Netscape auszudrucken. Ich bin anderer Meinung, aber
        Ihre Erfahrungen mgen anders sein.

  14.2.  WYSIWYG

  Mittlerweile gibt es keinen Mangel an WYSIWYG
  Textverarbeitungssoftware mehr. Es gibt mehrere vollstndige Office-
  Pakete, und sogar eins, das fr private Nutzung frei verfgbar ist
  (StarOffice).

     StarOffice
        Eine deutsche Firmat vertreibt StarOffice fr Linux frei ber
        das Netz. Dieses vollwertige Office-Paket verfgt ber alle
        Fhigkeiten, die man erwartet, und der Preis ist unschlagbar. Es
        gibt ein Mini-HOWTO, das beschreibt, wie man es bekommt und
        installiert. Es produziert PostScript oder PCL, so da es mit
        fast jedem Drucker arbeiten sollte, der auch sonst unter Linux
        funktioniert.

     LyX
        LyriX ist ein Frontend fr LaTeX, das vielversprechend aussieht.
        Auf der LyX Homepage (http://www-pu.informatik.uni-
        tuebingen.de/users/ettrich/) gibt es weitere Informationen. 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. Ich
        glaube aber nicht, da es bereits benutzbar ist.

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

     Kommerzielle Angebote
        Zumindest Caldera und Red Hat beeinhalten Pakete mit den
        blichen Office-Anwendungen wie einer WYSIWYG-Textverarbeitung
        und einer Tabellenkalkulation. Ich nehme an, da sie gut
        funktionieren, habe sie aber noch nie benutzt. Ich glaube, da
        Caldera auch Sun's WABI vertreibt, so da man vielleicht etwas
        wie MS Office laufen lassen kann, wenn man mit den Dateien
        anderer Leute arbeiten mu.

        Jeff Phillips (jeff@I_RATUS.org) verwendet Caldera's WordPerfect
        fr Linux (auf Slackware) und sagt, da es gut funktioniert.  Es
        besitzt anscheinend eingebaute Druckeruntersttzung, wie zu
        erwarten war. Caldera sollte mehr Informationen unter
        http://www.caldera.com/ haben. Sie knnen ferner eine neuere
        Version von WordPerfect direkt von der Firma beziehen, die
        Corel's Unix-Ports herstellt.

        RedHat und SuSE vertreiben ein Paktet namens Applixware; ihre
        Website ist unter http://www.redhat.com zu erreichen. 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; ich wrde vermuten, da es
        ziemlich dasselbe ist, aber langsamer und mit weniger
        Fhigkeiten.

        Sonstige Firmen knnen mich gerne ber ihre Produkte
        unterrichten.

  15.  Voransicht von druckbaren Sachen auf dem Bildschirm

  Fast alles, das man drucken kann, kann auch dem Bildschirm angezeigt
  werden.

  15.1.  PostScript

  Ghostscript besitzt einen X11-Treiber, der am besten unter der
  Verwaltung des PostScript-Betrachters gv verwendet wird. Die neuesten
  Versionen dieser Programme sollten auch PDF-Dateien betrachten knnen.
  Beachten Sie, da gv das ltere Preview-Programm "Ghostview" ersetzt
  hat; die neue Benutzerschnittstelle ist wesentlich ansehnlicher und
  funktionaler als ghostview's altes reines Athena-Interface.

  15.2.  TeX dvi

  TeX DeVice-Independant-files (gerteunabhngige Dateien) knnen unter
  X11 mit xdvi betrachtet werden. Moderne Versionen von xdvi rufen
  Ghostscript auf, um PostScript-"specials" zu verarbeiten.

  Es gibt ebenfalls einen VT100-Treiber. Er wird dgvt genannt.  Tmview
  arbeitet mit Linux und svgalib, falls das alles ist, was verfgbar
  ist.

  15.3.  Adobe PDF

  Adobe's Acrobat Reader gibt es auch fr Linux; Sie knnen es einfach
  von ihrer Web-Site herunterladen (http://www.adobe.com/).

  Sie knnen auch xpdf benutzen, da Freeware ist und mit Quellen
  verfgbar ist, und ich glaube, da Ghostview mit gs mittlerweile das
  Betrachten von PDF-Dateien unter X11 untersttzt.

  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 des seriellen Ports zu kontrollieren, an
  den der Drucker angeschlossen ist.  Man lese dazu die printcap Man-
  page und beachte die Bedeutungen von br#, fc#, xc#, fs# und xs#. Die
  letzten vier dieser Attribute sind Bitmaps, die fr die Einstellungen
  dieses Ports 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 Man-page von stty.

  Benutzen Sie stty, um den Druckerport so einzustellen, so da man ein
  File an ihn mit cat schicken kann, und es korrekt ausgegeben wird. So
  sieht `stty -a' fr meinen Druckerport aus:

       dina:/usr/users/andy/work/lpd/lpd# 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. Ihr Port
  kann durchaus anders sein, abhngig von der Flukontrolle Ihres
  Druckers.

  Wirklich verwendet wird stty auf eine etwas ungewhnliche Weise. Weil
  stty auf dem Terminal arbeitet, das mit seinen Standardinput ("stdin",
  d. bers) verbunden ist,  kann man damit einen seriellen Port
  manipulieren, indem man das `<'-Zeichen wie oben verwendet.
  Sobald die stty-Einstellungen richtig sind, wenn also `cat file >
  /dev/ttyS2' (in meinem Fall) die Datei an den Drucker schickt, sollte
  man die Datei /usr/src/linux/include/asm-i386/termbits.h betrachten.
  Diese Datei enthlt viele #defines und einige structs (man sollte
  diese Datei auf den Drucker ausgeben (das funktioniert ja jetzt,
  oder?) und als Vorlage verwenden). Man betrachte den Abschnitt, der
  mit

       /* c_cflag bit meaning */
       #define CBAUD   0000017

  anfngt. Dieses 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 (ich mache es so).

  Jetzt macht man das gleiche fr die Einstellungen, die kein - vor sich
  haben. In dem Beispiel sind die wichtigen CS8 (0000060), HUPCL
  (0002000), und CREAD (0000200). Beachten Sie auch die Flags fr die
  Baudrate (meine ist 0000015). Zhlen Sie alle zusammen und Sie
  bekommen in diesem Beispiel 0002275 heraus. Das kommt in die fs#-
  Einstellung (`fs#02275' funktioniert in meinem Beispiel gut).

  Machen Sie das gleiche mit "set" und "clear" fr den nchsten
  Anschnitt der Includedatei, "c_lflag bits". Ich fr meinen Teil mute
  nichts einstellen und verwende deshalb `xc#0157777' und `xs#0'.

  16.2.  ltere serielle Drucker, die Zeichen verschlucken

  Jon Luckey hat festgestellt, da einige ltere serielle Drucker mit
  10-cent seriellen Interfaces und kleinen Buffern wirklich Stopp
  meinen, wenn sie das mit ihrer Flukontrolle sagen. Er fand heraus,
  da man das aufhrte, wenn er fr den "16550"-Serialbaustein mit
  setserial den FIFO ausschaltete (man gibt offensichtlich nur den UART-
  Typ als "8250" an).

  17.  Credits

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

  Die Informationen ber nprint, um NetWare-Drucker zu verwenden, wurde
  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 gammas und soweiter fr gs wurde eingeschickt 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.

