SDB:Einstellungen zum Ausdruck mit CUPS

aus openSUSE, der freien Wissensdatenbank


Version: 7.2

Inhaltsverzeichnis

Symptom

Sie administrieren ein CUPS-Drucksystem und verlieren den Überblick über die verschiedenen Einstellungen für die Warteschlangen.

Beispiele:

  • Verschiedene Benutzer erhalten unterschiedliche Druckergebnisse (evtl. auch gar keinen Ausdruck oder ein völlig unbrachbares Druckergebnis), obwohl dieselben Daten über dieselbe Warteschlange gedruckt werden.
  • Beim Drucken im Netzerk sind die Druckergebnisse unterschiedlich, wenn derselbe Benutzer von verschiedenen Client-Rechnern aus dieselben Daten über die gleiche Warteschlange auf dem CUPS-Netzerkserver druckt.

Analog gilt das auch für die Einstellung der Default-Warteschlange:

Hier ist aber zusätzlich zu den unten genannten Dateien noch die Umgebungsvariable PRINTER massgeblich.
Ist diese Umgebungsvariable auf einen Wert ungleich lp gesetzt, so legt das mit höchster Priorität die Default-Warteschlange fest. Ist PRINTER auf lp gesetzt, so wird das von CUPS ignoriert. Das ist wohl deshalb so, weil bei traditionellen Drucksystemen in /etc/profile (bzw. in /etc/SuSEconfig/profile) die Umgebungsvariable PRINTER normalerweise auf lp gesetzt wird und da das höchste Priorität hätte, könnte mit keiner der bei CUPS üblichen Methoden eine andere Default-Warteschlange eingestellt werden.

Ausserdem ist es nicht möglich, die Default-Warteschlange, die auf dem CUPS-Server eingestellt ist, auf die Client-Rechner zu übertragen denn es könnten sonst mehrere CUPS-Server mehrere Default-Warteschlangen an die Client-Rechner broadcasten. Daher muss jeder Client-Rechner seine eigene Einstellung der Default-Warteschlange haben.

Ist keine Warteschlange als Default-Warteschlange festgelegt, so wird per Default die alphabetisch erste Warteschlange genommen.

Ursache

Es ist kein Fehler, sondern ein zentrales Feature von CUPS:

  • Für jede Warteschlange kann jeder Benutzer die Einstellungen individuell festlegen.
  • Zusätzlich kann der Benutzer "root" die Einstellungen auf jedem einzelnen Rechner (sowohl auf jedem Client-Rechner als auch auf dem CUPS-Server) individuell vorgeben.

Lösung

Die Lösung ist, zu wissen, wo überall Einstellungen gespeichert sein können und wann welche Einstellungen wirksam werden.

Ab SuSE Linux 8.1 finden Sie die grundlegenden Informationen dazu im Administrationshadbuch im Kapitel "Druckerbetrieb" im Abschnitt "Kommandozeilentools für das CUPS-Drucksystem", Unterabschnitt "Für lokale Warteschlangen" und dort unter "Einstellung der Warteschlangen".

Beispiel:

Zur Verdeutlichung hier ein völlig korrektes, aber im laufe der Zeit immer undurchschaubarer werdendes Beispiel.
In dem Beispiel werden nur Kommandozeilenbefehle verwendet, um die Darstellung präzise und knapp halten zu können. Es macht aber keinen Unterschied, wenn alternativ graphische Tools wie Kprinter und XPP oder das CUPS-Web-Frontend verwendet werden.

Ausgangszustand:

  • Der Rechner "sonne" ist der CUPS-Server, an dem ein Farb-Tintenstrahldrucker mit den Warteschlangen "mono" und "color" angeschlossen ist.

