CUPS
Einführung
Als zentraler Druckdienst ist CUPS auf dem Caipirinha-Server eingerichtet. Am Server selbst hängen zwei Drucker:
- EPSON Stylus C84 (Farbdrucker DIN A4)
- HP DeskJet 9800 (Farbdrucker DIN A3)
Diese Drucker stehen sowohl für lokale Benutzer (auf dem Caipirinha-Server selbst) als auch für entfernte Benutzer zur Verfügung, und zwar sowohl für Benutzer aus dem eigenen Subnetz als auch für Benutzer aus dem Internet. Letzteres erfordert aber, dass am DSL-Router der Port 631 (IPP) auf den Caipirinha-Server durchgeschaltet wird.
Um CUPS benutzen zu können, müssen folgende Pakete installiert werden:
- cups
- cups-client
- cups-drivers
- cups-libs
- cups-libs-32bit
- gutenprint
Konfigurationsdatei
Danach muss die Konfigurationsdatei /etc/cups/cupsd.conf konfiguriert werden, so dass sie so aussieht:
# CUPS-Konfiguration # # 31.07.2010, Gabriel Rüeck # AutoPurgeJobs Yes Browsing Off DefaultAuthType BasicDigest DefaultCharset utf-8 DefaultEncryption IfRequested DefaultLanguage de ErrorPolicy retry-job JobRetryInterval 300 JobRetryLimit 864 Port 631 Listen /var/run/cups/cups.sock LogLevel warn MaxLogSize 10485760 PreserveJobFiles Yes ServerAdmin administrator@caipirinha.homelinux.org ServerCertificate /etc/apache2/ssl.crt/server.crt ServerKey /etc/apache2/ssl.key/server.key ServerTokens Minimal # Restrict access to the server... <Location /> Allow from all </Location> <Location /jobs> AuthType BasicDigest Require valid-user Allow from all </Location> <Location /printers> Allow from all </Location> <Location /printers/EPSON_Stylus_C84> Order Deny,Allow Deny from all Allow from @LOCAL Allow from 88.84.145.229 </Location> <Location /printers/EPSON_Stylus_C84_extern> AuthType BasicDigest Require valid-user Order Allow,Deny Allow from all Deny from localhost Deny from 88.84.145.229 </Location> <Location /printers/HP_Deskjet_9800> Order Deny,Allow Deny from all Allow from @LOCAL Allow from 88.84.145.229 </Location> <Location /printers/HP_Deskjet_9800_extern> AuthType BasicDigest Require valid-user Order Allow,Deny Allow from all Deny from localhost Deny from 88.84.145.229 </Location> <Location /admin> AuthType BasicDigest Require user root Encryption Required Allow from all </Location>
Einige Einstellungen sollen näher erläutert werden:
- DefaultAuthType legt den Typ der Authentifizierungsmethode fest. Die sicherste Methode wäre, ausschließlich auf Digest zu setzen, aber damit hatten bei mir verschiedene Drucker-Clients nicht funktioniert. Deswegen habe ich hier BasicDigest eingestellt.
- DefaultEncryption ist hier auf IfRequested eingestellt. Damit lässt man auch unverschlüsselte Verbindungen zu. Das ist unschön, aber leider unterstützt gerade der CUPS-client noch immer keine verschlüsselten Verbindungen auf entfernte CUPS-Server. Da ich auch Druck-Jobs von entfernten Linux-Maschinen annehme, konnte ich hier nicht die sichere Einstellung Required nehmen.
- Die Einstellungen für ErrorPolicy, JobRetryInterval und JobRetryLimit legen fest, dass bei Problemen mit dem Drucker alle 300s versucht wird, den Druck-Job erneut zum Drucker zu schicken, und das insgesamt 864-mal, also genau 3 Tage lang.
- LogLevel ist eine nützliche Option, wenn es beim Einrichten oder im späteren Betrieb zu Problemen kommt. Der hier eingestellte Modus warn hält die Log-Datei auf einer moderaten Größe, bietet aber bereits mehr Information als der Modus error. Die Modi info und debug können bei einer gezielten Fehlersuche nützlich sein, lassen allerdings die Log-Datei auch schnell anwachsen.
- PreserveJobFiles Yes ermöglicht es, einmal gedruckte Dokumente erneut auf den Drucker zu schicken. So kann man einen Druck-Job nochmals starten, wenn sich beim entfernten Drucken das Papier im Drucker verheddert und der Ausdruck Müll geworden ist. Druckt man aber geheime Dokumente, ist dies allerdings ein Sicherheitsrisiko, und mann sollte diese Option deaktivieren.
- Als alleiniger Port wird Port 631 benutzt, und zwar sowohl für die verschlüsselte als auch für die nicht verschlüsselte Kommunikation.
- Als Server-Zertifikat und ServerKey für den SSL-Betrieb verweisen wir auf die jeweiligen Apache-Dateien, damit nicht unnötigerweise mehrere SSL-Zertifikate für verschiedene Applikationen erstellt werden müssen.
Am Ende der Konfigurationsdatei befinden sich dann die Einstellungen, welche spezifisch für einzelne Verzeichnisse und für die installierten Drucker gelten. Es ist auffällig, dass jeder Drucker zweimal aufgelistet ist. Ursprünglich war meine Idee hier einmal, dass Benutzer auf dem Caipirinha-Server die Variante mit lokaler Filterung (also Verarbeitung und Rasterung) benutzen, während alle anderen Benutzer, und zwar sowohl die Benutzer aus dem LAN als auch diejenigen aus dem Internet die Variante ohne lokale Filterung benutzen sollten. Dafür müssen natürlich alle fremde Benutzer den entsprechenden Druckertreiber für die beiden eingesetzten Drucker installiert haben, was dann eben auch zahlreiche Einstellmöglichkeiten beim Ausdruck bietet. Die Varianten ohne Filterung verlangen auch eine Authentifizierung, so dass nicht einfach jeder aus dem Internet einen Druck-Job auf meine Drucker schicken kann. Leider ergaben sich dabei einige Probleme, und zwar:
- Windows XP konnte über Port 631 auf den Caipirinha-Server drucken und dabei eine gültige Authentifizierung durchführen. Windows Vista und Windows 7 schaffen dies leider nicht mehr. Aus unerfindlichen Gründen hat Microsoft das Protokoll geändert. Deswegen musste ich die Varianten ohne Authentifizierung, und das sind eben die mit lokaler Filterung, für Benutzer im LAN freigeben.
Auf einer meiner Maschinen ([rueeck.name]) ist lediglich ein CUPS-Client installiert, der keine lokale Filterung vornehmen kann. Deswegen muss diese Maschine auf die Varianten mit der lokalen Filterung zugreifen.
Diese komplexen Regeln werden nun von den Allow– und Deny-Einträgen in den verschiedenen Varienten umgesetzt. Dabei kommt auch die statische IP-Adresse von [rueeck.name], 88.84.145.229, zum Tragen.
Bei den Verzeichnis-spezifischen Einstellungen ist noch zu beachten:
- Das Verzeichnis http(s)://caipirinha.homelinux.org:631/ ist aus CUPS-Sicht das root-Verzeichnis. Auf dieses Verzeichnis darf jeder zugreifen. Die Rechte dafür sind im Abschnitt mit <Location /> eingestellt.
- Die installierten Drucker bzw. deren Betriebsbereitschaft (Abschnitt <Location /printers>) kann in der aktuellen Konfiguration ebenfalls von jedem eingesehen werden.
- Die Administration der Drucker (Abschnitt <Location /admin>) darf nur von einem Benutzer root gemacht werden. Allerdings handelt es sich hierbei nicht um den Systemverwalter root, sondern um einen speziellen CUPS-Administrator (siehe Abschnitt CUPS#Administrator.
- Windows-Clients können über http oder https drucken; als Pfad muss man dann einen der folgenden Einträge nehmen:
Drucker-Definitionen
Mit CUPS eingerichtete Drucker finden sich in der Datei /etc/cups/printers.conf wieder, so wie hier:
# Printer configuration file for CUPS v1.3.11 # Written by cupsd on 2010-07-28 09:37 <DefaultPrinter EPSON_Stylus_C84> Info Farbdrucker DIN A4 Location Ostpreußendamm 18 b, 12207 Berlin DeviceURI usb://EPSON/Stylus%20C84 State Idle StateTime 1280302648 Accepting Yes Shared Yes JobSheets none none QuotaPeriod 0 PageLimit 0 KLimit 0 OpPolicy default ErrorPolicy retry-job </Printer> <Printer EPSON_Stylus_C84_extern> Info Farbdrucker DIN A4 (ohne Filterung) Location Ostpreußendamm 18b, 12207 Berlin DeviceURI usb://EPSON/Stylus%20C84 State Idle StateTime 1280302648 Accepting Yes Shared Yes JobSheets none none QuotaPeriod 0 PageLimit 0 KLimit 0 OpPolicy default ErrorPolicy retry-job </Printer> <Printer HP_Deskjet_9800> Info Farbdrucker DIN A3 Location Ostpreußendamm 18b, 12207 Berlin DeviceURI usb://HP/Deskjet%209800?serial=MY593110Y9046K State Idle StateTime 1279120090 Accepting Yes Shared Yes JobSheets none none QuotaPeriod 0 PageLimit 0 KLimit 0 OpPolicy default ErrorPolicy retry-job </Printer> <Printer HP_Deskjet_9800_extern> Info Farbdrucker DIN A3 (ohne Filterung) Location Ostpreußendamm 18b, 12207 Berlin DeviceURI usb://HP/Deskjet%209800?serial=MY593110Y9046K State Idle StateTime 1280005739 Accepting Yes Shared Yes JobSheets none none QuotaPeriod 0 PageLimit 0 KLimit 0 OpPolicy default ErrorPolicy retry-job </Printer>
Wichtig ist, dass bei ErrorPolicy der Wert retry-job eingetragen wird. Ansonsten wird die jeweilige Drucker-Warteschlange deaktiviert, wenn ein Benutzer einen Druckauftrag schickt und der Drucker ausgeschaltet ist. Mit dem Wert retry-job versucht CUPS aber periodisch immer wieder einen Ausdruck und der Druckauftrag bleibt so lange in der Drucker-Warteschlange, bis der Drucker eingeschaltet wird und der Ausdruck komplett durchgelaufen ist oder bis die Anzahl der in /etc/cups/cupsd.conf festgelegten Versuche erreicht worden ist.
Ausdrucke aus der Shell und aus Skripten
Damit auch Ausdrucke aus einer Shell heraus gelingen, ist es noch notwendig, in /etc/cups/lpoptions einige Einstellungen zu definieren. Die für den Caipirinha-Server gültige Datei sieht so aus:
Default EPSON_Stylus_C84 cpi=12 lpi=6 page-border=none page-bottom=30 page-left=60 page-right=25 page-top=25 Dest HP_Deskjet_9800 media=A3 cpi=16 lpi=8 pageSize=A3 page-border=none page-bottom=40 page-left=40 page-right=40 page-top=40
Darin befinden sich für beide Drucker Einstellungen bezüglich der:
- Druckdichte (cpi)
- Zeilendichte (lpi)
- Seitengröße (media)
- Seitenränder (page-bottom, page-left, page-right, page-top)
- Umrandung (page-border)
Man kann dazu entweder nach dem Einrichten der Drucker die Datei /etc/cups/lpoptions mit einem Texteditor bearbeiten oder die jeweiligen Optionen mit dem Befehl lpoptions eintragen lassen (siehe man lpoptions
).
Die entsprechenden Werte für die Seitenränder muss man allerdings durch
Herumexperimentieren heraus finden, was durchaus einige Ausdrucke
kosten kann.
Administrator
Schließlich muss man noch Benutzer anlegen, welche Zugriffsrechte für die eingeschränkten CUPS-Verzeichnisse haben. Dies macht man mit dem Befehl:
lppasswd -a Benutzername
Die damit angelegten Benutzer und ihre Passworte befinden sich in der Datei /etc/cups/passwd.md5 mit den Zugriffsrechten:
-rw------- 1 lp lp 85 Nov 7 2008 passwd.md5
In dieser Datei finden sich beim Caipirinha-Server der Benutzer Gabriel und der Benutzer root, wobei beide Benutzer nicht mit Systembenutzern verwechselt werden dürfen. Den Benutzer Gabriel und sein Passwort habe ich an alle Maschinen und Benutzer verteilt, die auch auf dem Caipirinha-Server drucken können sollen. Der Benutzer root und sein Passwort wird ausschließlich für die Administration des CUPS-Dienstes benutzt, könnte aber auch zum Zugriff auf die Drucker benutzt werden.
Ausdruck im RAW-Modus
Um im RAW-Modus (ungefiltert) auf die sonst der Filterung unterliegenden Varianten EPSON_Stylus_C84 und HP_Deskjet_9800 ausdrucken zu können, müssen noch Anpassungen in den Dateien /etc/cups/mime.types und /etc/cups/mime.convs vorgenommen werden. In der Datei /etc/cups/mime.types muss im Abschnitt Raw print file support… in der Zeile
#application/octet-stream
das Kommentarzeichen #
entfernt werden. In der Datei /etc/cups/mime.convs muss im Abschnitt Raw filter… in der Zeile
#application/octet-stream application/vnd.cups-raw 0 -
das Kommentarzeichen #
entfernt werden.
Nun startet man CUPS mit /etc/init.d/cups start
und kontrolliert gleich die beiden Log-Dateien:
- /var/log/cups/error_log
- /var/log/cups/access_log
Im Regelfall sollte jetzt alles funktionieren.
Weitere Konfigurationen
Konfiguration auf caipiroska.homelinux.org
Der Caipiroska-Server ist ein Linux-Server, der fast identisch zum Caipirinha-Server konfiguriert ist. Er ist allerdings bei einem Freund untergebracht. Deswegen sind dort ein lokal vorhandener HP-Drucker (HP_Deskjet_6800) und die beiden bei mir zu Hause stehenden Drucker-Varianten EPSON_Stylus_C84_extern und HP_Deskjet_9800_extern eingerichtet. Der CUPS-Dienst dort ist nicht vom Internet aus zu erreichen; deshalb kann die Konfiguration etwas offener als beim Caipirinha-Server sein. Sie ist aber im Wesentlichen ähnlich aufgebaut, und das oben Beschriebene gilt auch hier für /etc/cups/cupsd.conf:
# CUPS-Konfiguration # # 31.07.2010, Gabriel Rüeck # AutoPurgeJobs Yes Browsing Off DefaultAuthType BasicDigest DefaultCharset utf-8 DefaultEncryption IfRequested DefaultLanguage de ErrorPolicy retry-job JobRetryInterval 300 JobRetryLimit 864 Port 631 Listen /var/run/cups/cups.sock LogLevel warn MaxLogSize 10485760 PreserveJobFiles Yes ServerAdmin administrator@caipiroska.homelinux.org ServerCertificate /etc/apache2/ssl.crt/server.crt ServerKey /etc/apache2/ssl.key/server.key ServerTokens Minimal # Restrict access to the server... <Location /> Allow from all </Location> <Location /jobs> AuthType BasicDigest Require valid-user Allow from all </Location> <Location /printers> Allow from all </Location> <Location /admin> AuthType BasicDigest Require user root# Encryption Required Allow from all </Location>
In der Datei /etc/cups/printers.conf sind dann alle 3 Drucker aufgelistet:
# Printer configuration file for CUPS v1.3.11 # Written by cupsd on 2010-08-01 12:40 <DefaultPrinter HP_Deskjet_6800> Info LAN-Drucker Location geheime_Location DeviceURI socket://192.168.2.10:9100 State Idle StateTime 1280581453 Accepting Yes Shared Yes JobSheets none none QuotaPeriod 0 PageLimit 0 KLimit 0 OpPolicy default ErrorPolicy retry-job </Printer> <Printer EPSON_Stylus_C84> Info Farbdrucker DIN A4 Location Ostpreussendamm 18b, 12207 Berlin DeviceURI ipp://Gabriel:geheimes_Passwort@caipirinha.homelinux.org:631/printers/EPSON_Stylus_C84_extern State Idle StateTime 1280659172 Accepting Yes Shared Yes JobSheets none none QuotaPeriod 0 PageLimit 0 KLimit 0 OpPolicy default ErrorPolicy retry-job </Printer> <Printer HP_Deskjet_9800> Info Farbdrucker DIN A3 Location Ostpreussendamm 18b, 12207 Berlin DeviceURI ipp://Gabriel:geheimes_Passwort@caipirinha.homelinux.org:631/printers/HP_Deskjet_9800_extern State Idle StateTime 1280581991 Accepting Yes Shared Yes JobSheets none none QuotaPeriod 0 PageLimit 0 KLimit 0 OpPolicy default ErrorPolicy retry-job </Printer>
Hier gibt es nun die Besonderheit, dass bei den DeviceURIs der entfernten Drucker der für die Authentifizierung erforderliche Benutzername und das dazu gehörende Passwort im Klarnamen angegeben sind. Dabei muss natürlich geheimes_Passwort durch das tatsächliche Passwort ersetzt werden. Die Angabe im Klartext zeigt einmal mehr, dass man aus Sicherheitsgründen keinesfalls die Passwörter der System-Logins benutzen sollte.
Gleichermaßen ist geheime_Location bei der Druckerdefinition des HP_Deskjet_6800 natürlich durch den tatsächlichen bei der Druckerdefinition angegebenen Ort zu ersetzen.
Konfiguration auf rueeck.name
Auf der Maschine rueeck.name (statische IP-Adresse: 88.84.145.229) ist kein CUPS-Server installiert, sondern nur die für den Client-Betrieb erforderlichen Pakete:
- cups-client
- cups-libs
- cups-libs-32bit
Deswegen gibt es auch keine Konfigurationsdatei für den CUPS-Server, sondern nur eine für den CUPS-Client, nämlich /etc/cups/client.conf. In dieser Datei sind lediglich zwei wichtige Einträge enthalten:
... ServerName caipirinha.homelinux.org
Mit dem Parameter ServerName wird die Maschine caipirinha.homelinux.org als alleiniges Ziel sämtlicher Druckaufträge festgelegt. Mit dem Kommando lpstat -a
kann man sich nun die Stati aller verfügbaren Drucker anschauen. Hier sieht man dann folgende Liste:
EPSON_Stylus_C84 accepting requests since Wed Jul 28 09:37:28 2010 EPSON_Stylus_C84_extern accepting requests since Wed Jul 28 09:37:28 2010 HP_Deskjet_9800 accepting requests since Wed Jul 14 17:08:10 2010 HP_Deskjet_9800_extern accepting requests since Sat Jul 24 23:08:59 2010
Die 4 aufgelisteten Drucker täuschen allerdings darüber hinweg, dass man von der Maschine rueeck.name tatsächlich nur auf zwei Drucker, nämlich auf EPSON_Stylus_C84 und HP_Deskjet_9800, zugreifen kann. So wurden nämlich die Zugriffsrechte für die IP-Adresse 88.84.145.229 in /etc/cups/cupsd.conf auf dem Caipirinha-Server festgelegt. Dies macht auch Sinn, denn wir müssen die Filterung ja auf dem Caipirinha-Server durchführen. Mit der auf dem Caipirinha-Server eingesetzten Konfiguration bedeutet dies aber auch, dass der Druck-Job von rueeck.name ohne Autentifizierung und ohne Verschlüsselung durchs Internet geschickt wird. Ausdrucken sollte man daher nur solche Dokument, die unverfänglich sind und keine Passwörter enthalten.
Weiterführende Dokumentation zu diesem Thema findet sich auf [1] und auf [2].
Posted on: 2010-08-10Gabriel Rüeck