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