Da beide Warteschlangen für denselben Drucker verwendet werden, wird für beide Warteschlangen dieselbe PPD-Datei als Basis verwendet, aber die Default-Werte sind pro Warteschlange passend voreingestellt. Beispielsweise YaST2 erzeugt verschiedene Konfigurationen meist auf diese Art - vergl. den SDB-Artikel "Drucker einrichten ab SuSE Linux 8.1". In den zu den einzelnen Warteschlangen gehörenden PPD-Dateien /etc/cups/ppd/mono.ppd und /etc/cups/ppd/color.ppd gbt es daher beispielsweise folgende Einstellmöglichkeiten und Default-Werte:

 *DefaultColors: Gray
 *Colors Gray ...
 *Colors Color ...
 ...
 *DefaultInkCartridge: Black
 *InkCartridge Black ...
 *InkCartridge Color ...
 ...
 *DefaultResolution: 600dpi
 *Resolution 150dpi ...
 *Resolution 300dpi ...
 *Resolution 600dpi ...
 
und

 *DefaultColors: Color
 *Colors Gray ...
 *Colors Color ...
 ...
 *DefaultInkCartridge: Color
 *InkCartridge Black ...
 *InkCartridge Color ...
 ...
 *DefaultResolution: 300dpi
 *Resolution 150dpi ...
 *Resolution 300dpi ...
 *Resolution 600dpi ...
 
Es ist unter gewissen Umständen sinnvoll, für denselben Drucker mehrere Warteschlangen mit passenden Voreinstellungen zu haben, denn:
    • Insbesondere bei Farb-Tintenstrahldruckern kann ein Wechsel zwischen verschiedenen Druckmodi die Umstellung mehrerer Optionen erfordern.
      Hier beispielsweise:
      • Für "mono" Colors=Gray und InkCartridge=Black
      • Für "color" Colors=Color und InkCartridge=Color
    • Insbesondere bei Farb-Tintenstrahldruckern kann es sein, dass bestimmte Druck-Modi nur in bestimmten Auflösungen funktionieren.
      Für den Drucker hier wird beispielsweise angenommen:
      • Für "mono" funktionieren die Auflösungen 150dpi, 300dpi und 600dpi.
      • Für "color" funktionieren nur die Auflösungen 150dpi und 300dpi. Seit SuSE Linux 8.2 (genauer seit Foomatic Version 3.x) gibt es in den meisten Foomatic PPD-Dateien für Tintenstrahldrucker die "Printout Mode" Option unter der alle notwendigen Einzeloptionseinstellungen für den jeweiligen Druckmodus zusammengefasst auswählbar sind. Daher genügt hier eine einzige Warteschlange pro Drucker.
  • Die Rechner "erde" und "mond" sind CUPS-Clients ohne eigene Warteschlangen. Auf diesen beiden Rechnern gibt es neben "root" noch die normalen Benutzer "tux" und "geeko".
  • Wurden noch nirgends irgendwelche weiteren Einstellungen der Warteschlangen vorgenommen, dann liefert die Warteschlange "mono" für alle Benutzer auf allen Rechnern immer Graustufendruck in 600 dpi Auflösung und die Warteschlange "color" liefert immer Farbdruck in 300 dpi Auflösung.

Nun werden die Einstellungen in der folgenden Reihenfolge verändert:

  1. Ändert "root" auf "sonne" mit dem Befehl
    lpadmin -p mono -o Resolution=150dpi
    den Default-Wert für die Auflösung in der PPD-Datei /etc/cups/ppd/mono.ppd auf 150 dpi,
 *DefaultColors: Gray
 *Colors Gray ...
 *Colors Color ...
 ...
 *DefaultInkCartridge: Black
 *InkCartridge Black
 *InkCartridge Color
 ...
 *DefaultResolution: 150dpi
 *Resolution 150dpi ...
 *Resolution 300dpi ...
 *Resolution 600dpi ...
 
so liefert die Warteschlange "mono" für alle Benutzer auf allen Rechnern Graustufendruck in 150 dpi Auflösung.
  1. Legt "root" auf "sonne" mit dem Befehl
    lpoptions -p mono -o Resolution=300dpi
    den vorgegebenen Wert für die Auflösung nur für den Rechner "sonne" in dessen Datei /etc/cups/lpoptions auf 300 dpi fest,
