Using SambaRobert Eckstein, David Collier-Brown, Peter Kelly1st Edition November 1999 1-56592-449-5, Order Number: 4495 416 pages, $34.95 |
7.2 Drucken auf Windows-Client-Drucker
Wenn du Drucker an Clients angeschlossen hast, die unter Windows 95/98 oder NT 4.0 laufen, können diese ebenfalls von Samba aus betrieben werden. Samba ist mit einem Tool namens smbprint ausgestattet, das für das Spoolen von Druckjobs auf Windows-basierten Druckern verwendet werden kann. Nun, um dies zu benützen, musst du den Drucker als eine freigegebene Ressource auf der Client-Maschine einrichten. Wenn du das nicht schon getan hast, kannst du das vom Drucker-Fenster aus zurücksetzen. Das Drucker-Fenster erreichst du vom Start-Button aus, siehe Figur 7.7.
Figur 7.7: Das Drucker-Fenster
Wähle einen Drucker, der lokal angeschlossen ist (unserer ist z.B. der Canon Drucker), drück die rechte Maustaste, öffne ein Menü und wähle Freigabe. Das wird dir den Freigabe-Tab in den Drucker-Eigenschaften anbieten, siehe Figur 7.8. Wenn du den Drucker jedem auf deinem LAN wie dem Windows Gast-User zur Verfügung stellen willst, gib ein leeres Passwort ein.
Figur 7.8: Der Freigabe-Tab des Druckers
Sobald du diese Arbeit gemacht hast, kannst du deinen Drucker zur Liste der Standard-Drucker hinzugeben, und Samba kann ihn allen anderen PCs in der Arbeitsgruppe zur Verfügung stellen. Damit die Installation auf Unix einfacher wird, enthält die Samba-Distribution zwei Muster-Skripts: smbprint und smbprint.sysv. Das erste arbeitet mit BSD-artigen Druckern; das zweite ist für System V Drucker vorgesehen.
7.2.1 BSD Drucker
Es gibt zwei Schritte, die du brauchst, wenn ein BSD Unix einen Remote-Drucker erkennen soll:
Setz für den Drucker einen Eintrag in die Datei /etc/printcap (oder äquivalent).
Stell eine Konfigurationsdatei für den Drucker in das Verzeichnis /var/spool.
Editiere zuerst deine Datei /etc/printcap und füge einen Eintrag für den Remote-Drucker hinzu. Beachte, dass der Input Filter (
if
)-Eintrag auf das smbprint-Programm zeigen muss, wenn die Maschine unter Windows 95/98 läuft. Die folgende Reihe Zeilen wird auf einer Linux-Maschine erstellt, z.B.:laserjet:\ :sd=/var/spool/lpd/laser:\# spool directory
:mx#0:\# maximum file size (none)
:sh:\# surpress burst header (no)
:if=/usr/local/samba/bin/smbprint:# text filter
Nachher musst du eine Konfigurationsdatei im Spool-Verzeichnis erstellen, das du oben mit dem Parameter
sd
festlegtest. (Du wirst das Verzeichnis vielleicht erstellen müssen.) Die Datei muss den Namen .config tragen und sollte folgende Information enthalten:
Die letzten zwei Parameter wurden im Freigabe-Dialog für die gesuchte Ressource auf der Windows-Maschine eingerichtet. In diesem Fall würde die Datei .config drei Zeilen haben:
server = phoenix service = CANON password = ""Mach nach dieser Arbeit ein Reset auf der Sambaserver-Maschine und versuche mit irgendeinem Standard Unix-Programm auf dem Drucker zu drucken.
7.2.2 System V Drucker
Druck-Jobs von einem System V Unix zu senden ist ein bisschen einfacher. Hier musst du das Skript smbprint.sysv im Verzeichnis /usr/local/samba/examples/printing beschaffen und Folgendes machen:
Verändere die Parameter
server
,service
undpassword
im Skript, damit sie mit der NetBIOS-Maschine, ihres freigegebenen Drucker-Service beziehungsweise ihres Passworts übereinstimmen. Die folgenden Einträge z.B. würden für den Dienst im vorhergehenden Beispiel korrekt sein:server = phoenix service = CANON password = ""
Führe die folgenden Befehle durch, die in der Drucker-Capabilities-Datei eine Referenz für den Drucker erzeugen. Beachte, dass der Eintrag des neuen Unix-Druckers
canon_printer
genannt wird:# lpadmin -p canon_printer -v /dev/null -i ./smbprint.sysv # enable canon_printer # accept canon_printerNach dieser Arbeit starte die Samba-Dämonen neu und versuch darauf zu drucken, indem du irgendein Standard-Unixprogramm verwendest. Nun solltest du Daten zu einem Drucker auf einem Windows-Client über das Netzwerk senden können.
7.2.3 Samba Optionen für das Drucken
Tabelle 7.2 fasst die Samba Druckoptionen zusammen.
Tabelle 7.2: Konfigurationsoptionen für das Drucken Option
Parameter
Funktion
Vorgabe
Bereich
printing
bsd
,sysv
,hpux
,aix
,qnx
,plp
,softq
oderlprng
Setzt den Drucksystem-Typ für dein Unix-System.
Systemabhängig
Share
printable (print ok)
boolean
Markiert eine Share als Drucker-Share.
no
Share
printer (printer name)
string (Unix Druckername)
Setzt den Namen des Druckers, der den Clients gezeigt wird.
Systemabhängig
Share
printer driver
string (Druckertreiber-Name)
Setzt den Treibernamen, der vom Client benützt werden sollte, um Daten zum Drucker zu senden.
Keine
Share
printer driver file
string (Voller Pfadname)
Setzt den Namen der Druckertreiber-Datei.
Keine
Global
printer driver location
string (Netzwerk-Pfadname)
Bestimmt den Pfadnamen der Share für die Druckertreiber-Datei.
Keine
Share
lpq cache time
numeric (Zeit in Sekunden)
Setzt die Zeitspanne in Sekunden, in der Samba den lpq-Status speichern wird.
10
Global
postscript
boolean
Behandelt alle Druckjobs als Postscript-Jobs, indem
%!
am Anfang jeder Datei vorgehängt wird.
no
Share
load printers
boolean
Lädt automatisch alle Drucker in der Datei printcap als Drucker-Shares.
no
Global
print command
string (Shell-Befehl)
Setzt den Unix-Befehl zur Durchführung des Druckvorgangs.
Siehe unten
Share
lpq command
string (Shell-Befehl)
Setzt den Unix-Befehl zur Rückgabe des Status der Druckerwarteschlange.
Siehe unten
Share
lprm command
string (Shell-Befehl)
Setzt den Unix-Befehl zum Entfernen eines Jobs aus der Druckerwarteschlange.
Siehe unten
Share
lppause command
string (Shell-Befehl)
Setzt den Unix-Befehl zum Anhalten eines Jobs in der Druckerwarteschlange.
Siehe unten
Share
lpresume command
string (Shell-Befehl)
Setzt den Unix-Befehl zum Fortsetzen eines angehaltenen Jobs in der Druckerwarteschlange.
Siehe unten
Share
printcap name
(printcap)
string (Voller Pfadname)
Bezeichnet den Standort der Printer-Capabilities-Datei.
Systemabhängig
Global
min print space
numerisch (Größe in KB)
Setzt die Minimalgröße des freien Plattenplatzes, der für den Druck vorhanden sein muss.
0
Share
queuepause command
string (Shell-Befehl)
Setzt den Unix-Befehl zum Anhalten einer Warteschlange.
Siehe unten
Share
queueresume command
string (Shell-Befehl)
Setzt den Unix-Befehl zum Fortsetzen einer Warteschlange.
Siehe unten
Share
7.2.3.1 printing
Die Konfigurationsoption
printing
sagt Samba ein bisschen etwas über dein Unix Drucksystem, in diesem Fall, welcher Druck-Parser zu verwenden ist. Bei Unix gibt es einige verschiedene Familien von Befehlen zur Kontrolle des Druckens und des Druckstatus. Samba unterstützt sieben verschiedene Typen, siehe Tabelle 7.3.
Tabelle 7.3: Druck-Typen Variable
Definition
BSD
Berkeley Unix System
SYSV
System V
AIX
AIX Operating System (IBM)
HPUX
Hewlett-Packard Unix
QNX
QNX Realtime Operating System (QNX)
LPRNG
LPR Next Generation (Powell)
SOFTQ
SOFTQ System
PLP
Portable Line Printer (Powell)
Der Wert dieser Option ist einer dieser sieben Möglichkeiten, zum Beispiel:
printing = SYSVDer voreingestellte Wert dieser Option ist systemabhängig und wird konfiguriert, wenn Samba zum ersten Mal kompiliert wird. Für die meisten Systeme erfasst das Skript configure automatisch das verwendete Drucksystem und konfiguriert es richtig im Samba-Makefile. Nun, wenn dein System ein PLP, LPRNG oder QNX Drucksystem ist, musst du das explizit im Makefile oder in der Drucker-Share festlegen.
Die am meisten gebräuchlichen Systemtypen sind BSD und SYSV. Alle Drucker auf einem BSD Unix-Server werden in der Printer-Capabilities-Datei beschrieben - normalerweise /etc/printcap.
Das Einrichten der Konfigurationsoption
printing
setzt automatisch mindestens drei andere Druckoptionen für den fraglichen Dienst:command
,lpq
command
undlprm
command
. Wenn du Samba auf einem System betreibst, das keinen dieser Druckmodi unterstützt, dann setz einfach die Befehle für jede dieser Optionen manuell.7.2.3.2 printable
Die Option
printable
muss aufyes
gesetzt werden, um eine Share als Druck-Dienst zu kennzeichnen. Wenn diese Option nicht gesetzt ist, wird die Share stattdessen als Platten-Share betrachtet. Du kannst die Option setzen wie folgt:[printer1] printable = yes7.2.3.3 printer
Die Option, manchmal
printer
name
genannt, bezeichnet den Namen des Druckers auf dem Server, auf den die Share zeigt. Diese Option hat keine Vorgabe und sollte explizit in der Konfigurationsdatei gesetzt werden, obwohl Unix-Systeme sogar selbst oft einen Vorgabe-Namen wielp
für einen Drucker erkennen. Zum Beispiel:[deskjet] printer = hpdkjet17.2.3.4 printer driver
Die Option
printer
driver
setzt die Zeichenfolge, die Samba benützt, um Windows mitzuteilen, was für ein Drucker das ist. Wenn diese Option richtig gesetzt ist, wird der Windows Drucker-Wizard bereits wissen, was für ein Drucker das ist, was die Installation für Enduser einfacher gestaltet, weil sie sich nur um einen Dialog kümmern müssen. Der eingegebene Text sollte mit dem gezeigten Text im Drucker-Wizard übereinstimmen, siehe Figur 7.9. Ein Apple LaserWriter z.B. verwendet typischerweiseApple
LaserWriter
; ein Hewlett Packard Deskjet 560C verwendetHP
DeskJet
560C
Printer
.Figur 7.9: Die Drucker hinzufügen-Wizard-Dialogbox in Windows 98
Die automatische Konfiguration von Druckertreibern bei Samba wird an früherer Stelle in diesem Kapitel im Abschnitt 7.1.7, Druckertreiber automatisch einrichten, genauer erklärt.
7.2.3.5 printer driver file
Diese globale Option vermittelt den Standort der Windows 95/98 Druckertreiber-Definitionsdatei, die gebraucht wird, um Druckertreiber an Clients zu vergeben, die einen Sambadrucker verwenden. Die vorgegebene Einstellung dieser Option ist /usr/local/samba/lib/printers.def. Du kannst diese Vorgabe verändern wie folgt:
[deskjet] printer driver file = /var/printers/printers.defDiese Option wird im Abschnitt 7.1.7 weiter oben in diesem Kapitel genauer erklärt.
7.2.3.6 printer driver location
Diese Option bezeichnet eine besondere Share, die Windows 95 und 98-Druckertreiber und -Definitionsdateien enthält. Es gibt keinen Vorgabe-Parameter für diesen Wert. Du kannst den Standort als Netzwerk-Pfadnamen bezeichnen. Ein häufiger Ansatz ist die Verwendung einer Share auf deiner eigenen Maschine, wie folgt:
[deskjet] printer driver location = \\%L\PRINTER$Diese Option wird ebenfalls im Abschnitt 7.1.7 weiter oben in diesem Kapitel genauer erklärt.
7.2.3.7 lpq cache time
Die globale Option
lpq
cache
time
erlaubt dir, die Anzahl der Sekunden festzulegen, während der sich Samba den momentanen Drucker-Status merkt. Nach dem Verstreichen dieser Zeit wird Samba einen lpq-Befehl ausgeben (oder welchen Befehl auch immer du mit der Optionlpq
command
festgelegt hast), um einen aktuelleren Status zu bekommen. Die Vorgabe lautet 10 Sekunden, kann aber erhöht werden, wenn deinlpq
command
eine ungewöhnlich lange Zeit zur Ausführung braucht oder du eine Menge Clients hast. Das folgende Beispiel setzt die Zeit auf 30 Sekunden fest:[deskjet] lpq cache time = 307.2.3.8 postscript
Die Option
postscript
zwingt den Drucker, alle zu ihm gesendeten Daten als Postscript zu behandeln. Sie macht das, indem sie die Buchstaben%!
am Beginn der ersten Zeile jedes Jobs voranstellt. Es ist normalerweise bei PCs gebräuchlich, die ein^D
(Strg-D oder Dateiende-Zeichen) vor der ersten Zeile einer Postscript-Datei einsetzen. Das wird offensichtlich keinen Nicht-Postscript-Drucker in einen postscript-fähigen verwandeln. Die Vorgabe dieser Option istno
. Du kannst sie verändern wie folgt:[deskjet] postscript = yes7.2.3.9 print command, lpq command, lprm command, lppause command, lpresume command
Diese Optionen sagen Samba, welche Unix-Befehle zum Kontrollieren und Senden von Daten zum Drucker verwendet werden. Die betroffenen Unix-Befehle sind: lpr (send to Line PRinter), lpq (List Printer Queue), lprm (Line printer ReMove) sowie optional lppause und lpresume. Samba stellt eine Option zu Verfügung, die nach jedem dieser Befehle benannt ist, falls du irgendeine der Systemvorgaben verändern musst. Überlege zum Beispiel:
lpq command = /usr/ucb/lpq %pDas würde den Befehl
lpq command
veranlassen, /usr/ucb/lpq zu verwenden. Ähnlich:lprm command = /usr/local/lprm -P%p %jwürde den Samba Drucker-Entfernen-Befehl auf /usr/local/lprm einstellen und ihm die Druckjob-Nummer aus der Variable
%j
liefern.Die Vorgabewerte für jede dieser Optionen hängen vom Wert der Option
printing
ab. Tabelle 7.4 zeigt die voreingestellten Befehle für jede der Druckoptionen. Das bekannteste Drucksystem ist BSD.
Tabelle 7.4: Voreingestellte Befehle für verschiedene Druck-Kommandos Option
BSD, AIX, PLP, LPRNG
SYSV, HPUX
QNX
SOFTQ
print command
lpr -r -P%p %s
lp -c -d%p %s; rm %s
lp -r -P%p %s
lp -d%p -s %s; rm %s
lpq command
lpq -P%p
lpstat -o%p
lpq -P%p
lpstat -o%p
lprm command
lprm -P%p %j
cancel %p-%j
cancel %p-%j
cancel %p-%j
lppause command
lp -i %p-%j -H hold
(nur SYSV)Keine Keine Keine lpresume command
lp -i %p-%j -H resume
(nur SYSV)Keine Keine qstat -s -j%j -r
Es ist typischerweise nicht notwendig, diese Optionen in Samba zurückzusetzen, mit der möglichen Ausnahme von
command
. Diese Option könnte explizit zu setzen sein, wenn dein Drucksystem keine Option-r
(Entfernen nach dem Drucken) beim Druck-Befehl besitzt. Zum Beispiel:/usr/local/lpr -P%p %s; /bin/rm %sMit ein bisschen überlegter Programmierung können diese smb.conf-Optionen auch für die Fehlersuche herangezogen werden:
print command = cat %s >>/tmp/printlog; lpr -r -P%p %sDiese Konfiguration kann z.B. bestätigen, dass Dateien wirklich auf den Sambaserver übertragen worden sind. Sind sie es, werden ihre Inhalte in der Datei /tmp/printlog auftauchen.
Nach BSD ist die nächste sehr bekannte Art Drucksystem SYSV (oder System V)-Druck und einige SYSV-Varianten von IBM's AIX und Hewlett-Packard's HP-UX. Diese Systeme besitzen keine /etc/printcap-Datei. Stattdessen kann die Option
printcap
file
zu einem geeigneten lpstat-Befehl für das System eingerichtet werden. Das fordert Samba auf, es solle sich eine Druckerliste vom lpstat-Befehl holen. Als andere Möglichkeit kannst du die globale Konfigurationsoptionprintcap
name
auf den Namen einer von dir gelieferten printcap-Datei-Attrappe setzen. Im letzteren Fall muss die Datei eine Reihe von Zeilen wie diese enthalten:lp|print1|My Printer 1 print2|My Printer 2 print3|My Printer 3Jede Zeile nennt einen Drucker und sieht Decknamen dafür vor. In diesem Beispiel heißt der erste Drucker
lp
,print1
oderMy
Printer
1
, was auch immer der User verwenden möchte. Der erste Name wird anstelle von%p
in jedem Befehl verwendet, den Samba für diesen Drucker ausführt.Zwei zusätzliche Druckertypen werden ebenfalls von Samba unterstützt: LPRNG (LPR New Generation) und PLP (Public Line Printer). Das sind Public Domain- und Open Source-Drucksysteme; sie werden bei vielen Gelegenheiten benützt, um Probleme mit käuflicher Software zu überwinden. Außerdem werden SOFTQ und QNX, Echtzeit-Betriebssysteme, von Samba unterstützt.
7.2.3.10 load printers
Die Option
load
printers
weist Samba an, Shares für alle bekannten Druckernamen einzurichten und diese Shares in die Browselist zu laden. Samba wird für jeden Druckernamen in /etc/printcap (oder einer system-äquivalenten Datei) eine Drucker-Share erzeugen und notieren. Wenn z.B. deine printcap-Datei wie diese aussieht:[2][2] Wir haben auf der Seite auskommentierte Bemerkungen platziert, falls du noch nie vorher mit dieser Datei zu tun hattest.
lp:\ :sd=/var/spool/lpd/lp:\# spool directory [Spoolverzeichnis]
:mx#0:\# maximum file size (none) [Maximale Dateigröße (keine)]
:sh:\# surpress burst header (no) [Unterdrücke das Deckblatt (no)]
:lp=/dev/lp1:\# device name for output [Gerätename für die Ausgabe]
:if=/var/spool/lpd/lp/filter:# text filter
laser:\ :sd=/var/spool/lpd/laser:\# spool directory
:mx#0:\# maximum file size (none)
:sh:\# surpress burst header (no)
:lp=/dev/laser:\# device name for output
:if=/var/spool/lpd/lp/filter:# text filter
und du legst fest:
load printers = yeswerden die Shares
[lp]
und[laser]
automatisch als gültige Drucker-Shares erstellt, wenn Samba gestartet wird. Beide Shares borgen sich die in der Sektion[printers]
festgelegten Konfigurationsoptionen, um sich selbst zu konfigurieren, und stehen dem Sambaserver in der Browselist zur Verfügung.7.2.3.11 printcap name
Wenn die Option
printcap
name
(auchprintcap
genannt) in einer Drucker-Share erscheint, verwendet Samba die genannte Datei als System Drucker-Capabilities-Datei. Normalerweise ist das /etc/printcap. Nun, du kannst sie durch eine Datei ersetzen, die nur aus den Druckern besteht, die du über das Netzwerk freigeben willst. Der Wert muss der voller Dateiname einer Drucker-Capabilities-Datei auf dem Server sein:[deskjet] printcap name = /usr/local/printcap7.2.3.12 min print space
Die Option
min
space
setzt die Größe des Spoolbereichs fest, der auf der Platte verfügbar sein muss, bevor gedruckt werden darf. Die Einstellung Null (die Vorgabe) schaltet die Überprüfung aus, das Setzen einer anderen Zahl legt die Größe des erforderlichen freien Bereichs in Kilobytes fest. Diese Option hilft vermeiden, dass vorhandene Druckjobs den übrigen Plattenplatz auf dem Server anfüllen, was Fehler bei anderen Prozessen verursachen könnte:[deskjet] min print space = 40007.2.3.13 queuepause command
Diese Konfigurationsoption bezeichnet einen Befehl, der Samba mitteilt, wie eine Druckerwarteschlange als Ganzes angehalten wird, im Gegensatz zu einem einzelnen Job auf der Warteschlange. Der voreingestellte Wert hängt vom gewählten Drucktyp ab. Du solltest diese Option nicht ändern müssen.
7.2.3.14 queueresume command
Diese Konfigurationsoption bezeichnet einen Befehl, der Samba mitteilt, wie eine angehaltene Druckerwarteschlange fortgesetzt wird, im Gegensatz zur Fortsetzung eines einzelnen Jobs auf der Druckerwarteschlange. Der voreingestellte Wert hängt vom gewählten Drucktyp ab. Du solltest diese Option nicht ändern müssen.
© 1999, O'Reilly & Associates, Inc.