24.01.2013 Aufrufe

CUPS: Linux-Drucken leicht gemacht -- für Heimanwender wie für ...

CUPS: Linux-Drucken leicht gemacht -- für Heimanwender wie für ...

CUPS: Linux-Drucken leicht gemacht -- für Heimanwender wie für ...

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>CUPS</strong>:<br />

<strong>Linux</strong>-<strong>Drucken</strong> <strong>leicht</strong> <strong>gemacht</strong> -<strong>für</strong><br />

<strong>Heimanwender</strong> <strong>wie</strong> <strong>für</strong> Netzwerkadministratoren<br />

von Kurt Pfeifle, kpfeifle.at.danka.de<br />

http://www.danka.de/printpro/faq.html<br />

Stellt Euch vor: ein Freund kommt mit seinem <strong>Linux</strong>-Laptop zu Besuch. Ihr vernetzt Euch (weil Ihr an einem<br />

gemeinsamen Projekt arbeiten möchtet). Irgendwann möchte er von seinem eigenen Rechner aus "schnell was<br />

ausdrucken" und... es geht einfach! Es geht, ohne dass er extra den Treiber <strong>für</strong> Euren Drucker installieren<br />

müsste, ja, ohne dass er Eurem neuen super-duper-Tintenstrahler mit 7 Farben, variabler Tinten-Tröpfchengröße<br />

und Photo-Modus überhaupt kennen müsste. Utopisch? Nicht mit <strong>CUPS</strong>!<br />

Denn seit zwei Jahren verbreitet sich, anfangs fast unbemerkt, zwischenzeitlich immer schneller, eine neue<br />

Druck-Software in der <strong>Linux</strong>- und UNIX-Welt: <strong>CUPS</strong>, das Common UNIX Printing System steht beinahe<br />

von Anfang an unter der GPL (GNU General Public License). Es hat vor allem bei vielen experimentierfreudigen<br />

<strong>Heimanwender</strong>n begeisterte Anhänger gefunden, die mit seiner Hilfe erstmals brauchbaren<br />

Output oder gar Foto-Qualität ihren Tintenstrahlern entlockten.<br />

Dabei wird häufig übersehen: <strong>CUPS</strong> ist gar nicht auf den Einzelplatz beschränkt; es zeigt seine eigentlich<br />

Stärke darin, dass es alles einen Funktionen netzwerkweit zur Verfügung stellen kann: ein Rechner mit<br />

<strong>CUPS</strong> kann sogar drucken, wenn er gar keine eigenen Treiber installiert und konfiguriert hat. <strong>CUPS</strong> verschafft<br />

seinen unterstützten Betriebssystemen in dieser Hinsicht also einen Technologievorsprung vor<br />

gewissen Konkurrenzprodukten aus Redmont und Cupertino ;-)<br />

Die <strong>CUPS</strong>-Entwickler (Easy Software Products, eine aus 3 Mitarbeitern bestehende Firma) vertreiben die<br />

Software auch als kommerzielles Produkt: sie heißt dann ESP PrintPro. Lizenzeinnahmen dienen dem<br />

Lebensunterhalt der Entwickler und finanzieren so die Weiterentwicklung der GPL-Version.<br />

Was ist neu an <strong>CUPS</strong>?<br />

<strong>CUPS</strong> lässt den bisherigen Standard <strong>für</strong> das <strong>Drucken</strong> im Netzwerk weit hinter sich: es ersetzt den Line<br />

Printer Daemon (LPD nach RFC 1179) durch den neuen Industrie- und IETF-Standard Internet Printing<br />

Protocol (IPP). Das IPP, Version 1.1, hat bei der Internet Engineering Task Force (IETF) zwischenzeitlich<br />

den Status eines "proposed standard" erreicht. Es wurde von der Printer Working Group (PWG,<br />

ein lockerer Zusammenschluss von Printer-Herstellern unter Beteiligung von Software-Firmen <strong>wie</strong> IBM,<br />

Microsoft, Novell und SUN) ausgearbeitet.<br />

Das IPP stellt Funktionen zur Verfügung, die das <strong>Drucken</strong> plattformübergreifend vereinheitlichen sollen<br />

und zugleich einige zentrale Schwächen des LPD beheben:<br />

Authentifizierung von Benutzern über Passwörter oder Certificates;<br />

Verschlüsselung von Druckdaten bei der Übertragung zwischen Hosts oder zum Drucker;<br />

Bekanntgabe verfügbarer Drucker im Netz an jeden Client beim Booten oder Einloggen.<br />

Das IPP erfindet jedoch das Rad nicht neu. Es setzt auf einem bewährten und robusten Datenübertragungsprotokoll<br />

auf, das seine Bewährungsprobe im Internet längst überstanden hat: auf HTTP 1.1. Zwar<br />

fügte die PWG dieser Basis einige <strong>für</strong> das IPP-<strong>Drucken</strong> spezifische Erweiterungen hinzu. Jedoch werden<br />

zugleich die Vorteile voll und ganz genutzt, die das Aufsetzen auf einen bereits etablierten Standard bietet:<br />

so können TLS (Transport Layer Security) oder SSL3 (Secure Socket Layer, Vers. 3) zum Zweck der<br />

Verschlüsselung, LDAP (Lightweight Directory Access Protocol) oder SLP (Service Location Protocol)<br />

1


<strong>für</strong> die Abfrage verfügbarer Drucker im Netz vor den IPP-Karren gespannt werden. Proxys (also Vermittlungs-<br />

und Zwischenspeicherungs-Rechner, die oft an den Grenzen zwischen Intra-Nets und dem Internet<br />

Dienst tun) können ohne Änderung im Quellcode ihres Programms IPP-Daten vermitteln und weiterleiten.<br />

Betriebssysteme (Server, Client und Standalone):<br />

<strong>CUPS</strong> und ESP PrintPro sind erhältlich <strong>für</strong> <strong>Linux</strong> und UNIX, insbesondere <strong>für</strong>...<br />

...alle <strong>Linux</strong>-Versionen ab Kernel 2.0 (auf Intel-Prozessoren);<br />

...SUN-Solaris (<strong>für</strong> Intel und SPARC-Prozessoren) ab Version 2.5 bis zur neuesten Version (8);<br />

...HP-UX ab Version 10.20 bis zur neuesten Version (11.0);<br />

...Silicon Graphics IRIX ab Version 5.3 bis zur neuesten Version (6.5);<br />

...Digital Unix ab Version 4.0;<br />

...Compaq Tru64 Unix ab Version 4.0;<br />

...OSF/1 ab Version 4.0.<br />

<strong>CUPS</strong> ist zwischenzeitlich auch auf *BSD portiert worden (allerdings nicht von den <strong>CUPS</strong>-Entwicklern<br />

selbst). Eine Version <strong>für</strong> IBM-AIX ist in Vorbereitung. ESP PrintPro- oder <strong>CUPS</strong>-Clients beliebiger<br />

unterstützter <strong>Linux</strong>- und UNIX-Versionen können cross-plattform auf ESP PrintPro- oder <strong>CUPS</strong>-Server<br />

aller unterstützten <strong>Linux</strong>- und UNIX-Versionen drucken.<br />

Warum wird der LPD beerdigt?<br />

Zum Zeitpunkt, als der LPD entstand, Mitte der 70er Jahre, war das heutige Internet mit seinen -zig Millionen<br />

über TCP/IP verbundenen Rechnern noch unvorstellbar (sein Vorläufer hat erst ca. 1985 die Anzahl<br />

von 1.000 vernetzten Rechnern erreicht). Fragen von Authentifizierung und Verschlüsselung waren<br />

entsprechend unwichtig und spielten noch keine zentrale Rolle. Drucker hatten noch keinerlei "Eigenintelligenz":<br />

diese erlaubt ihnen heute beispielsweise, ganze Seiten als Farb-Grafik aus entsprechenden<br />

PostScript-Anweisungen als Bitmap-Muster mit 1200 dpi Auflösung zu berechnen, im eigenen Speicher<br />

zwischenzulagern und dann "auf ein Mal" auf ein Blatt aufzutragen. Drucker der damaligen Zeit hämmerten<br />

Buchstabe <strong>für</strong> Buchstabe und zeilenweise ASCII-Text auf Papier, das in Form einer Endlos-Schlange aus<br />

einem Karton gezogen wurde. Drucker waren noch keine eigenständige Knoten im Netz, sondern immer<br />

direkt an einen der "Gross"-Rechner angeschlossen, der sie dann u.U. per LPR/LPD seinen "Nachbar"-Rechnern<br />

zur Verfügung stellte.<br />

Das LPD/LPR-Protokoll war nie ein verbindlicher Standard. Als "RFC 1179" wurde es erst 1990<br />

niedergeschrieben. Es kam bei der IETF nie über den den Status "informational" hinaus. Es brachte<br />

lediglich die Praxis-Konventionen zu Papier, die sich zum damaligen Zeitpunkt herauskristallisiert hatten<br />

und an die sich als Minimalbasis die meisten Hersteller auch fortan irgend<strong>wie</strong> hielten... oder auch nicht.<br />

Je weiter die Drucker- und Netzwerktechnik sich in der Folgezeit entwickelte, umso mehr Abweichungen<br />

und herstellerspezifische Erweiterungen flossen in die einzelnen Implementierungen ein -- und umso unvereinbarer<br />

miteinander wurden diese. Hersteller <strong>wie</strong> HP versuchten gar, mit "HP JetDirect" einen eigenen<br />

Standard zu etablieren. In der UNIX- und <strong>Linux</strong>-Welt wurden verschiedenen Versuche unternommen,<br />

