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=GrayundInkCartridge=Black - Für "color"
Colors=ColorundInkCartridge=Color
- Für "mono"
- 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,300dpiund600dpi. - Für "color" funktionieren nur die Auflösungen
150dpiund300dpi. 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.
- Für "mono" funktionieren die Auflösungen
- Insbesondere bei Farb-Tintenstrahldruckern kann ein Wechsel zwischen verschiedenen Druckmodi die Umstellung mehrerer Optionen erfordern.
- 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:
- Ä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.ppdauf 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.
- 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/lpoptionsauf 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.
- 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/lpoptionsauf 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.
- Ä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~/.lpoptionsgespeichert:
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.
- Ä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~/.lpoptionsgespeichert:
Dest mono Colors=Color Die Warteschlange "mono" ist nun für "geeko" auf "erde" sinnlos eingestellt, denn nun werden in sich widersprüchliche WerteColors=ColorundInkCartridge=Blackverwendet.
- Ä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.
- Ä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=1200dpiund Optionen wie z.B.Foo=Barzu 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.
- Löscht "root" auf "sonne" die Warteschlange "mono" mit
lpadmin -x mono
so wird dadurch keine der Eintragungen in den oben genanntenlpoptions-Dateien gelöscht, sondern die ungültig gewordenen Eintragungen bleiben unverändert bestehen. - 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 denlpoptions-Dateien für die neue Warteschlange "mono" gültig, denn entweder stimmt der Optionsname nicht mehr überein (ColoursstattColors) und die Option wird ganz ignoriert, oder der Optionswert stimmt nicht mehr überein (300x300dpiund600x600dpistatt150dpi,300dpiund600dpi) 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 Befehllpoptions -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 Befehllpoptions -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 denlpadmin-Befehl.
Vergl. oben den Punkt 1. mit den Punkten 2. und 3.
- Möglichst keine
- 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.ppdund/etc/cups/ppd/color.ppdmanuell wie folgt anpassen - siehe dazu den SDB-Artikel "Was ist ein ASCII-Editor":
- Um ungeeignete Einstellungen wie oben bei den Punkten 5. und 6. zu verhindern, kann "root" auf dem CUPS-Server die PPD-Dateien
*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 reloadbzw. mitrccups restart
der CUPS-Daemon zu veranlassen, die PPD-Dateien neu einzulesen.
- 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
- 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 mitlpoptions -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 -xnicht. 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.
- Die Benutzer sollten für geänderte Warteschlangen mit dem Befehl
SDB:Drucker einrichten ab SuSE Linux 8.1
SDB:Einstellungen zum Ausdruck von ASCII-Texten mit CUPS
Keywords: drucken | drucker | cups | einstellungen | optionen

