Samba, 
2. Auflage

Samba, 2. Auflage

Von Jay Ts, Robert Eckstein, and David Collier-Brown
2. 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.


TOC PREV NEXT INDEX

Kapitel 10

Drucken

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.
Abbildung 10-1
Ein Samba-Drucker in der Netzwerkumgebung

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:

1. Öffnen und Authentifizieren einer Verbindung zur Druckerfreigabe
2. Kopieren der Datei über das Netzwerk
3. Schließen der Verbindung
4. Drucken und Löschen der Kopie der Datei

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 datei
 

Dieser 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 datei
 

In 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/tmp
 

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

Tabelle 10-1
Druckvariablen 
Variable
Definition
%s
Der vollständige Pfadname der zu druckenden Datei auf dem Samba-Server.
%f
Der Name der zu druckenden Datei selbst (ohne den vorangestellten Pfad) auf dem Samba-Server.
%p
Der Name des zu benutzenden Unix-Druckers.
%j
Die Nummer des Druck-Jobs (für die Benutzung mit lprm, lppause und lpresume).

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

Mit 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:

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 emerald
 

Alle 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:

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

Hier 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/printfreigabe
 

und verwenden Sie dann den print-Befehl, um eine Datei zu drucken:

smb: /> print textdatei
 

Wenn 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:

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/printlog
 

Ein 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_file
 

In 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).
Abbildung 10-2
Auswählen des Herstellers und des Modells des Druckers

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.
Abbildung 10-3
Einstellen des Druckernamens
Abbildung 10-4
Senden einer Testseite an den Drucker

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.
Abbildung 10-5
Drucker unter Windows 98 freigeben
Abbildung 10-6
Drucker unter Windows 2000 freigeben

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/bin
 

Als Nächstes erzeugen Sie das Spool-Verzeichnis des Druckers:

# cd /var/spool/lpd
 
# mkdir maya
 
# chown lp:lp maya
 
# chmod 700 maya
 

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

Bearbeiten 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 restart
 

Sie können nun versuchen, etwas auszudrucken. Führen Sie folgenden Befehl aus:

$ lpr textfile
 

Wenn 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_printer
 

Starten 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/smb
 

Senden 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/druckfreigabe
 

Der 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 textdatei
 

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

Tabelle 10-2
Konfigurationsoptionen zum Drucken 
Option
Parameter
Funktion
Vorgabewert
Geltungsbereich
printing
bsd, sysv, cups, hpux, aix, qnx, plp, softq oder lprng
Art des Drucksystems auf dem Samba-Host.
systemabhängig
Freigabe
printable
(print ok)
Boolescher Wert
Kennzeichnet eine Freigabe als Druckfreigabe.
no
Freigabe
printer
(printer name)
String (Unix-Druckername)
Name des Druckers, der den Clients gezeigt wird.
systemabhängig
Freigabe
lpq cache time
numerischer Wert (Zeit in Sekunden)
Zeitdauer in Sekunden, für die Samba den Status der Druckerwarteschlange zwischenspeichert.
10
global
postscript
Boolescher Wert
Behandelt alle Druck-Jobs als PostScript, indem am Anfang jeder Datei das Präfix %! eingesetzt wird.
no
Freigabe
load printers
Boolescher Wert
Wenn yes, werden automatisch alle Drucker aus der printcap-Datei als Druckfreigaben geladen.
yes
global
print command
String (Shell-Befehl)
Unix-Befehl zum Ausführen des Druckens.
siehe unten
Freigabe
lpq command
String (Shell-Befehl)
Unix-Befehl zum Zurückliefern des Status der Druckerwarteschlange.
siehe unten
Freigabe
lprm command
String (Shell-Befehl)
Unix-Befehl zum Löschen eines Jobs aus der Druckerwarteschlange.
siehe unten
Freigabe
lppause command
String (Shell-Befehl)
Unix-Befehl zum Unterbrechen eines Jobs in der Druckerwarteschlange.
siehe unten
Freigabe
lpresume command
String (Shell-Befehl)
Unix-Befehl zum Fortsetzen eines unterbrochenen Jobs in der Druckerwarteschlange.
siehe unten
Freigabe
printcap name
(printcap)
String (Dateiname)
Ablageort der printcap-Datei.
systemabhängig
global
min print space
numerischer Wert (Größe in KByte)
Minimal verfügbarer Plattenplatz, der zum Drucken verfügbar sein muss.
0
Freigabe
queuepause command
String (Shell-Befehl)
Unix-Befehl zum Unterbrechen einer Warteschlange.
siehe unten
Freigabe
queueresume command
String (Shell-Befehl)
Unix-Befehl zum Fortsetzen einer Warteschlange.
siehe unten
Freigabe

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.

Tabelle 10-3
Drucksystemtypen 
Variable
Definition
BSD
Berkeley Unix-System
SYSV
System V
CUPS
Common Unix Printing System
AIX
AIX-Betriebssystem von IBM
HPUX
Hewlett-Packard-Unix
QNX
QNX Realtime Operating System
LPRNG
LPR Next Generation
SOFTQ
SOFTQ-System
PLP
Portable Line Printer

Der Wert für diese Option muss aus diesen sieben Möglichkeiten gewählt werden, zum Beispiel:

printing = SYSV
 

Der 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 = yes
 
printer

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 = hpdkjet1
 
lpq 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 = 30
 
postscript

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 = yes
 
load 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:      Textfilter
 

werden 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 = no
 
print command, lpq command, lprm command,
lppause command, lpresume command

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

Damit 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 %j
 

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

Tabelle 10-4
Standardbefehle für die verschiedenen Druckoptionen
Option
BSD, AIX, PLP, LPRNG
SYSV, HPUX
QNX
SOFTQ
print command
lpr -r -P%p %s
lp -c -d%p %s; rm %s
lp -r -P%p %s
lp -d%p -s %s; rm %s
lpq command
lpq -P%p
lpstat -o%p
lpq -P%p
lpstat -o%p
lprm command
lprm -P%p %j
cancel %p-%j
cancel %p-%j
cancel %p-%j
lppause command
lp -i %p-%j -H hold
(nur SYSV)
keiner
keiner
keiner
lpresume command
lp -i %p-%j -H resume
(nur SYSV)
keiner
keiner
qstat -s -j%j -r

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

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

Mit 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 3
 

Jede 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/printcap
 

Das 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 = cups
 
min 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 = 4000
 
queuepause 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.

1Falls Sie Linux verwenden, können Sie mit dem Befehl checkpc auf diese Art von Fehler testen.
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.

TOC PREV NEXT INDEX

Copyright © 2003 by O'Reilly Verlag GmbH & Co.KG