Dest mono Resolution=300dpi
so liefert die Warteschlange "mono" für alle Benutzer auf "sonne" Graustufendruck in 300 dpi Auflösung, aber für alle Benutzer auf "erde" und "mond" weiterhin Graustufendruck in 150 dpi Auflösung.
  1. Legt "root" auf "erde" mit dem Befehl
    lpoptions -p mono -o Resolution=600dpi
    den vorgegebenen Wert für die Auflösung nur für den Rechner "erde" in dessen Datei /etc/cups/lpoptions auf 600 dpi fest,
Dest mono Resolution=600dpi
so liefert die Warteschlange "mono" für alle Benutzer auf "erde" Graustufendruck in 600 dpi Auflösung, aber für alle Benutzer auf "sonne" weiterhin Graustufendruck in 300 dpi Auflösung und für alle Benutzer auf "mond" weiterhin Graustufendruck in 150 dpi Auflösung.
  1. Ändert der normale Benutzer "tux" auf "erde" mit dem Befehl
    lpoptions -p mono -o Resolution=300dpi
    den Wert für die Auflösung, so wird das nur für den Benutzer "tux" in dessen Home-Verzeichnis in der Datei ~/.lpoptions gespeichert:
Dest mono Resolution=300dpi
Somit liefert die Warteschlange "mono" für den Benutzer "tux" auf "erde" Graustufendruck in 300 dpi Auflösung, aber für alle anderen Benutzer auf "erde" weiterhin Graustufendruck in 600 dpi Auflösung. Die Einstellungen auf "sonne" und "mond" bleiben unverändert.
  1. Ändert der Benutzer "geeko" auf "erde" mit dem Befehl
    lpoptions -p mono -o Colors=Color
    seine Einstellungen für die Warteschlange "mono", so wird das nur für den Benutzer "geeko" in dessen Home-Verzeichnis in der Datei ~/.lpoptions gespeichert:
Dest mono Colors=Color
Die Warteschlange "mono" ist nun für "geeko" auf "erde" sinnlos eingestellt, denn nun werden in sich widersprüchliche Werte Colors=Color und InkCartridge=Black verwendet.
  1. Ändert "geeko" auf "erde" mit dem Befehl
    lpoptions -p color -o Resolution=600dpi
    seine Einstellungen für die Warteschlange "color", so wird das nur in dessen ~/.lpoptions-Datei gespeichert:
Dest color Resolution=600dpi
Dest mono Colors=Color
Die Warteschlange "color" ist nun für "geeko" auf "erde" falsch eingestellt, denn nun wird der Wert Resolution=600dpi verwendet, der wie oben angenommen, nicht für den Drucker funktioniert, so dass nun die Warteschlange "color" nicht mehr für "geeko" auf "erde" funktioniert.
  1. Ändert "geeko" auf "erde" mit dem Befehl
    lpoptions -p color -o Resolution=1200dpi -o Foo=Bar
    seine Einstellungen für die Warteschlange "color", so wird das nur in dessen ~/.lpoptions-Datei gespeichert:
Dest color Resolution=1200dpi Foo=Bar
Dest mono Colors=Color
Es ist zwar möglich, Werte wie z.B. Resolution=1200dpi und Optionen wie z.B. Foo=Bar zu setzen, obwohl diese nicht in der PPD-Datei vorgesehen sind, aber dann wird beim Ausdruck der Default-Wert aus der PPD-Datei (Resolution=300dpi) verwendet bzw. die Option wird ganz ignoriert (Foo=Bar), so dass nun die Warteschlange "color" wieder für "geeko" auf "erde" funktioniert, obwohl eigentlich sinnlose Werte eingestellt wurden.
  1. Löscht "root" auf "sonne" die Warteschlange "mono" mit
    lpadmin -x mono
    so wird dadurch keine der Eintragungen in den oben genannten lpoptions-Dateien gelöscht, sondern die ungültig gewordenen Eintragungen bleiben unverändert bestehen.
  2. Legt "root" auf "sonne" die Warteschlange "mono" erneut an, aber nun wird eine andere PPD-Datei als vorher verwendet, etwa
 *DefaultColours: Gray
 *Colours Gray ...
 *Colours Color ...
 ...
 *DefaultResolution: 300x300dpi
 *Resolution 300x300dpi ...
 *Resolution 600x600dpi ...
 
