Printserver mit Samba

Aus LinuxUser 02/2003

Printserver mit Samba

Beein-druckend

Wenn Sie ein heterogenes Netzwerk betreiben, in dem es Windows- und Linux-Workstations gibt, ist es sinnvoll, die Druckdienste des Linux-Servers für alle Plattformen zur Verfügung zu stellen. Die zentrale Bereitstellung von Druckern erleichtert deren Verwaltung.

Als Basis für die Umsetzung dieses Vorhabens dient Samba. Grundsätzlich stellt sich bei jeder Art von Netzwerkdruck, so auch beim Drucken über Samba, die Frage, wer eigentlich die Aufbereitung der Druckdaten übernimmt. Schließlich müssen diese genau wie beim lokalen Druck in ein druckerspezifisches Format umgewandelt werden.

Bei Samba sind zwei Verfahren möglich: Im ersten Szenario benutzt der Windows-Rechner seinen eigenen Windows-Druckertreiber (sofern ein solcher existiert) und ist damit selbst für die Erzeugung der druckerspezifischen Daten verantwortlich. Ein Vorteil des zentralen Netzwerkdrucks, nämlich die einfache Verwaltung sämtlicher Treiber auf dem Server, ist dann aber nicht mehr gegeben, weil zusätzliche Installationsmaßnahmen auf dem Client nötig sind. Dafür werden bei diesem Verfahren nahezu alle Drucker unterstützt. Außerdem muss Samba die Daten dann lediglich weiterleiten, was zu einem geringeren Ressourcenverbrauch auf dem Server beiträgt. Der Nachteil ist, dass für jeden Drucker, der auf dem Server verfügbar ist, auf dem Client ein spezieller Treiber installiert werden muss. Das erhöht den Verwaltungsaufwand für den Administrator.

Es gibt aber noch einen anderen Weg. Da die Server-Seite (genauer: das cups-Drucksystem) hervorragend mit dem Postscript-Format zurecht kommt, ist es auch möglich, auf dem Windows-Rechner einfach eine Postscript-Datei zu erzeugen. Dazu brauchen Sie auf Client-Seite lediglich einen generischen Postscript-Treiber zu installieren. Der Client sendet dann einfach die fertige Postscript-Datei an den Server. Das hat in erster Linie den Vorteil, dass sämtliche Windows-Clients nur einen einzigen Treiber benötigen, etwa den Postscript-Treiber von Adobe oder CUPS. Bei Verwendung des CUPS-Drucksystems auf Linux-Seite sollte der Postscript-Treiber sogar automatisch auf dem Server gefunden werden. Außerdem ist der CUPS-Server in diesem Fall selbst und ausschließlich für die Aufbereitung der Druckdaten verantwortlich, d. h. auf dem Server muss für jeden angeschlossenen Drucker ein Treiber vorhanden sein. Jetzt steigt allerdings der Ressourcenverbrauch auf der Server-Seite, da CUPS sämtliche Druckdaten aller Clients aufbereiten muss. Dieser Weg ist vor allem dann der bessere und komfortablere, wenn Sie ohnehin über einen Postscript-Drucker verfügen oder ihr Drucker zumindest optimal von CUPS unterstützt wird, also eine funktionierende PPD-Datei existiert.

Samba-Basics

Samba wird bei jeder Linux-Distribution mitgeliefert, bei nahezu jeder Distribution standardmäßig installiert und oft sogar aktiviert. Die meisten Samba-Konfigurationen sind heutzutage auch bereits derart vorkonfiguriert, dass die am Linux-Server zum Installationszeitpunkt installierten Drucker automatisch unter Samba freigegeben werden. Prinzipiell müssen Sie dazu die Samba-Konfiguration derart abändern, dass der lokale Linux-Drucker als Standardfreigabe fungiert. Trotz Automatismus sehen wir uns im Detail an, wie ein am Linux-Server angeschlossener Drucker für Windows-Benutzer im Netzwerk freigegeben wird. Dabei ist es zunächst unerheblich, mit welchem Drucksystem Sie arbeiten. (Samba unterstützt in der aktuellen Version 2.2.5 auch CUPS.)

