This file is indexed.

/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&uuml;r <CODE>lpd</CODE> liefern ein System, das Dateien in
Warteschlangen verwalten und sie drucken kann. Es k&uuml;mmert sich aber nicht
darum, ob der Drucker die Dateien &uuml;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&szlig; man einen Eintrag in 
<CODE>/etc/printcap</CODE> hinzuf&uuml;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&ouml;&szlig;e der Auftr&auml;ge
ist nicht begrenzt und am Anfang der Druckauftr&auml;ge wird kein
Deckblatt, z.B. mit dem Namen der Person, die den Druckauftrag
abgeschickt hat, ausgegeben. Der Drucker w&uuml;rde in diesem Beispiel
an <CODE>/dev/lp0</CODE> h&auml;ngen.</P>
<P>Jetzt w&auml;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 &uuml;bergibt, die ein DeskJet 500 
verstehen kann, wird dieser Drucker seltsame Sachen ausgeben.
Wenn man z.B. eine gew&ouml;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&szlig; Linux einen Zeilenumbruch
in einer Textdatei anders kodiert als DOS und Windows, deren Kodierung
die meisten Drucker erwarten. W&uuml;rde eine PostScript-Datei ausgegeben,
w&uuml;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&ouml;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&ouml;sen, k&ouml;nnte man ein Shellskript mit dem Namen
<CODE>filter</CODE> schreiben, das die Kodierung des Zeilenumbruches 
anpa&szlig;t. Damit der <CODE>lpd</CODE> dieses Skript aufruft, mu&szlig;
dem <CODE>printcap</CODE>-Eintrag des Druckers eine <CODE>if</CODE>-Zeile hinzugef&uuml;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&ouml;nnte sein:</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
#!perl
# Die obige Zeile mu&szlig; den kompletten Pfad zu perl 
# enthalten. Dieses Skript mu&szlig; ausf&uuml;hrbar sein: 
#    chmod 755 filter

while(&lt;STDIN>){chop $_; print "$_\r\n";};

# Eventuell m&ouml;chte man, da&szlig; am Ende des Druckauftrages
# ein Seitenvorschub ausgef&uuml;hrt wird. Dieses ist 
# insbesondere bei Tintenstrahl- und  Laserdruckern
# sinnvoll:

#print "\f";
</PRE>
</CODE></BLOCKQUOTE>
</P>
<P>W&uuml;rde man das System so konfigurieren, h&auml;tte man eine Warteschlange,
die wunderbar f&uuml;r UNIX-Textdateien funktionieren w&uuml;rde. Nat&uuml;rlich
gibt es vier Millionen bessere M&ouml;glichkeiten, diesen Filter zu schreiben,
aber wenige sind so anschaulich. Der Leser m&ouml;ge dieses effizienter 
gestalten.</P>
<P> 
Das einzige verbleibende Problem besteht darin, da&szlig; man heute meistens
keine Textdateien drucken m&ouml;chte. Vielmehr sollen meistens
PostScript- oder Grafikdateien ausgegeben werden. Auch dieses Problem
l&auml;&szlig;t sich mit einem Inputfilter l&ouml;sen. Dazu mu&szlig; 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&uuml;he machen und selber einen schreiben, solange man keine wirklich
ungew&ouml;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&uuml;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&auml;ufigen Nachfragen folgt hier eine Liste der
Zugriffsrechte der wichtigen Dateien, wie sie auf meinem System
gesetzt sind. Es gibt sicherlich bessere M&ouml;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&szlig; momentan als root aufgerufen werden, da nur root das
Recht hat, den Netzwerk-Port f&uuml;r lp zu belegen. Im Prinzip
k&ouml;nnte der Daemon nach der Initialisierung seine UID &auml;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>