so ist keine der früheren Eintragung in den lpoptions-Dateien für die neue Warteschlange "mono" gültig, denn entweder stimmt der Optionsname nicht mehr überein (Colours statt Colors) und die Option wird ganz ignoriert, oder der Optionswert stimmt nicht mehr überein (300x300dpi und 600x600dpi statt 150dpi, 300dpi und 600dpi) und dann wird der Default-Wert aus der PPD-Datei verwendet.

Allgemeine Regeln, nach der die Einstellungen festgelegt werden:

  • Macht der Benutzer eine persönliche Einstellung einer Option (z.B. in dessen ~/.lpoptions-Datei), so wird diese Einstellung für den Druckauftrag verwendet.
  • Falls auf dem Rechner eine /etc/cups/lpoptions-Datei vorhanden ist, werden nur diejenigen Optionen von dort dem Druckauftrag hinzugefügt, wenn sie nicht bereits im vorigen Schritt durch den Benutzer festgelegt wurden.
  • Falls in den beiden vorigen Schritten Optionen festgelegt wurden, die nicht gültig sind, werden sie ignoriert und falls Optionswerte festgelegt wurden, die nicht gültig sind, werden sie durch die Default-Werte aus der PPD-Datei ersetzt.
  • Für alle übrigen Optionen werden die Default-Werte für die jeweilige Warteschlange (insbesondere die Default-Werte aus der PPD-Datei) verwendet.

Mit dem Befehl
lpoptions -p "Warteschlange" -l
werden die möglichen Einstellungen angezeigt. Dabei sind die Werte, die bei einem Druckauftrag gemäss obiger Regeln verwendet werden, durch einen vorangestellten * gekennzeichnet.

So könnte bei Punkt 7. in obigem Beispiel der Benutzer "geeko" auf "erde" mit dem Befehl
lpoptions -p color -l
feststellen, welche Einstellungen für seine Druckaufträge für die Warteschlange "color" verwendet werden und dass das nicht zu den Einstellungen in seiner ~/.lpoptions-Datei passt, denn die Ausgabe wäre

Colors: Gray *Color
InkCartridge: Black *Color
Resolution: 150dpi *300dpi 600dpi

Vorschläge, um leichter den Überblick zu behalten:

  • Allgemeingültige Voreinstellungen möglichst nicht pro Rechner machen, sondern in der PPD-Datei die Default-Werte setzten - d.h.:
    • Möglichst keine /etc/cups/lpoptions-Dateien verwenden.
    • Möglichst nicht als "root" pro Rechner den lpoptions-Befehl verwenden, sondern auf dem CUPS-Server den lpadmin-Befehl.
      Vergl. oben den Punkt 1. mit den Punkten 2. und 3.
  • Einstellmöglichkeiten, die ungeeignet oder unerwünscht sind, manuell aus der PPD-Datei entfernen oder passende "Constraints" hinzufügen:
    • Um ungeeignete Einstellungen wie oben bei den Punkten 5. und 6. zu verhindern, kann "root" auf dem CUPS-Server die PPD-Dateien /etc/cups/ppd/mono.ppd und /etc/cups/ppd/color.ppd manuell wie folgt anpassen - siehe dazu den SDB-Artikel "Was ist ein ASCII-Editor":
 *DefaultColors: Gray
 *Colors Gray ...
 ...
 *DefaultInkCartridge: Black
 *InkCartridge Black ...
 ...
 *DefaultResolution: 600dpi
 *Resolution 150dpi ...
 *Resolution 300dpi ...
 *Resolution 600dpi ...
 
