Linux als Printserver

21.11.2001 von OLIVER MUELLER 
Nicht jeder Windows- oder Linux-Client muss über einen eigenen Drucker verfügen. Ein zentraler Netzwerkdrucker spart Kosten und erleichtert die Administration. Dessen Verwaltung kann bequem über Linux erfolgen.

Die Voraussetzung für einen funktionierenden Samba-Printserver, den auch Windows-Clients nutzen können, ist die korrekte Installation des Samba-Servers. Wie Sie das bewerkstelligen, haben wir in diesem Beitrag beschrieben. Der Samba -Server ist in fast jeder Linux-Distribution von Haus aus enthalten. Updates, Dokumentationen und FAQs finden Sie unter www.samba.org.

Um grundsätzlich alle Drucker auf dem Samba-Server unter Linux freizugeben, genügt in der Datei /etc/smb.conf eine Sektion der Form:

[printers]
comment = All Printers
path = /var/spool/samba
browseable = no
writeable = no
printable = yes

Die Freigabe wird als Drucker-Share (printable = yes) angegeben. path gibt hier das Spool-Verzeichnis an. Falls es noch nicht existiert, legt Samba es beim ersten Druckauftrag an.

Postscript oder RAW?

Das Problem, über das die meisten Samba-Neulinge stolpern, ist die Einrichtung des Druckers auf der Client-Seite. Drucker können Sie nämlich auf zwei Arten bereitstellen: Entweder geben Sie den Drucker als PostScript-Gerät oder aber als Raw-Printer frei. Letzterer erwartet in der jeweiligen Sprache des Druckers perfekt aufbereitete Druckaufträge, also eine native Druckersprache wie beispielsweise ESC/P. Linux schleust in diesem Fall die Druckdaten einfach durch den Druckerport, ohne eine weitere Aufbereitung durch Programme oder Filter wie GhostScript.

Der auf der vorigen Seite angegebene universelle Printer-Share zieht alle Drucker aus der Datei /etc/printcap heraus und gibt diese frei. Im folgenden Beispiel einer printcap-Datei ist ein Drucker (lp) für die Zusammenarbeit mit GhostScript konfiguriert und somit wie ein PostScript-Drucker anzusprechen. Der andere Drucker (raw) ist als Raw-Printer installiert:

lp:\\
:sd=/var/spool/lpd/lp:\\
:mx#0:\\
:sh:\\
:lp=/dev/lp0:\\
:if=/var/spool/lpd/lp/filter:
raw:\\
:rw:sh:\\
:lp=/dev/lp0:\\
:sd=/var/spool/lpd/raw:\\
:fx=flp:

Drucker am Client

Die Printers-Sektion in /etc/smb.conf gibt die beiden Drucker als lp und raw frei. Wenn Sie nun auf dem Windows-Client einen neuen Drucker über den Share lp einrichten, muss ein PostScript-Druckertreiber installiert werden. In der Praxis hat sich der Treiber für den Apple LaserWriter als gute Wahl erwiesen, da Apple schon sehr früh auf den PostScript-Standard setzte. Dabei ist es egal, welchen Drucker Sie tatsächlich angeschlossen haben.

Wenn Sie einen Drucker über den Share raw erzeugen, installieren Sie auf Ihrem Windows-Client den Treiber für den Drucker, der an Ihrem Linux-/Samba-Server angeschlossen ist. Handelt es sich dabei beispielsweise um einen HP DeskJet, installieren Sie den entsprechenden HP-DeskJet-Treiber auf dem Client.

Automatische Treiberinstallation

Die übliche Methode, den Drucker vom Anwender über den Wizard von Windows zu installieren, hat jedoch einige Schwächen. Der User muss mehrere Schritte durcharbeiten, wie etwa die Auswahl des Druckertyps oder die teils zahllosen Optionen. Als Systemadministrator können Sie dabei nicht sicher sein, dass dieser manuelle Installationsvorgang auch fehlerfrei durchgeführt wird. Die andere Variante, der Marsch von Arbeitsplatz zu Arbeitsplatz, ist ebenfalls nicht praktikabel - vor allem bei großen Unternehmen.

Windows NT/2000-Server bieten die Möglichkeit, Druckertreiber automatisch auf dem Client-System zu installieren. Dabei wird ein Drucker per Windows NT oder Windows 2000 freigegeben. Danach klickt der Benutzer auf seinem (Client-)System nur noch doppelt auf die Netzwerkfreigabe des betreffenden Druckers, und ein Dialogfeld fragt ihn, ob der vom Server bereitgestellte Treiber verwendet werden soll. Man bejaht die Frage, und schon ist der Drucker installiert. Selbst unbedarfte Computeranwender können diesen Vorgang ohne Fehler meistern.

