Nachdem ein Druckauftrag im Spooling-Directory angelegt wurde, wird dieser Parameter ausgewertet, um die Spool-Datei abzuarbeiten (zu drucken). Normalerweise wird der Parameter mit einem Kommando belegt, welches die Spool-Datei an das Drucker-Subsystem des Servers weiterleitet. Das kann natürlich auch der Server selbst sein; aber in etwas größeren Netzen werden solche Dienste ausgelagert, um den Server von Polling Requests zu entlasten (siehe Glossar Pollingpolling). Der Print-Server entfernt die gedruckte Datei nicht aus dem Spool-Directory. Daher sollte am besten ein Skript dafür sorgen, dass nach dem Drucken das Spool-Directory bereinigt wird.
Das Print-Kommando besteht aus einer einfachen Textzeile und wird auch textuell ausgewertet, dabei sind drei Makroexpansionen zugelassen:
Dieses Makro wird zum Spool-Dateinamen expandiert.
Dieses Makro wird zum Druckernamen expandiert.
Wenn sich vor dem Makro %s kein /-Zeichen befindet, so wird als Spool-Datei der volle Pfadname angenommen. Das kann bei manchen Systemen zu Schwierigkeiten führen. In einem solchen Fall kann man das Makro %f expandieren, das dann in den Spool-Dateinamen expandiert wird, jedoch ohne Pfadangabe.
Der Print-Befehl muss mindestens einmal das Makro %s oder %f enthalten, das Printer-Name-Makro kann optional angegeben werden.
Wenn dieser Parameter in der [global]-section verwendet wird, so wird der Print-Befehl für alle druckbaren Dienste verwendet, die keinen eigenen Print-Befehl verwenden.
Wenn weder für eine Share noch [global]-section ein Print-Kommando angegeben ist, so werden die Spool-Dateien zwar erzeugt, aber nicht abgearbeitet (gedruckt). Sie werden dann natürlich auch nicht aus dem Spool-Directory gelöscht.
Wenn der Parameter guest account der User nobody angegeben wurde, so kann unter Umständen das Drucken nicht funktionieren (siehe Seite ), weil manche Unix-Systeme dem User nobody eine bestimmte Semantik zuweisen. Für diesen Fall sollten Sie in der [global]-section einen Gast-Account einrichten, der drucken darf.
Man kann mit diesem Parameter sehr komplexe Druckbefehle realisieren, da die Belegung nur einer Shell zur Auswertung übergeben wird. Das Beispiel 1.13 erzeugt eine Log-Datei, druckt die Datei und entfernt die Datei, alles mit einem Skript. Dabei wird das ;-Zeichen als Zeilenseparator des Skript-Programms verwendet.
print command = echo Printing \%s » /tmp/print.log; \
lpr -P \%p \%s; \
rm \%s
Voreinstellungen:
printing= BSD, AIX, QNX, LPRNG oder PLP:
print command = lpr -r -P%p %s
Für printing= SYS oder HPUX :
print command = lp -c -d%p %s; rm %s
Für printing= SOFTQ :
print command = lp -d%p -s %s; rm %s
Beispiel:
print command = /usr/lib/samba/bin/myprintscript %p %s
Falls das Samba-Paket mit der Library libcups übersetzt worden ist, so kann der Parameter auch wie folgt belegt werden:
printcap = cups
Diese Option verwendet dann die CUPS API, um die Druck-Jobs abzuarbeiten. Fall der Parameter anders belegt wird, dann wird weiterhin die System V Methode verwendet mit der -oraw Option für's Drucken. Dann wird das folgende Druckerkommando ausgegeben:
lp -c -d%p -oraw; rm %s.
Mit der Belegung printing = cups und natürlich, wenn das Samba-Paket entsprechend übersetzt wurde, werden jede Art manueller Einstellungen des Print-Commands negiert.
Beispiel:
print command = /usr/local/samba/bin/myprintscript %p %s