Home Wiki > SDB:Drucker-CUPS-Schnellkonfiguration
Sign up | Login

SDB:Drucker-CUPS-Schnellkonfiguration

tagline: Aus openSUSE

Dieser Artikel richtet sich an erfahrene Linux-Benutzer. Es gibt hier keine ausführlichen Erklärungen. Alle wichtigen Punkte zu CUPS werden kurz und bündig dargestellt.
Getestet mit openSUSE Empfohlene Artikel Verwandte Artikel
Icon-checked.png

Icon-manual.png Icon-help.png

Inhaltsverzeichnis

Überblick über das CUPS Drucksystem

Die Seite Druckkonzepte erklärt die Grundlagen über das Drucken. Ein genereller Überblick findet sich in folgendem Text der CUPS Dokumentation: "Common UNIX Printing System", die Sie über die CUPS Online-Hilfe auf Ihrem PC erreichen. Sie sehen die Dokumentation Ihrer aktuell verwendeten CUPS-Version auf Projektseite CUPS-Dokumentation, die momentan CUPS 1.4 ist.

Ablauf wie ein Druckjob verarbeitet wird

Dieser Schritt passiert sowohl auf Client- als auch auf Server-Systemen. Ein Client ist ein Rechner, auf dem nur dieser Schritt passiert. Auf einem Client-Rechner ist keine Warteschlange angelegt.

(I) Einen Druckauftrag erzeugen

Ein Kommandozeilentool oder ein Anwendungsprogramm erzeugt einen Druckauftrag und übergeben die Druckdaten an den Spooler.

Ein Druckauftrag besteht aus Informationen für den Spooler und den zu druckenden Daten (siehe PostScript und Druckkonzepte) und optionalen Informationen für den Filter.

Beispielsweise bei einem Kommandozeilentool:

lp -d queue -t title -o option1=value1 -o option2=value2 file1 file2
  • "queue" und "title" sind Informationen für den Spooler.
  • "option1=value1" und "option2=value2" sind Informationen für den Filter.
  • "file1" und "file2" sind die zu druckenden Daten.

Die folgenden Schritte passieren nur auf einem CUPS Server. Ein Rechner, auf dem die folgenden Schritte passieren, ist ein Server. Ein Rechner, auf dem eine Warteschlange angelegt ist, ist ein Server.

Spooler (der cupsd):

(II) Speichern des Druckjobs im Spool-Verzeichnis

  • Speichern der Information für den Spooler und den Filter in /var/spool/cups/cjob-number
  • Speichern der Daten aus den zu druckenden Dateien in /var/spool/cups/djob-number-file-number

(III) Filtern der zu druckenden Daten und die druckerspezifischen Daten an den Drucker senden

  • Starten des Filtersystems:
    • Bestimmen, welche Filter benötigt werden, um die druckerspezifischen Daten zu erzeugen und Aufbau der sog. "Filterkette" bzw. "Filter-Pipe".
    • Starten der Programme der Filterkette mit passend gesetzten Parametern.
  • Starten des "Backends", um die druckerspezifischen Daten von der Filter-Pipe an den Drucker weiterzuleiten.

(IV) Beenden des Druckjobs

  • Warten, bis das Backend fertig ist.
  • Löschen der betreffenden Dateien aus dem Spool-Verzeichnis.

Der Spooler

Was der Spooler macht:

Der Hauptzweck des Spooler-Systems ist, Daten vom Sender zum Empfänger zu bewegen.

  1. Daten entgegennehmen (aber nur von zulässigen Sendern).
  2. Daten zwischenspeichern (bis der Empfänger bereit ist, sie entgegen zu nehmen).
  3. Daten an zulässige Empfänger senden (und ggf. vorher passende Filter zwischen schalten).
  4. Bereitstellen und Bereithalten von Informationen, was mit den Daten passiert ist (z.B. für "lpstat -W completed -o").

Details:

/usr/sbin/cupsd

  • Der cupsd ist der Server für das IPP Protokoll.
  • Das IPP Protokoll kann als Erweiterung das HTTP Protokolls angesehen werden. Details zum IPP Protokoll finden sich in RFC-2910 und RFC-2911.
  • Der cupsd lauscht am TCP Port 631 auf IPP Aufträge wie z.B. lp -d queue file oder lpstat -t.
  • Der cupsd lauscht am TCP Port 631 auf HTTP Aufträge wie z.B. http://localhost:631/printers/
  • Der cupsd verwendet UDP Port 631 um sog. "CUPS Browsing" Informationen zu senden und zu empfangen. Man kann z.B.
netcat -u -l -p 631


verwenden, um solche Informationen aufzuschnappen (sofern UDP Port 631 noch nicht vom cupsd belegt ist).

  • Konfigurationsdatei für den cupsd: /etc/cups/cupsd.conf

/usr/lib/cups/daemon/cups-lpd

  • Der cups-lpd ist der Server für das LPD Protokoll (RFC 1179).
  • Der cups-lpd nimmt Druckjobs an, die via LPD Protokoll am TCP Port 515 eintreffen.
  • Entweder der xinetd oder der inetd wird als "Wrapper" für den cups-lpd verwendet.
  • Konfigurationsdateien:
    • Entweder /etc/xinetd.d/cups-lpd
    • oder in /etc/inetd.conf die cups-lpd Zeile.

Dokumentation:

PPD Dateien

Was ist eine PPD Datei und wie funktioniert sie:

Unter Druckkonzepte finden Sie druckerspezifische Optionen für PPD-Dateien. Für PostScript-Drucker enthält die PPD-Datei die druckerspezifischen Optionen (und nur die druckerspezifischen Optionen) zusammen mit den zugehörigen PostScript Code Schnipseln, die an den PostScript Interpreter gesendet werden müssen, um eine bestimmte Option zu aktivieren.

Für nicht-PostScript-Drucker enthält die PPD-Datei zusätzliche Informationen darüber, welches Drucker-Treiber-Programm verwendet werden muss und welche Optionen für die besonderen Treiber zur Verfügung stehen. Abhängig davon, welche druckerspezifischen Optionen für einen bestimmten Druckjob gesetzt wurden (z.B. "-o PageSize=A4"), liest das Filter-System die passenden PostScript Code Schnipsel (die sog. "PostScript Invocation Values") aus der PPD Datei und setzt sie in den PostScript Datenstrom ein.

Die Syntax für einen Optionseintrag in der PPD Datei mit zwei Beispieleinträgen ist:

* main keyword option keyword / translation string : " PostScript invocation value "
*PageSize Letter/letter paper: "<</PageSize[612 792]/ImagingBBox null>>setpagedevice"
*PageSize A4/A4 paper: "<</PageSize[595 842]/ImagingBBox null>>setpagedevice"

Genaue Informationen finden sich in der "Adobe PostScript Printer Description File Format Specification, Version 4.3".

Details:

/etc/cups/ppd/

  • Dieses Verzeichnis enthält die PPD Dateien, die cupsd tatsächlich verwendet.
  • Die Einträge (insbesondere die "*Default..." Einträge) in einer PPD Datei in /etc/cups/ppd/ können von den Einträgen in der ursprünglichen PPD Datei, die beim Anlegen der Warteschlange angegeben wurde, abweichen.

/usr/share/cups/model/

  • Dieses Verzeichnis enthält die originalen PPD Dateien, die zum Einrichten der Druckwarteschlange benötigt werden. Sehen Sie sich die Drucker-Treiber-Software-Pakete für openSUSE unter Druckkonzepte an, welche Pakete welche PPD-Datei unterstützen.
  • Zusätzliche PPD Dateien (z.B. PPD Dateien von Druckerherstellern) können in dieses Verzeichnis kopiert werden, um sie für die Druckerkonfigurationstools verfügbar zu machen.

Die OpenPrinting/LinuxPrinting.org Druckerdatenbank

Der Filter (enthält den Treiber)

Was macht das Filter-System und wie arbeitet es:

Der Hauptzweck des Filtersystems ist, die ursprünglichen Daten des Druckjobs (ASCII, PostScript, PDF) in druckerspezifische Daten (PostScript, PCL, ESC/P) umzuwandeln.

Gewöhnlich ist der letzte Schritt ein Programm, welches der Druckertreiber ist, der die endgültigen druckerspezifischen Daten ausgibt. Sehen Sie sich auf der Seite Druckkonzepte den Abschnitt "Drucker-Treiber machen, dass der Drucker druckt" an.

Normalerweise erfolgt die Filterung in folgenden Schritten:

1) Umwandlung der Originaldaten zu PostScript.

1a) Bestimmung des MIME-Typs der ursprünglichen Daten:

Das erfolgt gemäß /usr/share/cups/mime/mime.types oder /etc/cups/mime.types.

1b) Umwandlung in PostScript (wenn es noch nicht PoastScript ist):

Wenn der MIME-Typ der Originaldaten noch nicht "Anwendung/PostScript" ist, dann erfolgt die Umwandlung gemäß /usr/share/cups/mime/mime.convs oder /etc/cups/mime.convs in PostScript. Speziell die Originaldaten des MIME-Typs "Text/Plain" wird mit /usr/lib/cups/filter/texttops zu PostScript konvertiert. Seit CUPS 1.3.4 wird nur UFT-8-Text (einschließlich 7-bit ASCII-Text) unterstützt. Der Grund ist, dass es nicht möglich ist, die Kodierung selbst zu erkennen. CUPS kann keine "reinen Text"-Dateien in willkürlicher Kodierung zuverlässig abarbeiten. Siehe auch [1]. Um nicht-UTF-8-Text zu drucken, müssen Sie ihn von seiner Kodierung zu UTF-8 umwandeln, bevor Sie ihn zum CUPS-Server senden können. Um ISO-8859-1 Textdateien zu drucken, müssen Sie

iconv -f ISO-8859-1 -t UTF-8 filename

verwenden. Siehe auch unter

iconv --help

nach mehr Informationen über incov. Der Ausdruck von PDF oder Grafikdateien funktioniert wie zuvor.

2) Einfügen der "PostScript Invocation Values" in den PostScript Datenstrom

Das erfolgt gemäß der folgenden Zeile in /etc/cups/mime.convs:

input MIME type output MIME type costs filter
application/postscript application/vnd.cups-postscript 66 pstops

3) Konvertierung von PostScript Daten in druckerspezifische Daten

Wenn ein nicht-PostScript Drucker mit einer Foomatic PPD Datei verwendet wird, dann wird das PostScript in druckerspezifische Daten konvertiert, gemäß der folgenden Zeile in jeder Foomatic (Version 3.x) PPD Datei:

main keyword input MIME type costs filter
*cupsFilter: "application/vnd.cups-postscript foomatic-rip"