Ein solches Vorgehen lässt sich auch unter Samba umsetzen. Dabei sind ältere Samba-Versionen mit der Einschränkung behaftet, dass dieses Verfahren nur mit Windows-9x-Clients funktioniert. Ab der Version 2.2.0 klappt die automatische Treiberinstallation mit Samba auch auf Clients mit Windows NT/2000. Im November 2001 war das 2.2.2-Release die aktuelle Version von Samba.

Referenzinstallation anlegen

Die automatische Treiberinstallation funktioniert nach einem einfachen Prinzip. Normalerweise legen Sie während der Installation die Windows-CD-ROM ein, und das System kopiert sich die erforderlichen Treiber.

Bei der automatischen Installation werden die Treiberdateien nicht von der Windows-CD, sondern vom Samba-Server auf den Client kopiert. Außerdem ist auf dem Server eindeutig festgelegt, welcher Treiber zum Einsatz kommen soll. Damit ist die Angabe eines falschen Treibers ausgeschlossen.

Damit diese Treiberdateien auf dem Samba-System zur Verfügung stehen, gilt es zunächst, diese für Ihren Drucker relevanten Dateien zu finden. Hierzu legen Sie einfach eine Art Schablone an. Sie installieren den Treiber einmal auf einem Client und machen dann einen Abzug davon.

Diese Installation können Sie an jedem beliebigen Windows-System vornehmen. Am besten wählen Sie jedoch einen PC aus, der später ohnehin mit dem Netzwerkdrucker verbunden sein soll. Dadurch können Sie sich die Arbeit beim Einrichten des Samba-Systems mit einem kleinen Trick erleichtern.

Installieren Sie den Treiber für den an das Samba-System angeschlossenen Drucker. Denken Sie daran, dass Sie bei als PostScript (Druckername nicht raw) freigegebenen Druckern den Treiber Apple LaserWriter verwenden.

Wenn Sie den Samba-Drucker auf einem seiner künftigen Clients installieren, drucken Sie bitte eine Testseite aus und bewahren diese auf. Hier finden Sie nämlich die Treiberdateien inklusive Pfadangabe. Diese Dateien kopieren Sie später auf den Samba-Server. Die Namen der Treiberdateien findet ein Script von Samba später zwar selbst heraus, aber deren Pfade meldet Samba nicht.

Druckerdefinition für Samba

Der nächste Schritt ist das Anlegen des so genannten Printer Definition File. Diese Datei nimmt sämtliche Angaben über den Drucker auf, so wie er jetzt in der Referenzinstallation vorhanden ist, und stellt somit die Basisinformationen für die automatische Installation für das Samba-System bereit. Die erforderlichen Informationen muss Samba sich aus den Windows-9x-Dateien MSPRINT.INF, MSPRINT2.INF, MSPRINT3.INF und MSPRINT4.INF beziehungsweise NTPRINT.INF unter Windows NT/2000 aus dem Windows-INF-Verzeichnis herausziehen. Beachten Sie dabei, dass die Dateien MSPRINT3.INF und MSPRINT4.INF bei älteren Windows-95-Systemen nicht existieren.

Kopieren Sie die oben genannten Dateien in Ihr Home-Verzeichnis auf das Linux-/Samba-System. Anschließend suchen Sie mit grep innerhalb der *.INF-Dateien nach Ihrem Druckertreiber. Achten Sie dabei darauf, dass Sie den Namen des Windows-Druckertreibers exakt angeben (im folgenden Beispiel unter Windows 9x den Apple LaserWriter):

grep "Apple LaserWriter" MSPRINT*.INF

Nun erhalten Sie eine Auflistung, in welcher Datei der Eintrag für den Treiber schlummert. Aus dieser Datei müssen Sie nun das Printer Definition File erzeugen. Hierzu verwenden Sie das Programm make_printerdef. Übergeben Sie diesem Programm als Argumente die soeben ermittelte MSPRINT*.INF-Datei (beziehungsweise das betreffende OEM*.INF-Pendant) und den Namen des Druckertreibers. Leiten Sie diese Ausgabe in eine Datei, wie beispielsweise printers.def, um.

Unbekannte Drucker installieren

Bei Druckern, die Windows nicht direkt unterstützt, finden Sie die erforderlichen INF-Daten in einer der OEM*.INF-Dateien unter C:\\WINDOWS\\INF. Dehnen Sie in diesem Fall den grep-Befehl einfach auf diese Dateien aus, wenn Sie mit MSPRINT*.INF keine Erfolge erzielen. In unserem Beispiel mit dem Apple LaserWriter würden Sie also das folgende Kommando eingeben:

make_printerdef MSPRINT.INF "Apple LaserWriter" > printers.def

Als Resultat erhalten Sie eine Auflistung mit Informationen zum Drucker:

Found:APPLE230.SPD
End of section found
CopyFiles: @APPLE230.SPD,PSCRIPT
Datasection: PSCRIPT_DATA
Datafile: APPLE230.SPD
Driverfile: PSCRIPT.DRV
Helpfile: PSCRIPT.HLP
LanguageMonitor:

Copy the following files to your printer$ share location:
APPLE230.SPD
PSCRIPT.DRV
PSCRIPT.HLP
PSCRIPT.INI
TESTPS.TXT
APPLE380.SPD
FONTS.MFM
ICONLIB.DLL
PSMON.DLL

Sofern Sie beim Anlegen der Referenzinstallation keine Testseite ausgedruckt haben, notieren Sie sich bitte jetzt die unter dem Abschnitt "Copy the following..." angegebenen Dateien. Dies sind die Treiberdateien, die Sie auf Ihr Samba-System übertragen müssen. Diese Dateien finden sich auf dem "Referenz-Client" zumeist im Verzeichnis "C:\\WINDOWS\\SYSTEM".

Treiber bereitstellen

Nachdem Sie die Druckerdefinition abschlossen haben, gilt es nun, die Treiberdateien und das Printer Definition File auf dem Samba-Server zur Verfügung zu stellen. Hierzu legen Sie zunächst ein neues Verzeichnis an, in das Sie die Dateien kopieren. Eine gute Wahl für das Verzeichnis wäre /usr/share/samba/print:

mkdir -p /usr/share/samba/print

Dieses Verzeichnis geben Sie als Share PRINTER$ frei. Der entsprechende Eintrag in /etc/smb.conf wäre:

[PRINTER$]
path = /usr/share/samba/print
read only = yes
browseable = no
guest ok = yes

In dieses Verzeichnis kopieren Sie die von make_printerdef ausgegebenen beziehungsweise auf dem Testausdruck aufgelisteten Dateien. Die Datei msprint.cat der Testseite benötigen Sie nicht. Anschließend befördern Sie auch die von make_printerdef angelegte Datei printers.def in das Verzeichnis des Shares PRINTER$.

Wollen Sie weitere Drucker mit automatischer Treiberinstallation verfügbar machen, überschreiben Sie auf keinen Fall die Datei printers.def auf dem Samba-Server. Fügen Sie stattdessen einfach die Definitionen des neuen Druckers an.

Drucker freigeben

Nachdem die Treiberdateien auf dem Samba-Server untergebracht sind, können Sie den neuen Drucker freigeben. Dies geschieht wieder in der Datei /etc/smb.conf.

Hier geben Sie zunächst im Abschnitt [global] die Lage des Printer Definition File an:

printer driver file = /usr/share/samba/print/printers.def

Falls Sie den Drucker nicht schon in einem separaten Share, sondern nur über [Printers] freigegeben haben, legen Sie für diesen einen Share an:

[PostScript]
path = /var/spool/samba
printable = yes
print command = lpr -r -Pljet4 %s
printer driver = Apple LaserWriter
printer driver location = \\\\%L\\PRINTER$

Wenn Sie Ihren Drucker-Share (hier PostScript) nicht wie die betreffende Queue in /etc/printcap benennen, können Sie durch die Zeile printer command festlegen, welches Kommando die eingehenden Druckaufträge starten soll. Im Beispiel verwenden wir lpr, wobei die Option -Pljet4 die Queue namens ljet4 bestimmt. %s ist in diesem Fall ein Platzhalter für die Datei.

Unter printer driver geben Sie die Bezeichnung des Druckertreibers von Windows an. Die Option "printer driver location" gibt als UNC-Pfad an, wo sich die Treiberdateien befinden. Diese liegen im neu erzeugten Share PRINTER$ des Samba-Servers. Daher die Angabe \\\\%L\\PRINTER$, wobei %L durch den Servernamen Ihres Samba-Systems ersetzt wird.

Abschluss und Test

Jetzt ist der große Augenblick gekommen: Die automatische Druckerinstallation muss getestet werden. Dazu ist zunächst der Samba-Daemon neu zu starten.

Nun können Sie sich auf einem Client-System, das den Drucker bislang noch nicht verwendet, durch einen Klick auf das Desktop-Symbol Netzwerk bis zu Ihrem Samba-Server durchklicken. Hier finden Sie den neuen Drucker-Share. Klicken Sie auf diesen doppelt. Es öffnet sich ein aus drei Dialogfeldern bestehender Wizard, durch den das Einrichten des Druckers zum Kinderspiel wird. Beim letzten Dialog geben Sie sicherheitshalber noch einmal an, dass eine Testseite gedruckt werden soll. Wenn Sie diesen Dialog verlassen haben, werden die Treiberdateien automatisch von Ihrem Samba-Server übertragen, und die Testseite sollte aus Ihrem Drucker gleiten. (mha/fkh)

tecCHANNEL Buch-Shop

Literatur zum Thema Linux

Bestell-Link

Titel von Pearson Education

Bestellung

PDF-Titel (50% billiger als Buch)

Downloads