Suchen:

Nur für Dich!
Jetzt bestellen!
> Kombiabo
> Jahres-CD 2000

Drucken mit CUPS und ESP Print Pro

Ein starkes Doppel

von Kurt Pfeifle


Drucken ist mehr, als nur Buchstaben auf ein A4-Blatt zu bringen. Wie wär´s mit einer fertigen Broschüre, gefaltet, beschnitten und mit Rückenstich-Heftung versehen? Aber nicht nur im High-End-Bereich bringt der Einsatz von CUPS und/oder ESP Print Pro entscheidende Vorteile.


Wer hat nicht schon mal die Windows-User beneidet? Da haben sie oft solche tollen PostScript-Drucker an ihrem Büro-Schreibtisch stehen, oder können auf den grossen Netzwerkdrucker im Erdgeschoss zugreifen. Und mit ein paar Mausklicks nutzen sie all deren schöne Features: Das Fach mit dem Briefbogenpapier gezielt ansteuern - doppelseitig drucken - den Ausdruck gar zu einer Broschüre zusammenheften lassen. Nur wir armen Würstchen mit unseren Linux-Rechnern: wir mussten uns damit begnügen, alles einseitig auf A4 auszudrucken (außer den Glücklichen, die sich mit PCL-, PostScript-, Shell-Script- oder weiß -der-Pinguin-für-welchen Kommandos auskennen).

Abb. 1: Grafisches User-Interface von ESP Print Pro mit Auswahl für Druckoptionen, Printerkonfiguration, Verbindungsprotokoll...

Doch diese trüben Zeiten sind jetzt vorbei! Das frei verfügbare "Common Unix Printing System" (CUPS) schafft in Zusammenarbeit mit der kommerziellen Software "ESP Print Pro" ein für alle Mal Abhilfe... In einer kurzen Artikel-Serie besprechen wir diese neue Alternative zu den bisherigen Unix/Linux-Drucksystemen. Deren Konfiguration ist für den normalen Desktop-Benutzer, der keine tiefgreifenden Administrator-Kenntnisse hat, bisher ein eher leidiges Thema. In einer künftigen Ausgabe wird es außerdem um das im Mai 99 von der Internet Engeneering Task Force (IETF) verabschiedete "Internet Printing Protocol" (IPP) [6,7] gehen. CUPS ist eine der ersten funktionierenden IPP-Implementationen überhaupt. (Mal sehen, ob Microsofts diesbezügliche Ankündigungen für Windows 2000 halten, was sie versprechen). Darüber hinaus kann CUPS auch über serielle und parallele, LPD/LPR- und AppSocket-(=HP JetDirect-), sowie Samba/CIFS-Verbindungen drucken.

Wir zäumen jedoch das Pferd sozusagen von hinten auf: Anstatt am Anfang in allen Details zu beschreiben, wie die Software installiert und konfiguriert wird, wollen wir hier erstmal Appetit auf den Download machen und zeigen, weshalb er sich auch für Besitzer von Low-Cost-Postscriptdruckern lohnen könnte. Die Neugierigeren werden auch ohne genaue Anleitungen zum Ziel kommen. Und in der nächsten Ausgabe wird Ausführliches zum Thema Installation und Konfiguration sowie etwas mehr Theorie zu CUPS und dem IPP nachgeliefert.

Warum CUPS? Warum ESP Print Pro?

Der Haupt-Entwickler von CUPS, Michael Sweet von der Firma Easy Software Products, schreibt:

Historisch gesehen wurde zum Drucken unter UNIX eines von zwei vorhandenen Drucksystemen eingesetzt: entweder der Berkeley Line Printer Daemon ("LPD") [RFC1197] oder das AT&T Line Printer System. Alternativen zu diesen Systemen kamen zwar auf (LPRng, Palladin, PLP), jedoch hat keine von diesen die grundlegenden Fähigkeiten der beiden ursprünglichen Systeme geändert. 

In den letzten Jahren gab es verschiedene Versuche, ein Standard-Interface für Printing zu entwickeln, einschliesslich des Entwurfs für einen POSIX Printing Standard [IEEE-1387.4, zuletzt upgedated 1994] und das Internet Printing Protocol [IETF-IPP]. Der POSIX Standard definiert einen gemeinsamen Satz von Kommandozeilen-Tools sowie ein C-Interface zur Verwaltung von Druckern und Print-Jobs. Das Internet Printing Protocol definiert Erweiterungen zum Hypertext Transfer Protocol 1.1 [RFC2068], um darüber Druckdienste auf entfernten Druckern zu unterstützen. 

Schwächen in bestehenden Printing Systems

Easy Software Products hat mehrere Hauptschwachpunkte der derzeit benutzten Printing Systems identifiziert: 

  1. Die User müssen Adobe PostScript- oder reine Text-Dateien drucken; andere Formate können unterstützt sein, aber das ist nicht allgemein der Fall.
  2. Das Fehlen einer Standard-Schnittstelle für die Kommandozeile; jedes Betriebssystem und jedes Treiber-Packet stellt andere Kommandozeilen-Optiuonen zur Verfügung: z.B. erfordert das Einstellen der Papiergrösse in dem einen Treiber die Angabe einer einzigen Option ("letter"), während bei einem anderen deren zwei nötig sind ("mediasize letter").
  3. Das Fehlen einer Standard-Schnittstelle zu den Anwendungsprogrammen; die meisten UNIX-Anwendungen stellen entweder gar kein Interface zum Übergeben von Printer-Optionen zur Verfügung oder sie beschränken diese Optionen auf solche, die in Printer Description Files zur Verfügung gestellt werden, welche mit dem Anwendungsprogramm mitgeliefert werden..
  4. Die Probleme beim Drucken auf Netzwerkprinter; kein Hersteller benutzt dasselbe Protokoll für's Netzwerk-Drucken (viele setzen eine "verbesserte" Version des LPD-Protokolls ein mit herstellerspezifischen Erweiterungen).
  5. Das Theater bei der Administration der Printer-Clients; die meisten Herstellerlösungen erfordern die Installation des Netzwerkdruckers von Hand auf jedem Client, und viele kennen nicht einmal die Möglichkeit, das "Server"-System nach den installierten Druckern zu durchsuchen ("browsen").
  6. Die Treiber sind typischerweise "hartkodiert" für den Umgang mit Druckern, die an seriellen oder parallelen Schnittstellen hängen; die Unterstützung anderer Schnittstellen oder von Netzwerkprotokollen erfordert, den Treiber neu zu schreiben.
  7. Sicherheit, Abrechnung und Höchstquoten für Druckaufträge; die meisten Drucksysteme unterstützen Zugangskontroll-Listen (Access Control Lists, "ACL") nicht, und Druckjob-Abrechnung und Quoten werden, wenn überhaupt, nicht gut unterstützt.

