Inhaltsverzeichnis
Die Möglichkeit, etwas drucken zu können, ist für viele Benutzer oft eine Dienstleistung von zentraler Bedeutung. Samba kann diese in einem Netz von Windows-Clients zuverlässig und nahtlos zur Verfügung stellen.
Ein Samba-Druckdienst kann auf einem Stand-alone- oder Domänenmitgliedsserver betrieben werden, gemeinsam mit Dateiserver-Funktionen, oder auch auf einem eigenen Druckserver. Seine Sicherheit kann je nach Bedarf zwischen sehr hoch und sehr niedrig gewählt werden. Die Konfiguration kann einfach oder komplex sein. Die verfügbaren Authentifizierungsschemata sind im Wesentlichen die gleichen, die in den vorigen Kapiteln auch bei Dateidiensten beschrieben wurden. Alles in allem kann die Druckerunterstützung von Samba einen NT- oder Windows 2000-Druckerserver vollständig ersetzen, oft mit zusätzlichen Vorteilen. Clients können mit Hilfe des bekannten „Point'n'Print“-Mechanismus Treiber herunterladen und sie auf Druckern installieren. Die Installation von Druckern über „Anmeldeskripten“ ist kein Problem. Administratoren können Treiber, die von Clients benutzt werden sollen, mit dem bekannten „Assistenten für die Druckerinstallation“ (engl. „Add Printer Wizard“, APW) hochladen und verwalten. Ein weiterer Vorteil ist der, dass die Treiber- und Druckerverwaltung über die Kommandozeile oder mit Hilfe von Skripten ausgeführt werden kann, was bei einer großen Anzahl von Druckern effizienter ist. Falls eine zentrale Buchführung(((Verwaltung?))) der Druckaufträge benötigt wird (Beobachtung jeder einzelnen Seite und Weitergabe der Rohdaten für alle möglichen statistischen Berichte), so wird diese Funktion am besten durch das neue Common UNIX Printing System (CUPS), das Drucksubsystem unter der Samba-Oberfläche, unterstützt.
Dieses Kapitel behandelt die Grundlagen des Druckens mit Samba, wie sie von den traditionelleren Drucksystemen in UNIX (BSD- und System V-ähnliche) implementiert sind. Vieles, was in diesem Kapitel abgedeckt wird, gilt auch für CUPS. Falls Sie CUPS benutzen, sind Sie vielleicht versucht, zum nächsten Kapitel zu springen, aber in dem Fall würden Sie bestimmt einiges verpassen. Es wird empfohlen, dass Sie dieses Kapitel ebenso wie das Kapitel Unterstützung des CUPS-Drucksystems lesen.
Die meisten der folgenden Beispiele wurden auf Rechnern mit Windows XP Professional überprüft. Dort, wo dieses Dokument die Antworten zu eingegebenen Befehlen beschreibt, sollten Sie bedenken, dass Windows 200x/XP-Rechner zwar sehr ähnlich sind, sich aber in geringfügigen Details unterscheiden können. Windows NT ist zusätzlich noch ein wenig anders.
Sambas Druckerunterstützung basiert immer auf dem installierten Drucksubsystem des UNIX-Betriebssystems, auf dem es läuft. Samba nimmt damit die Rolle eines „Vermittlers“ ein. Es nimmt Druckdateien von Windows- (oder anderen SMB-)Clients an und gibt sie an das eigentliche Drucksystem weiter, das sie bearbeitet, d.h., es muss mit beiden Seiten kommunizieren: sowohl mit den Drucker-Clients unter Windows als auch mit dem Drucksystem von UNIX. Daher müssen wir zwischen verschiedenen Arten von Betriebssystem-Clients unterscheiden, die sich alle unterschiedlich verhalten, ebenso wie zwischen den verschiedenen Drucksystemen von UNIX, die ihrerseits verschiedene Eigenschaften haben und unterschiedlich angesprochen werden.
An dieser Stelle wird die traditionelle Art des Druckens unter UNIX behandelt. Das nächste Kapitel behandelt detailliert das modernere Common UNIX Printing System (CUPS).
CUPS-Benutzer, seien Sie gewarnt: Springen Sie nicht einfach zum nächsten Kapitel weiter, sonst verpassen Sie eventuell wichtige Informationen, die Sie nur hier finden!
Aus den Beiträgen auf der Samba-Mailingliste geht hervor, dass die Druckerkonfiguration heute einer der problematischsten Aspekte bei der Administration von Samba ist. Viele neue Samba-Administratoren gewinnen den Eindruck, dass Samba irgendeinen Teil des Druckvorgangs selbst übernimmt. Seien Sie jedoch versichert, dass Samba keinerlei Verarbeitung beim Drucken selbst durchführt. Es agiert in keiner Weise als Druckerfilter.
Von seinen Clients bekommt Samba einen Datenstrom (den Druckauftrag), den es an ein lokales Spooling-Verzeichnis leitet. Nachdem der gesamte Druckauftrag empfangen wurde, führt Samba einen lokalen UNIX/Linux-Druckbefehl aus und übergibt ihm die erhaltene Datei. Es ist die Aufgabe der Drucksubsysteme des lokalen Systems, den Druckauftrag korrekt zu bearbeiten und ihn an den Drucker zu übergeben.
Um von einem Windows-Client einen Druckauftrag über einen Samba-Druckserver an einen UNIX-Drucker zu senden, sind sechs (manchmal sieben) Stadien erforderlich:
Windows öffnet eine Verbindung zur Druckerfreigabe.
Samba muss den Benutzer authentifizieren.
Windows sendet eine Kopie der Druckdatei über das Netzwerk in den Spooling-Bereich von Samba.
Windows trennt die Verbindung.
Samba führt den Druckbefehl aus, mit dem die Datei in den Spooling-Bereich des UNIX-Drucksubsystems übergeben wird.
Das UNIX-Drucksubsystem bearbeitet den Druckauftrag.
Die Druckdatei muss eventuell explizit aus dem Spooling-Bereich von Samba gelöscht werden. Dieser Punkt hängt von den Konfigurationseinstellungen Ihres Druck-Spoolers ab.
Es gibt eine Reihe von Konfigurationsparametern, mit denen man Sambas Druckverhalten steuern kann. Bitte sehen Sie sich die Manpage zu smb.conf an, um eine Übersicht darüber zu erhalten. Wie bei anderen Parametern gibt es auch hier Parameter auf einer globalen Ebene (in den Listings mit einem G markiert) und solche auf einer Serviceebene (S).
Diese dürfen nicht in die individuellen Freigabedefinitionen eingehen. Wenn sie dort irrtümlich eingehen, kann das Utility testparm das feststellen und es Ihnen mitteilen (sofern Sie es starten).
Diese dürfen im Abschnitt [global] von smb.conf angegeben werden. In diesem Fall definieren sie das Standardverhalten von allen individuellen Freigaben oder von Freigaben auf Serviceebene (vorausgesetzt, es gibt keine andere Einstellung für den gleichen Parameter, der die globale Voreinstellung überschreibt).
Das folgende Beispiel zeigt eine einfache Druckkonfiguration. Wenn Sie diese mit Ihrer eigenen vergleichen, finden Sie eventuell zusätzliche Parameter, die vom Verkäufer Ihres Betriebssystems vorkonfiguriert wurden. Darunter befindet sich eine Beschreibung und Erläuterung dieser Parameter. In diesem Beispiel werden nur wenige Parameter verwendet. In vielen Umgebungen reichen sie jedoch aus, um damit eine gültige Datei smb.conf zur Verfügung zu stellen, mit der alle Clients drucken können.
Beispiel 18.1. Einfache Konfiguration mit BSD-Drucken
| [global] |
| printing = bsd |
| load printers = yes |
| [printers] |
| path = /var/spool/samba |
| printable = yes |
| public = yes |
| writable = no |
Dies ist lediglich eine Beispielkonfiguration. Samba weist allen Konfigurationsparametern Standardwerte zu. Diese Werte sind empfindlich und wurden mit mit Bedacht gewählt. Wenn ein Parameter in der Datei smb.conf angegeben ist, dann überschreibt er den Standardwert. Das Utility namens testparm kann alle Einstellungen ausgeben, wenn es unter root ausgeführt wird - Standardwerte ebenso wie Einträge in der Datei smb.conf. Für alle fehlerhaft konfigurierten Einstellungen gibt testparm eine Warnung aus. Die vollständige Ausgabe erreicht leicht 340 Zeilen und mehr, d.h., Sie werden sie vermutlich mit einem Programm zum Durchblättern anschauen wollen.
Die Syntax der Konfigurationsdatei ist leicht zu verstehen. Sie sollten wissen, dass Samba es mit seiner Syntax nicht sehr genau nimmt. Wie schon an anderer Stelle in diesem Dokument erklärt wurde, toleriert Samba einige Schreibfehler (z.B. browseable an Stelle von browseable), wobei die Schreibweise (groß/klein) irrelevant ist. Es ist zulässig, für boolesche Einstellungen Yes/No oder True/False zu verwenden. Listen von Namen dürfen mit Kommas, Leerzeichen oder Tabulatoren getrennt werden.
Um alle (oder wenigstens die meisten) druckerrelevanten Einstellungen in Samba zu sehen, inklusive derer, die implizit verwendet werden, können Sie den unten angegebenen Befehl ausprobieren. Dieser sucht nach allen Vorkommen von lp, print, spool, driver, ports und [ in der Ausgabe von testparms, was eine bequeme Übersicht über die aktuelle Druckerkonfiguration von smbd ergibt. Dieser Befehl zeigt keine individuell erstellten Druckerfreigaben oder die Spooling-Pfade an, die sie eventuell benutzen. Folgendes ist die Ausgabe meiner Samba-Einstellung, mit den Einstellungen, die im vorherigen Beispiel gezeigt wurden:
root# testparm -s -v | egrep "(lp|print|spool|driver|ports|\[)"
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
[global]
smb ports = 445 139
lpq cache time = 10
total print jobs = 0
load printers = Yes
printcap name = /etc/printcap
disable spoolss = No
enumports command =
addprinter command =
deleteprinter command =
show add printer wizard = Yes
os2 driver map =
printer admin =
min print space = 0
max print jobs = 1000
printable = No
printing = bsd
print command = lpr -r -P'%p' %s
lpq command = lpq -P'%p'
lprm command = lprm -P'%p' %j
lppause command =
lpresume command =
printer name =
use client driver = No
[homes]
[printers]
path = /var/spool/samba
printable = Yes
Sie können ganz leicht überprüfen, welche Einstellungen dank Sambas Standardverhalten implizit hinzugefügt werden. Nicht vergessen: Das könnte für Ihren späteren Umgang mit Samba von Bedeutung sein.
testparm in Samba-3 verhält sich anders als testparm in Samba 2.2.x: Ohne den Schalter „-v“ zeigt es Ihnen nur die Einstellungen, in die geschrieben wird! Um die vollständige benutzte Konfiguration zu sehen, verwenden Sie bei testparm den Schalter „-v“.
Sollten Sie in irgendeinem Stadium Reparaturen vornehmen müssen, kommen Sie bitte immer erst an diesen Punkt zurück, und überprüfen Sie, ob testparm die Parameter anzeigt, die Sie erwarten. Aus eigener Erfahrung erhalten Sie hier den Hinweis, es einmal mit dem Auskommentieren des Parameters load printers zu versuchen. Falls Ihr System 2.2.x sich so verhält wie meines, werden Sie Folgendes sehen:
root# grep "load printers" /etc/samba/smb.conf
# load printers = Yes
# Diese Einstellung ist auskommentiert!!
root# testparm -v /etc/samba/smb.conf | egrep "(load printers)"
load printers = Yes
Ich nahm an, dass durch das Auskommentieren dieser Einstellung Samba meine Drucker nicht mehr anzeigen würde, was es aber weiterhin tat. Ich habe eine Weile gebraucht, um den Grund dafür herauszufinden. Aber nun lasse ich mich nicht mehr foppen... jedenfalls nicht hiervon.
root# grep -A1 "load printers" /etc/samba/smb.conf
load printers = No
# Obige Einstellung ist, was ich will!
# load printers = Yes
# Diese Einstellung ist auskommentiert!
root# testparm -s -v smb.conf.simpleprinting | egrep "(load printers)"
load printers = No
Nur dann, wenn der Parameter explizit auf load printers = No gesetzt ist, wird Samba das tun, was ich möchte. Daher empfehle ich wärmstens:
Verlassen Sie sich nie auf auskommentierte Parameter!
Setzen Sie Parameter immer explizit so, wie Sie wollen, dass sie sich verhalten sollen!
Verwenden Sie testparm, um versteckte Einstellungen aufzudecken, die nicht mit Ihren Absichten übereinstimmen!
Folgendes ist die minimal kleinste Konfigurationsdatei:
root# cat /etc/samba/smb.conf-minimal
[printers]
Dieses Beispiel soll Ihnen zeigen, dass Sie testparm benutzen können, um alle Konfigurationsdateien von Samba zu testen. Tatsächlich möchten wir Sie dazu anhalten, Ihr laufendes System nicht zu verändern (es sei denn, Sie wissen genau, was Sie tun). Verlassen Sie sich nicht darauf, dass die Änderungen erst dann wirksam werden, nachdem Sie smbd neu starten! Das ist nicht der Fall. Samba liest sie alle 60 Sekunden erneut ein, und zwar auf jeder neuen Client-Verbindung. Möglicherweise werden Sie mit Änderungen auf Ihren Clients in Produktion konfrontiert, die Sie gar nicht vornehmen wollten. Sie werden nun einige weitere interessante Dinge bemerken: testparm hilft Ihnen dabei festzustellen, was die Samba-Druckerkonfiguration wäre, wenn Sie diese minimale Konfiguration benutzen würden. Folgendes können Sie dabei erwarten:
root# testparm -v smb.conf-minimal | egrep "(print|lpq|spool|driver|ports|[)"
Processing section "[printers]"
WARNING: [printers] service MUST be printable!
No path in service printers - using /tmp
lpq cache time = 10
total print jobs = 0
load printers = Yes
printcap name = /etc/printcap
disable spoolss = No
enumports command =
addprinter command =
deleteprinter command =
show add printer wizard = Yes
os2 driver map =
printer admin =
min print space = 0
max print jobs = 1000
printable = No
printing = bsd
print command = lpr -r -P%p %s
lpq command = lpq -P%p
printer name =
use client driver = No
[printers]
printable = Yes
testparm hat zwei Warnungen ausgegeben:
Wir haben nicht angegeben, dass der Abschnitt [printers] druckbar ist.
Wir haben Samba nicht gesagt, welches Spooling-Verzeichnis verwendet werden soll.
Beides ist allerdings nicht so schlimm, und Samba greift daher auf funktionierende Standardwerte zurück. Bitte verlassen Sie sich jedoch nicht darauf, und verwenden Sie dieses Beispiel nicht selbst. Es ist hier nur deswegen erwähnt, um Ihnen zu sagen, dass Sie Ihre Einstellungen vorsichtig entwerfen und vornehmen sollen, damit genau das passiert, was Sie haben möchten. Auf Ihrem System mag das Resultat bei einigen der angegebenen Parameter leicht abweichen, da Samba möglicherweise mit anderen Optionen kompiliert wurde. Warnung: Setzen Sie kein Kommentarzeichen ans Ende einer gültigen Zeile. Das bewirkt, dass der Parameter ignoriert wird (so, als ob Sie das Kommentarzeichen an den Zeilenanfang gesetzt hätten). Zu Beginn hielt ich das für einen Fehler in meinen Samba-Versionen. Aber die Manpage sagt es deutlich: „Interner Leerraum in einem Parameterwert wird wörtlich erhalten.“ Das bedeutet, dass z.B. eine Zeile, die aus
| # Dies definiert LPRng als das Drucksystem |
| printing = lprng |
besteht, den gesamten String nach dem Zeichen „=“ als den gewünschten Wert betrachtet, den Sie definieren möchten. Dies ist jedoch ein ungültiger Wert, der ignoriert und durch einen Standardwert ersetzt wird.
Die nächste Konfiguration zeigt ein etwas umfangreicheres Beispiel einer Konfiguration von druckrelevanten Einstellungen in einer BSD-artigen Druckumgebung. Anschließend werden die verschiedenen Parameter beschrieben und erklärt. Wir haben hier deswegen BSD-artiges Drucken ausgewählt, weil es immer noch das am meisten verwendete System auf schon vorhandenen UNIX/Linux-Installationen ist. Neue Installationen verwenden überwiegend CUPS, das in einem eigenen Kapitel beschrieben wird. Das Beispiel führt die Namen vieler Parameter explizit auf, die nicht angegeben werden müssen, da sie standardmäßig gesetzt werden. Sie könnten auch eine wesentlich leichtere smb.conf-Datei verwenden. Alternativ dazu können Sie testparm oder SWAT benutzen, um die Datei smb.conf zu optimieren und alle Parameter zu entfernen, die standardmäßig gesetzt werden.
Beispiel 18.2. Erweiterte BSD-Druckerkonfiguration
Dies ist eine Beispielkonfiguration. Möglicherweise finden Sie nicht alle Einstellungen in der Konfigurationsdatei, die vom Betriebssystemhersteller mitgeliefert wurde. Samba verwendet für Konfigurationsparameter, die nicht explizit gesetzt sind, einen sinnvollen Standardwert. Sie können sich alle Einstellungen anschauen, indem Sie als root das Utility testparm benutzen. Mit Hilfe von testparm erhalten Sie Warnungen bei fehlerhaft konfigurierten Einstellungen.
Die folgende Erörterung beschreibt die Einstellungen des obigen Beispiels.
Der Abschnitt [global] ist einer von vier besonderen Abschnitten (zusammen mit [homes], [printers] und [print$]...). Unter [global] sind alle Parameter enthalten, die für den Server als Ganzes gelten. Hier stehen Parameter, die nur global eine Bedeutung haben. Es dürfen auch Parameter auf Serviceebene enthalten sein, die dann Standardeinstellungen für alle anderen Abschnitte und Freigaben definieren. Auf diese Weise können Sie die Konfiguration vereinfachen und vermeiden, den gleichen Wert mehrfach zu setzen. (Innerhalb jedes einzelnen Abschnitts bzw. jeder Freigabe dürfen Sie diese global gesetzten Freigabeeinstellungen allerdings überschreiben und andere Werte dafür angeben).
Bewirkt, dass Samba die Standarddruckbefehle verwendet, die im BSD-Drucksystem (auch als RFC 1179 oder LPR/LPD bekannt) vorgesehen sind. Im Allgemeinen informiert der Parameter printing Samba über das Drucksubsystem, mit dem es rechnen soll. Samba unterstützt CUPS, LPD, LPRNG, SYSV, HPUX, AIX, QNX und PLP. Jedes dieser Systeme hat seinen eigenen Druckbefehl (sowie andere Befehle zur Steuerung der Druckerschlange).
Weist Samba an, automatisch alle verfügbaren Druckerfreigaben zu erstellen. Verfügbare Druckerfreigaben werden beim Scannen der Datei printcap entdeckt. Alle erstellten Druckerfreigaben werden auch zum Browsen geladen. Falls Sie diesen Parameter verwenden, müssen Sie keine separaten Freigaben für jeden Drucker angeben. Jede automatisch erstellte Druckerfreigabe erstellt einen Klon von den Konfigurationsoptionen im Abschnitt [printers]. (Die Einstellung load printers = no erlaubt Ihnen, jeden gemeinsam genutzten UNIX-Drucker separat anzugeben, wobei Sie einige auslassen können, bei denen Sie nicht möchten, dass sie öffentlich sichtbar und verfügbar sind).
Diese Einstellung ist normalerweise standardmäßig aktiviert (sogar dann, wenn der Parameter nicht in smb.conf angegeben ist). Sie bewirkt, dass das Icon Assistent für die Druckerinstallation im Verzeichnis Drucker der Freigabeliste des Samba-Hosts erscheint (wie es in Netzwerkumgebung oder vom Befehl net view gezeigt wird). Um diese Einstellung zu deaktivieren, müssen Sie sie explizit auf no setzen (nur auskommentieren reicht nicht). Mit dem Assistenten für die Druckerinstallation können Sie Druckertreiber auf die Freigabe [print$] hochladen und sie mit einem Drucker verbinden (falls die entsprechende Schlange vorher schon existiert) oder den Treiber eines Drucker gegen einen anderen vorher hochgeladenen Treiber austauschen.
Setzt die obere Grenze der gleichzeitig auf dem Samba-Server aktiven Druckaufträge auf 100. Sollte ein Client einen Auftrag mit einer höheren Nummer absetzen, erhält er von Samba eine Fehlermeldung der Art „no more space available on server“. Der Wert Null (die Voreinstellung) bedeutet, dass es keine Beschränkung gibt.
Sagt Samba, wo es nach einer Liste verfügbarer Druckernamen suchen soll. Wenn CUPS verwendet wird, sollten Sie sicherstellen, dass eine printcap-Datei geschrieben wird, was mit der Direktive Printcap in der Datei cupsd.conf gesteuert wird.
Mitglieder der Gruppe ntadmin sollten in der Lage sein, Treiber hizuzufügen und Druckereigenschaften zu setzen (ntadmin ist lediglich ein Beispielname, es muss der Name einer gültigen UNIX-Gruppe sein); root ist implizit immer ein printer admin. Das Zeichen @ steht vor Gruppennamen in /etc/group. Ein printer admin kann mit den MS-RPC-Schnittstellen für die Fernwartung (siehe unten) alles Mögliche mit Druckern anstellen. In größeren Installationen gibt es normalerweise je einen Parameter printer admin pro Freigabe. Damit können alle Druckerfreigaben von verschiedenen Gruppen verwaltet werden.
Gibt die Cache-Zeit für die Ergebnisse des Befehls lpq an. Sie verhindert, dass der lpq-Befehl zu oft aufgerufen wird, und reduziert so die Last auf einem stark ausgelastetem Druckserver.
Falls er auf yes gesetzt ist, wirkt sich dieser Parameter nur auf Windows NT/200x/XP-Clients aus (und nicht auf Win 95/98/ME). Sein Standardwert ist No (oder False). Er darf bei Druckerfreigaben, für die auf dem Samba-Server gültige Treiber installiert sind, nicht aktiviert werden (mit der Einstellung yes oder true). Eine detailliertere Erklärung finden Sie in der Manpage zu smb.conf.
Dies ist der zweite besondere Abschnitt. Falls ein Abschnitt mit diesem Namen in smb.conf vorkommt, können die Benutzer sich mit jedem Drucker verbinden, der in der printcap-Datei des Samba-Hosts angegeben ist, da Samba dann beim Hochfahren eine Druckerfreigabe für jeden Druckernamen erstellt, den es in der Datei printcap findet. Das könnte man als allgemeine bequeme Abkürzung dafür sehen, alle Drucker mit minimaler Konfiguration freizugeben. Dieser Abschnitt ist auch ein Container für Einstellungen, die für alle Drucker gelten sollen. (Weitere Details finden Sie auf der Manpage zu smb.conf.) Die Einstellungen in diesem Container müssen Parameter auf der Ebene der Freigabe sein.
Der Kommentar wird neben der Freigabe angezeigt, wenn ein Client beim Server anfragt, und zwar entweder mit Netzwerkumgebung oder mit dem Befehl net view, der verfügbare Freigaben auflistet.
Der Dienst [printers] muss muss als printable, d.h. druckbar deklariert werden. Anderenfalls weigert sich smbd, beim Hochfahren etwas zu laden. Dieser Parameter ermöglicht es verbundenen Clients, Sppol-Dateien zu öffnen, darin zu schreiben und sie in das Verzeichnis zu übertragen, das mit dem Parameter path für diesen Dienst angegeben wird. Samba verwendet ihn, um Druckerfreigaben von Dateifreigaben zu unterscheiden.
Das muss der Name eines Verzeichnisses sein, das Samba beim Spoolen ankommender Druckdateien verwendet. Es darf nicht identisch sein mit mit dem Spooling-Verzeichnis, das in der Konfiguration Ihres UNIX-Drucksubsystems angegeben ist! Der Pfad beschreibt normalerweise ein Verzeichnis, in dem alle Schreibrechte haben und dessen „sticky“-Bit gesetzt ist.
Ist immer auf no gesetzt, falls printable = yes. Dadurch wird die Freigabe [printer] selbst in der Liste der verfügbaren Freigaben bei dem Befehl net view oder in der Browserliste des Explorers unsichtbar. (Natürlich können Sie die einzelnen Drucker noch sehen).
Falls dieser Parameter auf yes gesetzt ist, wird kein Passwort für eine Verbindung zu diesem Druckdienst benötigt. Der Zugang erfolgt mit den Rechten des Gast-Kontos. Auf vielen Systemen wird das Gast-Konto auf einen Benutzer namens „nobody“ abgebildet. Für diesen Benutzer findet UNIX normalerweise in der Datei passwd ein leeres Passwort vor, aber kein gültiges UNIX-Login. (Auf manchen Systemen hat das Gast-Konto eventuell keine Druckrechte. Testen Sie das, indem Sie sich mit su - guest als Gastbenutzer anmelden, und geben Sie wie folgt einen Druckbefehl im System ein:
lpr -P printername /etc/motd
Ist ein Synonym für guest ok = yes. Da wir guest ok = yes haben, muss das hier nicht wirklich stehen. (Das führt zu der interessanten Frage: „Was passiert, falls wir irrtümlicherweise zwei widersprüchliche Einstellungen für die gleiche Freigabe haben?“ Die Antwort lautet, dass die letzte von Samba gefundene Einstellung gewinnt. Testparm beschwert sich nicht über verschiedene Einstellungen beim gleichen Parameter für eine Freigabe. Das können Sie testen, indem Sie mehrere Zeilen für den Parameter guest account mit verschiedenen Benutzernamen eintragen und dann testparm ausführen, um zu sehen, welchen Samba tatsächlich benutzt.)
Verhindert normalerweise, d.h. bei anderen Arten von Freigaben, dass Benutzer Dateien im Dienstverzeichnis erstellen oder modifizieren. Bei dem Dienst „printable“ ist es allerdings immer erlaubt, ins Verzeichnis zu schreiben (falls die Rechte des Benutzers eine Verbindung erlauben), jedoch nur mit Hilfe von Drucker-Spooling-Operationen. Normale Schreiboperationen sind nicht erlaubt.
Wenn ein Abschnitt in der Datei smb.conf vorkommt und den Parameter printable = yes enthält, dann konfiguriert ihn Samba als Druckerfreigabe. Windows 9x/Me-Clients haben eventuell Probleme damit, sich mit Druckertreibern zu verbinden oder sie zu laden, wenn der Name der Freigabe mehr als acht Zeichen lang ist. Geben Sie einer Druckerfreigabe keinen Namen, der mit einer vorhandenen Benutzer- oder Dateifreigabe kollidieren könnte. Bei Verbindungsanfragen von Clients versucht Samba immer zuerst Dateifreigaben mit diesem Namen zu finden. Wenn Samba eine findet, stellt es damit eine Verbindung her und nicht mit dem gleichnamigen Drucker!
Der Kommentar sagt alles aus.
Setzt den Spooling-Bereich für diesen Drucker auf ein Verzeichnis, das sich vom Standardwert unterscheidet. Man muss ihn nicht anders setzen, aber die Möglichkeit ist vorhanden.
Die Definition von printer admin unterscheidet sich für diese explizit definierte Druckerfreigabe von der allgemeinen Freigabe [printers]. Dies ist nicht notwendig, wir machen das nur, um zu zeigen, dass es möglich ist.
Damit kann man den Drucker aufstöbern, d.h. die Clients können ihn bequem finden, wenn sie in der Netzwerkumgebung stöbern.
Hier führen wir ein gewisses Maß an Zugangskontrolle aus, indem wir die Parameter hosts allow und hosts deny verwenden. Das ist keinesfalls eine sichere Maßnahme. Es ist keine sichere Methode, Ihre Drucker abzusichern. Mit dieser Zeile werden alle Clients aus einem bestimmten Subnetz in einer ersten Auswertung der Zugangskontrolle akzeptiert.
Alle hier aufgeführten Hosts sind nicht erlaubt (auch dann nicht, wenn sie zu den erlaubten Subnetzen gehören). Wie Sie sehen, können Sie hier IP-Adressen ebenso wie NetBIOS-Hostnamen angeben.
Der Drucker ist für das Gast-Konto nicht verfügbar.
In jedem Abschnitt, der einen Drucker definiert (oder im Abschnitt [printers]), darf ein Parameter namens print command definiert werden. Er setzt einen Befehl, mit dem die Dateien bearbeitet werden, die für diesen Drucker in Sambas Drucker-Spooling-Verzeichnis platziert wurden. (Wie Sie sich vielleicht erinnern, wurde dieses Spooling-Verzeichnis mit dem Parameter path eingestellt). Üblicherweise übergibt dieser Befehl die Spool-Datei an das Drucksubsystem des Samba-Hosts, wobei der dem System entsprechende Druckbefehl verwendet wird. Aber es gibt keine Notwendigkeit dafür, dass das so sein muss. Bei der Fehlersuche oder auch aus anderen Gründen möchten Sie eventuell etwas ganz anderes tun, als die Datei zu drucken. Ein Beispiel könnte ein Befehl sein, der die Druckdatei einfach nur an einen temporären Ort kopiert, um sie später untersuchen zu können, wenn Sie Fehler beim Drucken suchen. Wenn Sie an eigenen Druckbefehlen arbeiten (oder gar Shell-Skripten für Druckbefehle entwickeln), sollten Sie darauf aufpassen, dass Sie die Dateien aus dem Spool-Verzeichnis von Samba auch wieder entfernen. Sonst leidet Ihre Festplatte vielleicht schon bald unter Problemen mit fehlendem freien Platz.
Sie haben bereits gelernt, dass Samba in den meisten Fällen für viele Parameter seine eingebauten Einstellungen verwendet, wenn es in seiner Konfigurationsdatei keine expliziten Werte dafür findet. Das Gleiche gilt bei der Option print command. Der standardmäßige Druckbefehl variiert abhängig von der Einstellung des Parameters printing. In den unten aufgeführten Befehlen werden Sie einige Parameter der Form %X bemerken, wobei X p, s, J und so weiter sein kann. Diese Buchstaben stehen jeweils für den Druckernamen, die Spool-Datei und die Job-ID. Sie werden weiter unten detaillierter erklärt. Die nächste Tabelle enthält eine Übersicht der wichtigsten Druckoptionen mit Ausnahme des Spezialfalls CUPS, der im Abschnitt Unterstützung des CUPS-Drucksystems diskutiert wird.
Tabelle 18.1. Standardmäßige Druckereinstellungen
Wir haben hier den Spezialfall CUPS ausgeklammert, weil er im folgenden Kapitel beschrieben wird. Bei printing = CUPS und falls Samba mit libcups kompiliert wurde, verwendet es die CUPS-API, um Druckaufträge einzureichen. (Es ist eine gute Idee, auch printcap = cups zu setzen, falls Ihre cupsd.conf so eingestellt ist, dass ihre automatisch generierte printcap-Datei an einen ungewöhnlichen Ort geschrieben wird). Sonst schaltet Samba auf die Druckbefehle von System V um und verwendet beim Drucken die Option -oraw, d.h., es führt den Befehl lp -c -d%p -oraw; rm %s aus. Bei printing = cups und wenn Samba mit libcups kompiliert wurde, wird jeder manuell eingestellte Druckbefehl ignoriert!
Nachdem das Spoolen eines Druckauftrags an einen Dienst beendet ist, führt Samba den Druckbefehl in print command mit Hilfe eines system()-Aufrufs aus, um die Spool-Datei zu verarbeiten. Normalerweise übergibt der angegebene Befehl die Spool-Datei an das Drucksubsystem des Hosts. Aber das muss nicht zwingend der Fall sein. Möglicherweise entfernt das Drucksubsystem die Spool-Datei nicht von sich aus. Was immer Sie also angeben, Sie sollten sich vergewissern, dass die Spool-Datei nach ihrer Bearbeitung gelöscht wird.
Bei den traditionellen Druckmethoden ist es kein Problem, eigene Druckbefehle anzugeben. Wenn Sie jedoch keine eigenen Druckbefehle erstellen möchten, sollten Sie sich gut mit den standardmäßig eingebauten Befehlen auskennen, die Samba für jedes Drucksubsystem verwendet (siehe Tabelle 17.1)(((automatischen Verweis setzen))). Bei allen in den vorherigen Absätzen aufgelisteten Befehlen sehen Sie Parameter der Form %X. Dies sind so genannte Makros bzw. Abkürzungen, die als Platzhalter für die Namen von echten Objekten verwendet werden. Zu dem Zeitpunkt, wenn ein Befehl mit einem solchen Platzhalter ausgeführt wird, fügt Samba den passenden Wert automatisch ein. Druckbefehle können mit allen Makro-Ersetzungen von Samba umgehen. Was das Drucken angeht, so sind folgende von besonderer Bedeutung:
%s, %f der Pfad zum Spool-Dateinamen
%p der passende Druckername
%J Der vom Client übermittelte Auftragsname
%c die Anzahl der gedruckten Seiten des gespoolten Auftrags (falls bekannt)
%z die Größe des gespoolten Druckauftrags (in Bytes)
Im Druckbefehl muss mindestens einmal der Parameter %s oder %f vorkommen. Der Parameter %p ist optional. Falls kein Druckername angegeben wird, wird %p heimlich aus dem Druckbefehl entfernt. In dem Fall wird der Auftrag an den Standarddrucker geschickt.
Falls er im Abschnitt [global] angegeben ist, wird der Druckbefehl für alle druckbaren Dienste verwendet, für die kein eigener Druckbefehl angegeben ist. Sollte es weder einen Druckbefehl für einen druckbaren Dienst noch einen globalen Druckbefehl geben, werden Spool-Dateien zwar erzeugt, aber nicht bearbeitet! Vor allem werden Druckdateien dann nicht gelöscht und verbrauchen Platz auf der Festplatte.
Auf manchen UNIX-Systemen kann möglicherweise nicht gedruckt werden, wenn das Konto „nobody“ verwendet wird. Falls das passiert, können Sie ein alternatives Gast-Konto erstellen und ihm Druckrechte zuweisen. Dieses Gast-Konto richten Sie im Abschnitt [global] mit dem Parameter guest account ein.
Sie können ziemlich komplexe Druckbefehle erstellen. Sie müssen sich klarmachen, dass Druckbefehle lediglich an eine UNIX-Shell weitergegeben werden. Die Shell vermag die enthaltenen Umgebungsvariablen wie üblich zu erweitern. (Die Syntax zum Einbinden einer UNIX-Umgebungsvariable $variable in einen Samba-Druckbefehl lautet %$variable.) Folgendes Beispiel für einen funktionierenden Wert von print command trägt den Druckauftrag in die Logdatei /tmp/print.log ein, druckt die Datei und löscht sie anschließend. In Shell-Skripten dient das Semikolon „;“ üblicherweise als Trennzeichen zwischen Befehlen:
| print command = echo Drucken von %s >> \ |
| /tmp/print.log; lpr -P %p %s; rm %s |
Je nachdem, wie Sie auf Ihrem System Dateien normalerweise drucken, müssen Sie dieses Beispiel stark abwandeln, um zu Ihrem Befehl zu gelangen. Der Vorgabewert des Parameters print command variiert je nach Einstellung des Parameters printing. Ein weiteres Beispiel lautet:
| print command = /usr/local/samba/bin/myprintscript %p %s |
Vor Samba-2.2.x war die Unterstützung von Druckerservern bei Windows-Clients auf LanMan-Druckaufrufe beschränkt. Dies ist die gleiche Protokollebene, wie sie auch Windows 9x/Me-PCs bei der Freigabe von Druckern bieten. Ab dem Release 2.2.0 begann Samba damit, die nativen Druckmechanismen von Windows NT zu unterstützen. Diese sind mit Hilfe von MS-RPC (RPC = Remote Procedure Calls) implementiert. MS-RPCs verwenden beim Drucken immer SPOOLSS als benannten Kanal.
Durch die neue Unterstützung von SPOOLSS ergibt sich unter anderem folgende zusätzliche Funktionalität:
Unterstützung beim Herunterladen von Druckertreiberdateien auf Windows 95/98/NT/2000-Clients bei Bedarf (Point'n'Print)
Hochladen von Druckertreibern mit dem Assistenten für die Druckerinstallation (APW) von Windows NT oder den Imprints-Werkzeugen
Unterstützung der nativen MS-RPC-Druckaufrufe wie StartDocPrinter, EnumJobs(), usw. (siehe die MSDN-Dokumentation für weitere Informationen zur Druck-API von Win32)
Unterstützung von Access Control Lists (ACL) auf Druckern in NT
Verbesserte Unterstützung der Manipulation von Druckerschlangen durch Verwendung von internen Datenbanken für Informationen zu gespoolten Aufträgen (implementiert durch verschiedene *.tdb-Dateien)
Ein Vorteil einer Aufrüstung ist der, dass Samba-3 in der Lage ist, seine Drucker über Active Directory (oder LDAP) zu veröffentlichen.
Es existiert ein fundamentaler Unterschied zwischen Druckerservern unter MS Windows NT und der Arbeitsweise von Samba. Windows NT erlaubt die Installation lokaler Drucker, die nicht freigegeben sind. Dies ist ein Überbleibsel dessen, dass jeder Windows NT-Rechner (Server oder Client) von einem Benutzer als Workstation benutzt werden kann. Samba veröffentlicht alle Drucker, die verfügbar gemacht werden - entweder standardmäßig oder durch eine spezielle Deklaration mit druckerspezifischen Freigaben.
Windows NT/200x/XP Professional-Clients müssen die Standard-SMB-Druckerfreigabe nicht benutzen. Sie können direkt auf jedem Drucker eines anderen Windows NT-Hosts drucken, indem Sie MS-RPC benutzen. Das setzt natürlich voraus, dass der Client die nötigen Rechte auf dem entfernten Host hat, der den Drucker zur Verfügung stellt. Die Standardrechte, die Windows NT an einen Drucker zuweist, ergeben die Druckrechte der wohlbekannten Gruppe Everyone. (Ältere Clients der Sorte Windows 9x/Me können nur auf freigegebenen Druckern drucken).
Darüber, was das alles bedeutet, herrscht große Verwirrung. Oft wird die Frage gestellt: „Müssen Druckertreiber auf einem Samba-Host installiert sein oder nicht, um von Windows-Clients aus drucken zu können?“ Die Antwort darauf lautet: nein, das ist nicht notwendig.
Natürlich können Windows NT/2000-Clients auch ihren APW laufen lassen, um Treiber lokal zu installieren (die sich dann mit einer Samba-basierten Druckerschlange verbinden können). Die gleiche Methode wird auch von Windows 9x/Me-Clients verwendet. (Ein Fehler in Samba 2.2.0 führt jedoch dazu, dass auf Windows NT/2000-Clients verlangt wird, dass der Samba-Server über einen für den Drucker gültigen Treiber verfügt. In Samba 2.2.1 wurde das korrigiert).
Eine neue Möglichkeit ist es jedoch, die Druckertreiber im Abschnitt [print$] in der Freigabe des Samba-Servers zu installieren, und sehr bequem ist es ebenfalls. Dann wird der Treiber für alle Clients (inklusive 95/98/ME) installiert, wenn sie sich zum ersten Mal mit dieser Druckerfreigabe verbinden. Das Hochladen oder Ablegen des Treibers in dieser [print$]-Freigabe sowie die folgende Bindung dieses Treibers an eine vorhandene Samba-Druckerfreigabe kann mit verschiedenen Mitteln erreicht werden:
Ausführen des APW auf einem NT/200x/XP Professional-Client (das funktioniert nicht auf 95/98/ME-Clients)
Verwenden der Imprints-Werkzeuge
Verwenden der Kommandozeilenwerkzeuge smbclient und rpcclient
Verwenden von cupsaddsmb (funktioniert nur beim CUPS-Drucksystem, nicht bei LPR/LPD, LPRng usw.)
Diese hochgeladenen Treiber verwendet Samba in keiner Weise dazu, die gespoolten Dateien zu bearbeiten. Diese Treiber werden ausschließlich von den Clients benutzt, die sie mit dem von Samba unterstützten „Point'n'Print“-Mechanismus heruntergeladen und installiert haben. Die Clients verwenden diese Treiber dazu, Druckdateien in dem Format zu erzeugen, das der Drucker (oder das UNIX-Drucksystem) benötigt. Von Samba erhaltene Druckdateien werden an das UNIX-Drucksystem weitergeleitet, das für die gesamte weitere Bearbeitung zuständig ist.
In Samba-Versionen vor 2.2 konnte eine Freigabe namens [printer$] verwendet werden. Dieser Name wurde von dem gleichnamigen Dienst übernommen, der von Windows 9x/Me-Clients erzeugt wird, die sich einen Drucker teilen. Windows 9x/Me-Druckerserver verfügen immer über einen Dienst namens [printer$], der einen nur lesenden Zugang (ohne Passwort) zum Herunterladen von Druckertreibern bietet. Allerdings erlaubte Sambas erste Implementation einen Parameter namens printer driver location pro Freigabe. Dieser gab den Ort der Treiberdateien für diesen Drucker an. Ein anderer Parameter namens printer driver bot die Möglichkeit, einen Namen für den Druckertreiber anzugeben, der an den Client übergeben wird.
Diese Parameter, inklusive printer driver file, wurden nun entfernt und können in Samba-3-Installationen nicht mehr verwendet werden. Der Freigabename [print$] wird nun für den Ort von herunterladbaren Druckertreibern benutzt. Er wird von dem Dienst [print$] übernommen, der von Windows NT-PCs erstellt wird, wenn sie sich einen Drucker teilen. Windows NT-Druckerserver verfügen immer über einen [print$]-Dienst, der Lese- und Schreibzugriff bietet (im Kontext seiner ACLs), um das Herunter- und Hochladen von Druckertreibern zu unterstützen. Das heißt nicht, dass Windows 9x/Me-Clients ignoriert werden. Diese können die Samba-Unterstützung der Freigabe [print$] ganz normal benutzen.
Um das Hoch- und Herunterladen von Druckertreiberdateien zu unterstützen, müssen Sie zunächst eine Dateifreigabe namens [print$] konfigurieren. Der öffentliche Name dieser Freigabe wird fest in den MS Windows-Clients codiert. Er kann nicht geändert werden, weil Windows-Clients so programmiert sind, dass sie nach einem Dienst mit exakt diesem Namen suchen, wenn Sie Druckertreiberdateien erhalten möchten.
Sie sollten die Serverdatei so modifizieren, dass Sie die globalen Parameter hinzufügen und die Dateifreigabe [print$] erstellen (natürlich sind einige der Parameterwerte, z.B. path beliebig gewählt und sollten durch die für Ihre Site passenden Werte ersetzt werden; siehe nächstes Beispiel).
Beispiel 18.3. Beispiel für [print\$]
Natürlich müssen Sie auch sicherstellen, dass das Verzeichnis mit dem Parameterwert path im UNIX-Dateisystem existiert.
[print$] ist ein besonderer Abschnitt in smb.conf. Er enthält Einstellungen, die relevant sind für potenziell herunterzuladende Druckertreiber und wird von Windows-Clients bei der lokalen Installation von Druckertreibern verwendet. Folgende Parameter werden in diesem Freigabeabschnitt oft benötigt:
Der Kommentar erscheint neben dem Freigabenamen, wenn er in der Freigabeliste aufgeführt wird (normalerweise werden Windows-Clients ihn nicht sehen, aber er erscheint auch oben in der Ausgabe des Befehls smbclient -L sambaserver).
Dies ist der Pfad zu dem Ort, an dem die Windows-Druckertreiber aufbewahrt werden, aus der Sicht von UNIX.
Macht die Freigabe [print$] für Clients aus der unsichtbar. Allerdings können Sie sie weiterhin von jedem beliebigen Client aus mounten, indem Sie den Befehl net use g:\\sambaserver\print$ in einer DOS-Shell oder den Menüeintrag im Windows Explorer verwenden.
Gibt allen Gastbenutzern nur Lesezugriff auf diese Freigabe. Eventuell besteht die Möglichkeit, Druckertreiber auf Clients herunterzuladen und zu installieren. Ob der Parameter guest ok = yes notwendig ist, hängt davon ab, wie Ihre Site konfiguriert ist. Verfügen die Benutzer auf jeden Fall über ein Konto auf dem Samba-Host, so ist das kein Problem.
Falls all Ihre Windows NT-Benutzer garantiert vom Samba-Server authentifiziert werden können (z.B. wenn Samba eine Authentifizierung mittels eines NT-Domainservers vornimmt und der Benutzer vom Domänencontroller beim Anmelden an eine Windows NT-Sitzung bereits validiert wurde), so ist kein Gastzugang notwendig. Wenn Sie natürlich in der Umgebung einer Arbeitsgruppe einfach nur drucken möchten, ohne sich um dumme Konten und Sicherheitsfragen zu kümmern, dann konfigurieren Sie die Freigabe so, dass sie einen Gastzugriff erlaubt. Eventuell sollten Sie sich überlegen, im Abschnitt [global] auch map to guest = Bad User hinzuzufügen. Vorher sollten Sie aber verstanden haben, was dieser Parameter bewirkt.
Da wir nicht möchten, dass jeder Treiberdateien hochladen (oder sogar Treibereinstellungen ändern) kann, haben wir diese Freigabe als nicht schreibbar markiert.
In der vorherigen Einstellung wurde [print$] nur lesbar gemacht, damit wir auch den Eintrag write list erstellen konnten. UNIX-Gruppen werden mit einem führenden „@“-Zeichen angegeben. Die hier aufgeführten Benutzer verfügen über Schreibrechte (eine Ausnahme zu den Nur-Lese-Rechten für die Allgemeinheit), die sie für die Aktualisierung von Dateien in der Freigabe benötigen. Normalerweise werden Sie hier nur Benutzerkonten von Administratoren auflisten wollen. Prüfen Sie die Rechte im Dateisystem, um sicherzugehen, dass diese Konten Dateien in die Freigabe kopieren dürfen. Falls dies ein von root verschiedenes Konto ist, sollte das Konto im globalen Parameter printer admin erwähnt werden (siehe auch die Manpage zu smb.conf für weitere Informationen zur Konfiguration von Dateifreigaben).
Damit ein Windows NT-Druckerserver das Herunterladen von Druckertreibern für Clients von mehreren Architekturen unterstützen kann, müssen Sie mehrere Unterverzeichnisse für den Dienst [print$] erstellen (d.h. das UNIX-Verzeichnis mit dem Namen des Parameters path). Diese entsprechen den unterstützten Client-Architekturen. Samba verwendet dieses Modell ebenfalls. Genau wie der Name der Freigabe [print$] selbst müssen die Unterverzeichnisse genau die unten aufgeführten Namen haben (für Architekturen, die Sie nicht unterstützen müssen, können Sie die entsprechenden Unterverzeichnisse weglassen).
Erstellen Sie daher für jede Architektur, die Sie unterstützen möchten, einen Verzeichnisbaum unter der Freigabe [print$] wie folgt:
[print$]--+
|--W32X86 # enthaelt Treiber fuer Windows NT x86
|--WIN40 # enthaelt Treiber fuer Windows 95/98
|--W32ALPHA # enthaelt Treiber fuer Windows NT Alpha_AXP
|--W32MIPS # enthaelt Treiber fuer Windows NT R4000
|--W32PPC # enthaelt Treiber fuer Windows NT PowerPC
Um einen neuen Treiber zu Ihrem Samba-Host hinzuzufügen, muss eine von zwei Bedingungen erfüllt sein:
Das Konto, mit dem die Verbindung zum Samba-Host erfolgt, muss eine UID mit dem Wert 0 haben (d.h. root sein).
Das Konto, mit dem die Verbindung zum Samba-Host erfolgt, muss in der Liste printer admin vorkommen.
Natürlich muss das Konto für die Verbindung außerdem Schreibrechte haben, um Dateien in die Unterverzeichnisse von [print$] einzufügen. Denken Sie daran, dass alle Dateifreigaben per Voreinstellung auf „nur lesend“ gesetzt sind.
Nachdem Sie den erforderlichen Dienst [print$] samt zugehörigen Unterverzeichnissen erstellt haben, können Sie zu einer Windows NT 4.0/200x/XP-Client-Workstation gehen. Öffnen Sie dort die Netzwerkumgebung oder Meine Netzwerkverbindungen, und finden Sie den Samba-Host. Wenn Sie den Server gefunden haben, navigieren Sie zu dessen Ordner Drucker und Faxgeräte. Nun sollten Sie eine erste Liste von Druckern sehen, die den Druckerfreigaben entspricht, die auf Ihrem Samba-Host definiert sind.
Haben Sie die Freigabe [print$] in smb.conf erfolgreich erstellt und haben Sie Samba dazu gebracht, seine Datei smb.conf neu zu lesen? Gut. Aber noch sind Sie nicht so weit, dass Sie Ihre neuen Möglichkeiten nutzen können. Noch müssen die Client-Treiberdateien in dieser Freigabe installiert werden. Bis jetzt ist es nur eine leere Freigabe. Leider reicht es nicht aus, die Treiberdateien einfach hineinzukopieren. Sie müssen korrekt installiert werden, damit in den internen Samba-Datenbanken für jeden Treiber entsprechende Einträge existieren und Samba die korrekten Treiber zur Verfügung stellen kann, wenn sie von MS Windows-Clients angefordert werden. Und das ist, gelinge gesagt, ein bischen haarig. Wir besprechen nun zwei alternative Möglichkeiten, die Treiber in [print$] zu installieren:
Mit dem Kommandozeilen-Samba-Utility rpcclient und verschiedenen Unterbefehlen davon (hier: adddriver und setdriver) auf beliebigen UNIX-Workstations
Mit Hilfe der GUI (Druckereigenschaften und des Assistenten für die Druckerinstallation) auf einer beliebigen Windows NT/200x/XP-Client-Workstation
Die zweite Möglichkeit ist wahrscheinlich die einfachere (auch dann, wenn der Vorgang zu Beginn ein wenig merkwürdig erscheinen mag).
Zu Beginn ist für die Druckerliste im Ordner Drucker des Samba-Hosts kein echter Druckertreiber mit den Druckern verbunden, wenn Sie mit einem Client-Explorer auf diesen Ordner zugreifen. Per Voreinstellung ist der Name dieses Treibers auf einen Nullstring gesetzt. Das muss nun geändert werden. Dabei wird uns der auf NT/2000/XP-Clients laufende lokale Assistent für die Druckerinstallation (APW) helfen.
Die Installation eines gültigen Druckertreibers ist nicht so einfach. Sie müssen versuchen, die Druckereigenschaften des Druckers zu sehen, dem Sie die Treiber zuordnen möchten. Öffnen Sie den Windows Explorer, öffnen Sie die Netzwerkumgebung, finden Sie den Samba-Host, öffnen Sie den Samba-Ordner Drucker, führen Sie einen Rechtsklick auf auf dem Drucker-Icon aus, und wählen Sie aus. Damit versuchen Sie, die Drucker- und Treibereigenschaften für eine Schlange anzuschauen, für die ein solcher NULL-Treiber voreingestellt ist. Das führt zu folgender Fehlermeldung:
Die Geräteeinstellungen können nicht angezeigt werden. Der Treiber für den angegebenen Drucker ist nicht installiert. (((??? Device settings cannot be displayed. The driver for the specified printer is not installed, only spooler properties will be displayed. Do you want to install the driver now?)))
Klicken Sie nicht auf ! Klicken Sie stattdessen im Fehlerdialogfeld auf . Erst jetzt erhalten Sie ein Fenster mit den Druckereigenschaften. Von hier aus können wir nun überlegen, wie wir dem Drucker einen Treiber zuordnen wollen. Dabei haben Sie folgende Möglichkeiten:
Wählen Sie einen Treiber aus der Pop-Up-Liste der installierten Treiber aus. Zu Beginn ist diese Liste leer.
Klicken Sie auf , um einen neuen Druckertreiber zu installieren (daraufhin wird der APW gestartet).
Nachdem der APW gestartet worden ist, ist die Prozedur genau die gleiche wie jene, die Sie von Windows her kennen (wir nehmen hier an, dass Sie mit der Installation von Druckertreibern unter Windows NT vertraut sind). Vergewissern Sie sich, dass Ihre Verbindung tatsächlich als Benutzer mit printer admin-Privilegien eingerichtet ist (wenn Sie daran zweifeln, überprüfen Sie es mit smbstatus). Wenn Sie Druckertreiber für andere Betriebssysteme als Windows NT x86 installieren möchten, müssen Sie im Dialogfeld Druckereigenschaften den Reiter Freigabe verwenden.
Wenn Sie eine Verbindung unter einem Administrator- (oder root-)Konto hergestellt haben (wie durch den Parameter printer admin angegeben wird), dürfen Sie auch andere Druckereigenschaften wie ACLs und Vorgabewerte für Geräteeigenschaften in diesem Dialogfeld ändern. Was die Vorgabewerte von Geräteeigenschaften angeht, sollten Sie die Ratschläge befolgen, die im Abschnitt Druckertreiber installieren mit rpcclient gegebenen werden.
Die zweite Möglichkeit, Druckertreiber in [print$] zu installieren und als gültige Treiber einzurichten, besteht darin, die UNIX-Kommandozeile zu benutzen. Dazu gehören vier verschiedene Schritte:
Verschaffen Sie sich Information über die benötigten Treiberdateien, und besorgen Sie sich diese Dateien.
Legen Sie die Treiberdateien in die korrekten Unterverzeichnisse der Freigabe [print$] (eventuell mit dem Befehl smbclient).
Führen Sie das Kommandozeilen-Utility rpcclient mit dem Unterbefehl adddriver einmal aus.
Führen Sie rpcclient ein zweites Mal mit dem Unterbefehl setdriver aus.
In den folgenden Abschnitten erhalten Sie detaillierte Hinweise zu jedem einzelnen dieser Schritte.
Um die Treiberdateien zu finden, haben Sie zwei Möglichkeiten. Sie können den Inhalt der Treiber-CD-ROM durchsuchen, die mit Ihrem Drucker geliefert wurde. Sehen Sie sich die *.inf-Dateien auf der CD-ROM an. Das ist manchmal nicht möglich, weil die *.inf-Dateien eventuell fehlen. Leider haben die Hersteller angefangen, ihre eigenen Installationsprogramme zu benutzen. Diese Installationspakete liegen oft in irgendeinem Archivformat für die Windows-Plattform vor. Außerdem werden die Dateien während der Installation manchmal auch umbenannt. Leider wird es dadurch extrem schwierig, die benötigten Treiberdateien zu identifizieren.
In dem Fall steht Ihnen nur die zweite Möglichkeit zur Verfügung. Installieren Sie den Treiber lokal auf einem Windows-Client, und finden Sie heraus, welche Dateinamen und -pfade er nach dieser Installation benutzt. (Dieses Vorgehen müssen Sie für jede zu unterstützende Client-Plattform wiederholen. An dieser Stelle zeigen wir das nur für die Plattform W32X86, ein Name, der von Microsoft für alle Windows NT/200x/XP-Clients verwendet wird.)
Eine gute Methode zum Aufspüren der Treiberdateien besteht darin, aus dem Dialogfeld Eigenschaften des Treibers (Reiter Allgemein) eine Testseite auszudrucken. Wenn Sie dann in der Druckausgabe nach der Liste der Treiberdateien suchen, werden Sie feststellen, dass Windows (und Samba) folgende Dateien verwenden: Treiberdatei, Datendatei, Konfig.-Datei, Hilfedatei und (optional) Abhängige Treiberdateien (bei Windows NT kann das leicht anders sein). Für die weiteren Schritte müssen Sie sich alle Dateinamen notieren.
Eine andere Methode zum schnellen Testen der Treiberdateinamen und entsprechenden Pfade steht mit dem Utility rpcclient zur Verfügung. Starten Sie es mit enumdrivers oder mit dem Unterbefehl getdriver, die beide auf der Informationsebene 3 liegen. Im folgenden Beispiel ist TURBO_XP der Name eines Windows-PCs (in diesem Fall war es ein Laptop mit Windows XP Professional). Ich habe den Treiber lokal auf TURBO_XP installiert, und zwar von einem Samba-Server namens KDE-BITSHOP. Wir könnten eine interaktive rpcclient-Sitzung ausführen, wobei wir einen rpcclient />-Prompt bekämen und dort die Unterbefehle eingeben würden. Dies überlasse ich Ihnen, da es eine gute Übung ist. Im Moment benutzen wir rpcclient mit dem Parameter -c, um eine einzelne Unterbefehlszeile auszuführen, und sind dann fertig. Diese Methode würden Sie benutzen, wenn Sie Skripten erstellen möchten, um den Vorgang für eine große Anzahl von Druckern und Treibern zu automatisieren. Beachten Sie die verschiedenen Anführungszeichen, mit denen unterschiedliche Leerzeichen zwischen einzelnen Worten respektiert werden:
root# rpcclient -U'Danka%xxxx' -c \ 'getdriver "Heidelberg Digimaster 9110 (PS)" 3' TURBO_XP cmd = getdriver "Heidelberg Digimaster 9110 (PS)" 3 [Windows NT x86] Printer Driver Info 3: Version: [2] Driver Name: [Heidelberg Digimaster 9110 (PS)] Architecture: [Windows NT x86] Driver Path: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\HDNIS01_de.DLL] Datafile: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\Hddm91c1_de.ppd] Configfile: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\HDNIS01U_de.DLL] Helpfile: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\HDNIS01U_de.HLP] Dependentfiles: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\Hddm91c1_de.DLL] Dependentfiles: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\Hddm91c1_de.INI] Dependentfiles: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\Hddm91c1_de.dat] Dependentfiles: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\Hddm91c1_de.cat] Dependentfiles: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\Hddm91c1_de.def] Dependentfiles: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\Hddm91c1_de.hre] Dependentfiles: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\Hddm91c1_de.vnd] Dependentfiles: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\Hddm91c1_de.hlp] Dependentfiles: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\HDNIS01Aux.dll] Dependentfiles: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\HDNIS01_de.NTF] Monitorname: [] Defaultdatatype: []
Vielleicht bemerken Sie, dass dieser Treiber eine ziemlich große Anzahl von Dateien in der Kategorie Dependentfiles hat (es gibt aber auch schlimmere Fälle). Außerdem ist hier seltsamerweise Driver File mit Driver Path markiert. Wir haben noch keine Unterstützung für die so genannte WIN40-Architektur installiert. Dieser Name wird von Microsoft für die Plattformen Windows 9x/Me verwendet. Wenn wir diese unterstützen möchten, müssen wir auf einem Windows-PC die Treiberdateien für Windows 9x/Me zusätzlich zu denen für W32X86, d.h. für Windows NT/2000/XP-Clients installieren. Dieser PC kann ebenfalls die Windows 9x/Me-Treiber beherbergen, selbst dann, wenn er unter Windows NT, 2000 oder XP läuft.
Da die Freigabe [print$] normalerweise über die Netzwerkumgebung erreichbar ist, können Sie vom Windows Explorer aus auch die UNC-Notation benutzen, um darin herumzustochern. Die Windows 9x/Me-Treiberdateien werden im Unterverzeichnis 0 des Verzeichnisses WIN40 abgelegt. Der vollständige Pfad für den Zugriff darauf lautet dann \\WINDOWSHOST\print$\WIN40\0\.
Neuere Treiber auf Windows 2000 und Windows XP werden im Unterverzeichnis „3“ statt „2“ installiert. Version 2 der Treiber, wie sie in Windows NT benutzt werden, liefen vorher im Kernel-Modus. Mit Windows 2000 hat sich das verändert. Zwar kann es weiterhin die Treiber im Kernel-Modus benutzen (falls das vom Administrator erlaubt ist), aber der native Modus für seine Druckertreiber ist die Ausführung im User-Modus. Dafür sind speziell entworfene Treiber notwendig. Diese Art von Treibern werden im Unterverzeichnis „3“ installiert.
Nun müssen wir alle im vorherigen Schritt gefundenen Treiberdateien zusammentragen. Wo bekommen wir die aber her? Nun, warum nehmen wir sie nicht einfach vom gleichen PC und der gleichen Freigabe [print$], die wir in unserem letzten Schritt untersucht haben, um die Dateien zu finden? Dazu können wir smbclient verwenden. Wir benutzen dabei die Pfade und Namen, die uns getdriver verraten hat. Das folgende Listing ist leicht editiert, damit es durch zusätzliche Umbrüche leichter lesbar wird:
root# smbclient //TURBO_XP/print\$ -U'Danka%xxxx' \ -c 'cd W32X86/2;mget HD*_de.* hd*ppd Hd*_de.* Hddm*dll HDN*Aux.DLL' added interface ip=10.160.51.60 bcast=10.160.51.255 nmask=255.255.252.0 Got a positive name query response from 10.160.50.8 ( 10.160.50.8 ) Domain=[DEVELOPMENT] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager] Get file Hddm91c1_de.ABD? n Get file Hddm91c1_de.def? y getting file \W32X86\2\Hddm91c1_de.def of size 428 as Hddm91c1_de.def Get file Hddm91c1_de.DLL? y getting file \W32X86\2\Hddm91c1_de.DLL of size 876544 as Hddm91c1_de.DLL [...]
Nach der Ausführung dieses Befehls befinden sich die Dateien in unserem aktuellen lokalen Verzeichnis. Vermutlich haben Sie bemerkt, dass wir dieses Mal mehrere durch Semikola getrennte Befehle mit dem Parameter -c übergeben haben. Das bewirkt, dass auf dem entfernten Windows-Server alle Befehle nacheinander ausgeführt werden, bevor smbclient wieder beendet wird.
Vergessen Sie nicht, diese Prozedur für die WIN40-Architektur zu wiederholen, falls Sie Windows 9x/Me/XP-Clients unterstützen müssen. Denken Sie dabei auch daran, dass die Dateien für diese Architekturen sich im Unterverzeichnis WIN40/0/ befinden. Wenn das erledigt ist, können wir smbclient ... put starten, um die gesammelten Dateien in der Freigabe [print$] des Samba-Servers zu speichern.
Nun werden wir die Treiberdateien in der Freigabe [print$] platzieren. Denken Sie daran, dass der UNIX-Pfad zu dieser Freigabe zuvor in Ihren eigenen Worten definiert wurde, die hier aber fehlen. Außerdem haben Sie Unterverzeichnisse für die verschiedenen zu unterstützenden Arten von Windows-Clients angelegt. Wenn wir annehmen, dass Ihre Freigabe [print$] auf den UNIX-Pfad /etc/samba/drivers/ abgebildet wird, dann sollten Ihre Treiberdateien an folgende Orte gelangen:
Für alle Windows NT-, 2000- und XP-Clients nach /etc/samba/drivers/W32X86/, aber (noch) nicht in das Verzeichnis 2
Für alle Windows 95-, 98- und ME-Clients nach /etc/samba/drivers/WIN40/ aber (noch) nicht in das Verzeichnis 0
Wieder benutzen wir smbclient für die Übertragung der Treiberdateien über das Netzwerk. Wir geben die gleichen Dateien und Pfade an, die wir bei der Ausführung von getdriver im Vergleich mit der Originalinstallation von Windows erhalten haben. Nun aber werden wir die Dateien in der Freigabe [print$] eines Samba/UNIX-Druckerservers speichern.
root# smbclient //SAMBA-CUPS/print\$ -U'root%xxxx' -c \ 'cd W32X86; put HDNIS01_de.DLL; \ put Hddm91c1_de.ppd; put HDNIS01U_de.DLL; \ put HDNIS01U_de.HLP; put Hddm91c1_de.DLL; \ put Hddm91c1_de.INI; put Hddm91c1KMMin.DLL; \ put Hddm91c1_de.dat; put Hddm91c1_de.dat; \ put Hddm91c1_de.def; put Hddm91c1_de.hre; \ put Hddm91c1_de.vnd; put Hddm91c1_de.hlp; \ put Hddm91c1_de_reg.HLP; put HDNIS01Aux.dll; \ put HDNIS01_de.NTF' added interface ip=10.160.51.60 bcast=10.160.51.255 nmask=255.255.252.0 Got a positive name query response from 10.160.51.162 ( 10.160.51.162 ) Domain=[CUPS-PRINT] OS=[UNIX] Server=[Samba 2.2.7a] putting file HDNIS01_de.DLL as \W32X86\HDNIS01_de.DLL putting file Hddm91c1_de.ppd as \W32X86\Hddm91c1_de.ppd putting file HDNIS01U_de.DLL as \W32X86\HDNIS01U_de.DLL putting file HDNIS01U_de.HLP as \W32X86\HDNIS01U_de.HLP putting file Hddm91c1_de.DLL as \W32X86\Hddm91c1_de.DLL putting file Hddm91c1_de.INI as \W32X86\Hddm91c1_de.INI putting file Hddm91c1KMMin.DLL as \W32X86\Hddm91c1KMMin.DLL putting file Hddm91c1_de.dat as \W32X86\Hddm91c1_de.dat putting file Hddm91c1_de.dat as \W32X86\Hddm91c1_de.dat putting file Hddm91c1_de.def as \W32X86\Hddm91c1_de.def putting file Hddm91c1_de.hre as \W32X86\Hddm91c1_de.hre putting file Hddm91c1_de.vnd as \W32X86\Hddm91c1_de.vnd putting file Hddm91c1_de.hlp as \W32X86\Hddm91c1_de.hlp putting file Hddm91c1_de_reg.HLP as \W32X86\Hddm91c1_de_reg.HLP putting file HDNIS01Aux.dll as \W32X86\HDNIS01Aux.dll putting file HDNIS01_de.NTF as \W32X86\HDNIS01_de.NTF
Puh, das war viel zu tippen! Die meisten Treiber sind wesentlich kleiner viele haben sogar nur drei generische PostScript-Treiberdateien plus eine PPD-Datei. Obwohl wir die Dateien aus dem Unterverzeichnis 2 des Verzeichnisses W32X86 von der Windows-Kiste geholt haben, platzieren wie sie (vorläufig) nicht in das gleiche Unterverzeichnis der Samba-Kiste. Dieses Umkopieren wird automatisch vom Befehl adddriver erledigt, den wir gleich ausführen werden (und vergessen Sie ebenfalls nicht, auch die Dateien für die Windows 9x/Me-Architektur in das Unterverzeichnis WIN40/ zu legen, falls Sie diese brauchen sollten).
Im Moment überprüfen wir nur, dass unsere Dateien vorhanden sind. Das kann ebenfalls mit dem Befehl smbclient bewerkstelligt werden (aber Sie können sich natürlich auch mit SSH anmelden und das mit einem Zugriff über eine UNIX-Shell erledigen):
root# smbclient //SAMBA-CUPS/print\$ -U 'root%xxxx' \
-c 'cd W32X86; pwd; dir; cd 2; pwd; dir'
added interface ip=10.160.51.60 bcast=10.160.51.255 nmask=255.255.252.0
Got a positive name query response from 10.160.51.162 ( 10.160.51.162 )
Domain=[CUPS-PRINT] OS=[UNIX] Server=[Samba 2.2.8a]
Current directory is \\SAMBA-CUPS\print$\W32X86\
. D 0 Sun May 4 03:56:35 2003
.. D 0 Thu Apr 10 23:47:40 2003
2 D 0 Sun May 4 03:56:18 2003
HDNIS01Aux.dll A 15356 Sun May 4 03:58:59 2003
Hddm91c1KMMin.DLL A 46966 Sun May 4 03:58:59 2003
HDNIS01_de.DLL A 434400 Sun May 4 03:58:59 2003
HDNIS01_de.NTF A 790404 Sun May 4 03:56:35 2003
Hddm91c1_de.DLL A 876544 Sun May 4 03:58:59 2003
Hddm91c1_de.INI A 101 Sun May 4 03:58:59 2003
Hddm91c1_de.dat A 5044 Sun May 4 03:58:59 2003
Hddm91c1_de.def A 428 Sun May 4 03:58:59 2003
Hddm91c1_de.hlp A 37699 Sun May 4 03:58:59 2003
Hddm91c1_de.hre A 323584 Sun May 4 03:58:59 2003
Hddm91c1_de.ppd A 26373 Sun May 4 03:58:59 2003
Hddm91c1_de.vnd A 45056 Sun May 4 03:58:59 2003
HDNIS01U_de.DLL A 165888 Sun May 4 03:58:59 2003
HDNIS01U_de.HLP A 19770 Sun May 4 03:58:59 2003
Hddm91c1_de_reg.HLP A 228417 Sun May 4 03:58:59 2003
40976 blocks of size 262144. 709 blocks available
Current directory is \\SAMBA-CUPS\print$\W32X86\2\
. D 0 Sun May 4 03:56:18 2003
.. D 0 Sun May 4 03:56:35 2003
ADOBEPS5.DLL A 434400 Sat May 3 23:18:45 2003
laserjet4.ppd A 9639 Thu Apr 24 01:05:32 2003
ADOBEPSU.DLL A 109568 Sat May 3 23:18:45 2003
ADOBEPSU.HLP A 18082 Sat May 3 23:18:45 2003
PDFcreator2.PPD A 15746 Sun Apr 20 22:24:07 2003
40976 blocks of size 262144. 709 blocks available
Beachten Sie, dass in dem Unterverzeichnis 2 schon Treiberdateien vorhanden sind (vermutlich aus einer früheren Installation). Nachdem die Dateien für den neuen Treiber ebenfalls dort sind, sind es noch einige wenige Schritte, bevor Sie sie auf einem Client benutzen können. Das einzige, was Sie nun tun könnten, ist, sie von einem Client zu bekommen, so wie Sie auch normale Dateien von einer Dateifreigabe bekommen würden, indem Sie print$ im Windows Explorer öffnen. Aber dabei würden sie nicht per Point'n'Print installiert. Der Grund ist folgender: Samba weiß noch nicht, dass diese Dateien etwas Besonderes sind, nämlich Druckertreiberdateien, und es weiß nicht, zu welcher Druckerschlange bzw. zu welchen Druckerschlangen diese Treiberdateien gehören.
Als Nächstes müssen Sie Samba sagen, dass es sich um eine spezielle Sorte von Dateien handelt, die Sie gerade in der Freigabe [print$] hochgeladen haben. Das tun Sie mit dem Befehl adddriver. Dieser bringt Samba dazu, die Treiberdateien in seiner internen TDB-Datenbank zu registrieren. Der folgende Befehl und seine Ausgabe wurden wieder zwecks besserer Lesbarkeit editiert:
root# rpcclient -Uroot%xxxx -c 'adddriver "Windows NT x86" \ "dm9110:HDNIS01_de.DLL: \ Hddm91c1_de.ppd:HDNIS01U_de.DLL:HDNIS01U_de.HLP: \ NULL:RAW:Hddm91c1_de.DLL,Hddm91c1_de.INI, \ Hddm91c1_de.dat,Hddm91c1_de.def,Hddm91c1_de.hre, \ Hddm91c1_de.vnd,Hddm91c1_de.hlp,Hddm91c1KMMin.DLL, \ HDNIS01Aux.dll,HDNIS01_de.NTF, \ Hddm91c1_de_reg.HLP' SAMBA-CUPS cmd = adddriver "Windows NT x86" \ "dm9110:HDNIS01_de.DLL:Hddm91c1_de.ppd:HDNIS01U_de.DLL: \ HDNIS01U_de.HLP:NULL:RAW:Hddm91c1_de.DLL,Hddm91c1_de.INI, \ Hddm91c1_de.dat,Hddm91c1_de.def,Hddm91c1_de.hre, \ Hddm91c1_de.vnd,Hddm91c1_de.hlp,Hddm91c1KMMin.DLL, \ HDNIS01Aux.dll,HDNIS01_de.NTF,Hddm91c1_de_reg.HLP" Printer Driver dm9110 successfully installed.
Nach diesem Schritt sollte der Treiber von Samba auf dem Druckerserver erkannt werden. Bei der Eingabe des Befehls müssen Sie sehr vorsichtig sein. Vertauschen Sie nicht die Reihenfolge der Felder. Manche Änderungen würden zu der Fehlermeldung NT_STATUS_UNSUCCESSFUL führen. Diese Fehler sind offensichtlich. Bei anderen Änderungen werden die Treiberdateien erfolgreich installiert, aber ohne dass der Treiber selbst funktioniert. Also passen Sie auf! Hinweise zur Syntax des Befehls adddriver finden Sie in der Manpage. Das Kapitel über das Drucken mit CUPS enthält eine detailliertere Beschreibung, falls Sie eine solche brauchen sollten.
Ein Hinweis darauf, dass Samba die Dateien als Treiberdateien erkennt, ist die Meldung successfully installed. Ein weiterer ist die Tatsache, dass unsere Dateien vom Befehl adddriver in das Unterverzeichnis 2 verschoben wurden. Das können Sie erneut mit smbclient überprüfen:
root# smbclient //SAMBA-CUPS/print\$ -Uroot%xx \
-c 'cd W32X86;dir;pwd;cd 2;dir;pwd'
added interface ip=10.160.51.162 bcast=10.160.51.255 nmask=255.255.252.0
Domain=[CUPS-PRINT] OS=[UNIX] Server=[Samba 2.2.7a]
Current directory is \\SAMBA-CUPS\print$\W32X86\
. D 0 Sun May 4 04:32:48 2003
.. D 0 Thu Apr 10 23:47:40 2003
2 D 0 Sun May 4 04:32:48 2003
40976 blocks of size 262144. 731 blocks available
Current directory is \\SAMBA-CUPS\print$\W32X86\2\
. D 0 Sun May 4 04:32:48 2003
.. D 0 Sun May 4 04:32:48 2003
DigiMaster.PPD A 148336 Thu Apr 24 01:07:00 2003
ADOBEPS5.DLL A 434400 Sat May 3 23:18:45 2003
laserjet4.ppd A 9639 Thu Apr 24 01:05:32 2003
ADOBEPSU.DLL A 109568 Sat May 3 23:18:45 2003
ADOBEPSU.HLP A 18082 Sat May 3 23:18:45 2003
PDFcreator2.PPD A 15746 Sun Apr 20 22:24:07 2003
HDNIS01Aux.dll A 15356 Sun May 4 04:32:18 2003
Hddm91c1KMMin.DLL A 46966 Sun May 4 04:32:18 2003
HDNIS01_de.DLL A 434400 Sun May 4 04:32:18 2003
HDNIS01_de.NTF A 790404 Sun May 4 04:32:18 2003
Hddm91c1_de.DLL A 876544 Sun May 4 04:32:18 2003
Hddm91c1_de.INI A 101 Sun May 4 04:32:18 2003
Hddm91c1_de.dat A 5044 Sun May 4 04:32:18 2003
Hddm91c1_de.def A 428 Sun May 4 04:32:18 2003
Hddm91c1_de.hlp A 37699 Sun May 4 04:32:18 2003
Hddm91c1_de.hre A 323584 Sun May 4 04:32:18 2003
Hddm91c1_de.ppd A 26373 Sun May 4 04:32:18 2003
Hddm91c1_de.vnd A 45056 Sun May 4 04:32:18 2003
HDNIS01U_de.DLL A 165888 Sun May 4 04:32:18 2003
HDNIS01U_de.HLP A 19770 Sun May 4 04:32:18 2003
Hddm91c1_de_reg.HLP A 228417 Sun May 4 04:32:18 2003
40976 blocks of size 262144. 731 blocks available
Sie können auch noch prüfen, ob der Zeitstempel der Druck-TDB-Dateien nun aktualisiert ist (und eventuell, ob deren Dateigröße zugenommen hat).
Nun sollte der Treiber in Samba registriert sein. Das können wir leicht nachprüfen und werden es auch gleich tun. Allerdings ist dieser Treiber noch nicht mit einem bestimmten Drucker verbunden. Den Status der Treiberdateien können wir auf mindestens dreierlei Weise überprüfen:
Stöbern Sie auf einem beliebigen Windows-Client in der Netzwerkumgebung, finden Sie dort den Samba-Host, und öffnen Sie den Samba-Ordner Drucker und Faxgeräte. Wählen Sie ein beliebiges Drucker-Icon, und führen Sie einen Rechtsklick aus, um die Drucker- zu wählen. Klicken Sie auf den Reiter Erweitert. Dort ist ein Feld, das den Treiber für diesen Drucker angibt. In einem Drop-Down-Menü können Sie diesen Treiber ändern (achten Sie aber darauf, das nicht unabsichtlich zu tun). Mit dieser Liste haben Sie eine Übersicht aller Treiber, die Samba kennt. Ihr neuer Treiber sollte nun auch darunter sein. (Dabei sieht jede Sorte von Client nur die Liste für ihre eigene Architektur. Wenn Sie nicht alle Treiber für alle Plattformen installiert haben, sieht die Liste unterschiedlich aus, je nachdem, ob Sie sie unter Windows95/98/ME oder Windows NT/2000/XP anschauen.)
Stöbern Sie auf einem Windows 200x/XP-Client (nicht Windows NT) die Netzwerkumgebung auf, suchen Sie den Samba-Server, öffnen Sie den Ordner Drucker des Servers, und führen Sie einen Rechtsklick auf dem weißen Hintergrund aus (ohne markierten Drucker). Wählen Sie im Menü aus. Unter dem Reiter Treiber werden Sie den neuen Treiber aufgelistet sehen. In dieser Ansicht können Sie auch die Liste der zu diesem Treiber gehörenden Dateien inspizieren. (Das funktioniert nicht unter Windows NT, sondern nur unter Windows 2000 und Windows XP; Windows NT verfügt nicht über den Reiter .) Eine alternative und wesentlich schnellere Methode, dieses Dialogfeld unter Windows 2000/XP zu starten, besteht darin, in einer DOS-Shell Folgendes einzugeben (natürlich müssen Sie SAMBA-CUPS durch den Namen Ihres Samba-Servers ersetzen):
rundll32 printui.dll,PrintUIEntry /s /t2 /n\\SAMBA-CUPS
Führen Sie unter einem UNIX-Prompt folgenden Befehl (oder eine Variante davon) aus, wobei SAMBA-CUPS der Name des Samba-Hosts ist und xxxx für das aktuelle an root zugewiesene Samba-Passwort steht:
rpcclient -U'root%xxxx' -c 'enumdrivers' SAMBA-CUPS
Dann sehen Sie eine Liste aller Samba bekannten Treiber. Darunter sollte auch ihr neuer sein. Er wird allerdings nur unter der Überschrift [Windows NT x86] aufgeführt, nicht unter [Windows 4.0], weil Sie diesen Teil nicht installiert haben. Oder haben Sie es doch getan? In unserem Beispiel hat der Treiber den Namen dm9110. Beachten Sie, dass in der dritten Spalte die anderen installierten Treiber doppelt erscheinen: je einmal für jede unterstützte Architektur. Unser neuer Treiber erscheint nur unter Windows NT 4.0 oder 2000. Um ihn auch unter Windows 95, 98 und ME zu sehen, müssen Sie die gesamte Prozedur mit der WIN40-Architektur und dem WIN40-Unterverzeichnis wiederholen.
Sie können den Treiber nennen, wie Sie möchten. Wenn Sie den Schritt adddriver mit den gleichen Dateien wie vorher, aber mit einem anderen Treibernamen wiederholen, funktioniert es genauso:
root# rpcclient -Uroot%xxxx \ -c 'adddriver "Windows NT x86" \ "mydrivername:HDNIS01_de.DLL: \ Hddm91c1_de.ppd:HDNIS01U_de.DLL:HDNIS01U_de.HLP: \ NULL:RAW:Hddm91c1_de.DLL,Hddm91c1_de.INI, \ Hddm91c1_de.dat,Hddm91c1_de.def,Hddm91c1_de.hre, \ Hddm91c1_de.vnd,Hddm91c1_de.hlp,Hddm91c1KMMin.DLL, \ HDNIS01Aux.dll,HDNIS01_de.NTF,Hddm91c1_de_reg.HLP' SAMBA-CUPS cmd = adddriver "Windows NT x86" \ "mydrivername:HDNIS01_de.DLL:Hddm91c1_de.ppd:HDNIS01U_de.DLL:\ HDNIS01U_de.HLP:NULL:RAW:Hddm91c1_de.DLL,Hddm91c1_de.INI, \ Hddm91c1_de.dat,Hddm91c1_de.def,Hddm91c1_de.hre, \ Hddm91c1_de.vnd,Hddm91c1_de.hlp,Hddm91c1KMMin.DLL, \ HDNIS01Aux.dll,HDNIS01_de.NTF,Hddm91c1_de_reg.HLP" Printer Driver mydrivername successfully installed.
Diesen Treiber können Sie mit einer beliebigen Druckerschlange verbinden (allerdings sind Sie dafür verantwortlich, Treiber mit Schlangen zu verbinden, die in Hinblick auf die anvisierten Drucker auch Sinn machen). Den Befehl rpcclient adddriver können Sie nicht mehrfach wiederholen. Bei jeder Ausführung werden die Dateien verbraucht, die Sie in die Freigabe [print$] gelegt, d.h. in die entsprechenden Unterverzeichnisse verschoben haben. Daher müssen Sie vor jedem rpcclient ... adddriver-Befehl den Befehl smbclient ... put ausführen.
Samba muss darüber Bescheid wissen, welcher Treiber zu welchem Drucker gehört. Erstellen Sie eine Zuordnung der Treiber zu ihren Druckern, und speichern Sie diese Information in Sambas Speicher, den TDB-Dateien. Genau dies bewerkstelligt der Befehl rpcclient setdriver:
root# rpcclient -U'root%xxxx' -c 'setdriver dm9110 mydrivername' SAMBA-CUPS cmd = setdriver dm9110 mydrivername Successfully set dm9110 to driver mydrivername.
Ähm, nein, das wollte ich eigentlich gar nicht tun. Also noch einmal, jetzt mit dem beabsichtigten Namen:
root# rpcclient -U'root%xxxx' -c 'setdriver dm9110 dm9110' SAMBA-CUPS cmd = setdriver dm9110 dm9110 Successfully set dm9110 to driver dm9110.
Die Syntax des Befehls lautet:
rpcclient -U'root%sambapassword' -c 'setdriver printername \ drivername' SAMBA-Hostname.
Nun haben wir den größten Teil der Arbeit erledigt, aber noch nicht alles.
Der Befehl setdriver ist nur dann erfolgreich, wenn Samba den Drucker bereits kennt. Ein Fehler in 2.2.x verhindert, dass Samba frisch installierte Drucker erkennt. Dort müssen Sie Samba neu starten oder zumindest ein HUP-Signal an alle laufenden smbd-Prozesse schicken, um dieses Problem zu umgehen: kill -HUP `pidof smbd`.
Wie Don Quixote schon sagte, geht Probieren über Studieren: „The proof of the pudding is in the eating.“ Die Prüfung unserer Einstellungen besteht im erfolgreichen Drucken. Installieren wir also den Druckertreiber auf den Client-PCs. Das ist nicht ganz so einfach, wie es erscheinen mag. Lesen Sie also weiter.
Besonders wichtig ist die Installation auf dem ersten Client-PC (für jede Architektur einzeln). Sobald diese korrekt erfolgt ist, sind alle weiteren Clients leicht einzurichten und sollten keine weitere Aufmerksamkeit benötigen. Es folgt nun eine Beschreibung der Prozedur, die für das erste Mal empfohlenen wird. Sie arbeiten nun auf einer Client-Workstation. Sie sollten sicherstellen, dass Ihre Verbindung nicht unabsichtlich unter dem ungeeigneten Benutzer „nobody“ erfolgt. Geben Sie nun in einer DOS-Shell Folgendes ein:
net use \\SAMBA-SERVER\print$ /user:root
Ersetzen Sie, falls erforderlich, root durch einen anderen gültigen printer admin-Benutzer, der in der Definition angegeben ist. Sollten Sie bereits als anderer Benutzer verbunden sein, so erhalten Sie eine Fehlermeldung. Eine einfache Möglichkeit, diese Verbindung loszuwerden, gibt es nicht, da Windows anscheinend das Konzept des Abmeldens von einer Freigabeverbindung nicht kennt (verwechseln Sie das nicht mit dem Abmelden von der lokalen Workstation, was eine völlig andere Sache ist). Unter Windows NT/2K können Sie ein Abmelden von allen smb/cifs-Verbindungen erzwingen, indem Sie den Dienst „workstation“ neu starten. Sie können versuchen, alle Dateiexplorer- und Internet Explorer-Fenster unter Windows zu schließen. Als letzte Möglichkeit müssen Sie möglicherweise einen Neustart durchführen. Vergewissern Sie sich, dass nicht automatisch eine Verbindung neu hergestellt wird. Es ist eventuell leichter, zu einer anderen Workstation zu gehen und es von dort auszuprobieren. Wenn Sie sicher sind, dass Sie als Benutzer printer admin verbunden sind (das können Sie in Samba mit dem Befehl smbstatus prüfen), führen Sie folgende Schritte auf der Windows-Workstation aus:
Öffnen Sie die Netzwerkumgebung.
Gehen Sie zum Samba-Server.
Öffnen Sie dessen Ordner Drucker und Faxgeräte.
Wählen Sie den Drucker, und führen Sie einen Rechtsklick darauf aus.
Wählen Sie (unter Windows NT4/200x heißt es eventuell ).
Ein neuer Drucker (namens printername auf dem Samba-Server) sollte nun in Ihrem lokalen Druckerordner erschienen sein (prüfen Sie das mit -- -- -- Drucker und Faxgeräte).
Sehr wahrscheinlich möchten Sie nun versuchen, eine Testseite auszudrucken. Schließlich können Sie nun die Druckereigenschaften öffnen, und unter dem Reiter gibt es einen Knopf genau dafür. Aber sehr wahrscheinlich würden Sie eine Fehlermeldung namens Unable to print Test Page erhalten. Der Grund könnte sein, dass noch kein gültiger Device-Modus für den Drucker gesetzt ist oder dass der Satz an „Druckertreiberdaten“ noch immer unvollständig ist.
Sie müssen sicherstellen, dass für den Drucker ein gültiger Device-Modus gesetzt ist. Wir wollen nun erklären, was das bedeutet.
Damit ein Drucker wirklich von einem Windows NT/200x/XP-Client benutzt werden kann, muss er über Folgendes verfügen:
Einen gültigen Device-Modus, der von dem Druckertreiber generiert wird (und Dinge wie die Papiergröße, -ausrichtung und Duplex-Einstellungen definiert)
Einen kompletten Satz an Druckertreiberdaten, der vom Treiber generiert wird
Ist eine dieser Angaben unvollständig, so können die Clients bestenfalls eine suboptimale Ausgabe produzieren. Im schlimmsten Fall kommt unlesbarer Müll oder gar nichts aus dem Drucker. Oder er produziert eine Unmenge Fehlermeldungen beim Versuch, etwas auszudrucken. Samba speichert die genannten Werte sowie alle druckrelevanten Informationen in seinen internen TDB-Datenbankdateien (ntprinters.tdb, ntdrivers.tdb, printing.tdb und ntforms.tdb).
Wofür stehen diese beiden Begriffe? Im Grunde genommen stellen der Device-Modus und der Satz an Druckertreiberdaten eine Ansammlung von Einstellungen für alle Eigenschaften einer Druckerschlange dar, die mit vernünftigen Anfangswerten versehen sind. Device-Modi und Druckertreiberdaten sollten auf dem Druckerserver (dem Samba-Host) vernünftige Anfangswerte haben, damit die Clients sie sofort benutzen können. Wie aber stellen wir diese vernünftigen Werte ein? Das kann man dadurch erreichen, dass man auf die Treiber von einem entfernten NT- (oder 200x/XP-) Client aus zugreift, was in den folgenden Abschnitten beschrieben wird.
Sie sollten sich darüber im Klaren sein, dass ein gültiger Device-Modus nur von einem printer admin oder von root eingestellt werden kann (aus offensichtlichen Gründen). Device-Modi können nur durch die Ausführung des Druckertreiberprogramms selbst korrekt eingestellt werden. Da Samba den Treibercode für diese Win32-Plattform nicht ausführen kann, setzt es dieses Feld anfangs auf NULL (was für Clients kein gültiger verwendbarer Wert ist). Zum Glück generieren die meisten Treiber die Druckertreiberdaten automatisch, die beim Hochladen auf die Freigabe [print$] mit APW oder rpcclient benötigt werden.
Das Generieren und Einstellen eines ersten gültigen Device-Modus erfordert jedoch einige Kitzelei auf dem Client, um ihn auf dem Samba-Server zu setzen. Die einfachste Art, das zu tun, besteht darin, die Papierausrichtung auf dem Drucker des Servers zu ändern. Dabei wird genug vom Druckertreiberprogramm auf dem Client ausgeführt, damit der gewünschte Effekt eintritt und der neue Device-Modus auf unserem Samba-Server eingestellt wird. Dazu können Sie die Seite Druckereigenschaften von Windows NT/200x/XP auf einem Windows-Client benutzen:
Stöbern Sie in der Netzwerkumgebung.
Finden Sie den Samba-Server.
Öffnen Sie den Ordner Drucker und Faxgeräte des Samba-Servers.
Selektieren Sie den entsprechenden freigegebenen Drucker.
Führen Sie einen Rechtsklick auf dem Drucker aus (wenn Sie die Beschreibung im letzten Abschnitt befolgt haben, sind Sie eventuell schon hier).
Selektieren Sie unten im Kontextmenü (wenn das Menü weiter oben noch den Eintrag zeigt, müssen Sie zuerst darauf klicken, um die Treiberinstallation so durchzuführen, wie im letzten Abschnitt gezeigt).
Klicken Sie auf den Reiter Erweitert, dann auf .
Ändern Sie die Seiteneinstellungen für auf (und zurück).
Vergewissern Sie sich, dass Sie die Änderungen zwischen dem Umschalten der Seitenausrichtung auch anwenden, damit die Änderung auch wirksam wird.
Wenn Sie schon dabei sind, möchten Sie hier eventuell auch die gewünschten Druckvoreinstellungen setzen, die dann bei allen zukünftigen Treiberinstallationen auf den verbleibenden Clients angewendet werden.
Diese Prozedur hat das Druckertreiberprogramm auf der Client-Plattform ausgeführt und den korrekten Device-Modus an Samba zurückgegeben, das ihn nun in seinen TDB-Dateien gespeichert hat. Nachdem der Treiber einmal auf dem Client installiert ist, können Sie analoge Schritte befolgen und auf den lokalen Ordner Drucker ebenfalls zugreifen, sofern Sie ein printer admin-Benutzer von Samba sind. Von nun an sollte das Drucken wie erwartet funktionieren.
Samba verfügt auf der Serviceebene über einen Parameter namens default devmode zum Generieren eines Standard-Device-Modus für einen Drucker. Manche Treiber funktionieren gut mit Sambas Standardeigenschaften, andere können eventuell den Spooling-Dienst des Clients zum Absturz bringen. Daher sollten Sie diesen Parameter mit Vorsicht verwenden. Es ist immer besser, den Client einen gültigen Device-Modus für den Drucker erstellen zu lassen und für Sie auf dem Server zu speichern.
Jeder weiterer Treiber kann wie oben beschrieben installiert werden: im Netzwerk stöbern, den Ordner Drucker auf dem Samba-Server öffnen, auf Drucker rechts-klicken und auswählen. Sobald das fertig ist (es sollte nicht länger als ein paar Sekunden dauern, kann aber je nach Netzwerkverhältnissen auch eine Minute dauern), sollten Sie den neuen Drucker im lokalen Ordner Drucker und Faxgeräte Ihrer Client-Workstation finden.
Ihren lokalen Ordner Drucker und Faxgeräte können Sie auf Windows 200x/XP Professional-Workstations auch mit dem folgenden Befehl öffnen:
rundll32 shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder
oder mit diesem Befehl auf Windows NT 4.0-Workstations:
rundll32 shell32.dll,Control_RunDLL MAIN.CPL @2
Sie können diese Befehle entweder in einer DOS-Shell eingeben oder im Feld des -Menüs.
Nachdem Sie den Treiber auf dem Samba-Server installiert haben (in dessen Freigabe [print$], sollten Sie immer sichergehen, dass Ihre erste Client-Installation korrekt beendet wurde. Machen Sie es sich zur Gewohnheit, die allererste Verbindung von einem Client als printer admin zu machen. Damit wird Folgendes garantiert:
Ein erster gültiger Device-Modus wird tatsächlich initialisiert (siehe oben für erklärende Details).
Die Standarddruckeinstellungen Ihres Druckers sind für alle weiteren Client-Installationen so, wie Sie es wünschen.
Tun Sie dies durch eine Änderung der Papierausrichtung auf Querformat, klicken Sie auf Anwenden, und machen Sie die Einstellung anschließend wieder rückgängig. Als Nächstes ändern Sie die anderen Einstellungen (Sie wollen z.B. die Standardpapiergröße nicht auf Letter setzen, wenn Sie immer A4 benutzen, oder? Vielleicht möchten Sie den Drucker standardmäßig duplex drucken lassen usw.).
Probieren Sie folgenden Befehl beim Prompt einer Windows 200x/XP-DOS-Shell aus, um sich als root mit einem Samba-Drucker zu verbinden:
C:\> runas /netonly /user:root "rundll32 printui.dll,PrintUIEntry /p /t3 /n \\SAMBA-SERVER\printername"
Sie werden nun nach dem Samba-Passwort von root gefragt. Geben Sie es ein, warten Sie einige Sekunden, klicken Sie auf , und fahren Sie mit der Einstellung der Standardoptionen für Druckaufträge fort, die von allen Clients benutzt werden sollen. Alternativ zu root können Sie ein anderes Mitglied von printer admin angeben.
Nun haben alle anderen Benutzer, die den Treiber auf die gleiche Weise (genannt „Point'n'Print“) herunterladen und installieren, dieselben voreingestellten Werte dafür. Wenn Sie diesen Schritt auslassen, wird Ihre Telefonauskunft eine Menge Anrufe von Ihren Benutzern bekommen, aber vielleicht lieben Sie es ja auch, mit diesen zu sprechen.
Ihr Treiber ist installiert und bereit für die Installation per Point'n'Print durch die Clients. Vielleicht haben Sie versucht, ihn auf Ihrem ersten Client-Rechner herunterzuladen und zu benutzen, aber warten Sie noch. Stellen wir erst sicher, dass Sie mit ein paar Tipps und Tricks vertraut sind, die eventuell hilfreich für Sie sein werden. Nehmen wir z.B. an, Sie haben auf dem Drucker keine Standardwerte eingestellt, wie es Ihnen in den vorherigen Absätzen geraten wurde. Ihre Benutzer beklagen sich über verschiedene Probleme, z.B. „Wir müssen für jeden Druckauftrag die Papiergröße von Letter auf A4 umstellen, und das wird nicht gespeichert.“)
Der letzte Satz mag von einigen Benutzern und Admins mit gemischten Gefühlen betrachtet werden. Sie haben stundenlang gekämpft und es nicht geschafft, an einen Punkt zu kommen, an dem ihre Einstellungen anscheinend gespeichert werden. Es ist nicht deren Schuld. Das Verwirrende ist, dass Sie in dem Dialogfeld mit mehreren Reitern, das nach einem Rechtsklick auf dem Druckernamen und der Auswahl von erscheint, zu zwei scheinbar identischen Dialogfeldern gelangen können, die beide behaupten, Ihnen zu helfen, Druckereigenschaften auf dreierlei Art einzustellen. Hier ist die definitive Antwort zu dieser FAQ über die Samba-Standarddruckereinstellungen:
„Ich kann für alle Benutzer von Windows 200x/XP keine Standarddruckoptionen einstellen und speichern. Warum nicht?“ Wie haben Sie es versucht? Ich wette, auf die falsche Art. (Aber es ist nicht leicht, das herauszufinden). Es gibt drei verschiedene Wege, auf denen Sie zu einem Dialogfeld gelangen, das scheinbar alles einstellt. Alle drei Dialogfelder sehen gleich aus, aber nur eines davon tut das, was Sie möchten. Um dies für alle Benutzer zu machen, müssen Sie Administrator oder Print Administrator sein. Auf folgende Weise kann ich es unter XP Professional reproduzieren:
Der erste „falsche“ Weg:
Öffnen Sie den Ordner Drucker.
Führen Sie einen Rechtsklick auf dem Drucker aus (entfernterdrucker(((Schreibweise okay so?))) auf cupshost), und wählen Sie im Kontextmenü aus.
Sehen Sie sich dieses Dialogfeld genau an, und prägen Sie sich ein, wie es aussieht.
Der zweite „falsche“ Weg:
Öffnen Sie den Ordner .
Führen Sie einen Rechtsklick auf dem Drucker aus (entfernterdrucker(((s.o.))) auf cupshost), und wählen Sie im Kontextmenü aus.
Klicken Sie auf den Reiter Allgemein tab
Klicken Sie auf
Ein neues Dialogfeld wird geöffnet. Halten Sie es geöffnet, und gehen Sie zurück zu seinem Elterndialogfeld.
Der dritte und korrekte Weg: (Sollten Sie das von Anfang an tun, führen Sie einfach die Schritte 1 und 2 aus der obigen zweiten Methode aus).
Klicken Sie auf den Reiter Erweitert. (Falls alles „grau hinterlegt“ ist, so sind Sie nicht als Benutzer mit ausreichenden Rechten angemeldet.)
Klicken Sie auf .
Klicken Sie auf einem beliebigen der beiden neuen Reiter auf den Button Erweitert.
Ein neues Dialogfeld wird geöffnet. Vergleichen Sie dieses mit dem anderen. Sehen Sie gleich aus, wenn Sie das eine aus „B.5“ mit dem aus „A.3“ vergleichen?
Sehen Sie irgendeinen Unterschied in den beiden Dialogfeldern? Ich auch nicht. Aber nur im letzten, zu dem Sie mit den Schritten C.1 bis 6 gelangt sind, werden Einstellungen permanent gespeichert und werden daher zu Vorgabewerten bei neuen Benutzern. Wenn Sie möchten, dass diese Vorgabewerte für alle Clients gleich sind, müssen Sie diese Schritte als Administrator (printer admin in smb.conf) ausführen, bevor ein Client den Treiber herunterlädt (später können die Clients ihre eigenen benutzerspezifischen Vorgabewerte mit Hilfe der obigen Prozeduren A oder B einstellen). Windows 200x/XP erlaubt benutzerspezifische Vorgabewerte und solche, die die Rechner vom Administrator erhalten, bevor die Benutzer ihre eigenen Werte einstellen. Die Dialogfelder, die diesen identisch aussehenden Dialogfeldern vorausgehen, unterscheiden sich geringfügig in den Namen ihrer Fenster: eines heißt Default Print Values for Printer Foo on Server Bar(((???))) (das ist das Fenster, das Sie benötigen), und ein anderes heißt „Print Settings for Printer Foo on Server Bar“(((???))). Zu letzterem gelangen Sie, wenn Sie auf den Drucker rechts-klicken und auswählen. Weil man Ihnen zur Zeit von Windows NT gesagt hat, Sie sollten dieses Fenster benutzen, ist es nur natürlich, es unter Windows 200x/XP genauso auszuprobieren. Man würde nicht im Traum daran denken, dass man nun einen anderen Weg gehen muss, um zu einem identisch aussehenden, aber funktional verschiedenen Dialogfeld zu gelangen, um Vorgabewerte für alle Benutzer zu setzen.
Versuchen Sie (unter Windows 200x/XP), diesen Befehl auszuführen (als Benutzer mit den nötigen Rechten):
rundll32 printui.dll,PrintUIEntry /p /t3 /n\\SAMBA-SERVER\printersharename
Um den Reiter mit dem Knopf Standardwerte zu sehen (den Sie benötigen), führen Sie auch diesen Befehl aus:
rundll32 printui.dll,PrintUIEntry /p /t0 /n\\SAMBA-SERVER\printersharename
Um den Reiter mit dem Button Printing Preferences zu sehen (derjenige, der keine systemweiten Vorgabewerte setzt), können Sie die Befehle aus einer DOS-Shell oder mit -> ausführen.
Während der letzten Entwicklungsphase von Samba ist ein Problem aufgetaucht, das die Unterstützung beim Herunterladen von Treibern für Hunderte von Druckern betrifft. Den APW in Windows NT dafür zu benutzen ist, gelinde gesagt, ein wenig umständlich. Wenn Sie sich keine Sehnenscheidenentzündung allein von der Klick-Orgie bei der Druckerinstallation holen möchten, müssen Sie über ein nicht-interaktives Skript nachdenken.
Wenn mehr als ein Drucker den gleichen Treiber verwendet, kann man den Befehl rpcclient setdriver benutzen, um den mit einer Druckerschlage verbundenen Treiber zu setzen. Wenn der Treiber einmal nach [print$] hochgeladen und in den Drucker-TDBs registriert ist, kann er von mehreren Druckerschlangen verwendet werden. In diesem Fall müssen Sie nur den Unterbefehl setprinter von rpcclient bei jeder Schlange wiederholen (ohne, dass Sie adddriver wiederholt ausführen müssen). Das Folgende ist ein Beispiel dafür, wie man das machen kann:
root# rpcclient SAMBA-CUPS -U root%secret -c 'enumdrivers' cmd = enumdrivers [Windows NT x86] Printer Driver Info 1: Driver Name: [infotec IS 2075 PCL 6] Printer Driver Info 1: Driver Name: [DANKA InfoStream] Printer Driver Info 1: Driver Name: [Heidelberg Digimaster 9110 (PS)] Printer Driver Info 1: Driver Name: [dm9110] Printer Driver Info 1: Driver Name: [mydrivername] [....]
root# rpcclient SAMBA-CUPS -U root%secret -c 'enumprinters' cmd = enumprinters flags:[0x800000] name:[\\SAMBA-CUPS\dm9110] description:[\\SAMBA-CUPS\dm9110,,110ppm HiVolume DANKA Stuttgart] comment:[110 ppm HiVolume DANKA Stuttgart] [....]
root# rpcclient SAMBA-CUPS -U root%secret -c \ 'setdriver dm9110 "Heidelberg Digimaster 9110 (PS)"' cmd = setdriver dm9110 Heidelberg Digimaster 9110 (PPD) Successfully set dm9110 to driver Heidelberg Digimaster 9110 (PS).
root# rpcclient SAMBA-CUPS -U root%secret -c 'enumprinters'
cmd = enumprinters
flags:[0x800000]
name:[\\SAMBA-CUPS\dm9110]
description:[\\SAMBA-CUPS\dm9110,Heidelberg Digimaster 9110 (PS),\
110ppm HiVolume DANKA Stuttgart]
comment:[110ppm HiVolume DANKA Stuttgart]
[....]
root# rpcclient SAMBA-CUPS -U root%secret -c 'setdriver dm9110 mydrivername' cmd = setdriver dm9110 mydrivername Successfully set dm9110 to mydrivername.
root# rpcclient SAMBA-CUPS -U root%secret -c 'enumprinters'
cmd = enumprinters
flags:[0x800000]
name:[\\SAMBA-CUPS\dm9110]
description:[\\SAMBA-CUPS\dm9110,mydrivername,\
110ppm HiVolume DANKA Stuttgart]
comment:[110ppm HiVolume DANKA Stuttgart]
[....]
Es ist vielleicht nicht so einfach festzustellen, dass der erste Aufruf von enumprinters den Drucker „dm9110“ mit einem leeren String angezeigt hat, wo der Treiber aufgeführt sein sollte (zwischen den zwei Kommas im Beschreibungsfeld). Nachdem der Befehl setdriver ausgeführt wurde, ist alles in Ordnung.
Standardmäßig zeigt Samba im Ordner Drucker alle Druckerfreigaben an, die in smb.conf definiert sind. Außerdem befindet sich in diesem Ordner das Icon für den Assistent für die Druckerinstallation in Windows NT. Der APW wird nur dann gezeigt, wenn:
Der verbundene Benutzer erfolgreich ein OpenPrinterEx(\\server) mit Administratorrechten, d.h. als root oder printer admin, ausführen kann.
Versuchen Sie Folgendes beim Prompt einer DOS-Shell unter Windows 200x/XP:
runas /netonly /user:root rundll32 printui.dll,PrintUIEntry /p /t0 /n \\SAMBA-SERVER\printersharename
Klicken Sie auf .
... die Einstellung show add printer wizard = yes enthält (das ist der Vorgabewert).
Der APW kann verschiedene Dinge erledigen:
Einen Treiber auf der Freigabe [print$] von Samba hochladen.
Einen hochgeladenen Treiber mit einer vorhandenen (noch treiberlosen) Druckerschlange verbinden.
Den aktuell verwendeten Treiber für eine vorhandene Druckerschlange durch einen zuvor hochgeladenen Treiber ersetzen.
Einen völlig neuen Drucker auf dem Samba-Host hinzufügen (nur in Verbindung mit einem funktionierenden add printer command. Ein entsprechendes delete printer command zum Entfernen von Einträgen aus dem Ordner Drucker wird eventuell auch angeboten).
Für den letzten Punkt, einen neuen Drucker hinzuzufügen, ist mehr Aufwand nötig als für die anderen. Um mit dem APW einen Drucker zu einem Samba-Server erfolgreich hinzufügen zu können, muss für add printer command ein Wert definiert sein. Das Programm muss den Drucker mittels eines so genannten „hooks“ erfolgreich ins UNIX-Drucksystem einhängen (d.h. in die Dateien /etc/printcap, /etc/cups/printers.conf oder andere entsprechende Dateien) sowie in smb.conf, falls nötig.
Wenn Sie APW auf einem Client benutzen und die genannte Druckerfreigabe nicht existiert, wird smbd add printer command ausführen und versuchen, die neue Druckerfreigabe zu finden. Wenn die Freigabe weiterhin nicht definiert ist, wird ein Fehler namens Access Denied an den Client zurückgegeben. add printer command wird im Kontext des verbundenen Benutzers ausgeführt, was nicht notwendigerweise der von root ist. Mit map to guest = bad user wurden Sie vielleicht unabsichtlich mit den falschen Rechten verbunden. Sie sollten das mit dem Befehl smbstatus überprüfen.
Wenn Sie erst einmal mit den falschen Angaben verbunden sind, gibt es keine andere Möglichkeit, die Situation zu ändern, als alle Explorer-Fenster zu schließen und vielleicht einen Neustart durchzuführen.
Der Befehl net use \\SAMBA-SERVER\sharename /user:root gibt Ihnen folgende Fehlermeldung: „Multiple connections to a server or a shared resource by the same user utilizing the several user names are not allowed. Disconnect all previous connections to the server, esp. the shared resource, and try again.“
Jeder Versuch einer „Verbindung eines Netzwerklaufwerks“ von \\SAMBASERVER\\print$ mit z: wird mit dieser hartnäckigen Meldung quittiert: „This network folder is currently connected under different credentials (username and password). Disconnect first any existing connection to this network share in order to connect again under a different username and password“.
Also beenden Sie alle Verbindungen. Sie versuchen es erneut. Wieder erhalten Sie die gleiche Meldung. Sie überprüfen die Einstellungen auf der Seite von Samba mit dem Befehl smbstatus. Ja, es gibt weitere Verbindungen. Sie terminieren sie alle. Der Client gibt Ihnen weiterhin die gleiche Fehlermeldung aus. Sie sehen sich die Datei smbd.log mit einem hohen Debug-Level an und versuchen eine neue Verbindung: die gleiche Fehlermeldung, aber keine einzige Zeile in der Log-Datei. Sie beginnen sich zu fragen, ob es überhaupt einen Verbindungsversuch gab. Sie führen ethereal und tcpdump aus, während Sie einen neuen Verbindungsversuch starten. Ergebnis: Kein einziges Byte wird übertragen. Windows gibt immer noch die Fehlermeldung aus. Sie schließen alle Explorer-Fenster und starten es neu. Sie versuchen eine Verbindung zu und dieses Mal funktioniert es! Anscheinend speichert Windows irgendwo Verbindungsinformationen zwischen, ohne diese zu aktualisieren (und wenn Sie Pech haben, müssen Sie einen Neustart durchführen, um die Fehlermeldung loszuwerden).
Die einfachste Art, alle Verbindungen von Ihrem Client zu einem Server gewaltsam zu terminieren, besteht im Ausführen von:
C:\> net use * /delete
Dadurch werden auch alle abgebildeten Laufwerke getrennt, so dass Sie neue Verbindungen nach Bedarf erstellen können.
Sie müssen extrem vorsichtig ein, wenn Sie sich Notizen zu den Dateien machen, die zu einem bestimmten Treiber gehören. Verwechseln Sie nicht die Dateien für die Treiberversion „0“ (für Windows 9x/Me gehen diese nach [print$]/WIN/0/), Treiberversion 2 (Kernel-Modus-Treiber für Windows NT, die nach [print$]/W32X86/2/ gehen und eventuell auch unter Windows 200x/XP benutzt werden können) und Treiberversion „3“ (Nicht-Kernel-Modus-Treiber unter [print$]/W32X86/3/, können nicht unter Windows NT benutzt werden). Diese verschiedenen Treiberversionen enthalten recht oft Dateien, die den gleichen Namen haben, aber sehr verschieden sind. Wenn Sie diese im Windows Explorer betrachten (Sie finden sie in %WINDOWS%\system32\spool\drivers\W32X86\), sehen Sie wahrscheinlich Namen in Großbuchstaben, während der Befehl enumdrivers aus Samba große und kleine oder nur kleine Buchstaben anzeigen würde. Daher ist es leicht, sie zu verwechseln. Wenn Sie sie manuell mit rpcclient und dessen Unterbefehlen installieren, bekommen Sie vielleicht nicht einmal eine Fehlermeldung. Erst bei der späteren Installation auf einem Client werden Sie Fehlermeldungen wie This server has no appropriate driver for the printer fnden.
Hier ist ein Beispiel. Sie sollten sich die verschiedenen Dateien sehr genau anschauen und ihre Namen und Schreibweise vergleichen, um die Unterschiede in der Zusammensetzung von Version 2 und 3 der zwei Sätze zu bemerken. Man beachte: Da Version 0 des Satzes 40 Dependentfiles enthielt, habe ich diese aus Platzgründen ausgelassen:
root# rpcclient -U 'Administrator%secret' -c 'enumdrivers 3' 10.160.50.8
Printer Driver Info 3:
Version: [3]
Driver Name: [Canon iR8500 PS3]
Architecture: [Windows NT x86]
Driver Path: [\\10.160.50.8\print$\W32X86\3\cns3g.dll]
Datafile: [\\10.160.50.8\print$\W32X86\3\iR8500sg.xpd]
Configfile: [\\10.160.50.8\print$\W32X86\3\cns3gui.dll]
Helpfile: [\\10.160.50.8\print$\W32X86\3\cns3g.hlp]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\aucplmNT.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\ucs32p.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\tnl32.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\aussdrv.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cnspdc.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\aussapi.dat]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cns3407.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\CnS3G.cnt]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\NBAPI.DLL]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\NBIPC.DLL]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cpcview.exe]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cpcdspl.exe]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cpcedit.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cpcqm.exe]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cpcspl.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cfine32.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cpcr407.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\Cpcqm407.hlp]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cpcqm407.cnt]
Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cns3ggr.dll]
Monitorname: []
Defaultdatatype: []
Printer Driver Info 3:
Version: [2]
Driver Name: [Canon iR5000-6000 PS3]
Architecture: [Windows NT x86]
Driver Path: [\\10.160.50.8\print$\W32X86\2\cns3g.dll]
Datafile: [\\10.160.50.8\print$\W32X86\2\IR5000sg.xpd]
Configfile: [\\10.160.50.8\print$\W32X86\2\cns3gui.dll]
Helpfile: [\\10.160.50.8\print$\W32X86\2\cns3g.hlp]
Dependentfiles: [\\10.160.50.8\print$\W32X86\2\AUCPLMNT.DLL]
Dependentfiles: [\\10.160.50.8\print$\W32X86\2\aussdrv.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\2\cnspdc.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\2\aussapi.dat]
Dependentfiles: [\\10.160.50.8\print$\W32X86\2\cns3407.dll]
Dependentfiles: [\\10.160.50.8\print$\W32X86\2\CnS3G.cnt]
Dependentfiles: [\\10.160.50.8\print$\W32X86\2\NBAPI.DLL]
Dependentfiles: [\\10.160.50.8\print$\W32X86\2\NBIPC.DLL]
Dependentfiles: [\\10.160.50.8\print$\W32X86\2\cns3gum.dll]
Monitorname: [CPCA Language Monitor2]
Defaultdatatype: []
Wenn wir die Dateien der „Version 2“ und der „Version 3“ in verschiedene Textdateien schreiben und das Ergebnis vergleichen, erhalten wir folgendes Bild:
root# sdiff 2-files 3-files
cns3g.dll cns3g.dll
iR8500sg.xpd iR8500sg.xpd
cns3gui.dll cns3gui.dll
cns3g.hlp cns3g.hlp
AUCPLMNT.DLL | aucplmNT.dll
> ucs32p.dll
> tnl32.dll
aussdrv.dll aussdrv.dll
cnspdc.dll cnspdc.dll
aussapi.dat aussapi.dat
cns3407.dll cns3407.dll
CnS3G.cnt CnS3G.cnt
NBAPI.DLL NBAPI.DLL
NBIPC.DLL NBIPC.DLL
cns3gum.dll | cpcview.exe
> cpcdspl.exe
> cpcqm.exe
> cpcspl.dll
> cfine32.dll
> cpcr407.dll
> Cpcqm407.hlp
> cpcqm407.cnt
> cns3ggr.dll
Lassen Sie sich nicht foppen! Treiberdateien mit identischen Namen für jede Version können sich inhaltlich unterscheiden, wie Sie aus diesem Größenvergleich erkennen können:
root# for i in cns3g.hlp cns3gui.dll cns3g.dll; do \
smbclient //10.160.50.8/print\$ -U 'Administrator%xxxx' \
-c "cd W32X86/3; dir $i; cd .. ; cd 2; dir $i"; \
done
CNS3G.HLP A 122981 Thu May 30 02:31:00 2002
CNS3G.HLP A 99948 Thu May 30 02:31:00 2002
CNS3GUI.DLL A 1805824 Thu May 30 02:31:00 2002
CNS3GUI.DLL A 1785344 Thu May 30 02:31:00 2002
CNS3G.DLL A 1145088 Thu May 30 02:31:00 2002
CNS3G.DLL A 15872 Thu May 30 02:31:00 2002
In meinem Beispiel gab es sogar noch mehr Unterschiede, als hier gezeigt werden. Die Schlussfolgerung lautet: Sie müssen sehr vorsichtig sein, um die korrekten Treiberdateien für jede Treiberversion auszuwählen. Verlassen Sie sich nicht allein auf die Namen, und tauschen Sie keine Dateien aus, die zu verschiedenen Treiberversionen gehören!
Windows NT/2000-Druckerserver verbinden mit jedem Drucker einen Port. Diese haben normalerweise die Form LPT1:, COM1:, FILE: usw. Samba muss das Konzept von Ports, die mit einem Drucker verbunden sind, ebenfalls unterstützen. Standardmäßig existiert auf einem System nur ein Drucker-Port namens „Samba Printer Port“. Um zu drucken, braucht Samba einen solchen „port“ nicht wirklich, er wird lediglich von Windows-Clients benötigt. Diese bestehen darauf, dass man ihnen einen verfügbaren Port mitteilt, wenn sie danach fragen, sonst erhalten Sie von ihnen eine Fehlermeldung. Daher fingiert Samba die Port-Informationen, damit Windows-Clients glücklich sind.
Auch das Konzept des Printer Poolings wird intern von Samba nicht unterstützt. Beim Printer Pooling wird ein logischer Drucker mit mehreren Ports für eine Art Lastausgleich oder Überlauf verbunden.
Wenn Sie aus dem einen oder anderen Grunde mehrere Ports definiert haben müssen (meine Benutzer und mein Chef sollten nicht wissen, dass sie mit Samba arbeiten), konfigurieren Sie enumports command, mit dem ein externes Programm definiert werden kann, das eine Liste von Ports auf einem System generieren kann.
Nun können Sie also ausdrucken, aber es gibt weiterhin noch Probleme. Die meisten Druckaufträge werden prima ausgedruckt, einige werden aber gar nicht gedruckt. Manche Aufträge haben Probleme mit Fonts, die nicht gut aussehen. Manche Aufträge werden sehr schnell gedruckt, andere extrem langsam. Wir können es nicht gänzlich abhandeln, aber wir möchten Sie dazu ermuntern, den kurzen Absatz über „Das Vermeiden von kritischen PostScript-Treiber-Einstellungen auf dem Client“ in dem Kapitel über das Drucken mit CUPS zu lesen.
Das Tool-Set namens Imprints bietet ein UNIX-Äquivalent des Assistenten für die Druckerinstallation von Windows NT. Vollständige Informationen dazu entnehmen Sie bitte der Website von Imprints wie auch der Dokumentation, die in der Quelldistribution von Imprints enthalten ist. Dieser Abschnitt enthält nur eine kurze Einführung zu den Möglichkeiten von Imprints.
Leider wird das Tool-Set Imprints nicht mehr weiter gepflegt. Seit Dezember 2000 sucht das Projekt einen neuen Leiter. Die wichtigsten Fähigkeiten dafür sind Perl-Kenntnisse und Interesse am Drucken auf Basis von MS-RPC in Samba. Wenn Sie sich freiwillig melden möchten, koordinieren Sie das bitte auf der technischen Mailingliste zu Samba. Das Tool-Set ist noch immer in einem benutzbaren Zustand, allerdings nur für eine Reihe älterer Druckermodelle, für die man vorbereitete Pakete benutzen kann. Wenn Imprints eine Zukunft haben soll, dann werden Pakete auch für aktuellere Drucker benötigt.
Imprints ist eine Sammlung von Werkzeugen, die folgende Ziele unterstützen:
Bereitstellen einer zentralen Informationsstelle für Druckertreiberpakete zu Windows NT und 95/98
Bereitstellen der notwendigen Werkzeuge zum Erstellen von Imprints-Druckertreiberpaketen
Bereitstellen eines Installationsprogramms, das Druckertreiber von einer zentralen Internet- (oder Intranet-)Datenbank eines Imprints-Servers erhält und sie auf entfernten Samba- und Windows NT4-Druckerservern installiert
Die Erstellung von Druckertreiberpaketen darzustellen übersteigt den Rahmen dieses Kapitels bei weitem (weitere Information darüber entnehmen Sie bitte der Datei Imprints.txt in der Samba-Distribution). Ein Imprints-Treiberpaket ist, kurz gesagt, ein gzip-komprimiertes tar-Archiv mit den Treiberdateien, den relevanten INF-Dateien sowie einer Steuerdatei, die das Installationsprogramm benötigt.
Der Imprints-Server ist eigentlich ein Datenbankserver, der über standardisierte HTTP-Mechanismen abgefragt werden kann. Zu jedem Druckereintrag in der Datenbank gehört eine URL für das eigentliche Herunterladen des Pakets. Jedes Paket ist mit Hilfe von GnuPG digital signiert, so dass man überprüfen kann, ob das heruntergeladene Paket wirklich dasjenige in der Imprints-Datenbank ist. Es wird sehr empfohlen, diese Sicherheitsüberprüfung nicht zu deaktivieren.
Weitergehende Informationen zum Imprints-Installationsprogramm finden Sie in der Dokumentationsdatei Imprints-Client-HOWTO.ps, die im Imprints-Quellpaket enthalten ist. Das Imprints-Installationsprogramm gibt es in zwei verschiedenen Ausführungen:
Als eine Anzahl von Perl-Kommandozeilenskripten
Als eine auf GTK+ basierende grafische Schnittstelle zu den Perl-Kommandozeilenskripten
Das Installationsprogramm bietet (in beiden Ausführungen) die Möglichkeit, den Imprints-Datenbankserver nach einer Namensliste passender Druckermodelle abzufragen, ebenso wie die Möglichkeit, die Treiber auf entfernten Samba- und Windows NT-Druckerservern herunterzuladen und zu installieren.
Der grundlegende Installationsvorgang besteht aus vier Schritten, und der Perl-Code ist um smbclient und rpcclient herum aufgebaut.
Für jede unterstützte Architektur eines gegebenen Druckers:
rpcclient: Hole das passende Verzeichnis zum Hochladen auf dem entfernten Server.
smbclient: Lade die Treiberdateien hoch.
rpcclient: Setze ein AddPrinterDriver() MS-RPC ab.
rpcclient: Setze ein AddPrinterEx() MS-RPC ab, um den Drucker tatsächlich zu erstellen.
Eines der Probleme bei der Implementierung des Imprints-Tool-Sets bestand in den Namensräumen zwischen verschiedenen unterstützten Client-Architekturen. Windows NT zum Beispiel enthält einen Treiber namens „Apple LaserWriter II NTX v51.8“, und Windows 95 nennt seine Version dieses Treibers „Apple LaserWriter II NTX“.
Das Problem besteht darin zu wissen, welche Client-Treiber für einen Drucker hochgeladen wurden Aufmerksame Leser werden sich erinnern, dass das Dialogfeld Druckereingeschaften in Windows NT nur Platz für den Namen eines Druckertreibers enthält. Ein schneller Blick auf die System-Registry von Windows NT 4.0
HKLM\System\CurrentControlSet\Control\Print\Environment
genügt, um festzustellen, dass Windows NT immer den NT-Treibernamen benutzt. Das ist in Ordnung, da Windows NT immer verlangt, dass mindestens die Windows NT-Version des Druckertreibers vorhanden ist. Samba verlangt das intern nicht, also: „Wie kann man den NT-Treibernamen benutzen, falls er noch nicht installiert wurde?“
Man umgeht diese Einschränkung dadurch, dass man verlangt, dass alle Imprints-Druckertreiberpakete sowohl für Intel Windows NT als auch für 95/98 Druckertreiber enthalten und dass der NT-Treiber als Erstes installiert wird.
Folgender Artikel aus der MS Knowledge-Base kann eventuell hilfreich sein, wenn Sie mit Clients unter Windows 2000 umgehen müssen: How to Add Printers with No User Interaction in Windows 2000, (http://support.microsoft.com/default.aspx?scid=kb;en-us;189105). Er gilt auch für Clients unter Windows XP Professional. Die in diesem Abschnitt skizzierten Ideen wurden von diesem Artikel inspiriert, der eine Methode auf der Kommandozeile beschreibt, mit der Netzwerk- und lokale Drucker und ihre Treiber installiert werden können. Am nützlichsten ist sie, wenn sie in Anmeldeskripten integriert wird. Welche Optionen verfügbar sind, können Sie sehen, wenn Sie folgenden Befehl in einer DOS-Shell eingeben:
rundll32 printui.dll,PrintUIEntry /?
Es erscheint ein Fenster, das Ihnen alle verfügbaren Kommandozeilenschalter anzeigt. Eine umfangreiche Beispielliste ist ebenfalls vorhanden. Das geht nur bei Windows 200x/XP, aber nicht bei Windows NT. Windows NT verfügt vermutlich über einige andere Werkzeuge im entsprechenden Resource Kit. Hier ist ein Vorschlag dafür, was ein Client-Anmeldeskript enthalten könnte, mit einer kurzen Erklärung dessen, was die Zeilen wirklich tun (es funktioniert, wenn Windows 200x/XP-Clients über Samba auf Drucker zugreifen, und für Windows-basierte Druckerserver funktioniert es auch):
rundll32 printui.dll,PrintUIEntry /dn /n "\\cupsserver\infotec2105-IPDS" /q rundll32 printui.dll,PrintUIEntry /in /n "\\cupsserver\infotec2105-PS" rundll32 printui.dll,PrintUIEntry /y /n "\\cupsserver\infotec2105-PS"
Dies ist eine Liste der verwendeten Kommandozeilen-Parameter:
löscht einen Netzwerkdrucker.
stiller Modus.
benennt einen Drucker.
fügt eine Netzwerkdruckerverbindung hinzu.
stellt den Drucker als Standarddrucker ein.
Zeile 1 löscht einen vorher eventuell vorhandenen Netzwerkdrucker infotec2105-IPDS (der native Windows-Treiber mit LPRng benutzt hatte, die vom Server entfernt wurden, als der Server auf CUPS umgestellt wurde). Das /q am Ende verhindert, dass Bestätigungs- oder Fehlerdialogfelder eingeblendet werden. Diese sollten bei einem Benutzer nicht erscheinen, der sich gerade anmeldet.
Zeile 2 fügt den neuen Drucker infotec2105-PS hinzu (der tatsächlich das gleiche physische Gerät ist, aber nun vom neuen CUPS-Drucksystem betrieben wird und mit den CUPS/Adobe-PS-Treibern verbunden ist). Der Drucker und sein Treiber müssen in Samba hinzugefügt worden sein, bevor der Benutzer sich anmeldet (z.B. durch eine Prozedur, wie sie oben in diesem Kapitel beschrieben wurde, oder durch die Ausführung von cupsaddsmb). Der Treiber wird nun automatisch auf den Client-PC heruntergeladen, auf dem der Benutzer sich gerade anmeldet.
Zeile 3 setzt den Standarddrucker auf diesen neuen Netzwerkdrucker (es mag mehrere andere auf die gleiche Art installierte Drucker geben, und einige können auch lokal sein, daher haben wir uns für einen Standarddrucker entschieden). Die Wahl des Standarddruckers darf für verschiedene Benutzer natürlich unterschiedlich sein.
Die zweite Zeile funktioniert nur, wenn der Drucker infotec2105-PS eine bereits funktionierende Druckerschlange auf dem cupsserver hat und wenn die Druckertreiber erfolgreich ins Treiber-Repository [print$] von Samba hochgeladen wurden (mit APW, smbclient/rpcclient oder cupsaddsmb). Manche Samba-Versionen vor der Version 3.0 verlangten nach der Druckerinstallation und dem Hochladen des Treibers einen Neustart von smbd, wenn das Skript (oder irgendein anderer Vorgang, bei dem ein Treiber heruntergeladen wurde) nicht versagen sollte.
Da es keine einfache Methode gibt, aus dem Anmeldeskript heraus zu testen, ob ein installierter Netzwerkdrucker vorhanden ist, sollten Sie es erst gar nicht versuchen, sondern die Deinstallation/Reinstallation jedes Mal gestatten, wenn ein Benutzer sich anmeldet. Es passiert sowieso sehr schnell (in 1 bis 2 Sekunden).
Weitere Vorteile hiervon sind:
Alle Änderungen an den Standardeinstellungen des Druckers werden automatisch bei jeder Benutzeranmeldung weitergegeben.
Benutzer haben die gleichen Einstellungen auch bei der Anmeldung von verschiedenen Workstations in die Domäene („roaming“).
Da Netzwerkdrucker pro Benutzer installiert werden, erleichtert es das ungemein, die Installation immer aktuell zu halten. Die wenigen zusätzlichen Sekunden bei der Anmeldung sind kaum bemerken. Drucker können nach Belieben auf dem Server zentral hinzugefügt, verändert und gelöscht werden, ohne dass auf den Clients ein Eingriff von Benutzerseite nötig wäre (Sie müssen lediglich die Anmeldeskripten aktualisieren).
Der Befehl addprinter kann so konfiguriert werden, dass er von Samba als Shell-Skript oder als Programm ausgeführt wird. Er wird dann aufgerufen, wenn APW von einem Client auf dem Samba-Druckerserver ausgeführt wird. Der APW bittet den Benutzer, mehrere Felder auszufüllen, z.B. Druckername, verwendeter Treiber, Kommentar, Port-Monitor usw. Diese Parameter werden vom APW an Samba weitergegeben. Falls der Befehl addprinter so entworfen ist, dass er einen neuen Drucker erstellen kann (dadurch, dass auf älteren Systemen korrekte printcap-Einträge geschrieben werden oder auf moderneren Systemen der Befehl lpadmin ausgeführt wird) und die entsprechende Freigabe erstellen kann, dann erzeugt der APW in Samba und dem UNIX-Drucksubsystem tatsächlich einen neuen Drucker!
Die grundlegende NT-artige Druckertreiberverwaltung hat sich in Version 3.0 nicht wesentlich gegenüber den Versionen 2.2.x verändert (abgesehen von vielen kleinen Verbesserungen). Hier sollte die Migration sehr einfach sein, besonders, wenn Sie den obigen Ratschlag befolgt haben, veraltete Parameter in Ihren Einstellungen nicht mehr zu benutzen. Mehr Aufwand ist es bei der Migrationen einer vorhandenen Einstellung unter 2.0.x oder wenn Sie in Ihren Samba 2.2-Installationen weiterhin auf die Art von Windows 9x/Me gedruckt haben. Lesen Sie bitte die entsprechenden Release Notes und die HOWTO-Collection für Samba-2.2.x. Sie können mehrere Wege einschlagen. Hier sind einige mögliche Migrationsszenarien:
Sie müssen die neue Drucker- und Treiberunterstützung für Windows NT studieren und anwenden. Die vorher benutzten Parameter printer driver file, printer driver und printer driver location werden nicht mehr unterstützt.
Wenn Sie von der Druckertreiberunterstützung in Windows NT profitieren möchten, müssen Sie auch die Windows 9x/Me-Treiber auf die neuen Einstellungen migrieren.
Eine vorhandene Datei printers.def (die in dem nun entfernten Parameter printer driver file angegeben wird) wird in Samba-3 nicht mehr funktionieren. In 3.0 versucht smbd, Treiberdateien für Windows 9x/Me für den Drucker in [print$] sowie weitere Einstellungen in der TDB zu finden, und zwar nur dort. Schlägt das fehl, weicht es nicht darauf aus, ein printers.def (und alle dazugehörigen Parameter) zu benutzen (so wie es in 2.2.x der Fall war). Das Werkzeug make_printerdef ist entfernt worden, und es gibt dafür nichts, was rückwärtskompatibel wäre.
Sie müssen einen Windows 9x/Me-Treiber in die Freigabe [print$] für einen Drucker auf Ihrem Samba-Host installieren. Die Treiberdateien werden in dem Unterverzeichnis „WIN40/0“ von [print$] gespeichert, und einige andere Einstellungen und Informationen gehen in die druckrelevanten TDBs ein.
Wenn Sie eine vorhandene Datei printers.def in die neue Einstellung migrieren möchten, besteht die einzige aktuelle Lösung darin, den APW von Windows NT für die Installation der NT- und 9x/Me-Treiber zu benutzen. Mit smbclient und rpcclient kann das auch aus Skripten heraus geschehen, wie das folgende Imprints-Installationsprogramm an einem Beispiel zeigt:
http://imprints.sourceforge.net/
Lesen Sie auch im Abschnitt „Unterstützung des CUPS-Drucksystems“ nach, wie rpcclient benutzt wird.
Dieser Punkt wird in einer späteren Fassung dieses Dokuments behandelt. Wenn Sie gern Ihre Hilfe anbieten möchten, um das zu dokumentieren, kontaktieren Sie bitte John H. Terpstra.
Verwechseln Sie nicht das root-Passwort, das im UNIX-System gültig ist (und in den meisten Fällen in Form eines Einweg-Hashes in einer Datei namens /etc/shadow gespeichert ist), mit dem Passwort bei der Identifikation durch Samba. Samba kennt das UNIX-Passwort nicht. Ein root-Zugang zu Samba-Ressourcen erfordert, dass zuerst ein Samba-Konto für root erstellt wird. Dies erledigt man wie folgt mit dem Befehl smbpasswd:
root# smbpasswd -a root New SMB password: secret Retype new SMB password: secret
Benutzen Sie nicht das vorhandene spool-Verzeichnis des UNIX-Drucksystems als spool-Verzeichnis für Samba. Es mag bequem und platzsparend erscheinen, führt aber nur zu Problemen. Die zwei Verzeichnisse müssen verschieden sein.
Seit Erst-Veröffentlichung dieses Buches in Englisch haben die Samba-Versionen 3.0.1 bis 3.0.7 wichtige Aktualisierungen und Änderungen erfahren. Die Entwickler beseitigten verschiedene Fehler und schlossen Sicherheitslücken. Viele Modifikationen betrafen auch die Druckfunktionen. Hier eine kurze Übersicht:
akzeptiert jetzt die Angabe der Treiber-Version. Dies ermöglicht die kontrollierte Installation von 'Kernel Mode'- und 'User Mode'-Druckertreibern. (Änderung seit 3.0.1)
Beispiel:
root# rpcclient localhost -N \
-U'root%secret' \
-c 'adddriver "Windows NT x86" \
"infotec_2105:cupsdrv5.dll:infotec_2105.ppd:\
cupsui5.dll:cups5.hlp:NULL:RAW:NULL" \
2'
ist jetzt nicht mehr 'globaler', sondern 'service level'-Parameter. Dies erlaubt mehr Flexibilität und eine bequemere Verwirklichung eigener Druckbefehle ('print command' in smb.conf), unterschiedlich pro Druckerwarteschlange. (Änderung seit 3.0.3)
Beispiel:
printing = sysv
erlaubt die Angabe von Druckuptionen wie z.B '-o raw' ohne in die Konfiguration des CUPS-Servers eingreifen zu müssen. (neuer Parameter seit 3.0.3)
Beispiel:
cups options = 'raw,media=a4,job-sheets=secret,secret'
legt das Zeitintervall in Sekunden fest, in dem Samba die 'printcap' nach neu hinzugekommenen (oder gelöschten) Druckerwarteschlangen untersucht. (neuer Parameter seit 3.0.6)
Beispiel:
printcap cache time = 60
ermöglicht die Zuordnung eines anderen Namens zu einer Druckerwarteschlange. Dieser Name wird den Windows-Clients gezeigt (Unix-Benutzer sehen den ursprünglichen Namen). (neuer Parameter seit 3.0.6)
Beispiel:
root# rpcclient localhost -N \
-U'root%secret' \
-c 'setprintername cups_printer "Drucker für Gruppe Marketing"'
Beispiele:
cups server = 10.160.61.60 cups server = cups2.domain.com
ist ein neues Migrationstool seit 3.0.3 zum zeitsparenden Klonen und Transfer von Windows-Druckertreibern von einem (Windows- oder Samba-)Printserver zu einem anderen. (neu enthalten seit 3.0.3)
Nähere Erläuterungen siehe unten.
Eine ausführliche Beschreibung zu den einzelnen Punkten finden Sie am Ende des nächsten Kapitels, 'Unterstützung des CUPS-Drucksystems'.