Drucken im Hintergrund wird Spooling genannt. Ein Spooler (Warteschlange) ermöglicht es dem Benutzer die Programme auf dem Rechner fortzusetzen, ohne warten zu müssen bis der Druckauftrag abgeschlossen ist.
FreeBSD enthält den Spooler namens lpd(8). Druckaufträge werden mit lpr(1) übermittelt.
Erstellen Sie ein Verzeichnis zur Speicherung der Druckaufträge und setzen Sie die Berechtigungen auf diesem Verzeichnis, damit der Inhalt der Druckaufträge nicht von anderen Benutzern eingesehen werden kann:
#
mkdir -p /var/spool/lpd/lp
#
chown daemon:daemon /var/spool/lpd/lp
#
chmod 770 /var/spool/lpd/lp
Drucker werden in /etc/printcap
angelegt. Ein Eintrag für einen Drucker enthält dessen Name,
Anschluss sowie weitere Einstellungen. Erstellen Sie
/etc/printcap
mit folgendem
Inhalt:
lp:\:lp=/dev/unlpt0:\
:sh:\
:mx#0:\
:sd=/var/spool/lpd/lp:\
:lf=/var/log/lpd-errs:
Der Name des Druckers. lpr(1) sendet
Druckaufträge an den Drucker | |||||||||||
Der Anschluss, über den der Drucker verbunden ist. Ersetzen Sie diese Zeile mit dem entsprechenden, hier aufgeführten Verbindungstyp.
| |||||||||||
Unterdrückt das Drucken eines Deckblattes zu Beginn des Druckauftrags. | |||||||||||
Die maximale Größe des Druckauftrags wird nicht begrenzt. | |||||||||||
Das Verzeichnis zur Speicherung der Druckdaten. Jeder Drucker verwendet ein eigenes Verzeichnis. | |||||||||||
Die Logdatei, in welche die Fehler des Druckers geschrieben werden. |
Nachdem Sie /etc/printcap
erstellt
haben, verwenden Sie chkprintcap(8) um die Datei auf
Fehler zu testen:
#
chkprintcap
Beheben Sie alle gemeldeten Fehler, bevor Sie fortfahren.
Aktivieren Sie lpd(8) in
/etc/rc.conf
:
lpd_enable="YES"
Starten Sie den Dienst:
#
service lpd start
Mit lpr
werden Dokumente an den
Drucker geschickt. Die Datei können Sie auf der Kommandozeile
angeben, oder über eine Pipe an lpr
schicken. Die beiden folgenden Kommandos sind gleichwertig,
sie schicken den Inhalt von doc.txt
an
den Standarddrucker:
%
lpr doc.txt
%
cat doc.txt | lpr
Drucker können auch mit -P
ausgewählt
werden. Um auf einen Drucker namens
laser
zu drucken:
%
lpr -Plaser doc.txt
In den bisher gezeigten Beispielen wurde lediglich eine Textdatei an den Drucker gesendet. Solange der Drucker den Inhalt dieser Dateien versteht, wird die Ausgabe korrekt gedruckt werden.
Einige Drucker sind nicht in der Lage einfachen Text zu drucken. Es kann sogar sein, das die Eingabedatei gar keinen Text enthält.
Mit Hilfe von Filtern können Dateien übersetzt oder verarbeitet werden. Ein typischer Anwendungsfall ist die Umwandlung der Eingabedaten in ein Format, das der Drucker verstehen kann, wie bspw. PostScript® oder PCL. Filter können auch verwendet werden um zusätzliche Funktionen hinzuzufügen, wie bspw. Seitenzahlen oder das Hervorheben von Quellcode, um die Lesbarkeit zu verbessern.
Die hier beschriebenen Filter werden
Eingabefilter oder auch
Textfilter genannt. Diese Filter
übersetzen die eingehende Datei in verschiedene Formen.
Werden Sie mit su(1) zu root
, bevor Sie die
Dateien erstellen.
Filter werden in /etc/printcap
mit
der Kennung if=
festgelegt. Um
/usr/local/libexec/lf2crlf
als Filter
einzusetzen, bearbeiten Sie /etc/printcap
wie folgt:
lp:\ :lp=/dev/unlpt0:\ :sh:\ :mx#0:\ :sd=/var/spool/lpd/lp:\ :if=/usr/local/libexec/lf2crlf:\:lf=/var/log/lpd-errs:
Der Backslash am Ende der Zeilen zeigt an, das ein Eintrag für einen Drucker wirklich nur eine Zeile ist, in der die einzelnen Einträge durch einen Doppelpunkt getrennt sind. Das Beispiel hätte man auch wie folgt schreiben können:
lp:lp=/dev/unlpt0:sh:mx#0:sd=/var/spool/lpd/lp:if=/usr/local/libexec/lf2crlf:lf=/var/log/lpd-errs:
Typische Textdateien enthalten einen Zeilenvorschub am Ende jeder Zeile. Diese Zeilen erzeugen auf dem Drucker einen „Treppeneffekt“:
A printed file looks like the steps of a staircase scattered by the wind
Ein Filter kann Zeilenumbrüche in Wagenrückläufe und
Zeilenumbrüche konvertieren. Erstellen Sie
/usr/local/libexec/lf2crlf
mit
folgendem Inhalt:
#!/bin/sh CR=$'\r' /usr/bin/sed -e "s/$/${CR}/g"
Setzen Sie die Berechtigungen und machen Sie die Datei ausführbar:
#
chmod 555 /usr/local/libexec/lf2crlf
Passen Sie /etc/printcap
an, so
dass der neue Filter verwendet wird:
:if=/usr/local/libexec/lf2crlf:\
Drucken Sie nochmal die gleiche Datei, um den Filter zu testen.
GNU Enscript wandelt Textdateien in formatiertes PostScript® um, die dann auf PostScript®-Druckern gedruckt werden können. Das Programm fügt auch Seitenzahlen und Zeilenumbrüche hinzu und stellt andere Funktionen bereit, um gedruckte Textdateien besser lesbar zu machen. Abhängig vom Papierformat können Sie entweder print/enscript-letter oder print/enscript-a4 aus der Ports-Sammlung installieren.
Erstellen Sie
/usr/local/libexec/enscript
mit diesem
Inhalt:
#!/bin/sh /usr/local/bin/enscript -o -
Setzen Sie die Berechtigungen und machen Sie die Datei ausführbar:
#
chmod 555 /usr/local/libexec/enscript
Bearbeiten Sie /etc/printcap
um den
neuen Filter zu verwenden:
:if=/usr/local/libexec/enscript:\
Testen Sie den Filter, indem Sie eine einfache Textdatei drucken.
Viele Programme erzeugen PostScript®-Dokumente. Allerdings können kostengünstige Drucker oft nur Textdateien oder PCL verstehen. Dieser Filter wandelt PostScript®-Dateien in PCL um, bevor die Datei an den Drucker geschickt wird. Installieren Sie den Ghostscript PostScript® Interpreter print/ghostscript9-base aus der Ports-Sammlung.
Erstellen Sie
/usr/local/libexec/ps2pcl
mit diesem
Inhalt:
#!/bin/sh /usr/local/bin/gs -dSAFER -dNOPAUSE -dBATCH -q -sDEVICE=ljet4 -sOutputFile=- -
Setzen Sie die Berechtigungen und machen Sie die Datei ausführbar:
#
chmod 555 /usr/local/libexec/ps2pcl
Die PostScript®-Eingabe wird von dem Skript erst in PCL umgewandelt, bevor es an den Drucker geschickt wird.
Bearbeiten Sie /etc/printcap
um den
neuen Filter zu verwenden:
:if=/usr/local/libexec/ps2pcl:\
Testen Sie den Filter mit einem kleinen PostScript®-Programm.
%
printf "%%\!PS \n /Helvetica findfont 18 scalefont setfont \ 72 432 moveto (PostScript printing successful.) show showpage \004" | lpr
Ein Filter kann sehr nützlich sein, wenn er die
Eingabe erkennt und sie automatisch in ein für den Drucker
verständliches Format umwandelt. Die ersten beiden Zeichen
in einer PostScript®-Datei sind in der Regel
%!
. Ein Filter ist in der Lage diese
beiden Zeichen zu erkennen. PostScript®-Dateien können
unverändert an einen PostScript®-Drucker geschickt werden.
Textdateien können, wie eben gezeigt, mit
Enscript in PostScript®
umgewandelt werden. Erstellen Sie
/usr/local/libexec/psif
mit diesem
Inhalt:
#!/bin/sh # # psif - Print PostScript or plain text on a PostScript printer # IFS="" read -r first_line first_two_chars=`expr "$first_line" : '\(..\)'` case "$first_two_chars" in %!) # %! : PostScript job, print it. echo "$first_line" && cat && exit 0 exit 2 ;; *) # otherwise, format with enscript ( echo "$first_line"; cat ) | /usr/local/bin/enscript -o - && exit 0 exit 2 ;; esac
Setzen Sie die Berechtigungen und machen Sie die Datei ausführbar:
#
chmod 555 /usr/local/libexec/psif
Bearbeiten Sie /etc/printcap
um den
neuen Filter zu verwenden:
:if=/usr/local/libexec/psif:\
Um den Filter zu testen, drucken Sie PostScript®- und einfache Textdateien.
Einen Filter zu schreiben, der verschiedene Arten von Eingaben erkennen und formatieren kann, ist eine große Herausforderung. print/apsfilter aus der Ports-Sammlung ist auch ein intelligenter Filter, der Dutzende Dateitypen automatisch in eine für den Drucker verständliche PDL umwandeln kann. Weitere Details finden Sie auf http://www.apsfilter.org.
Die Einträge in /etc/printcap
sind
nichts anderes als Definitionen von Warteschlangen. Für jeden
Drucker können eine oder mehrere Warteschlangen definiert
werden. Kombiniert mit Filtern bieten mehrere Warteschlangen
eine bessere Kontrolle über die Druckaufträge.
Als Beispiel dient ein vernetzter
PostScript®-Laserdrucker in einem Büro. Die meisten Benutzer
möchten einfache Textdateien drucken, aber ein paar
fortgeschrittene Anwender sollen in der Lage sein,
PostScript®-Dateien direkt zu drucken. Hierfür werden zwei
Einträge für den Drucker in /etc/printcap
erstellt:
textprinter:\ :lp=9100@officelaser:\ :sh:\ :mx#0:\ :sd=/var/spool/lpd/textprinter:\ :if=/usr/local/libexec/enscript:\ :lf=/var/log/lpd-errs: psprinter:\ :lp=9100@officelaser:\ :sh:\ :mx#0:\ :sd=/var/spool/lpd/psprinter:\ :lf=/var/log/lpd-errs:
Dokumente, die zum textprinter
geschickt werden, werden wie im vorherigen Beispiel durch den
Filter /usr/local/libexec/enscript
formatiert. Fortgeschrittene Anwender können
PostScript®-Dateien direkt auf dem Drucker
psprinter
drucken, wo keine
Filterung stattfindet.
Mit mehreren Warteschlangen können Sie einen direkten Zugriff auf alle Arten von Druckerfunktionen zur Verfügung stellen. Ein Duplex-Drucker könnte zwei Warteschlangen verwenden, eine für den gewöhnlichen Druck und eine für den Duplexdruck.
Es stehen verschiedene Programme zur Verfügung um Druckaufträge zu überwachen und den Druckbetrieb zu steuern.
lpq(1) zeigt den Status der Druckaufträge des Benutzers an. Druckaufträge anderer Benutzer werden nicht angezeigt.
Dieser Befehl zeigt die anstehenden Druckaufträge eines Benutzers für einen Drucker an:
%
lpq -P
Rank Owner Job Files Total Size 1st jsmith 0 (standard input) 12792 byteslp
Der folgende Befehl zeigt die anstehenden Druckaufträge eines Benutzers für alle Drucker an:
%
lpq -a
lp: Rank Owner Job Files Total Size 1st jsmith 1 (standard input) 27320 bytes laser: Rank Owner Job Files Total Size 1st jsmith 287 (standard input) 22443 bytes
Mit lprm(1) können Druckaufträge gelöscht werden.
Normale Benutzer dürfen lediglich ihre eigenen Aufträge
löschen. root
kann hingegen jeden beliebigen Auftrag löschen.
Dieser Befehl löscht alle anstehenden Druckaufträge eines Druckers:
#
lprm -P
dfA002smithy dequeued cfA002smithy dequeued dfA003smithy dequeued cfA003smithy dequeued dfA004smithy dequeued cfA004smithy dequeuedlp
-
Mit dem folgenden Befehl löschen Sie einen bestimmten Druckauftrag. Benutzen Sie lpq(1), um die Nummer des Auftrags zu finden.
%
lpq
Rank Owner Job Files Total Size 1st jsmith 5 (standard input) 12188 bytes%
lprm -P
dfA005smithy dequeued cfA005smithy dequeuedlp
5
Mit lpc(8) kann der Druckerstatus überprüft und
verändert werden. lpc
wird zusammen mit
einem Kommando und optional mit einem Druckernamen
aufgerufen. Mit all
können alle Drucker
angesprochen werden, auf denen das Kommando ausgeführt
werden soll. Normale Benutzer können sich den Status mit
lpc(8) ansehen. Nur root
darf Kommandos
ausführen, die den Status des Druckers verändern.
Dieser Befehl zeigt den Status von allen Druckern an:
%
lpc status all
lp: queuing is enabled printing is enabled 1 entry in spool area printer idle laser: queuing is enabled printing is enabled 1 entry in spool area waiting for laser to come up
Der Drucker kann die Annahme neuer Druckaufträge verweigern. Anschließend sollen Aufträge wieder akzeptiert werden:
#
lpc stop
lp: printing disabledlp
#
lpc start
lp: printing enabled daemon startedlp
Starten Sie den Drucker nach einem Fehler neu:
#
lpc restart
lp: no daemon to abort printing enabled daemon restartedlp
Schalten Sie die Warteschlange aus und deaktivieren Sie den Druck. Sie können den Benutzern gleichzeitig eine Nachricht hinterlassen:
#
lpc down
lp: printer and queuing disabled status message is now: Ersatzteile werden am Montag ankommenlp
Ersatzteile werden am Montag ankommen
Reaktivieren Sie den Drucker:
#
lpc up
lp: printing enabled daemon startedlp
Weitere Kommandos und Optionen finden Sie in lpc(8).
In Unternehmen und Schulen werden Drucker häufig von mehreren Benutzern genutzt. Es werden zusätzliche Funktionen angeboten, um die gemeinsame Nutzung von Druckern zu erleichtern.
Der Druckername wird in der ersten Zeile von
/etc/printcap
festgelegt. Weitere
Namen oder Aliase können nach dem
Druckernamen hinzugefügt werden. Aliase werden vom Namen
durch das Pipe-Zeichen |
getrennt:
lp|repairsprinter
|salesprinter
:\
Anstelle des Druckernamens können Aliase verwendet werden. Zum Beispiel können Mitarbeiter der Verkaufsabteilung wie folgt auf ihren Drucker drucken:
%
lpr -P
salesprinter
sales-report.txt
Mitarbeiter der Reparaturabteilung drucken auf dem Drucker mit:
%
lpr -P
repairsprinter
repairs-report.txt
Alle Dokumente werden auf diesem einen Drucker gedruckt. Wenn die Verkaufsabteilung größer wird und die Abteilung einen eigenen Drucker benötigt, kann der Alias entfernt und für einen neuen Drucker verwendet werden. Die Mitarbeiter in beiden Abteilungen benutzen zum Drucken weiterhin die gleichen Befehle, nur dass die Aufträge der Verkaufsabteilung jetzt zum neuen Drucker gesendet werden.
Bei einem viel benutzten Drucker kann es für die Anwender schwierig sein, ihre Dokumente in einem großen Papierstapel wiederzufinden. Um dieses Problem zu lösen, können Deckblätter verwendet werden. Dabei wird vor jedem Druckauftrag ein Deckblatt mit dem Benutzernamen und dem Dokumentnamen gedruckt. Deckblätter werden manchmal auch als Banner oder Trennseite bezeichnet.
Das Aktivieren der Deckblätter hängt davon ab, ob der Drucker direkt über ein USB, paralleles oder serielles Kabel, oder über ein Netzwerk mit dem Rechner verbunden ist.
Wenn der Drucker direkt verbunden ist, aktivieren Sie
die Deckblätter durch Entfernen der Zeile
:sh:\
(Supress
Header) in
/etc/printcap
. Diese Deckblätter
verwenden lediglich einen Zeilenvorschub für neue Zeilen.
Einige Drucker benötigen den Filter
/usr/share/examples/printing/hpif
um
den Treppeneffekt zu vermeiden. Der Filter konfiguriert
PCL-Drucker so, dass sowohl
Zeilenumbrüche als auch Zeilenvorschübe verwendet werden,
wenn ein Zeilenvorschub empfangen wird.
Für Netzwerkdrucker müssen Deckblätter auf dem Drucker
selbst konfiguriert werden, da Einträge für Deckblätter in
/etc/printcap
ignoriert werden. Die
Einstellungen sind über einen Webbrowser zugänglich und
stehen in der Regel auf der Hauptseite der
Konfigurations-Webseite zur Verfügung.
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an
<de-bsd-translators@de.FreeBSD.org>.