Jeder Linux-Rechner kann jetzt mit "ESP Print Pro" so eingerichtet werden, dass er ein einheitliches grafisches User-Interface zum Drucken aus fast allen Anwendungen bietet. Wer Zugriff auf einen PostScript-fähigen Drucker hat, kann all die Features benutzen, die der Hersteller in einer die Adobe-Spezifikation beachtenden "*.ppd"-Datei festgehalten hat - selbst die ausgefallensten! Was "*.ppd"-Dateien sind und wie sie verwendet werden, wird im Lauf dieses ersten Artikels anhand einiger Beispiele beschrieben. Diese "*.ppd"-Dateien sind von den Herstellern ursprünglich für die Verwendung unter MS-Windows 3.1 bis NT 4.0 oder dem MacOS geschrieben worden. CUPS und "ESP Print Pro" können diese "Windows"-PPDs in unveränderter Form für alle Linuxer nutzbar machen.

Um die Leistungsfähigkeit der ESP Print Pro Software auszuloten, wurden damit einige der leistungsfähigsten PostScript-Drucker verschiedener Klassen angesteuert, die heutzutage auf dem Markt sind:

Hersteller-/Typbezeichnung Eigenschaften Endbearbeitung/Besonderheiten Basispreis (ca.)   s
Kodak DigiSource 9110 Network Imaging System s/w, 600dpi, 110 Seiten/Minute Broschürenhefter mit Falzautomatik und Frontbeschnitt ab 370.000.-DM  
infotec 4651 MF s/w, 600dpi, 65 Seiten/Minute Finisher für Lochen und Heften (50 Blatt) ab 40.000.-DM  
HP Mopier 240 s/w, 600dpi, 24 S./Minute, PostScript-Emulation Finisher mit 5 Mailboxfächern und Hefter ab 9.500.-DM  
Ricoh Aficio 180 s/w, 600dpi, 18 S./Minute keine ab 5.900.-DM  
Canon CLC 1130 Vollfarbe, 11 Seiten/Minute Finisher mit Hefter (50 Blatt) und Sorter ab 60.000.-DM  
Danka C2000 Vollfarbe, 31 Seiten/Minute Finisher mit Hefter (50 Blatt) und Sorter ab 140.000.-DM  
HP Color LaserJet 8500 Vollfarbe, 6 Seiten/Minute, PostScript-Emulation A3 Überformat bedrucken möglich ab 15.000.-DM  
HP Color LaserJet 4500 Vollfarbe, 4 Seiten/Minute, PostScript-Emulation Finishing mit Sorter und Hefter ab 6.000.-DM  

Da in diesen Tests alle Grundfunktionen erfolgreich genutzt werden konnten, sollte auch jeder kleine postscriptfähige Tischdrucker, dem der Hersteller eine Windows-PPD spendiert hat, mit ESP Print Pro oder CUPS funktionieren. Doch zunächst ein wenig Theorie über PostScript und PPDs.

PostScript

PostScript ist in der Unix-/Linux-Welt das Standard-Format für druckbare Daten. Selbst wenn sie letztendlich auf einem nicht-PostScript-Drucker ausgegeben werden, nehmen sie oft einen "Umweg" über dieses Format, um anschliessend von dem allgegenwärtigen Ghostscript in das jeweilige druckerspezifische Format überführt zu werden.

PostScript ist eine Pogrammier-Sprache, die darauf spezialisiert ist, die Anordnung von Linien, Schriften und Grafiken auf einem Ausgabe-Medium (in der Regel Papier) zu beschreiben. Der PostScript-Standard ist ein proprietäres Format, das von der Firma Adobe entwickelt wurde. Er ist offengelegt (aber nicht "Open Source") und gut dokumentiert (sonst hätte er sich nicht so weit verbreitet) [1]. PostScript-Drucker "verstehen" diese Programmier-Sprache. Indem sie sie interpretieren, färben sie das Papier an den gewünschten Punkten mit der entsprechenden Druckfarbe. PostScript hat seit seiner ersten Version anfang der 80er Jahre eine erhebliche Weiterentwicklung erfahren. Aktuell ist der PostScript-Level 3.

RIP: Vektoren zu Pixeln

Druck-Ausgabegeräte sind in der Regel Pixel-orientiert. Sie können keine "Linie" direkt zeichnen (das können nur Plotter), sondern sie ordnen Punkte so an, dass sie dem menschlichen Auge als Linie erscheinen. Da die PostScript-Befehlssprache jedoch im Prinzip vektor-orientiert ist, muss eine PostScript-Druckdatei in die entsprechende pixelweise Anordnung der Farb- oder Tonerflächen und -linien "übersetzt" werden, bevor die Druckausgabe tatsächlich erfolgen kann.

Das Format, in welchem ein Drucker die "pixelweise" Seitenbeschreibung erwartet, ist ebenfalls hersteller- und typabhängig. Das auf jedem Linux-Rechner vorhandene Ghostscript ist nichts anderes als ein PostScript-Interpreter, welcher in das entsprechende Rasterformat des Druckers übersetzt. Diese Übersetzungsarbeit ist recht aufwendig und belastet einen Rechner vor allem bei grossen oder farbigen Druckfiles sehr stark.

Bei PostScript-Druckern braucht die PostScript-nach-Raster-Übersetzung nicht von dem Rechner selbst durchgeführt zu werden, der das PostScript-File drucken will, sondern diese Berechnung wird von einem "Raster Image Processor" (RIP) übernommen, welcher mit dem PostScript-Drucker integriert ist.

