ubuntuusers.de

Du betrachtest eine alte Revision dieser Wikiseite.

CUPS

Fehlendes Makro

Das Makro „Getestet“ konnte nicht gefunden werden.

 * [1]: [:Pakete installieren: Installation von Programmen]
 * [2]: [:Editor: Einen Editor öffnen]
 * [3]: [:Terminal: Ein Terminal öffnen]
 * [4]: [:Benutzer und Gruppen: Benutzer und Gruppen verwalten]

./cups_logo.png

CUPS 🇬🇧 , 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 Internet Printing Protokoll 🇩🇪 , das CUPS zugrunde liegt, drucken. Mehr über die Anbindung von Windows-Rechnern erklärt der Artikel ["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 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.

# 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"] und ["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 URL 🇩🇪 auf den Drucker zugreifen.

Das zweite Skript, enable_sharing, bewirkt erst, dass der CUPS-Server überhaupt an anderen Schnittstellen als dem Localhost 🇩🇪 , also dem eigenen Rechner, auf Verbindungen wartet. Dieses Skript muss auf einem Netzwerkdruckerserver auf jeden Fall ausgeführt werden, ist auf Clients aber nutzlos.

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

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:

#Drucker im Netz freigegeben
cupsctl --remote-printers --share-printers

wird der lokale Drucker im Netz freigegeben. Weitere Hinweise bei Werner Roth Blog Archiv 🇩🇪

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 PostScript 🇩🇪 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 PrintAnalyze 🇬🇧 oder phpPrintAnalyzer 🇬🇧 geschehen. Dabei sollte man noch beachten, dass Logdateien überlicherweise rotiert, also automatisch aufgeräumt werden. Daher sollte man vermeiden, dass die page_log von logrotate rotiert wird.

Weboberfläche

./cups_webadmin.png

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

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 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 parallele Schnittstelle 🇩🇪 , 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 PPD-Datei 🇩🇪 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.

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://<servername.oder.ip>/printers/<druckername> 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://<arbeitsgruppe bzw. domäne>/<servername>/<druckername> angegeben werden.

  • "LPD/LPR Host or Printer" - Manche Netzwerkdrucker oder Router mit Druckerport verwenden noch dieses alte Unix-Druckprotokoll. Die URL lautet hier lpd://<servername>/<warteschlange>.

Weitere Fragen zur Verwendung der Netzwerkprotokolle beantwortet der Artikel ["Printserver"] und die interne Hilfe von CUPS unter http://<servername>: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.

⚓︎

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

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:

sudo aa-complain cupsd

⚓︎

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...
<Location />
  Order allow,deny
  Allow localhost
  Allow @LOCAL
</Location>
# Restrict access to the admin pages...
<Location /admin>
  Order allow,deny
  Allow localhost
</Location>
# Restrict access to configuration files...
<Location /admin/conf>
  AuthType Basic
  Require user @SYSTEM
  Order allow,deny
  Allow localhost
</Location>

Wie man sieht, steht jeder ACL-Satz in einem speziellen <Location dirname> ... </Location>-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 <Location />-Bereich zusätzliche Netze eintragen, die den (oder die) Drucker benutzen dürfen.

# Restrict access to the admin pages...
<Location /admin>
  Order allow,deny
  Allow localhost
  Allow @LOCAL
  Allow 192.168.10.0/24
</Location>

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 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 SSL-Standard 🇩🇪 . Diese lässt sich in den einzelnen Location-Sektionen über die Encryption-Direktive steuern:

<Location /path>
  ...
  Encryption Never
  Encryption IfRequested
  Encryption Required
</Location>

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.

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


  • ["Kategorie/System"]

  • ["Kategorie/Netzwerk"]

Fehlendes Makro

Das Makro „Tags“ konnte nicht gefunden werden.

Diese Revision wurde am 14. Juni 2008 16:39 von march erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Drucker, Netzwerk, Server, System