CUPS Druckereinrichtung mit lpadmin

Neben den verschiedenen grafischen Hilfsmitteln können CUPS Drucker auch vollständig über die Kommandozeile eingerichtet werden. Diese Art der Einrichtung lässt sich besser dokumentieren und nachstellen als die Nutzung der sich häufig ändernden grafischen Werkzeuge. Außerdem erleichtert dies auch die automatische Verteilung der Druckerkonfiguration über eine Konfigurationsverwaltung wie Saltstack oder Ähnliches.

Für betreute CIP-Pools oder Workstations können Druckerkonfigurationen nach Ihren Vorgaben auch automatisiert verteilt werden.
Kontaktieren Sie uns gerne für weitere Informationen.

Vorraussetzungen

Pakete für Ubuntu 16.04/18.04

# one-liner 
bash$ sudo DEBIAN_FRONTEND=noninteractive apt-get install cups-client

Verwendete Kommandos

lpadmin    https://www.cups.org/doc/man-lpadmin.html
lpinfo     https://www.cups.org/doc/man-lpinfo.html
lpoptions  https://www.cups.org/doc/man-lpoptions.html

Konfiguration

Beschreibung der Kommandos für verschiedene Einsatzszenarios.

Beispielhaft soll der Drucker Lexmark MX610de per FAUPRINT eingerichtet werden.

Generischen Druckertreiber finden/installieren

Um einen passenden Treiber im System zu finden kann man eine entsprechende Abfrage absetzen, wobei man den Hersteller und die Modellbezeichnung des Druckers als Suchparameter angiebt.
Das Ergebnis ist eine Liste der passenden Treiber bestehend aus Pfad zur PPD-Datei und der Modellbezeichung.
Da es sich bei unserem Beispiel-Modell um einen Lexmark MX610de handelt könnten wir den letzten Treiber aus der Liste wählen und den angegebnen PPD-Pfad in der weiteren Einrichtung verwenden.

bash$ lpinfo --make-and-model "Lexmark MX610" -m
foomatic-db-compressed-ppds:0/ppd/foomatic-ppd/Lexmark-MX610-Postscript.ppd Lexmark MX610 Foomatic/Postscript
openprinting-ppds:0/ppd/openprinting/Lexmark/Lexmark_MX610_Series.ppd Lexmark MX610 Series
openprinting-ppds:1/ppd/openprinting/Lexmark/Lexmark_MX610_Series.ppd Lexmark MX610 Series
openprinting-ppds:2/ppd/openprinting/Lexmark/Lexmark_MX610_Series.ppd Lexmark MX610 Series
openprinting-ppds:3/ppd/openprinting/Lexmark/Lexmark_MX610_Series.ppd Lexmark MX610 Series
foomatic-db-compressed-ppds:0/ppd/foomatic-ppd/Lexmark-MX610de-Postscript.ppd Lexmark MX610de Foomatic/Postscript

Herstellerspezifischen Druckertreiber finden/installieren

Sollte kein passender Treiber verfügbar sein, oder der vorhandene Treiber nicht die nötige Funktionalität bieten, kann man oft auf den Webseiten des Druckerherstellers auch für das jeweilige Modell spezifische Linux-Treiber herunterladen.
Dabei ist es oft nicht wichtig genau die richtige Software für eine bestimmte Distribution zu wählen. Es muss normalerweise sogar gar keine Software installiert werden.
Entscheidend ist irgendwie an die PPD-Datei zu kommen!

Für den Lexmark MX610de findet sich zB auch ein passender Treiber auf der Lexmark Homepage, den man nach dem extrahieren aus dem heruntergeladenen Archiv im System installieren und verwenden kann. Nach erfolgreicher Installation liefert die Abfrage liefert unter den schon bekannten Optionen auch den neu installierten Treiber.
Diesen verwenden wir nun in der weiteren Einrichtung des Druckers.

bash$ sudo cp /tmp/Lexmark_MX610_Series.ppd /usr/share/cups/model/
bash$ sudo chmod 644 /usr/share/cups/model/Lexmark_MX610_Series.ppd
bash$ lpinfo --make-and-model "Lexmark MX610" -m
...
Lexmark_MX610_Series.ppd Lexmark MX610 Series
...

Fehlende Druckerfilter installieren

Dieses Problem tritt erst nach der Einrichtung des Druckers auf!
Führen Sie zunächst die Schritte unter „Drucker hinzufügen“ aus und kehren Sie zur Fehlerbehandlung ggf. hierher zurück.

Manchmal benötigen die Druckertreiber des Herstellers noch zusätzlich Filter zur Verarbeitung der Druckaufträge. Hinweise auf fehlende Filter geben häufig die Logdatei unter /var/log/cups/error_log oder auch die Statusanzeige des Druckers in den entsprechenden grafischen Benutzeroberflächen.

In diesem Fall war der fehlende Filter ebenfalls im heruntergeladenen Archiv des Herstellers enthalten und konnte nach dem Entpacken wie folgt nachinstalliert werden.

# Check the logfile for recent filter errors
bash$ sudo tail -n50 /var/log/cups/error_log | grep -i filter
E [03/May/2018:14:30:59 +0200] rrze-lexmark-mx610de: Datei \"/usr/lib/cups/filter/fax-pnh-filter\" nicht verfügbar: No such file or directory
E [03/May/2018:14:30:59 +0200] rrze-lexmark-mx610de: Datei \"/usr/lib/cups/filter/CommandFileFilterG2\" nicht verfügbar: No such file or directory
E [03/May/2018:14:31:56 +0200] rrze-lexmark-mx610de: Datei \"/usr/lib/cups/filter/CommandFileFilterG2\" nicht verfügbar: No such file or directory