Wir setzen voraus, dass Samba korrekt installiert ist und läuft (siehe Artikel ab Seite 37). Außerdem müssen Sie einen lokalen Drucker auf dem Rechner installiert haben, auf dem Samba läuft. Hinsichtlich des Druckertyps machen wir zunächst keine Unterscheidung; am komfortabelsten sind allerdings Postscript-Drucker einzurichten. Sehen wir uns zunächst an, wie die Samba-Konfiguration zum gemeinsamen Nutzen eines Druckers abgeändert werden muss.

Vorbereitungen

Zunächst sollten Sie prüfen, ob Samba korrekt funktioniert, d. h. auf den Windows-Clients wird der Samba-Server in der Netzwerkumgebung angezeigt. Dann muss die Samba-Konfigurationsdatei smb.conf angepasst werden, damit ein Drucker am Samba-Server auch für Windows-Benutzer im Netz benutzbar wird. Versierte Anwender können /etc/samba/smb.conf oder /etc/smb.conf (je nach Distribution) direkt im Editor bearbeiten. Dazu benötigen Sie root-Rechte. Maus-Fans können die Anpassungen aber auch mit Hilfe von grafischen Werkzeugen wie Webmin (siehe Abbildung 1) oder dem Samba-eigenen Konfigurationswerkzeug SWAT erledigen. Allerdings müssen Sie dann auch wissen, mit welchem Samba-Parameter der jeweilige GUI-Eintrag korrespondiert.

Abbildung 1: Sie können Die für das Drucken verantwortlichen Samba-Parameter auch bequem über webmin einstellen

Abbildung 1: Sie können Die für das Drucken verantwortlichen Samba-Parameter auch bequem über webmin einstellen

Nativer Drucker-Treiber am Client

Bevor Sie smb.conf so abändern, dass der oder die lokalen Drucker des Linux-Servers für Windows freigeben sind, muss sichergestellt sein, dass dieser unter Linux am Server funktioniert. Eilige sollten anschließend den gleichen Drucker auf einem der Windows-Clients installieren, wozu Sie natürlich die Windows-Treiber für diesen Drucker benötigen. Aktivieren Sie je nach Windows-Version den Assistenten zur Druckerinstallation. Wenn Sie zur Auswahl eines Treibers aus der Geräteliste aufgefordert werden, sollten Sie sich den exakten Namen dieses Druckers aufschreiben. Auch Groß- und Kleinschreibung ist hierbei zu beachten. Vervollständigen Sie die Installation und starten Sie Windows neu. Wir gehen im weiteren Verlauf des Beitrags noch einmal gezielt auf die Treiber-Installation auf Client-Seite ein und zeigen auch, wie sich die benötigten Druckertreiber für die Clients auf dem Server verwalten und automatisch beziehen lassen.

Allgemeine Samba-Konfiguration

Anschließend melden Sie sich am Samba-Server als root an und öffnen /etc/smb.conf bzw. /etc/samba/smb.conf mit einem beliebigen Editor. Die Datei ist in einzelne “Sektionen” unterteilt. Beginnen Sie mit der Sektion [global]. Da Samba die Rolle des Vermittlers zwischen Windows und Linux spielt und Druckaufträge der Windows-Clients an das unter Linux eingerichtete Drucksystem weiterleitet, müssen Sie zunächst einige grundlegende Einstellungen vornehmen. Dabei müssen Sie Samba u. a. mitteilen, welches Drucksystem unter Linux verwendet wird, wo die Druckerkonfigurationsdatei printcap zu finden ist und ob alle unter Linux angeschlossenen lokalen Drucker für Windows verfügbar gemacht werden sollen. Dazu dienen die folgenden Parameter:

printcap name = /etc/printcap
load printers = yes