und

 *DefaultColors: Color
 *Colors Color ...
 ...
 *DefaultInkCartridge: Color
 *InkCartridge Color ...
 ...
 *DefaultResolution: 300dpi
 *Resolution 150dpi ...
 *Resolution 300dpi ...
 
    • Eine andere Lösung ist, passende "Constraints" hinzuzufügen. Die Constraints verhindern, dass ein Benutzer ungeeignete Kombinationen von Optionseinstellungen auswählen kann, aber oft fehlen solche Constraints in der PPD Datei. Die Beispiel-PPD-Datei könnte mit Constraints wie folgt aussehen: Die Constraints müssen jeweils in beiden Richtungen angegeben werden - z.B.: Wenn "*Colors Gray" gewählt wurde, dann ist "*InkCartridge Color" nicht mehr erlaubt und wenn "*InkCartridge Color" gewählt wurde, dann ist "*Colors Gray" nicht mehr erlaubt.
 *UIConstraints: *Colors Gray *InkCartridge Color
 *UIConstraints: *InkCartridge Color *Colors Gray
 *UIConstraints: *Colors Color *InkCartridge Black
 *UIConstraints: *InkCartridge Black *Colors Color
 *UIConstraints: *Colors Color *Resolution 600dpi
 *UIConstraints: *Resolution 600dpi *Colors Color
 *UIConstraints: *InkCartridge Color *Resolution 600dpi
 *UIConstraints: *Resolution 600dpi *InkCartridge Color
 ...
 *DefaultColors: Color
 *Colors Gray ...
 *Colors Color ...
 ...
 *DefaultInkCartridge: Color
 *InkCartridge Black ...
 *InkCartridge Color ...
 ...
 *DefaultResolution: 300dpi
 *Resolution 150dpi ...
 *Resolution 300dpi ...
 *Resolution 600dpi ...
 
    • Gewisse Werte können zwar für den Drucker möglich, aber dennoch für eine bestimmte Warteschlange unerwünscht sein - etwa hohe Auflösungen für eine "draft"-Warteschlange. Solche Werte sollten aus der PPD-Datei für die entsprechende Warteschlange entfernt werden. Wenn PPD-Dateien manuell verändert werden, ist danach mit
      rccups reload bzw. mit rccups restart
      der CUPS-Daemon zu veranlassen, die PPD-Dateien neu einzulesen.
  • Nach Veränderungen von Warteschlangen auf dem CUPS-Server die Benutzer informieren, wenn dadurch Einstellungen in den ~/.lpoptions-Dateien der Benutzer ungültig geworden sind. Das ist insbesondere dann der Fall, wenn Warteschlangen komplett gelöscht wurden oder wenn für eine bestehende Warteschlange eine andere PPD-Dateien verwendet wird - vergl. oben die Punkte 8. und 9.
    • Die Benutzer sollten für geänderte Warteschlangen mit dem Befehl
      lpoptions -x "Warteschlange"
      etwa in obigem Beispiel mit
      lpoptions -x mono
      den zugehörigen Eintrag aus ihrern ~/.lpoptions-Dateien entfernen und danach die persönlichen Einstellungen für die jeweilige Warteschlange neu vornehmen.
    • Für gelöschte Warteschlangen funktioniert lpoptions -x nicht. Entweder man ignoriert den ungültig gewordenen Eintrag, oder löscht ihn manuell aus der ~/.lpoptions-Datei. Siehe dazu den SDB-Artikel "Was ist ein ASCII-Editor".
    • Sollen die persönlichen Einstellungen komplett neu vorgenommen werden, dann sollte vorher mit
      rm ~/.lpoptions
      die ganze Datei gelöscht werden.

SDB:Drucker einrichten ab SuSE Linux 8.1

SDB:Einstellungen zum Ausdruck von ASCII-Texten mit CUPS