Using Samba

Using Samba

Robert Eckstein, David Collier-Brown, Peter Kelly
1st Edition November 1999
1-56592-449-5, Order Number: 4495
416 pages, $34.95

Buy the hardcopy

Inhaltsverzeichnis


Previous: 7.1 Printjobs an Samba senden Kapitel 7
Drucken und Namensauflösung
Next: 7.3 Namensauflösung unter Samba
 

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

Figur 7.7

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

Figur 7.8

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:

  1. Setz für den Drucker einen Eintrag in die Datei /etc/printcap (oder äquivalent).

  2. 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:

  • Den NetBIOS-Namen der Windows-Maschine mit dem Drucker

  • Den Service-Namen, der den Drucker repräsentiert

  • Das verwendete Passwort für den Zugriff auf diesen Service

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:

  1. Verändere die Parameter server, service und password 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 = ""
  1. 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_printer

Nach 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 oder lprng

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 = SYSV

Der 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: print command, lpq command und lprm 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 auf yes 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 = yes

7.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 wie lp für einen Drucker erkennen. Zum Beispiel:

[deskjet]
	printer = hpdkjet1

7.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 typischerweise Apple LaserWriter; ein Hewlett Packard Deskjet 560C verwendet HP DeskJet 560C Printer.

Figur 7.9: Die Drucker hinzufügen-Wizard-Dialogbox in Windows 98

Figur 7.9

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.def

Diese 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 Option lpq command festgelegt hast), um einen aktuelleren Status zu bekommen. Die Vorgabe lautet 10 Sekunden, kann aber erhöht werden, wenn dein lpq 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 = 30

7.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 ist no. Du kannst sie verändern wie folgt:

[deskjet]
	postscript = yes

7.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 %p

Das würde den Befehl lpq command veranlassen, /usr/ucb/lpq zu verwenden. Ähnlich:

lprm command = /usr/local/lprm -P%p %j

wü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 print 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 %s

Mit 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 %s

Diese 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 Konfigurationsoption printcap 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 3

Jede Zeile nennt einen Drucker und sieht Decknamen dafür vor. In diesem Beispiel heißt der erste Drucker lp, print1 oder My 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 = yes

werden 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 (auch printcap 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/printcap

7.2.3.12 min print space

Die Option min print 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 = 4000

7.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.


Previous: 7.1 Printjobs an Samba senden Next: 7.3 Namensauflösung unter Samba
7.1 Printjobs an Samba senden Buch-Index (engl.) 7.3 Namensauflösung unter Samba

O'Reilly Home | O'Reilly Bookstores | How to Order | O'Reilly Contacts
International | About O'Reilly | Affiliated Companies

© 1999, O'Reilly & Associates, Inc.