Information für Druckerhersteller bzgl. Linux-Unterstüzung
Dieses Dokument ist eine Vorabversion.
Die eigentliche Version wird in Kürze über unsere Support-Datenbank
http://portal.suse.com/sdb/de/index.html
verfügbar sein.
Anliegen
Sie sind Druckerhersteller oder bieten Software an, die auf spezielle
Druckerunterstützung angewiesen ist und Sie möchten grundlegende
oder optimale Linux-Unterstützung erreichen.
Allgemeine Vorbemerkungen
Dieser Artikel richtet sich auch an Nicht-Techniker.
Es liegt aber in der Natur der Sache, dass das Thema ohne technischen
Hintergrund weder ordentlich zu beschreiben noch zu verstehen ist.
Ohne technische Exaktheit kann die Vielschichtigkeit des Themas
zu babylonischer Sprachverwirrung führen.
Der Artikel ist in einen allgemeinen und einen technischen Teil gegliedert:
Zuerst kommt der allgemeine Teil, der mit einem
Überblick und Index
endet, in dem die einzelnen Fälle stichpunktartig zusammengefasst sind,
die dann im technischen Teil nacheinander behandelt werden.
Die "schlimmsten" technischen Details sind in dementsprechend
gekennzeichneten Unterabschnitten behandelt.
Gerade die technischen Details liefern Hintergrundinformationen zur Lizenzproblematik,
so dass diese auch für Nicht-Techniker interessant sein können.
Öffenlich verfügbare Information
Am wichtigsten ist öffenlich verfügbare Information
-
welche Druckermodelle mit existierenden freien Linux-Treibern wie gut funktionieren,
-
welche Druckermodelle mit existierenden proprietären Linux-Treibern wie gut funktionieren,
-
welche Druckermodelle nicht mit Linux funktionieren,
-
welche Druckermodelle softwareseitig (bzgl. der Druckersprache) zueinander kompatibel sind.
Wichtig sind Angaben, ab welcher Versionsnummer welche Linux-Treiber
das jeweilige Druckermodell wie gut unterstützen.
Informationen zur Kompatibilität sind notwendig, um in die ständig wachsende Vielzahl
von Druckermodellen und Modellvarianten Struktur zu bekommen und den Überblick zu behalten.
Am günstigsten ist eine Einteilung in Kompatibilitätsklassen, wobei jede
Kompatibilitätsklasse die Druckermodelle enthält, die softwareseitig kompatibel
zueinander sind, die also dieselbe Druckersprache unterstützen und daher mit denselben
Linux-Treibern bzw. mit denselben Linux-Treibereinstellungen funktionieren (siehe den Artikel
"Drucker-Kauf und Kompatibilität"
). Druckertreiber sind normalerweise nicht für jedes einzelne Modell verschieden,
sondern nur für jede Kompatibilitätsklasse.
Beispielsweise der HPIJS Treiber von HP basiert auf diesem Prinzip (siehe
http://hpinkjet.sourceforge.net/printmodedescr.php
) und auch in der Liste des Gimp-Print Treibers werden Kompatibilitätsklassen
bei den "pcl-xxx" Klassen und bei einigen "bjc-xxx" Klassen deutlich (siehe
http://gimp-print.sourceforge.net/p_Supported_Printers.php3
).
Jeder Druckerhersteller sollte zumindest diese Informationen öffentlich
zur Verfügung stellen damit die Kunden sich für geeignete Druckermodelle
entscheiden können, denn die mit Abstand wichtigste Vorausssetzung für einen
problemlosen Druckerbetrieb ist, das passende Druckermodell zu verwenden.
Welches Drucksystem (CUPS oder LPRng/lpdfilter) eingesetzt wird, ist
zweitrangig, denn beide Drucksysteme funktionieren problemlos.
Probleme beim Drucksystem lassen sich fast immer durch entsprechende
Konfiguration in den Griff bekommen.
Es ist zwar nicht jeder Wunsch konfigurierbar, aber für fast jede
Problemstellung gibt es eine ausreichende Lösung.
Probleme, deren Ursache ein ungeeigneter Drucker ist, können meist nicht
durch Anpassungen der Konfiguration des Drucksystems behoben werden.
Bei
http://www.linuxprinting.org/
gibt es DIE Linux Druckerdatenbank.
Unter
http://www.linuxprinting.org/contribute.html
ist beschrieben, welche Informationen genau benötigt werden.
Natürlich kann dieselbe Information auch auf Web-Seiten des Druckerherstellers
öffentlich verfügbar gemacht werden, wie z.B bei
http://hpinkjet.sourceforge.net/productssupported.php
Nicht notwendig, aber sehr nützlich ist die Information, welche exakte Identifkation das jeweilige
Modell liefert, wenn es via Parallelport (IEEE-1284), via USB oder via SNMP abgefragt wird.
Damit ist es möglich, das Druckermodell automatisch zu erkennen und wenn ein Treiber
dafür vorhanden ist, auch automatisch zu konfigurieren.
Bedingungen
Keinesfalls sollte zur Linux-Unterstützung von Druckern ein komplettes
eigenes Drucksystem implementiert werden. Es kann nicht funktionieren,
wenn verschiedene Drucksysteme auf demselben Rechner benötigt werden,
um den Rechner als Druckserver für verschiedene Drucker betreiben zu können.
Egal wie die Linux-Unterstützung implementiert wird, sie muss sich
reibungslos in die bestehenden Strukturen integrieren, d.h. sie muss
kompatibel zu den Verarbeitungsstufen der bestehenden Drucksysteme sein.
Das Hauptanliegen dieses Artikels ist, die dazu notwendigen grundlegenden
Informationen zu liefern.
Das bedeutet nicht, dass nicht zusätzlich zu den unten genannten Möglichkeiten
zur Linux-Unterstützung ein eigenes neues Drucksystem entwickelt werden darf.
Es bedeutet aber, dass die Linux-Unterstützung von Druckern nicht von
einem solchen Drucksystem abhängen darf.
Linux-Treiber und PPD-Dateien für Drucker müssen
-
offenen Quellcode haben (Open-Source),
-
unter einer hinreichend freien Lizenz stehen (z.B. GPL oder BSD), die insbesondere
Änderungen am Quellcode und sowohl Distribution als auch Re-Distribution erlaubt
(vergl. die "Debian Free Software Guidelines (DFSG)" unter
http://www.debian.org/social_contract.html#guidelines),
-
platformunabhängigen Quellcode haben,
damit wir sie standardmässig in unsere Produkte integrieren können,
denn die Standardsoftware für unsere Produkte wird für die verschiedenen
Hardwareplatformen immer aus dem Quellcode komplett neu compiliert.
Das bedeutet nicht, dass wir keine proprietäre Software in unsere
Produkte integrieren können, aber es bedeutet, dass wir das nicht
standardmässig machen können, sondern nur, falls es für uns interessant
sein sollte. Da es Hunderte Druckermodelle gibt, die sehr gut mit
freien Open-Source Linux-Treibern funktionieren, ist es eher unwahrscheinlich,
dass proprietäre Linux-Treiber für uns interessant sind.
Auch für Anwender sollten proprietäre Linux-Treiber normalerweise uninteressant sein,
denn es dürfte sich nur in Ausnahmefällen lohnen, Arbeitszeit für einen
proprietären Linux-Treiber aufzuwenden, wenn man für vergleichbare Kosten
einen neuen ordentlichen Drucker anschaffen kann. Insbesondere deswegen nicht,
weil mit einem ordentlichen Drucker das Treiberproblem ein für alle Mal gelöst ist.
Ein ordentlicher Drucker wird immer "out of the Box" funktionieren.
Nie wieder ist proprietäre Treibersoftware einzuspielen und ggf. speziell zu konfigurieren.
Nie wieder müssen Treiber-Updates beschafft werden, damit dieser zu neueren Entwicklungen
im Drucksystem passt (siehe z.B. den Artikel
"Probleme mit den Lexmark Treibern ab der SuSE Linux 8.1"
).
Linux-Treiber von Druckerherstellern, die obigen Bedingungen genügen,
können standardmässig in unsere Produkte integriert werden.
Der Vorteil für den Druckerhersteller ist, dass er damit umfassende
Linux-Unterstützung für seine Geräte bekommt
-
in allen unseren Produkten die ein Drucksystem beinhalten,
-
auf allen Hardwareplatformen für die es diese Produkte gibt,
-
fortlaufend für neue Versionen der Produkte die ein Drucksystem beinhalten
ohne dass es dem Druckerhersteller zusätzlichen Aufwand kostet.
Ein gutes Beispiel, wie ein Linux-Treiber von einem Druckerhersteller
auf vorbildliche Weise gemacht sein kann, liefert der HPIJS Treiber von HP,
siehe das "hp linux inkjet project" unter
http://hpinkjet.sourceforge.net/
Es ist wichtig, zwischen dem eigentlichen Linux-Treiber und evtl. angebotener
zusätzlicher Software (z.B. Drucker-Fernwartungs-Tools etc.) zu unterscheiden.
Nur der eigentliche Linux-Treiber muss obigen Bedingungen genügen.
Zusammenfassung:
Wir wollen keine Linux-Treiber für Drucker unterstützen,
die sich nicht reibungslos in die bestehenden Drucksysteme integrieren.
Vergl. dazu den Abschnitt "Hinweise" im Artikel
"GDI-Drucker".
Ein anderer Fall ist, wenn ein Hersteller für eine schon vorhandene proprietäre Software
(z.B. ein proprietäres Drucksystem) ein Betriebssystem sucht,
um eine komplette Server-Lösung anbieten zu können.
Das kann mit einer OEM-Version eines SUSE LINUX Server Produkts erreicht werden.
Details
Warum müssen bei Linux-Treibern und PPD-Dateien Änderungen am Quellcode erlaubt sein?
-
Da wir die Linux-Treiber für die verschiedenen Hardwareplatformen immer
aus dem Quellcode komplett neu compilieren, kann es sein, dass hierbei
Probleme auftreten weil der Quellcode nicht perfekt platformunabhängig ist.
Wir müssen dann den Quellcode so ändern können, dass er für die verschiedenen
Hardwareplatformen compiliert werden kann.
-
Evtl. entdecken wir bei unseren Tests Fehler im Linux-Treiber oder in PPD-Dateien.
Wir müssen dann Änderungen vornehmen können, um diese Fehler zu vermeiden oder
zu beheben.
-
Aus Zeitgründen müssen wir solche Änderungen sofort vornehmen können,
ohne dass vorher eine Erlaubnis dazu eingeholt werden muss.
Durch Rückmeldung an die Autoren des Linux-Treibers oder der PPD-Datei fliesst
die Information über Probleme und mögliche Lösungen wieder zurück und dient
der langfristigen Perfektionierung von Treibern und PPD-Dateien.
Warum muss bei Linux-Treibern und PPD-Dateien
sowohl Distribution als auch Re-Distribution erlaubt sein?
-
Die Erlaubnis zur Distribution ermöglicht es, den Linux-Treiber oder die PPD-Datei
in Endkunden-Produkte zu integrieren, durch die der Linux-Treiber oder die PPD-Datei
an die Endkunden vertrieben wird.
-
Die Erlaubnis zur Re-Distribution ermöglicht es, den Linux-Treiber oder die PPD-Datei
in OEM-Produkte zu integrieren, durch die der Linux-Treiber oder die PPD-Datei vom
"Original Equipment Manufacturer" an die Endkunden weiter vertrieben wird.
-
"Grundlegende Linux-Unterstützung" bedeutet hier, dass ein normaler
Ausdruck funktioniert und ordentlich aussieht.
Aber beispielsweise kann die maximal mögliche Auflösung nicht unterstützt sein
oder Farbtöne werden nicht ganz korrekt dargestellt oder Sonderfunktionen
(wie z.B. Papierschachtwahl oder ein spezieller Photomodus) sind nicht unterstützt.
-
"Optimale Linux-Unterstützung" bedeutet hier, dass alle Druckerfunktionen,
die das jeweilige Modell kann, unter Linux zur Verfügung stehen.
-
Eine als "gegeben" bezeichnete Linux-Unterstützung bedeutet, dass die Unterstützung
derzeit schon vorhanden ist.
-
Eine als "möglich" bezeichnete Linux-Unterstützung bedeutet, dass die Unterstützung
evtl. noch nicht vorhanden ist, aber ohne besondere Probleme erreicht werden kann,
etwa indem ein Linux-Treiber, der obigen Bedingungen genügt, integriert wird.
PostScript Drucker
-
Grundlegende Linux-Unterstützung ist immer gegeben.
-
Optimale Linux-Unterstützung benötigt:
-
Eine zum jeweiligen PostScript Drucker passende PPD-Datei.
PCL+JCL Drucker
-
Grundlegende Linux-Unterstützung ist immer gegeben.
-
Optimale Linux-Unterstützung benötigt:
-
Eine zum jeweiligen PCL+JCL Drucker passende PPD-Datei.
-
Zumeist ein dazu passendes Script oder Programm, was einen bestimmten
zusätzlichen Verarbeitungsschritt durchführt (siehe unten).
Drucker mit Ghostscript Unterstützung
-
Grundlegende Linux-Unterstützung ist zumeist gegeben und immer möglich.
-
Optimale Linux-Unterstützung benötigt:
-
Einen Ghostscript-Treiber, der alle Druckerfunktionen des jeweiligen Modells unterstützt.
-
Eine zum Ghostscript-Treiber passende PPD-Datei.
-
Ggf. ein dazu passendes Script oder Programm, was einen bestimmten
zusätzlichen Verarbeitungsschritt durchführt (siehe unten).
Drucker mit CUPS "rasterto..." Unterstützung
-
Grundlegende Linux-Unterstützung für das CUPS Drucksystem ist zumeist gegeben und immer möglich.
-
Optimale Linux-Unterstützung für das CUPS Drucksystem benötigt:
-
Einen "rasterto..."-Treiber, der alle Druckerfunktionen des jeweiligen Modells unterstützt.
-
Eine zum "rasterto..."-Treiber passende PPD-Datei.
Das LPRng/lpdfilter Drucksystem unterstützt "rasterto..."-Treiber nicht direkt.
Aber mit dem zusätzlichen Filter "foomatic-rip" ab Version 3.0.1 können auch
"rasterto..."-Treiber für das LPRng/lpdfilter Drucksystem verwendet werden.
Ausserdem kann bei betriebssystemunabhängigem Quellcode ein "rasterto..."-Treiber
auch für das Mac OS X Betriebssystem verwendet werden, weil Mac OS X das CUPS Drucksystem hat.
Drucker mit "Postfilter" Unterstützung
-
Grundlegende Linux-Unterstützung ist möglich, kann aber schwierig bzw.
für normale Benutzer unmöglich sein.
-
Optimale Linux-Unterstützung hängt vom jeweiligen Fall ab und
ist oft problematisch bzw. für normale Benutzer unmöglich.
Drucker ohne Linux-Unterstützung (GDI-Drucker)
-
Für grundlegende bzw. optimale Linux-Unterstützung muss der Druckerhersteller einen
Linux-Treiber bereitstellen.
Hier sind nur die folgenden beiden Möglichkeiten sinnvoll:
-
Durch einen Ghostscript-Treiber bekommt der Drucker Ghostscript Unterstützung.
Ghostscript Unterstützung bietet Unabhängigkeit vom Drucksystem, erfordert aber
einen bestimmten zusätzlichen Verarbeitungsschritt (siehe "Foomatic" unten).
Ab SUSE LINUX 9.0 ist dieser "Foomatic"-Verarbeitungsschritt bei CUPS und
LPRng/lpdfilter genau gleich, siehe den Abschnitt "Änderungen bei LPRng/lpdfilter"
im Artikel
"Drucker einrichten ab SUSE LINUX 9.0".
-
Durch einen CUPS "rasterto..."-Treiber bekommt der Drucker direkte CUPS Unterstützung,
aber das LPRng/lpdfilter Drucksystem unterstützt "rasterto..."-Treiber nicht direkt.
Mit dem zusätzlichen Filter "foomatic-rip" ab Version 3.0.1 können auch
"rasterto..."-Treiber für das LPRng/lpdfilter Drucksystem verwendet werden.
Ausserdem kann bei betriebssystemunabhängigem Quellcode ein "rasterto..."-Treiber
auch für das Mac OS X Betriebssystem verwendet werden, weil Mac OS X das CUPS Drucksystem hat.
Allgemeines zum technischen Teil
Der technische Teil schreitet vom bzgl. Linux-Unterstützung einfachsten Fall
(PostScript Drucker) zu immer schwierigeren Fällen fort, wobei bei den
schwierigeren Fällen das Wissen der einfacheren Fälle vorausgesetzt wird.
Jeder Fall beginnt mit einer Definition, welche Art Drucker gemeint ist und mit
einer grundlegenden Erklärung der notwendigen Begriffe.
Es folgt eine grundlegende Darstellung welche Verarbeitungsstufen durchlaufen werden,
damit die korrekten Daten beim Drucker ankommen. Das ist Voraussetzung,
um zu verstehen, wie die Linux-Unterstützung im jeweiligen Fall aussehen muss
und was für eine grundlegende Linux-Unterstützung notwendig ist
und was für eine optimale Linux-Unterstützung hinreichend ist.
Die Verarbeitungsstufen können je nach Drucksystem (CUPS oder LPRng/lpdfilter)
verschieden sein und dementsprechend kann die Linux-Unterstützung verschieden sein.
Um den Artikel in seiner Struktur nicht zu komplex werden zu lassen, wird hier
schwerpunktmässig das CUPS Drucksystem betrachtet und ggf. auf Einschränkungen
der Linux-Unterstützung bei LPRng/lpdfilter hingewiesen.
Für CUPS siehe http://www.cups.org/
und für LPRng siehe http://www.lprng.com/
Mit "PostScript Drucker" ist hier ein Drucker gemeint, der "PostScript Level 2"
oder "PostScript Level 3" unterstützt.
PostScript wurde von Adobe entwickelt und ist die Standarddruckersprache unter Linux.
Verarbeitungsstufen
-
Wenn die zu druckenden Daten nicht PostScript sind, werden sie in PostScript umgewandelt.
-
Den PostScript Daten werden ggf. die passenden Steuerkommandos hinzugefügt, die der
Drucker braucht, damit spezielle Druckerfunktionen wie z.B. Papierschachtwahl,
Duplex-Modus oder Tonerspar-Modus aktiviert werden.
Bei einem PostScript Drucker sind alle Druckerfunktionen und die dazu nötigen
Steuerkommandos in der zum Drucker gehörenden PPD-Datei hinterlegt.
-
Die PostScript Daten plus Steuerkommandos werden zum Drucker geschickt.
Grundlegende Linux-Unterstützung
Da ein PostScript Drucker die PostScript Daten direkt zu Papier bringen kann,
ist die grundlegende Linux-Unterstützung für einen PostScript Level 2 oder Level 3
Drucker unabhängig vom Drucksystem immer gegeben.
Die grundlegende Linux-Unterstützung für einen PostScript Level 1 Drucker ist
mit einem zusätzlichen Verarbeitungsschritt, der PostScript Level 1 erzeugt,
auch immer möglich.
Optimale Linux-Unterstützung
Dazu muss in diesem Fall folgendes unter Linux zur Verfügung stehen:
-
Eine zum jeweiligen PostScript Drucker passende PPD-Datei.
Solche PPD-Dateien sind alle schon vorhanden, denn jeder Hersteller legt
einem PostScript Drucker eine genau passende PPD-Datei bei.
Allerdings bieten Druckerhersteller die PPD-Datei oft nur in seltsamen Formaten
für Fremdbetriebssysteme an (z.B. selbstentpackende EXE-Archive).
PPD-Dateien sind aber ganz normaler ASCII-Text und auch nicht derart gross,
dass eine Komprimierung wirklich notwendig wäre.
Auch restiriktive Lizenzen für die PPD-Datei können die Verwendung für Linux verhindern.
Siehe dazu auch den Artikel
"Drucker einrichten ab SuSE Linux 8.2".
Technische Details
Was ist eine PPD-Datei und wozu ist sie da?
Eine PPD Datei enthält die modellspezifischen Druckerfunktionen mit ihren
Auswahlmöglichkeiten und den zugehörigen PostScript Code Schnipseln,
die an den PostScript Drucker geschickt werden müssen, damit die ausgewählte
Funktion aktiviert wird.
Der Aufbau der Einträge für eine Druckerfunktion
(hier als Beispiel die Auswahl der Auflösung) ist gemäß der
"Adobe PostScript Printer Description File Format Specification, Version 4.3"
wie folgt:
-
Jeder Druckerfunktion ist ein "Main Keyword" zugeordnet.
-
Jeder Auswahlmöglichkeit ist ein "Option Keyword" und ein
"PostScript Invocation Value" zugeordnet.
Ein optionaler "Translation String" dient der benutzerfreundlichen Darstellung
und kann an verschiedene Sprachen angepasst werden.
* main keyword |
option keyword / translation string : |
" PostScript invocation value " |
*Resolution |
300x300dpi/300 dots per inch: |
"<</HWResolution[300 300]>>setpagedevice" |
*Resolution |
600x600dpi/600 dots per inch: |
"<</HWResolution[600 600]>>setpagedevice" |
Das einzige, was bei freien PPD-Dateien Lizenzfragen aufwerfen könnte,
sind die PostScript Code Schnipsel (PostScript Invocation Values).
Diese Code Schnipsel dienen aber nur der Aktivierung von Druckerfunktionen
und legen nicht offen, wie die Druckfunktion im Drucker implementiert ist.
Hier ist z.B. aus den Code Schnipseln unmöglich zu ermitteln, wie der
Drucker intern die 300 DPI bzw. 600 DPI tatsächlich zu Papier bringt.
Mit dem CUPS Programm "cupstestppd", was auch via
http://www.cups.org/testppd.php
zur Verfügung steht, sollte jede PPD-Datei getestet werden, ob sie der
"Adobe PostScript Printer Description File Format Specification, Version 4.3"
genügt.
Wird "FAIL" ausgegeben, dann sind die Fehler in der PPD-Datei so schwerwiegend,
dass grössere Probleme bei der Verwendung der PPD-Datei zu erwarten sind.
Die von "cupstestppd" angegebenen Problemstellen sollten beseitigt werden.
Wird "PASS" mit "WARN"-Meldungen ausgegeben, dann sollte die PPD-Datei
verwendbar sein, aber die von "cupstestppd" angegebenen Problemstellen
entsprechen nicht obiger PPD Spezifikation.
PPD-Dateien, die nicht der PPD Spezifikation entsprechen, können beliebige
Fehler verursachen.
Auch wenn CUPS mit der PPD-Datei zurecht kommt, heisst das nicht,
dass dann auch andere Programme mit der PPD-Datei zurecht kommen.
Z.B. Druckdialog-Tools (wie z.B. der KDE Druckdialog "kprinter", "xpp" oder "gtklp")
oder die Druckaufbereitung in Anwendungsprogrammen könnten beliebige Probleme
mit PPD-Dateien haben, die nicht der PPD Spezifikation entsprechen.
Auch kann ein normaler Ausdruck unter Verwendung der Defaulteinstellungen
in der PPD-Datei problemlos funktionieren, aber bei anderen Einstellungen
scheitert es.
Wenn "PASS" ohne Warnmeldungen ausgegeben wird, kann man davon ausgehen,
dass die PPD-Datei der PPD Spezifikation genügt, aber auch nicht mehr.
Die PPD-Datei kann dennoch schwerwiegende Fehler enthalten,
die eine Verwendung unmöglich machen, z.B.:
-
Die Druckerfunktionen passen nicht zum Drucker:
-
Es sind Druckerfunktionen definiert, die der Drucker gar nicht hat.
-
Es fehlen Druckerfunktionen, die der Drucker hat.
-
Die Auswahlmöglichkeiten sind fehlerhaft:
-
Es sind Auswahlmöglichkeiten definiert, die der Drucker nicht unterstützt.
-
Es fehlen Auswahlmöglichkeiten, die der Drucker unterstützt.
-
Kombinationen gewisser Auswahlmöglichkeiten, die nicht zusammen funktionieren,
sind nicht gegenseitig ausgeschlossen (z.B. Duplexdruck auf Folien).
D.h. es fehlen sog. "Constraints" in der PPD-Datei.
-
Die Defaulteinstellungen der Auswahlmöglichkeiten stehen im Konflikt
mit bestehenden "Constraints" in der PPD-Datei.
-
Die PostScript Code Schnipsel sind fehlerhaft:
-
Fehlerhafte PostScript Code Schnipsel verursachen beliebige Fehler im
PostScript-Interpreter des Druckers.
Das alles überprüfen kann nur der Druckerhersteller, denn nur hier ist
das notwendige Wissen vorhanden über die Internas des Druckers
(insbesondere die Internas des PostScript-Interpreters im Drucker).
Mit "PCL+JCL Drucker" ist ein Drucker gemeint, der die Druckersprache PCL unterstützt
und zusätzlich eine Job-Control Sprache (JCL).
PCL steht für Printer Control Language und ist eine Druckersprache von HP.
Aber auch viele Druckermodelle anderer Hersteller unterstützen PCL.
Ähnlich wie bei PostScript gibt es auch bei PCL verschiedene Level:
PCL3, PCL4, PCL5, PCL5e, PCL6, PCLXL
Eine Job-Control Sprache ist PJL (Printer Job Language) von HP.
Viele Druckerhersteller haben ihre eigene Job-Control Sprache.
PCL ist die Seitenbeschreibungssprache (Page Description Language = PDL),
in der dem Drucker mitgeteilt wird, wie der Ausdruck aussehen soll.
Z.B. dass das Wort "Hallo" gedruckt werden soll.
Im Unterschied dazu wird mittels einer Job-Control Sprache dem Drucker mitgeteilt,
wie der Ausdruck erfolgen soll.
Z.B. aus welchem Papierschacht das Paier genommen werden soll und ob der Duplex-Modus
oder der Tonerspar-Modus aktiviert werden soll.
Verarbeitungsstufen
-
Wenn die zu druckenden Daten nicht PostScript sind, werden sie in PostScript umgewandelt.
-
Den PostScript Daten werden ggf. die passenden JCL-Steuerkommandos hinzugefügt, die der
Drucker braucht, damit spezielle Druckerfunktionen wie z.B. Papierschachtwahl,
Duplex-Modus oder Tonerspar-Modus aktiviert werden.
Bei einem Drucker, der eine Job-Control Sprache unterstützt, können die
Druckerfunktionen und die dazu nötigen JCL-Steuerkommandos in einer zum Drucker
passenden PPD-Datei hinterlegt werden.
-
Die PostScript Daten plus JCL-Steuerkommandos müssen in einem zusätzlichen
Verarbeitungsschritt wie folgt umgewandelt werden:
-
Die JCL-Steuerkommandos werden extrahiert.
-
Die PostScript Daten werden in PCL umgewandelt.
Diese Umwandlung ist mit dem Programm Ghostscript möglich.
Vergl. den Abschnitt
"Drucker mit Ghostscript Unterstützung".
-
PCL-Daten und JCL-Steuerkommandos werden wieder zusammengefügt.
-
Die PCL-Daten plus JCL-Steuerkommandos werden zum Drucker geschickt.
Grundlegende Linux-Unterstützung
Für alle oben angegebenen PCL-Level stehen geeignete Ghostscript-Treiber
zur Verfügung mit denen PostScript Daten in PCL umgewandelt werden können.
Damit ist die grundlegende Linux-Unterstützung für einen PCL-Drucker
unabhängig vom Drucksystem immer gegeben.
Optimale Linux-Unterstützung
Dazu muss in diesem Fall folgendes unter Linux zur Verfügung stehen:
-
Eine zum jeweiligen PCL+JCL Drucker passende PPD-Datei.
-
Ein dazu passendes Script oder Programm, was obigen zusätzlichen Verarbeitungsschritt
durchführt.
Für sehr viele PCL-Drucker stehen Foomatic-PPD-Dateien bei Linuxprinting.org
(http://www.linuxprinting.org/)
zur Verfügung.
Der obige zusätzliche Verarbeitungsschritt wird für gewisse PCL-Ghostscript-Treiber
vom Foomatic Filterscript "foomatic-rip" ab der Foomatic Version 3.0.1 erledigt.
Im günstigsten Fall liefert schon Foomatic die optimale Linux-Unterstützung.
In vielen Fällen wird aber der Druckerhersteller sowohl für die passende
PPD-Datei als auch für den passenden zusätzlichen Verarbeitungsschritt
selbst sorgen müssen.
Letzteres ist nicht nötig, wenn eine zu "foomatic-rip" kompatible PPD-Datei
erstellt wird.
Daher sollte es in enger Anlehnung an Foomatic erfolgen, denn hier sind schon alle
Grundlagen dafür geschaffen und Foomatic läuft zuverlässig auf Hunderttausenden
von Linux-Installationen.
Ideal für alle Beteiligten ist die direkte Unterstützung und Hilfe bei der
Weiterentwicklung von Foomatic durch Druckerhersteller.
Technische Details
Wie können JCL-Druckerfunktionen in einer PPD-Datei festgelegt werden?
Hier als Beispiel die Auswahl der Auflösung via Job-Control Sprache PJL:
*JCLResolution |
300x300dpi/300 dots per inch: |
"@PJL SET RESOLUTION = 300" |
*JCLResolution |
600x600dpi/600 dots per inch: |
"@PJL SET RESOLUTION = 600" |
Das einzige, was bei freien PPD-Dateien Lizenzfragen aufwerfen könnte,
sind die JCL-Steuerkommandos, die hier an Stelle der PostScript Code Schnipsel stehen.
Diese JCL-Steuerkommandos dienen aber nur der Aktivierung von Druckerfunktionen
und legen nicht offen, wie die Druckfunktion im Drucker implementiert ist.
Hier ist z.B. aus den JCL-Steuerkommandos unmöglich zu ermitteln, wie der
Drucker intern die 300 DPI bzw. 600 DPI tatsächlich zu Papier bringt.
Beim CUPS Drucksystem wird der obige zusätzliche Verarbeitungsschritt
in der PPD-Datei wie folgt festgelegt:
Hier als Beispiel das Foomatic Filterscript "foomatic-rip":
*cupsFilter: |
"application/vnd.cups-postscript 0 foomatic-rip" |
Für detaillierte Informationen zu Filterscripten siehe auch den Artikel
"Selbst erstellte Filter zum Ausdruck mit CUPS".
Ghostscript (http://www.cs.wisc.edu/~ghost/)
ist ein umfangreiches Programmpaket zur Umwandlung von
PostScript Daten in andere Formate, insbesondere in diverse Druckersprachen.
Dazu beinhaltet Ghostscript eine Vielzahl von Ghostscript-Treibern, siehe z.B.
http://www.cs.wisc.edu/~ghost/doc/printer.htm
Ein Drucker hat Ghostscript Unterstützung, wenn es für dessen Druckersprache
einen Ghostscript-Treiber gibt.
Vom jeweiligen Ghostscript-Treiber hängt es ab, wie weit die Unterstützung
für ein bestimmtes Druckermodell geht:
-
Viele Druckermodelle sind in (nahezu) allen ihren Möglichkeiten
von Ghostscript unterstützt.
-
Viele Druckermodelle sind grundlegend unterstützt:
D.h. ein normaler Ausdruck funktioniert und sieht gut aus,
aber beispielsweise kann hochauflösender Grafikdruck nicht möglich sein
oder Farbtöne werden verfälscht dargestellt oder Sonderfunktionen
(wie z.B. Papierschachtwahl oder ein spezieller Photomodus) sind nicht unterstützt.
Z.B. haben alle PCL-Drucker mindestens grundlegende Ghostscript Unterstützung.
-
Manche Druckermodelle sind nur rudimentär unterstützt:
D.h. ein normaler Ausdruck funktioniert zwar, sieht aber nicht gut aus
oder Farbdruck ist inakzeptabel bzw. ganz unmöglich.
Bei Ghostscript werden über eine Vielzahl von Kommandozeilenoptionen
die Parameter (insbesondere der jeweilige Ghostscript-Treiber) eingestellt,
die für eine bestimmte Druckausgabe nötig sind.
Im folgenden wird davon ausgegangen, dass der Drucker keine Job-Control Sprache
unterstützt.
Ein Drucker mit existierender Ghostscript Unterstützung,
der zusätzlich eine Job-Control Sprache unterstützt,
kann analog zum Fall
"PCL+JCL Drucker"
behandelt werden.
Grundlegende Verarbeitungsstufen
-
Wenn die zu druckenden Daten nicht PostScript sind, werden sie in PostScript umgewandelt.
-
Die PostScript Daten werden mit einem zum jeweiligen Druckermodell passenden
Ghostscript-Treiber in die Druckersprache umgewandelt.
-
Die druckerspezifischen Daten werden zum Drucker geschickt.
Grundlegende Linux-Unterstützung
Für einen Drucker mit existierender grundlegender Ghostscript Unterstützung
ist grundlegende Linux-Unterstützung unabhängig vom Drucksystem immer möglich.
Für einen Drucker ohne Ghostscript Unterstützung muss ein passender Ghostscript-Treiber
entwickelt werden, um Linux-Unterstützung unabhängig vom Drucksystem zu bekommen.
Eine Alternative speziell für CUPS ist im Abschnitt
"Drucker mit CUPS 'rasterto...' Unterstützung"
beschrieben.
Verarbeitungsstufen für eine optimale Linux-Unterstützung
-
Wenn die zu druckenden Daten nicht PostScript sind, werden sie in PostScript umgewandelt.
-
Den PostScript Daten werden ggf. Pseudo-Steuerkommandos hinzugefügt,
die im nachfolgenden Verarbeitungsschritt in die eigentlichen
Ghostscript-Parameter umgewandelt werden.
Dabei geht es insbesondere um solche Parameter,
die der jeweilige Ghostscript-Treiber braucht,
damit spezielle Druckerfunktionen aktiviert werden.
Die Druckerfunktionen und die dazu nötigen Pseudo-Steuerkommandos können
in einer zum Drucker passenden PPD-Datei hinterlegt werden.
-
Die PostScript Daten plus Pseudo-Steuerkommandos müssen in einem zusätzlichen
Verarbeitungsschritt wie folgt umgewandelt werden:
-
Mit Hilfe der Pseudo-Steuerkommandos wird ein Ghostscript-Aufruf erzeugt,
der die passenden Ghostscript-Parameter enthält.
-
Durch den Ghostscript-Aufruf werden die PostScript Daten
in die entsprechenden druckerspezifischen Daten umgewandelt.
-
Die druckerspezifischen Daten werden zum Drucker geschickt.
Optimale Linux-Unterstützung
Dazu muss in diesem Fall folgendes unter Linux zur Verfügung stehen:
-
Ein Ghostscript-Treiber, der alle Druckerfunktionen des jeweiligen Modells unterstützt.
-
Eine dazu passende PPD-Datei.
-
Ein dazu passendes Script oder Programm, was obigen zusätzlichen Verarbeitungsschritt
durchführt.
Für sehr viele Drucker stehen Foomatic-PPD-Dateien bei Linuxprinting.org
(http://www.linuxprinting.org/)
zur Verfügung.
Der obige zusätzliche Verarbeitungsschritt wird vom Foomatic Filterscript "foomatic-rip"
ab der Foomatic Version 3.0.0 erledigt.
Im günstigsten Fall liefert schon Foomatic die optimale Linux-Unterstützung.
In etlichen Fällen fehlt zur optimalen Linux-Unterstützung nur eine
Feinjustierung der Ghostscript-Parameter in den Foomatic-PPD-Dateien
(z.B. um optimale Farbtöne zu bekommen).
In vielen Fällen wird aber der Druckerhersteller sowohl für den Ghostscript-Treiber
als auch für die passende PPD-Datei und das passende Script oder Programm
für den zusätzlichen Verarbeitungsschritt selbst sorgen müssen.
Letzteres ist nicht nötig, wenn eine zu "foomatic-rip" kompatible PPD-Datei
erstellt wird.
Daher sollte es in enger Anlehnung an bestehende Ghostscript-Treiber und an Foomatic
erfolgen, denn hier sind schon alle Grundlagen dafür geschaffen.
Ideal für alle Beteiligten ist die direkte Unterstützung und Hilfe bei der
Weiterentwicklung von Ghostscript-Treibern und Foomatic durch Druckerhersteller.
Eine Alternative speziell für CUPS ist im Abschnitt
"Drucker mit CUPS 'rasterto...' Unterstützung"
beschrieben.
Technische Details
Wie können Ghostscript-Parameter via Pseudo-Steuerkommandos
in einer PPD-Datei festgelegt werden?
Beispielsweise für PCL5e-Drucker, die kompatibel zum HP LaserJet 4 sind,
kann der Ghostscript-Treiber "ljet4" mit dem Kommandozeilenparameter
"-sDEVICE=ljet4" aufgerufen werden.
Die Auflösungen 300x300 DPI bzw. 600x600 DPI können als Kommandozeilenparameter
"-r300x300" bzw. "-r600x600" angegeben werden.
Mit einem Ghostscript Aufruf der Art "gs -sDEVICE=ljet4 -r300x300 ..."
können also PCL5e-Druckerdaten in einer Auflösung von 300 DPI erzeugt werden.
Hier als Beispiel die Auswahl dieser Ghostscript-Parameter via
Pseudo-Steuerkommandos für das Foomatic Filterscript "foomatic-rip"
in einer Foomatic-PPD-Datei:
*cupsFilter: "application/vnd.cups-postscript 0 foomatic-rip"
...
*FoomaticRIPCommandLine: "gs ... -sDEVICE=ljet4 %B ..."
...
*FoomaticRIPOption Resolution: enum CmdLine B
*DefaultResolution: 300x300dpi
*Resolution 300x300dpi/300 DPI: "%% FoomaticRIPOptionSetting: Resolution=300x300dpi"
*FoomaticRIPOptionSetting Resolution=300x300dpi: " -r300x300 "
*Resolution 600x600dpi/600 DPI: "%% FoomaticRIPOptionSetting: Resolution=600x600dpi"
*FoomaticRIPOptionSetting Resolution=600x600dpi: " -r600x600 "
Mit "FoomaticRIPOption ... B" wird festgelegt, dass der Platzhalter "%B"
in der "FoomaticRIPCommandLine" durch den Ghostscript-Parameter ersetzt wird.
Die indirekte Referenzierung auf die eigentlichen Ghostscript-Parameter
via "Resolution=300x300dpi" und "Resolution=600x600dpi" geschieht aus
Sicherheitsgründen, denn eine direkte Angabe der Ghostscript-Parameter
z.B. mit etwas in der Art
*Resolution 300x300dpi/300 DPI: "%% FoomaticRIPOptionSetting: -r300x300 "
würde im PostScript Datenstrom die folgende Zeile erzeugen:
%% FoomaticRIPOptionSetting: -r300x300
Würde das Filterscript den Ghostscript-Parameter hieraus entnehmen,
dann könnte ein böswilliger Benutzer diese Zeile verändern in
%% FoomaticRIPOptionSetting: $( rm -rf /* )
und heraus käme dabei folgender Ghostscript Aufruf
gs ... -sDEVICE=ljet4 $( rm -rf /* ) ...
der alle Dateien löschen würde, die der Benutzer löschen kann unter dem das Filterscript läuft.
Die indirekte Referenzierung erzeugt aber die Zeile
%% FoomaticRIPOptionSetting: Resolution=300x300dpi
und das Filterscript nimmt den Ghostscript-Parameter aus der passenden
"*FoomaticRIPOptionSetting"-Zeile in der PPD-Datei, sofern es eine
passenden Zeile findet. Wenn nicht wird der Default genommen.
Die PPD-Datei selbst ist sicher, denn sie kann nur vom Systemverwalter
verändert werden.
Dies soll nur als ein Beispiel dienen, warum es sinnvoll ist, eigene Entwicklungen
in enger Anlehnung an bestehende Ghostscript-Treiber und an Foomatic zu machen,
denn hierin steckt die Erfahrungen vieler Entwickler und das Feedback aus
Hunderttausenden Linux-Installationen.
Was ist bei der Entwicklung eines neuen Ghostscript-Treibers zu beachten?
-
Traditionell werden Ghostscript-Treiber direkt in Ghostscript eincompiliert.
Das hat den Nachteil, dass neue Ghostscript-Treiber als Patch zu den
Ghostscript-Quellen hinzugefügt werden müssen und dann muss Ghostscript
komplett neu compiliert werden.
Heutzutage sollten neue Ghostscript-Treiber als seperate IJS-Module
gemacht sein, denn IJS-Module haben seperaten Quellcode und können
seperat compiliert werden.
Ghostscript stellt dazu die IJS-Schnittstelle zur Verfügung, siehe
"IJS - Inkjet and other raster devices" unter
http://www.cs.wisc.edu/~ghost/doc/cvs/Devices.htm#IJS
und "the website for IJS" unter
http://www.linuxprinting.org/ijs/
Ein Beispiel, wie ein Linux-Treiber von einem Druckerhersteller
als IJS-Modul gemacht sein kann, liefert der HPIJS Treiber von HP, siehe dessen
"driver architecture" unter
http://hpinkjet.sourceforge.net/architecture.php
-
Ein Ghostscript-Treiber (eigentlich jeder Linux Druckertreiber) muss auch ohne
bidirektionale Kommunikation mit dem Drucker funktionieren, denn:
-
Der Drucker kann via Netzwerk und Printserver-Box angeschlossen sein und
eine Printserver-Box ermöglicht im allgemeinen keine bidirektionale
Kommunikation.
-
Die druckerspezifischen Daten müssen auch in eine Datei "gedruckt" werden können
und irgendwann später wird diese Datei direkt an den Drucker gesendet.
-
Ein Ghostscript-Treiber ist eigentlich nur ein einfacher Filter, der
Ghostscript-Rastergrafikdaten in druckerspezifische Rastergrafikdaten
umwandelt, denn Ghostscript arbeitet in zwei getrennten Schritten:
-
Die PostScript-Daten werden "gerastert" - d.h. das in der PostScript-Sprache
beschriebene Druckbild wird als feines Raster einzelner Bildpunkte dargestellt.
In diesem Schritt arbeitet Ghostscript ohne dass der jeweilige Ghostscript-Treiber
beteiligt ist.
-
Das in Rasterpunkte aufgelöste Druckbild wird nun durch den jeweiligen
Ghostscript-Treiber in die gewünschte Druckersprache umgewandelt und zwar
in das Datenformat, in dem der Drucker Rastergrafikdaten zu Papier bringen kann.
Deswegen kann der Quellcode für einen Ghostscript-Treiber platformunabhängig sein,
ohne dass dazu besondere Tricks notwendig sind.
Lizenzfragen bei Open Source Ghostscript-Treibern:
Ein Druckerhersteller könnte befürchten, durch einen Open Source Ghostscript-Treiber
die kompletten Internas seiner Modelle offenlegen zu müssen.
Das ist aber nicht so, denn ein Ghostscript-Treiber dient nur zur Umwandlung
von Ghostscript-Rastergrafikdaten in druckerspezifische Rastergrafikdaten.
Durch einen Open Source Ghostscript-Treiber muss also nur das Datenformat
offengelegt werden, um dem Drucker Rastergrafikdaten übermitteln zu können.
Normalerweise kann daraus nicht ermittelt werden, wie der Drucker intern
die Rastergrafikdaten tatsächlich zu Papier bringt.
Zumindest für grundlegende Linux-Unterstützung müssen auch keine Algorithmen
zum Dithering (Digital Halftoning bzw. Halbtonverfahren) offengelegt werden,
denn ein grundlegendes Ghostscript-Dithering kann schon im ersten Schritt erfolgen.
Für optimale Druckergebnisse kann es allerdings notwendig sein,
dass im Ghostscript-Treiber ein speziell auf das jeweilige Druckermodell abgestimmtes
Dithering erfolgt, wie es z.B. im Gimp-Print Ghostscript-Treiber implementiert ist
(http://gimp-print.sourceforge.net/).
Gewisse Druckermodelle verfügen über ein internes Dithering (z.B. die zum
HP DeskJet 990C kompatiblen Modelle), so dass hier der Ghostscript-Treiber
nur das Drucker-interne Dithering einschalten muss.
Hier geht es nur um die direkte CUPS Unterstützung von Nicht-PostScript-Druckern.
PostScript-Drucker werden von CUPS wie oben beschrieben unterstützt.
Ein Drucker hat CUPS "rasterto..." Unterstützung, wenn es für dessen
Druckersprache einen "rasterto..." Druckertreiber gibt.
Der derzeit wichtigste "rasterto..."-Treiber ist "rastertoprinter" von Gimp-Print
(http://gimp-print.sourceforge.net/).
Vom jeweiligen "rasterto..."-Treiber hängt es ab, wie weit die Unterstützung
für ein bestimmtes Druckermodell geht.
Speziell für "rastertoprinter" siehe die "Gimp-Print Supported_Printers" Liste unter
http://gimp-print.sourceforge.net/p_Supported_Printers.php3
-
Viele Druckermodelle sind in (nahezu) allen ihren Möglichkeiten unterstützt.
-
Viele Druckermodelle sind grundlegend unterstützt:
D.h. ein normaler Ausdruck funktioniert und sieht gut aus,
aber beispielsweise kann hochauflösender Grafikdruck nicht möglich sein
oder Farbtöne werden verfälscht dargestellt oder Sonderfunktionen
(wie z.B. Papierschachtwahl oder ein spezieller Photomodus) sind nicht unterstützt.
Z.B. haben alle PCL-Drucker grundlegende "rastertoprinter" Unterstützung.
-
Manche Druckermodelle sind nur rudimentär unterstützt:
D.h. ein normaler Ausdruck funktioniert zwar, sieht aber nicht gut aus
oder Farbdruck ist inakzeptabel bzw. ganz unmöglich.
Verarbeitungsstufen
-
Umwandlung der zu druckenden Daten in CUPS Rasterdaten.
Dabei werden auch ggf. passende Parameter hinzugefügt über die der
"rasterto..." Druckertreiber spezielle Druckerfunktionen aktivieren kann.
Die Druckerfunktionen sind in einer zum "rasterto..." Druckertreiber
und zum jeweiligen Drucker gehörenden PPD-Datei hinterlegt.
-
Die CUPS Rasterdaten und die Parameter werden von einem CUPS "rasterto..."
Druckertreiber in die druckerspezifischen Daten umgewandelt.
-
Die druckerspezifischen Daten werden zum Drucker geschickt.
Grundlegende Linux-Unterstützung
Für einen Drucker mit existierender grundlegender CUPS "rasterto..." Unterstützung
ist grundlegende Linux-Unterstützung für das CUPS Drucksystem immer möglich.
Für einen Drucker ohne grundlegende CUPS "rasterto..." Unterstützung
muss ein passender "rasterto..."-Treiber und eine passende PPD-Datei
entwickelt werden, um Linux-Unterstützung für das CUPS Drucksystem zu bekommen.
Das LPRng/lpdfilter Drucksystem unterstützt "rasterto..."-Treiber nicht direkt.
Aber mit dem zusätzlichen Filter "foomatic-rip" ab Version 3.0.1 können auch
"rasterto..."-Treiber für das LPRng/lpdfilter Drucksystem verwendet werden.
Ausserdem kann bei betriebssystemunabhängigem Quellcode ein "rasterto..."-Treiber
auch für das Mac OS X Betriebssystem verwendet werden, weil Mac OS X das
CUPS Drucksystem hat.
Optimale Linux-Unterstützung
Optimale Linux-Unterstützung ist analog zur grundlegenden Linux-Unterstützung.
Der einzige Unterschied ist, ob der "rasterto..."-Treiber und die zugehörige
PPD-Datei alle Druckerfunktionen unterstützt oder nicht.
Technische Details
Was ist bei der Entwicklung eines neuen CUPS "rasterto..."-Treibers zu beachten?
-
Grundlegende Informationen zu CUPS "rasterto..."-Treibern und zugehörigen
PPD-Dateien finden sich in der CUPS Dokumentation im "CUPS Software Programmers Manual"
(z.B. bei http://www.cups.org/spm.html)
im Abschnitt "Writing Printer Drivers"
(http://www.cups.org/spm.html#WRITING_DRIVERS).
-
Ein "rasterto..."-Treiber muss auch ohne bidirektionale Kommunikation mit dem
Drucker funktionieren (vergl. obigen Abschnitt zu Ghostscript-Treibern).
-
Ein "rasterto..."-Treiber ist eigentlich nur ein einfacher Filter, der
CUPS-Rastergrafikdaten in druckerspezifische Rastergrafikdaten umwandelt.
Deswegen kann der Quellcode für einen "rasterto..."-Treiber platformunabhängig sein,
ohne dass dazu besondere Tricks notwendig sind.
Lizenzfragen bei Open Source "rasterto..."-Treibern:
Die Lizenzfragen bei Open Source "rasterto..."-Treibern
sind analog zu obigen Lizenzfragen bei Open Source Ghostscript-Treibern:
Ein Druckerhersteller könnte befürchten, durch einen Open Source "rasterto..."-Treiber
die kompletten Internas seiner Modelle offenlegen zu müssen.
Das ist aber nicht so, denn durch einen Open Source "rasterto..."-Treiber muss
nur das Datenformat offengelegt werden, um dem Drucker Rastergrafikdaten
übermitteln zu können.
Zumindest für grundlegende Linux-Unterstützung müssen auch keine Algorithmen
zum Dithering offengelegt werden, aber für optimale Druckergebnisse kann es
notwendig sein, dass im "rasterto..."-Treiber ein speziell auf das jeweilige
Druckermodell abgestimmtes Dithering erfolgt, wie es z.B. im Gimp-Print
"rastertoprinter"-Treiber implementiert ist.
Für manche Drucker gibt es derzeit Linux-Unterstützung nur mit einem sog. "Postfilter".
Mit "Postfilter" ist ein Programm gemeint, das einem existierenden
Ghostscript-Treiber nachgeschaltet wird.
Ghostscript
(siehe http://www.cs.wisc.edu/~ghost/)
ist ein umfangreiches Programmpaket zur Umwandlung von
PostScript Daten in andere Formate, insbesondere in diverse Rastergrafik-Formate.
Dazu beinhaltet Ghostscript eine Vielzahl von Ghostscript-Treibern
insbesondere für "Image file formats" (siehe z.B.
http://www.cs.wisc.edu/~ghost/doc/cvs/Devices.htm#File_formats).
Der "Postfilter" wandelt die Rasterdaten, die der Ghostscript-Treiber
produziert hat, in druckerspezifische Daten um - also in ein Datenformat,
in dem der Drucker Rastergrafikdaten zu Papier bringen kann.
Insbesondere für Drucker, die keine ordentliche Standarddruckersprache
verstehen (sog. GDI-Drucker), gibt es in einigen Fällen Linux-Unterstützung,
die als "Postfilter" implementiert ist.
Mehr als grundlegende Linux-Unterstützung ist nur in Einzelfällen vorhanden.
Grundlegende Verarbeitungsstufen
Die Verarbeitungsstufen entsprechen denen bei Ghostscript Unterstützung
mit einem weiteren zusätzlichen Verarbeitungsschritt, in dem der
"Postfilter" aufgerufen wird.
-
Wenn die zu druckenden Daten nicht PostScript sind, werden sie in PostScript umgewandelt.
-
Die PostScript Daten werden mit einem zum jeweiligen "Postfilter" passenden
Ghostscript-Treiber in Rasterdaten umgewandelt.
-
Diese Rasterdaten werden mit einem zum jeweiligen Drucker passenden
"Postfilter" in druckerspezifische Daten umgewandelt.
-
Die druckerspezifischen Daten werden zum Drucker geschickt.
Grundlegende Linux-Unterstützung
Für einen Drucker mit existierender grundlegender "Postfilter" Unterstützung
ist grundlegende Linux-Unterstützung unabhängig vom Drucksystem möglich.
Für einen Drucker ohne grundlegende "Postfilter" Unterstützung müsste eigentlich
nur ein passender "Postfilter" für einen existierenden Ghostscript-Treiber
entwickelt werden.
Heutzutage sollte aber stattdessen ein Ghostscript-Treiber als IJS-Modul
entwickelt werden, denn IJS-Module haben genau wie "Postfilter" seperaten
Quellcode und können seperat compiliert werden. Siehe dazu den Teil
"Technische Details" im Abschnitt
"Drucker mit Ghostscript Unterstützung".
Eine Alternative speziell für CUPS ist im Abschnitt
"Drucker mit CUPS 'rasterto...' Unterstützung"
beschrieben.
Optimale Linux-Unterstützung
Dazu muss in diesem Fall folgendes unter Linux zur Verfügung stehen:
-
Ein "Postfilter", der alle Druckerfunktionen des jeweiligen Modells unterstützt.
-
Eine dazu passende PPD-Datei.
-
Ein dazu passendes Script oder Programm, was den Ghostscript-Treiber und
den "Postfilter" mit passenden Parametern aufruft.
Für optimale Linux-Unterstützung müssen die im Teil
"Drucker mit Ghostscript Unterstützung"
genannten "Verarbeitungsstufen für eine optimale Linux-Unterstützung" um einen
zusätzlichen Verarbeitungsschritt erweitert werden, in dem der "Postfilter"
aufgerufen wird und ausserdem müssen die Pseudo-Steuerkommandos passend
an den Ghostscript-Treiber und an den "Postfilter" weitergegeben werden:
-
Wenn die zu druckenden Daten nicht PostScript sind, werden sie in PostScript umgewandelt.
-
Den PostScript Daten werden ggf. Pseudo-Steuerkommandos hinzugefügt,
die in den nachfolgenden Verarbeitungsschritten in die eigentlichen
Ghostscript-Parameter und "Postfilter"-Parameter umgewandelt werden.
Dabei geht es insbesondere um solche Parameter,
die der jeweilige Ghostscript-Treiber und der "Postfilter" braucht,
damit spezielle Druckerfunktionen aktiviert werden.
Die Druckerfunktionen und die dazu nötigen Pseudo-Steuerkommandos können
in einer zum Drucker passenden PPD-Datei hinterlegt werden.
-
Die PostScript Daten plus Pseudo-Steuerkommandos müssen in einem zusätzlichen
Verarbeitungsschritt wie folgt umgewandelt werden:
-
Mit Hilfe der Pseudo-Steuerkommandos wird ein Ghostscript-Aufruf und
ein nachgeschalteter "Postfilter"-Aufruf erzeugt, die die passenden
Ghostscript-Parameter und die passenden Parameter für den "Postfilter"
enthalten.
-
Durch den Ghostscript-Aufruf und den nachgeschalteten "Postfilter"
werden die PostScript Daten in druckerspezifische Daten umgewandelt.
-
Die druckerspezifischen Daten werden zum Drucker geschickt.
Für einige Drucker mit "Postfilter" Unterstützung stehen Foomatic-PPD-Dateien bei Linuxprinting.org
(http://www.linuxprinting.org/) zur Verfügung.
Der obige zusätzliche Verarbeitungsschritt wird dann vom Foomatic
Filterscript "foomatic-rip" ab der Foomatic Version 3.0.0 erledigt.
Im günstigsten Fall liefert Foomatic nahezu optimale Linux-Unterstützung.
Evtl. fehlt lediglich eine Feinjustierung der Ghostscript- und "Posfilter"
Parameter in den Foomatic-PPD-Dateien.
Statt einen optimalen "Postfilter" zu entwickeln, sollte heutzutage
ein Ghostscript-Treiber als IJS-Modul entwickelt werden (siehe oben),
um eine einheitliche Schnittstelle (die IJS-Schnittstelle) zu Ghostscript
zu haben.
Hier geht es um Drucker, die nicht über eine veröffentlichte Standarddruckersprache
wie z.B. PostScript oder PCL angesprochen werden können, sondern nur über eine
vom jeweiligen Druckermodell abhängige proprietäre Druckersprache.
Es ist üblich, solche Drucker als "GDI-Drucker" zu bezeichnen,
aber da es keine allgemeine "GDI"-Druckersprache gibt, wäre eigentlich die Bezeichnung
"Drucker, der nur über ein proprietäres Protokoll angesprochen werden kann" korrekt.
Siehe dazu auch den Artikel
"GDI-Drucker".
Für grundlegende bzw. optimale Linux-Unterstützung muss der Druckerhersteller
folgendes bereitstellen:
-
Einen freien Open-Source Linux-Treiber.
-
Eine dazu passende PPD-Datei.
-
In bestimmten Fällen ein passendes Script oder Programm, was den je nach Fall
oben beschriebenen zusätzlichen Verarbeitungsschritt durchführt.
Hierbei sind nur die folgenden beiden Möglichkeiten sinnvoll:
-
Durch ein IJS-Treibermodul für Ghostscript bekommt der Drucker Ghostscript
Unterstützung, die unabhängig vom Drucksystem ist, siehe
"Drucker mit Ghostscript Unterstützung".
-
Durch einen CUPS "rasterto..."-Treiber bekommt der Drucker direkte CUPS Unterstützung,
siehe
"Drucker mit CUPS "rasterto..." Unterstützung".
Das LPRng/lpdfilter Drucksystem unterstützt "rasterto..."-Treiber nicht direkt.
Aber mit dem zusätzlichen Filter "foomatic-rip" ab Version 3.0.1 können auch
"rasterto..."-Treiber für das LPRng/lpdfilter Drucksystem verwendet werden.
Ausserdem kann bei betriebssystemunabhängigem Quellcode ein "rasterto..."-Treiber
auch für das Mac OS X Betriebssystem verwendet werden, weil Mac OS X das
CUPS Drucksystem hat.
Feedback willkommen:
Send Mail to
jsmeix@suse.de
(Geben Sie bitte folgendes Stichwort an: SDB-2003/11/jsmeix_print-info-for-manufacturers
)