Wenn ein nicht-PostScript Drucker mit einer Foomatic PPD Datei verwendet wird, dann ist foomatic-rip zusammen mit Ghostscript der PostScript Interpreter. Um PostScript in druckerspezifische Daten umzuwandeln, macht foomatic-rip die folgenden Schritte: 3a) Aufbau einer Ghostscript Kommandozeile:

foomatic-rip erstellt ein Ghostscript-Kommando mit dem erforderlichen Ghostscript-Drucker-Treiber und zusätzlichen Parametern gemäß den Drucker-spezifischen Optionen, die für den Druckauftrag eingestellt wurden. In einigen Fällen wird ein Postfilter nach dem Ghostscript-Kommando (via Pipe) eingefügt. Zum Beispiel werden für einige PCL-Drucker spezielle Optionen durch Änderungen im PCL-Datenstrom realisiert. 3b) Das Ghostscript-Kommando (oder eine Pipe) verwenden:

foomatic-rip führt das Ghostscript-Kommando aus. Wenn eine nicht-Foomatic-PPD-Datei (z. B. Gutenprint/Gimp-Print-PPD-Datei von /usr/share/cups/model/gutenprint oder /usr/share/cups/model/stp) für nicht-PostScript-Drucker verwendet wird, sollte die "*CUPS-Filter"-Einträge wie folgt aussehen:

*cupsFilter: "application/vnd.cups-raster 100 rastertogutenprint"

oder

*cupsFilter: "application/vnd.cups-raster 100 rastertoprinter"

Die entsprechenden Einträge in /usr/share/cups/mime/mime.convs oder /etc/cups/mime.convs führt zu einer anderen Filterprozedur. In diesem Fall ist /usr/lib/cups/filter/rastertogutenprint oder /usr/lib/cups/filter/rastertoprinter das Drucker-Treiber-Programm. Weitere Informationen über Filter finden Sie auf der Man-Seite "man 7 filter". Speziellere Informationen finden Sie unter: [2]

Details:

/usr/lib/cups/filter/