Das RIP (ja, im Deutschen hat es sich eingebürgert, das RIP zu sagen anstatt der RIP...) kann eine reine Software-Lösung sein. Bei Hochleistungs-Farbdruckern läuft die RIP-Software oft auf einer separaten Unix-Maschine von Sun, SGI oder anderen Herstellern; an diesen Rechner ist dann die Marking Engine, der physikalische Drucker, angeschlossen. Oder das RIP ist hardwareseitig als spezialisierter Chip im Drucker implementiert (meist bei kleineren PostScript-Druckern).

CUPS und ESP Print Pro: Gemeinsamkeiten und Unterschiede

CUPS und ESP Print Pro wurden beide von Michael Sweet und der Firma Easy Software Products entwickelt. Michael war auch an der Entwicklung der Druck-Funktionalität des Bildverarbeitungsprogramms GIMP beteiligt, das ebenfalls mit PPDs umgehen kann. Allerdings werden hier nur die Optionen zur gezielten Anwahl des Papierschachtes, der Seitenorientierung und der Auflösung unterstützt. CUPS und ESP Print Pro laufen auf einer Reihe von Unix-Plattformen: Linux, Digital Unix, HP-UX, IRIX und Solaris. Im Juni 1999 wurde CUPS, zuvor unter derselben Lizenz wie Ghostscript (Aladdin Free License), unter die GNU Public License gestellt. CUPS liegt somit im Source Code vor und ist für andere Entwickler ohne Lizenzgqebühren verfügbar. Seit der Version 2.0.6 wird CUPS über die Option "printing = CUPS" auch von Samba in vollem Umfang unterstützt. ESP Print Pro ist kommerziell. Es enthält CUPS und baut darauf auf. Die Lizenzgebühren fangen für die Linux-Plattform bei 49 US-Dollar für eine Standalone-Lizenz an und erreichen 6.995 US-Dollar für eine "200-User-Enterprise-Lizenz" für Solaris. CUPS wird über die Kommandozeile bedient und schafft die Schnittstelle zwischen Anwendungen und dem Druckvorgang. CUPS ist alleine, also ohne ESP Print Pro verwendbar und ersetzt das vorherige Druck- und Spoolsystem auf dem Rechner. ESP Print Pro bietet ein grafisches User-Interface zum Installieren der Druckertreiber, zum Verwalten von Printern und Jobs und zum Erstellen von komplexen Druckaufträgen. ESP Print Pro lässt sich nach dem Downloaden und dem Beschaffen einer Probelizenz über das WWW 45 Tage lang kostenlos testen. Wer ESP Print Pro aus dem Netz saugt, braucht CUPS nicht separat zu installieren, es ist bereits integriert.

PostScript Printer Description (PPD)

Hersteller von PostScript-Druckern müssen sich an die Spezifikation der "PostScript Printer Description" (PPD) halten. Ein PPD-file ist eine menschen- und maschinenlesbare ASCII-Datei, in der eine formalisierte Beschreibung der Eigenschaften und installierten optionalen Komponenten des Druckers nachzulesen ist. PPDs sind ebenfalls gut dokumentiert [2]. PPDs werden in beinahe unveränderter Form sowohl auf Macintosh-, als auch auf Windows-Plattformen verwendet. In den PPDs sind die standardisierten PostScript- oder die herstellerspezifischen Kommandosequenzen zur Ansteuerung des Druckers festgehalten und definiert, ebenso dessen Default-Einstellungen (Voreinstellungen) und gegenseitige Ausschlüsse bestimmter unvereinbarer Optionen. Die PPD wird unter Windows vom Basis-Druckertreiber ausgelesen, um sich die eigene Funktionalität mit den druckerspezifischen Besonderheiten aufzumotzen.

Druckerbesonderheiten und -Eigenschaften

Zu den Eigenschaften eines PostScript-Druckers zählen u.a. folgende:

In der PPD wird eine Anwahlmöglichkeit jeder dieser Optionen immer mit den Schlüsselwörtern *OpenUI und *CloseUI geklammert (Listing 9). Optionale installierbare Komponenten können sein:

Innerhalb der PPD sind alle installierbaren Zusatzkomponenten durch die Schlüsselwörter *OpenGroup: InstallableOptions und *CloseGroup: InstallableOptions zusammengeklammert [Listing 6]. Default-Einstellungen sind beispielsweise:

Für jede Druck-Option ist eine Voreinstellung in der PPD durch die Vorsilbe *Default mit der anschliessenden Bezeichnung der gemeinten Option gegeben (Listings 5, 6, 10). Manche der Optionen schliessen sich gegenseitig aus:

Solche Beschränkungen sind in der PPD Zeilen, welche durch das Schlüsselwort *UIConstraints: eingeleitet werden. Dahinter folgt pro Zeile jeweils ein Paar sich gegenseitig ausschliessender Bedienerwünsche (Listing 7). Alle diese Eigenschaften inklusive der gegenseitigen Ausschlüsse von unvereinbaren Eingaben sind in der PPD festgehalten. Für die Erstellung eines korrekt funktionierenden PPD-Files ist der jeweilige Druckerhersteller verantwortlich. Allerdings läßt sich auch auf Adobes Web-Site in einer sehr umfangreichen Sammlung von PPDs stöbern [3]. In 90% der Fälle sollte man dort fündig werden. Andernfalls schaut man auf der Hompage des Druckerherstellers nach. Erfahrungsgemäss funktionieren Versionen, die vom Hersteller für Windows NT 4.0 optimiert und empfohlen sind, auch unter Linux am besten.

Basis-PostScript-Treiber und PPD

Unter Windows oder dem MacOS ist ein Adobe-kompatibler PostScript-Druckertreiber aus zwei Komponenten zusammengesetzt: zuerst muss die Basisversion eines Treibers vorhanden sein, meist ein Original-Adobe PostScript-Treiber. Dieser erstellt aus den Ausgangs-(Dokumenten- oder Grafik)-Formaten einen einfachen ("plain") PostScript-Code (d.h. ohne viele zusätzliche Ausgabe-Optionen). Mit dieser Grundversion kann man einseitige (A4-)DruckJobs auf jedem PostScript-fähigen Drucker ausgeben. Diese Funktionalität ist normalerweise auf jedem Linux-System ebenfalls vorhanden, da hier für jeden Druckjob ebenfalls "einfaches" PostScript erzeugt werden kann.

