Drucken über FAUPRINT

Das RRZE stellt für die FAU den Windows-Druckserver FAUPRINT bereit, der zum authentifizierten Drucken auf den angeschlossenen Geräten genutzt werden kann.
Für RRZE-betreute Geräte stellt dies die empfohlene Art der Anbindung dar und ist auch für Linux-Systeme empfohlen.

Die Nutzung von FAUPRINT erlaubt das authentifizierte Drucken auf Geräten, für die Sie die entsprechenden Berechtigungen besitzen. Optional ist auch eine Abrechnung bzw. Verwaltung von Druckkontingenten über die Software Papercut möglich (aktuell nur für CIP-Pools / Studierende). Hierfür fallen allerdings zusätzliche Kosten an.
Kontaktieren Sie uns diesbezüglich gerne für weitere Informationen.

Die Authentifizierung erfolgt wahlweise per IdM-Benutzername und Kennwort oder Kerberos.

Vorraussetzungen

Pakete für Ubuntu 16.04/18.04

# one-liner
bash$ sudo DEBIAN_FRONTEND=noninteractive apt-get -y install samba-common samba python3-smbc smbclient

Kerberos

Vorraussetzung für die Nutzung der Kerberos-Authentifizierung ist eine funktionierende Grundkonfiguration von Kerberos für Ihr System. Falls noch nicht geschehen führen Sie bitte die entsprechenden Einrichtungsschritte wie beschrieben durch bevor Sie dieser Anleitung weiter folgen.

Achten Sie besonders darauf, dass auch die folgenden Anpassungen durchgeführt wurden:

bash$ cat /etc/krb5.conf
...
[domain_realm]
    fauprint.rrze.uni-erlangen.de = FAUAD.FAU.DE
    fauprint2.rrze.uni-erlangen.de = FAUAD.FAU.DE
    wisoprint.wiso.uni-erlangen.de = FAUAD.FAU.DE
    wisoprint2.wiso.uni-erlangen.de = FAUAD.FAU.DE
...

Desweiteren muss für das Drucken über Kerberos ein angepasster ksmb Backend-Handler installiert werden.
Der Folgende Handler ist für die Verwendung mit FAUPRINT angepasst und kann nicht als allgemeiner Handler verwendet werden.

bash$ sudo vi /usr/lib/cups/backend/ksmb