über den klassischen Line Printer Daemon hinauszugehen: LPRng, PPR, PDQ, PLP u.a. sind verschiedene<br />

Versuche, dessen Beschränkungen aufzuheben und etwas Neues an seine Stelle zu setzen. Sie setzten sich<br />

jedoch nie auf breiter Front durch.<br />

Rückwärtskompatibilität<br />

Muss man be<strong>für</strong>chten, dass bei breiter Einführung des IPP alte Anwendungen, Programme und Shellscripte,<br />

die drucken wollen, hinfällig werden? Oder dass herkömmliche Drucker nicht mehr verwendbar sind? Nein<br />

-- das IPP beugt diesen Gefahren vor: es kann eingeführt werden, ohne dass bestehende Anwendungen in<br />

Gefahr kommen, nicht mehr drucken zu können, und ohne ihre Druck-Schnittstellen umzuprogrammieren<br />

zu müssen: es hat ein "Mapping" zum LPD vorgesehen, das die wichtigsten Funktionen berücksichtigt.<br />

<strong>CUPS</strong> selbst setzt dies beispielsweise dadurch um, dass es die unter <strong>Linux</strong> verwendeten Druckbefehle<br />

"lpr" und "lp" ebenfalls versteht (es setzt allerdings eigene Versionen an die Stelle der alten, die zusätzlich<br />

2


zu den bisher bekannten auch mit den neuen <strong>CUPS</strong>-spezifischen Parameter und Optionen umgehen können).<br />

Der <strong>CUPS</strong>-Daemon<br />

Im Mittelpunkt der <strong>CUPS</strong>-Software steht der <strong>CUPS</strong>-Daemon cupsd, auch scheduler genannt. Er ist <strong>für</strong><br />

das Steuern aller druckrelevanten Abläufe verantwortlich: er nimmt Druckjobs entgegen (sowohl vom localhost<br />

als auch von entfernten Rechnern im Netz), speichert sie zwischen, führt sie den gegebenenfalls<br />

erforderlichen Filtern zu, sortiert sie dann in die Warteschlangen ein und ruft das richtige backend auf,<br />

wenn es daran geht, den fertigen Job zum Ausgabegerät zu schicken.<br />

Natürlich, das ist nichts eigentlich Neues, das machen im Grossen und Ganzen auch andere, traditionelle<br />

Druck- und Spool-Systeme. Seine drei "Killer"-Features bezieht <strong>CUPS</strong> aus:<br />

der eingangs erwähnten vollständigen Unterstützung des Internet Printing Protocol samt einem<br />

zugehörigen Web-Interface, das von jedem Browser aus den Zugriff auf Druck- oder Administrations-Funktionen<br />

ermöglicht;<br />

dem <strong>Drucken</strong> der Clients auf die serverseitig konfigurierten Endausgabegeräte, ohne dass diese<br />

Clients auch nur einen einzigen Drucker einrichten müssten;<br />

seiner Rückwärtskompatibilität und Multi-Protokollfähigkeit durch Unterstützung <strong>für</strong> Clients, die<br />

noch mit Windows ("Samba"), Älteren UNIX-Systemen ("LPD") oder Apple MacOS ("NetATalk")<br />

arbeiten.<br />

Die Client-Server-Architektur von <strong>CUPS</strong><br />

In der <strong>CUPS</strong>-Terminologie ist jeder Rechner, der lokal einen "Treiber" installiert hat und direkt mit einem<br />

Druckausgabe-Gerät kommuniziert, ein Server. Druckertreiber unter <strong>Linux</strong> oder UNIX sind nicht direkt mit<br />

solchen unter Windows vergleichbar. Bei <strong>CUPS</strong> besteht die Treiberfunktionalität in der Aufbereitung eines<br />

Druckjobs mittels diverser "Filter", die das Druckformat <strong>für</strong> den Drucker so präparieren, dass es von<br />

diesem auch verdaut werden kann. Hinzu kommt <strong>für</strong> jeden "Treiber" eine Druckerbeschreibungsdatei<br />

(PPD, PostScript Printer Description), welche gerätespezifische Optionen beschreibt und <strong>wie</strong> diese<br />

anzusteuern sind, und ein "backend", das <strong>für</strong> das Verschicken der Jobs über das bei der Druckerinstallation<br />

gewählte Protokoll (parallel, seriell, USB, Netzwerk/LPD, Netzwerk/HP JetDirect, Netzwerk/IPP)<br />

zuständig ist. Prinzipiell kann jeder <strong>CUPS</strong>-Rechner seine lokal installierten Drucker im lokalen Netz anderen<br />

Rechnern zur Verfügung stellen. Diese werden dadurch zu seinen Clients.<br />

Ein Client ist ein Rechner, der selbst keinen Drucker installiert hat, jedoch die Druckdienste eines anderen<br />

Rechners in Anspruch nehmen kann. Wird ein <strong>CUPS</strong>-Rechner im Netz als Server verwendet, dann ist dieser<br />

auch <strong>für</strong> die komplette Job-Aufbereitung verantwortlich. Ein Standalone-Rechner mit einem<br />

<strong>CUPS</strong>-Drucksystem an Bord stellt demnach einen Server dar, der sein eigener Client ist.<br />

<strong>CUPS</strong>-Server sind Webserver auf Port 631 mit IPP-Erweiterungen<br />

Die <strong>CUPS</strong>-Entwickler haben <strong>für</strong> die Konfiguration des <strong>CUPS</strong>-Daemon bewusst eine Ähnlichkeit zu dem<br />

bekannten Webserver Apache gewählt. Da IPP auf HTTP 1.1 beruht, g<strong>leicht</strong> die Konfigurationsdatei von<br />

<strong>CUPS</strong> derjenigen des weitverbreiteten Werbservers. Sie findet sich unter /etc/cups/cupsd.conf und ist<br />

ähnlich aufgebaut <strong>wie</strong> die httpd.conf.Für jeden Zweck gibt es Einstellungen: Server-Name, Name und Ort<br />

der Log-Dateien, verwendeter Server-Port, Zugriffsmasken, Absicherung mittels Passwörtern usw. In<br />

diesem Paper wird im Folgenden auf manche dieser Einstellungen genauer eingegangen.<br />

Browsing -- automatische Veröffentlichung von Druckerlisten im LAN<br />

<strong>CUPS</strong>-Rechner halten untereinander über den IPP-Port 631 (Standard-konform; jedoch konfigurierbar)<br />

Verbindung. Nicht nur die Druckdaten werden über das HTTP-ähnliche Protokoll über diesen Port weitergereicht,<br />

auch andere Informationen werden ausgetauscht.<br />

Dabei spielt das "Browsing" eine zentrale Rolle: jeder <strong>CUPS</strong>-Rechner, in dessen cupsd.conf sich der Eintrag<br />

"Browsing On" befindet, macht per UDP-Broadcast die Namen, verfügbaren Zusatz-Infos und einige<br />

Status-Bits der betreffenden Drucker im LAN in regelmässigen Abständen bekannt. (Ein Rechner mit der<br />

kommerziellen <strong>CUPS</strong>-Version ESP PrintPro tut dies nur, wenn eine entsprechende Lizenz geladen ist.)<br />

3


Diese Zeitabstände werden über die Direktive "BrowseIntervall 30" z.B. auf eine halbe Minute festgelegt.<br />

Standardmäßig "posaunt" der <strong>CUPS</strong>-Daemon seine Browsing-Informationen über alle verfügbaren<br />

Schnittstellen in die LAN-Welten, mit denen er verbunden ist, denn es gilt "BrowseAddress<br />

255.255.255.255" als Voreinstellung.<br />

In älteren <strong>CUPS</strong>-Konfigurationen (<strong>wie</strong> sie anfänglich etwa bei <strong>Linux</strong> Mandrake 7.2 verwendet wurden)<br />

führte diese Voreinstellung allerdings dazu, dass vorhandene ISDN-Karten sich in Minutenabständen beim<br />

Internet-Provider einwählten: sie wollten so der Broadcast-Aufforderung des <strong>CUPS</strong>-Daemon nachkommen.<br />

<strong>Linux</strong>-Neulinge waren damit oft überfordert: sie wussten nicht, <strong>wie</strong> dieses Verhalten in den Griff zu<br />

kriegen war -- dabei gab es natürlich schon immer die Möglichkeit, das Broadcasting gezielt auf eine<br />

bestimmtes Netzinterface oder auf einen kleineren Adress-Bereich einzugrenzen: die Direktive<br />

"BrowseAddress 10.160.16.255" z.B. schränkt die Bekanntgabe der verfügbaren Drucker effektiv auf<br />

das Heimat-Subnetz des Autors ein.<br />

Damit die Broadcasts volumenmäßig überschaubar bleiben, stehen pro Drucker stehen <strong>für</strong> jede Broadcast-Nachricht<br />

maximal 1024 Bytes zur Verfügung. In der Praxis kommt man meist mit 100 bis 150 Bytes<br />

aus -- denn nicht <strong>für</strong> jeden Drucker wird die maximal mögliche Anzahl von Buchstaben zur Beschreibung<br />

seines Standorts oder seiner weiteren Eigenschaften auch tatsächlich ausgenutzt (diese Beschreibungen<br />

kann der Administrator optional als Zusatz zum Druckernamen bei der Druckerinstallation eingeben; sie<br />

werden den Anwendern in den GUIs oder im Browser angezeigt, wenn sie die Druckerliste anschauen).<br />

Cachen der Druckerlisten bei den Clients<br />

