/usr/share/doc/HOWTO/de-html/DE-Drucker-HOWTO-7.html is in doc-linux-de 2003.10-5.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
<META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.65">
<TITLE>Linux Drucker HOWTO: Grundeinstellungen</TITLE>
<LINK HREF="DE-Drucker-HOWTO-8.html" REL=next>
<LINK HREF="DE-Drucker-HOWTO-6.html" REL=previous>
<LINK HREF="DE-Drucker-HOWTO.html#toc7" REL=contents>
</HEAD>
<BODY>
<A HREF="DE-Drucker-HOWTO-8.html"><IMG SRC="next.png" ALT="Weiter"></A>
<A HREF="DE-Drucker-HOWTO-6.html"><IMG SRC="prev.png" ALT="Zurück"></A>
<A HREF="DE-Drucker-HOWTO.html#toc7"><IMG SRC="toc.png" ALT="Inhalt"></A>
<HR>
<H2><A NAME="s7">7.</A> <A HREF="DE-Drucker-HOWTO.html#toc7">Grundeinstellungen</A></H2>
<H2><A NAME="ss7.1">7.1</A> <A HREF="DE-Drucker-HOWTO.html#toc7.1">Traditionelle lpd-Konfiguration </A>
<!--Drucker!/etc/printcap--> <!--printcap--> <!--/etc/printcap--></H2>
<P>Die Minimaleinstellungen für <CODE>lpd</CODE> liefern ein System, das Dateien in
Warteschlangen verwalten und sie drucken kann. Es kümmert sich aber nicht
darum, ob der Drucker die Dateien überhaupt versteht und wird
vermutlich keine ansehnlichen Ausgaben produzieren. Trotzdem ist diese
einfache Konfiguration der erste Schritt, um das System zu verstehen.</P>
<P>Um eine neue Warteschlange zu erzeugen, muß man einen Eintrag in
<CODE>/etc/printcap</CODE> hinzufügen und ein neues Spool-Verzeichnis unter
<CODE>/var/spool/lpd</CODE> erzeugen.</P>
<P>Ein Eintrag in <CODE>/etc/printcap</CODE> sieht etwa so aus:
<BLOCKQUOTE><CODE>
<PRE>
# lokaler DeskJet 500
lp|dj|deskjet:\
:sd=/var/spool/lpd/dj:\
:mx#0:\
:lp=/dev/lp0:\
:sh:
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Dies definiert eine Warteschlange mit den Namen
<CODE>lp</CODE>, <CODE>dj</CODE> und <CODE>deskjet</CODE>, wobei <CODE>/var/spool/lpd/dj</CODE>
als Spool-Verzeichnis benutzt wird. Die maximale Größe der Aufträge
ist nicht begrenzt und am Anfang der Druckaufträge wird kein
Deckblatt, z.B. mit dem Namen der Person, die den Druckauftrag
abgeschickt hat, ausgegeben. Der Drucker würde in diesem Beispiel
an <CODE>/dev/lp0</CODE> hängen.</P>
<P>Jetzt wäre der richtige Augenblick, um die <EM>printcap Manual Page</EM>
zu lesen.</P>
<P>
<!--
Drucker!Treffeneffekt
-->
Das obige Beispiel sieht sehr einfach aus, hat aber ein Problem. Wenn
man nicht Dateien an das Drucksystem übergibt, die ein DeskJet 500
verstehen kann, wird dieser Drucker seltsame Sachen ausgeben.
Wenn man z.B. eine gewöhnlichen UNIX-Textdatei an den Deskjet schickt,
wird man folgende Ausgabe erhalten:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
Zeile eins
Zeile zwei
Zeile drei
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Verursacht wird dieser Fehler dadurch, daß Linux einen Zeilenumbruch
in einer Textdatei anders kodiert als DOS und Windows, deren Kodierung
die meisten Drucker erwarten. Würde eine PostScript-Datei ausgegeben,
würde der Drucker einfach die PostScript-Befehle ausdrucken, statt
diese zu interpretieren.</P>
<P>
<!--
printcap!Filter
-->
<!--
Drucker!Filter
-->
<!--
printcap!if-Option
-->
Offensichtlich wird mehr benötigt, und genau das ist die Aufgabe
von Filtern. Dem aufmerksamen Leser werden bei der <EM>printcap
Manual Page</EM> die Spool-Attribute <CODE>if</CODE> und <CODE>of</CODE> aufgefallen
sein. <CODE>if</CODE>, der Inputfilter, ist genau das, was wir jetzt
brauchen.</P>
<P>Um das Problem mit dem Zeilenumbruch beim Drucken von Textdateien
zu lösen, könnte man ein Shellskript mit dem Namen
<CODE>filter</CODE> schreiben, das die Kodierung des Zeilenumbruches
anpaßt. Damit der <CODE>lpd</CODE> dieses Skript aufruft, muß
dem <CODE>printcap</CODE>-Eintrag des Druckers eine <CODE>if</CODE>-Zeile hinzugefügt
werden:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
lp|dj|deskjet:\
:sd=/var/spool/lpd/dj:\
:mx#0:\
:lp=/dev/lp0:\
:if=/var/spool/lpd/dj/filter:\
:sh:
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Ein einfaches Filterskript könnte sein:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
#!perl
# Die obige Zeile muß den kompletten Pfad zu perl
# enthalten. Dieses Skript muß ausführbar sein:
# chmod 755 filter
while(<STDIN>){chop $_; print "$_\r\n";};
# Eventuell möchte man, daß am Ende des Druckauftrages
# ein Seitenvorschub ausgeführt wird. Dieses ist
# insbesondere bei Tintenstrahl- und Laserdruckern
# sinnvoll:
#print "\f";
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>Würde man das System so konfigurieren, hätte man eine Warteschlange,
die wunderbar für UNIX-Textdateien funktionieren würde. Natürlich
gibt es vier Millionen bessere Möglichkeiten, diesen Filter zu schreiben,
aber wenige sind so anschaulich. Der Leser möge dieses effizienter
gestalten.</P>
<P>
Das einzige verbleibende Problem besteht darin, daß man heute meistens
keine Textdateien drucken möchte. Vielmehr sollen meistens
PostScript- oder Grafikdateien ausgegeben werden. Auch dieses Problem
läßt sich mit einem Inputfilter lösen. Dazu muß einfach der obige
Zeilenumbruch-Filter erweitert werden. Wenn man einen Filter schreibt,
der beliebige Dateitypen akzeptiert und diese in DeskJet-geeignete
Ausgaben umwandelt, hat man wirklich einen cleveren Druck-Spooler.</P>
<P>So ein Filter wird <EM>Magic</EM>-Filter genannt. Man sollte sich nicht
die Mühe machen und selber einen schreiben, solange man keine wirklich
ungewöhnlichen Sachen drucken will. Es gibt bereits einige wirklich gute
Filter. Der APS-Filter ist einer der besten Filter. Viele
Linux-Distributionen werden auch mit Setup Tools für den Drucker
ausgeliefert, die die Konfiguration von Druckern und passenden
Filtern deutlich erleichtern.</P>
<H2><A NAME="ss7.2">7.2</A> <A HREF="DE-Drucker-HOWTO.html#toc7.2">Dateizugriffsrechte </A>
<!--Drucker!Dateizugriffsrechte--></H2>
<P>Auf Grund von häufigen Nachfragen folgt hier eine Liste der
Zugriffsrechte der wichtigen Dateien, wie sie auf meinem System
gesetzt sind. Es gibt sicherlich bessere Möglichkeiten,
aber so wurde das System installiert und es funktioniert.</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
-r-sr-sr-x 1 root lp /usr/bin/lpr*
-r-sr-sr-x 1 root lp /usr/bin/lprm*
-rwxr--r-- 1 root root /usr/sbin/lpd*
-r-xr-sr-x 1 root lp /usr/sbin/lpc*
drwxrwxr-x 4 root lp /var/spool/lpd/
drwxr-xr-x 2 root lp /var/spool/lpd/lp/
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P><CODE>lpd</CODE> muß momentan als root aufgerufen werden, da nur root das
Recht hat, den Netzwerk-Port für lp zu belegen. Im Prinzip
könnte der Daemon nach der Initialisierung seine UID ändern, wie
das eigentlich jeder gut programmierte Daemon machen sollte.
Der <CODE>lpd</CODE> tut dieses zur Zeit aber nicht.</P>
<HR>
<A HREF="DE-Drucker-HOWTO-8.html"><IMG SRC="next.png" ALT="Weiter"></A>
<A HREF="DE-Drucker-HOWTO-6.html"><IMG SRC="prev.png" ALT="Zurück"></A>
<A HREF="DE-Drucker-HOWTO.html#toc7"><IMG SRC="toc.png" ALT="Inhalt"></A>
</BODY>
</HTML>
|