Bedenken Sie dabei, dass Samba für jeden der etwa 200 verfügbaren Parameter jeweils eine Default-Belegung bereithält, auch wenn diese in der Konfigurationsdatei nicht aufgeführt ist. So liegt etwa die Drucker-Konfigurationsdatei meist unter /etc/printcap, d. h. normalerweise brauchen Sie an diesen Parametern keine Veränderungen vorzunehmen. Das von Samba zu verwendende Drucksystem wird durch den Parameter printing gekennzeichnet und ist oft mit dem Wert BSD vorbelegt. Bei Einsatz von CUPS müssen Sie folgende Einträge vornehmen:

printing = cups

Außerdem muss die obige “printcap name”-Zeile für CUPS geändert werden:

printcap name = cups

Je nach verwendetem Drucksystem unterscheidet bzw. vereinfacht sich auch die weitere Vorgehensweise, da Samba für alle das Drucken betreffenden Parameter mit sinnvollen Standardwerten arbeitet. Solche Parameter müssen also nicht explizit gesetzt werden. Der Parameter print command, mit dem Sie Samba mitteilen können, welches Druckerkommando zum Drucken verwendet wird, besitzt z. B. den Defaultwert

print command = lpr -r -P%p %s

womit die Drucksysteme BSD, AIX, QNX, LPRNG und PLP funktionieren sollten. Bei CUPS müssen Sie den Parameter mit

print command =   lp -c -d%p -oraw; rm %s

belegen. Um alle verfügbaren Drucker in einem Rutsch unter Windows zur Verfügung zu stellen, müssen Sie eine Sektion [printers] in Ihre Samba-Konfigurationsdatei einfügen, die folgenden Inhalt haben sollte:

[printers]
comment = Alle lokalen Drucker
path = /var/spool/samba
browseable = yes
public = yes
guest ok = yes
writable = no
printable = yes
printer admin = root

In dieser Sektion werden nicht nur sämtliche lokalen Drucker freigegeben, sondern es wird auch festgelegt, welche Anwender diese Drucker verwenden dürfen, wo die zugehörige Spool-Datei zu finden ist (z. B. unter /var/spool/samba) und wer als Drucker-Administrator fungiert (printer admin = root), um etwa einen neuen Treiber zu installieren. Mit Hilfe der Directive “browseable = yes” geben Sie vor, dass sämtliche Drucker nach außen sichtbar sind. Der Parameter “printable = yes” gibt allen Benutzer das Recht zum Drucken – auch dann, wenn diese nur als Gast im System sind (guest ok = yes).

Spezifische Druckerfreigaben

Falls Sie nur einen speziellen Drucker unter Windows freigeben wollen, fügen Sie die Option auto services in den Abschnitt [global] der Datei smb.conf ein. Hier tragen Sie den Namen der freizugebenden Druckerwarteschlange an, wobei die gleiche Schreibweise wie in der Datei /etc/printcap zu verwenden ist. Mit folgendem Eintrag würden Sie also auf einfache Weise den Standarddrucker (z. B. minolta 1250) freigeben:

auto services = minolta 1250

(Oft heißt der Standarddrucker lp0.) Für so einen speziellen Drucker verwenden Sie eine spezielle Freigabe, die ähnlich einer Laufwerks-Freigabe unter Samba den Namen den freizugebenden Druckers tragen muss, also

[minolta 1250]
printable = yes
comment = Minolta Laserdrucker QMS 1250
public = yes
writeable = no
browseable = yes
printer driver = minolta 1250

Der Name der Freigabe (eckige Klammern) muss mit dem in der Zeile auto services angegebenen Namen und dem Druckernamen (bzw. dessen Alias) aus der Datei /etc/printcap übereinstimmen. Dabei müssen Sie unbedingt beachten, dass Sie in der Zeile für den Druckertreiber die Beschreibung genau so eingeben, wie beim unter Windows installierten Treiber, also etwa minolta 1250. Denken Sie daran, die Änderungen in der Datei /etc/smb.conf abzuspeichern. Es ist ratsam, vorher eine Kopie anzulegen, falls Sie unsicher sind. Abschließend starten Sie Samba neu, häufig über einen Befehl der Form

/etc/init.d/smb restart

Client-Treiber