Sobald komplexere Kommandos an den Drucker geschickt werden müssen, um das endgültige Aussehen des Druckergebnisses zu beeinflussen, kommt die PPD-Datei ins Spiel. Diese setzt auf dem Grund-Treiber auf und erweitert dessen Funktionalität um all die Hersteller-spezifischen Besonderheiten des Druckers.

PPD und Graphical User Interface (GUI)

Die PPD-Datei wird bei dieser Treiber-Architektur nicht nur ausgewertet, um das Druck-File zu erzeugen, sondern auch, um die grafische Benutzer-Oberfläche (Grafical User Interface - GUI) des Treibers zu verändern und an die vorhandenen Druckereigenschaften anzupassen. In der Benutzer-Oberfläche werden so die druckerspezifischen Auswahl-Optionen angeboten, welche in der PPD festgelegt sind. (Für noch-Windows-Benutzer: im Druckerordner mit der rechten Maustaste auf den PS-Drucker klicken, "Eigenschaften" wählen...) Der Treiber verarbeitet bei der Erstellung des Druck-Files die angewählten Optionen und baut die entsprechenden PostScript- oder Hersteller-spezifischen Steuerbefehle in den Druckdatenstrom ein.

Der Clou ist: diese Windows-basierenden PPDs lssen sich mit Hilfe von ESP Print Pro jetzt auch unter Linux nutzen! Diese PPD-Dateien können unter Linux (und auch einigen anderen Unices) in unveränderter Form in das System eingebunden werden. Anschliessend steht eine komfortable grafische Benutzer-Oberfläche zur Verfügung, um die speziellen Funktionen des Druckers anzuwählen. Schauen wir uns einfach mal an, wie das aussieht:

Grafisches User Interface: ESP Print Pro unter Linux mit unveränderter Windows-PPDGrafisches User Interface: ESP Print Pro unter Linux mit unveränderter Windows-PPD

Abb. 2 und 3: Teil der festgelegten Endbearbeitungsoptionen für einen DruckJob der "infotec 4651MF" (unveränderte Benutzung einer "eigentlich" für Windows 95 vorgesehenen PPD-Datei)

Ich möchte jetzt meine bei der Installation von ESP Print Pro gemachten Screenshots drucken: auf dem PostScript-Drucker infotec 4651MF (der schafft 65 Seiten in der Minute!), auf A4-Papier, das aus dem Großraum-Magazin gezogen werden soll (die anderen Papierfächer sind mit farbigen Papiersorten befüllt), mit einer Auflösung von 600 dpi (der Drucker kann wahlweise auch auf 400 dpi zurückschalten), auf 90% verkleinert, Querformat, doppelseitig, sortiert, gelocht und zusammengeheftet (Ordnung muß sein!), im Tonersparmodus (ich weiß, das macht bei Screenshots wenig Sinn ;-) - alles insgesamt 2 mal.

Kommandozeile -- hier sicher keine Alternative!

Die Kommando-Zeile ist mir ein Gräuel, wenn ich einen anspruchsvollen Druck-Job starten will. Die beiden unter Unix und Linux zum Einsatz kommenden Hauptsysteme, das System V- (ursprünglich von AT&T) und das LPR/LPD-(von BSD herrührende) Print- und Spoolsystem sind bereits ziemlich betagt und haben seit längerem keine entscheidende Weiterentwicklung erfahren. Zudem stellen sie sich in der Bedienung ziemlich unterschiedlich dar, mit Optionen, die ich mir nie und nimmer merken kann. CUPS bietet hier die Chance, für alle Un*xe und natürlich auch Linux, endlich einen gemeinsamen Standard zu schaffen. Unter CUPS kann ein Druckjob im allgemeinen mit folgender Eingabe gestartet werden (alles in einer Zeile!):

lpr -P printer-name -o print-job-option-1 -o print-job-option-2 \ 
    -o print-job-option-n /pfad/zu/Druckdatei ;

In diesem konkreten Fall würde das so aussehen:

lpr -P 4651MF -#2 -o media=A4,LargeCapacity -o sides=two-sided-long \
    -o resolution=600 -o scaling=90 -o collate=True \
    -o landscape /home/kurt/screenshots/screenshots.jpg;

Puh, ganz schön aufwendig, so 'ne Kommandozeile (obwohl in diesem Fall leicht zu durchschauen und mit ein entsprechender Übung auch irgendwann mal zu merken...). Und trotzdem ist noch nicht alles vollständig: Wie mach' ich es bloß, daß der Tonersparmodus angesprochen wird? Und wie lautet der Befehl zum Heften? Oder der zum Lochen? Gut, ich könnte mir die PPD-Datei meines Druckers vorknöpfen und herauszufinden versuchen, wie diese Befehle lauten. Dann aufschreiben und für das nächste Mal bereit halten. Irgendwann weiß ich dann alles auswendig. Aber funktioniert das bei dem Drucker eines anderen Herstellers auch?

Herstellerspezifische Druckerbefehle: in der PPD definiert

Hier fängt das Problem an, noch größer zu werden: Es gibt für die gebräuchlichsten Optionen zwar standardisierte PostScript-Befehle. Aber die Drucker-Hersteller haben die Freiheit, eigene Befehle zu definieren. Davon machen sie auch kräftig Gebrauch, z.T. notgedrungen.

