SDB:Drucken im TCP/IP-Netzwerk
aus openSUSE, der freien Wissensdatenbank
Inhaltsverzeichnis |
Anliegen:
Sie wollen
- entweder im TCP/IP-Netzwerk auf einem Drucker, der an einem anderen Rechner lokal angeschlossen ist, drucken,
- oder Sie wollen via TCP/IP-Netzwerk auf einem Drucker, der an einer sog. Printserver-Box angeschlossen ist, drucken,
- oder Sie wollen auf einem Netzwerkdrucker mit eigenem TCP/IP-Netzwerkanschluß drucken.
Dabei wollen Sie die Druckjobs mit einem Druckerfilter filtern lassen.
Vorgehen:
Ab SuSE Linux 8.0 siehe das "Referenz"-Handbuch.
Bezeichnungen:
Ein anderer Rechner im TCP/IP-Netzwerk, an dem der Drucker lokal angeschlossen ist, wir im folgenden "Print-Server" genannt, im Unterschied zu einer "Printserver-Box", also einem kleinen Gerät mit TCP/IP-Netzwerkanschluß einerseits und lokaler Anschlußmöglichkeit für den Drucker andererseits. Ein Drucker, der selbst über einen TCP/IP-Netzwerkanschluß verfügt, wird im folgenden als "Netzwerkdrucker" bezeichnet und der Rechner, von dem der Druckaufrag gestartet wird, ist der "Client".
Die einzelnen Fälle:
Die Unterschiede liegen in der Filterung der zu druckenden Datei, denn irgendwo muß die Datei in das Format umgewandelt werden, das der Drucker letztlich auch drucken kann - also in die Druckersprache, die der Drucker direkt spricht (PostScript, HP PCL, ESC/P). Dies erledigt der apsfilter.
Bei Netzwerkdruckern und Printserver-Boxen muß daher der apsfilter schon auf dem Client laufen und dessen Ausgabe wird dann an den Netzwerkdrucker bzw. die Printserver-Box weitergeleitet.
Bei Druckern an einem Print-Server kann der apsfilter entweder auf dem Client laufen, oder auf dem Print-Server.
Es gibt also folgende Möglichkeiten:
- Netzwerkdrucker mit Filterung beim Client:
- Client: Datei -apsfilter-> Druckerdaten
- Client: Druckerdaten -remote-> Netzwerkdrucker
- Printserver-Box mit Filterung beim Client:
- Client: Datei -apsfilter-> Druckerdaten
- Client: Druckerdaten -remote-> Printserver-Box
- Printserver-Box: Druckerdaten -> Drucker
- Drucker an einem Print-Server mit Filterung beim Client:
- Client: Datei -apsfilter-> Druckerdaten
- Client: Druckerdaten -remote-> Print-Server
- Print-Server: Druckerdaten -> Drucker
- Drucker an einem Print-Server mit Filterung beim Print-Server:
- Client: Datei -remote-> Print-Server
- Print-Server: Datei -apsfilter-> Druckerdaten
- Print-Server: Druckerdaten -> Drucker
Dort, wo "-remote->" steht, wird eine Druckerwarteschlange benötigt, die die Daten nur weiterleitet (sog. "Printer forwarding "), aber nicht filtert.
Dort wo "-apsfilter->" steht, wird eine Druckerwarteschlange benötigt, die die Daten filtert. Ist die Filterung beim Client, so ist diese Filter-Warteschlange ein sog. "Prefilter" für die anschließende Printer forwarding queue. Ist die Filterung beim Print-Server, so ist die Filter-Warteschlange eine der normalen Warteschlangen, die auf dem Print-Server eingerichtet sind (etwa lp oder ascii).
Voraussetzungen:
Der Drucker muß von SuSE Linux unterstützt sein, da der Prefilter die druckerspezifischen Daten auf dieselbe Weise wie für einen lokal angeschlossenen Drucker erzeugt.
- Netzwerkgrundfunktionen - d.h. vom Client muß
ping Print-Server
bzw.ping Printserver-Box
bzw.ping Netzwerkdrucker
funktionieren. - Falls ein Print-Server verwendet wird, muß dieser den Namen des Clients auflösen können (dazu muß zumindest die IP-Adresse und der Name des Clients in der Datei
/etc/hostsauf dem Print-Server eingetragen sein) - d.h. vom Print-Server mußping Client-Name
funktionieren. - Falls ein Print-Server verwendet wird, muß der Drucker korrekt funktionieren, wenn man direkt vom Print-Server aus druckt.
Konfiguration der Printer forwarding queue auf dem Client:
Melden Sie sich als Benutzer root auf einer Textkonsole an. Falls Sie ein graphisches Login verwenden, wechseln Sie vorher mit [Strg]+[Alt]+[F2] auf eine Textkonsole. (Mit [Alt]+[F7] kommen Sie zurück zur graphischen Oberfläche.)
- Geben Sie ein entweder:
/var/lib/apsfilter/SETUP
oderlprsetup - Drücken Sie die ENTER-Taste, damit Sie das Menü APSFILTER SETUP erhalten.
- Wählen Sie nacheinander ENTRY , DEVICE und REMOTE
- Geben Sie die IP-Adresse des Netzwerkdruckers bzw. der Printserver-Box bzw. des Print-Servers ein.
- Geben Sie die Bezeichnung der Warteschlange auf dem Netzwerkdrucker bzw. auf der Printserver-Box bzw. auf dem Print-Server ein.
Bei Netzwerkdruckern bzw. Printserver-Boxen finden Sie die möglichen Warteschlangennamen in der Dokumentation des Gerätes.
Bei einem Print-Servers ist es eine der Warteschlangen, die auf dem Print-Server eingerichtet sind (etwa lp oder ascii). - Wählen Sie ADD
- Drücken Sie die ENTER-Taste, damit es weitergeht
- Wählen Sie nacheinander RETURN und EXIT
Nun haben Sie auf dem Client die Warteschlange "remote".
Nach Neustarten des Druckerdämons auf dem Client mitrclpd stop
undrclpd start
steht die Warteschlange "remote" auf dem Client zur Verfügung.
Mit dem Befehllpr -Premote Datei
wird die Datei ohne Filterung an den Netzwerkdrucker bzw. an die Printserver-Box geschickt.
Hängt der Drucker jedoch an einem Print-Server, so ist auf dem Print-Server in der Datei /etc/hosts.lpd die IP-Adresse des Clients einzutragen.
Nach Neustarten des Druckerdämons auf dem Print-Server nimmt dieser die Druckaufträge von dem eingetragenen Client an.
Hängt der Drucker an einem Print-Server mit Filterung beim Print-Server, so ist die Konfiguration hiermit abgeschlossen.
Konfiguration des Prefilters auf dem Client:
- Starten Sie
lprsetup - Drücken Sie die ENTER-Taste.
- Wählen Sie nacheinander ENTRY , DEVICE und PREFILTER
- Wählen Sie die eben eingerichtete Warteschlange "remote".
- Wählen Sie PRINTER
- Wählen Sie aus POSTSCRIPT , HEWLETT-PACKARD , OTHER oder FREEDEF den passenden Eintrag aus
- Wählen Sie COMMIT
- Scrollen Sie in der folgenden Liste, bis Sie den passenden Ghostscript-Treiber oder die passende Parameterdatei gefunden haben und wählen Sie dann OK
- Geben Sie die korrekte Auflösung an und wählen Sie dann OK
- Wählen Sie nacheinander RETURN und PAPER
- Wählen Sie die passende Papiergröße und dann OK
- Wählen Sie COLOR
- Wählen Sie MONO oder COLOR und wählen Sie dann OK
- Wählen Sie ADD
Sie erhalten eine Ausgabe, welche Prefilter-Warteschlangen bei der Apsfilter-Konfiguration auf Ihrem System angelegt wurden. Notieren Sie sich, welche Prefilter-Warteschlangen angelegt wurden. Wählen Sie dann OK - Drücken Sie die ENTER-Taste, damit es weitergeht
- Wählen Sie nacheinander RETURN und EXIT
Nach Neustarten des Druckerdämons auf dem Client mitrclpd stop
undrclpd start
stehen die neuen Prefilter-Warteschlangen auf dem Client zur Verfügung.
Mit dem Befehllpr -Pprefilter-warteschlange Datei
wird die Datei in die angegebene "prefilter-warteschlange" geschickt, dort durch den apsfilter in Druckerdaten umgewandelt und diese werden über die "remote"-Warteschlange an den Netzwerkdrucker bzw. an die Printserver-Box bzw. an den Print-Server weitergeschickt.
Hintergrundinformation:
Die Printer forwarding queue und die Prefilter-Warteschlange können nicht zu einer einzigen Warteschlange zusammengefasst werden, denn der Druckerdämon lpd (aus dem Paket "lprold") ignoriert bei entfernten Druckwarteschlangen Filterangaben in der Datei /etc/printcap - also ist für die Vorfilterung eine eigene Warteschlange nötig.
Bei Problemen:
Konfiguration des Prefilters prüfen
Schließen Sie den Drucker über die parallele Schnittstelle direkt an der ersten parallelen Schnittstelle am Rechner an und konfigurieren Sie den Drucker nur zum Test als lokalen Drucker, um Probleme bzgl. des Netzes auszuschließen. Gehen Sie dazu gemäß dem Supportdatenbank-Artikel SDB:Drucker einrichten vor. Wenn der Drucker so funktioniert, kennen Sie den passenden Ghostscript-Treiber und die anderen Parameter für die Konfiguration des Prefilters. Nun können Sie den Drucker gemäß obiger Anleitung im Netzwerk einrichten.
Netzwerkdrucker oder Printserver-Box arbeitet nicht zuverlässig
Es gibt bisweilen Probleme mit dem Druckerspooler, der auf der Printserver-Box bzw. dem Netzwerkdrucker läuft. Insbesondere, wenn von mehreren Clients gleichzeitig Druckaufträge an die Printserver-Box oder den Netzwerkdrucker geschickt werden, kann der Druckerspooler dort durcheinander kommen. Da es am Druckerspooler in der Printserver-Box bzw. im Netzwerkdrucker liegt, kann man fast nichts machen. Es ist im allgemeinen empfehlenswert, den Drucker direkt an einen Print-Server anzuschließen.
Dennoch kann folgendes Vorgehen Besserung bringen:
Ein einziger Rechner dient als Print-Server für die Printserver-Box bzw. den Netzwerkdrucker. Alle Clients schicken die Druckaufräge an diesen Print-Server und nur dieser Print-Server übernimmt das Spooling der Druckaufräge und schickt sie an die Printserver-Box bzw. den Netzwerkdrucker weiter.
Die Filterung kann auch hier beim Client oder auf dem Print-Server erfolgen.
Es gibt also folgende Möglichkeiten:
- Netzwerkdrucker am Print-Server mit Filterung beim Client:
- Client: Datei -apsfilter-> Druckerdaten
- Client: Druckerdaten -remote-> Print-Server
- Print-Server: Druckerdaten -remote-> Netzwerkdrucker
- Printserver-Box am Print-Server mit Filterung beim Client:
- Client: Datei -apsfilter-> Druckerdaten
- Client: Druckerdaten -remote-> Print-Server
- Print-Server: Druckerdaten -remote-> Printserver-Box
- Printserver-Box: Druckerdaten -> Drucker
- Netzwerkdrucker am Print-Server mit Filterung beim Print-Server:
- Client: Datei -remote-> Print-Server
- Print-Server: Datei -apsfilter-> Druckerdaten
- Print-Server: Druckerdaten -remote-> Netzwerkdrucker
- Printserver-Box am Print-Server mit Filterung beim Print-Server:
- Client: Datei -remote-> Print-Server
- Print-Server: Datei -apsfilter-> Druckerdaten
- Print-Server: Druckerdaten -remote-> Printserver-Box
- Printserver-Box: Druckerdaten -> Drucker
Die Konfiguration der einzelnen Warteschlangen erfolgt analog zu oben.
Script zum Test eines entfernten lpd
Das folgende Script kann verwendet werden, um zu testen, ob an einen entfernten Druckerspooler Druckaufträge geschickt werden können.
Aufgerufen wird es mit
Name_des Scripts Remote_Host Remote_Queue Timeout ; echo "Exit: $?"
wobei Timeout etwa 1 bis 10 (als 1 bis 10 Sekunden) sein sollte.
Ist Exit: 0 akzeptiert die Remote_Queue auf dem Remote_Host Druckaufträge.
Ist Exit: 1 ist der Remote_Host nicht einmal per ping erreichbar.
Ist Exit: 2 akzeptiert die Remote_Queue auf dem Remote_Host keine Druckaufträge, dann wird aber der Remote_Queue-Status ausgegeben.
Ist Exit: 2 und wird kein Remote_Queue-Status ausgegeben, ist davon auszuehen, daß auf dem Remote_Host entweder kein lpd läuft, oder zumindest daß der lpd nicht unter dem Standardport 515 erreichbar ist (z.B. weil eine Firewall das verhindert).
#! /bin/bash # test_remote_lpr sends RFC1179 commands to the remote host $1 and queue $2 # and tests the output # Timeout is set to $3 sec. # Exits: 0 doesn't seem to have a problem # 1 the host $1 is unreachable # 2 queue does not exist or does not accept the print jobs # or there may be no lpd running on the host $1 # if no queue status was printed # Call this script using # <name_of_this_script> <remote_host> <remote_queue> 5 ; echo "Exit: $?" # #set -x HOST="$1" QUEUE="$2" TIMEOUT="$3" ping -c 1 -w $TIMEOUT $HOST || exit 1 # Unreachable # Test the queue # use source port 721 and destination port 515 i.e. the remote lpd port # "\002$QUEUE\n" is a request to receive a new priner job for $QUEUE # the remote lpd sends '\000' if it accepts the request # after $TIMEOUT netcat closes the connection RETURN=$(echo -en "\002$QUEUE\n" | netcat -w $TIMEOUT -p 721 $HOST 515 |\ tr '\000' '0') [ "$RETURN" = "0" ] && exit 0; # Queue $QUEUE on host $HOST accepts print jobs # If $QUEUE does not accept jobs print $QUEUE status (long format) # use source port 722 because the request above via port 721 may not # have timed out yet and therefore another source port is used echo -e "\004$QUEUE" | netcat -w $TIMEOUT -p 722 $HOST 515 exit 2;
Keywords: drucken | drucker | netzwerkdrucker