Melden Sie sich jetzt an Ihrer Windows-Workstation mit Ihrem Netzwerknamen und Passwort an und öffnen Sie die Netzwerkumgebung. Hier sollte nach kurzer Zeit der Samba-Drucker aufgelistet werden. Bei Windows XP wechseln Sie ebenfalls in die Netzwerkumgebung und klicken auf Arbeitsplatzcomputer anzeigen. Um den Suchprozess zu beschleunigen, können Sie auch direkt mit der Suchfunktion des Explorers nach dem Samba-Server suchen (IP-Nummer oder NetBIOS-Name des Samba-Servers). Falls Sie den zugehörigen Windows-Treiber nicht vorab installiert haben, werden Sie beim Versuch, sich mit diesem Drucker zu verbinden (Kontextmenü Drucker verbinden) darauf hingewiesen, dass auf dem Server kein passender Treiber für diesen Drucker zu finden ist (siehe Abbildung 2). Bei Windows 98 können Sie mit der rechten Maustaste klicken und installieren wählen, wodurch sich das Dialogfeld Druckereinrichtung öffnet.

Abbildung 2: Durch die Freigabe eines Druckers via Samba ist dieser noch nicht mit einem Treiber verbunden. Das merken Sie spätestens, wenn Sie die Freigabe anklicken

Abbildung 2: Durch die Freigabe eines Druckers via Samba ist dieser noch nicht mit einem Treiber verbunden. Das merken Sie spätestens, wenn Sie die Freigabe anklicken

Sie können die Druckertreiberdateien für die Clients auch auf dem Server ablegen. Mit Hilfe des Samba-Parameters printer driver location kann sich dann der Windows-Client informieren, wo die Dateien zu finden sind. Allerdings funktioniert das nicht immer.

Automatische Installation eines generischen Druckertreibers vom Server

Die Samba-seitigen Voraussetzungen zur Freigabe eines Linux-Druckers für Windows-Clients sind jetzt erfüllt. Wenden wir uns jetzt noch einmal den eingangs angedeuteten Szenarien und damit der Frage zu, wer die Aufbereitung der Druckdaten übernehmen soll (Client oder Server), also den eigentlichen Druckertreiber bereitstellt, und wie die automatische Installation eines generischen Postscript-Treibers funktioniert, falls der Server die Druckdaten aufbereiten soll. Im Übrigen ist es in beiden Szenarien möglich, die benötigten Treiber zur automatischen Installation auf dem Linux-Server zur Verfügung zu stellen. Trotzdem ist die automatische Treiberinstallation lediglich das Sahnehäubchen des Netzwerkdrucks. Drucken können Sie auch ganz ohne Automatismen. Sobald Sie aber die erforderlichen Treiber vor dem ersten Druckversuch auf dem Server zur Verfügung stellen, wird der Treiber vom Samba-Server geladen und automatisch im Hintergrund installiert. Dazu müssen Sie eine Sektion [print$] in die Samba-Konfiguration einfügen, die etwa so aussehen sollte:

[print$]
comment = Drucker-Treiber auf dem Server
path = /usr/share/samba/drivers
browseable = yes
guest ok = yes
read only = yes
write list = root

In diesem Beispiel werden die erforderlichen Treiberdateien unter /usr/share/samba/drivers allen Clients zur automatischen Installation zur Verfügung gestellt. Alle Benutzer dürfen die erforderlichen Druckertreiber vom Server herunter laden. Mit den beschriebenen Anpassungen existieren zwar jetzt die eigentlichen Druckerfreigaben, die jeweiligen Drucker sind aber noch nicht mit einem Treiber verbunden, so dass Windows immer noch zur Installation eines Druckertreibers auffordert, sobald Sie die Freigabe anklicken. Jetzt müssen Sie aber im Gegensatz zum obigen Beispiel mit Nein antworten, damit sich der Dialog für Drucker Eigenschaften öffnet. Hier können Sie mit Hilfe der Option Neuer Treiber den neuen Druckertreiber vom Linux-/CUPS-Server installieren, der im freigegebenen Verzeichnis [print$] zur Verfügung steht.

Abbildung 3: Seit KDE 3.0 können Sie mit Hilfe von kdeprint, einem laufenden Samba-Server > 2.2 und vorhandenem Adobe-PostScript-Treiber den für die Client-Seite erforderlichen Postscript-Treiber leicht mit Hilfe auf den Client exportieren