# Install previously extracted filters
bash$ sudo cp /tmp/CommandFileFilterG2 /usr/lib/cups/filter/
bash$ sudo chmod 755 /usr/lib/cups/filter/CommandFileFilterG2

bash$ sudo cp /tmp/fax-pnh-filter /usr/lib/cups/filter/
bash$ sudo chmod 755 /usr/lib/cups/filter/fax-pnh-filter2

Der Drucker sollte jetzt funktionieren.

Drucker hinzufügen

Nach Auswahl des entsprechenden PPD-Pfades kann der Drucker nun im System angelegt werden.
Dabei können auch diverse Standardeinstellungen gleich mit angegeben werden.

Beispiel mit generischem Foomatic Treiber:

bash$ sudo /usr/sbin/lpadmin \
-p rrze-lexmark-mx610de \
-o 'printer-is-shared=false' \
-o 'auth-info-required=none' \
-o 'media=A4' \
-o 'Two-Sided Printing=DuplexNoTumble' \
-E \
-v "smb://fauprint.rrze.uni-erlangen.de/rzpr-2035-lex-ms610de" \
-D "Lexmark MX610de" \
-L "RRZE, R2.035" \
-m foomatic-db-compressed-ppds:0/ppd/foomatic-ppd/Lexmark-MX610de-Postscript.ppd

Beispiel mit Treiber vom Hersteller:

bash$ sudo /usr/sbin/lpadmin \
-p rrze-lexmark-mx610de \
-o 'printer-is-shared=false' \
-o 'auth-info-required=none' \
-o 'media=A4' \
-o 'Two-Sided Printing=DuplexNoTumble' \
-E \
-v "smb://fauprint.rrze.uni-erlangen.de/rzpr-2035-lex-ms610de" \
-D "Lexmark MX610de" \
-L "RRZE, R2.035" \
-m Lexmark_MX610_Series.ppd

Tests

Prüfen der Einstellungen

Anzeige der Einstellungen in einer Zeile:

bash$ lpoptions -p rrze-lexmark-mx610de
auth-info-required=negotiate copies=1 device-uri=ksmb://fauprint.rrze.uni-erlangen.de/rzpr-2035-lex-ms610de finishings=3 job-cancel-after=10800 job-hold-until=no-hold job-priority=50 job-sheets=none,none marker-change-time=0 number-up=1 printer-commands=ReportLevels,AutoConfigure printer-info='Lexmark MX610de' printer-is-accepting-jobs=true printer-is-shared=false printer-location='RRZE, R2.035' printer-make-and-model='Lexmark MX610 Series' printer-state=3 printer-state-change-time=1525351551 printer-state-reasons=none printer-type=10522836 printer-uri-supported=ipp://localhost/printers/rrze-lexmark-mx610de

Alternativ geht es auch etwas ausführlicher bzw. mit Anzeige von spezifischeren Einstellungen des Druckers:

bash$ lpoptions -p rrze-lexmark-mx610de -l
PageSize/Media Size: Letter Legal 8.5x13.4028 B5 *A4 Executive A5 A6 FanFoldGermanLegal Statement EnvMonarch Env9 Env10 EnvDL EnvC5 ISOB5 OthEnv Custom.WIDTHxHEIGHT
InputSlot/Media Source: *Tray1 Tray2 Tray3 Tray4 MultipurposeFeeder ManualPaper ManualEnv
OptDuplex/Duplexer: False *True
OptFlash/Flash: *False True
OptTray2/Tray 2: *False True
OptTray3/Tray 3: *False True
OptTray4/Tray 4: *False True
OptMultipurposeFeeder/Multipurpose Feeder: False *True
OptStapler/Staple: *False True
PnH/Print and Hold: *False Verify Repeat Reserve Custom.PASSCODE
FaxNumber/Fax Number: *False Custom.STRING
Duplex/Duplex: None *DuplexNoTumble DuplexTumble
Collate/Collation: *True False
SepPages/Separator Pages: *PrinterS NoneF Jobs Copies Pages
SepSource/Separator Source: *PrinterS Tray1 Tray2 Tray3 Tray4 MultipurposeFeeder
OutputBin/Output Bin: *PrinterS StandardBin
StapleJob/Staple Job: *PrinterS FalseM TrueM
LXResolution/Resolution: 1200dpi 604x600dpi *602x600dpi 600dpi
Halftone/Halftone: *PrinterS FalseF TrueF
TonerDarkness/Toner Darkness: *PrinterS 1 2 3 4 5 6 7 8 9 10
LexPixelBoost/Pixel Boost: *PrinterS False Fonts Horizontally Vertically BothDirections
LexMirror/Mirror: True *False
ColorMode/Color Mode: *PrinterS TrueM
LexBrightness/Brightness: PrinterS -6 -5 -4 -3 -2 -1 *0 +1 +2 +3 +4 +5 +6
LexContrast/Contrast: PrinterS *0 1 2 3 4 5
GrayCorrection/Gray Correction: *PrinterS Manual FalseM
MediaType/Paper Type: *PrinterS Plain Colored Transparency Card Labels Bond Letterhead Preprint RoughEnvelope Envelope Recycled Light Heavy Rough Custom1 Custom2 Custom3 Custom4 Custom5 Custom6
LexBlankPage/Print Blank Pages: *PrinterS False True