Beschreibung: Prüfungskandidaten sollten in der Lage sein, einen Printerdämon zu installieren und einen Druckerfilter (z.B. apsfilter oder magicfilter) zu installieren und zu konfigurieren. Dieses Lernziel beinhaltet das Konfigurieren von lokalen und Netzwerkdruckern für ein Linux-System, inklusive PostScript-, Non-PostScript- und Samba-Druckern.
Die wichtigsten Dateien, Bezeichnungen und Anwendungen:
Ein Eintrag für einen Drucker beginnt immer mit dem oder den Namen des Druckers. Danach folgen verschiedene Angaben, die jeweils durch Doppelpunkte voneinander getrennt sind und meist die Form
lp|hplaser:\ :lp=/dev/lp0:\ :sd=/var/spool/lp:\ :mx#0:\ :lf=/var/spool/lp/hp-log:Der Drucker heißt entweder lp oder hplaser (der zweite Name dient als Beschreibung). Er ist an die Schnittstelle /dev/lp0 angeschlossen und sein Spoolverzeichnis ist /var/spool/lp. Es existiert keine Größenbeschränkung (mx#0) und Fehlermeldungen werden in die Datei /var/spool/lp/hp-log geschrieben.
Die Verwendung von Input-Filtern wird weiter unten beschrieben.
Um auch Netzwerkdrucker an anderen Maschinen ansprechen zu können, benötigen wir entsprechend Einträge wie der folgende:
lp1|remote printer on marvin:\ :sd=/var/spool/lp1:\ :rm=marvin.mydomain.net:\ :rp=lp:\ :sh:mx#0:Dieser Eintrag beschreibt einen Drucker, der auf unserem System mit dem Namen lp1 angesprochen wird. Er benutzt das lokale Spoolverzeichnis /var/spool/lp1. Anstatt einem Eintrag lp= haben wir jetzt den Eintrag rm=, der besagt, daß der Drucker auf einer remote machine also einem entfernten Rechner angeschlossen ist. Dieser Rechner ist in unserem Beispiel der Rechner marvin.mydomain.net. Der Druckername auf dem entfernten Rechner (rp - remote printer) ist lp. Es wird keine Trennseite ausgegeben und es existiert keine Größenbeschränkung.
Es ist problemlos möglich, daß ein physikalischer Drucker mehrere Printcap-Einträge besitzt. So können z.B. verschiedene Inputfilter für den gleichen Drucker verwendet werden, oder ein Drucker kann entweder farbig oder in Graustufen angesprochen werden, je nachdem, unter welchem Namen er angesprochen wurde. Der Name lp ist dabei der voreingestellte Drucker.
apsfilter benutzt verschiedene Programme anderer Hersteller um die verschiedenen Dateiformate zunächst in Postscript zu verwandeln. Wenn ein echter Postscript-Drucker vorliegt, so werden diese konvertierten Daten dann einfach an den Drucker weitergereicht, ansonsten werden sie an Ghostscript weitergeleitet, der sie dann in eine für den jeweiligen Drucker verständliche Sprache konvertiert.
Die Frage, ob ein Drucker von apsfilter unterstützt wird, ist also primär die Frage, ob er entweder ein Postscript-Drucker ist, oder von Ghostscript unterstützt wird.
Welche Filter (siehe letzten Abschnitt) apsfilter benutzt, kann über seine Konfigurationsdatei /etc/apsfilter/apsfilterrc eingestellt werden. Hier können auch alle möglichen anderen Einstellungen vorgenommen werden.
apsfilter bietet ein kleines Programm, mit dem die komplette Einrichtung eines Druckers, inklusive der printcap-Einträge, vorgenommen wird. Dieses Programm heißt apsfilterconfig.
In /var/lib/apsfilter werden alle Aktionen von apsfilterconfig zwischengespeichert, so daß sie auch bei erneuter Installation wieder zur Verfügung stehen.
Ein typischer Eintrag in /etc/printcap für einen Drucker, der mit apsfilter angesteuert wird wäre
lp|PS;r=600x600;q=high;c=gray;p=a4;m=auto:\ :lp=/dev/lp0:\ :if=/etc/apsfilter/basedir/bin/apsfilter:\ :sd=/var/spool/lpd/lp:\ :lf=/var/spool/lpd/lp/log:\ :af=/var/spool/lpd/lp/acct:\ :mx#0:\ :sh:Wichtig ist hier die Angabe des Input-Filters (if=/etc/apsfilter/basedir/bin/apsfilter). Jede Datei, die an diesen Drucker geschickt wird, wird zuerst durch das angegebene Programm (hier /etc/apsfilter/basedir/bin/apsfilter) geschickt. Erst dieses Programm schickt den Druckauftrag an den eigentlichen Drucker.
magicfilter ist primär dazu gedacht, als Eingabefilter (if=) für den LPD-Druckspooler zu arbeiten. Die Optionen, die Magicfilter versteht, sind genau die, die lpd an den Inputfilter weiterreicht.
Um magicfilter zusammen mit dem LPD-Spooler zu nutzen, muß im entsprechenden printcap-Eintrag der input-filter (if=) Eintrag auf das Programm magicfilter gesetzt sein. Da aber ein printcap-Eintrag keine Optionen erlaubt, wird hier einfach ein Script als Eingabefilter gewählt, das ausführbar ist und als erste Zeile den Eintrag
#!/usr/sbin/magicfilteraufweist.
Dieses Script liegt standardmäßig im Verzeichnis /etc/magicfilter und trägt den Namen des zu verwendenden Druckers. Im Lieferumfang von magicfilter sind bereits etwa 80 verschiedene solcher Scripte für die gängigsten Drucker enthalten. Der Inhalt dieser Scripte ist - neben der bereits erwähnten ersten Zeile - immer nach folgendem Schema aufgebaut:
Ein typischer Eintrag dieser Datei wäre z.B.
# GIF files 0 GIF87a pipe /usr/bin/giftopnm 2>/dev/null 0 GIF89a pipe /usr/bin/giftopnm 2>/dev/nullWenn also an der Position 0 (Anfang der Datei) entweder die Zeichenkette GIF87a oder GIF89a zu finden ist, dann handelt es sich bei der zu druckenden Datei um ein GIF-Bild. Die Aktion, die durchgeführt werden soll ist pipe /usr/bin/giftopnm 2>/dev/null, der Inhalt der GIF-Datei wird also an das Programm /usr/bin/giftopnm weitergeleitet, das die GIF-Datei in ein PNM-Bild verwandelt. Das kann dann entsprechend von einem Postscript-Drucker gedruckt werden.
Damit auch nicht-Postscript Drucker mit magicfilter benutzt werden können, gibt das Programm die Ausgaben anschließend an Ghostscript weiter, das dann ein für den jeweiligen Drucker verständliches Format erzeugt.
Damit diese Arbeit nicht manuell ausgeführt werden muß, wird magicfilter zusammen mit einem Installationsscript ausgeliefert, das den Namen magicfilterconfig trägt und die notwendigen Einstellungen vornimmt, nachdem der User ein paar Fragen zum angeschlossenen Drucker beantwortet hat.
Ein typischer printcap Eintrag für magicfilter lautet beispielsweise:
lp|hplj4l|HP Laserjet 4L:\ :lp=/dev/lp1:sd=/var/spool/lpd/hplj4l:\ :sh:pw#80:pl#72:px#1440:mx#0:\ :if=/etc/magicfilter/ljet4l-filter:\ :af=/var/log/lp-acct:lf=/var/log/lp-errs:Die Angaben pw, pl und px beziehen sich auf die Seitenbreite in Zeichen, die Seitenlänge in Zeilen und die Seitenbreite in Pixeln. Ansonsten enthält der Eintrag nichts neues, der Inputfilter ist jetzt /etc/magicfilter/ljet4l-filter.
lp2|remote-smbprinter:\ :lp=/dev/null:sh:\ :sd=/var/spool/lp2:\ :if=/usr/local/sbin/smbprint:Im Script /usr/local/sbin/smbprint müssen jetzt noch entsprechend die Einträge für
Zugriffskontrolle, wer den Drucker verwenden darf, kann über die Datei /etc/hosts.lpd erreicht werden.