Alle <strong>CUPS</strong>-Daemons "lauschen" auf dem Port 631; so fangen sie die Broadcast-Informationen der Server<br />

auf und legen sie in einem lokalen Cache ab. Die Gültigkeitsdauer des Cache ist ebenfalls veränderlich; sie<br />

wird über die cupsd.conf-Direktive "BrowseTimeout 300" z.B. auf 5 Minuten festgelegt.<br />

Browsing funktioniert nur bis zum jeweils nächsten Router oder Gateway; dahinter werden laut<br />

TCP/IP-Spezifikation keine Broadcasts weitergegeben, denn diese müssen sich auf das lokale LAN<br />

beschränken. Sollen bei einem Client nur die Informationen eines bestimmten <strong>CUPS</strong>-Servers verwertet<br />

werden, so kann dies über die Zeilen von der Art "BrowseAllow 10.160.16.255", "BrowseDeny<br />

10.160.16.55" gemeinsam mit "BrowseOrder Allow,Deny" gezielt beeinflusst werden. Im gegebenen<br />

Beispiel würde der Client alle Browse-Packete der Server des lokalen Netzes akzeptieren, jedoch diejenigen<br />

von dem Rechner mit der IP-Adresse 10.160.16.55 ignorieren, wenn er die Liste verfügbarer Drucker<br />

generiert. (Auf dem genannten Rechner experimentiert mein Kollege Hansjörg mit ständig wechselnden<br />

<strong>CUPS</strong>-Konfigurationen und manchmal dutzenden verschiedenen Druckern -- <strong>für</strong> mich würde dies eine viel<br />

zu unübersichtliche Browse-Liste ergeben... ;-)<br />

Bei funktionierender Namensauflösung können diese Anweisung natürlich auch in der Form "BrowseAllow<br />

.systemsupport.danka.de", "BrowseDeny development.systemsupport.danka.de" gegeben<br />

werden; in anderen Worten: Host- und Domain-Namen sind natürlich ebenfalls überall da legal, wo<br />

IP-Adressen in cupsd.conf-Direktiven verwendet werden.<br />

"Zero Administration" for Clients<br />

Für Netz-Administratoren und Anwender ist es sicherlich die bequemste Alternative, einen gut funktionierenden<br />

und flexiblen Druckdienst in Anspruch zu nehmen oder zu gewährleisten, wenn die Druckserver<br />

im Netz so eingestellt sind, dass sie ihre installierten Drucker aktiv per UDP-Rundspruch bekannt geben.<br />