Abbildung 3: Seit KDE 3.0 können Sie mit Hilfe von kdeprint, einem laufenden Samba-Server > 2.2 und vorhandenem Adobe-PostScript-Treiber den für die Client-Seite erforderlichen Postscript-Treiber leicht mit Hilfe auf den Client exportieren

Fazit

Im Grunde genommen ist das Freigeben eines Linux-Druckers über Samba mit wenigen Handgriffen erledigt. In der Sektion [global] werden lediglich der Print-Server aktiviert und das verwendete Drucksystem sowie die Lage der Spool-Verzeichnisse spezifiziert. Unter [printers] geben Sie alle lokal am Linux-Server verfügbaren Drucker automatisch frei. Zur gezielten Freigabe eines einzelnen Druckers richten Sie eine separate Sektion mit dem Namen des betreffenden Druckers (z. B. [lp]) ein. Eine Sektion [print$] kennzeichnet den Pfad zu den verschiedenen Druckertreiber-Verzeichnissen, falls Sie diese auf dem Server bereit halten wollen. Für die Installation des Druckertreibers am Client gibt es mehrere Möglichkeiten. Sie können einen generischen Postscript-Treiber verwenden und beziehen diesen vom Samba-Server, wenn dieser die Aufbereitung der Druckdaten übernehmen soll. Falls der Client die Druckdaten selbst erzeugen soll, können Sie den nativen Windows-Treiber für lokal installieren oder ebenfalls vom Server beziehen (Parameter: “printer driver location”).

Kasten 1: Trouble Shooting

Sollte das Drucken zwar am Linux-Server, also unter Linux problemlos funktionieren, nicht aber unter Samba, sollten Sie zunächst die angepasste Datei smb.conf auf Syntaxfehler und Kommentare überprüfen. Außerdem können Sie das Samba-Kommando

testparm /etc/smb.conf

ausführen und nach Fehlerausgaben suchen. Mit testparm können Sie außerdem die Standardwerte aller Parameter einsehen. Zusätzlich muss sichergestellt sein, dass die Gerätedatei /dev/null für sämtliche Benutzer schreibbar ist, denn Samba benutzt sie. Das erreichen Sie mit

chmod a+w /dev/null

Hier noch ein kleiner Hinweis für Benutzer von Postscript-Druckern: Falls Ihr Drucker statt der gewünschten Grafik nur Postscript-Code ausgibt, ergänzen Sie in ihrer Samba-Konfigurationsdatei den Parameter

postscript = yes

Kasten 2: Verwendung des CUPS-Postscript-Treibers

Falls Sie CUPS verwenden und die Druckdaten auf Server-Seite, also von CUPS, gefiltert werden sollen, können Sie auch den CUPS-Postscript-Treiber für die Clients verwenden. Dazu muss das Paket cups-samba installiert sein. SuSE liefert dieses Paket mit. Anschließend müssen Sie als root das mitgelieferte Skript cups-samba.install aufrufen, wodurch die Treiber in die zugehörigen Verzeichnisse unter /usr/share/cups/drivers kopiert werden. Danach rufen Sie das Programm cupsaddsmb auf, als Parameter erwartet es die Namen des Samba-Servers und des CUPS-Servers, also etwa:

cupsaddsmb -H NameSamba-Server -U root -h Name-cupsServer

Bei Verwendung von cupsaddsmb müssen CUPS und cups-samba in der gleichen Version installiert sein.

LinuxUser 02/2003 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

1 Kommentar
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Jörg Kalisch
5 Jahre her

Hallo,

vielen Dank für die Anleitung. Da diese nach 17 Jahren inzwischen recht betagt ist, habe ich mir mal erlaubt, dieser Vorgehensweise folgend eine aktuelle Anleitung zu veröffentlichen: https://www.altmetaller.de/raspberrypi-als-printserver-fuer-einen-hp-laser-107w-raw-drucker/

Liebe Grüße aus Bremen,
Jörg

Nach oben