|
Samba, 2. AuflageVon Jay Ts, Robert Eckstein, and David Collier-Brown2. Auflage, August 2003 O'Reilly Verlag, ISBN: 3-89721-359-1 www.oreilly.de/catalog/samba2ger/
Dieses Buch ist unter der GNU Free Documentation License (FDL) erschienen.
Bitte beachten Sie den
Text der GNU FDL.
|
|
Kapitel 10
Dieses Kapitel befasst sich damit, wie Drucker für den Gebrauch mit Samba eingerichtet werden. Abgesehen davon, dass es »cool« ist, wenn Dokumente aus Windows-Textverarbeitungs- und Grafikprogrammen im Ausgabeschacht des Unix-Druckers landen, erhöht diese Fähigkeit im entscheidenden Maße den Nutzen Ihres Samba-Servers. In vielen Einrichtungen hat der Einsatz eines Unix-Systems als Druck-Server Systemadministratoren und Benutzer gleichermaßen glücklich gemacht, da viel seltener Probleme auftreten.
Samba erlaubt Client-Maschinen die Nutzung von Druckern, die an das Samba-Host-System angeschlossen sind. Samba kann außerdem Unix-Dokumente an Drucker schicken, die von Windows-Systemen freigegeben werden. In diesem Kapitel werden wir uns ansehen, wie Drucker konfiguriert werden müssen, um in diesen beiden Richtungen eingesetzt werden zu können.
Wir konzentrieren uns darauf, Samba für Drucker bereit zu machen, die bereits am Unix-Host funktionieren. Sie erfahren darüber hinaus einige grundlegende Dinge über das Einrichten von Druckern unter Unix. Weitere Informationen über dieses Thema finden Sie unter anderem in den Büchern Network Printing, Unix System-Administration und Linux - Wegweiser zur Installation & Konfiguration von O'Reilly.
Druck-Jobs an Samba senden
Ein Drucker, der vom Samba-Server freigegeben wird, ist in der Liste der Freigaben in der Netzwerkumgebung zu sehen. Wenn der Drucker an der Client-Maschine registriert und auf dem Client der richtige Druckertreiber installiert ist, kann der Client mühelos Druck-Jobs an den Drucker schicken, der an den Samba-Server angeschlossen ist. Abbildung 10-1 zeigt einen Samba-Drucker in der Netzwerkumgebung eines Windows-Clients.
Um Drucker mit Samba zu verwalten, müssen Sie die grundlegenden Vorgänge verstehen, die beim Drucken in einem Netzwerk ablaufen. Auf dem Client-System druckt die Anwendungssoftware, indem sie den Druckertreiber des Systems für denjenigen Drucker verwendet, der die eigentliche Ausgabe erzeugt. Die Druckertreiber-Software, die auf dem Client-System läuft, übersetzt die Aufrufe der Anwendung in einen Strom von Binärdaten, die speziell für das verwendete Druckermodell geeignet sind. Im Fall eines seriellen, parallelen oder USB-Druckers werden die Daten in einer temporären Datei in der Druckerwarteschlange des lokalen Systems gespeichert und dann durch den entsprechenden Port direkt an den Drucker gesandt. Bei einem Netzwerkdrucker wird die Datei über das Netzwerk verschickt.
Da die Daten zu dem Zeitpunkt, an dem sie beim Samba-Host ankommen, bereits durch einen Druckertreiber verarbeitet worden sind, müssen Sie sicherstellen, dass der Drucker auf dem Unix-System ohne Druckertreiber konfiguriert wurde und alle Daten, die er empfängt, in Reinform druckt. Haben Sie den Drucker schon für die Benutzung durch Unix-Anwendungen konfiguriert, müssen Sie möglicherweise eine weitere Warteschlange einrichten, damit Dokumente, die von den Windows-Clients kommen, korrekt ausgedruckt werden können.
Das Senden eines Druck-Jobs an einen Drucker auf einem Samba-Server erfolgt in vier Schritten:
Wenn ein Druck-Job an einem Samba-Server ankommt, wird er zeitweise in das Verzeichnis auf der Festplatte geschrieben, das durch die Option path der Druckerfreigabe festgelegt wurde. Samba führt dann einen Unix-Druckbefehl aus, um diese Datendatei an den Drucker zu senden. Der Job wird dann als der authentifizierte Benutzer der Freigabe gedruckt. Das kann - je nach Konfiguration der Freigabe - auch der Gastbenutzer sein.
Druckbefehle
Um das Dokument drucken zu können, müssen Sie Samba über den Befehl informieren, der zum Drucken und Löschen einer Datei eingesetzt wird. Unter Linux mit seinem Drucksystem im BSD-Stil wird beispielsweise folgender Befehl verwendet:
lpr -r -Pdrucker dateiDieser Befehl weist lpr an, den Namen des Druckers aus der Systemkonfigurationsdatei (/etc/printcap) zu beziehen und die Regeln, die dort stehen, zu interpretieren, um zu entscheiden, wie die Daten verarbeitet werden müssen und an welches physische Gerät sie geschickt werden sollen. Da die Option -r angegeben wurde, wird die Datei nach dem Drucken gelöscht. Natürlich handelt es sich bei der gelöschten Datei nur um eine Kopie auf dem Samba-Server - das Originaldokument auf dem Client wird nicht angetastet.
Beim System V Unix verläuft dieser Vorgang ähnlich. Das Drucken und Löschen erfolgt hier über einen zusammengesetzten Befehl:
lp -ddrucker -s datei; rm dateiIn diesem Fall wird die Datei /etc/printcap durch eine andere Gruppe von Konfigurationsdateien ersetzt, die sich in /usr/spool/lp befinden. Da der Befehl lp keine Option zum Löschen einer Datei nach dem Drucken besitzt, haben wir den Befehl rm angefügt.
Eine minimale Druckinstallation
Lassen Sie uns mit einer einfachen, aber anschaulichen Druckfreigabe beginnen. Nehmen Sie einmal an, dass Sie auf einem Linux-System sind und einen Drucker namens netprinter in der printcap-Datei haben. Der folgende Zusatz zu Ihrer smb.conf-Datei sorgt dafür, dass der Drucker über das Netzwerk verfügbar wird:
[printer1] printable = yes print command = /usr/bin/lpr -P%p -r %s printer = netprinter printing = BSD path = /var/tmpDie Variable %s in der Option print command wird durch den Namen der Datei ersetzt, die gedruckt werden soll, wenn Samba den Befehl ausführt. Es gibt vier Variablen in der Samba-Konfigurationsdatei, die speziell zusammen mit den Druckoptionen verwendet werden. Diese Variablen sehen Sie in Tabelle 10-1.
Bei anderen Unix-Varianten müssen die Optionen printing und print command modifiziert werden. Für System V Unix würden wir angeben:
[printer1] printing = SYSV print command = lp -d%p -s %s; rm %sMit dem Parameter printing = SYSV setzen wir Samba davon in Kenntnis, dass das lokale Drucksystem die System V Unix-Methode verwendet. Wie bereits erwähnt, ergibt die Variable %p den Namen des Druckers, während die Variable %s in den Namen der Datei aufgelöst wird.
Die Clients müssen möglicherweise den Status eines Druck-Jobs abfragen, der an den Samba-Server gesandt wurde. Da Samba Druck-Jobs an das Unix-Drucksystem geschickt hat, die dort zwischengespeichert werden (so genanntes Spooling), könnten sich zu einem bestimmten Zeitpunkt eine ganze Reihe von Druck-Jobs in der Warteschlange befinden. Daher muss Samba dem Client nicht nur den Status des aktuellen Druck-Jobs mitteilen, sondern auch, welche Dokumente darauf warten, auf diesem Drucker gedruckt zu werden. Außerdem muss Samba dem Client die Möglichkeit bieten, Druck-Jobs anzuhalten, sie fortzusetzen und sie aus der Druckerwarteschlange zu entfernen. Samba stellt für all diese Aufgaben Optionen zur Verfügung. Wie Sie sich vielleicht vorstellen können, entlehnen sie ihre Funktionalität den folgenden existierenden Unix-Befehlen:
Wir werden diese Optionen weiter unten in diesem Kapitel genauer betrachten. Meist bietet Samba vernünftige Standardwerte für sie, die auf dem jeweiligen Wert der Konfigurationsoption printing beruhen. Sie können also vermutlich damit arbeiten, ohne ihre eigenen Befehle für sie formulieren zu müssen.
Hier einige wichtige Bemerkungen, die Sie sich im Zusammenhang mit Druckfreigaben merken müssen:
- Sie müssen in allen Druckerfreigaben printable = yes setzen (sogar in [printers]), damit Samba weiß, dass es sich um Druckerfreigaben handelt. Wenn Sie es vergessen, können die Freigaben nicht zum Drucken verwendet werden und werden stattdessen als Verzeichnisfreigaben behandelt.
- Wenn Sie die Konfigurationsoption path im Druckerabschnitt setzen, werden alle Dateien, die an den oder die Drucker geschickt werden, in das von Ihnen festgelegte Verzeichnis kopiert und nicht nach /tmp. Da in manchen Unix-Betriebssystemen relativ wenig Plattenplatz für /tmp reserviert ist, bevorzugen viele Administratoren stattdessen /var/tmp, /var/spool/tmp oder ein anderes Verzeichnis.
- Wenn Sie in einer Druckerfreigabe guest ok = yes setzen und Samba für Sicherheit auf Freigabeebene konfiguriert ist, kann jeder als Gastbenutzer Daten an den Drucker schicken.
Die Benutzung einer oder mehrerer Samba-Maschinen als Druck-Server bietet Ihnen für Ihr LAN eine große Flexibilität. Sie können Ihre verfügbaren Drucker leicht aufteilen, indem Sie etwa einige auf die Mitglieder Ihrer Abteilung beschränken. Oder Sie stellen Ihre verschiedenen Drucker allen zur Verfügung. Darüber hinaus haben Sie die Möglichkeit, den Zugriff auf einen Drucker auf einige ausgewählte Personen zu begrenzen, indem Sie in seine Freigabe-Definition die Option valid users aufnehmen:
[deskjet] printable = yes path = /var/spool/samba/print valid users = elizabeth cozy jack heather alexander lina emeraldAlle anderen Optionen zum Festlegen des Zugriffs auf eine Freigabe funktionieren auch für Druckerfreigaben.
Die Freigabe [printers]
Befindet sich eine Freigabe namens [printers] in der Konfigurationsdatei, liest Samba automatisch Ihre printcap-Datei ein und erzeugt für jeden Drucker, der in dieser Datei auftaucht, eine Druckfreigabe. Hätte der Samba-Server zum Beispiel die Drucker lp, pcl und ps in seiner printcap-Datei, würde Samba drei Druckerfreigaben mit diesen Namen bereitstellen, die jeweils mit den Optionen in der Freigabe [printers] konfiguriert wären.
Rufen Sie sich ins Gedächtnis zurück, dass Samba die folgenden Regeln befolgt, wenn ein Client eine Freigabe anfordert, die nicht mit einer expliziten Freigabe-Definition in der Datei smb.conf angelegt wurde:
- Entspricht der Freigabename einem Benutzernamen in der Systemkennwortdatei und gibt es eine [homes]-Freigabe, wird eine neue Freigabe mit dem Namen des Benutzers angelegt. Diese Freigabe wird mit den Werten initialisiert, die in den Abschnitten [homes] und [global] vorgegeben wurden.
- Entspricht ansonsten der Name einem Drucker in der System-printcap-Datei und gibt es eine [printers]-Freigabe, wird eine neue Freigabe mit dem Namen des Druckers angelegt und mit den Werten aus dem Abschnitt [printers] initialisiert. (Die Variablen aus dem Abschnitt [global] gelten hier nicht.)
- Trifft keiner der beiden Fälle zu, sucht Samba nach einer default service-Freigabe. Kann keine gefunden werden, wird ein Fehler zurückgegeben.
Dies bringt uns zu einem wichtigen Punkt: Achten Sie darauf, dass Sie nicht einem Drucker den gleichen Namen geben wie einem Benutzer. Ansonsten erhalten Benutzer auf einmal eine Verbindung zu einer Verzeichnisfreigabe, obwohl sie eigentlich eine Druckerfreigabe erreichen wollten.
Nun folgt ein Beispiel einer [printers]-Freigabe für ein Linux-System. Einige dieser Optionen sind bereits Standardwerte. Zu Demonstrationszwecken haben wir sie jedoch trotzdem aufgeführt:
[printers] printable = yes printing = BSD printcap name = /etc/printcap print command = /usr/bin/lpr -P%p -r %s path = /var/spool/lpd/tmp min print space = 2000Hier haben wir Samba globale Optionen übergeben, die den Drucktyp festlegen (BSD), einen Druckbefehl angeben, um die Daten an den Drucker zu senden und die temporäre Datei später zu entfernen, den Ablageort unserer printcap-Datei bestimmen und einen minimalen Plattenplatz von 2 MByte für das Drucken reservieren.
Außerdem haben wir eine [printers]-Freigabe für die einzelnen Systemdrucker angelegt. Das temporäre Spool-Verzeichnis wird durch die Option path festgelegt: /var/spool/ lpd/tmp. Alle Freigaben sind als druckbar (printable) gekennzeichnet - diese Option ist notwendig, sogar im Abschnitt [printers].
Die Konfiguration testen
Nach dem Ausführen von testparm und Neustarten der Samba-Daemons können Sie überprüfen, ob alles richtig eingerichtet ist. Dazu senden Sie mit smbclient eine Datei an den Drucker. Stellen Sie mit dem folgenden Befehl eine Verbindung zum Drucker her:
# smbclient /server/printfreigabeund verwenden Sie dann den print-Befehl, um eine Datei zu drucken:
smb: /> print textdateiWenn Sie eine Verbindung zu einer Druckfreigabe herstellen, die von einem Windows 95/98/Me-System angeboten wird, das mit Sicherheit auf Benutzerebene konfiguriert wurde und Sie mit Ihrem vermeintlich korrekten Benutzernamen und Kennwort nicht authentifizieren will, versuchen Sie eine Neukonfiguration des Windows-Systems mit Sicherheit auf Freigabeebene.
Wenn Sie etwas mit smbclient über den Samba-Server ausdrucken, sollten folgende Dinge passieren:
- Der Job erscheint (kurz) im Samba-Spool-Verzeichnis, das durch den Pfad festgelegt wurde.
- Der Job wird im Spool-Verzeichnis Ihres Drucksystems angezeigt.
- Der Job verschwindet aus dem Spool-Verzeichnis, das Samba benutzt hat.
Kann smbclient nicht drucken, können Sie die Option print command zurücksetzen, um Fehlerinformationen zu sammeln:
print command = echo "printed %s on %p" >>/tmp/printlogEin häufig auftretendes Problem bei der Samba-Druckerkonfiguration besteht darin, dass vergessen wird, die vollständigen Pfadnamen für Befehle zu verwenden. Ein anderes Problem, vor dem Sie ebenfalls oft stehen, ist das Fehlen der korrekten Berechtigungen auf dem Spool-Verzeichnis.1 Prüfen Sie wie gewöhnlich Ihre Samba-Protokolldateien und die Systemprotokolldateien auf Fehlermeldungen. Falls Sie BSD-Druck verwenden, können Sie das Schlüsselwort lp im printcap-Eintrag des Druckers auf etwas anderes als /dev/null setzen. Dadurch erhalten Sie die Möglichkeit, die Fehlermeldungen zu sammeln, die vom Drucksystem stammen.
Weitere Informationen über die Fehlerbehbung bei Druckern finden Sie in der Datei docs/textdocs/Printing.txt in der Samba-Quelldistribution. Die Unix-Drucksysteme werden detailliert in Æleen Frischs Buch Unix System-Administration (O'Reilly Verlag) erläutert.
Aktivieren der SMB-Druckerfreigabe unter Mac OS X
Da Samba unter Mac OS X vorinstalliert ist, ist es einfach, den Zugriff auf einen Drucker für Windows-Clients freizugeben. Zuerst natürlich müssen Sie den lokalen Zugriff einrichten. Dazu verwenden Sie das Programm Print Center (zu finden im Verzeichnis /Programme/Dienstprogramme). Wählen Sie im Menü Drucker den Menüpunkt Drucker hinzufügen... und treffen Sie die entsprechende Wahl im Pop-up-Menü. Ist der Drucker beispielsweise direkt angeschlossen, wählen Sie USB; wenn der Drucker eingeschaltet ist, sollte er in der Liste auftauchen. Wählen Sie den Drucker und klicken Sie auf den Button Hinzufügen.
Bearbeiten Sie die Datei /etc/smb.conf, indem Sie für die [printers]-Freigabe den Kommentar entfernen und alle notwendigen zusätzlichen Änderungen an der Konfiguration vornehmen. Aktivieren Sie schließlich das Samba-Startobjekt, wie in Kapitel 2 beschrieben, indem Sie entweder Windows File Sharing im Systemeinstellungsfeld Sharing anklicken oder manuell die Datei /etc/hostconfig bearbeiten. Ihr Drucker kann nun von entfernten Windows-Clients benutzt werden.
Unter Mac OS X und einigen anderen BSD-basierten Systemen können Sie Ihre Konfiguration mit smbutil testen. Folgender Befehl sendet die Datei mit dem Namen print_test_ file an den Drucker namens printshare auf dem Server bsdserver :
% smbutil print //bsdserver/printshare print_test_fileIn Kapitel 5 erfahren Sie mehr über smbutil.
Einen Windows-Client einrichten und testen
Nachdem Samba nun einen arbeitsfähigen Drucker anbietet, können Sie den Zugriff darauf von einem Windows-Client aus einrichten. Durchsuchen Sie den Samba-Server in der Netzwerkumgebung. Dort müssten nun alle verfügbaren Drucker angezeigt werden. In Abbildung 10-1 sahen wir zum Beispiel einen Drucker namens lp.
Als Nächstes müssen Sie dafür sorgen, dass der Windows-Client den Drucker erkennt. Doppelklicken Sie zuerst auf das Drucker-Symbol. Falls Sie versuchen, einen nicht-installierten Drucker auszuwählen (wie gerade geschehen), fragt Windows Sie, ob es beim Konfigurieren dieses Druckers für das Windows-System helfen soll. Klicken Sie auf Ja oder OK. Der Drucker-Assistent wird gestartet.
Wenn Sie unter Windows 95/98/Me einen Drucker installieren, fragt Sie der erste Assistent, ob Sie unter DOS drucken müssen. Nehmen wir einmal an, dass dies nicht der Fall ist. Wählen Sie daher den Radio-Button Nein und klicken Sie anschließend auf Weiter >, um in das Hersteller/Modell-Fenster zu gelangen (siehe Abbildung 10-2).
In diesem Dialog sehen Sie eine lange Liste mit Herstellern und Druckermodellen für eine Vielzahl unterschiedlicher Drucker. Wählen Sie auf der linken Seite des Fensters den Hersteller Ihres Druckers und auf der rechten Seite dann das genaue Druckermodell.
Manchmal werden Sie Ihren Drucker in der Liste nicht vorfinden, oder die Version des in Windows enthaltenen Druckertreibers ist bereits veraltet. In solchen Fällen sehen Sie in der Dokumentation des Druckerherstellers nach, wie Sie den Treiber installieren müssen. Normalerweise klicken Sie auf den Button Diskette..., um den Treiber von einer CD-ROM oder Diskette zu installieren.
Falls Sie Ihren Drucker in der Liste nicht sehen können, aber wissen, dass es sich um einen PostScript-Drucker handelt, wählen Sie Apple als Hersteller und Apple LaserWriter als Modell. Damit erhalten Sie die einfachste PostScript-Druckereinstellung - und wohl auch eine der zuverlässigsten. Sind bereits PostScript-Drucker angeschlossen, werden Sie gefragt, ob der vorhandene Treiber ersetzt oder weiterverwendet werden soll. Wenn Sie ihn durch einen neuen Treiber ersetzen, kann es passieren, dass die anderen Drucker nicht mehr funktionieren. Wir empfehlen Ihnen deshalb, die vorhandenen Druckertreiber solange sie richtig funktionieren zu verwenden.
Klicken Sie auf den Button Weiter > oder auf OK. Unter Windows 95/98/Me fordert der Assistent Sie auf, dem Drucker einen Namen zu geben. Unter Windows NT/2000/XP müssen Sie mit der rechten Maustaste auf das Symbol des Druckers klicken und Eigenschaften auswählen, um dem Drucker einen Namen zuzuweisen. Abbildung 10-3 zeigt, wie wir unseren Drucker benannt haben, um zu demonstrieren, dass er vom Samba-Server mixtec freigegeben ist.
Schließlich fragt Sie der Drucker-Assistent unter Windows 95/98/Me, ob eine Testseite gedruckt werden soll. Klicken Sie auf den Button Ja und dann auf Beenden. Ihnen sollte der Dialog aus Abbildung 10-4 präsentiert werden. Unter Windows NT/2000/XP kann auf den Druckertest ebenfalls über den Eigenschaften-Dialog des Druckers zugegriffen werden.
Verlief der Testdruck nicht erfolgreich, klicken Sie auf den Button Nein. Der Assistent führt Sie auf der Client-Seite des Vorgangs durch einige Schritte zur Fehlersuche. Wenn der Testdruck funktioniert hat, steht der entfernte Drucker nun allen Windows-Programmen über die Datei- und Drucken-Menüeinträge zur Verfügung.
Auf Windows-Druckern drucken
Wenn Drucker bei Ihnen an Systeme angeschlossen sind, die unter Windows 95/98/Me oder Windows NT/2000/XP betrieben werden, kann mit Hilfe von Werkzeugen, die Teil der Samba-Distribution sind, auch vom Unix-System aus auf diese Drucker zugegriffen werden. Zunächst einmal muss auf dem Windows-System eine Druckerfreigabe eingerichtet werden. Richten Sie anschließend den Drucker auf der Unix-Seite ein, indem Sie einen neuen Drucker konfigurieren und ein Samba-Druckprogramm als Filter des Druckers verwenden.
Windows-Drucker freigeben
Das Freigeben von Druckern unter Windows ist nicht wesentlich anders als das Freigeben von Dateien. Es ist sogar ein bisschen einfacher. Öffnen Sie die Systemsteuerung und doppelklicken Sie dort auf das Drucker-Symbol, um das Drucker-Fenster zu öffnen. Klicken Sie mit der rechten Maustaste auf das Symbol des Druckers, den Sie freigeben wollen, und wählen Sie Freigabe... Dadurch öffnet sich das Dialogfeld, das in Abbildung 10-5 (für Windows 98) oder in Abbildung 10-6 (für Windows 2000) dargestellt ist. (Der Dialog sieht bei anderen Windows-Versionen ein wenig anders aus, funktioniert aber nahezu gleich.)
Bei Windows 95/98/Me-Systemen müssen Sie die Dateifreigabe möglicherweise mit einer Zugriffssteuerung auf Freigabeebene (anstatt auf Benutzerebene) betreiben, um von Samba auf einen freigegebenen Drucker zugreifen zu können. Um diesen Modus zu aktivieren, doppelklicken Sie in der Systemsteuerung auf Netzwerk und klicken Sie dort auf die Registerkarte Zugriffssteuerung. Ausführliche Informationen über dieses Thema finden Sie in Kapitel 5.
Klicken Sie auf den Radio-Button Freigegeben als und anschließend auf OK. Auf den Drucker kann nun von anderen Systemen aus dem Netzwerk zugegriffen werden.
Einen Unix-Drucker hinzufügen
Die Samba-Distribution enthält drei Programme, die beim Drucken auf freigegebenen Druckern helfen. Das Programm smbprint arbeitet mit Systemen zusammen, die das BSD-Drucksystem verwenden, smbprint.sysv arbeitet mit Systemen, die das System V-Drucksystem einsetzen, und smbspool arbeitet mit Systemen, die das Common Unix Printing System (CUPS) verwenden. In den folgenden Abschnitten werden wir Ihnen zeigen, wie Sie für die einzelnen Systeme Drucker installieren.
BSD-Drucker
Das BSD-Drucksystem wird von vielen Unix-Varianten eingesetzt, unter anderem von Red Hat Linux. Beim BSD-Druck besitzen alle Drucker auf dem System einen Eintrag in der Datei /etc/printcap, der Datenbank der Druckerfähigkeiten, die vom Line Printer Daemon lpd und anderen Programmen verwendet wird, die beim Drucken helfen. Die Red Hat-Linux-Implementierung unterscheidet sich ein wenig: Die Datei /etc/printcap ist hier eine maschinengenerierte Datei, die jedes Mal neu erzeugt wird, wenn der lpd-Daemon vom /etc/rc.d/init.d/lpd-Skript gestartet wird. Anstatt /etc/printcap zu bearbeiten, legen wir für unseren Drucker in /etc/printcap.local einen Eintrag an. Diese Datei fügt das System automatisch ein, wenn es /etc/printcap erzeugt.
Wenn Sie eine Version von Samba verwenden, die aus einer RPM-Datei installiert worden ist wie unter Red Hat Linux, können Sie diese Anweisungen vermutlich überspringen und das Dienstprogramm printconf benutzen, das Unterstützung für SMB-Drucker bietet. Leider funktioniert dieses Programm nicht unbedingt, wenn Sie Samba aus der Samba-Quelldistribution installiert haben.
Hier ist der Eintrag, den wir in unsere /etc/printcap.local-Datei eingefügt haben, um unseren Hewlett-Packard DeskJet 932C-Drucker zu unterstützen, der von maya, einem Windows 98-System, freigegeben wurde:
lp|maya-hp932c:\ :cm=HP 932C on maya:\ :sd=/var/spool/lpd/maya:\ :af=/var/spool/lpd/maya/acct:\ :if=/usr/local/samba/bin/smbprint:\ :mx=0:\ :lp=/dev/null:Die erste Zeile legt Namen für den Drucker an. Wir nennen ihn sowohl maya-hp932c, um seine Lage im Netzwerk und seinen Typ zu beschreiben, als auch lp, damit Programme ihn als Standarddrucker verwenden. Die restlichen Zeilen legen Schlüsselwörter und Werte fest. Das Schlüsselwort cm erlaubt es uns, dem Drucker einen Kommentar zuzuweisen. Die Schlüsselwörter sd und af weisen das Spool-Verzeichnis des Druckers bzw. Abrechnungsdateien zu. Das Schlüsselwort if weist den Druckfilter zu. Wir verwenden den Befehl smbprint, um die Ausgabe an den freigegebenen SMB-Drucker zu senden. Das Schlüsselwort mx ist auf null gesetzt, um das Ausdrucken einer beliebigen Dateigröße zu erlauben. lp ist auf /dev/null gesetzt, um Fehlermeldungen abzuweisen.
Sie können anhand unseres Beispiels einen Eintrag für Ihren eigenen Drucker erzeugen. Falls Sie mehr als die von uns benutzten Fähigkeiten einsetzen wollen, lesen Sie in der printcap(5)-Manpage Ihres Systems nach. Dort finden Sie eine vollständige Liste der Schlüsselwörter.
Begeben Sie sich ins root-Verzeichnis Ihrer Samba-Quelldistribution und installieren Sie das Programm smbprint:
# cp examples/printing/smbprint /usr/local/samba/binAls Nächstes erzeugen Sie das Spool-Verzeichnis des Druckers:
# cd /var/spool/lpd # mkdir maya # chown lp:lp maya # chmod 700 mayaDas Programm smbprint sucht nach einer Datei namens .config im Spool-Verzeichnis des Druckers, in der Informationen darüber stehen, wie man sich an der Druckerfreigabe anmeldet. Legen Sie diese Datei an und setzen Sie die erforderlichen Informationen ein:
# cd maya # >.config # chown lp:lp .config # chmod 600 .configBearbeiten Sie die Datei .config mit einem Texteditor und geben Sie drei Zeilen ein:
server=maya service=hp password=""Dies bezeichnet den freigegebenen Drucker, der die UNC \\maya\hp hat. Als wir die Druckerfreigabe angelegt haben, gaben wir ihr kein Kennwort, deshalb setzen wir hier ein leeres Kennwort ein. Befindet sich Ihre Druckerfreigabe an einem Windows NT/2000/ XP-System, verwenden Sie Ihr Domänen-Kennwort.
Starten Sie schließlich den Drucker-Daemon neu:
# /etc/rc.d/init.d/lpd restartSie können nun versuchen, etwas auszudrucken. Führen Sie folgenden Befehl aus:
$ lpr textfileWenn Sie alles richtig eingerichtet haben, wird die Datei auf dem freigegebenen Drucker gedruckt. Sollte der Text »stufig« gedruckt worden sein, weil der Drucker am Zeilenanfang nicht wieder an den linken Rand zurückfährt, verändern Sie das Schlüsselwort if in Ihrem printcap-Eintrag so, dass smbprint mit der Option -t ausgeführt wird.
System V-Drucker
Das Versenden von Druck-Jobs von einem System V Unix-System ist ein wenig einfacher als von einem BSD-System. Sie müssen hier das Skript smbprint.sysv im Verzeichnis examples/printing der Samba-Distribution bearbeiten und folgende Schritte ausführen:
1. Ändern Sie die Parameter server, service und password im Skript so, dass sie dem NetBIOS-Computernamen, seinem freigegebenen Druckerdienst bzw. seinem Kennwort entsprechen. So würden die folgenden Einträge etwa für den Dienst im vorherigen Beispiel zutreffen:
server = maya service = hp password = ""2. Führen Sie die folgenden Befehle aus, die in der printcap-Datei eine Referenz für den neuen Drucker (den wir hp_printer nennen) anlegen:
# lpadmin -p hp_printer -v /dev/null -i./smbprint.sysv # enable hp_printer # accept hp_printerStarten Sie anschließend die Samba-Daemons neu und versuchen Sie, mit irgendeinem Standard-Unix-Programm auf hp_printer zu drucken.
CUPS-Drucker
CUPS2 verwendet eine Sammlung von Modulen namens Backends, um Druck-Jobs an verschiedene Ziele zu schicken, beispielsweise an lokale Drucker, die an parallele serielle oder USB-(Universal Serial Bus-)Ports angeschlossen sind, oder über das Netzwerk mit Hilfe des Unix-LPD-Protokolls (Line Printer Daemon), des Internet Printing Protocol (IPP), des AppleTalk Printer Access Protocol (PAP) und so weiter. Das Software-Paket enthält kein Backend für SMB; die Samba-Suite beinhaltet für diesen Zweck das Dienstprogramm smbspool.
Um das Drucken auf entfernten SMB-Druckern mittels CUPS zu ermöglichen, erzeugen Sie einen symbolischen Link namens smb im CUPS-Backend-Verzeichnis, der auf smbspool verweist. Je nach den Installationsoptionen könnte dies sich an einer Reihe von Orten innerhalb der Verzeichnishierarchie befinden, schauen Sie daher auf Ihrem System genau nach. Mit einer verbreiteten Standardinstallation würde der Befehl so aussehen:
# ln -s /usr/local/samba/bin/smbspool /usr/lib/cups/backend/smbSenden Sie an den CUPS-Daemon, cupsd, ein HUP-Signal und prüfen Sie mit dem Befehl lpinfo -v, ob es SMB-Unterstützung gibt. Seine Ausgabe müsste eine Zeile enthalten, die network smb lautet.
Um einen Drucker hinzuzufügen, verwenden Sie die CUPS-Web-Schnittstelle, die auf dem lokalen System unter http://localhost:631/ zur Verfügung steht, oder benutzen den Befehl lpadmin:
# lpadmin -p hp932c -E -v smb://maya/hp932c -D "HP 932C on maya"Dies erzeugt und aktiviert den neuen Druck-Spool mit der Bezeichnung hp932c. Das Argument -v legt das Druckergerät fest, auf das in diesem Fall mit einem SMB-URI über das Netzwerk zugegriffen wird. Soll der Drucker nicht für den Gastzugriff freigegeben werden, müssen Sie in dem URI einen Benutzernamen und ein Kennwort angeben. Das vollständige Format sieht so aus:
smb://[benutzername[:kennwort]@][arbeitsgruppe/]server/druckfreigabeDer Befehl lpadmin führt Änderungen an /etc/cups/printers.conf durch und sendet ein HUP-Signal an den cupsd-Daemon, wodurch ein lokaler Drucker-Spool angelegt wird. In diesem Beispiel werden die Druckdaten im Originalformat an das Windows-System übergeben, das die notwendigen Druckertreiber und Beschreibungsdateien besitzt, um die Daten entsprechend zu formatieren. Die Option -D wird verwendet, um dem Drucker einen Kommentar-String zuzuweisen.
Sobald Sie den Drucker eingerichtet haben, wird es Zeit, ihn zu testen. CUPS versteht Druckbefehle sowohl im BSD-Stil als auch im System V-Stil, Sie können also die Befehle benutzen, die Ihnen besser gefallen. Versuchen Sie einmal Folgendes mit dem BSD-Befehl lpr:
$ lpr -P hp932c textdateiDer Drucker sollte nun von jeder Anwendung aus auf dem Unix-System benutzt werden können.
Samba-Druckoptionen
Tabelle 10-2 fasst die Samba-Druckoptionen zusammen.
printing
Die Konfigurationsoption printing teilt Samba mit, welches Drucksystem benutzt werden soll. Es gibt mehrere unterschiedliche Befehlsfamilien zum Steuern des Druckens und Kontrollieren der Statusausgaben. Samba unterstützt sieben verschiedene Typen, wie in Tabelle 10-3 zu sehen.
Der Wert für diese Option muss aus diesen sieben Möglichkeiten gewählt werden, zum Beispiel:
printing = SYSVDer Standardwert dieser Option ist systemabhängig und wird beim ersten Kompilieren von Samba konfiguriert. Bei den meisten Systemen erkennt das configure-Skript das verwendete Drucksystem automatisch und konfiguriert es im Samba-makefile entsprechend. Handelt es sich bei Ihrem System jedoch um ein PLP-, LPRNG- oder QNX-Drucksystem, müssen Sie dies explizit im makefile oder in der Druckfreigabe festlegen.
Die verbreitetsten Systemtypen sind BSD, SYSV und CUPS. Jeder Drucker an einem BSD-Unix-Server wird in der Printer-Capabilities-Datei beschrieben - üblicherweise ist dies /etc/printcap. Im Abschnitt über den Parameter printcap file finden Sie nähere Informationen zu diesem Thema.
Beim automatischen Einstellen der Konfigurationsoption printing werden wenigstens drei weitere Druckoptionen für den fraglichen Dienst gesetzt: print command, lpq command und lprm command. Wenn Sie Samba auf einem System ausführen, das keinen der Druckstile unterstützt, die in Tabelle 10-3 aufgeführt sind, setzen Sie die Befehle für diese Parameter einfach von Hand.
printable
Die Option printable muss auf yes gesetzt werden, um eine Freigabe als Druckdienst zu kennzeichnen. Wenn diese Option nicht gesetzt ist, wird die Freigabe stattdessen als Verzeichnisfreigabe behandelt. Sie können die Option folgendermaßen setzen:
[printer1] printable = yesprinter
Die Option, auch als printer name bezeichnet, gibt den Namen des Druckers auf dem Server an, auf den die Freigabe verweist. Diese Option besitzt keinen Standardwert und muss explizit in der Konfigurationsdatei gesetzt werden, auch wenn Unix-Systeme selbst oft einen Standardnamen wie lp für einen Drucker erkennen, zum Beispiel:
[deskjet] printer = hpdkjet1lpq cache time
Die globale Option lpq cache time erlaubt es Ihnen, die Anzahl der Sekunden festzulegen, für die Samba sich den aktuellen Druckerstatus merkt. Nach Ablauf dieser Zeit führt Samba einen lpq-Befehl (bzw. den entsprechenden Befehl, den Sie mit der Option lpq command angegeben haben) aus, um neuere Statusinformationen zu erhalten, die an die Benutzer weitergegeben werden können. Der Vorgabewert beträgt 10 Sekunden. Dieser Wert kann jedoch vergrößert werden, falls Ihr lpq command ungewöhnlich lange für die Ausführung braucht oder Sie viele Clients haben. Der Wert 0 deaktiviert die Zwischenspeicherung des Warteschlangenstatus. Das folgende Beispiel setzt die Zeit auf 30 Sekunden:
[deskjet] lpq cache time = 30postscript
Die Option postscript sorgt dafür, dass der Drucker alle Daten, die an ihn gesendet werden, als PostScript behandelt. Dazu setzt er das Präfix %! an den Anfang der ersten Zeile jedes Jobs. Normalerweise wird diese Option bei PCs verwendet, die ein ^D (Control-D oder »Ende-der-Datei«-Zeichen) vor die erste Zeile einer PostScript-Datei setzen. Durch diese Option wird ein Nicht-PostScript-Drucker allerdings nicht in einen PostScript-Drucker verwandelt. Der Vorgabewert für diese Option ist no. Sie können ihn folgendermaßen ändern:
[deskjet] postscript = yesload printers
Die Option load printers weist Samba an, für alle bekannten Druckernamen Freigaben zu erzeugen und diese Freigabe in die Suchliste zu laden. Samba erzeugt eine Druckerfreigabe für jeden Druckernamen in /etc/printcap (oder dem systementsprechenden Äquivalent dieser Datei) und listet sie auf. Falls beispielsweise Ihre printcap-Datei so aussieht:3
lp:\ :sd=/var/spool/lpd/lp:\ Spool-Verzeichnis :mx#0:\ maximale Dateigröße (keine) :sh:\ unterdrücke Burst-Header (nein) :lp=/dev/lp1:\ Gerätename für Ausgabe :if=/var/spool/lpd/lp/filter: Textfilter laser:\ :sd=/var/spool/lpd/laser:\ Spool-Verzeichnis :mx#0:\ maximale Dateigröße (keine) :sh:\ unterdrücke Burst-Header (nein) :lp=/dev/laser:\ Gerätename für Ausgabe :if=/var/spool/lpd/lp/filter: Textfilterwerden die Freigaben [lp] und [laser] automatisch als gültige Druckfreigaben angelegt, sobald Samba gestartet ist. Beide Freigaben entnehmen die Konfigurationsoptionen dem Abschnitt [printers], um sich selbst zu konfigurieren, und sind in der Suchliste für den Samba-Server verfügbar. Der Standardwert für diese Option ist yes. Falls Sie lieber jeden Drucker explizit in Ihrer Konfigurationsdatei festlegen, verwenden Sie Folgendes:
[global] load printers = noprint command, lpq command, lprm command,
lppause command, lpresume commandDiese Optionen teilen Samba mit, welche Unix-Befehle den Drucker steuern und Daten an ihn senden. Es handelt sich um folgende Unix-Befehle: lpr (Senden an Line PRinter), lpq (List Printer Queue), lprm (Line Printer ReMove) und optional lppause sowie lpresume. Samba bietet für jeden Befehl eine entsprechend benannte Option an, falls Sie die Vorgabewerte des Systems überschreiben wollen. Betrachten Sie folgendes Beispiel:
lpq command = /usr/ucb/lpq %pDamit würde lpq command so eingestellt werden, dass /usr/ucb/lpq benutzt wird. In gleicher Weise würde:
lprm command = /usr/local/bin/lprm -P%p %jden Löschen-Befehl auf /usr/local/bin/lprm setzen und mit Hilfe der Variablen %j die Job-Nummer übergeben.
Die Vorgabewerte der einzelnen Optionen sind vom Wert der Option printing abhängig. Tabelle 10-4 zeigt die vorgegebenen Befehle für die jeweiligen Druckoptionen. Das beliebteste Drucksystem ist BSD.
Normalerweise ist es nicht notwendig, diese Optionen in Samba zurückzusetzen. Eine Ausnahme bildet möglicherweise print command. Diese Option muss eventuell explizit gesetzt werden, falls Ihr Drucksystem keine Option -r (nach dem Drucken löschen) für den Druckbefehl besitzt, beispielsweise:
print command = /usr/local/lpr -P%p %s; /bin/rm %sMit ein wenig vernünftiger Programmierung können diese smb.conf-Optionen ebenfalls für die Fehlersuche eingesetzt werden:
print command = cat %s >>/tmp/printlog; lpr -r -P%p %sMit der vorherigen Konfiguration ist es möglich zu überprüfen, ob Dateien tatsächlich an den Samba-Server ausgeliefert wurden. Ist dies der Fall, erscheint ihr Inhalt in der Datei /tmp/printlog.
Die nach BSD beliebtesten Drucksysteme sind das SYSV-(oder System V-)Drucksystem sowie einige SYSV-Varianten für AIX von IBM und HP-UX von Hewlett-Packard. Diese Systeme besitzen keine /etc/printcap-Datei. Stattdessen kann die Option printcap file auf einen für das System passenden lpstat-Befehl gesetzt werden. Diese Option weist Samba an, vom lpstat-Befehl eine Liste der Drucker zu beziehen. Alternativ können Sie die globale Konfigurationsoption printcap name auf den Namen einer Dummy-printcap-Datei setzen, die Sie bereitstellen. In diesem Fall muss die Datei eine Reihe von Zeilen enthalten, wie etwa:
lp|print1|Mein Drucker 1 print2|Mein Drucker 2 print3|Mein Drucker 3Jede Zeile nennt einen Drucker, gefolgt von Alias-Bezeichnungen. In diesem Beispiel wird der erste Drucker lp, print1 oder Mein Drucker 1 genannt, je nachdem, welchen Namen der Benutzer bevorzugt. Der erste Name wird in jedem Befehl, den Samba für diesen Drucker ausführt, an Stelle von %p benutzt.
Von Samba werden noch zwei weitere Druckertypen unterstützt: LPRNG (LPR New Generation) und PLP (Public Line Printer). Dies sind Public Domain- und Open Source-Drucksysteme, die von vielen Einrichtungen eingesetzt werden, um Problemen mit kommerzieller Software aus dem Weg zu gehen. Samba unterstützt außerdem die Drucksysteme der Echtzeitbetriebssysteme SOFTQ und QNX.
printcap name
Wenn die Option printcap name (auch printcap) in einer Druckfreigabe auftaucht, verwendet Samba die angegebene Datei als Printer-Capabilities-Datei des Systems (normalerweise ist dies /etc/printcap). Sie können hier jedoch eine Datei einstellen, die nur die Drucker enthält, die Sie über das Netzwerk freigeben wollen. Der Wert der Option ist der Dateiname (mit dem kompletten Pfad) einer Printer-Capabilities-Datei auf dem Server:
[deskjet] printcap name = /usr/local/samba/lib/printcapDas CUPS-Drucksystem hat statt der Standard-printcap-Datei seine eigene Methode zum Feststellen der Druckereigenschaften. Setzen Sie in diesem Fall printcap name folgendermaßen:
[global] printing = cups printcap name = cupsmin print space
Die Option min print space legt fest, wie viel freier Platz auf der Festplatte mit dem Spool-Verzeichnis vorhanden sein muss, damit das Drucken erlaubt ist. Wenn Sie sie auf null (den Vorgabewert) setzen, wird die Prüfung ausgeschaltet; jede andere Zahl legt den Platz in KByte fest. Diese Option ermöglicht es zu vermeiden, dass Druck-Jobs den gesamten verbleibenden Plattenplatz auf dem Server ausfüllen, wodurch andere Prozesse nicht mehr funktionieren würden:
[deskjet] min print space = 4000queuepause command
Diese Konfigurationsoption legt einen Befehl fest, der Samba anweist, eine ganze Druckwarteschlange anzuhalten und nicht nur einen einzelnen Job in der Warteschlange. Der Vorgabewert hängt vom gewählten Drucksystem ab. Es sollte nicht notwendig sein, diese Option zu verändern.
queueresume command
Diese Konfigurationsoption legt einen Befehl fest, der Samba mitteilt, wie die Verarbeitung einer angehaltenen Druckwarteschlange (und nicht nur eines einzelnen Jobs in der Warteschlange) fortgesetzt wird. Der Vorgabewert hängt vom gewählten Drucksystem ab. Es sollte nicht notwendig sein, diese Option zu verändern.
2CUPS ist Open Source-Software (http://www.open-source.org), entwickelt von Easy Software Products. Weitere Informationen finden Sie unter http://www.cups.org.
3Die Kommentare auf der rechten Seite wurden von uns hinzugefügt, für den Fall, dass Sie noch nie etwas mit dieser Datei gemacht haben.