Jede Änderung auf den Servern ist innerhalb von 30 Sekunden (oder dem jeweils eingestellten "BrowseIntervall...<br />

") <strong>für</strong> alle Clients sichtbar und verbindlich:<br />

Der Chef hat den Etat <strong>für</strong> die Nachrüstung des Abteilungsdruckers mit einem Finisher und einer<br />

Sorter-Mailbox genehmigt? OK, sobald der Treiber auf dem Server konfiguriert ist, können die<br />

Clients darauf zugreifen (Naja, viel<strong>leicht</strong> dauert es doch 1 Minute... ;-).<br />

Der Abteilungsleiter hat entschieden, dass der teure Farbdrucker nur noch nach Eingabe eines<br />

Passworts benutzt werden darf? Kein Problem -- dieÄnderung der Konfiguration auf dem Server ist<br />

in Minutenschnelle for die Clients wirksam...<br />

In keinem dieser Fälle braucht direkt bei den Clients eingegriffen zu werden.<br />

4


Eine <strong>CUPS</strong>-Vorführung, die Windows-Administratoren <strong>leicht</strong> vor Neid erblassen<br />

lässt...<br />

Mit folgender Vorführung lässt sich eine verblüffende Wirkung erzielen:<br />

Angenommen, es existiert bereits ein <strong>CUPS</strong>-Server (z.B. unter <strong>Linux</strong>) im LAN, auf dem 20 verschiedene<br />

Drucker fertig konfiguriert sind. Dann wird unter den Augen der Zuschauer in Minutenschnelle <strong>CUPS</strong> oder<br />

ESP PrintPro auf einem weiteren Rechner, z.B. auf einer SUN-SPARC-Maschine installiert. Während der<br />

Software-Installation sei die SPARC durch Ziehen des Steckers vom LAN getrennt. Dann wird beispielsweise<br />

das Fenster des ESP PrintPro "Printer Managers" geöffnet. Das Fenster ist anfangs (natürlich) leer.<br />

Nach Wiederherstellen der Netz-Verbindung füllt sich innerhalb weniger Sekunden das Fenster mit allen<br />

20 verfügbaren Druckern, da die SPARC jetzt Zugang zu den Browsing-Informationen des <strong>CUPS</strong>-Servers<br />

hat. Und wenn man dann vorführt, <strong>wie</strong> jeder beliebige "aus dem Nichts aufgetauchte" Drucker "mit allen<br />

verfügbaren Schikanen" druckt (z.B. Heftung, Lochung, Duplex, andersfarbiges Deckblatt...), nimmt das<br />

Staunen beinahe kein Ende... Warum bloß kommt einem dabei das Schlagwort von der "Zero Administration<br />

for Clients" in den Sinn?<br />

Polling -- aktive Beschaffung der Druckerlisten durch die Clients bei den Servern<br />

Es mag jedoch Fälle geben, in denen ein Drucker-Browsing wegen des damit verbundenen Server-Broadcast<br />

vom Administrator nicht erwünscht ist, selbst wenn der dadurch verursachte Netzverkehr<br />

noch so minimal ist. In diesem Fall besteht die Möglichkeit, die Clients anzuweisen, nicht erst passiv auf<br />

Broadcast-Infos zu warten, sondern sich die benötigten Druckerinformationen direkt beim zuständigen<br />

Server selbst zu besorgen. Dazu muss jedoch jeder einzelne Client entsprechend konfiguriert werden: die<br />

Anweisung "BrowsePoll 10.160.16.55:631" bewirkt diese Abfrage nach den verfügbaren Druckern<br />

beim genannten Server auf Port 631, sobald gedruckt werden soll. (In Wahrheit würde ich diesen speziellen<br />

Server natürlich niemals wählen, da mein chaotischer Kollege Hansjörg, dem dieser Rechner gehört.... OK,<br />

ich hör' ja schon auf, siehe jedoch oben ;-)<br />

"BrowsePoll.. "-Anweisungen dürfen mehrfach in der Konfigurationsdatei vorkommen; dann fragt der<br />

Client eben mehrere Server ab.<br />

Das Polling ist vor allem dann unverzichtbar, wenn man einen Server nutzen will, der hinter einem Router<br />

oder Gateway (d.h. in einem anderen Sub-Netz) sitzt.<br />

BrowseRelay -- Server in anderen LANs lokal nutzbar machen<br />

Da kein Broadcast die Hürde eines Routers oder Gateways überwinden kann, braucht man Möglichkeiten,<br />

Server und ihre Drucker in einem Nachbarnetz zu nutzen, deren broadcasts "hier" nicht ankommen.<br />

Natürlich könnte man jeden Client, der die lokalen Drucker (falls vorhanden) per lokalem Server-Broadcast<br />

mitgeteilt bekommt, zusätzlich zum "Polling" der entfernten <strong>CUPS</strong>-Server auffordern. Das würde bedeuten:<br />

bei jedem einzelnen Client wären die entsprechenden Einträge in der cupsd-conf erforderlich -entsprechend<br />

viel Arbeit <strong>für</strong> den Administrator -- sowohl bei der Erstkonfiguration, als auch bei jeder<br />

späteren Änderung.<br />

Die elegantere Alternative ist folgende: man bestimmt einen der <strong>CUPS</strong>-Rechner im LAN zum<br />

"Browse-Relay". Man kann hier<strong>für</strong> einen Rechner benutzen, der ohnehin in beiden Netzen "zu Hause" ist,<br />

z.B. einen Gateway- oder Router-Rechner. Dies bewirkt beispielsweise ein Eintrag der Form<br />

"BrowseRelay 192.78.215.80 10.160.31.255/255.255.240.0", der die Broadcasts des entfernten<br />

Servers192.78.215.80 aufzeichnet und dessen Drucker im Netz 10.160.16.0 (dieses ist ge-"subnet"-tet mit<br />

der Netzmaske 255.255.240.0) veröffentlicht. (Die Clients nehmen dann im Falle des <strong>Drucken</strong>-Wollens mit<br />

dem entfernten Druckserver direkten Kontakt auf, da ihnen dessen Adresse durch das Browse-Relay<br />

bekannt <strong>gemacht</strong> wurde).<br />

Manchmal ist jedoch dies nicht praktikabel (z.B. wenn der Router gar kein <strong>Linux</strong>-Rechner ist). Auch kein<br />

Problem: man macht einfach einen "normalen" lokalen <strong>CUPS</strong>-Rechner zum Browse-Relay; dieser wird<br />

beauftragt, einen oder mehrere der entfernten Server zu pollen, indem man in seine Konfigurationsdatei<br />

eine entsprechende Anweisung "BrowsePoll..." schreibt. Zusätzlich wird er mit der Direktive<br />

5


"BrowseRelay 127.0.0.1 255.255.255.255" dazu gebracht, alle ihm selbst bekannten Drucker in der<br />

gesamten erreichbaren Umgebung zu publizieren.<br />

"BrowseRelay"-Anweisungen dürfen ebenfalls mehrfach in der Konfigurationsdatei vorkommen.<br />

Schnittstellen zu den Clients:<br />

Diese Schnittstellen dienen dem Empfang eingehender Druckjobs und der Kommunikation mit den<br />

Clients (zwecks Statusmeldungen etc.):<br />

<strong>für</strong> ESP PrintPro- oder <strong>CUPS</strong>-Clients (<strong>Linux</strong>- und unterstützte UNIX-Plattformen) wird standardmäßig<br />

das IPP verwendet;<br />

<strong>Linux</strong>-, Apple- und UNIX-Clients können wahlweise auch über LPR/LPD bedient werden;<br />

bei älteren Windows-Clients (Win9x, WinNT4.0) kann wahlweise LPR/LPD (nach RFC 1179),<br />

SMB/CIFS (Standard-Netzprotokoll von Microsoft-Systemen, hier verwirklicht über Samba)<br />

oder IPP (wenn eine entsprechende Client-Software zum Einsatz kommt) verwendet werden;<br />

da Microsoft innerhalb Windows 2000 das IPP ausreichend kompatibel implementiert hat, können<br />

Clients mit diesem Betriebssystem ohne weitere Software-Installation über ESP PrintPro mit<br />

den Druckern verbunden werden;<br />

Apple-Rechner können wahlweise über LPR/LPD, IPP oder AppleTalk kommunizieren (bei AppleTalk<br />

muss auf Server-Seite das Packet NetATalk installiert sein);<br />

Backends -- Kommunikation zwischen Server und Drucker<br />

Drucker können über verschiedene Schnittstellen und Protokolle mit dem Server verbunden werden: parallel<br />

oder seriell, per USB- oder Netzwerkanschluss (IPP, LPD, HP JetDirect, SMB/"Samba" u.a.). Diese<br />

Aufgabe übernehmen die sogenannten <strong>CUPS</strong>-backends; <strong>für</strong> jedes Protokoll ist ein anderes Backend<br />

zuständig (insofern entsprechen sie ungefähr den von Windows her bekannten "Druck-Monitoren").<br />

Per IPP können Druckaufträge weitergeleitet werden an andere <strong>CUPS</strong>-Printserver, an IPP-fähige Drucker<br />

oder andere IPP-fähige Printserver. Derzeit gibt es auf dem Markt mehr als 200 Geräte, die<br />

IPP-Unterstützung eingebaut haben. Dazu gehören alle internen und externen HP JetDirect Printserver der<br />

Baureihen 300X, 400N, 500X und 600N (beispielsweise in der LaserJet 8000-Serie im Einsatz) so<strong>wie</strong> die<br />

neuen Generationen der Hersteller Axis, i-data, Lexmark, SEH und vieler anderer.<br />

Per LPD können eigentlich alle herkömmlichen Netzwerkdrucker angesprochen werden (oder auch andere<br />

Druckserver, an die aus irgendeinem Grund Aufträge weitergereicht werden sollen); es ist sozusagen der<br />

"kleinste gemeinsame Nenner" aller Netzwerkdrucker..<br />

HP JetDirect (auch unter der Bezeichnung AppSocket-Protokoll bekannt) ist das Mittel der Wahl, wenn der<br />

Zieldrucker dieses Protokoll beherrscht (das tun zwischenzeitlich auch viele Nicht-HP-Geräte!), denn es<br />

hat bi-direktionale Fähigkeiten und ermöglicht gewisse Status-Rückmeldungen, die über LPR/LPD nicht<br />

erhältlich sind.<br />

Freigegebene Drucker, die an Drucker-Ports von Windows-Rechnern hängen, können mittels Samba<br />

beschickt werden. Hier<strong>für</strong> ist allerdings die zusätzliche Installation von Samba ab 2.0.6 auf dem<br />

<strong>CUPS</strong>-Server nötig. Denn dann wird über das Tool "smbspool", das als Bestandteil von Samba ausgeliefert<br />

wird (und ebenfalls von Michael Sweet programmiert wurde) und über einen symbolischen Link<br />

mit dem smb-backend verknüpft werden muss, das Windows-eigene SMB-Protokoll verwendet. Dieser<br />

Sym-Link wird über den Befehl "ln -s ‘which smbspool‘ /usr/lib/cups/backend/smb" angelegt.<br />

Somit erlaubt es die Gesamtheit der "eingebauten" Backends <strong>CUPS</strong>, Druckjobs an herkömmliche Drucker<br />

aller Art zu verschicken. Schließlich werden die nicht von heute auf morgen verschwinden oder <strong>CUPS</strong> und<br />

dem IPP zuliebe verschrottet werden... ;-)<br />

6


Backends:<br />

Die backends dienen dem Versand von Druckdaten zu den Ausgabegeräten oder zu anderen Servern im<br />

Netzwerk. Sie sind <strong>für</strong> verschiedene Hardware-Schnittstellen und Übertragungsprotokolle verfügbar.<br />

Künftige Erweiterungen sind <strong>leicht</strong> möglich, anpaßbar an die weitere Entwicklung der Technik:<br />

serielleAnschlüsse (COM-Ports" in der Windows-Welt);<br />

parallele Anschlüsse;<br />

USB-Schnittstellen;<br />

div. Netzwerkverbindungen (mit den Protokollen HTTP, IPP, SMB/CIFS ["Samba"], AppSocket<br />

["HP JetDirect"], AppleTalk ["NetATalk"])<br />

Alle Backends sind in dem Verzeichnis /usr/lib/cups/backend/ zu Hause. Dazu gehören auch jeweils<br />

eigene Backends <strong>für</strong> die lokalen seriellen, parallelen bzw. USB-Schnittstellen.<br />

Clients aus der Apple-, Microsoft- oder übrigen UNIX-Welt:<br />

Nicht-<strong>CUPS</strong>-Clients aus der UNIX-, der Apple MacOS- oder MS Windows-Welt erhalten ebenfalls Zugriff<br />

auf die Dienste eines <strong>CUPS</strong>- oder ESP PrintPro-Druckservers. Welches Protokoll dabei verwendet<br />

werden kann, hängt von den Vorlieben des Administrators oder eventuell angetroffener Notwendigkeiten<br />

ab:<br />

über AppleTalk: Apple MacOS;<br />

über das traditionelle LPR/LPD-Protokoll: Apple MacOS, UNIX, MS Windows und andere;<br />

über SMB/CIFS (Samba"): MS Windows-Rechner aller Generationen;<br />

über IPP: MS Windows 2000 von Haus aus, so<strong>wie</strong> alle Betriebssysteme, bei denen<br />

IPP-Client-Software installiert ist.<br />

Unter Umständen ist die Installation zusätzlicher, nicht im Lieferumfang von <strong>CUPS</strong> oder ESP PrintPro<br />

enthaltener Software auf Server oder Clients erforderlich (beispielsweise das OpenSource-Packet Samba).<br />

PostScript erfordert Interpretation<br />

Fast alle Anwendungsprogramme, die unter <strong>Linux</strong> (oder UNIX) druckbaren Output erzeugen, benutzen<br />

hier<strong>für</strong> PostScript. PostScript ist eine Programmiersprache, die darauf spezialisiert ist, Seitendarstellungen<br />

von Dokumenten aller Art auf eine abstrakte Art zu beschreiben. PostScript benutzt hier<strong>für</strong> eine spezielle<br />

Syntax, die Linien, Kurven, Füllungen, Buchstaben, Schrift-Fonts und viele weiteren Grafikobjekte so<strong>wie</strong><br />

deren jeweilige Position, Größe und Farbe definiert, die zusammen das fertige Seitenbild auf dem<br />

bedruckten Blatt ergeben. PostScript ähnelt daher stark einer Art von "Vektor"-Format (obwohl es in sich<br />

natürlich auch "fertig gerasterte" Elemente einbetten kann).<br />

Die "Marking Engine" eines Druckers bringt jedoch alle Bilder nur punktweise zu Papier -- auch eine Linie<br />

ist hier eigentlich nur eine sehr dichte Aneinanderreihung von Punkten. Da PostScript die Anordnung von<br />

Toner oder Tinte auf dem Papier nicht pixelweise beschreibt, muss das adäquate "Raster"-Format <strong>für</strong> den<br />

Drucker zuerst durch einen aufwendigen "Raster Image Prozess" (RIP) aufbereitet werden. In<br />

PostScript-Druckern sind Hardware-RIPs in Form spezialisierter PostScript-Prozessoren eingebaut. Diesen<br />

Druckern kann man das durch das <strong>Linux</strong>-Programm erzeugte PostScript direkt übergeben; sie sind in der<br />

Lage, PostScript-Dateien schnell zu berechnen und zu verarbeiten.<br />

Für Nicht-PostScript-Drucker muss das von ihrer Marking Engine verwendete Rasterformat zuerst<br />

"mundgerecht" zubereitet werden. Unter <strong>Linux</strong> ist hier<strong>für</strong> das ghostscript-Packet zuständig; ghostscript<br />

stellt also eine Art Software-RIP dar. Da jeder Hersteller eigene, proprietäre Rasterformate <strong>für</strong> seine<br />

Drucker verwendet (und diese manchmal auch noch von Modell zu Modell wechselt), gibt es eine<br />

entsprechende Vielzahl zuständiger ghostscript-"Filter". Diese Filter-Programme sind <strong>für</strong> die<br />

entsprechende Daten-Konversion zuständig.<br />

Besonders heikel ist die Aufgabe bei modernen Tintenstrahlern: diese verwenden heute bereits 7 verschiedene<br />

Tinten-Tönungen (zusätzlich zu den 3 verwendeten Grundfarben eine jeweils hellere<br />

7


Schattierung plus Schwarz) und sie können außerdem noch Tröpfchen verschiedener Größen auf Papier<br />

spritzen, um auch jede noch so feine Abstufung in Foto-Qualität darstellen zu können.<br />

Dabei kommt es nicht alleine auf das reine 2-dimensionale Bitmap-Layout des fertigen Rasterbildes auf<br />

dem Papier an, sondern auch auf die Reihenfolge der Übertragung einzelner Punkt-"Zeilen" zum<br />

Druck-Kopf. Denn moderne Druck-Köpfe haben mehrere Düsen <strong>für</strong> jede Farbe: bei jeder waagrechten<br />

Bewegung des Druckkopfes sind somit jeweils mehrere "Zeilen" aktiv, das Bild wird in einem Prozess<br />

aufgebaut, der einer Art von Weben g<strong>leicht</strong>.<br />

Da die Hersteller-Spezifikationen <strong>für</strong> die Rasterformate und deren Übertragung an die Druckköpfe den<br />

Programmierern der ghostscript-Filter meist nicht zugänglich sind, ist es extrem sch<strong>wie</strong>rig, brauchbare<br />

Ergebnisse zustande zu bringen. Viele moderne Tintenstrahldrucker haben mit den Standard-ghostscript-Treibern<br />

ein entsprechend schlechtes Ergebnis beim Farbdruck.<br />

Exkurs: Das Gimp-Print-Projekt<br />

Das wird sich wohl bald entscheidend ändern -- vor allem dank des Gimp-Print-Projektes. Dieses hat mit<br />

dem stp-Treiber bereits einen hervorragenden Anfang <strong>gemacht</strong>. "stp" kann bereits eine Vielzahl von Epson,<br />

Canon- und HP-Druckern zu Foto-ähnlicher Ausgabe-Qualität an-"treiben"...<br />

Gimp-Print entstand ursprünglich als reines Plug-In zum bekannten Bildbearbeitungsprogramm GIMP.<br />

Diese wurde übrigens ebenfalls von Michael Sweet, dem heutigen Haupt-Entwickler von <strong>CUPS</strong>, ins Leben<br />

gerufen. Seit er mit <strong>CUPS</strong> begann, ist die Leitung des Gimp-Print-Projekt in die Hände von Robert Krawitz<br />

übergegangen; Michael trägt jedoch immer noch zur Code-Basis bei.<br />

Das Gimp-Print-Packet lässt sich von http://gimp-print.sourceforge.net/ als Quell-Packet herunterladen.<br />

Aus dieser Code-Basis lässt sich der stp-Filter in drei verschiedenen Inkarnationen kompilieren:<br />

als Plug-In <strong>für</strong> den GIMP,<br />

als "normaler" ghostscript-Filter (ergänzend braucht man dann noch Grant Taylor's foomatic, wenn<br />

man diesen ghostscript-Filter unter <strong>CUPS</strong> nutzen will),<br />

und als Filter in einer Form, die sich nahtlos in <strong>CUPS</strong> einpasst und mehr als 100 modellspezifische<br />

PPDs <strong>für</strong> HP-, Canon- und Epson-Tintenstrahler mitbringt.<br />

Welche Version man braucht, wird über einen Parameter beim Aufruf des configure-Scripts gesteuert:<br />

"./configure --with-ghost --with-foomatic --with-gimp --with-cups" lässt des anschliessende<br />

"make"-Kommando alle Varianten gleichzeitig erzeugen.<br />

MIME-Types -- Bestimmung und Kennzeichnung von Dateiformaten<br />

<strong>CUPS</strong> verwendet als Grundlage <strong>für</strong> seinen zentralen Filter "pstoraster" ein modifiziertes ghostscript.<br />

Dieses beruht zwar noch auf der Version 5.50, bringt jedoch bei vielen Druckern bereits weitaus bessere<br />

Ergebnisse zustande als das Standard-ghostscript. Da <strong>CUPS</strong> außer PostScript auch PDF, Text und viele<br />

Grafikformate direkt verarbeiten kann (<strong>für</strong> diese sind dann Filter mit Namen <strong>wie</strong> pdftops, texttops, imagetops<br />

oder imagetoraster zuständig), muss es in der Lage sein, diese Formate auf zuverlässige Weise zu<br />

identifizieren und <strong>für</strong> die Weiterverarbeitung zu kennzeichnen.<br />

Zu diesem Zweck verwendet es MIME-Types. MIME-Types dienen der Bestimmung des Dateiformats<br />

(auch unabhängig von der mitgebrachten Datei-Endung) und der Festlegung dessen, was mit dieser Datei<br />

geschehen soll (z.B. welchem Filter-Programm sie zugeführt werden soll).<br />

MIME steht <strong>für</strong> Multipurpose Internet Mail Extensions. MIME-Typen sind in einem RFC-Standard<br />

definiert, um Datei-Typen und -Formate zu bezeichnen; MIME-Types <strong>für</strong> neuentwickelte Datenformate<br />

können bei der IANA (Internet Assigned Numbers Authority) registriert, reserviert und veröffentlicht<br />

werden.<br />

MIMEs wurden ursprünglich geschaffen, um einen Standard zu haben, der es ermöglicht, mittels E-Mail<br />

(die ursprünglich nur <strong>für</strong> druckbare ASCII-Dateien gedacht war) jegliche anderen (registrierten)<br />

Dateiformate auszutauschen. Zwischenzeitlich spielen sie auch <strong>für</strong> den reibungslosen Datenverkehr über<br />

HTTP (auf Webseiten surfen, Dateien aller Art laden, speichern oder abspielen) eine entscheidende Rolle.<br />

Beim Versand einer Datei über HTTP wird vom Server jeweils die eindeutige MIME-Type-Bezeichnung<br />

8


mit angegeben. Ein Web-Server, der eine MIME-typisierte Datei vom Server erhält und diese nicht selbst<br />

anzeigen kann, "weiss" dann aufgrund der MIME-Kennung, welches Programm oder Plug-In ihm dabei<br />

behilflich ist (meist konfigurierbar). Obwohl es Plattformen gibt, die Dateiformate nach der Dateinamens-Endung<br />

zuordnen, ist dies nicht in jedem Falle eindeutig. Die Endung .doc z.B. kann Indikator <strong>für</strong><br />

eine einfache Textdatei, ein FrameMaker- oder ein MS Word-Dokument sein.<br />

MIME-Types beseitigen durch ihre Registrierung bei IANA jegliche Zweideutigkeit. Sie geben den<br />

beteiligten Programmen (Browser, Web-Server, Mail-Client, Mail-Server...) ein eindeutiges Identifizierungsschema<br />

an die Hand, das Missverständnisse weitgehend ausschliesst.<br />

MIME-Types werden nach folgendem Schema angegeben: Hauptkategorie/Nebenkategorie.<br />

Beispiele <strong>für</strong> MIME-Types, mit denen <strong>CUPS</strong> arbeitet, sind text/plain (reine Textdatei), text/html<br />

(HTML-Datei), image/gif (Grafik im GIF-Format), application/pdf (PDF-Datei), application/vnd.cups-raster<br />

(das <strong>CUPS</strong>-eigene Rasterformat).<br />

<strong>CUPS</strong> besitzt in der Datei /etc/cups/mime.types eine eigens zuständige Datei, die Regeln definiert, nach<br />

denen unbekannte Formate in die MIME-Types-Kategorien einsortiert werden. Beim Weitergeben an Filter<br />

oder andere IPP-Rechner dienen diese MIME-Types dann der eindeutigen Kennzeichnung des vorhandenen<br />

Formats. Und in /etc/cups/mime.convs existiert eine Konfigurationsdatei, in der festgelegt wird,<br />

welcher Filter <strong>für</strong> welchen MIME-Type zuständig ist...<br />

Filter -- die Arbeitpferde des ghostscript-RIPs<br />

Die verschiedenen <strong>CUPS</strong>-Filter ergeben erst in ihrer Gesamtheit die volle RIP-Funktionalität, die es erlaubt,<br />

die vielen Ausgangsformate.(die ja nicht nur aus PostScript alleine bestehen) zu verarbeiten und zu<br />

drucken. Oft lässt sich bereits anhand ihres Namens erahnen, welche Art der Konvertierung sie durchführen.<br />

Auf meinem System (<strong>CUPS</strong> in der Erweiterung mit ESP PrintPro) sind in /usr/lib/cups/filter/ folgende<br />

vorhanden:<br />

* hpgltops<br />

Umwandlung von der HP-Plottersprache HP-GL/2 nach PostScript<br />

* imagetops<br />

Umwandlung diverser Grafik- und Bildformate in PostScript<br />

* imagetoraster<br />

Umwandlung verschiedener Grafik- und Bildformate in das <strong>CUPS</strong>-eigene Rasterformat<br />

* pdftops<br />

Umwandlung von PDF (Portable Dokument Format) zu PostScript<br />

* pstops<br />

Umwandlung von PostScript nach PostScript (wird benötigt, um die Seiten eines Jobs zu zählen oder<br />

um z.B. 2-up oder ausgewählte Seiten einer Datei zu drucken)<br />

* pstoraster<br />

Umwandlung von PostScript zu dem <strong>CUPS</strong>-eigenen Rasterformat<br />

* texttops<br />

Umwandlung von Text in PostScript<br />

* rastertoescp<br />

Umwandlung des <strong>CUPS</strong>-eigenen Rasterformats nach ESC/P (Epson-Format) [nur bei ESP Print-<br />

Pro]<br />

* rastertoescp2<br />

Umwandlung des <strong>CUPS</strong>-eigenen Rasterformats nach ESC/P2 (Epson-Format) [nur bei ESP Print-<br />

Pro]<br />

* texttopcl<br />

Umwandlung von Text in PCL [nur bei ESP PrintPro]<br />

* rastertopcl<br />

Umwandlung des <strong>CUPS</strong>-eigenen Rasterformats nach PCL [nur bei ESP PrintPro]<br />

* rastertoepson<br />

Umwandlung des <strong>CUPS</strong>-eigenen Rasterformats nach ESC (Epson-Format) [nur bei <strong>CUPS</strong>]<br />

* rastertohp<br />

Umwandlung des <strong>CUPS</strong>-eigenen Rasterformats nach PCL [nur bei <strong>CUPS</strong>]<br />

9


* texttohp<br />

Umwandlung von Text in PCL [nur bei <strong>CUPS</strong>]<br />

In der Praxis müssen bei jedem Konvertierungs-Job mehrere Filter hintereinandergeschaltet werden, um<br />

aus der Ausgangsdatei die versandfertige, Drucker-spezifische Enddatei zu erzeugen; pstops ist praktisch<br />

immer beteiligt, alleine schon, um die Accounting-Funktionalität zu gewährleisten...<br />

Die Kette hintereinandergeschalteter Filter sieht beim einfachen Druck der <strong>CUPS</strong>-Testseite (PostScript) auf<br />

einem HP LaserJet <strong>wie</strong> folgt aus: pstops -> pstoraster -> rastertohp. Beim Druck einer GIF-Grafik<br />

besteht die "Kette" nur aus dem einen Glied imagetops (im Falle eines PostScript-Druckers), und aus imagetoraster<br />

-> rastertohp im Falle eines LaserJets bei Verwendung von <strong>CUPS</strong>, und aus imagetoraster -><br />

rastertopcl im Falle eines LaserJets bei Verwendung von ESP PrintPro.<br />

Druckbare Formate:<br />

Viele Dateiformate können von <strong>CUPS</strong> auf "transparente" Weise gedruckt werden, d.h. ohne dass eine entsprechende Anwendung<br />

geöffnet werden muss. Diese Formate werden über die MIME-Type-Klassifizierung automatisch erkannt und über die<br />

Filter so gewandelt, dass ein druckbares Format <strong>für</strong> den Zieldrucker herauskommt. Zu den dergestalt unterstützten Formaten<br />

gehören:<br />

Adobe® PDF<br />

Adobe® PostScript® (Level 1 - 3)<br />

ASCII Text<br />

Graphics Interch. Format (GIFSM)<br />

HP-GL<br />

HP-GL/2<br />

Internationaler Text<br />

JPEG/JFIF<br />

Kodak PhotoCD<br />

Portable aNyMap (PNM)<br />

Portable BitMap (PBM)<br />

Portable GrayMap (PGM)<br />

Modularer Aufbau<br />

Durch den modularen Aufbau der Filter-Funktion lassen sich jederzeit weitere Filter in das <strong>CUPS</strong>-System<br />

integrieren. Drucker- und Softwarehersteller können durch das <strong>CUPS</strong>-Framework jetzt sehr einfach und<br />

kostengünstig "Treiber" <strong>für</strong> <strong>Linux</strong> entwickeln (oder entwickeln lassen): es ist nur ein eigener (oder<br />

angepasster) Filter <strong>für</strong> den Drucker, eine Drucker-PPD und eventuell entsprechende Einträge in der Datei<br />

/etc/cups/mime.convs nötig.<br />

Die Filter brauchen nicht einmal im Quellcode vorzuliegen, falls der Hersteller meint, wertvolle Betriebsgeheimnisse<br />

wahren zu müssen.<br />

Es gibt nur folgendes zu beachten: ein <strong>CUPS</strong>-Filter muss außer dem Standard-Verhalten eines UNIX-Filters<br />

(Lesen von stdin, Schreiben nach stdout) noch sechs bzw. sieben weiteren Parametern verarbeiten können:<br />

er muss mit User-Namen, Job-Titel, Job-ID, Drucker-Namen, Anzahl der gewünschten Kopien,<br />

Job-Optionen und dem übergebenen Dateinamen (wenn es der erste Filter in der Kette ist) umzugehen in der<br />

Lage sein (d.h. diese entgegennehmen und weitergeben).<br />

Dezidierte Druckserver<br />

Wer <strong>CUPS</strong> als dezidierten Druckserver betreiben will, der eine Anzahl von Clients bedient, sollte sein<br />

System dem Druckaufkommen entsprechend auslegen. Das Verarbeiten von PostScript durch das<br />

ghostscript-Software-RIP benötigt unter Umständen (je nach Zieldrucker) eine Menge Ressourcen:<br />

CPU-Zeit, RAM, Plattenplatz. Die Rasterdaten <strong>für</strong> eine A3-Farbseite auf einem<br />

6-Farb-Tintenstrahl-Drucker können <strong>leicht</strong> 60 MB übersteigen. Da bei <strong>CUPS</strong> der Server diese Aufgabe <strong>für</strong><br />

die Clients erbringt (und den Administrator von der Konfiguration der Clients entlastet), sollte er auf keinen<br />

Fall zu schwach <strong>für</strong> das projektierte Druckaufkommen ausgelegt sein, um unnötige Wartezeiten zu vermeiden.<br />

Bei Einsatz von PostScript-Druckern entfällt allerdings der größte Teil der rechenintensiven<br />

RIP-Vorgänge: hier genügt unter Umständen ein ausrangierter 486 mit ausreichend Plattenplatz zum<br />

Spoolen und Zwischenlagern der Aufträge.<br />

Wichtige Hinweise bei Erst-Installation<br />

10<br />

Portable Network Graphics (PNG)<br />

Portable PixMap (PPM)<br />

SGI® RGB<br />

Sun® Raster<br />

Tagged Image File Format (TIFF)<br />

Windows® Bitmap (BMP)


Wer <strong>CUPS</strong> auf einem System installieren will, <strong>für</strong> das es noch keine fertig geschnürten Packete der betreffenden<br />

<strong>Linux</strong>-Distribution gibt, verwendet am besten das "portable" .tar.gz-Format der<br />

<strong>CUPS</strong>-Entwickler (Es werden auch RedHat-.rpm- und Debian-.deb-Packete angeboten). Zuvor sollten die<br />

bestehenden Druck-Packete de-installiert werden. (Bei SuSE z.B. "lprold" oder "lprng"). Nach dem Auspacken<br />

des Packetes mit "tar -xvzf cups-1.1.6.tar.gz" steht im lokalen Verzeichnis u.a. das Installations-Skript<br />

zur Verfügung. Es wird dort von root mit dem Befehl "./cups.install" ausgeführt.<br />

Achtung: es ersetzt bestehende Dateien und Befehle <strong>wie</strong> printcap, lp, lpr, lpq, lpc, lpadmin durch eigene<br />

Versionen, sichert die bestehenden jedoch zuvor unter der Endung .O (Sollte man <strong>CUPS</strong> <strong>wie</strong>der loswerden<br />

wollen, stellt das De-Installations-Skript "cups.remove" den Ursprungszustand <strong>wie</strong>der her).<br />

Wichtige Hinweise <strong>für</strong> das Upgraden<br />

Wer immer auf dem aktuellsten Stand sein will, wird sich eventuell die als .tar.gz.-tarball vorliegenden<br />

Binärdateien vom <strong>CUPS</strong>-Server holen. Die Installation mit dem mitgelieferten cups.install-Shellscript ist<br />

dann ein Kinderspiel. Es lässt alle vorhandenen Konfigurations-Dateien "in Ruhe" und überschreibt diese<br />

nicht: Die mitgelieferte neue Konfigurationsdatei wird unter dem Namen cupsd.conf.N neben die "aktive"<br />

geschrieben.<br />

Achtung: Dies bedeutet, dass man zwar weiterhin ein laufendes System hat, jedoch *nicht* in den Genuss<br />

neuer Features kommt, ohne in die cupsd.conf.N zu schauen und neu vorhandene Direktiven eventuell<br />

händisch in die aktive cupsd.conf zu übertragen und auf die eigenen Verhältnisse anzupassen... <strong>CUPS</strong> wird<br />

ziemlich zügig weiterentwickelt und in fast jeder neuen Release finden sich zusätzliche Konfigurations-Optionen.<br />

Drei verschiedene Benutzer-Schnittstellen<br />

<strong>CUPS</strong> verfügt über zwei verschiedene "eingebaute" Benutzerschnittstellen: die Kommandozeile und das<br />

per Browser zugängliche Web-Interface.<br />

Darüber hinaus gibt es noch optionale grafische Benutzeroberflächen, die von Dritten beigesteuert wurden<br />

und sich nachträglich als <strong>CUPS</strong>-Bedien-Frontends installieren lassen: XPP (X Print Panel) von Till<br />

Kamppeter, Qt<strong>CUPS</strong> und KUPS (von Jean-EricCuendet und Michael Goffioul) und GTKlp (von Tobias<br />

Müller). Wählt man diese Tools innerhalb der Programme, die drucken sollen, als "Druck-Kommando",<br />

dann poppt bei jedem Druckauftrag zuerst ein Fenster auf, das den Anwender Drucker und Job-Optionen<br />

auswählen lässt.<br />

Die kommerzielle <strong>CUPS</strong>-Version, ESP PrintPro beinhaltet zusätzlich zu den 2.300 Druckertreibern und<br />

einigen ghostscript-Verbesserungen (beruhend auf per NDA, Non Disclosure Agreements, lizenzierten<br />

Herstellerinformationen) ebenfalls ein Graphical User Interface (GUI).<br />

Verschiedene <strong>CUPS</strong>-Ressourcen und -Locations<br />

Wie ein "normaler" Web-Server herrscht auch der <strong>CUPS</strong>-Daemon über verschiedene (reale und virtuelle)<br />

Ressourcen (auch locations genannt), die von den Clients mittels URI addressiert werden. Dazu gehören:<br />

/admin/,<br />

/printers/,<br />

/printers/druckername,<br />

/printers/druckername.ppd,<br />

/jobs/,<br />

/classes/,<br />

/classes/klassenname<br />

Locations können per Browser "betreten" werden, wenn man den URI-Pfad zum Webserver-Wurzelverzeichnis<br />

um die Bezeichnung der Location ,,verlängert". Beispiel: Die Location /classes/all_laserjets<br />

auf dem <strong>CUPS</strong>-Server transmeta.danka.de wird über die URL<br />

http://transmeta.danka.de:631/classes/all_laserjets erreicht.<br />

Differenzierte Rechte<br />

11


Allerdings ist nicht jede Location gleichermaßen zugänglich. Die Zutritts-Berechtigung zur Location wird<br />

je nach Konfiguration überprüft und u.U. verwehrt. Der IPP-Server <strong>CUPS</strong> gestattet -- <strong>wie</strong> jeder<br />

HTTP-Server -- dem Administrator, die Berechtigungen <strong>für</strong> die verschiedenen Locations unterschiedlich zu<br />

setzen. Dazu dienen die "AuthType"-Direktiven: "AuthType None" verzichtet völlig auf eine Authentifizierung,<br />

"AuthType Basic" verwendet die HTTP-Basic-Methode und "AuthType Digest" nimmt die<br />

HTTP-Digest-Methode.<br />

Darüber hinaus kann der Zutritt je nach Herkunft des Nutzers gewährt oder verweigert werden. Die aus der<br />

Apache-Konfiguration bekannten Direktiven "AllowFrom..." und "DenyFrom..." samt der Auswertungs-Reihenfolge<br />

"Order Allow,Deny" bzw. "Order Deny,Allow" sind hier<strong>für</strong> ausschlaggebend. Als<br />

Variablen können bei diesen Direktiven All, None, Host-Name, IP-Adresse, Domain-Name samt<br />

entsprechenden *-Platzhaltern auftreten.<br />

Alle diese Vorgaben sind durch Editieren der gut kommentierten /etc/cups/cupsd.conf einzustellen.<br />

Nach einer Neuinstallation ist die Location /admin/ erst mal nur <strong>für</strong> root zugänglich, jedoch nicht remote,<br />

sondern nur vom localhost aus (und auch nur dann, wenn der root-Account kein leeres Passwort hat).<br />

Achtung: man sollte nicht der Selbsttäuschung anheimfallen, dass diese Rechtefestlegung nur <strong>für</strong> das<br />

Web-Interface gilt. Auch bei Nutzung der Kommandozeile oder einer GUI greift man zwangsläufig auf<br />

locations des <strong>CUPS</strong>-Servers zu und kommt dadurch mit den gesetzten Rechten in Berührung.<br />

Verschlüsselung über SSL3/TLS<br />

Eines der neueren Merkmale von <strong>CUPS</strong> ist seine Unterstützung des Verschlüsselungs-Standards TLS<br />

(Transport Layer Security), der inzwischen den IETF-Status "proposed standard" erreicht hat. TLS ist von<br />

Netscapes SSL3 (Secure Socket Layer Version 3) abgeleitet und verwirklicht eine asymetrische Verschlüsselung<br />

von Daten. <strong>CUPS</strong> stützt sich <strong>für</strong> die Kernfunktionen auf diesem Gebiet auf die Entwicklungen<br />

des OpenSSL-Projekts, dessen libraries es <strong>für</strong> seine Funktionen nutzt. Die <strong>CUPS</strong>-Entwickler bezeichnen<br />

die TLS-Unterstützung zwar noch als "experimentell" -- wenn das Entwicklungstempo jedoch in dem seitherigen<br />

Tempo weitergeht, ist demnächst mit wirklicher "Produktreife" dieses Features zu rechnen.<br />

Übergabe von Job-Optionen auf der Kommandozeile<br />

Wer die Optionen seines Druckers von der Kommandozeile aus nutzen will, muss zuerst herausfinden: <strong>wie</strong><br />

hat der Hersteller diese überhaupt in die PPD hineincodiert?<br />

Ein gutes Werkzeug <strong>für</strong> diesen Zweck ist der Befehl "lpoptions". In der Form "lpoptions -h transmeta<br />

-p Hitachi_DDP70_ClusterPrintingSystem -l" wird die PPD des Druckers Hitachi_DDP70_ClusterPrintingSystem<br />

auf dem <strong>CUPS</strong>-Host transmeta zu allen verfügbaren (-l <strong>für</strong> "langes Ausgabeformat")<br />

Optionen befragt. Die Ausgabe dieses Beispiels ist zu lang, um hier <strong>wie</strong>dergegeben zu werden. Deshalb will<br />

ich danach suchen, <strong>wie</strong> diesem Drucker per PPD mitgeteilt wird, dass er doppelseitig (Duplex oder duplex?)<br />

drucken soll: "lpoptions -h transmeta -p Hitachi_DDP70_ClusterPrintingSystem -l | grep<br />

uplex" liefert die Ausgabe: "TR-Duplex/Duplex: False *True". -- Hieraus ist zu ersehen:<br />

der Name der gesuchten Option ist "TR-Duplex";<br />

hinter dem Schrägstrich steht die Übersetzung der Option, <strong>wie</strong> sie vom Web-Interface oder einer GUI<br />

übernommen werden sollte ("Duplex");<br />

die Option kann die beiden Werte "False" und "True" annehmen;<br />

der gegenwärtig eingestellte Wert ist "True" (erkennbar an der Markierung mit dem Stern *).<br />

Soll jetzt ausnahmesweise doch einseitig gedruckt werden, muss man folgendes Kommando verwenden:<br />

"lpr -P Hitachi_DDP70_ClusterPrintingSystem -o TR-Duplex=False /Pfad/zu/Druckjob".<br />

Accounting<br />

Prinzipiell führt der <strong>CUPS</strong>-Server über jede verarbeitete Seite Buch. In der Datei /var/log/cups/page_log<br />

ist <strong>für</strong> jede Seite ein Eintrag der Form: "Druckername Benutzer Job-Nr [Datum+Uhrzeit] Seiten-Nummer<br />

Auflage" enthalten. Diese Datei lässt sich dann <strong>für</strong> Buchhaltungszwecke beliebig auswerten. Von Thies<br />

Moeller stammt das Perl-Skript PrintAnalyzer, welches aus dem page_log einige Statistiken extrahiert,<br />

12


die Aufschluss über die Anzahl der Druckaufträge (pro Drucker und gesamt), die Nutzer und ihr Druckaufkommen,<br />

die zeitliche Verteilung der Drucke und vieles mehr geben.<br />

Anmerkung: Die Seitenanzahl eines Jobs wird bei Durchlauf des Filters pstops ermittelt. Hier<strong>für</strong> muss die<br />

Anwendung ein sogenanntes DSC-konformes PostScript (DSC = Document Structuring Conventions)<br />

generieren, was in der Regel der Fall ist. Fast alle Jobs passieren zwar durch diesen wichtigen Filter; die<br />

anderen jedoch, die an diesem Filter vorbeilaufen (also z.B. Samba-Druckjobs, die von Windows-Clients<br />

stammen, welche Original-Windows-Treiber verwenden und deshalb auf dem <strong>CUPS</strong>-Server die Option<br />

"-o raw" verwenden müssen, da der Druckjob auf Windows bereits im druckbaren Format erzeugt wird<br />

und keine Filterung auf <strong>Linux</strong>-Seite mehr verträgt), werden nur mit der Seitenzahl 1 gezählt.<br />

Weitere Information über wichtige Kommandos<br />

Wer sich über die wichtigsten <strong>CUPS</strong>-Kommandos informieren will, sollte einfach mal mit<br />

"lp-[Tab]-[Tab]" alle mit "lp" beginnenden Kommandos (sowohl als User, <strong>wie</strong> auch als root -- denn <strong>für</strong><br />

die beiden decken sich die erlaubten Befehle nicht) ausfindig machen. Die meisten werden zu <strong>CUPS</strong><br />

gehören. Die zugehörigen man-Pages sollten als erstes Lesematerial dienen; sie verweisen dann auch auf<br />

zusätzliche Befehle (<strong>wie</strong> cancel und enable), die nicht mit "lp" beginnen.<br />

Bei laufendem <strong>CUPS</strong>-Daemon ist außerdem über http://localhost:631/documentation.html die<br />

komplette aktuelle <strong>CUPS</strong>-Dokumentation in HTML- und PDF-Format im Zugriff (von einem entfernten<br />

Client aus muss man eventuell die URL http://<strong>CUPS</strong>-Server:631/documentation.html verwenden.<br />

Sollte der <strong>CUPS</strong>-Daemon ausnahmsweise Probleme machen, finden sich die Dateien in der Regel unter<br />

/usr/share/doc/cups/ im lokalen Datei-System.<br />

Hersteller unterstützter Druckermodelle bei ESP PrintPro (kommerzielle <strong>CUPS</strong>-Erweiterung)<br />

Hier eine Liste der Hersteller derzeit unterstützter Druckermodelle. Diese Liste wird ständig erweitert.<br />

Insgesamt werden mit der Software derzeit über 2.300 Druckermodelle unterstützt, davon mehr als 1.000<br />

Nicht-PostScript-Modelle (zumeist Tischgeräte der einen oder anderen Art):<br />

3M<br />

5500<br />

A.B.Dick<br />

Accel<br />

Acolor_SM<br />

Adobe<br />

Agfa<br />

ALPS<br />

Apple<br />

APS<br />

AST<br />

Autologic<br />

Birmy<br />

CalComp<br />

Canon<br />

CCL<br />

CCP<br />

ColorLink<br />

Colormate<br />

ColorScript<br />

COLOSSAL<br />

COMPAQ<br />

CompuPrint<br />

Crosfield<br />

Cyclone<br />

Danka<br />

Dataproducts<br />

Digital<br />

Dolev<br />

EFI<br />

ENCAD<br />

EPSON<br />

Fargo<br />

FIRST<br />

FP Fuji<br />

Fujitsu<br />

FX<br />

COMPAQ<br />

DDP<br />

DDS<br />

GCC<br />

GDT<br />

Gestetner<br />

Heidelberg<br />

Hitachi<br />

HP<br />

IBM<br />

IDT<br />

Indigo<br />

infotec<br />

IRIS<br />

IS<br />

Jet<br />

JVC<br />

Kanji<br />

Kodak<br />

LaserPress<br />

LBP<br />

Lexmark<br />

LHAG<br />

Linotronic<br />

Linotype<br />

MajestiK<br />

Management<br />

Mitsubishi<br />

MJ<br />

Monotype<br />

Mutoh<br />

NEC<br />

NeXT<br />

NWS<br />

OceColor<br />

OKI<br />

Okidata<br />

Panasonic<br />

Panther<br />

PantherPlus<br />

PantherPro<br />

Pictura<br />

PlateMaker<br />

PostArt<br />

PostArtPro<br />

PrePress<br />

ProofPositive<br />

QMS<br />

Quasar<br />

QuasarJ<br />

Qume<br />

Ricoh<br />

Samsung<br />

SC7000 J<br />

Scantext<br />

Schlumberger<br />

Scitex<br />

Seiko<br />

Shinko<br />

Sony<br />

SPARCprinter<br />

Splash<br />

StyleScript<br />

Tally<br />

Tektronix<br />

TI<br />

Typhoon<br />

UNISYS<br />

Varityper<br />

Xante<br />

Xerox<br />

& versch. andere<br />

Tipps und Tricks<br />

Der erfahrene <strong>CUPS</strong>-Anwender kann sehr schnell eine Menge Tipps und Tricks ausfindig machen, die es<br />

ihm erlauben, sein System voll und ganz auszureizen. Zum Beispiel sind über die Kommandozeile eine<br />

grosse Anzahl von IPP-Funktionalitäten möglich, die noch keine Entsprechung in einer der GUIs oder im<br />

Web-Interface haben. Experimentierfreudige <strong>Linux</strong>er sollten sich das RFC 2910 besorgen, worin die<br />

13


Spezifikationen des IPP 1.1 festgelegt sind. Darin finden sich viele Funktionen, die auf der<br />

<strong>CUPS</strong>-Kommandozeile funktionieren, jedoch in die "offizielle" <strong>CUPS</strong>-Dokumentation noch nicht Eingang<br />

gefunden haben.<br />

Eines der von mir ausfindig <strong>gemacht</strong>en Beispiele: das Kommando "lpr -P HeidelbergDigimaster -o<br />

job-hold-until=indefinite /usr/share/doc/sam.pdf" schickt das <strong>CUPS</strong>-Software Administrator<br />

Manual zur Verarbeitung durch den Drucker HeidelbergDigimaster9110 -- jedoch wird der Job nicht sofort<br />

gedruckt, sondern <strong>für</strong> unbestimmte Zeit auf "Halde" gelegt. (Er kann dann jederzeit manuell freigegeben<br />

oder gleich gelöscht werden). "job-hold-until" gehört zu den in IPP 1.1 festgelegten "Job Template Attributes";<br />

es akzeptiert als gültige Werte "indefinite", "day-time", "evening", "night", "weekend", "second-shift"<br />

und "third-shift" oder eine Zeitangabe in der Form "HH:MM".<br />

Mehr zu dem Thema "Tipps + Tricks" muss aus Platzmangel dem in Arbeit befindlichen "<strong>CUPS</strong> Printing<br />

HOWTO" vorbehalten bleiben.<br />

Ausblick<br />

Der Leiter der <strong>CUPS</strong>-Entwicklung, Michael Sweet, hat eng mit dem Samba-Team zusammengearbeitet, um<br />

eine möglichst nahtlose Zusammenarbeit von <strong>CUPS</strong> mit der Windows-Welt zu erreichen. Die ersten<br />

Früchte dieser Kooperation kann man bereits ernten, seit die neueste Samba-Release 2.2 freigegeben ist.<br />

Durch die verwirklichte "Point&Print"-Technologie ist es Windows-Anwendern möglich, die PPD <strong>für</strong> den<br />

Zieldrucker durch einfachen Doppelklick zu installieren (vom <strong>CUPS</strong>-Server als Downloadquelle). [Anmerkung<br />

und Ergänzung: natürlich kann man auch den originalen Windows-Treiber auf dem <strong>CUPS</strong>-Server<br />

hinterlegen und den Clients übergeben].<br />

Auf der Windows-Seite wird so in jedem Falle ein mit dieser PPD gespickter einfacher PostScript-Treiber<br />

zum Einsatz kommen -- selbst wenn der Zieldrucker ein Nicht-PostScript-Gerät ist! Der <strong>CUPS</strong>-Server<br />

empfängt PostScript plus gerätespezifische Job-Optionen aus der PPD und konvertiert dieses mittels seiner<br />

Filter in das Rasterformat des Zieldruckers. Administratoren von großen Installationen unter Windows<br />

Terminal Servern (WTS) können sich dann auf höhere Stabilität ihrer Server freuen: denn der vielfältige<br />

Treiber-Wirrwarr, der auf den Servern bisher herrscht (wenn man sich in der betroffenen WTS-Umgebung<br />

nicht gerade auf ein bestimmtes Druckermodell <strong>für</strong> die Clients in -zig-dutzendfacher Auflage geeinigt<br />

hatte), ist dann zu Ende. Es brauchen keine PCL- und andere Treiber mehr eingesetzt werden, die z.T. <strong>für</strong><br />

ihre negativen Auswirkungen auf die Server-Uptime notorisch sind. [Mancherorts wird die Hälfte aller<br />

"Bluescreens" (die dann sofort mehrere Dutzend Client-Rechner <strong>für</strong> eine Viertelstunde lahm legen) auf die<br />

Anwesenheit zertifizierter (!) HP-PCL-Treiber zurückgeführt...]. Der eine PostScript-Treiber genügt <strong>für</strong><br />

alle Drucker (die unterschiedlichen PPDs haben keine negativen Auswirkungen auf den Server).<br />

Fazit<br />

<strong>CUPS</strong> macht das <strong>Drucken</strong> nicht nur <strong>für</strong> den Anfänger oder <strong>Heimanwender</strong> einfacher. <strong>CUPS</strong> ist auch <strong>für</strong>den<br />

gestressten Administrator im Enterprise eine echte Er<strong>leicht</strong>erung. Dabei sind dem Tausendsassa <strong>CUPS</strong><br />

heterogene Netzwelten seit Anfang bekannt. Und gerade hier kann <strong>CUPS</strong> dem weiteren Vormarsch von<br />

<strong>Linux</strong> im Enterprise und auf den Desktops mehr als behilflich sein: denn das schönste KDE nützt samt<br />

K-Office nichts, wenn <strong>Drucken</strong> unter <strong>Linux</strong> das Ge-Murkse bleibt, das es oftmals noch ist...<br />

Der Autor:<br />

Kurt Pfeifle arbeitet in Stuttgart als System-Spezialist <strong>für</strong> die Danka Deutschland GmbH, einem der größten herstellerunabhängigen<br />

Anbieter im Vertrieb und Service von Systemlösungen <strong>für</strong> den Digitaldruck, bestehend aus integrierten Hard- und<br />

Software-Komponenten. Er ist unter kpfeifle.at.danka.de zu erreichen.<br />

Links:<br />

http://www.danka.de/printpro/faq.html<br />

<strong>CUPS</strong>-FAQ von Kurt Pfeifle, insgesamt 150 Fragen (und derzeit etwas weniger Antworten ;-)<br />

http://www.pwg.org/ipp/<br />

14


Informationen über das Internet Printing Protocol aus erster Hand<br />

http://www.cups.org/software.html<br />

<strong>CUPS</strong> downloaden<br />

http://www.cups.org/documentation.html<br />

Informationen über <strong>CUPS</strong> aus erster Hand<br />

http://www.easysw.com/software.html<br />

ESP PrintPro downloaden<br />

http://www.easysw.com/documentation.html<br />

Informationen über ESP PrintPro aus erster Hand<br />

http://www.linuxprinting.org/<br />

Grant Taylors <strong>Linux</strong> Printing HOWTO, <strong>CUPS</strong>-O-Matic und PDQ-O-Matic u.v.m.<br />

http://www.pwg.org/ipp/IPP-Products.html<br />

Liste IPP-fähiger Produkte bei der Printer Working Group<br />

Anmerkung: dieses Paper ist eine erweiterte und überarbeitete Fassung eines <strong>für</strong> "<strong>Linux</strong>Enterprise" im Fühjahr geschriebenen,<br />

jedoch erst in Ausgabe 07/2000 erscheinenden Artikels.<br />

15<br />

Kurt Pfeifle

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!