Die Firma Kodak beispielsweise war die erste, welche vor 8 Jahren einen 70 Seiten/Minute schnellen Hochleistungs-Drucker, das Modell "1580", auf den Markt brachte, mit besonderen Features, die in dieser Vielseitigkeit auch heute noch von keinem Konkurrenz-Produkt erreicht werden: bis zu 3 verschiedene Schmuckfarben pro Seite; Ausdruck A3/A4 gemischt, wobei die A3-Blätter als ausklappbare "Z"-gefaltete A3-Blätter in eine geheftete Broschüre eingebunden werden können; oder als in der Mitte zusammengefaltetes, mit Rückenstich-Heftung versehenes Heft. Zum damaligen Zeitpunkt gab es noch keine Adobe-PostScript-Befehle, die ein Endverarbeitungsgerät mit diesen Optionen ansteuern konnte.

Folglich definierte Kodak eigene, nur diesem Drucker verständliche Maschinen-Befehle, welche in der zugehörigen PPD-Datei festgehalten sind, aber im GUI des Treibers in menschen-verständlicher Form zur Auswahl stehen. Diese Kodak-PPD-Befehle fangen mit dem Kürzel "*KD..." an. Solche mit *KD.. beginnenden Schlüsselwörter werden uns in den folgenden Listings an manchen Stellen noch begegnen. Andere Drucker-Hersteller haben in Absprache mit Adobe ihre eigenen Befehle: Hewlett-Packards benutzt als Befehlseinleitung "*HP...", Ricoh "*RI...", Lexmark "*LX..." ...

Wer alle Optionen eines modernen PostScript-Druckers benutzen will, hat folglich keine andere Chance, als über ein grafisches User-Interface eine vom Hersteller zur Verfügung gestellte PPD auszulesen, die entsprechenden Optionen zu markieren und die Kommandozeile nur dort zu benutzen, wo sie tatsächlich besser und schneller ist.

Listing 1: Beginn des Windows-"*.ppd"-Files für einen Hochleistungsdrucker
*PPD-Adobe: "4.3"
*% **********************************************************
*%
U R H E B E R R E C H T S H I N W E I S
*% **********************************************************
*% Copyright 1999 EASTMAN KODAK Co.
*% Alle Rechte vorbehalten.
*% Die Weitergabe dieser Datei ist gestattet, solange dieser
*% Urheberrechtshinweis sowie der Inhalt der Datei unveraendert
*% und somit in ihrer urspruenglichen Form erhalten bleiben.
*%
*% ADOBE SYSTEMS POSTSCRIPT(R) Druckerbeschreibungsdatei
*%
*%  Kodak DigiSource 9110 Drucker
*%
*% Ende des Urheberrechtshinweises.

Aha, kein Hinweis (Listing 1) auf eine eventuell illegale Hackertätigkeit für das, was ich jetzt vorhabe: die von einem Windows-Rechner herunterkopierte PPD unter Linux zu nutzen. Da sie dort problemlos funktionierte, will ich mal sehen, ob der Entwickler von CUPS, Michael Sweet mit seiner Behauptung recht hat, alle unter Windows funktionierenden und die PPD-Spezifikationen einhaltenden PPDs seien mit allen Druckerfunktionen auch unter Linux nutzbar.

Keywords in PPD-Dateien fangen immer mit * an. Zeilen dürfen höchstens 255 Zeichen lang sein. In der Darstellung der Beispiel-PPD wurden aus drucktechnischen Gründen evtl. Zeilenumbrüche eingefügt. Eine neue Zeile fängt im Original mit * oder *% an. Ausnahmen sind u.a. in die PPD integrierter PostScript-Code, welcher aus Übersichtsgründen oft auf mehrere Zeilen verteilt wird. Ein erklärender Kommentar wird mit *% eingeleitet. (Nicht jede PPD jedes Herstellers ist so vorbildlich kommentiert wie die hier gezeigte.) Am Anfang jeder PPD muss immer das Statement *PPD-Adobe: stehen, gefolgt von einer in Anführungszeichen stehenden Versionsnummer der durch die PPD befolgten Spezifikation. Das Copyright lässt im allgemeinen die unveränderte Weitergabe der PPD zu.

Listing 2: Wann wird Linux von einem Drucker-Hersteller in seinem "*.ppd"-File erwähnt? Funktionieren tut's ja prächtig....
*% *********************************************************
*%            
I N T E R N A L    I N F O R M A T I O N
*% *********************************************************
*% InternalVersion: "01.53.00"
*% Platform(s) Supported: "Windows 3.1"  "Windows 3.1.1" "Windows95"
*% "Macintosh"

In Listing 2 ist der vom Hersteller gedachte Einsatzbereich in Form einiger Kommentarzeilen festgehalten. Wollen wir hoffen, dass in nicht allzu ferner Zukunft die Drucker-Hersteller auch Linux nicht vergessen, wenn sie in ihren PPDs die offiziell unterstützten Plattformen erwähnen. Aber wie wir ja jetzt schon wissen, lassen sich die Windows-PPDs ganz prima und auch völlig legal "zweckentfremden", selbst wenn's in der PPD nicht ausdrücklich niedergeschrieben ist...

Listing 3: Versionsinformationen aus dem "*.ppd"-File
*% *********************************************************
*%            
V E R S I O N    I N F O R M A T I O N
*% *********************************************************
*FormatVersion: "4.3"
*FileVersion: "1.1"
*PSVersion: "(3010.106) 0"

Die Version des PostScript-Interpreters des Druckers kann aus der PPD in Erfahrung gebracht werden (Listing 3). Diese Angabe ist für eine Adobe-konforme PPD ebenso zwingend erforderlich wie die Versionsbezeichnungen für das PPD-Format und die PPD-Datei selbst. Wenn diese Informationen fehlen, erfüllt die PPD nicht die Adobe-Spezifikation. Im oben gezeigten Fall ist er fähig, den PostScript-Level 3 zu verarbeiten. Level-3-Drucker können auch abwärtskompatibel Level-2-PostScript verarbeiten. Das umgekehrte gilt nicht: Level-3-Befehlserweiterungen werden von einem Level-2-Gerät nicht verstanden.

Auslesen der PPD durch ESP Print Pro

Der Printer Wizard von ESP Print Pro liest alle in einem Verzeichnis befindlichen PPDs aus, erstellt daraus eine Liste vorhandener Fabrikate und Typen und bietet diese zur Auswahl an. Der Aufruf printers (als root) startet zuerst den Printer Manager. Dort kann über das Menü Action --> Add... der Wizard aufgerufen werden. Der verlangt einige wenige Eingaben, um den Drucker richtig zu konfigurieren:

Abb. 4: Der Printer Wizard nimmt Eingaben für Druckername und -Standort entgegen

Abb. 5: Auswahl der Verbindungsart zum Drucker

Abb. 6: Eingabe der IP-Adresse des Netzdruckers und des Queue-Namens (herstellerabhängig)

Der nächste Screen bietet die Standardauswahl an Herstellern, die ESP Print Pro gleich mitinstalliert hat. Derzeit werden über 1600 Drucker-Modelle unterstützt. Aber da in meinem Fall die Suche aussichtslos ist, schiebe ich eine vorbereitete Diskette mit allen auf meinem Windows-System gefundenen PPDs in den Schacht, mounte sie und lege den Pfad über den Button Have Disk zu meiner /floppy. Der Wizard parsed nun alle auf der Floppy befindlichen PPDs, extrahiert die Herstellernamen (in der PPD hinter *Manufacturer: ) und Modellbezeichnungen (hinter *ShortNickname:) und ersetzt im Fenster die Liste der Hersteller mit den auf meiner Diskette vorgefundenen (Abb. 7). Um zu schauen, ob's auch richtig funktioniert, habe ich an dieser Stelle in der Original-PPD den kürzeren Nickname durch die etwas längere Bezeichnung aus einem Werbe-Prospekt ersetzt. (Listing 4).

Listing 4: Aus dem "*.ppd"-File liest ESP Print Pro die Druckerbezeichnung
*% *********************************************************
*% N A M E          I N F O R M A T I O N
*% *********************************************************
*PCFileName: "KDDHV102.PPD"
*Manufacturer: "Kodak"
*Product: "(KODAK DIGISOURCE 9110)"
*ModelName: "Kodak DigiSource 9110"
*ShortNickName: "Kodak DigiSource 9110 PPD"
*NickName: "Kodak DigiSource 9110 PPD Network Imaging System"

Abb. 7: Der ESP Printer Wizard an der Stelle, wo die richtige PPD für den Drucker auszusuchen ist.
Listing 5: Schwarz-Weiss- oder Farbdrucker? , im "*.ppd"-File steht's...
*% **********************************************************
*% G E N E R A L   I N F O R M A T I O N  + D E F A U L T S
*% **********************************************************
*ColorDevice: False
*DefaultColorSpace:Gray
*DefaultResolution:600dpi
*FreeVM: "44685056"
*VMOption None/Kein: "44685056"
*FCacheSize None: 4613734
*FileSystem:True
*Throughput: "110"
*TTRasterizer: Type42
*?TTRasterizer: "(Type42) = flush"

Folgende Druckereigenschaften werden in diesem PPD-Abschnitt beschrieben: er kann eine Auflösung von 600 dpi zu Papier bringen; es handelt sich um einen Schwarz-Weiss-Drucker; die Druckgeschwindigkeit beträgt 110 Seiten/Minute; er ist mit einer einer be-schreib-baren Festplatte (*FileSystem: True) ausgestattet; ein TrueType-zu-Raster-Umwandler ist vorhanden, welcher mit Type 42-Schriften (das sind in PostScript "verpackte" TrueType-Schriften) umgehen kann. Allerdings wird der TrueType-Rasterizer derzeit von ESP Print Pro noch nicht ausgewertet. Aber unter Linux sind die Type-42-Schriften auch noch nicht massenhaft verbreitet...[Listing 5]