Dieses Verzeichnis enthält die verschiedenen Filterprogramme, die das CUPS Filtersystem verwendet, wenn eine PPD Datei beim Einrichten der betreffenden Warteschlange angegeben wurde.

  • /usr/lib/cups/filter/*tops (z.B. /usr/lib/cups/filter/texttops) um die ursprünglichen Daten (z.B. "text/plain") nach PostScript umzuwandeln.
  • /usr/lib/cups/filter/pstops um die "PostScript Invocation Values" einzufügen und ggf. um das PostScript umzuformatieren (z.B. je zwei Seiten verkleinert auf ein Blatt drucken).
  • /usr/lib/cups/filter/foomatic-rip um PostScript in druckerspezifische Daten (z.B. PCL or ESC/P) umzuwandeln.

/etc/cups/interfaces/

Dieses Verzeichnis enthält den Filter, der von CUPS verwendet wird, wenn beim Einrichten der betreffenden Warteschlange keine PPD Datei, sondern ein "System V style Interface Script" angegeben wurde. Ein "System V style Interface Script" ist ein einziges Filterprogramm oder Filterscript, das die druckerspezifischen Daten für alle Datentypen produzieren muss, die bei den ursprünglichen zu druckenden Daten vorkommen können. Weitere Informationen bzgl. "System V style Interface Script" finden sich im Supportdatenbank Artikel "Selbst erstellte Filter zum Ausdruck mit CUPS": [3]

"raw"

Wenn beim Einrichten der betreffenden Warteschlange weder eine PPD Datei, noch ein "System V style Interface Script" angegeben wurde, dann erfolgt überhaupt keine Filterung. Die ursprünglichen zu druckenden Daten werden wie sie sind (also "roh") direkt vom Backend an den Empfänger (normalerweise an den Drucker) geschickt. Es kann weder der Zeilenumbruch konvertiert werden (z.B. LF -> CR+LF) noch kann am Ende ein Formfeed angefügt werden. Für derartiges kann ein "System V style Interface Script" verwendet werden.

Die Backends

Was ist ein CUPS Backend und wie arbeitet es?

Normalerweise bekommt das Backend die druckerspezifischen Daten vom Filter und sendet sie weiter an den Drucker oder einen sonstigen Empfänger.

Die Unterschiede zwischen Backend und Filter sind:

  • Genau ein Backend, aber normalerweise mehrere Filter (eine Filterkette) werden aktiviert, um einen Druckauftrag zu verarbeiten. Ausnahmen: "System V style Interface Script" (genau ein Filter) und "raw"-Druck (kein Filter).
  • Das Backend ist immer das letzte Programm in der Verarbeitungskette, das ausgeführt wird, um einen Druckauftrag zu verarbeiten.

Für das Drucksystem ist der Druckauftrag genau dann komplett abgearbeitet, wenn das Backend fertig ist. Das Backend ist fertig, wenn die Datenübertragung zum Empfänger beendet ist. Wenn danach die weitere Verarbeitung beim Empfänger scheitert (z.B. wenn der Drucker die druckerspezifischen Daten nicht zu Papier bringen kann), merkt das Drucksystem davon nichts mehr.

Wenn die Datenübertragung zum Empfänger endgültig scheitert (normalerweise macht ein Backend mehrere Versuche), dann meldet das Backend einen Fehler an das Drucksystem (genauer an den cupsd). Das Backend entscheidet, ob und wieviele Versuche sinnvoll sind, bis es die Datenübertragung als unmöglich meldet. Da weitere Versuche somit sinnlos sind, wird das Ausdrucken für die betroffene Warteschlange vom cupsd abgeschaltet (disable). Nachdem die Ursache des Problems behoben wurde, muss der Systemverwalter mit /usr/bin/enable (für CUPS 1.1 - d.h. bis Suse Linux 10.1) bzw. mit cupsenable (für CUPS 1.2 - d.h. ab openSUSE 10.2) das Ausdrucken wieder aktivieren.

Weitere Informationen zu Backends finden sich in den Man-Seiten "man 7 backend" und zu Filtern unter "man 7 filter". Spezielle Informationen finden Sie unter [4]

Details:

/usr/lib/cups/backend/

Dieses Verzeichnis enthält die verschiedenen Backends.

Je nachdem wie der Drucker erreichbar ist von dem Rechner, auf dem das CUPS System läuft, bzw. je nach Typ des Empfängers muss das passende Backend verwendet werden.

Das Ziel an das ein Backend die Daten sendet, kann jeder "URI" (Uniform Resource Identifier) sein, für den ein passendes Backend existiert. Der erste Teil des "DeviceURI"-Eintrags in /etc/cups/printers.conf legt das Backend fest, der Rest dient dem Backend als Parameter.

backend URI syntax example URI
parallel parallel:/dev/lp* parallel:/dev/lp0
usb (traditional) usb:/dev/usb/lp* usb:/dev/usb/lp0
usb (new) usb://<make>/<model>?serial=<number> usb://ACME/FunPrinter%201000?serial=A1B2C3
ipp ipp://<ipp-server.domain>/printers/<queue> ipp://cups-server.domain/printers/funprinter1000
lpd lpd://<lpd-server.domain>/<queue> lpd://192.168.101.202/lpt1
socket socket://<host.domain>:<port> socket://192.168.101.202:9100
smb see the man page smbspool(8) smb://user:password@workgroup/smb-server/share

Falls "user" und "password" für das smb Backend benötigt werden, müssen Eigentümer, Gruppe und Zugriffsrechte für die Datei /etc/cups/printers.conf hinreichend restriktiv gesetzt sein. Die Angaben "user" und "password" werden nicht mit dem Kommando lpstat -v angezeigt.

Jedes Backend kann auch direkt aufgerufen werden. Beispielsweise die Backends "parallel" und "usb" liefern dabei die IEEE-1284 Identifikation von angeschlossenen Druckern:

root@host# /usr/lib/cups/backend/parallel
direct parallel:/dev/lp0 "ACME FunPrinter 1000" "Parallel Port #1"


root@host# /usr/lib/cups/backend/usb
direct usb://ACME/USB%20Printer?serial=1234 "ACME USB Printer" "USB Printer #1"
direct usb:/dev/usb/lp1 "Unknown" "USB Printer #2"
...


Beim Starten ruft der cupsd alle Backends in /usr/lib/cups/backend/ nacheinander einmal auf. Dadurch ermittelt der cupsd welche Backends auf dem jeweiligen System einsatzfähig sind. Nur die einsatzfähigen Backends stehen für die Konfiguration von Warteschlangen zur Verfügung. Die einsatzfähigen Backends werden mit lpinfo -v angezeigt.

Kommandozeilentools

Allgemeine Informationen zu den Kommandozeilentools:

Machen Sie keine manuellen Änderungen in den Konfigurationsdateien in /etc/cups/, wenn es dafür auch geeignete Kommandozeilentools gibt.

Grund:

Die Konfigurationsdateien werden nicht für jeden Druckjob neu eingelesen. Stattdessen hält der cupsd viel Information nur im Hauptspeicher und schreibt je nach Bedarf Informationen in die Konfigurationsdateien zurück. Ausnahme: /etc/cups/cupsd.conf
Nach Änderungen in dieser Konfigurationsdatei muss der cupsd neu gestartet werden, damit er mit der geänderten Konfiguration arbeitet.

Kopieren Sie niemals Konfigurationsdateien von anderen Systemen in Ihr System, es sei denn, Sie wissen genau, was Sie tun. Verwenden Sie stattdessen Kommandozeilentools. Um z.B. dieselben Warteschlangen auf mehreren Maschinen anzulegen (etwa für einen Backup-Server), kopieren Sie nicht /etc/cups/printers.conf und /etc/cups/ppd/*, sondern machen Sie ein Script aus den passenden Kommandozeilen (normalerweise eine Reihe von lpadmin Aufrufen) und lassen dieses Script auf den verschiedenen Machinen laufen. Dadurch bekommen Sie ggf. die jeweils passenden Fehlermeldungen auf der jeweiligen Maschine (z.B. wenn auf einer Maschine eine PPD Datei nicht vorhanden ist oder wenn ein Backend nicht verfügbar oder nicht einsatzfähig ist). Ausserdem haben Sie durch das Script ein Protokoll der Einstellungen und Sie können mit dem Script diese Einstellungen immer wieder herstellen.

Wenn Sie nicht sicher sind, welches hübsche graphische Tool für gewisse spezielle Konfigurationen am besten geeignet ist, nehmen Sie stattdessen Kommandozeilentools.

In vielen Fällen ist die Reihenfolge der Optionen wichtig. Lesen Sie die Man-Pages. Beispielsweise sind die folgenden Kommandos alle verschieden:

lpadmin -E -p queue
lpadmin -p queue -E
lpadmin -E -p queue -E


Details:

Kommandozeilentools um Warteschlangen anzulegenoder zu ändern

Wie man eine Warteschlange anlegt unter vollständiger Beachtung von CUPS:

1) Rufen Sie die automatisch erkannten Drucker und ihrer passenden Geräte-URI von cupsd auf: Starten Sie als Root

lpinfo -l -v

2) Rufen Sie die passende Druckertreiber-Beschreibung von cupsd auf und starten Sie als Root

pinfo -l -m

3) Wählen Sie einen Drucker/TreiberURI aus der ersten Liste und einen Druckertreiben aus der zweiten Liste und überlegen sich eine geeignete Warteschlangen-Bezeichnung. 4) Richten Sie die Warteschlange ein: Starten Sie als Root

lpadmin -p queue_name -v DeviceURI -m printer_driver -E

oder

lpadmin -p queue_name -v DeviceURI -P /usr/share/cups/model/printer_driver -E

Es ist kein Neustart von cupsd erforderlich, um Warteschlangen hinzu zu fügen, zu modifizieren oder zu löschen. Nur eine Änderung von config von cupsd selbst erfordert einen Neustart.

Beispiel zum Anlegen einer Warteschlange:

root@host# lpadmin -h localhost -p funprinter1000 -v parallel:/dev/lp0 -P /usr/share/cups/model/Postscript.ppd.gz -E


Kontrolle, was angelegt wurde via Kommandozeilentool

user@host$ lpstat -h localhost -a funprinter1000 -p funprinter1000 -v funprinter1000 funprinter1000 accepting requests since Jan 01 00:00


Alternativ schauen Sie in /etc/cups/printers.conf:

<Printer funprinter1000>

Info funprinter1000
DeviceURI parallel:/dev/lp0
State Idle
Accepting Yes
JobSheets none none
QuotaPeriod 0
PageLimit 0
KLimit 0

</Printer>


oder Abfrage via Web-Frontend: http://localhost:631/printers/funprinter1000

Ändern der Warteschlange (z.B. Beschreibung und Standort):

root@host# lpadmin -p funprinter1000 -D "ACME FunPrinter 1000" -L "2. floor: room 3"


Anzeige der druckerspezifischen Optionen und deren Voreinstellungen in /etc/cups/ppd/funprinter1000.ppd:

user@host$ lpoptions -p funprinter1000 -l
Resolution/Output Resolution: 150dpi *300dpi 600dpi 1200dpi 2400dpi
PageSize/Media Size: Letter Legal Executive *A4 A5
...


Die Ausgabe hat folgende Syntax:

main-keyword/translation-string: option-keyword option-keyword option-keyword ...


Die Voreinstellung ist durch einen * vor dem "Option-Keyword" gekennzeichnet.

Ändern der druckerspezifischen Voreinstellungen in /etc/cups/ppd/funprinter1000.ppd:

root@host# lpadmin -p funprinter1000 -o Resolution=600dpi -o PageSize=Letter


Die Syntax ist:

lpadmin -p queue -o main-keyword1=option-keyword1 -o main-keyword2=option-keyword2 ...


Verwenden Sie nicht lpoptions für diesen Zweck. Siehe Supportdatenbank Artikel: SDB:Drucker-CUPS-Schnellkonfiguration Normaler Benutzer können mit lpoptions ihre persönlichen Voreinstellungen in ~/.cups/lpoptions (seit CUPS 1.2/openSUSE 10.2, es war ~/.lpoptions in CUPS 1.1) speichern: Siehe dazu denselben Supportdatenbank Artikel.

Verwenden Sie accept bzw. reject um Druckaufträge für eine Warteschlange zu akzeptieren bzw. zurückzuweisen und /usr/bin/enable (enable ist ein Bash-Builtin) bzw. disable um das Ausdrucken aus einer Warteschlange zu starten bzw. zu stoppen (z.B. damit während Wartungsarbeiten am Drucker keine Druckaufträge verloren gehen).

Löschen der Warteschlange:

root@host# lpadmin -x funprinter1000


Kommandozeilentools für den täglichen Gebrauch

Vermeiden Sie die Kommandos im BSD Stil lpr, lpq und lprm, denn hier sind nur einige generische Optionen unterstützt. Verwenden Sie stattdessen die Kommandos im System V Stil lp, lpstat und cancel.

Verwenden Sie lpoptions um persönliche druckerspezifische Optionseinstellungen in ~/.cups/lpoptions zu speichern, z.B.:

user@host$ lpoptions -o Resolution=1200dpi -p funprinter1000


Die allgemein verfügbaren Optionen beim Ausdruck sind auf der Seite "Kommandozeile Drucken und Optionen" in der Sektion "Getting Started" unter "Dokumentation/Hilfe" auf der CUPS-Web-Oberfläche, die auf Ihrem PC läuft, zu erhalten. Sie können sich auch die Dokumentation für Ihr aktuell verwendete CUPS-Version aud cups.org ansehen, die momentan CUPS 1.4 ist.

Das Web-Frontend des cupsd

Der URL

Jeder cupsd im Netzwerk hat ein HTTP Web-Frontend. Die URL für einen lokal laufenden cupsd ist:

die Adresse:

ist die URL für einen entfernten cupsd auf dem Rechner

"host.domain"

Voraussetzung für den Zugriff ist, dass der jeweilige Rechner und der jeweilige cupsd den Zugriff erlauben.

Details:

Für den täglichen Gebrauch ist das Web-Frontend oft die beste Informationsquelle zu Warteschlangen und Druckaufträge. Beispielsweise liefert:

eine Übersicht aller Warteschlangen eines lokalen cupsd.

Das Web-Frontend ist die beste Art, die zum jeweiligen cupsd (bzw. zu dessen Version) passende Dokumentation zu bekommen, z.B.

für die Dokumentation zum lokalen cupsd, oder eine URL in der Art:

für die Dokumentation zu einem entfernten cupsd auf dem Rechner "host.domain".

Sogar die PPD Dateien unter /etc/cups/ppd/ sind via Web-Frontend verfügbar. Beispielsweise die PPD Datei der Warteschlange:

"funprinter1000"

auf dem lokalen Recher (/etc/cups/ppd/funprinter1000.ppd) mit der URL:

und eine URL in der Art:

für die PPD Datei der Warteschlange:

"queue"

auf dem Rechner

"host.domain"


CUPS im Netzwerk konfigurieren

Das grundsätzliche Design von CUPS zum Drucken im Netzwerk:

CUPS Netzwerk Server (die Rechner, wo Spooling und Filterung erfolgt):

  • Der cupsd eines CUPS Netzwerk Servers sendet Informationen über seine Warteschlangen an eine beliebige Liste von IP Adressen (Rechneradressen und/oder Broadcastadressen). Die Voreinstellung ist eine leere Liste.
  • Das Senden wird in einem vorgegebenen Zeitintervall wiederholt. Die Voreinstellung ist 30 Sekunden.

Clients (die Rechner, die nur Druckaufträge an Server senden):

  • Auf jedem Client sollte ein lokaler cupsd laufen, denn per Voreinstellung lauscht ein cupsd auf Informationen, die von Servern kommen. Es gibt eine Liste von Servern, von denen Informationen angenommen werden. Per Voreinstellung wird von jeglichen Servern Information angenommen.
  • Die Information über eine bestimmte Warteschlange wird auf dem Client gelöscht, wenn in einem vorgegebenen Zeitintervall keine neue Information über die Warteschlange eintrifft. Die Voreinstellung ist 300 Sekunden.

Auf diese Weise sind die Warteschlangen des Servers direkt auf dem Client verfügbar und Benutzer auf den Clients können die im Netzwerk auf verschiedene Server verteilten Warteschlangen "durchstöbern" (im Englischen "browse") und daher heißt das ganze "Browsing".

Per Voreinstellung ist "Browsing" aktiviert. Jegliche eintreffende Browsing-Information wird akzeptiert, aber keine Browsing-Information wird versendet - siehe oben.

Konfiguration der CUPS Netzwerk Server:

  1. Konfigurieren Sie auf dem Server die Warteschlangen für die Drucker, die zu dem Server gehören.
  2. Erlauben Sie den Zugriff auf die Warteschlangen für die Client-Rechner.
  3. Aktivieren Sie das Senden von Browsing-Information an die Client-Rechner.

Sub-Netze erleichtern die Konfiguration, denn dann genügt es, die Browsing-Information an eine feste Broadcast-Adresse zu senden, statt an eine ständig zu pflegende Liste von einzelnen Rechneradressen.

Der Zugriff auf die Warteschlangen eines Servers ist unabhängig davon, an welche Rechner der Server Browsing-Information sendet. Ein Server kann allen Clients im Netzwerk den Zugriff auf seine Warteschlangen erlauben und nur an einen Teil der Clients Browsing-Information senden. Ein Server sollte aber keine Browsing-Information an Clients senden, die keinen Zugriff auf seine Warteschlangen haben.

Es ist nicht möglich, nur einen großen Server für eine große Firma zu haben und Browsing-Information für einen Teil der Warteschlangen an die Clients der einen Abteilung oder des einen Gebäudes zu senden und Browsing-Information für einen anderen Teil der Warteschlangen an andere Clients zu senden.

Dazu sind mehrere Server (einer pro Abteilung oder Gebäude) notwendig.

Details:

Konfiguration der Warteschlange auf dem Server

Die Drucker, die zu einem Server gehören, sind genau diejenigen, für die die Filterung auf dem Server erfolgt.

I) Konfigurieren Sie die Drucker so, dass das Drucken auf dem Server korrekt funktioniert.

Richten Sie Warteschlangen für die Drucker, die mit dem Server verbunden sind, ein. Überprüfen Sie, dass das Drucken korrekt funktioniert, wenn ein normaler Benutzer direkt vom Server ausdruckt. Im Fall von Problemen überprüfen Sie die CUPS-Fehler-Meldung auf dem Server, siehe unten.

II) Erlauben Sie den Clients den Zugang zur Warteschlange

Entweder Sie ändern /etc/cups/cupsd.conf manuell oder mit YaST. Ab openSUSE 11.1 verwenden Sie den "Dialog zum gemeinsamen Nutzen von Druckern" unter SDB:YaST Drucker.

Zuerst lassen Sie cupsd das Netzwerk abhören:

Per Standard hört cupsd seit CUPS 1.2 nur die internen ("localhost") Netzwerk-Schnittstellen (und einen Unix-Domain-Socket) in /etc/cups/cupsd.conf ab:

Listen localhost:631
Listen /var/run/cups/cups.sock

Für CUPS 1.2 (und neuere Versionen) des Netzwerkservers müssen Sie es ändern, um auch auf das äußere Netzwerk zu lauschen. Fügen Sie einen Eintrag in der Form Listen IP.of.your.server ein. Wenn der CUPS-Server von einem unsicheren Netzwerk erreicht werden kann, stellen Sie sicher, dass Sie eine Firewall verwenden, um den Server zu schützen.

Dann erlauben Sie den Clients den Zugriff auf den Server:

Die Standardeinstellung in /etc/cups/cupsd.conf ist wie folgt:

<Location />
Order allow,deny
Allow 127.0.0.2
</Location>

Der Zugang vom "locahost"127.0.0.1 wird in jedem Fall erlaubt ohne expliziten Eintrag und 127.0.0.2 könnte ebenfalls dem Hostnamen des Servers zugewiesen sein, so dass der Zugriff über den Hostnamen des Servers ebenso erlaubt ist. Um den Zugriff von allen Rechnern in das lokale Netzwerk zu erlauben, fügen Sie die Zeile

Allow @LOCAL

ein. Diese Einstellung erlaubt allen örtlichen Rechnern den Zugriff auf cupsd. Lokale Rechner sind die, dessen IP-Adresse mit der nicht-PPP-Schnittstelle (genauer, die Schnittstelle, dessen IFF_POINTOPOINT flag nicht gesetzt ist) verbunden sind und dessen IP-Adresse zum gleichen Netzwerk gehört, wie der CUPS-Server. Um den Zugang spezieller Rechner oder Netzwerke zu erlauben, fügen Sie folgenden Link ein:

Allow 192.168.100.1
Allow 192.168.200.0/255.255.255.0

Wir empfehlen die Verwendung von IP-Adressen anstatt von Namen.

Anmerkung: Da die Zuweisungen für ältere CUPS-Versionen anders erfolgten, ist CUPS 1.2 nicht rückwärts kompatibel mit CUPS 1.1. Sollten Sie dennoch genauere Informationen benötigen, verweisen wir Sie auf SDB:CUPS_in_a_Nutshell

III) Aktivierung des Sendens von Browsing-Informationen zu den Clients

In /etc/cups/cupsd.conf setzten Sie den Eintrag "BrowseAddress @LOCAL", um die Browsing-Informationen zu den lokalen Rechnern zu senden. Oder fügen Sie Einträge in der Form "BrowseAddress client.host.IP.address" oder "BrowseAddress network.broadcast.IP.address" ein.

Das senden der Browsing-Informationen zu den Clients ist optional:

  • Wenn es weggelassen wird, werden die Clients nicht automatisch Informationen über die Warteschlangen auf dem Server erhalten.
  • Dennoch, können die Clients Zugang zu den Warteschlangen der Server haben, bezugnehmend auf die vorherigen Schritte.

Speziell in großen Netzwerken könnte es Sinn machen, zu allen Clients Zugang zu gewähren, aber Browsing-Informationen nur zu einigen Clients zu senden (z.B. nur zu den Clients, die sich in der gleichen Abteilung oder Gebäude wie der Server befinden).

IV) Neustart von cupsd

CUPS-Fehlermeldung erhalten, wenn es nicht funktioniert

1) Setzen Sie "LogLevel debug" in /etc/cups/cupsd.conf - z. B. als Root setzen Sie den "LogLevel"-Wert in /etc/cups/cupsd.conf, indem Sie einen Texteditor wie 'vi' verwenden.
2) Stoppen Sie den cupsd als Root, indem Sie

rccups stop


eingeben.
3) Verschieben Sie /var/log/cups/error_log* zu einem anderen Ort (oder löschen Sie es), um zu vermeiden, dass Sie nicht riesige Log-Dateien durchsuchen müssen- z.B. als Anwender Root:

mv /var/log/cups/error_log /var/log/cups/error_log.old


oder

rm /var/log/cups/error_log


4) Starten Sie den cupsd, indem Sie als Root

rccups start


starten.
5) Versuchen Sie erneut, was zu dem Problem geführt hat.
6) Nun finden sich viele Meldungen in /var/log/cups/error_log*, die zur Ursachenermittlung nützlich sind.
7) Speichern Sie die augenblickliche Datei /var/log/cups/error_log - z.B. geben Sie als Root ein:

cp -p /var/log/cups/error_log/tmp/cups.error_log.save


8) Nun kann /tmp/cups.error_log.save als interessante Lektüre für in Ihre Freizeit untersucht werden.

Obwohl Sie jetzt die CUPS-Fehlermeldung besitzen, hilft diese Meldung Ihnen nicht die wirkliche Ursache zu finden, wenn etwas nicht funktioniert. Eventuell möchten Sie um Hilfe bitten, wie hier: Wie man einen Druckerfehler meldet.

Die Clients einrichten

Empfohlen:

  1. Aktivieren von /etc/init.d/cups, so dass der cupsd beim Booten des Client-Rechners gestartet wird.
  2. Starten des cupsd.

Ab SUSE LINUX 9.1 erfolgt das standardmässig. Alternativ kann es mit dem YaST Runlevel Editor oder mit insserv erfolgen. Im Normalfall ist es empfohlen, sonst nichts weiter zu konfigurieren, insbesonere:

  • Keine lokalen Warteschlangen auf Client-Rechnern.
  • Keine Änderungen an den Voreinstellungen für den cupsdd auf Client-Rechnern.

Spezialfälle zur Einrichtung von Clients

Optional:

Fügen Sie in /etc/cups/cupsd.conf Einträge der Art "BrowseAllow IP.of.desired.server" und "BrowseDeny IP.of.unwanted.server" hinzu, um jegliche Pakete (also auch Browsing-Information) von unerwünschten Servern zurückzuweisen. Es ist empfohlen IP Adressen statt Namen zu nehmen. In bestimmten Fällen kann es nützlich sein, den BrowseOrder Eintrag anzupassen.

Wenn es Server gibt, die keine Browsing-Information senden, aber man kann dennoch auf deren Warteschlangen zugreifen (z.B. Server anderer Abteilungen oder Gebäude), dann kann es sinnvoll sein, die Browsing-Information aktiv vom Server abzufragen (Englisch "polling"): Fügen Sie dazu in /etc/cups/cupsd.conf für jeden Server einen Eintrag der Art "BrowsePoll IP.of.the.server:631" hinzu. Es ist empfohlen IP Adressen statt Namen zu nehmen und standardmässig ist der Port auf dem Server 631. Nach dem erneuten Starten des cupsd wird für jeden BrowsePoll Eintrag ein cups-polld laufen.

Entweder Sie ändern /etc/cups/cupsd.conf manuell oder verwenden YaST. Seit openSUSE 11.3 können Sie in YaST den Dialog "Drucken über das Netzwerk" verwenden, siehe SDB:YaST Drucker.

Wenn Browsing generell unerwünscht ist:

Setzen Sie "Browsing Off" in /etc/cups/cupsd.conf. Das bedeutet nicht, dass nun nicht mehr auf die Warteschlangen auf den Servern zugegriffen werden kann. Man kann weiterhin z.B. die Kommandozeilentools benutzen, nur ist nun der Server explizit anzugeben (normalerweise mit der Option "-h", siehe die Man-Pages).

"Client-only" Konfiguration:

Wenn Browsing generell unerwünscht ist, gibt es keinen Grund auf dem Client einen cupsd laufen zu haben. In diesem Fall sollte eine "Client-only" Konfiguration gemacht werden. Das geht mit YaST oder manuell wie folgt:

  1. Stoppen und deaktivieren des cupsd (YaST Runlevel Editor oder insserv verwenden).
  2. In /etc/cups/client.conf einen Eintrag der Art "ServerName IP.of.the.server" machen.

So ein Eintrag sollte nicht zusammen mit einem lokal laufenden cupsd vorhanden sein. Es ist maximal ein solcher Eintrag möglich. Daher sollte hier der bevorzugt verwendete Server eingetragen werden. Um auf einen anderen Server zuzugreifen, ist dieser bei den Kommandozeilentools explizit anzugeben (Option "-h") oder die Umgebungsvariable CUPS_SERVER ist passend zu setzten. Manche Anwendungsprogramme ignorieren den ServerName Eintrag. Dann könnte es helfen CUPS_SERVER zu setzten, oder im Anwendungsprogramm ist der Server explizit anzugeben (z.B. mit der Option "-h" im Druckbefehl).

Minimale Client Installationen:

Das normale Minimum, um CUPS Server anzusprechen, ist die Pakete cups-libs und cups-client installiert zu haben. Dann können Server mit den Kommandozeilentools angesprochen werden.

Das unterste Minimum, um CUPS Server anzusprechen, ist nur das Paket cups-libs installiert zu haben. In diesem Fall können nur Programme, die die CUPS-Bibliotheken direkt verwenden, drucken.

In Bezug auf die Firewall

Wenn der CUPS-Server und das Client-System zu einem internen Netzwerk gehören und wenn Sie allem vertrauen, was im internen Netzwerk ist, muss Ihre Netzwerkschnittstelle auf "interne Zone" gesetzt werden.

Es macht keinen Sinn, wenn Sie ein Netzwerk als vertrauenswürdig einzurichten, wenn die Schnittstelle zur nicht vertrauenswürdigen "externen Zone" gehört.

Insbesondere deaktivieren Sie nicht die Firewall für CUPS (für IPP die TCP Port 631 und UDP Port 631) für die nicht vertrauenswürdige "externe Zone".

Lesen Sie auch den Artikel CUPS und SANE Firewall einrichten

Administrationsaufgaben für normale Benutzer erlauben

Ab openSUSE 10.2/CUPS 1.2 können Sie Administrationsaufgaben für normale Benutzer erlauben in der Datei cupsd.conf erlauben.

<Policy default>
...
<Limit ... CUPS-Add-Modify-Printer ...>
Require user @SYSTEM normal-user


Ersetzen Sie "normal-user" mit dem Benutzernamen des Systems (Benutzername in /etc/passwd) des normalen Benutzers, dem die Administrationsaufgaben für den Drucker erlaubt werden sollten und starten Sie cupsd neu.

Details bezüglich der Betriebs-Politik siehe http://www.cups.org/documentation.php/doc-1.3/policies.html.

Beachten Sie, dass ein Benutzer, dem die Drucker-Administrations-Aufgaben erlaubt werden, die Warteschlangen ändern kann, wie er möchte. Zum Beispiel könnte er vertrauliche Druckaufträge als gewöhnliche (so dass Betrug nicht leicht erkannt wird) ausdrucken und zusätzlich eine Kopie zu einem externen Bestimmungsort senden.

Externe Links