[[Vorlage(Getestet, dapper, feisty, gutsy)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Editor: Einen Editor öffnen] [:Terminal: Ein Terminal öffnen] [:Benutzer_und_Gruppen: Benutzer und Gruppen verwalten] }}} [[Inhaltsverzeichnis(3)]] [[Bild(./cups_logo.png, 75, left)]] [http://www.cups.org/ CUPS] {en} , das ''Common Unix Printing System'', ist das aktuell am weitesten verbreitete Drucksystem auf Linuxsystemen. Andere Protokolle wie ''LPD (BSD-System)'' oder ''lprng'' wurden inzwischen nahezu endgültig verdrängt und begegnen einem höchstens noch auf dem einen oder anderen Hardware-Router mit integrierter Netzwerkdruckerfunktion. Über CUPS lassen sich zahlreiche Drucker nutzen und verwalten, und da CUPS als Client/Server-System aufgebaut ist auch im Netzwerk freigeben und nutzen. Wenn im Netzwerk ein Rechner mit CUPS als Drucker-Server läuft, kann man Cups auch an [:Samba:] anbinden, so dass auch Windows-Maschinen darüber drucken können. Windows 95, 98, ME benötigen Samba zum Drucken im Netzwerk. Windows2000, XP und Vista dagegen können auch über das [http://de.wikipedia.org/wiki/Internet_Printing_Protocol Internet Printing Protokoll] {de} , das CUPS zugrunde liegt, drucken. Mehr über die Anbindung von Windows-Rechnern erklärt der Artikel [:Windows_Netzwerkdrucker:Windows Netzwerkdrucker]. = Installation = CUPS wird selbstverständlich bei der Installation aller Ubuntu-Derivate von Haus aus als wichtiger Bestandteil des Betriebssystems installiert. Einzige Ausnahme stellt die Ubuntu Server-Edition dar, bei der man die Pakete aber wie üblich über die Paketverwaltung nachinstallieren kann. Folgende Pakete enthalten die elementaren Teile von CUPS: * '''cupsys''' - Der CUPS-Server * '''cupsys-client''' - Der CUPS-Client, kann auf reinen Clients auch einzeln installiert werden * '''cupsys-bsd''' - Kompatibilitätslayer für das alte BSD-Drucksystem Außerdem benötigt man noch das eine oder andere der folgenden Pakete, in denen spezialisiertere Treiber enthalten sind. Wer nicht weiß, welche für ihn nützlich sind, installiert sie einfach alle. * '''hplip''' und * '''hpijs''' - Für HP-Drucker, egal ob Laser- oder Tintenstrahldruckerr * '''foomatic-filters-ppds''' - Enthält viele Treiber von [http://linuxprinting.org/ Linuxprinting.org]. * '''cupsys-driver-gutenprint''' - Enthält viele Treiber für sonstige Farb-Tintendrucker = Dienst steuern = Wie alle anderen Dienste liefert CUPS Start-/Stop-Skripte zum Kontrollieren des Webservers mit. {{{#!vorlage Befehl # Allgemein sudo /etc/init.d/cupsys {start|stop|restart|reload|force-reload} # Beispiel sudo /etc/init.d/cupsys restart }}} Mehr dazu im Wiki unter [:Dienste:]. = Einrichten = == Lokaler Drucker == Ein lokaler Drucker muss natürlich zuerst mit dem Rechner verbunden und angeschaltet werden. Danach kann man ihn zum System hinzufügen. Die Desktopumgebungen GNOME und KDE bringen eigene Konfigurationswerkzeuge zum Einrichten des Druckers mit. Daher sei von hier auf die entsprechenden Artikel [:GNOME_Druckerkonfiguration:GNOME Druckerkonfiguration] und [:KDE_Druckerkonfiguration:KDE Druckerkonfiguration] verwiesen. Dieser Artikel behandelt dagegen die Einrichtung eines Druckers über die CUPS-eigene Weboberfläche, was vor allem für reine Serversysteme ohne grafische Benutzeroberfläche interessant ist, und die Freigabe des Druckers im Netzwerk. == Netzwerkfunktionen == Direkt nach der Installation der Pakete ist CUPS nur auf Verbindungen vom selben Rechner ausgelegt. Um unproblematisch auf Netzwerkdruck umzustellen existieren zwei Skripte im Verzeichnis '''/usr/share/cups''', die einmalig vom Administrator mit Root-Rechten ausgeführt [3] werden müssen. So kann man die Freigabe der Drucker auch ohne eine GUI aktivieren. Das eine Skript, '''enable_browsing''', kann sowohl auf dem Server, als auch auf den Clients ausgeführt werden. (Sofern dort kein grafisches Werkzeug existiert, mit dem man diese Einstellung vornimmt.) Es bewirkt, dass CUPS seine freigegebenen Drucker im Netzwerk bekannt macht und auch selbstständig andere Drucker sucht. Wenn man auf dieses automatische Suchen und Finden verzichten möchte, kann man stattdessen auch direkt über die [http://de.wikipedia.org/wiki/Uniform_Resource_Locator URL] {de} auf den Drucker zugreifen. Das zweite Skript, '''enable_sharing''', bewirkt erst, dass der CUPS-Server überhaupt an anderen Schnittstellen als dem [http://de.wikipedia.org/wiki/Localhost Localhost] {de} , also dem eigenen Rechner, auf Verbindungen wartet. Dieses Skript muss auf einem Netzwerkdruckerserver auf jeden Fall ausgeführt werden, ist auf Clients aber nutzlos. {{{#!vorlage Befehl # Aktiviert die automatische Druckervermittlung: sudo /usr/share/cups/enable_browsing 1 # Gibt die lokalen Drucker im Netzwerk frei: sudo /usr/share/cups/enable_sharing 1 }}} Um die jeweilige Änderung wieder rückgängig zu machen, ersetzt man die ''1'' durch eine ''0''. {{{#!vorlage Warnung Unter Ubuntu 8.04 Hardy Heron gibt es diese beiden Skipte nicht mehr. Statt dessen gibt es als Ersatz, das Programm '''cupsctl''' zu nutzen. }}} Mit der Befehlszeile: {{{#!vorlage Befehl #Drucker im Netz freigegeben cupsctl --remote-printers --share-printers }}} wird der lokale Drucker im Netz freigegeben. Weitere Hinweise bei [http://wernerroth.de/index.php/2008/05/10/drucker-im-heimnetz-freigeben-ubuntu-804-hardy-heron/ Werner Roth Blog Archiv] {de} == Accounting == CUPS kann unter gewissen Voraussetzungen protokollieren welcher Benutzer wieviele Seiten gedruckt hat. Wichtig dafür ist, dass als Druckertreiber ''"Generic postscript color printer"'' genutzt wird. Nur so kann CUPS die in Druckaufträgen Anzahl von Seiten analysieren. Ein Accounting ist daher nur möglich, wenn der genutzter Drucker in der Lage ist mit [http://de.wikipedia.org/wiki/PostScript PostScript] {de} Daten umzugehen. Das Log wird in der Datei '''/var/log/cups/page_log''' im Stil von {{{HP4P otto 457 [26/Oct/2007:15:42:10 +0200] 1 1 - 192.168.0.70 HP4P otto 457 [26/Oct/2007:15:42:10 +0200] 2 1 - 192.168.0.70 HP4P anna 462 [26/Oct/2007:16:05:27 +0200] 1 1 - 192.168.0.70 HP4P anna 463 [26/Oct/2007:16:06:10 +0200] 1 1 - 192.168.0.70 }}} geführt. Die Auswertung kann beispielsweie mit [http://www.nongnu.org/printanalyze/index.htm PrintAnalyze] {en} oder [http://phpprintanalyze.sourceforge.net/ phpPrintAnalyzer] {en} geschehen. Dabei sollte man noch beachten, dass Logdateien überlicherweise [:Logdateien:rotiert], also automatisch aufgeräumt werden. Daher sollte man vermeiden, dass die '''page_log''' von logrotate rotiert wird. = Weboberfläche = [[Bild(./cups_webadmin.png, 300, right)]] CUPS besitzt einen integrierten Webserver auf Port 631, den man für das Einrichten bzw. das Verwalten der Drucker nutzen kann. Vom selben Rechner aus kann man also sehr einfach durch Eingabe der URL * [http://localhost:631 http://localhost:631] auf die Konfigurationsseite zugreifen. Nicht jeder Benutzer darf hier wichtige Aktionen durchführen. Möchte man z.B. einen Drucker hinzufügen, so erscheint eine Passwortabfrage. Hier kann man sich mit seinen Benutzeraccount und Passwort anmelden. Nur Mitgliedern der Gruppe ''lpadmin'' werden diese Aktionen gestattet. Dies ist automatisch der erste bei der Installation angelegte Benutzer. Weiteren Benutzern muss dieses Recht erst gegeben werden [4]. {{{#!vorlage Hinweis Unter Ubuntu Dapper Drake 6.06 muss der Benutzer ''cupsys'' noch in die Gruppe ''shadow'' aufgenommen werden. [4] Durch das Hinzufügen des Users ''cupsys'' zur Gruppe ''shadow'' wird dem Cups-Daemon (welcher als User ''cupsys'' läuft) gestattet auf die Datei '''/etc/shadow''' zuzugreifen, um eine Benutzerauthentifizierung durchführen zu können. Ist der User ''cupsys'' nicht in der Gruppe ''shadow'' kann er die Benutzerpasswörter der angelegten User nicht gegenprüfen, die Authentifizierung schlägt fehl und es kommt zu einer Fehlermeldung. Außerdem müssen in der cups-Konfigurations-Datei diese beiden Zeilen hinzugefügt werden: * ``# Administrator user group...``[[BR]] ``User cupsys``[[BR]] ``Group lpadmin`` Nachdem man die Gruppe berabeitet hat, muss man CUPS neu starten. Siehe "Dienst steuern". Ab Edgy wird das anders geregelt und dieser Schritt ist nicht mehr notwendig. }}} == Lokalen Drucker hinzufügen == Unter ''"Verwaltung"'' kann man Drucker zu CUPS hinzufügen. Der Zugriff auf die Verwaltungsseiten ist aber standardmäßig nur vom eigenen Rechner erlaubt. Wer seine Drucker von einem anderen Rechner aus über das Netzwerk administrieren will, muss zuerst erweiterte [#acl ACLs] setzen. Sollte der Drucker dann automatisch gefunden werden, so erscheint er hier und kann angewählt werden. Natürlich kann man auch mittels ''"Drucker hinzufügen"'' einen Drucker anbinden, der nicht automatisch erkannt wurde. Der Vorgang sollte danach halbwegs selbsterklärend sein. Eventuell sei noch anzumerken, dass die Druckerschnittstelle, die [http://de.wikipedia.org/wiki/Parallele_Schnittstelle parallele Schnittstelle] {de} , unter Linux als ''"LPT #X"'' bezeichnet wird. Das Hinzufügen eines Druckers erfolgt in fünf Schritten. Wurde der Drucker automatisch erkannt und direkt angewählt, werden die ersten Schritte übersprungen: * ''"Name/Ort/Beschreibung"'' - Der Name sollte keine Leer- oder Sonderzeichen beinhalten. * ''"Gerät"'' - Sollte meistens LPT#1, sein, denn USB-Drucker werden eigentlich immer automatisch erkannt. * ''"Marke/Hersteller"'' - Hier muss man den Hersteller des Druckers auswählen. Die Auswahl des Herstellers beeinflusst die Auswahl der Druckertreiber, die man im nächsten Schritt angezeigt bekommt. Manche Hersteller, deren Drucker nicht von Linux unterstützt werden, bieten eine sogenannte [http://de.wikipedia.org/wiki/Postscript_Printer_Description PPD]-Datei {de} für ihren Drucker an, die man alternativ hier angeben kann. * ''"Modell/Treiber"'' - Nun kann man den Druckertreiber auswählen. Oftmals gibt es für ein Modell mehrere Treiber, die man nutzen kann. Welcher Treiber die beste Druckqualität bzw. Leistung bringt, muss man evtl. durch ein paar Testausdrucke selber bestimmen. * ''"Abschluß"'' - Abschließend werden Grundsätzliche Konfigurationen zum Drucker wie z.B. das zu nutzende Papierformat abgefragt. Danach steht der Drucker zur Verfügung. Einen Testdruck kann man auf der Seite ''"Drucker"'' über die Schaltfäche ''"Testseite drucken"'' auslösen. == Netzwerkdrucker hinzufügen == Die Benutzung eines Netzwerkdruckers gestaltet sich ähnlich unproblematisch. Anstelle der Schnittstelle LPT#1 muss man nur das Protokoll angeben, über das man den entfernten Druckerserver ansprechen möchte. Danach muss man dann ebenfalls die notwendigen Daten angeben. {{{#!vorlage Hinweis Ist der lokale CUPS-Server so [#Netzwerk konfiguriert], dass er freigegebene Drucker im Netzwerk automatisch erkennt, so muss man Netzwerkdrucker üblicherweise nicht von Hand hinzufügen. Das manuelle Hinzufügen eines Netzwerkdruckers ist also nur nötig, wenn der Druckserver seine Drucker nicht automatisch verbreitet, oder der lokale Server Drucker nicht automatisch einbindet. }}} U.a. stehen die folgenden Protokolle zur Auswahl: * ''"Internet Printing Protocol (ipp)"'' - Andere CUPS-Server und auch einige modernere Netzwerkdrucker benutzen dieses Protokoll. Angegeben werden muss nur eine URL im Format ``ipp:///printers/`` und anschließend der Treiber. * ''"Windows Printer via SAMBA"'' - Drucker-Freigaben von Rechnern mit Windows. Auch hier muss wieder nur eine URL im Format ``smb:////`` angegeben werden. * ''"LPD/LPR Host or Printer"'' - Manche Netzwerkdrucker oder Router mit Druckerport verwenden noch dieses alte Unix-Druckprotokoll. Die URL lautet hier ``lpd:///``. Weitere Fragen zur Verwendung der Netzwerkprotokolle beantwortet der Artikel [:Printserver:] und die interne Hilfe von CUPS unter [http:// http://]:631/help/network.html. == Warteschlange bearbeiten == Unter ''"Aufträge"'' kann man den Status der Druckaufträge des CUPS-Servers einsehen, Aufträge verwalten, neu starten, löschen, usw. == Status überwachen/verändern == Auf der Seite ''"Drucker"'' findet man eine Übersicht aller im System installierten Drucker. Hier kann man sehen, was die Drucker gerade machen, ob sie Aufträge abarbeiten oder ob Fehler vorliegen. Des weiteren kann man alle wichtigen Aktionen bezüglich eines Druckers von hier aus starten, Testseiten ausdrucken, Drucker temporär deaktivieren, etc. [[Anker(Netzwerk)]] == Druckerserver im Netzwerk == CUPS ist wie in der Einleitung schon geschildert als Client/Server-System aufgebaut. Dadurch können Drucker im Netzwerk freigegeben werden und andere Rechner können diese Drucker nutzen. Die graphischen Desktopumgebungen [:GNOME_Druckerkonfiguration:GNOME] und [:KDE_Druckerkonfiguration:KDE] besitzen bereits Werkzeuge, um diese Funktionalität zu aktivieren. Besitzt man einen Server ohne GUI, so kann man dies jedoch auch anders erreichen. Auf der Seite ''"Verwaltung"'' findet man unter ''"Server"'' Optionen, um diese Funktionen zu aktivieren * ''"Zeige verteilte Drucker von anderen Systemen"'' - Bindet andere Netzwerkdrucker automatisch lokal ein, so dass diese Drucker am Rechner genutzt werden können, ohne dass man sie manuell hinzufügen muss. * ''"Verteile publizierte Drucker welche mit diesem System verbunden sind"'' - Gibt lokale Drucker im Netzwerk frei. Notwendig, wenn andere CUPS-Server im Netz die angeschlossenen Drucker automatisch erkennen sollen. * ''"Erlaube entfernte Verwaltung"'' - Hierdurch erlaubt man die Administration des CUPS-Servers über die Weboberfläche von anderen Rechnern, als dem ''"localhost"'' aus. {{{#!vorlage Hinweis Seit Gutsy Gibbon ist AppArmor installiert und mit einem restriktiven Profil für CUPS versehen. Dies verhindert einen Zugriff auf den Druckerserver. Für das Drucken über das Netzwerk ist es nötig das Profil zu entschärfen. Detaillierte Informationene findet man unter [:AppArmor:]. }}} Mit folgendem Befehl wird das Profil entschärft: {{{#!vorlage Befehl sudo aa-complain cupsd }}} [[Anker(acl)]] = Zugangskontrolle über ACLs = CUPS besitzt ein ausgeklügeltes System, wie man unter Einsatz von ''Access Control Lists (ACLs)'' festlegen kann, wer welche Rechte auf dem Server besitzt. Theoretisch kann man jedem einzelnen virtuellen Verzeichnis des CUPS-Servers unterschiedliche Rechte zuweisen, wobei der Zugriff für das eigentliche Drucken durch das Verzeichnis ''/printers/'' repräsentiert wird. Existiert für ein Verzeichnis keine ACL, erbt es die ACL des übergeordneten Verzeichnisses. In der Standardkonfiguration unter Ubuntu sind unterschiedliche Zugangsbeschränkungen für ''/admin/'' (die Verwaltungsseiten), ''/admin/conf/'' (der Speicherort der eigentlichen Konfigurationsdaten) und den ganzen Rest (''/'') vorgegeben. Im Allgemeinen kann man sich an diese sinnvolle Aufteilung halten. Die ACLs werden in der ebenfalls in der Konfigurationsdatei des CUPS-Dienstes '''/etc/cups/cupsd.conf''' gesetzt und sehen auf einer frischen CUPS-Installation so aus: {{{# Restrict access to the server... Order allow,deny Allow localhost Allow @LOCAL # Restrict access to the admin pages... Order allow,deny Allow localhost # Restrict access to configuration files... AuthType Basic Require user @SYSTEM Order allow,deny Allow localhost }}} Wie man sieht, steht jeder ACL-Satz in einem speziellen '''''' ... ''''''-Block. Ohne weitere Veränderungen bedeutet das, dass man aus dem gesamten lokalen Netz drucken, die Warteschlangen bearbeiten oder andere Dinge erledigen kann, die mit der bloßen Benutzung der Drucker zu tun haben. Der Zugriff auf die Verwaltungsseiten ist dagegen nur vom lokalen Rechner aus möglich, und um an der Konfiguration des Servers etwas zu verändern, muss man sich sogar authentifizieren und Mitglied der ''SystemGroup'' (lpadmin) sein, die durch ''@SYSTEM'' repräsentiert wird. Möchte man nun den Zugriff auf das System auch vom Netzwerk aus freigeben, so kann man dies beispielsweise durch hinzufügen der ACL ''"Allow @LOCAL"'' erreichen. Dadurch können alle Rechner im lokalen Netzwerk auf den entsprechenden CUPS-Dienst zugreifen. ''"@LOCAL"'' ist dabei bloß eine bequeme Abkürzung für denselben IP-Adressbereich in dem der CUPS-Server steht. Bei Bedarf kann man stattdessen auch reale IP-Bereiche nennen. Für jedes Verzeichnis können bei Bedarf unterschiedliche ACLs definiert werden. Um z.B. die Verwaltungsseiten von CUPS auch von anderen Rechnern des eigenen Netzwerks oder aus dem entfernten Netz 192.168.10.0/24 aus zu erreichen fügt man im passenden Abschnitt folgende ACLs ein. Auf dieselbe Art kann man auch im ''''-Bereich zusätzliche Netze eintragen, die den (oder die) Drucker benutzen dürfen. {{{# Restrict access to the admin pages... Order allow,deny Allow localhost Allow @LOCAL Allow 192.168.10.0/24 }}} Wer die Admin-Seiten des Servers nur bestimmten Benutzern zugänglich machen will, kann einfach die ''AuthType''- und ''Require''-Direktiven aus der ''/admin/conf''-Location in den ''/admin''-Bereich kopieren. Zu beachten ist allerdings, dass __alle__ Bestandteile der ACLs zur Anwendung kommen. Die Einschränkungen durch ''Allow''-Direktiven auf bestimmte Netzwerke kann man also auch durch Authentifizierung nicht umgehen. Es ist also nicht möglich, bspw. die Administration vom lokalen Host ohne und aus dem Netzwerk nur mit Authentifizierung zu erlauben. Weitere Informationen zu den CUPS- ACLs findet man in der sehr ausführlichen Online-Hilfe der CUPS-Weboberfläche und in der [:Shell/man:Man-Page] ``man cupsd.conf``. = SSL-Verschlüsselung = Da teilweise sensible Daten übertragen werden, z.B. Adminpasswörter, unterstützt der CUPS-Server Datenverschlüsselung nach dem [http://de.wikipedia.org/wiki/Transport_Layer_Security SSL-Standard] {de} . Diese lässt sich in den einzelnen ''Location''-Sektionen über die ''Encryption''-Direktive steuern: {{{ ... Encryption Never Encryption IfRequested Encryption Required }}} Man hat die Wahl zwischen * niemals verschlüsseln * nur wenn der Client es möchte verschlüsseln und * immer verschlüsseln. Bei einer Übertragung von Passwörtern wird aber standardmäßig __immer__ auf Verschlüsselung umgeschaltet. Das ist auch sehr sinnvoll, kann aber zu Überraschungen führen, wenn man das erste Mal auf so eine Seite zugreift. Das SSL-Zertifikat wird nämlich erst dann erstellt, wenn es das erste Mal gebraucht wird, was zumindest auf älterer Hardware schon eine Zeitlang in Anspruch nimmt in der es scheint als hätte der Server sich aufgehängt. {{{#!vorlage Warnung Leider ist das Webfrontend in Dapper kaputt und hängt sich beim Versuch, ein Zertifikat zu erzeugen wirklich auf. Die Lösung ist, den Server anderweitig mit einem gültigen Serverzertifikat zu versorgen. Z.B. indem man das Paket '''ssl-cert''' installiert, und dann das erzeugte Dummy-Zertifikat für CUPS verwendbar macht: * ``ln -s /etc/ssl/certs/ssl-cert-snakeoil.pem /etc/cups/ssl/server.crt``[[BR]] ``ln -s /etc/ssl/private/ssl-cert-snakeoil.key /etc/cups/ssl/server.key``[[BR]] ``adduser cupsys ssl-cert``[[BR]] ``/etc/init.d/cupsys restart`` Dann sollte es funktionieren. ---- Alternativ kann man auch in der Datei '''/etc/cups/cupsd.conf''' einen Eintrag setzen, welcher die Verschlüsselung nur aktiviert, wenn diese auch benötigt wird: * ``DefaultEncryption IfRequested`` Damit funktioniert das Einrichten eines Druckers über das Webfrontend auch ohne SSL-Verschlüsselung. Selbstverständlich sollte man diese Möglichkeit nur wählen, wenn das Netzwerk wirklich absolut vertrauenswürdig ist. Meistens wird die erste Lösung die bessere sein. }}} = Als Client an einem Druckerserver = == Als reiner Client == Voraussetzung ist ein Rechner, der netzwerkweit einen Drucker und den Spooler zur Verfügung stellt. Dann reicht es, dass die Clienten direkt auf den vom Server bereitgestellten Drucker zugreifen können. Dazu sind auf den Clients nur diese Pakete nötig: * '''cupsys-client''' * '''cupsys-bsd''' In der Datei '''/etc/cups/client.conf''', welche man zuvor von Hand erstellen muss wenn sie nicht bereits existiert, ist der Hostname des Druckerservers einzutragen: {{{ServerName Drucker-Server }}} == Polling == Beim sogenannten Polling holt der CUPS-Server auf dem Client die Konfigurationen der Drucker vom CUPS-Server des Drucker-Servers. Dazu ist beim Client in der Datei '''/etc/cups/cupsd.conf''' das Polling zu aktivieren, indem man entweder die IP-Adresse oder den Hostnamen des Drucker-Servers angibt: {{{BrowsePoll epia.ruby-team.home }}} = Links = * [http://www.cups.org Projektseite von CUPS] {en} * [http://www.danka.de/printpro/faq.html CUPS-FAQ - 99 häufig gestellte Fragen] {de} * [http://openprinting.org/printer_list.cgi Umfangreiche Kompatibilitätsliste für Drucker unter Linux] {en} ---- # tag: System, Netzwerk, netzwerk, server, drucker