Listing 6: Installierbares Druckerzubehör laut "*.ppd"-File
*% *********************************************************
*%             
I N S T A L L A B L E    O P T I O N S
*% *********************************************************
*%
*% *********************************************************
*% *********************************************************
*% Kurt Pfeifle: die folgende Zeile wurde von mir nachträgl.
*% abgeändert, um im GUI die deutsche Bezeichnung zu zeigen;
*% ursprüngliche Zeile, wie in der Differenz zwischen Abb. 8
*% und Abb. 9 noch deutlich zu sehen ist ;-)  :
*% *OpenGroup: InstallableOptions/Options Installed
*% *********************************************************
*% *********************************************************
*OpenGroup: InstallableOptions/Installierte Optionen
*OpenUI *KD01Finisher/Ausgabeger<e4>t: PickOne
*OrderDependency: 10.0 DocumentSetup *KD01Finisher
*DefaultKD01Finisher: Stapler
*KD01Finisher Stapler/Hefter: 
"(KDFinisher)(Stapler)KDDHVDct/KFSet get exec countdictstack 
[{}KDDHVDct/KFC get exec"
*KD01Finisher Stacker/Stapler: 
"(KDFinisher)(Stacker)KDDHVDct/KFSet get exec countdictstack 
[{}KDDHVDct/KFC get exec"
*KD01Finisher BookletMaker/Brosch<fc>renhefter: 
"(KDFinisher)(BookletMaker)KDDHVDct/KFSet get exec countdictstack 
[{}KDDHVDct/KFC get exec"
*CloseUI: *KD01Finisher

ESP Print Pro fragt am Ende des Installationsprozesses jeder PPD nach den vorhandenen Hardware-Zugaben des physikalischen Druckers ("PickOne") [Listing 6]. Achtung: das zugehörige GUI-Dialogfeld (Abb. 8) ist nur am Ende der PPD-Installation erreichbar! Deshalb sollte man bei der Installation alle verfügbaren Ausstattungsmerkmale des Druckers wissen: wieviel Memory, welche zusätzlichen Papiermagazine, welche Ausgabe-/Endbearbeitungsgeräte, usw. Wer am liebsten doppelseitig druckt, um Papier zu sparen, kann hier gleich ein Voreinstellung festlegen und sich damit ersparen, jedesmal von Neuem die Option von ein- auf doppelseitig zu ändern. Übrigens ist hier auch zu sehen, wo die sprachliche Anpassung gemacht werden muss, falls es einmal nötig sein sollte, eine PPD zu bearbeiten, damit das User Interface in der gewünschten Sprache "redet": im GUI taucht jeweils der String auf, der zwischen Schrägstrich und Doppelpunkt steht (vergl. Abb. 8+9, Listing 6).

Zu beachten ist bei diesem Beispiel: das deutsche Wort Stapler ist im Englischen ein Stacker. Aber das englische Wort Stapler ist im Deutschen ein Hefter. Wird keine Eingabe gemacht, ist die Voreinstellung ("Default") für Finisher/Ausgabegerät der Hefter. Wenn in der PPD als *DefaultKD01Finisher: Stapler steht, ist also der deutsche Hefter gemeint... Ich machte bei meiner ersten PPD-Installation den Fehler, diese Voreinstellung nicht auf den tatsächlich vorhandenen Broschürenhefter abzuändern. Was unter Windows geht, nämlich diese Informationen unter Druckereigenschaften auch noch später nachzuliefern, erfordert bei ESP Print Pro eine Modifikation der Installation, welche einer Neu-Installation der PPD nahekommt. Aber das ist dank des Printer Wizard nur eine Sache von 20 Sekunden...

Der folgende Screenshot (Abbildung 8) zeigt die Stelle, an der anzugeben ist, welches Ausgabegerät mein Drucker sein eigen nennt. Im nächsten Abschnitt (Listing 7) der zugehörigen PPD wird deutlich, warum ich bei der Erst-Installation besser gleich die richtige Konfiguration eingegeben hätte und warum das Printer-Konfigurations-GUI hier manche Optionen rot markiert hat...

Abb. 8: Installierbare Optionen werden in der PPD beschrieben. Der ESP Printer Wizard liest die PPD und verlangt bei der Installation eine Entscheidung. Rot bezeichnete Auswahlen vertragen sich gegenseitig nicht...

Im Listing Listing 7 sind einige User Interface Constraints (Wahlbeschränkungen) aus der benutzten PPD aufgeführt. Dieses Thema nimmt in vielen PPDs den meisten Platz in Anspruch, vor allem, wenn der Drucker über vielfältige Endbearbeitungsmöglichkeiten verfügt. *UIConstraints ist das Schlüsselwort, mit dem eine Zeile eingeleitet wird, in der zwei gegenseitig unvereinbare Optionen aufgelistet sind. ESP Print Pro wertet auch diesen Abschnitt der PPD aus und markiert in aufgeregtem Rot, wenn solche fälschlicherweise vom User angewählt sind (zugehörige Teile der PPD sind von mir ebenfalls markiert worden, KP). Einige dieser Beschränkungen sind nicht unmittelbar sichtbar. Manche (fehlerhaften) PPDs lassen es beispielsweise zu, doppelseitige Folien-Drucke anzuwählen: was erstens nicht viel Sinn macht, und - schlimmer - eine teure Reparatur nach sich ziehen kann, wenn die Folie sich im zweiten Durchlauf um die Laserdrucker-Heizwalze wickelt und anfängt zu schmelzen...

Listing 7: Unvereinbare Wahlmöglichkeiten laut "*.ppd"-File
*% ********************************************************* *% U S E R I N T E R F A C E C O N S T R A I N T S *% ********************************************************* *% Can't have trimming or exit of booklet maker if output *% device is stacker *UIConstraints: *KD01Finisher Stacker *KD95Trim True *UIConstraints: *KD01Finisher Stacker *KD04DocExit BookletMaker *UIConstraints: *KD95Trim True *KD01Finisher Stacker *UIConstraints: *KD04DocExit BookletMaker *KD01Finisher Stacker *% Can't have trimming or stapling with stacker as the exit *UIConstraints: *KD04DocExit Stacker *KD95Trim True *UIConstraints: *KD95Trim True *KD04DocExit Stacker *% Can't have stapling, stacking, separators, or*% signatures 92 or greater *% if exit is booklet maker *UIConstraints: *KD90SigSize Sign92 *KD04DocExit BookletMaker *% Can't have trimming with stapler as the exit *UIConstraints: *KD04DocExit Stapler *KD95Trim True*UIConstraints: *KD95Trim True *KD04DocExit Stapler

In meinem Fall liegen sich folgende Optionen in den Haaren (Abb. 8+9, Listing 7, rot markiert):

Abb. 9: Mit der als installiert angegebenen Option Hefter verträgt sich u.a. die geforderte Dokumentenausgabe im Broschürenhefter nicht...

Ich muss folglich die PPD-Installation modifizieren. Das Kommando /usr/sbin/printers ruft den ESP Printer Manager [Abb. 10] auf den Plan. Im Menü Action--> Modify... kann ich meine Installation für den markierten Drucker im Schnelldurchgang nochmals nachvollziehen: vier Mal auf Next klicken und ich bin wieder bei dem Dialogfeld, welches mir nach Eingabe des root-Passwortes erlaubt, die Printer-Optionen zu setzen. Schnell den Broschürenhefter statt dem Hefter als installiertem Ausgabegerät gewählt und für den Moment zeigen sich meine Druckoptionen wieder in einem beruhigenden schwarzen Farbton. Natürlich sehen die installierbaren Optionen bei jedem Drucker anders aus. Aber bei der Installation der PPD sollte die tatsächliche Ausführung des physikalischen Gerätes ESP Print Pro bekannt gemacht werden, damit root nicht später nochmals printers aufrufen muss...

Abb. 10: Der Printer Manager, erreichbar über den Befehl "printers" (/usr/sbin/printers), dient der Installation von PPDs und dem Verwalten von Druckern und Printjobs...
Listing 8: Die bedruckbare Fläche pro Papiergrösse im "*.ppd"-File
*% *********************************************************
*%       P A P E R                         H A N D L I N G
*% *********************************************************

*DefaultImageableArea: A4
*ImageableArea Letter/USBrief:          "0 0 612  792 "
*ImageableArea Legal/USLang:            "0 0 612 1008 "
*ImageableArea Tabloid/USTabloid:       "0 0 792 1224 "
*ImageableArea A4/A4:                   "0 0 595  842 "
*ImageableArea A3/A3:                   "0 0 842 1191 "
*ImageableArea A4Tab/A4Tab:             "0 0 638  842 "
*ImageableArea A5/A5:                   "0 0 420  595 "
*ImageableArea 9x11/9,0 x 11,0 Zoll:    "0 0 648  792 "
*ImageableArea 9x12/9,0 x 12,0 Zoll:    "0 0 648  864 "
*ImageableArea 8x10.5/8,0 x 10,5 Zoll:  "0 0 576  756 "
*ImageableArea Statement/USStatement:   "0 0 396  612 "

Dieser Abschnitt beschreibt u.a., welche Papiergrössen und -gewichte aus welchen Magazinen verarbeitet werden können und ob sie eventuell nicht bis zum Rand bedruckt werden (Listing 8). Die Massangaben, die in der PPD in Anführungszeichen angegeben sind, werden als Punkt interpretiert. Hier ist auch zu sehen, wo die sprachliche Anpassung gemacht werden muss, falls es mal nötig ist, eine PPD zu bearbeiten, damit das User Interface in der gewünschten Sprache "redet": es wird im GUI jeweils der String angezeigt, der zwischen Schrägstrich und Doppelpunkt steht. ESP Print Pro zeigt die Listenfelder immer in alphabetische Reihenfolge, unabhängig davon, in welcher Reihenfolge sie in der PPD nach dem Stichwort PickOne aufgeführt sind.

Abb. 11: Hier wird die zu bedruckende Papiergrösse festgelegt. Wer statt Media Size lieber Papiergrösse im User Interface lesen möchte, braucht nur die PPD zu editieren und neu zu installieren.
Listing 9: User Interface Optionen im "*.ppd"-File
*% *********************************************************
*%
U S E R    I N T E R F A C E    O P T I O N S
*% *********************************************************
*OpenUI *KD04DocExit/Dokumentausgabe: PickOne

*KD04DocExit BookletMaker/Brosch<fc>renhefter:

*CloseUI: *KD04DocExit

In der PPD wird eine Anwahlmöglichkeit jeder einstellbaren Drucker-Eigenschaft immer mit den Schlüsselwörtern *OpenUI und *CloseUI geklammert (Listing 9). Die User Interface Optionen der im Test eingesetzten Drucker sind natürlich weitaus umfangreicher als in obigem Ausschnitt sichtbar. Er ist stark gekürzt.

Listing 10: Verfügbare Drucker-PostScript-Fonts, im "*.ppd"-File beschrieben
*% *********************************************************
*%      F O N T                        I N F O R M A T I O N
*% *********************************************************
*ADHasEuro: True
*DefaultFont: Courier
*Font AdobeSansMM: Standard "(001.000)" Standard Disk
*Font AdobeSerifMM: Standard "(001.001)" Standard Disk
*Font AlbertusMT-Italic: Standard "(001.001)" Standard Disk

*Font ZapfDingbats: Special "(002.000)" Special Disk

*% **********************************************************
*%
*% Last Edit Date: 05/11/1999 Linda Becker, Eastman Kodak Co.
*% End of PPD file for Kodak DigiSource 9110
*%
*% **********************************************************
*%              E N D  O F  P P D
*% **********************************************************

*Font beschreibt pro Zeile einen der im RIP eingebauten PostScript-Fonts und einige ihrer Eigenschaften [Listing 9]. Der *DefaultFont wird verwendet, wenn der vom Druck-File angeforderte nicht verfügbar ist.

Genug für dieses Mal! Zum Abschluss noch meine Methode, aus dem Netscape zu drucken: im Dialogfenster, welches nach dem Aufruf des Print-Befehls erscheint (Abb. 12), einfach als Print Command die drei Buchstaben "glp" eingeben. Es erscheint der Print Panel (Abb. 13), von dem aus per Mausklicks alle verfügbaren Drucker samt aller Druckoptionen auswählbar sind....

Abb. 12: Die drei magischen Buchstaben für den "Grafischen LP" lauten... glp

Abb. 13: Der "Print Panel "ist das Tor zu allen Druckern, der Button "More Options..." öffnet alle PPD-Optionen
Infos

[1] PostScript Language Reference Manual (2219 kB, 912 Seiten): http://www.adobe.com/print/postscript/pdfs/PLRM.pdf
[2] PostScript Printer Description File Format Specification, (617 kB, 236 Seiten): http://partners.adobe.com/asn/developers/PDFS/TN/5003.PPD_Spec_v4.3.pdf
[3] Sammlung von PPDs, geordnet nach Druckerhersteller. http://www.adobe.com/products/printerdrivers/winppd.html
[4] Dokumentation und Support für ESP Print Pro und CUPS: http://www.easysw.com/printpro/
[4b] ESP Print Pro Download (Achtung, enthält bereits CUPS, separater Download dann nicht erforderlich): http://www.easysw.com/software.html
[4c] Kostenlose 45-Tage-Probe-Lizenz für ESP Print Pro, voll funktionsfähig: http://www.easysw.com/license.html
[5] Dokumentation, Download, FAQs, Mailingliste für CUPS: http://www.cups.org/
[6] Design Goals for an Internet Printing Protocol (April 1999): http://www.ietf.org/rfc/rfc2567.txt
[7] Homepage der Printer Working Group, die das IPP ausgearbeitet hat: http://www.pwg.org/ipp/
Der Autor

Kurt Pfeifle ist zwar noch ziemlich neu bei den Pinguinen, hat sich aber bereits ganz gut mit ihnen angefreundet. Sein Honorar für diesen Artikel spendet er dem KDE-Projekt. Von diesem wünscht er sich als nächstes ein einheitliches Interface zum Drucken aus allen Anwendungen, welches "PPDs" unterstützt. So lange dieser Wunsch noch nicht erfüllt ist, wird er "ESP Print Pro" benutzen. Er hofft, dass sein Arbeitgeber (die Danka Deutschland GmbH, einer der größtern hiesiger herstellerunabhängigen Anbieter von netzwerkfähigen Systemen zum Drucken, Faxen, Kopieren und Scannen) es ihm ermöglicht, ESP Print Pro und CUPS samt IPP auf der CeBIT 2000 zu demonstrieren.

Copyright © 1999 Linux-Magazin Verlag