#!/bin/bash
if [ $# -eq 0 ]; then
 echo "network ksmb ""Unknown"" ""Windows Printer via SAMBA using Kerberos"""
 exit 0
fi

REALM=FAUAD.FAU.DE
LOGFILE=/var/log/cups/krb5-smb_log
LOGPREFIX="[$$]"

CUPSBACKENDPATH=${0%/*}

# Options: smbspool {job} {user} {title} {copies} {options} [filename]
BACKEND_JOB="$1"
BACKEND_USER="$2"
BACKEND_TITLE="$3"
BACKEND_COPIES="$4"
BACKEND_OPTIONS="$5"
BACKEND_USERID=$(id -u "$BACKEND_USER")

# fix handling in case multiple ccache files are available
# Use newest as authentication source
KRB5FILE=$(find /tmp/ -mindepth 1 -maxdepth 1 -name "krb5cc_*" -user "$BACKEND_USER" -printf "%A@ %p\n" | sort -n | tail -n 1 | cut -d' ' -f2-)

if [ -z "$KRB5FILE" ]; then
 echo "$LOGPREFIX: ERROR: No valid credential cache found" >> "$LOGFILE"
 echo "$LOGPREFIX: exit 2 (CUPS_BACKEND_AUTH_REQUIRED)" >> "$LOGFILE"
 exit 2 # CUPS_BACKEND_AUTH_REQUIRED
fi
export KRB5CCNAME="FILE:$KRB5FILE"

# Dirty hack: Required if cross-realm ticket does not (yet) exist
DEVICE_URI_NOPREFIX="${DEVICE_URI#*//}"
PRINC="${DEVICE_URI_NOPREFIX%%/*}"
kvno cifs/$PRINC@$REALM >> "$LOGFILE"

# DEVICE_URI *must* begin with "smb://" otherwise odd errors will occur
export DEVICE_URI="smb://${DEVICE_URI_NOPREFIX}"

# Settings can be passed from backend to scheduler using
# stderr. Look here for details ("Communicating with the Scheduler"):
# https://www.cups.org/doc/api-filter.html
BACKEND_STDERR=$(${CUPSBACKENDPATH}/smb "$BACKEND_JOB" "$BACKEND_USER" "$BACKEND_TITLE" "$BACKEND_COPIES" "$BACKEND_OPTIONS" 2> /dev/stdout > /dev/null)
BACKEND_EXIT=$?

echo "$BACKEND_STDERR" | sed -e s+^+"$LOGPREFIX: stderr: "+ >> "$LOGFILE"

# Prevent smb backend from re-enabling username/password authentication
BACKEND_STDERR=$(echo "$BACKEND_STDERR" | sed 's/^ATTR: auth-info-required=.*/ATTR: auth-info-required=negotiate/')

echo "$BACKEND_STDERR" > /dev/stderr
exit "$BACKEND_EXIT"

Zuletzt nicht vergessen, die Rechte noch korrekt zu setzen.

bash$ sudo chmod 700 /usr/lib/cups/backend/ksmb

Konfiguration

Verfügbare Drucker finden

Alle verfügbaren Drucken verteilen sich über verschiedene Druckserver, die einzeln abgefragt werden müssen.

Das RRZE betreibt zur Lastverteilung mehrere Druckserver:

  • fauprint.rrze.uni-erlangen.de
  • fauprint2.rrze.uni-erlangen.de
  • wisoprint.wiso.uni-erlangen.de
  • wisoprint2.wiso.uni-erlangen.de

Um eine Liste der verfügbaren Drucker zu erhalten können Sie eine entsprechende Abfrage an den FAUPRINT Druckdienst absetzen.

# mit Kerberos
bash$ smbclient -L fauprint.rrze.uni-erlangen.de -k
Domain=[FAUAD] OS=[Windows Server 2012 R2 Standard 9600] Server=[Windows Server 2012 R2 Standard 6.3]
Sharename Type Comment
 --------- ---- -------
 ADMIN$ Disk Remote Admin
...

# ohne Kerberos
bash$ smbclient -L fauprint.rrze.uni-erlangen.de -U FAUAD/$USER
Enter FAUAD/$USER's password: 
Domain=[FAUAD] OS=[Windows Server 2012 R2 Standard 9600] Server=[Windows Server 2012 R2 Standard 6.3]
Sharename Type Comment
 --------- ---- -------
 ADMIN$ Disk Remote Admin
...

Suchen Sie in der Ausgabe nach Freigaben mit dem Typ Printer.
Diese können Sie dann im nächsten Schritt zur Bildung des Druckpfades verwenden.

Drucker hinzufügen

Informationen zur Einrichtung von CUPS Druckern inkl einer Anleitung, um den richtigen Treiber zu finden, erhalten Sie unter CUPS Druckereinrichtung mit lpadmin

Im Folgenden sind einige Beispiele aufgeführt, um den Beispieldrucker aus oben genannter Dokumentation mit und ohne Kerberos-Authentifizierung einzurichten.
Der Unterschied besteht jeweils in der Einstellung für auth-info-required und dem verwendeten Backend Handler (jeweils fett hervorgehoben).

Ersetzen Sie ggf. im Druckpfad (Parameter -v) den Drucker durch Ihren gewünschten Drucker aus der Ausgabe der smbclient Abfrage (siehe oben „Verfügbare Drucker finden“)

Beispiel 1

# mit Kerberos
bash$ sudo /usr/sbin/lpadmin \
-p rrze-lexmark-mx610de \
-o 'printer-is-shared=false' \
-o 'auth-info-required=none' \
-o 'media=A4' \
-o 'sides=two-sided-long-edge' \
-o 'Two-Sided Printing=DuplexNoTumble' \
-E \
-v "ksmb://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

# ohne Kerberos
bash$ sudo /usr/sbin/lpadmin \
-p rrze-lexmark-mx610de \
-o 'printer-is-shared=false' \
-o 'auth-info-required=username,password' \
-o 'media=A4' \
-o 'sides=two-sided-long-edge' \
-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 2

# mit Kerberos
bash$ sudo /usr/sbin/lpadmin \
-p rzpr-2035-lex-cs510de \
-o 'printer-is-shared=false' \
-o 'auth-info-required=none' \
-o 'media=A4' \
-o 'sides=two-sided-long-edge' \
-o 'Two-Sided Printing=DuplexNoTumble' \
-E \
-v "ksmb://fauprint2.rrze.uni-erlangen.de/rzpr-2035-lex-cs510de" \
-D "Lexmark CS510de" \
-L "RRZE, 2.035" \
-m openprinting-ppds:0/ppd/openprinting/Lexmark/Lexmark_CS510_Series.ppd


# ohne Kerberos
bash$ sudo /usr/sbin/lpadmin \
-p rzpr-2035-lex-cs510de \
-o 'printer-is-shared=false' \
-o 'auth-info-required=username,password' \
-o 'media=A4' \
-o 'sides=two-sided-long-edge' \
-o 'Two-Sided Printing=DuplexNoTumble' \
-E \
-v "smb://fauprint2.rrze.uni-erlangen.de/rzpr-2035-lex-cs510de" \
-D "Lexmark CS510de" \
-L "RRZE, 2.035" \
-m openprinting-ppds:0/ppd/openprinting/Lexmark/Lexmark_CS510_Series.ppd