Page MenuHomeFreeBSD

D6540.id.diff
No OneTemporary

D6540.id.diff

This file is larger than 256 KB, so syntax highlighting was skipped.
Index: head/de_DE.ISO8859-1/books/handbook/printing/chapter.xml
===================================================================
--- head/de_DE.ISO8859-1/books/handbook/printing/chapter.xml
+++ head/de_DE.ISO8859-1/books/handbook/printing/chapter.xml
@@ -4,5448 +4,1189 @@
The FreeBSD German Documentation Project
$FreeBSD$
$FreeBSDde: de-docproj/books/handbook/printing/chapter.xml,v 1.56 2012/02/16 20:07:18 bcr Exp $
- basiert auf: r43126
+ basiert auf: r44529
-->
-<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="printing">
- <info><title>Drucken</title>
- <authorgroup>
- <author><personname><firstname>Sean</firstname><surname>Kelly</surname></personname><contrib>Beigetragen von </contrib></author>
- <!-- 30 Sept 1995 -->
- </authorgroup>
+<chapter xmlns="http://docbook.org/ns/docbook"
+ xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
+ xml:id="printing">
+ <info>
+ <title>Drucken</title>
+
<authorgroup>
- <author><personname><firstname>Jim</firstname><surname>Mock</surname></personname><contrib>Restrukturiert und aktualisiert durch </contrib></author>
+ <author>
+ <personname>
+ <firstname>Warren</firstname>
+ <surname>Block</surname>
+ </personname>
+ <contrib>Beigetragen von </contrib>
+ </author>
</authorgroup>
<authorgroup>
- <author><personname><firstname>Stefan</firstname><surname>Bethke</surname></personname><contrib>Übersetzt von </contrib></author>
+ <author>
+ <personname>
+ <firstname>Björn</firstname>
+ <surname>Heidotting</surname>
+ </personname>
+ <contrib>Übersetzt von </contrib>
+ </author>
</authorgroup>
</info>
-
+ <para>Trotz vieler Versuche es zu vermeiden, ist der Druck von
+ Informationen auf Papier immer noch eine wichtige Funktion.
+ Drucken hat zwei grundlegende Komponenten. Die Daten müssen an
+ den Drucker gesendet werden, und zwar in einer Form, die der
+ Drucker verstehen kann.</para>
+
+ <sect1 xml:id="printing-quick-start">
+ <title>Schnellstart</title>
+
+ <para>Die grundlegende Druckfunktion kann schnell eingerichtet
+ werden. Der Drucker muss lediglich fähig sein, normalen
+ <acronym>ASCII</acronym>-Text zu drucken. Informationen zum
+ Druck von anderen Dateien finden Sie in <xref
+ linkend="printing-lpd-filters"/>.</para>
+
+ <procedure>
+ <step>
+ <para>Erstellen Sie ein Verzeichnis zur Speicherung der
+ Druckaufträge:</para>
+
+ <screen>&prompt.root; <userinput>mkdir -p /var/spool/lpd/lp</userinput>
+&prompt.root; <userinput>chown daemon:daemon /var/spool/lpd/lp</userinput>
+&prompt.root; <userinput>chmod 770 /var/spool/lpd/lp</userinput></screen>
+ </step>
+
+ <step>
+ <para>Erstellen Sie als <systemitem
+ class="username">root</systemitem> die Datei
+ <filename>/etc/printcap</filename> mit folgendem
+ Inhalt:</para>
+
+ <programlisting>lp:\
+ <replaceable>:lp=/dev/unlpt0:\</replaceable> <co xml:id="printing-qs-co-printcap"/>
+ :sh:\
+ :mx#0:\
+ :sd=/var/spool/lpd/lp:\
+ :lf=/var/log/lpd-errs:</programlisting>
+
+ <calloutlist>
+ <callout arearefs="printing-qs-co-printcap">
+ <para>Diese Zeile ist für einen Drucker, der an einem
+ <acronym>USB</acronym>-Port angeschlossen ist.</para>
+
+ <para>Für einen Drucker, der am parallelen oder
+ <quote>Drucker</quote>-Port angeschlossen ist, verwenden
+ Sie:</para>
+
+ <programlisting>:lp=/dev/lpt0:\</programlisting>
+
+ <para>Für einen Netzwerkdrucker verwenden Sie:</para>
+
+ <programlisting>:lp=:rm=<replaceable>network-printer-name</replaceable>:rp=raw:\</programlisting>
+
+ <para>Ersetzen Sie
+ <replaceable>network-printer-name</replaceable> durch
+ den <acronym>DNS</acronym>-Namen des
+ Netzwerkdruckers.</para>
+ </callout>
+ </calloutlist>
+ </step>
+
+ <step>
+ <para>Aktivieren Sie <command>lpd</command> beim Systemstart,
+ indem Sie folgende Zeile in
+ <filename>/etc/rc.conf</filename> hinzufügen:</para>
+
+ <programlisting>lpd_enable="YES"</programlisting>
- <sect1 xml:id="printing-synopsis">
- <title>Übersicht</title>
+ <para>Starten Sie den Dienst:</para>
- <indexterm>
- <primary>LPD spooling system</primary>
- </indexterm>
-
- <indexterm>
- <primary>drucken</primary>
- </indexterm>
-
- <para>Mit &os; können Sie viele unterschiedliche Drucker
- benutzen, von den ältesten Nadeldruckern bis zu den
- neuesten Laserdruckern, und allen möglichen Geräten
- dazwischen. Auf diese Weise können Sie hochwertige
- Ausdrucke mit Ihren Programmen erzeugen.</para>
-
- <para>Sie können &os; auch so konfigurieren, dass es
- Druckaufträge von anderen Computern über Ihr lokales
- Netzwerk entgegennimmt, seien es &windows;-, &macos;- oder andere
- &os;-Computer. &os; stellt sicher, dass die Druckaufträge in der
- richtigen Reihenfolge bearbeitet werden und kann optional ein Deckblatt
- mit dem Namen des Auftraggebers eines Druckauftrags aufgeben.
- &os; kann auch Statistiken über die Computer und Benutzer
- führen, die Ausdrucke in Auftrag geben.</para>
-
- <para>In diesem Kapitel erfahren Sie, wie Sie:</para>
-
- <itemizedlist>
- <listitem>
- <para>&os;-Druckerwarteschlangen einrichten.</para>
- </listitem>
-
- <listitem>
- <para>Druckfilter installieren, die Druckaufträge je nach
- Bedarf besonders behandeln und z.B. Dokumente automatisch
- in eine Form umwandeln, die Ihr Drucker versteht.</para>
- </listitem>
-
- <listitem>
- <para>Druckaufträge mit einem Deckblatt versehen
- können.</para>
- </listitem>
-
- <listitem>
- <para>Mit einem Drucker drucken können, der an einen
- anderen Computer angeschlossen ist.</para>
- </listitem>
-
- <listitem>
- <para>Mit einem Drucker drucken können, der direkt an das
- Netzwerk angeschlossen ist.</para>
- </listitem>
-
- <listitem>
- <para>die Größe von Druckaufträgen
- beschränken können, oder bestimmte Benutzer von
- den Benutzung des Drucksystems ausschließen
- können.</para>
- </listitem>
-
- <listitem>
- <para>Statistiken aufzeichnen und die Benutzung des
- Drucksystems nach Benutzern und Computern aufschlüsseln
- können.</para>
- </listitem>
-
- <listitem>
- <para>Probleme beim Drucken diagnostizieren und beheben
- können.</para>
- </listitem>
- </itemizedlist>
-
- <para>Bevor Sie dieses Kapitel lesen:</para>
-
- <itemizedlist>
- <listitem>
- <para>Machen Sie sich mit der Konfiguration und Installation
- eines neuen Kernels vertraut (<xref linkend="kernelconfig"/>).</para>
- </listitem>
- </itemizedlist>
- </sect1>
+ <screen>&prompt.root; <userinput>service lpd start</userinput>
+Starting lpd.</screen>
- <sect1 xml:id="printing-intro-spooler">
- <title>Einführung</title>
+ <para>Drucken Sie eine Testseite:</para>
- <para>Um einen Drucker mit &os; zu benutzen, können Sie
- das Berkeley Line Printer Spooling System, das auch als
- <application>LPD</application>-Drucksystem oder nur als
- <application>LPD</application> bekannt ist, verwenden.
- Dieses System zur Verwaltung von Druckaufträgen ist das
- Standardsystem in &os;. Dieses Kapitel führt Sie in
- <application>LPD</application> und dessen Konfiguration ein.</para>
-
- <para>Wenn Sie bereits mit <application>LPD</application> oder
- einem anderen Drucksystem vertraut sind, können Sie direkt
- im Abschnitt <link linkend="printing-intro-setup">Einfache
- Drucker-Konfiguration</link> weiterlesen.</para>
-
- <para><application>LPD</application> steuert alle Aspekte rund um
- die Drucker, die an den Computer angeschlossen sind. Es ist
- verantwortlich für:</para>
-
- <itemizedlist>
- <listitem>
- <para>Die Zugriffskontrolle für direkt und über das
- Netzwerk angeschlossene Drucker.</para>
- </listitem>
-
- <listitem>
- <para>Die Entgegennahme von Dateien, die gedruckt werden
- sollen; eine so an das Drucksystem übergebene Datei wird als
- <emphasis>Druckauftrag</emphasis><indexterm><primary>Druckaufträge</primary></indexterm>
- bezeichnet.</para>
- </listitem>
-
- <listitem>
- <para>Den gleichzeitigen Zugriff von mehreren Benutzern auf
- einen Drucker. Alle Druckaufträge werden in einer
- <emphasis>Druckerwarteschlange</emphasis> gesammelt, und
- nacheinander abgearbeitet.</para>
- </listitem>
-
- <listitem>
- <para>Den Druck von <emphasis>Deckblättern</emphasis> (auch als
- <emphasis>Banner-</emphasis> oder <emphasis>Burst-</emphasis>Seiten
- bezeichnet), damit Benutzer ihre Druckaufträge schnell innerhalb
- eines Stapels von ausgedruckten Dokumenten finden können.</para>
- </listitem>
-
- <listitem>
- <para>Das Einstellen der korrekten Kommunikations-Parameter
- für Drucker, die seriell angeschlossen sind.</para>
- </listitem>
-
- <listitem>
- <para>Das Senden von Druckaufträgen an ein
- <application>LPD</application>-System auf einem anderen
- Computer.</para>
- </listitem>
-
- <listitem>
- <para>Das Ausführen von speziellen Filtern, um
- Druckaufträge in die unterschiedlichen
- Seitenbeschreibungssprachen umzusetzen oder an die
- Fähigkeiten eines Druckers anzupassen.</para>
- </listitem>
-
- <listitem>
- <para>Das Erfassen von Verrechnungsdaten für
- Druckaufträge.</para>
- </listitem>
- </itemizedlist>
-
- <para>Sie können <application>LPD</application> alle diese
- Funktionen, oder auch nur einen Teil davon, ausführen
- lassen, indem Sie die Konfigurationsdatei
- (<filename>/etc/printcap</filename>) anpassen, und indem Sie
- spezielle Filterprogramme bereitstellen.</para>
-
- <sect2 xml:id="printing-intro-why">
- <title>Vorteile des Drucksystems</title>
-
- <para>Wenn Sie der einzige Benutzer sind, der mit Ihrem Computer
- arbeitet, fragen Sie sich vielleicht, warum Sie die
- Konfigurationsarbeit für das Drucksystem auf sich nehmen
- sollten, wenn Sie Deckblätter, Abrechnungsdaten oder
- Zugriffskontrolle nicht benötigen. Obwohl Sie direkt auf den
- Drucker zugreifen können, bietet <application>LPD</application>
- eine Reihe von Vorteilen:
- </para>
-
- <itemizedlist>
- <listitem>
- <para><application>LPD</application> druckt im Hintergrund;
- Sie müssen nicht erst darauf warten, dass Ihr
- Druckauftrag an den Drucker übermittelt worden
- ist.</para>
- </listitem>
+ <screen>&prompt.root; <userinput>printf "1. Der Drucker kann drucken.\n2. Dies ist die zweite Zeile.\n" | lpr</userinput></screen>
- <listitem>
- <para><application>LPD</application> kann Druckaufträge
- mit Kopf- oder Fußzeilen versehen, oder ein spezielles
- Dateiformat, wie DVI von
- &tex;<indexterm><primary>&tex;</primary></indexterm>,
- automatisch in ein für den Drucker verständliches Format
- umwandeln; Sie müssen diese Schritte nicht manuell
- ausführen.</para>
- </listitem>
+ <tip>
+ <para>Wenn die beiden Zeilen nicht am linken Rand starten
+ und Sie einen <quote>Treppeneffekt</quote>
+ beobachten, lesen Sie <xref
+ linkend="printing-lpd-filters-stairstep"/>.</para>
+ </tip>
- <listitem>
- <para>Viele freie und kommerzielle Programme, mit denen Sie
- drucken können, erwarten, mithilfe des
- <application>LPD</application>-Drucksystems zu drucken.
- Wenn Sie das Drucksystem konfiguriert haben, können
- Sie einfacher mit neuer oder auch vorhandener Software
- drucken.</para>
- </listitem>
- </itemizedlist>
- </sect2>
+ <para>Mit <command>lpr</command> können nun Textdateien
+ gedruckt werden. Geben Sie den Dateinamen auf der
+ Kommandozeile an oder lassen Sie <command>lpr</command>
+ von einer Pipe lesen.</para>
+
+ <screen>&prompt.user; <userinput>lpr textfile.txt</userinput>
+&prompt.user; <userinput>ls -lh | lpr</userinput></screen>
+ </step>
+ </procedure>
</sect1>
- <sect1 xml:id="printing-intro-setup">
- <title>Grund-Konfiguration</title>
+ <sect1 xml:id="printing-connections">
+ <title>Druckerverbindungen</title>
- <para>Um einen Drucker mit dem
- <application>LPD</application>-Drucksystem benutzen zu
- können, müssen Sie sowohl Ihren Drucker und die
- Drucker-Schnittstelle als auch das
- <application>LPD</application>-Drucksystem konfigurieren.
- Dieser Abschnitt beschreibt zwei Konfigurationen:</para>
-
- <itemizedlist>
- <listitem>
- <para>Abschnitt <link linkend="printing-simple">Einfache
- Drucker-Konfiguration</link> beschreibt, wie Sie einen
- Drucker an Ihren Computer anschließen und
- <application>LPD</application> so konfigurieren, dass
- Sie Textdateien zum Drucker senden können.</para>
- </listitem>
-
- <listitem>
- <para>Abschnitt <link linkend="printing-advanced">Erweiterte
- Drucker-Konfiguration</link> beschreibt, wie Sie mit
- speziellen Dateiformaten umgehen können, wie Sie
- Deckblätter drucken können, wie Sie den Zugriff auf
- Drucker einschränken können, und wie Sie
- Verrechnungsdaten aufzeichnen können.</para>
- </listitem>
- </itemizedlist>
-
- <sect2 xml:id="printing-simple">
- <title>Einfache Drucker-Konfiguration</title>
-
- <para>Dieser Abschnitt beschreibt, wie Sie die
- <application>LPD</application>-Software konfigurieren, um
- Ihren Drucker zu benutzen. Diese Grundlagen werden
- erklärt:</para>
+ <para>Es gibt eine Vielzahl von Möglichkeiten, einen Drucker mit
+ einem Rechner zu verbinden. Kleine Desktop-Drucker werden in
+ der Regel mit dem <acronym>USB</acronym>-Anschluss verbunden,
+ ältere Modelle nutzen oft die parallele Schnittstelle. Einige
+ Drucker sind direkt mit einem Netzwerk verbunden, damit sie
+ leichter von mehreren Rechnern benutzt werden können. Nur noch
+ wenige Drucker verwenden einen seriellen Anschluss.</para>
- <itemizedlist>
- <listitem>
- <para>Abschnitt <link linkend="printing-hardware">Hardware-Konfiguration</link>
- erläutert, wie Sie Ihren Drucker an Ihren Computer
- anschließen können.</para>
- </listitem>
+ <para>&os; unterstützt die folgenden Arten von Druckern:</para>
+
+ <variablelist>
+ <varlistentry xml:id="printing-connections-usb">
+ <term><acronym>USB</acronym></term>
<listitem>
- <para>Abschnitt <link linkend="printing-software">Software-Konfiguration</link>
- erklärt, wie Sie die
- <application>LPD</application>-Konfigurationsdatei
- (<filename>/etc/printcap</filename>) anpassen.</para>
+ <para><acronym>USB</acronym>-Drucker können mit einem freien
+ <acronym>USB</acronym>-Anschluss des Rechners verbunden
+ werden.</para>
+
+ <para>Wenn &os; einen <acronym>USB</acronym>-Drucker
+ erkennt, werden zwei Gerätenamen erstellt:
+ <filename>/dev/ulpt0</filename> und
+ <filename>/dev/unlpt0</filename>. Beide Geräte leiten die
+ Daten an den Drucker weiter. Nach jedem Druckauftrag wird
+ der <acronym>USB</acronym>-Anschluss von
+ <filename>ultp0</filename> zurückgesetzt. Das
+ Zurücksetzen kann bei einigen Druckern Probleme
+ verursachen, daher wird in der Regel stattdessen
+ <filename>unlpt0</filename> verwendet, das den
+ Anschluss nicht zurücksetzt.</para>
</listitem>
- </itemizedlist>
-
- <para>Wenn Sie einen Drucker einrichten möchten, der
- über das Netzwerk angeschlossen ist (anstatt über
- die serielle oder parallele Schnittstelle), lesen Sie bitte
- Abschnitt <link linkend="printing-advanced-network-net-if">Drucker mit
- direkter TCP-Schnittstelle</link>.</para>
-
- <para>Obwohl dieser Abschnitt <quote>Grund-Konfiguration</quote>
- heißt, ist die Konfiguration relativ komplex. Es ist
- vergleichsweise schwierig, einen Drucker mit Ihrem Computer
- und dem <application>LPD</application>-Drucksystem zu
- verbinden. Die weiteren Optionen, wie Kopfzeilen oder
- Deckblätter, sind einfach zu konfigurieren, sobald die
- Grund-Konfiguration erfolgreich abgeschlossen ist.</para>
-
- <sect3 xml:id="printing-hardware">
- <title>Hardware-Konfiguration</title>
-
- <para>Dieser Abschnitt beschreibt, über welche
- Schnittstellen Sie einen Drucker mit Ihrem Computer
- verbinden können. Er behandelt sowohl die
- Schnittstellen und Kabel, als auch die Kerneloptionen, die
- Sie benötigen, um &os; mit Ihrem Drucker
- kommunizieren zu lassen.</para>
-
- <para>Wenn Sie Ihren Drucker bereits erfolgreich mit einem
- anderen Betriebssystem auf Ihrem PC eingesetzt haben,
- können Sie wahrscheinlich mit dem Abschnitt <link linkend="printing-software">Software-Konfiguration</link>
- fortfahren.</para>
-
- <sect4 xml:id="printing-ports">
- <title>Schnittstellen und Kabel</title>
-
- <para>Praktisch alle Drucker unterstützen mindestens
- eine dieser Schnittstellen:</para>
-
- <itemizedlist>
- <listitem>
- <para><emphasis>Seriell</emphasis><indexterm><primary>Drucker</primary><secondary>Serielle</secondary></indexterm>
- angeschlossene Drucker werden über eine serielle
- Schnittstelle (auch RS-232 oder COM-Schnittstelle
- genannt) mit Ihrem Computer verbunden. Diese
- Schnittstelle wird von vielen unterschiedlichen
- Systemen verwendet. Serielle Kabel sind leicht
- erhältlich und können auch einfach selbst hergestellt
- werden. Einige Drucker erfordern möglicherweise ein
- spezielles Kabel oder besondere
- Kommunikationseinstellungen. Die meisten seriellen
- Schnittstellen von PCs besitzen eine maximale
- Datenübertragungsrate von 115200&nbsp;bps; zum
- Ausdruck großer Grafiken sind serielle Drucker daher
- ungeeignet.</para>
- </listitem>
-
- <listitem>
- <para><emphasis>Parallel</emphasis><indexterm><primary>Drucker</primary><secondary>Parallel</secondary></indexterm>
- angeschlossene Drucker werden über eine parallele
- Schnittstelle mit Ihrem Computer verbunden. Diese
- Schnittstelle wird hauptsächlich von PCs und
- Workstations benutzt. Die Schnittstelle bietet eine
- höhere Datenübertragungsrate als serielle
- Schnittstellen. Kabel sind leicht erhältlich, sind
- aber vergleichsweise schwer selbst herzustellen.
- Üblicherweise brauchen keine Kommunikationsparameter
- festgelegt zu werden; dies macht die Einrichtung sehr
- einfach.</para>
-
- <para>Die parallele Schnittstelle wird auch als
- <quote>Centronics</quote><indexterm><primary>Centronics</primary><see>Parallelport-Drucker</see></indexterm>-Schnittstelle
- bezeichnet, nach dem Namen des Steckverbinders, der
- hier häufig zum Einsatz kommt.</para>
- </listitem>
-
- <listitem>
- <para>USB<indexterm><primary>Drucker</primary><secondary>USB</secondary></indexterm>-Schnittstelle
- (Universal Serial Bus) bieten noch höhere
- Geschwindigkeiten als parallele Schnittstellen oder
- serielle RS-232-Schnittstellen. USB-Kabel sind einfach
- und billig. Zum Drucken ist die USB-Schnittstelle
- besser geeignet als serielle oder parallele
- Schnittstellen, auf vielen &unix; Systemen werden
- USB-Schnittstellen jedoch nur unzureichend
- unterstützt. Um Probleme zu vermeiden, sollten Sie
- sich einen Drucker anschaffen, der sowohl eine
- USB-Schnittstelle als auch eine parallele
- Schnittstelle besitzt (viele Drucker besitzen heute
- beide Schnittstellen).</para>
- </listitem>
- </itemizedlist>
-
- <para>Im Allgemeinen versenden parallele Schnittstellen Daten nur in
- eine Richtung (vom Computer zum Drucker), serielle Schnittstellen
- und USB-Schnittstellen versenden Daten in beide Richtungen.
- Moderne parallele Schnittstellen (EPP and ECP) übertragen
- Daten bi-direktional nach dem Standard IEEE&nbsp;1284.</para>
-
- <indexterm>
- <primary>PostScript</primary>
- </indexterm>
-
- <para>Ein Drucker kann auf zwei Arten bi-direktional
- angesprochen werden. Die erste Methode benutzt einen
- Druckertreiber, der die herstellerspezifische Sprache
- des Druckers beherrscht. Diese Methode wird oft mit
- Tintenstrahl-Druckern eingesetzt und dazu benutzt,
- den Füllstand der Tintenpatronen und andere
- Status-Informationen auszugeben. Die zweite Methode
- wird benutzt, wenn der Drucker &postscript; beherrscht.</para>
-
- <para>Da ein &postscript;-Druckauftrag ein komplettes Programm
- ist, kann es auch Daten an den Computer zurückliefern, ohne
- überhaupt eine Seite Papier zu bedrucken. Auf diesem Wege
- werden auch Probleme wie z.B. ein Papierstau vom Drucker an den
- Computer übermittelt. Darüberhinaus ist dies
- die effektivste Methode, um die tatsächlich gedruckte
- Anzahl an Seiten vom Drucker abzufragen: ein &postscript;-Programm
- ermittelt jeweils vor und direkt nach einem Druckauftrag den
- Seitenzähler des Druckers, und vergleicht die beiden
- Zählerwerte.</para>
- </sect4>
-
- <sect4 xml:id="printing-parallel">
- <title>Parallele Schnittstellen</title>
-
- <para>Um einen Drucker mit paralleler Schnittstelle an Ihren
- Computer anzuschließen, verbinden Sie den Drucker
- mit einer parallelen Schnittstelle Ihres Computers. Die
- Dokumentation zu Ihrem Drucker oder Computer sollte Ihnen
- hier weiterhelfen.</para>
-
- <para>Notieren Sie sich, mit welcher parallelen Schnittstelle des
- Computers Sie den Drucker verbunden haben. Die meisten Computer
- haben lediglich eine parallele Schnittstelle.
- Der &os;-Gerätename der ersten Schnittstelle lautet <filename>ppc0</filename>, der der zweiten <filename>ppc1</filename>, und so weiter. Der
- Gerätename für den Drucker an der ersten parallelen
- Schnittstelle folgt dem selben Schema und lautet <filename>/dev/lpt0</filename>, usw.</para>
- </sect4>
-
- <sect4 xml:id="printing-serial">
- <title>Serielle Schnittstellen</title>
-
- <para>Um einen Drucker mit serieller Schnittstelle an Ihren
- Computer anzuschließen, verbinden Sie den Drucker
- mit einer seriellen Schnittstelle Ihres Computers. Die
- Dokumentation zu Ihrem Drucker oder Computer sollte Ihnen
- hier weiterhelfen.</para>
-
- <para>Sollten Sie sich nicht sicher sein, welches das
- <quote>richtige Kabel</quote> ist, können Sie eine
- dieser Alternativen ausprobieren:</para>
-
- <itemizedlist>
- <listitem>
- <para>Ein <emphasis>Modemkabel</emphasis> verbindet alle
- Anschlüsse an einem Ende des Kabels eins-zu-eins
- mit den Anschlüssen am anderen Ende des Kabels.
- Ein solches Kabel wird auch als (engl.)
- <quote>DTE-to-DCE-</quote> oder
- <quote>DEE-zu-DÜE-</quote>Kabel
- bezeichnet.</para>
- </listitem>
-
- <listitem>
- <para>Ein
- <emphasis>Nullmodemkabel</emphasis><indexterm><primary>Nullmodemkabel</primary></indexterm>
- verbindet einige Signale eins-zu-eins, andere über
- Kreuz (z.B. Sende- und Empfangsleitung), und verbindet
- einige weitere direkt im Stecker miteinander. Ein
- solches Kabel wird auch als (engl.)
- <quote>DTE-to-DTE-</quote> oder
- <quote>DEE-zu-DEE-</quote>Kabel bezeichnet.</para>
- </listitem>
-
- <listitem>
- <para>Ein <emphasis>Serielles Druckerkabel</emphasis>
- schließlich, das für einige spezielle
- Drucker benötigt wird, verbindet zusätzliche
- Signale miteinander, anstatt sie im Stecker
- zurückzuführen.</para>
- </listitem>
- </itemizedlist>
-
- <indexterm>
- <primary>Baudrate</primary>
- </indexterm>
- <indexterm>
- <primary>Parität</primary>
- </indexterm>
- <indexterm>
- <primary>Flusssteuerung</primary>
- </indexterm>
-
- <para>Sie sollten auch die Kommunikationsparameter am
- Drucker einstellen; üblicherweise gibt es dazu
- DIP-Schalter, oder eine Option in der Menüführung am
- Drucker. Wählen Sie die höchste
- <emphasis>Bitrate</emphasis> (auch als <literal>bps</literal>
- Bits pro Sekunde oder <emphasis>Baudrate</emphasis> bezeichnet),
- die sowohl Ihr Drucker als auch Ihr Computer unterstützen.
- Wählen Sie 7 oder 8 Bits, gerade, ungerade oder keine
- Parität, und ein oder zwei Stoppbits. Wählen
- Sie die Art der Flusssteuerung: keine, XON/XOFF (auch
- als <quote>in-band-</quote> oder
- <quote>Software</quote>-Flusssteuerung bezeichnet),
- oder Hardware. Notieren Sie sich diese Einstellungen, damit Sie
- sie später bei der Software-Konfiguration zur Verfügung
- haben.</para>
- </sect4>
- </sect3>
-
- <sect3 xml:id="printing-software">
- <title>Software-Konfiguration</title>
-
- <para>Dieser Abschnitt beschreibt die notwendigen
- Konfigurationsschritte, damit Sie mit dem
- &os;-<application>LPD</application>-System drucken
- können.</para>
-
- <para>Diese Schritte müssen Sie ausführen:</para>
-
- <procedure>
- <step>
- <para>Konfigurieren Sie Ihren Kernel, soweit notwendig, um
- die Schnittstelle benutzen zu können, an die Ihr
- Drucker angeschlossen ist. Abschnitt <link linkend="printing-kernel">Kernel-Konfiguration</link>
- erklärt, welche Optionen Sie
- benötigen.</para>
- </step>
-
- <step>
- <para>Konfigurieren Sie die Kommunikationseinstellungen
- für die parallele Schnittstelle, sofern Sie sie
- benutzen. Abschnitt <link linkend="printing-parallel-port-mode">Kommunikationseinstellungen
- für die parallele Schnittstelle</link> enthält
- die Details.</para>
- </step>
-
- <step>
- <para>Prüfen Sie, ob Sie Daten an den Drucker senden
- können. Abschnitt <link linkend="printing-testing">Prüfen der
- Drucker-Kommunikation</link> führt eine Reihe von
- Möglichkeiten auf.</para>
- </step>
-
- <step>
- <para>Konfigurieren Sie <application>LPD</application>
- für Ihren Drucker, indem Sie die Konfigurationsdatei
- <filename>/etc/printcap</filename> anpassen. Details dazu finden
- Sie im Abschnitt <link linkend="printing-printcap"><application>LPD</application>
- aktivieren: die
- <filename>/etc/printcap</filename>-Datei</link>.</para>
- </step>
- </procedure>
-
- <sect4 xml:id="printing-kernel">
- <title>Kernel-Konfiguration</title>
-
- <para>Der Betriebssystem-Kernel ist für eine bestimmte
- Kombination aus Geräten kompiliert. Dies schließt
- Ihre seriellen oder parallelen Schnittstellen mit ein.
- Dementsprechend kann es notwendig sein, die Kernelkonfiguration um
- weitere Schnittstellen zu erweitern.</para>
-
- <para>So können Sie prüfen, ob Ihr Kernel die
- serielle Schnittstelle unterstützt, an die Sie den
- Drucker angeschlossen haben:</para>
-
- <screen>&prompt.root; <userinput>grep sioN /var/run/dmesg.boot</userinput></screen>
-
- <para>Ersetzen Sie <replaceable>N</replaceable> durch die
- Nummer der seriellen Schnittstelle, beginnend bei Null.
- Wenn Sie eine Ausgabe ähnlich der folgenden erhalten,
- unterstützt ihr Kernel diese Schnittstelle:</para>
-
- <screen>sio2 at port 0x3e8-0x3ef irq 5 on isa
-sio2: type 16550A</screen>
-
- <para> Erhalten Sie keine Ausgabe, oder eine Fehlermeldung,
- wird die Schnittstelle nicht korrekt unterstützt.</para>
-
- <para>So können Sie prüfen, ob Ihr Kernel die
- parallele Schnittstelle unterstützt, an die Sie den
- Drucker angeschlossen haben:</para>
-
- <screen>&prompt.root; <userinput>grep ppcN /var/run/dmesg.boot</userinput></screen>
-
- <para>Ersetzen Sie <replaceable>N</replaceable> durch die
- Nummer der parallelen Schnittstelle, beginnend bei Null.
- Wenn Sie eine Ausgabe ähnlich der folgenden erhalten,
- unterstützt ihr Kernel diese Schnittstelle:</para>
-
- <screen>ppc0: &lt;Parallel port&gt; at port 0x378-0x37f irq 7 on isa0
-ppc0: SMC-like chipset (ECP/EPP/PS2/NIBBLE) in COMPATIBLE mode
-ppc0: FIFO with 16/16/8 bytes threshold</screen>
-
- <para> Erhalten Sie keine Ausgabe, oder eine Fehlermeldung,
- wird die Schnittstelle nicht korrekt unterstützt.</para>
-
- <para>Gegebenenfalls müssen Sie Ihren Kernel
- umkonfigurieren und neu kompilieren, damit die von Ihnen
- gewählte Schnittstelle unterstützt wird.</para>
-
- <para>Um Unterstützung für eine serielle Schnittstelle
- hinzuzufügen, lesen Sie bitte Kapitel <link linkend="kernelconfig">Konfiguration des &os; Kernels</link>.
- Um eine parallele Schnittstelle hinzuzufügen, lesen Sie bitte
- ebenfalls jenes Kapitel als auch den folgenden Abschnitt <link linkend="printing-parallel-port-mode">Kommunikationseinstellungen
- für die parallele Schnittstelle</link>.</para>
- </sect4>
- </sect3>
-
- <sect3 xml:id="printing-parallel-port-mode">
- <title>Kommunikationseinstellungen für die parallele
- Schnittstelle</title>
-
- <para>Wenn Sie die parallele Schnittstelle zur Kommunikation
- mit Ihrem Drucker benutzen, haben Sie die Wahl zwischen
- Interrupt-gesteuerter oder Polling-Datenübertragung.
- Der generische Druckergerätetreiber &man.lpt.4; in
- &os; benutzt das &man.ppbus.4;-System, das die parallele
- Schnittstelle mithilfe des &man.ppc.4;-Treibers steuert.</para>
-
- <itemizedlist>
- <listitem>
- <para>Die <emphasis>Interrupt-gesteuerte</emphasis>
- Datenübertragung ist die Voreinstellung im
- GENERIC-Kernel. Der Treiber benutzt eine IRQ-Leitung,
- um zu erfahren, wann der Drucker weitere Daten
- empfangen kann.</para>
- </listitem>
-
- <listitem>
- <para>Bei der <emphasis>Polling-Methode</emphasis>
- prüft der Treiber in regelmäßigen
- Abständen, ob weitere Daten übertragen
- werden können.</para>
- </listitem>
- </itemizedlist>
-
- <para>Die Interrupt-gesteuerte Methode ist
- überlicherweise schneller und verbraucht weniger
- Rechenzeit als die Polling-Methode, es wird jedoch eine
- eigene IRQ-Leitung für die Schnittstelle
- benötigt. Darüberhinaus kann es mit einigen
- Druckermodellen zu Problemen kommen, wenn die
- Interrupt-gesteuerte Übertragung zum Einsatz
- kommt.</para>
-
- <para>Die können die Kommunikationseinstellung entweder
- in der Kernel-Konfiguration wählen, oder mittels des
- &man.lptcontrol.8;-Programms zur Laufzeit
- einstellen.</para>
-
- <para><emphasis>So legen Sie die Kommunikationseinstellung
- in der Kernel-Konfiguration fest:</emphasis></para>
-
- <procedure>
- <step>
- <para>Ändern Sie Ihre Kernel-Konfigurationsdatei.
- Finden Sie die Zeile, die mit <literal>device
- ppc0</literal> beginnt. Wenn Sie die zweite parallele
- Schnittstelle konfigurieren möchten, suchen Sie
- nach <literal>device ppc1</literal>, für die
- dritte Schnittstelle <literal>ppc2</literal>,
- usw.</para>
-
- <itemizedlist>
- <listitem>
- <para>Um die Interrupt-Steuerung zu aktivieren,
- passen Sie die folgende Zeile an:</para>
-
- <programlisting>hint.ppc.0.irq="<replaceable>N</replaceable>"</programlisting>
-
- <para>Ersetzen Sie <replaceable>N</replaceable>
- durch die Nummer der IRQ-Leitung, die dieser
- parallelen Schnittstelle zugewiesen ist. Stellen
- Sie sicher, dass Ihre Kernel-Konfigurationsdatei den
- &man.ppc.4;-Treiber enthält:</para>
-
- <screen>device ppc</screen>
- </listitem>
-
- <listitem>
- <para>Wenn Sie den Polling-Modus verwenden
- möchten, entfernen Sie die folgende Zeile
- aus <filename>/boot/device.hints</filename>:</para>
-
- <programlisting>hint.ppc.0.irq="<replaceable>N</replaceable>"</programlisting>
-
- <para>Sollte der Treiber die Schnittstelle dennoch
- im Interrupt-Modus betreiben, könnte dies an
- der Aktivierung durch das &man.acpi.4;-System in
- &os; liegen. Bitte prüfen Sie die
- ACPI- und die BIOS-Konfiguration.</para>
- </listitem>
- </itemizedlist>
- </step>
-
- <step>
- <para>Wenn Sie Ihre Kernel-Konfigurationsdatei angepasst
- haben, kompilieren und installieren Sie nun einen
- neuen Kernel. Das Kapitel <link linkend="kernelconfig">Konfiguration des
- &os;-Kernels</link> enthält weitere Details dazu.</para>
- </step>
- </procedure>
-
- <para><emphasis>So können Sie die Kommunikationseinstellung
- mit</emphasis>&man.lptcontrol.8;
- <emphasis>ändern:</emphasis></para>
-
- <procedure>
- <step>
- <para>Um die Interrupt-Steuerung für die
- Schnittstelle <replaceable>N</replaceable> zu
- aktivieren, geben Sie ein:</para>
-
- <screen>&prompt.root; <userinput>lptcontrol -i -d /dev/lptN</userinput></screen>
- </step>
-
- <step>
- <para>Um den Polling-Modus für die Schnittstelle
- <replaceable>N</replaceable> zu aktivieren, geben Sie
- ein:</para>
-
- <screen>&prompt.root; <userinput>lptcontrol -p -d /dev/lptN</userinput></screen>
- </step>
- </procedure>
-
- <para>Sie können diesen Befehl in
- <filename>/etc/rc.local</filename> aufnehmen, damit er bei
- jedem Systemstart automatisch ausgeführt wird.
- &man.lptcontrol.8; enthält weitere Informationen.</para>
- </sect3>
-
- <sect3 xml:id="printing-testing">
- <title>Kommunikation mit den Drucker prüfen</title>
-
- <para>Bevor Sie mit der Konfiguration des
- <application>LPD</application>-Drucksystems fortfahren,
- sollten Sie sicherstellen, das Sie erfolgreich Daten an
- Ihren Drucker senden können. Es ist deutlich
- einfacher, Kommunikations- und Konfigurationsprobleme
- unabhängig voneinander zu lösen.</para>
-
- <para>Der Drucker kann mit einem Probeausdruck getestet werden.
- Für alle Drucker, die normalen Text unmittelbar drucken
- können, bietet sich das Programm &man.lptest.1; an: es
- produziert alle 96 druckbaren ASCII-Zeichen auf 96 Zeilen.</para>
-
- <indexterm>
- <primary>PostScript</primary>
- </indexterm>
-
- <para>Für einen &postscript;-Drucker (oder andere
- Drucker, die eine Seitenbeschreibungssprache verwenden)
- muss ein passendes Programm an den Drucker gesendet
- werden, z.B. dieses:</para>
-
- <programlisting>%!PS
-100 100 moveto 300 300 lineto stroke
-310 310 moveto /Helvetica findfont 12 scalefont setfont
-(Funktioniert dieser Drucker?) show
-showpage</programlisting>
-
- <para>Sie können dieses ProstScript-Programm in einer
- Datei speichern, und mit den Beispielen in den folgenden
- Abschnitt verwenden.</para>
-
- <indexterm>
- <primary>PCL</primary>
- </indexterm>
-
- <note>
- <para>Nicht alle Drucker, die eine Seitenbeschreibungssprache
- verwenden, benötigen ein Test-Programm: z.B. HPs PCL
- (das auch in vielen kompatiblen Druckern zum Einsatz zu kommt),
- versteht normalen Text. Besondere Escape-Sequenzen werden
- benutzt, um die erweiterten Möglichkeiten aufzurufen.
- &postscript;-Drucker können in der Regel keinen normalen
- Text direkt verarbeiten, weil sie ein &postscript;-Programm
- erwarten, das eine Seite produziert.</para>
- </note>
-
- <sect4 xml:id="printing-checking-parallel">
- <title>Einen Paralleldrucker prüfen</title>
-
- <para>Dieser Abschnitt führt vor, wie Sie die
- Kommunikation mit Ihrem Drucker über die
- parallele<indexterm><primary>Drucker</primary><secondary>Parallel</secondary></indexterm>
- Schnittstelle prüfen können.</para>
-
- <para><emphasis>So testen Sie einen Drucker an einer
- parallelen Schnittstelle:</emphasis></para>
-
- <procedure>
- <step>
- <para>Werden Sie <systemitem class="username">root</systemitem> mithilfe
- des &man.su.1;-Befehls.</para>
- </step>
-
- <step>
- <para>Senden Sie Testdaten an den Drucker.</para>
-
- <itemizedlist>
- <listitem>
- <para>Wenn Ihr Drucker reinen Text direkt drucken
- kann, verwenden Sie &man.lptest.1;:</para>
-
- <screen>&prompt.root; <userinput>lptest &gt; /dev/lptN</userinput></screen>
-
- <para>Ersetzen Sie <replaceable>N</replaceable>
- durch die Nummer der parallelen Schnittstelle,
- an die der Drucker angeschlossen ist (angefangen
- bei Null).</para>
- </listitem>
-
- <listitem>
- <para>Wenn Ihr Drucker &postscript; (oder eine
- andere Seitenbeschreibungssprache) versteht,
- senden Sie ein passendes Testprogramm an den
- Drucker. Geben Sie folgenden Befehl ein:</para>
-
- <screen>&prompt.root; <userinput>cat file &gt; /dev/lptN</userinput></screen>
-
- <para>Ersetzen Sie <replaceable>N</replaceable>
- durch die Nummer der parallelen Schnittstelle,
- an die der Drucker angeschlossen ist (angefangen
- bei Null). Geben Sie nun das Testprogramm ein,
- Zeile für Zeile. Kontrollieren Sie jede
- Zeile, bevor Sie die Eingabetaste drücken:
- Sie können die Zeile später nicht mehr
- ändern. Zum Schluss tippen Sie
- <keycombo action="simul">
- <keycap>Ctrl</keycap>
- <keycap>D</keycap>
- </keycombo>.
- Wenn Sie ein anderes Zeichen nutzen, um das Ende
- der Datei anzuzeigen, müssen Sie
- natürlich die entsprechende
- Tastenkombination für dieses Zeichen
- betätigen.</para>
-
- <para>Sie können das Testprogramm auch in
- einer Datei speichern, und dann diesen Befehl
- aufrufen:</para>
-
- <screen>&prompt.root; <userinput>cat Testprogramm &gt; /dev/lptN</userinput></screen>
-
- <para>Ersetzen Sie <replaceable>Testprogramm</replaceable>
- durch den Dateinamen, unter dem Sie das Testprogramm
- gespeichert haben.</para>
- </listitem>
- </itemizedlist>
- </step>
- </procedure>
-
- <para>Der Drucker sollte einige Zeilen oder eine Seite
- drucken. Machen Sie sich keine Sorgen über falsche
- Formatierungen: die Software-Konfiguration enthält
- Informationen zum Umformatieren von Druckaufträgen.</para>
- </sect4>
-
- <sect4 xml:id="printing-checking-serial">
- <title>Einen seriellen Drucker prüfen</title>
-
- <indexterm>
- <primary>Drucker</primary>
- <secondary>serielle</secondary>
- </indexterm>
-
- <para>Dieser Abschnitt führt vor, wie Sie die Kommunikation
- mit Ihrem Drucker über die parallele Schnittstelle
- prüfen können.</para>
-
- <para><emphasis>So testen Sie einen Drucker an einer
- seriellen Schnittstelle:</emphasis></para>
-
- <procedure>
- <step>
- <para>Werden Sie <systemitem class="username">root</systemitem> mithilfe
- des &man.su.1;-Befehls.</para>
- </step>
-
- <step>
- <para>Ändern Sie die Datei
- <filename>/etc/remote</filename>. Fügen Sie
- den folgenden Eintrag hinzu:</para>
-
- <programlisting>printer:dv=<filename>/dev/port</filename>:br#<replaceable>bps-rate</replaceable>:pa=<replaceable>parity</replaceable></programlisting>
-
- <indexterm>
- <primary>Baudrate</primary>
- </indexterm>
- <indexterm>
- <primary>serieller Anschluss</primary>
- </indexterm>
- <indexterm>
- <primary>Parität</primary>
- </indexterm>
-
- <para>Ersetzen Sie
- <replaceable>Gerät</replaceable> durch den
- Gerätenamen der seriellen Schnittstelle
- (<literal>ttyu0</literal> für die erste,
- <literal>ttyu1</literal> für die zweite, usw.),
- <replaceable>Baudrate</replaceable> ist die
- Geschwindigkeit und
- <replaceable>Parität</replaceable> die
- Parität (<literal>even</literal> für
- gerade, <literal>odd</literal> für ungerade
- oder <literal>none</literal> für keine), die
- Sie am Drucker eingestellt haben.</para>
-
- <para>Hier ein Beispieleintrag für einen Drucker,
- der über die dritte serielle Schnittstelle
- angeschlossen ist, mit 19.200&nbsp;Baud kommuniziert und
- keine Parität verwendet:</para>
-
- <programlisting>printer:dv=<filename>/dev/ttyu2</filename>:br#19200:pa=none</programlisting>
- </step>
-
- <step>
- <para>Verbinden Sie sich mit dem Drucker über den
- Befehl &man.tip.1;:</para>
-
- <screen>&prompt.root; <userinput>tip printer</userinput></screen>
-
- <para>Kommt es hierbei zu einer Fehlermeldung,
- ändern Sie den Eintrag in
- <filename>/dev/cuaaN</filename> und verwenden Sie <filename>/dev/cuaaN</filename>
- statt <filename>/dev/ttyuN</filename>.</para>
- </step>
-
- <step>
- <para>Senden Sie Testdaten an den Drucker.</para>
-
- <itemizedlist>
- <listitem>
- <para>Wenn Ihr Drucker reinen Text direkt drucken
- kann, verwenden Sie &man.lptest.1;:</para>
-
- <screen>&prompt.user; <userinput>$lptest</userinput></screen>
- </listitem>
-
- <listitem>
- <para>Wenn Ihr Drucker &postscript; (oder eine andere
- Seitenbeschreibungssprache) versteht, senden Sie ein
- passendes Testprogramm an den Drucker. Geben Sie das
- Testprogramm ein, Zeile für Zeile. Kontrollieren
- Sie jede Zeile, bevor Sie die Eingabetaste drücken:
- Sie können die Zeile später nicht mehr
- ändern. Zum Schluss tippen Sie
- <literal>Control-D</literal>.</para>
-
- <para>Sie können das Testprogramm auch in einer Datei
- speichern, und dann diesen Befehl aufrufen:</para>
-
- <screen>&prompt.user; <userinput>&gt;Testprogramm</userinput></screen>
-
- <para>Ersetzen Sie <replaceable>Testprogramm</replaceable>
- durch den Dateinamen, unter dem Sie das Testprogramm
- gespeichert haben. Nachdem &man.tip.1; die Datei
- gesendet hat, tippen Sie
- <literal>Control-D</literal>.</para>
- </listitem>
- </itemizedlist>
- </step>
- </procedure>
-
- <para>Der Drucker sollte einige Zeilen oder eine Seite
- drucken. Machen Sie sich keine Sorgen über falsche
- Formatierungen: die Software-Konfiguration enthält
- Informationen zum Umformatieren von
- Druckaufträgen.</para>
- </sect4>
- </sect3>
-
- <sect3 xml:id="printing-printcap">
- <title><application>LPD</application> aktivieren: die
- <filename>/etc/printcap</filename>-Datei</title>
-
- <para>Nachdem Sie Ihren Drucker angeschlossen haben, Ihren
- Kernel richtig konfiguriert haben und erfolgreich einen
- Testausdruck produziert haben, können Sie nun das
- <application>LPD</application>-System konfigurieren.</para>
-
- <para>Sie konfigurieren <application>LPD</application>, indem
- Sie die Datei <filename>/etc/printcap</filename> anpassen.
- Da <application>LPD</application> die Datei jedes Mal liest,
- wenn eine Aktion durchgeführt wird, werden
- Änderungen an der Konfiguration sofort aktiv.</para>
-
- <indexterm>
- <primary>Drucker</primary>
- <secondary>Eigenschaften</secondary>
- </indexterm>
-
- <para>Die &man.printcap.5;-Datei ist einfach aufgebaut. Sie
- können <filename>/etc/printcap</filename> mit Ihrem
- bevorzugten Texteditor bearbeiten. Sie verwendet dasselbe
- Format wie auch <filename>/usr/share/misc/termcap</filename>
- oder <filename>/etc/remote</filename>. Informationen zum
- Format finden Sie in &man.cgetent.3;.</para>
-
- <para>Die Grund-Konfiguration des
- <application>LPD</application>-Systems beinhaltet diese
- Schritte:</para>
-
- <procedure>
- <step>
- <para>Wählen Sie einen Namen (und einige praktische
- Abkürzungen) für die Druckerwarteschlage, und
- tragen Sie ihn in die <filename>/etc/printcap</filename>-Datei
- ein. Abschnitt <link linkend="printing-naming">Einen Namen
- wählen</link> enthält weitere Informationen.</para>
- </step>
-
- <step>
- <para>Schalten Sie den Druck von
- Deckblättern<indexterm><primary>Deckblätter</primary></indexterm>
- aus (dies ist standardmäßig eingeschaltet), indem Sie
- das Attribut <literal>sh</literal> setzen. Abschnitt
- <link linkend="printing-no-header-pages">Den Druck von
- Deckblättern ausschalten</link> erklärt, wie Sie dies
- tun können.</para>
- </step>
-
- <step>
- <para>Legen Sie ein Pufferverzeichnis für die
- Warteschlange an, und geben Sie den Pfad mittels des
- <literal>sd</literal>-Attributs an: siehe Abschnitt <link linkend="printing-spooldir">Das Pufferverzeichnis
- anlegen</link>.</para>
- </step>
-
- <step>
- <para>Geben Sie den Gerätenamen für Ihren
- Drucker mittels des <literal>lp</literal>-Attributs an:
- siehe Abschnitt <link linkend="printing-device">Festlegen der
- Drucker-Gerätedatei</link>. Ist Ihr Drucker
- über eine serielle Schnittstelle angeschlossen,
- benutzen Sie das Attribut <literal>ms#</literal>,
- wie dies in Abschnitt <link linkend="printing-commparam">Festlegen der
- Kommunikationsparameter</link> beschrieben ist.</para>
- </step>
-
- <step>
- <para>Installieren Sie einen Filter für reinen Text:
- siehe Abschnitt <link linkend="printing-textfilter">Den
- Textfilter installieren</link>.</para>
- </step>
-
- <step>
- <para>Testen Sie die Konfiguration, indem Sie etwas mit
- dem &man.lpr.1;-Befehl drucken. Die Abschnitte <link linkend="printing-trying">Die Konfiguration testen</link> und
- <link linkend="printing-troubleshooting">Fehlersuche und
- Problembehebung</link> enthalten weitere Informationen.</para>
- </step>
- </procedure>
-
- <note>
- <para>Drucker, die eine Seitenbeschreibungssprache wie
- &postscript; verwenden, können keinen reinen Text
- drucken. Es wird deshalb angenommen, dass Sie nur
- solche Dateien drucken, die Ihr Drucker verarbeiten
- kann.</para>
- </note>
-
- <para>Viele Anwender erwarten, dass sie normalen Text auf
- allen Druckern drucken können. Viele Programme, die mit
- <application>LPD</application> zusammenarbeiten, gehen ebenfalls von
- dieser Annahme aus. Wenn Sie einen &postscript;-Drucker
- installieren, und Sie sowohl &postscript;- als auch Textdateien
- drucken möchten, sollten Sie einen weiteren
- Konfigurationsschritt ausführen und einen
- Text-zu-&postscript;-Filter installieren. Der Abschnitt <link linkend="printing-advanced-if-conversion">Drucken von reinen
- Textdateien auf einem &postscript;-Drucker</link>
- erklärt, wie Sie dies tun können.</para>
-
- <sect4 xml:id="printing-naming">
- <title>Einen Namen wählen</title>
-
- <para>Der erste einfache Schritt ist, einen Namen für
- Ihren Drucker zu wählen. Sie können diesen Namen
- frei wählen, Sie sollten allerdings keine Sonderzeichen oder
- Umlaute verwenden. Sie können mehrere Alias-Namen
- vergeben.</para>
-
- <para>Ein Drucker in <filename>/etc/printcap</filename>
- sollte den Alias <literal>lp</literal> haben. Dieser Name
- wird standardmäßig von allen Druckbefehlen
- verwendet, wenn auf der Befehlszeile oder in der
- <envar>PRINTER</envar>-Umgebungsvariablen kein anderer
- Drucker angegeben ist.</para>
-
- <para>Ebenso ist es üblich, eine ausführliche
- Beschreibung des Druckermodells als letzten Alias-Namen zu
- verwenden.</para>
-
- <para>Sobald Sie einen Namen und einige einfache Alias-Namen
- ausgewählt haben, tragen Sie sie in die Datei
- <filename>/etc/printcap</filename> ein. Beginnen Sie die
- Zeile mit dem Namen des Druckers und fügen Sie alle
- Alias-Namen an. Trennen Sie die Namen durch den
- senkrechten Strich <literal>|</literal>. Fügen Sie an
- das Ende der Zeile einen Doppelpunkt <literal>:</literal>
- an.</para>
-
- <para>Das folgende Beispiel definiert zwei Drucker, einen
- Diablo 630 Zeilendrucker, und einen Panasonic KX-P4455
- &postscript;-Laserdrucker:</para>
-
- <programlisting>#
-# /etc/printcap for host rose
-#
-rattan|line|diablo|lp|Diablo 630 Line Printer:
-
-bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:</programlisting>
-
- <para>Der erste Drucker hat den Namen
- <literal>rattan</literal>, und hat die Alias-Namen
- <literal>line</literal>, <literal>diablo</literal>,
- <literal>lp</literal> und <literal>Diablo 630 Line
- Printer</literal>. Da er den Alias-Namen
- <literal>lp</literal> trägt, wird er
- standardmäßig von den Druckprogrammen
- verwendet. Der zweite Drucker heißt
- <literal>bamboo</literal>, und hat die Alias-Namen
- <literal>ps</literal>, <literal>PS</literal>,
- <literal>S</literal>, <literal>panasonic</literal> und
- <literal>Panasonic KX-P4455 PostScript
- v51.4</literal>.</para>
- </sect4>
-
- <sect4 xml:id="printing-no-header-pages">
- <title>Keine Deckblätter drucken</title>
-
- <indexterm>
- <primary>drucken</primary>
- <secondary>Deckblatt</secondary>
- </indexterm>
-
- <para>Standardmäßig druckt das
- <application>LPD</application>-System ein
- <emphasis>Deckblatt</emphasis> vor jedem Druckauftrag,
- die den Namen des Druckauftrags, den Benutzer und den
- Computer angibt. Während der Einrichtung des Systems
- und beim Testen stört das Deckblatt allerdings,
- weshalb Sie sie zunächst deaktivieren sollten.</para>
-
- <para>Um den Druck von Deckblättern zu deaktivieren,
- fügen Sie das Attribut <literal>sh</literal> zur
- Druckerdefinition in <filename>/etc/printcap</filename>
- hinzu. Hier ein Beispiel:</para>
-
- <programlisting>#
-# /etc/printcap for host rose - no header pages anywhere
-#
-rattan|line|diablo|lp|Diablo 630 Line Printer:\
- :sh:
-
-bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
- :sh:</programlisting>
-
- <para>Beachten Sie die korrekte Formatierung: die beiden
- Definitionen beginnen auf einer Zeile; weitere Zeilen der
- Definition sind mit einem <literal>Tab</literal>-Zeichen
- eingerückt, und alle Zeilen einer Definition, bis auf
- die letzte, enden mit dem Backslash <literal>\</literal>.</para>
- </sect4>
-
- <sect4 xml:id="printing-spooldir">
- <title>Das Pufferverzeichnis anlegen</title>
-
- <indexterm>
- <primary>Pufferverzeichnis</primary>
- </indexterm>
- <indexterm>
- <primary>Druckaufträge</primary>
- </indexterm>
-
- <para>Der nächste Schritt ist, das
- <emphasis>Pufferverzeichnis</emphasis> anzulegen. In
- diesem Verzeichnis werden Druckaufträge zwischengespeichert,
- während sie gedruckt werden. Gleichzeitig werden hier auch
- einige Verwaltungsdateien des Systems abgelegt.</para>
-
- <para>Da sich die Dateien in diesem Verzeichnis häufig
- ändern, ist es üblich, das Verzeichnis unter
- <filename>/var/spool</filename> anzulegen.
- Es ist nicht notwendig, Sicherungskopien der Dateien
- herzustellen; das Verzeichnis kann nötigenfalls
- leicht mit &man.mkdir.1; wieder angelegt werden.</para>
-
- <para>Es ist auch üblich, dem Verzeichnis denselben
- Namen wie dem Drucker zu geben:</para>
-
- <screen>&prompt.root; <userinput>mkdir /var/spool/printer-name</userinput></screen>
-
- <para>Wenn Sie viele Drucker verwenden, ist es am besten,
- wenn Sie für die Pufferverzeichnisse ein eigenes
- Unterverzeichnis in <filename>/var/spool</filename>
- anlegen, wie dies hier für die beiden Beispieldrucker
- <literal>rattan</literal> und <literal>bamboo</literal>
- gezeigt wird:</para>
-
- <screen>&prompt.root; <userinput>mkdir /var/spool/lpd</userinput>
-&prompt.root; <userinput>mkdir /var/spool/lpd/rattan</userinput>
-&prompt.root; <userinput>mkdir /var/spool/lpd/bamboo</userinput></screen>
-
- <note>
- <para>Um zu verhindern, dass alle Benutzer den Inhalt
- aller Druckaufträge einsehen können, sollten
- Sie die Rechte auf den Pufferverzeichnissen einschränken.
- Die Verzeichnisse sollten dem
- Benutzer <systemitem class="username">daemon</systemitem> und der Gruppe
- <systemitem class="groupname">daemon</systemitem> gehören, und auch nur
- vom Benutzer und der Gruppe les-, schreib- und
- durchsuchbar sein. Für unsere
- Beispieldrucker:</para>
-
- <screen>&prompt.root; <userinput>chown daemon:daemon /var/spool/lpd/rattan</userinput>
-&prompt.root; <userinput>chown daemon:daemon /var/spool/lpd/bamboo</userinput>
-&prompt.root; <userinput>chmod 770 /var/spool/lpd/rattan</userinput>
-&prompt.root; <userinput>chmod 770 /var/spool/lpd/bamboo</userinput></screen>
- </note>
-
- <para>Schließlich müssen Sie dem
- <application>LPD</application>-System noch mitteilen, wo
- Sie die Pufferverzeichnisse angelegt haben. Dazu geben Sie
- in der Definition das Attribut <literal>sd</literal> an:</para>
+ </varlistentry>
- <programlisting>#
-# /etc/printcap for host rose - added spooling directories
-#
-rattan|line|diablo|lp|Diablo 630 Line Printer:\
- :sh:sd=<filename>/var/spool/lpd/rattan</filename>:
+ <varlistentry xml:id="printing-connections-parallel">
+ <term>Prallel (<acronym>IEEE</acronym>-1284)</term>
-bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
- :sh:sd=<filename>/var/spool/lpd/bamboo</filename>:</programlisting>
+ <listitem>
+ <para>Die parallele Schnittstelle ist
+ <filename>/dev/lpt0</filename>. Der Gerätename erscheint
+ unabhängig davon, ob ein Drucker angeschlossen ist oder
+ nicht. Eine automatische Erkennung findet nicht
+ statt.</para>
+
+ <para>Die Hersteller haben sich weitgehend von diesem
+ älteren Anschluss verabschiedet und auch viele Rechner
+ haben keine parallele Schnittstelle mehr. Es existieren
+ jedoch Adapter, um einen parallelen Drucker an einem
+ <acronym>USB</acronym>-Port anzuschließen. Der Drucker
+ wird dann wie ein <acronym>USB</acronym>-Drucker
+ behandelt. Es können auch
+ <emphasis>Printserver</emphasis> verwendet werden, um
+ parallele Drucker direkt mit einem Netzwerk zu
+ verbinden.</para>
+ </listitem>
+ </varlistentry>
- <para>Beachten Sie, dass der Druckername in der ersten
- Spalte beginnt, und dass alle Folgezeilen mit einem
- <literal>Tab</literal> eingerückt sind.</para>
-
- <para>Wenn Sie das <literal>sd</literal>-Attribut nicht
- angeben, verwendet das System <filename>/var/spool/lpd</filename> als Verzeichnis.</para>
- </sect4>
-
- <sect4 xml:id="printing-device">
- <title>Festlegen der Drucker-Gerätedatei</title>
-
- <para>Nachdem Sie die korrekte Gerätedatei für die
- Schnittstelle im Abschnitt <link linkend="printing-hardware">Hardware-Konfiguration</link>
- identifiziert und angelegt haben, müssen Sie dem
- <application>LPD</application>-System mitteilen, welche
- Gerätedatei im Verzeichnis <filename>/dev</filename> es für die
- Datenübertragung zum Drucker verwenden soll.</para>
-
- <para>Geben Sie die Gerätedatei durch das Attribut
- <literal>lp</literal> in
- <filename>/etc/printcap</filename> an.</para>
-
- <para>Wenn <literal>rattan</literal> an die erste parallele
- Schnittstelle angeschlossen ist, und <literal>bamboo</literal> an
- die sechste serielle, dann sieht <filename>/etc/printcap</filename>
- so aus:</para>
+ <varlistentry xml:id="printing-connections-serial">
+ <term>Seriell (RS-232)</term>
- <programlisting>#
-# /etc/printcap for host rose - identified what devices to use
-#
-rattan|line|diablo|lp|Diablo 630 Line Printer:\
- :sh:sd=<filename>/var/spool/lpd/rattan</filename>:\
- :lp=<filename>/dev/lpt0</filename>:
-
-bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
- sh:sd=<filename>/var/spool/lpd/bamboo</filename>:\
- :lp=<filename>/dev/ttyu5</filename>:</programlisting>
-
- <para>Wenn Sie <literal>lp</literal> nicht angeben, versucht
- <application>LPD</application> die Gerätedatei <filename>/dev/lp</filename> zu verwenden. <filename>/dev/lp</filename> ist zurzeit in &os;
- nicht definiert.</para>
-
- <para>Wenn Ihr Drucker über eine parallele Schnittstelle
- angeschlossen ist, können Sie mit dem Abschnitt <link linkend="printing-textfilter">Den Textfilter installieren</link>
- fortfahren. Verwenden Sie eine serielle Schnittstelle, beachten
- Sie bitte den folgenden Abschnitt.</para>
- </sect4>
-
- <sect4 xml:id="printing-commparam">
- <title>Kommunikationsparameter festlegen</title>
-
- <indexterm>
- <primary>Drucker</primary>
- <secondary>serielle</secondary>
- </indexterm>
-
- <para>Für seriell angeschlossene Drucker kann
- <application>LPD</application> die Geschwindigkeit,
- Parität und weitere Kommunikationsparameter
- einstellen. Dies hat folgende Vorteile:</para>
-
- <itemizedlist>
- <listitem>
- <para>Sie können die Parameter einfach in
- <filename>/etc/printcap</filename> ändern, ohne
- das Ausgabe-Filterprogramm anpassen zu
- müssen.</para>
- </listitem>
-
- <listitem>
- <para>Dasselbe Ausgabe-Filterprogramm kann für
- unterschiedliche Drucker verwendet werden, auch wenn
- diese unterschiedliche Kommunikationseinstellungen
- benötigen.</para>
- </listitem>
- </itemizedlist>
-
- <para>Die folgenden Attribute legen die seriellen
- Kommunikationsparameter fest:</para>
-
- <variablelist>
- <varlistentry>
- <term><literal>br#Baudrate</literal></term>
-
- <listitem>
- <para>Setzt die Übertragungsgeschwindigkeit auf
- <replaceable>Baudrate</replaceable>.
- <replaceable>Baudrate</replaceable> kann
- üblicherweise 50, 75, 110, 134.5, 150, 300,
- 600, 1200, 1800, 2400, 4800, 9600, 19200, 38400,
- 57600, oder 115200 Bit pro Sekunde betragen.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><literal>ms#stty-Modi</literal></term>
-
- <listitem>
- <para>Setzt die Eigenschaften für das Gerät,
- nachdem es geöffnet wurde. Die verfügbaren
- Eigenschaften sind in &man.stty.1; aufgeführt.</para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- <para>Wenn <application>LPD</application> das mit
- <literal>lp</literal> angegebene Gerät öffnet,
- setzt es die mit <literal>ms#</literal> angegebenen
- Eigenschaften. Von besonderem Interesse sind hier die Modi
- <literal>parenb</literal>, <literal>parodd</literal>,
- <literal>cs5</literal>, <literal>cs6</literal>,
- <literal>cs7</literal>, <literal>cs8</literal>,
- <literal>cstopb</literal>, <literal>crtscts</literal> und
- <literal>ixon</literal>, die in der
- &man.stty.1;-Handbuchseite erläutert werden.</para>
-
- <para>Für den über die sechste serielle
- Schnittstelle angeschlossenen Laserdrucker beträgt
- die Geschwindigkeit 38.400&nbsp;Baud, und es werden diese
- Kommunikationseinstellungen verwendet: keine Parität
- (<literal>-parenb</literal>), 8-Bit-Zeichen
- (<literal>cs8</literal>), keine Modemsteuerung
- (<literal>clocal</literal>) und Hardware-Flusssteuerung
- (<literal>crtscts</literal>):</para>
-
- <programlisting>bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
- :sh:sd=<filename>/var/spool/lpd/bamboo</filename>:\
- :lp=<filename>/dev/ttyd5</filename>:ms#-parenb cs8 clocal crtscts:</programlisting>
- </sect4>
-
- <sect4 xml:id="printing-textfilter">
- <title>Den Textfilter installieren</title>
-
- <indexterm>
- <primary>Druckfilter</primary>
- </indexterm>
-
- <para>Ein <emphasis>Textfilter</emphasis>, auch als
- <emphasis>Eingangsfilter</emphasis> bezeichnet, ist ein
- Programm, das von <application>LPD</application>
- aufgerufen wird, wenn ein Druckauftrag verarbeitet wird.
- Dabei wird die Standardeingabe des Programms mit der zu
- druckenden Datei verbunden, und die Standardausgabe mit
- dem im <literal>lp</literal>-Attribut angegebenen
- Gerät. Das Programm sollte nun die Datei einlesen,
- alle Übersetzungen durchführen, die für den
- Drucker notwendig sind, und das Ergebnis über die
- Standardausgabe an den Drucker senden. Textfilter werden
- im Abschnitt <link linkend="printing-advanced-filters">Filter</link> genauer
- erläutert.</para>
-
- <para>Um einen einfachen Test durchzuführen, reicht ein
- kleines Filterprogramm, dass schlicht <command>/bin/cat</command>
- aufruft, um die Daten unverändert und den Drucker zu schicken.
- &os; verfügt über das Programm <filename>lpf</filename>,
- das Unterstreichung und Fettdruck für solche Drucker
- ermöglicht, die ansonsten dazu nicht in der Lage wären.
- Darüberhinaus gibt es viele andere Filter, die Sie einsetzen
- können. <command>lpf</command> wird im Abschnitt <link linkend="printing-advanced-lpf">lpf: ein Textfilter</link>
- ausführlich beschrieben.</para>
-
- <para>Legen Sie zunächst das folgende Shell-Skript als
- <filename>/usr/local/libexec/if-simple</filename> mit
- Ihrem bevorzugten Texteditor an:</para>
+ <listitem>
+ <para>Serielle Anschlüsse sind veraltet und werden außer in
+ Nischenanwendungen nur noch selten verwendet. Die
+ Kabel, Stecker und die erforderliche Verkabelung sind oft
+ sehr unterschiedlich.</para>
+
+ <para>Der Gerätename für einen seriellen Anschlüsse ist
+ <filename>/dev/cuau0</filename> oder
+ <filename>/dev/cuau1</filename>. Es können auch
+ <acronym>USB</acronym>-Adapter verwendet werden. Diese
+ erscheinen als <filename>/dev/cuaU0</filename>.</para>
+
+ <para>Damit mit dem Drucker kommuniziert werden kann, müssen
+ einige Kommunikationsparameter bekannt sein. Zu den
+ wichtigsten zählen die <emphasis>Baudrate</emphasis>
+ (<acronym>BPS</acronym> - Bits pro Sekunde) und die
+ <emphasis>Parität</emphasis>. Diese Werte variieren,
+ aber typische serielle Drucker verwenden eine Baudrate von
+ 9600 und keine Parität.</para>
+ </listitem>
+ </varlistentry>
- <programlisting>#!/bin/sh
-#
-# if-simple - Simple text input filter for lpd
-# Installed in /usr/local/libexec/if-simple
-#
-# Simply copies stdin to stdout. Ignores all filter arguments.
+ <varlistentry xml:id="printing-connections-network">
+ <term>Netzwerk</term>
-/bin/cat &amp;&amp; exit 0
-exit 2</programlisting>
+ <listitem>
+ <para>Netzwerkdrucker werden direkt mit dem lokalen Netzwerk
+ verbunden.</para>
- <para>Machen Sie die Datei ausführbar:</para>
+ <para>Der <acronym>DNS</acronym>-Name des Druckers muss
+ bekannt sein. Wenn dem Drucker eine dynamische Adresse
+ per <acronym>DHCP</acronym> zugeteilt wird, sollte das
+ <acronym>DNS</acronym> automatisch aktualisiert werden, so
+ dass der Drucker immer die richtige
+ <acronym>IP</acronym>-Adresse hat. Um dieses Problem zu
+ vermeiden, werden Netzwerkdruckern häufig statische
+ <acronym>IP</acronym>-Adressen zugeteilt.</para>
+
+ <para>Die meisten Netzwerkdrucker verstehen Druckaufträge,
+ die über das <acronym>LPD</acronym>-Protokoll empfangen
+ werden. Sie können auch den Namen der Druckwarteschlange
+ angeben. Einige Drucker verarbeiten die Daten
+ unterschiedlich, je nachdem welche Warteschlange verwendet
+ wird. Zum Beispiel druckt eine
+ <literal>Raw</literal>-Warteschlange die Daten
+ unverändert, während eine
+ <literal>Text</literal>-Warteschlange den Text um
+ Wagenrückläufe ergänzt.</para>
- <screen>&prompt.root; <userinput>chmod 555 /usr/local/libexec/if-simple</userinput></screen>
+ <para>Viele Netzwerkdrucker können auch Daten drucken, die
+ direkt an Port 9100 gesendet werden.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
- <para>Konfigurieren Sie nun den Textfilter für Ihren
- Drucker in <filename>/etc/printcap</filename>, indem Sie
- das <literal>if</literal>-Attribut hinzufügen. Hier
- die Konfiguration unserer beiden Beispieldrucker:</para>
+ <sect2 xml:id="printing-connections-summary">
+ <title>Zusammenfassung</title>
- <programlisting>#
-# /etc/printcap for host rose - added text filter
-#
-rattan|line|diablo|lp|Diablo 630 Line Printer:\
- :sh:sd=<filename>/var/spool/lpd/rattan</filename>:\ :lp=<filename>/dev/lpt0</filename>:\
- :if=<filename>/usr/local/libexec/if-simple</filename>:
-
-bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
- :sh:sd=<filename>/var/spool/lpd/bamboo</filename>:\
- :lp=<filename>/dev/ttyu5</filename>:ms#-parenb cs8 clocal crtscts:\
- :if=<filename>/usr/local/libexec/if-simple</filename>:</programlisting>
-
- <note>
- <para>Das Shell-Skript <filename>if-simple</filename>
- steht im Verzeichnis <filename>/usr/share/examples/printing</filename>.</para>
- </note>
- </sect4>
-
- <sect4>
- <title><application>LPD</application> aktivieren</title>
-
- <para>&man.lpd.8; wird von <filename>/etc/rc</filename>
- gestartet, wenn die &man.rc.conf.5;-Variable
- <literal>lpd_enable</literal> auf <literal>YES</literal>
- gesetzt ist. Fügen Sie dazu diese Zeile in
- <filename>/etc/rc.conf</filename> hinzu:</para>
-
- <programlisting>lpd_enable="YES"</programlisting>
-
- <para>Starten Sie Ihren Computer neu, oder starten Sie
- &man.lpd.8; von Hand:</para>
-
- <screen>&prompt.root; <userinput>lpd</userinput></screen>
- </sect4>
-
- <sect4 xml:id="printing-trying">
- <title>Die Konfiguration testen</title>
-
- <para>Damit ist die einfache Konfiguration abgeschlossen.
- Noch muss die Konfiguration aber getestet werden und etwaige
- Probleme müssen behoben werden. Um die Konfiguration zu
- testen, sollten Sie einen Probeausdruck mithilfe des Programms
- &man.lpr.1; produzieren. &man.lpr.1; übergibt
- Druckaufträge an das
- <application>LPD</application>-System.</para>
-
- <para>Sie können &man.lpr.1; mit &man.lptest.1;
- kombinieren, um Testdaten zu drucken. &man.lptest.1; wurde
- im Abschnitt <link linkend="printing-testing">Kommunikation mit den Drucker
- prüfen</link> vorgestellt.</para>
-
- <para><emphasis>So testen Sie die einfache
- <application>LPD</application>-Konfiguration:</emphasis></para>
-
- <screen>&prompt.root; <userinput>lptest 20 5 | lpr -PDruckername</userinput></screen>
-
- <para>Ersetzen Sie <replaceable>Druckername</replaceable>
- durch den Namen des Druckers, den Sie testen möchten.
- Wenn Sie den Standard-Drucker testen möchten, rufen
- Sie &man.lpr.1; ohne die Option <option>-P</option> auf.
- Wenn Sie einen Drucker testen möchten, der nur
- &postscript; versteht, müssen Sie ein
- &postscript;-Testprogramm an &man.lpr.1; übergeben.
- Ein Testprogramm, das Sie in einer Datei gespeichert haben,
- können Sie mit dem Befehl
- <command>lpr Dateiname</command>
- an das <application>LPD</application>-System übergeben.</para>
-
- <para>Bei einem &postscript;-Drucker hängt das Ergebnis
- naturgemäß vom Testprogramm ab. Wenn Sie
- &man.lptest.1; verwenden, sollte das Ergebnis
- ungefähr so aussehen:</para>
-
- <screen>!"#$%&amp;'()*+,-./01234
-"#$%&amp;'()*+,-./012345
-#$%&amp;'()*+,-./0123456
-$%&amp;'()*+,-./01234567
-%&amp;'()*+,-./012345678</screen>
-
- <para>Um sicherzustellen, dass alles richtig
- funktioniert, sollten Sie jetzt ein größeres
- &postscript;-Programm senden. Mit &man.lptest.1; können
- Sie größere Datenmengen z.B. mit dem Befehl
- <command>lptest 80 60</command> erzeugen: &man.lptest.1;
- produziert 60 Zeilen mit je 80 Zeichen.</para>
-
- <para>Wenn Sie nicht erfolgreich drucken können, finden
- Sie im Abschnitt <link linkend="printing-troubleshooting">Fehlersuche und
- Problembehebung</link> weitere Informationen.</para>
- </sect4>
- </sect3>
+ <para>Verkabelte Netzwerkdrucker drucken in der Regel am
+ schnellsten und sind einfach einzurichten. Für den direkten
+ Anschluss am Rechner wird <acronym>USB</acronym> wegen seiner
+ Geschwindigkeit und Einfachheit bevorzugt. Parallele
+ Verbindungen funktionieren, haben jedoch ihre Begrenzung in
+ Bezug auf Kabellänge und Geschwindigkeit. Serielle
+ Verbindungen sind schwieriger zu konfigurieren und die
+ Verdrahtung unterscheidet sich zwischen den Modellen. Zudem
+ müssen Baudrate und Parität bekannt sein. Glücklicherweise
+ sind serielle Drucker selten geworden.</para>
</sect2>
</sect1>
- <sect1 xml:id="printing-advanced">
- <info><title>Erweiterte Drucker-Konfiguration</title>
- <authorgroup>
- <author><personname><firstname>Johann</firstname><surname>Kois</surname></personname><contrib>Übersetzt von </contrib></author>
- </authorgroup>
- </info>
-
-
-
- <para>Dieser Abschnitt beschreibt den Einsatz von Filtern für
- das Drucken speziell formatierter Seiten oder von
- Deckblättern, das Drucken über ein Netzwerk sowie die
- Beschränkung und Verrechnung der Druckernutzung.</para>
+ <sect1 xml:id="printing-pdls">
+ <title>Gebräuchliche Seitenbeschreibungssprachen</title>
- <sect2 xml:id="printing-advanced-filter-intro">
- <title>Filter</title>
- <indexterm>
- <primary>Drucken</primary>
- <secondary>Filter</secondary>
- </indexterm>
-
- <para>Obwohl <application>LPD</application> Netzwerkprotokolle,
- Warteschlangen, Zugriffskontrollen und andere für das
- Drucken wichtige Aspekte prinzipiell unterstützt, passiert
- ein Großteil der <emphasis>wirklichen</emphasis> Arbeit
- in den sogenannten <emphasis>Filtern</emphasis>. Dabei handelt
- es sich um Programme, die direkt mit einem Drucker kommunizieren
- und deren Gerätespezifika und spezielle Anforderungen
- erfüllen. Im einfachsten Fall installiert man nur einen reinen
- Textfilter, der mit beinahe allen Druckern funktionieren sollte.
- (Lesen Sie dazu auch den Abschnitt <link linkend="printing-textfilter">Den Text-Filter
- installieren</link>.)</para>
-
- <para>Um die erweiterten Fähigkeiten von Druckern auch
- einsetzen zu können, sollten Sie verstehen, wie Filter
- arbeiten, da diese für die Bereitstellung dieser Funktionen
- zuständig sind. Die schlechte Nachricht ist, dass
- <emphasis>Sie</emphasis> diese Filter bereitstellen müssen.
- Die gute Nachricht ist allerdings, dass diese in der Regel
- bereits vorhanden sind. Ist dies nicht der Fall, können
- Sie einen Filter meist relativ einfach selbst erstellen.</para>
-
- <para>Der Filter <filename>/usr/libexec/lpr/lpf</filename> wird
- bereits mit &os; geliefert. Er kümmert sich um die
- korrekte Behandlung von gelöschten Zeichen (das sogenannte
- <foreignphrase>Backspacing</foreignphrase>), um im Text
- enthaltene Tabulatoren, sowie um die Verrechnung von
- Druckaufträgen. Das ist aber auch alles, was dieser
- Filter kann. Zusätzliche Filter und für die Funktion
- von Filtern nötige Komponenten finden sich aber in der
- &os; Ports-Sammlung.</para>
+ <para>Daten, die an einen Drucker gesendet werden, müssen in einer
+ Sprache verfasst sein, die der Drucker verstehen kann. Diese
+ Sprachen werden Seitenbeschreibungssprachen oder
+ <foreignphrase>Page Description Languages</foreignphrase>
+ (<acronym>PDL</acronym>) genannt.</para>
- <para>Dieser Abschnitt behandelt folgende Themen:</para>
+ <variablelist>
+ <varlistentry xml:id="print-pdls-ascii">
+ <term><acronym>ASCII</acronym></term>
- <itemizedlist>
<listitem>
- <para>Der Abschnitt <link linkend="printing-advanced-filters">
- Die Funktionsweise von Filtern</link> versucht, einen
- Überblick über die Rolle von Filtern innerhalb des
- Druckprozesses zu geben. Sie sollten diesen Abschnitt lesen,
- damit Sie verstehen, was <quote>unter der Haube</quote>
- passiert, wenn <application>LPD</application> einen Filter
- verwendet. Dieses Wissen wird Ihnen dabei helfen, Probleme,
- die bei Installation von Filtern für verschiedene Drucker
- entstehen können, vorauszusehen und zu beheben.</para>
+ <para>Schlichter <acronym>ASCII</acronym>-Text ist die
+ einfachste Möglichkeit, um Daten an einen Drucker zu
+ senden. Die Zeichen werden eins zu eins gedruckt: ein
+ <literal>A</literal> in den Daten erscheint beim Druck als
+ <literal>A</literal> auf dem Papier. Eine Formatierung
+ ist nur bedingt verfügbar und es gibt keine Möglichkeit,
+ eine Schriftart oder eine bestimmte Laufweite zu wählen.
+ Die Einfachheit von schlichtem
+ <acronym>ASCII</acronym>-Text bedeutet, dass Text ohne
+ bzw. wenig Codierung oder Übersetzung gedruckt werden
+ kann. Die gedruckte Ausgabe entspricht dem, was an den
+ Drucker gesendet wurde.</para>
+
+ <para>Einige kostengünstige Drucker können keinen einfachen
+ <acronym>ASCII</acronym>-Text drucken. Das macht sie in
+ der Regel schwieriger einzurichten.</para>
</listitem>
+ </varlistentry>
- <listitem>
- <para><application>LPD</application> geht davon aus, dass
- jeder Drucker in der Lage ist, normalen Text zu drucken.
- Für &postscript;- (oder andere sprachbasierte) Drucker
- stellt dies allerdings ein Problem dar, da diese nicht in
- der Lage sind, normalen Text direkt zu drucken. Der
- Abschnitt <link linkend="printing-advanced-if-conversion">Normalen Text auf
- &postscript;-Druckern drucken</link> beschreibt, wie Sie
- dieses Problem lösen können. Besitzen Sie einen
- &postscript;-Drucker, sollten Sie diesen Abschnitt lesen.</para>
- </listitem>
-
- <listitem>
- <para>&postscript; ist ein populäres Ausgabeformat, das
- von vielen Programmen unterstützt wird. Es ist sogar
- möglich, &postscript;-Code direkt zu schreiben. Leider
- sind &postscript;-Drucker in der Regel relativ teuer. Der
- Abschnitt <link linkend="printing-advanced-ps">&postscript;
- auf Nicht-&postscript;-Druckern emulieren</link> beschreibt,
- wie Sie einen Textfilter anpassen müssen, um
- &postscript;-Daten auf einem
- <emphasis>nicht-&postscript;-fähigen Drucker</emphasis>
- auszugeben. Haben Sie keinen &postscript;-Drucker, sollten
- Sie insbesondere diesen Abschnitt lesen.</para>
- </listitem>
+ <varlistentry xml:id="print-pdls-postscript">
+ <term>&postscript;</term>
<listitem>
- <para>Der Abschnitt
- <link linkend="printing-advanced-convfilters">
- Konvertierungsfilter</link> beschreibt eine Möglichkeit
- zur automatischen Konvertierung verschiedener Dateiformate
- in ein von Ihrem Drucker unterstütztes Format. Nachdem
- Sie diesen Abschnitt gelesen haben, werden Sie in der Lage
- sein, Ihren Drucker so zu konfigurieren, dass Sie durch die
- Eingabe von <command>lpr -t</command> troff-Daten,
- von <command>lpr -d</command> &tex;-DVI-Daten,
- oder von <command>lpr -v</command> Rasterbilddaten
- drucken können.
- Daher sollten Sie diesen Abschnitt auf jeden Fall lesen.</para>
- </listitem>
+ <para>&postscript; ist fast das Gegenteil von
+ <acronym>ASCII</acronym>. Anstelle von einfachem Text,
+ besteht ein &postscript;-Programm aus einer Reihe von
+ Anweisungen, die das endgültige Dokument generieren. Es
+ können auch verschiedene Schriften und Grafiken benutzt
+ werden. Diese Fähigkeiten haben jedoch ihren Preis. Das
+ Programm, das die Seite generiert, muss zunächst erzeugt
+ werden. Normalerweise wird dieses Programm durch die
+ Anwendung erzeugt, so dass der Prozess für den Benutzer
+ transparent bleibt.</para>
- <listitem>
- <para>Im Abschnitt <link linkend="printing-advanced-of">
- Ausgabefilter</link> wird eine nur selten genutzte
- Eigenschaft von <application>LPD</application>, die
- sogenannten Ausgabefilter, beschrieben. Wenn Sie keine
- <link linkend="printing-advanced-header-pages">
- Deckblätter</link> drucken müssen, können
- Sie diesen Abschnitt überspringen.</para>
+ <para>Kostengünstige Drucker sind manchmal nicht kompatibel
+ mit &postscript;.</para>
</listitem>
+ </varlistentry>
+
+ <varlistentry xml:id="print-pdls-pcl">
+ <term><acronym>PCL</acronym> (Printer Command Language)</term>
<listitem>
- <para>Der Abschnitt <link linkend="printing-advanced-lpf">lpf:
- Ein Textfilter</link> beschreibt <command>lpf</command>,
- einen kompletten, wenn auch einfachen Textfilter für
- Zeilendrucker (oder auch Laserdrucker, die sich analog
- verhalten), der bereits mit &os; geliefert wird. Wenn
- Sie nur am Ausdruck von reinem Text interessiert sind, oder
- wenn Ihr Drucker nur <quote>Schrott</quote> produziert, wenn
- er auf Backspace-Zeichen trifft, sollten Sie sich
- <command>lpf</command> näher ansehen.</para>
+ <para><acronym>PCL</acronym> ist eine Erweiterung von
+ <acronym>ASCII</acronym>. Es enthält Escape-Sequenzen für
+ die Formatierung, Schriftauswahl und das Drucken von
+ Grafiken. Viele Drucker bieten Unterstützung für
+ <acronym>PCL5</acronym>, einige unterstützen auch das
+ neuere <acronym>PCL6</acronym> oder
+ <acronym>PCLXL</acronym>. Die neueren Versionen sind
+ Kombinationen von <acronym>PCL5</acronym> und bieten eine
+ schnellere Druckgeschwindigkeit.</para>
</listitem>
- </itemizedlist>
-
- <note>
- <para>Eine Kopie der verschiedenen Skripte finden Sie im
- Verzeichnis <filename>/usr/share/examples/printing</filename>.</para>
- </note>
-
- <sect3 xml:id="printing-advanced-filters">
- <title>Die Funktionsweise von Filtern</title>
-
- <para>Bei einem Filter handelt es sich um ein ausführbares
- Programm, das von <application>LPD</application> gestartet
- wird, um den geräteabhängigen Teil der Kommunikation
- mit einem Drucker zu übernehmen.</para>
-
- <para>Wenn <application>LPD</application> eine Datei über
- einen Druckauftrag drucken will, startet es ein Filterprogramm.
- Danach setzt es die Standardeingabe des Filters auf die zu
- druckende Datei, die Standardausgabe auf den Drucker und die
- Standardfehlerausgabe auf <filename>/dev/console</filename> (Voreinstellung) oder auf
- die über die Option <literal>lf</literal> in
- <filename>/etc/printcap</filename> festgelegte Datei.</para>
-
- <indexterm>
- <primary><command>troff</command></primary>
- </indexterm>
-
- <para>Welcher Filter von <application>LPD</application> mit
- welchen Argumenten geladen wird, wird in der Datei
- <filename>/etc/printcap</filename> oder durch die Argumente,
- die der Anwender &man.lpr.1; auf der Kommandozeile
- übergibt, festgelegt. Gibt der Anwender beispielsweise
- <command>lpr -t</command> ein, startet
- <application>LPD</application> über die
- <literal>tf</literal>-Fähigkeit den troff-Filter für
- den gewünschten Drucker. Wollen Sie hingegen normalen
- Text drucken, wird der <literal>if</literal>-Filter gestartet.
- (Für Ausnahmen von diesem Vorgehen lesen Sie bitte den
- Abschnitt <link linkend="printing-advanced-of">
- Ausgabefilter</link>.)</para>
-
- <para>Es gibt drei Arten von Filtern, die Sie in
- <filename>/etc/printcap</filename> angeben können:</para>
-
- <itemizedlist>
- <listitem>
- <para><emphasis>Textfilter</emphasis> (die in der
- <application>LPD</application>-Dokumentation als
- <emphasis>input filter</emphasis> bezeichnet werden) sind
- für den Druck von normalem Text zuständig.
- Es handelt sich dabei um eine Art Standardfilter, da
- <application>LPD</application> von jedem Drucker erwartet,
- dass er normalen Text drucken kann. Aufgabe des
- Textfilters ist es, sicherzustellen, dass gelöschte
- Zeichen (<foreignphrase>Backspaces</foreignphrase>),
- Tabulatoren und andere Sonderzeichen Ihren Drucker nicht
- verwirren. Falls Sie für die Nutzung eines Druckers
- bezahlen müssen, kann der Textfilter über die
- Anzahl der gedruckten Zeilen auch die Anzahl der von Ihnen
- gedruckten Seiten ermitteln. Der Textfilter wird mit
- folgenden Argumenten gestartet:</para>
-
- <cmdsynopsis>
- <command>filter-name</command>
- <arg>-c</arg>
- <arg choice="plain">-w <replaceable>width</replaceable></arg>
- <arg choice="plain">-l <replaceable>length</replaceable></arg>
- <arg choice="plain">-i <replaceable>indent</replaceable></arg>
- <arg choice="plain">-n <replaceable>login</replaceable></arg>
- <arg choice="plain">-h <replaceable>host</replaceable></arg>
- <arg choice="plain"><replaceable>acct-file</replaceable></arg>
- </cmdsynopsis>
-
- <para>Die einzelnen Argumente haben folgende Bedeutung:</para>
-
- <variablelist>
- <varlistentry>
- <term><option>-c</option></term>
-
- <listitem>
- <para>Notwendig, wenn <command>lpr
- -l</command> verwendet wird.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><replaceable>width</replaceable></term>
-
- <listitem>
- <para>Der Wert der in
- <filename>/etc/printcap</filename> festgelegten
- Option <literal>pw</literal> (<foreignphrase>page
- width</foreignphrase>). In der Voreinstellung
- ist dieser Wert auf 132 gesetzt.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><replaceable>length</replaceable></term>
-
- <listitem>
- <para>Der Wert der
- <literal>pl</literal>-Fähigkeit
- (<foreignphrase>page length</foreignphrase>),
- Voreinstellung 66.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><replaceable>indent</replaceable></term>
-
- <listitem>
- <para>Der durch <command>lpr
- -i</command> festgelegte Einzug,
- Voreinstellung 0.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><replaceable>login</replaceable></term>
-
- <listitem>
- <para>Der Name des Benutzers, der die Datei
- druckt.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><replaceable>host</replaceable></term>
-
- <listitem>
- <para>Der Rechner, auf dem der Druckauftrag
- gestartet wurde.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><replaceable>acct-file</replaceable></term>
-
- <listitem>
- <para>Der Name der Verrechnungsdatei, in der die
- Ergebnisse der
- <literal>af</literal>-Fähigkeit gespeichert
- werden.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </listitem>
-
- <listitem>
- <para>Ein
- <emphasis>Konvertierungsfilter</emphasis><indexterm><primary>Drucken</primary><secondary>Filter</secondary></indexterm>
- konvertiert verschiedene Dateiformate in ein Format, das
- Ihr Drucker auf Papier ausgeben kann. So kann etwa der
- ditroff-Schriftsatz nicht direkt gedruckt werden, daher
- müssen Sie einen Konvertierungsfilter installieren, um
- diese Daten in ein Format zu bringen, das Ihr Drucker
- verarbeiten und drucken kann. Der Abschnitt <link
- linkend="printing-advanced-convfilters">
- Konvertierungsfilter</link> enthält ausführliche
- Informationen zu diesen Filtern. Konvertierungsfilter
- können auch zur Verrechnung verwendet werden. Sie
- werden mit folgenden Argumenten gestartet:</para>
-
- <cmdsynopsis>
- <command>filter-name</command>
- <arg choice="plain">-x <replaceable>pixel-width</replaceable></arg>
- <arg choice="plain">-y <replaceable>pixel-height</replaceable></arg>
- <arg choice="plain">-n <replaceable>login</replaceable></arg>
- <arg choice="plain">-h <replaceable>host</replaceable></arg>
- <arg choice="plain"><replaceable>acct-file</replaceable></arg>
- </cmdsynopsis>
-
- <para><replaceable>pixel-width</replaceable> ist der Wert
- der <literal>px</literal>-Fähigkeit (Voreinstellung 0),
- während <replaceable>pixel-height</replaceable> dem Wert
- der <literal>py</literal>-Fähigkeit (Voreinstellung
- ebenfalls 0) entspricht.</para>
- </listitem>
-
- <listitem>
- <para><emphasis>Ausgabefilter</emphasis> werden nur verwendet, wenn
- keine Textfilter vorhanden sind oder wenn Deckblätter
- benötigt werden. Der Abschnitt <link linkend="printing-advanced-of">Ausgabefilter</link>
- enthält weitere Informationen. Ausgabefilter
- unterstützen nur zwei Argumente:</para>
-
- <cmdsynopsis>
- <command>filter-name</command>
- <arg choice="plain">-w <replaceable>width</replaceable></arg>
- <arg choice="plain">-l <replaceable>length</replaceable></arg>
- </cmdsynopsis>
-
- <para>Beide Argumente entsprechen den Optionen
- <option>-w</option> und <option>-l</option> der
- Textfilter.</para>
- </listitem>
- </itemizedlist>
-
- <para>Alle Filter sollten mit folgenden Rückgabewerten
- (Exitcodes) <emphasis>beendet</emphasis> werden:</para>
-
- <variablelist>
- <varlistentry>
- <term>exit 0</term>
-
- <listitem>
- <para>Der Filter hat die Datei erfolgreich gedruckt.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>exit 1</term>
-
- <listitem>
- <para>Der Filter war nicht in der Lage, die Datei zu
- drucken und meldet diesen Exitcode an
- <application>LPD</application>, um die Datei erneut
- zu drucken. <application>LPD</application> startet
- daraufhin den Filter erneut.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>exit 2</term>
-
- <listitem>
- <para>Der Filter war nicht in der Lage, die Datei zu
- drucken. Bei diesem Exitcode soll
- <application>LPD</application> aber nicht versuchen,
- die Datei erneut zu drucken, sondern den Druckauftrag
- verwerfen.</para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- <para><filename>/usr/libexec/lpr/lpf</filename>, der mit &os;
- gelieferte Textfilter, nutzt die Argumente <foreignphrase>page
- width</foreignphrase> und <foreignphrase>page
- length</foreignphrase>, um festzulegen, wann ein Seitenumbruch
- (<foreignphrase>form feed</foreignphrase>) gesendet werden
- soll sowie zur Verrechnung von Druckaufträgen. Dazu werden
- der Benutzername, der für den Druckauftrag verwendete
- Rechner sowie die Verrechnungsdatei ausgewertet, um die
- entsprechenden Einträge zu erstellen.</para>
-
- <para>Wenn Sie auf der Suche nach Filtern sind, achten Sie
- darauf, dass diese LPD-kompatibel sind. Dazu müssen
- diese die oben beschriebenen Argumente unterstützen.
- Wenn Sie planen, Ihre Filter selbst zu erstellen, müssen
- diese ebenfalls die gleichen Argumente und Exitcodes
- unterstützen.</para>
- </sect3>
-
- <sect3 xml:id="printing-advanced-if-conversion">
- <title>Normalen Text auf &postscript;-Druckern drucken</title>
-
- <indexterm><primary>Druckjob</primary></indexterm>
-
- <para>Sie sind der alleinige Benutzer Ihres Computers und Ihres
- &postscript;-Druckers und Sie sind sich sicher, dass Sie
- niemals normalen Text an Ihren Drucker senden werden?
- Außerdem werden Sie niemals ein Programm verwenden,
- um normalen Text auszudrucken? Nur wenn dies alles zutrifft,
- können Sie diesen Abschnitt überspringen.</para>
-
- <para>Wollen Sie allerdings sowohl &postscript; als auch
- normalen Text drucken, müssen Sie Ihren Drucker zuvor
- entsprechend konfigurieren. Dazu muss Ihr Textfilter in der
- Lage sein, zu unterscheiden, ob es sich bei einem ankommenden
- Druckauftrag um normalen Text oder um &postscript;-Daten
- handelt. Jeder &postscript;-Druckauftrag muss mit den Zeichen
- <literal>%!</literal> beginnen (sehen Sie in Ihrem
- Druckerhandbuch nach, ob Ihr Drucker weitere Sprachen
- unterstützt). Sind dies die beiden ersten Zeichen eines
- Druckauftrages, so handelt es sich um &postscript;-Daten, die
- direkt gedruckt werden können. Fehlen diese Zeichen allerdings,
- muss der Textfilter den Inhalt der Datei nach &postscript;
- konvertieren, bevor die Datei gedruckt werden kann.</para>
-
- <para>Wie funktioniert diese Unterscheidung?</para>
-
- <indexterm>
- <primary>Drucker</primary>
- <secondary>seriell</secondary>
- </indexterm>
-
- <para>Haben Sie einen seriellen Drucker, können Sie
- <command>lprps</command> installieren.
- <command>lprps</command> ist ein &postscript;-Druckerfilter,
- der eine Zweiwegekommunikation mit einem Drucker
- ermöglicht. Er aktualisiert die Druckerstatusdatei mit
- Protokollinformationen des Druckers. Dadurch sind Anwender
- und Administratoren in der Lage, den genauen Zustand des
- Druckers zu prüfen (durch Meldungen wie <errorname>toner
- low</errorname> oder <errorname>paper jam</errorname>).
- Wichtiger ist allerdings, dass <command>lprps</command>
- <command>psif</command> enthält, ein Programm, das
- feststellen kann, ob ein ankommender Druckauftrag normalen
- Text enthält. Ist dies der Fall, wird
- <command>textps</command> (das ebenfalls mit
- <command>lprps</command> geliefert wird) aufgerufen und die
- Datei nach &postscript; konvertiert. Danach kann
- <command>lprps</command> die Datei an den Drucker senden.</para>
-
- <para><command>lprps</command> ist in der &os;
- <link linkend="ports">Ports-Sammlung</link> enthalten. Je
- nach der von Ihnen verwendeten Papiergröße
- installieren Sie dazu den Port <package>print/lprps-a4</package> oder <package>print/lprps-letter</package>. Nach
- der Installation müssen Sie nur noch den Pfad zum
- Programm <command>psif</command> angeben, das als Teil von
- <command>lprps</command> installiert wird. Haben Sie
- <command>lprps</command> über die Ports-Sammlung installiert,
- fügen Sie folgende Zeile in den Eintrag Ihres
- &postscript;-Druckers in
- <filename>/etc/printcap</filename> ein:</para>
-
- <programlisting>:if=<filename>/usr/local/libexec/psif</filename>:</programlisting>
-
- <para>Zusätzlich sollten Sie die
- <literal>rw</literal>-Fähigkeit aktivieren, um
- <application>LPD</application> im Schreib- und Lesemodus
- zu öffnen.</para>
-
- <para>Haben Sie hingegen einen parallelen &postscript;-Drucker,
- was eine Zweiwegekommunikation mit Ihrem Drucker (auf die
- <command>lprps</command> angewiesen ist) unmöglich
- macht, können Sie das folgende Shell-Skript verwenden:</para>
-
- <programlisting>#!/bin/sh
-#
-# psif - Drucke PostScript oder normalen Text auf einem PostScript-Drucker
-# Script-Version; das ist NICHT die mit lprps gelieferte Version!
-# Installiert unter: /usr/local/libexec/psif
-#
-
-IFS="" read -r first_line
-first_two_chars=`expr "$first_line" : '\(..\)'`
-
-if [ "$first_two_chars" = "%!" ]; then
- #
- # PostScript - einfach drucken.
- #
- echo "$first_line" &amp;&amp; cat &amp;&amp; printf "\004" &amp;&amp; exit 0
- exit 2
-else
- #
- # Normaler Text - zuerst konvertieren, dann drucken.
- #
- ( echo "$first_line"; cat ) | /usr/local/bin/textps &amp;&amp; printf "\004" &amp;&amp; exit 0
- exit 2
-fi </programlisting>
-
- <para>Für dieses Skript wurde <command>textps</command>
- als seperates Programm installiert, um normalen Text nach
- &postscript; zu konvertieren. Sie können aber auch jeden
- anderen Text-nach-&postscript;-Konverter verwenden. Die
- &os; <link linkend="ports">Ports-Sammlung</link>
- enthält mit <literal>a2ps</literal> ein umfangreiches
- Programm zur Konvertierung von normalem Text nach
- &postscript;.</para>
- </sect3>
-
- <sect3 xml:id="printing-advanced-ps">
- <title>&postscript; auf Nicht-&postscript;-Druckern emulieren</title>
-
- <indexterm>
- <primary>PostScript</primary>
- <secondary>Emulation</secondary>
- </indexterm>
- <indexterm>
- <primary>Ghostscript</primary></indexterm>
-
- <para>Bei &postscript; handelt es sich um den
- <emphasis>de facto</emphasis>-Standard für hochwertigen
- Schriftsatz und Druck. Leider ist &postscript; aber auch ein
- <emphasis>teurer</emphasis> Standard. Glücklicherweise
- hat Aladdin Enterprises daher eine freie
- &postscript;-ähnliche Implementierung namens
- <application>Ghostscript</application> entwickelt, die auch
- unter &os; lauffähig ist.
- <application>Ghostscript</application> kann fast jede
- &postscript;-Datei lesen und auf den verschiedensten
- Geräten ausgeben, darunter auch auf vielen
- Nicht-&postscript;-Druckern. Durch die Installation von
- <application>Ghostscript</application> und die Nutzung eines
- speziellen Textfilters erreichen Sie, dass sich Ihr
- Nicht-&postscript;-Drucker wie ein echter &postscript;-Drucker
- verhält.</para>
-
- <para><application>Ghostscript</application> ist in
- verschiedenen Versionen in der &os; Ports-Sammlung enhalten,
- die am häfigsten verwendete Version ist <package>print/ghostscript-gpl</package>.</para>
-
- <para>Um &postscript; zu emulieren, muss der Textfilter erkennen, ob er
- eine &postscript;-Datei drucken soll. Ist dies nicht der Fall, wird
- die Datei direkt an den Drucker geschickt. Anderenfalls wird die
- Datei an <application>Ghostscript</application> übergeben, das
- die Datei in ein Format konvertiert, das Ihr Drucker versteht.</para>
-
- <para>Dazu ein Beispiel. Das folgende Skript ist ein Textfilter
- für den Drucker DeskJet 500 von Hewlett Packard. Nutzen
- Sie einen anderen Drucker, müssen Sie die Option
- <option>-sDEVICE</option> beim Aufruf von <command>gs</command>
- (Ghostscript) entsprechend anpassen. Eine Liste der von
- <application>Ghostscript</application> unterstützten
- Geräte erhalten Sie durch die Eingabe von
- <command>gs -h</command> auf der
- Kommandozeile.</para>
-
- <programlisting>#!/bin/sh
-#
-# ifhp - Ghostscript-emuliertes PostScript auf einem HP DeskJet 500 drucken
-# Installiert unter: /usr/local/libexec/ifhp
-
-#
-# LF als CR+LF behandeln (um einen "Treppeneffekt" auf HP/PCL-Drucker
-# zu vermeiden)
-#
-printf "\033&amp;k2G" || exit 2
-
-#
-# Lies die ersten zwei Zeichen der Datei
-#
-IFS="" read -r first_line
-first_two_chars=`expr "$first_line" : '\(..\)'`
-
-if [ "$first_two_chars" = "%!" ]; then
- #
- # Oh. Es ist PostScript; mit Ghostscript konvertieren, danach drucken.
- #
- /usr/local/bin/gs -dSAFER -dNOPAUSE -q -sDEVICE=djet500 \
- -sOutputFile=- - &amp;&amp; exit 0
-else
- #
- # Normaler Text oder HP/PCL, einfach direkt drucken. Ans Ende setzen wir
- # einen Seitenumbruch (also ein Form Feed), damit auch die letzte Seite
- # ausgeworfen wird.
- #
- echo "$first_line" &amp;&amp; cat &amp;&amp; printf "\033&amp;l0H" &amp;&amp;
-exit 0
-fi
-
-exit 2</programlisting>
-
- <para>Zuletzt müssen Sie <application>LPD</application>
- noch durch die <literal>if</literal>-Fähigkeit über
- den neuen Filter informieren:</para>
-
- <programlisting>:if=<filename>/usr/local/libexec/ifhp</filename>:</programlisting>
-
- <para>Das ist alles. Ab sofort sollte sowohl ein <command>lpr
- normaler.text</command>
- als auch ein <command>lpr wasauchimmer.ps</command>
- funktionieren und beide Dateien sollten problemlos gedruckt
- werden.</para>
- </sect3>
-
- <sect3 xml:id="printing-advanced-convfilters">
- <title>Konvertierungsfilter</title>
+ </varlistentry>
- <para>Nachdem Sie Ihren Drucker wie unter <link linkend="printing-simple">Einfache Drucker-Konfiguration</link>
- eingerichtet haben, wollen Sie wahrscheinlich einige
- Konvertierungsfilter installieren, damit Sie (abgesehen von
- ASCII-Text) auch Ihre Lieblings-Dateiformate drucken
- können.</para>
-
- <sect4>
- <title>Warum sollte ich einen Konvertierungsfilter
- installieren?</title>
-
- <indexterm>
- <primary>&tex;</primary>
- <secondary>DVI-Dateien drucken</secondary>
- </indexterm>
-
- <para>Konvertierungsfilter erleichtern das Drucken von
- verschiedenen Dateiformaten. Nehmen wir beispielsweise an,
- dass Sie sehr viel mit dem &tex;-Satzsystem arbeiten und
- über einen &postscript;-Drucker verfügen. Eine
- vom &tex;-System erzeugte DVI-Datei kann erst dann gedruckt
- werden, nachdem diese nach &postscript; konvertiert wurde.
- Dazu geben Sie Folgendes ein:</para>
-
- <screen>&prompt.user; <userinput>dvips seaweed-analysis.dvi</userinput>
-&prompt.user; <userinput>lpr seaweed-analysis.ps</userinput></screen>
-
- <para>Haben Sie einen Konvertierungsfilter für DVI-Dateien
- installiert, können Sie die manuelle Konvertierung
- überspringen, da dies nun <application>LPD</application>
- für Sie erledigt. Wollen Sie eine DVI-Datei drucken, geben
- Sie nur noch den folgenden Befehl ein:</para>
-
- <screen>&prompt.user; <userinput>lpr -d seaweed-analysis.dvi</userinput></screen>
-
- <para>Durch die Verwendung der Option <option>-d</option>
- wurde <application>LPD</application> angewiesen, unsere
- DVI-Datei vor dem Druck zu konvertieren. Der Abschnitt
- <link linkend="printing-lpr-options-format">Formatierungs-
- und Konvertierungsoptionen</link> beschreibt die dabei
- möglichen Optionen.</para>
-
- <para>Für jede Konvertierungsoption, die Ihr Drucker
- unterstützen soll, müssen Sie einen eigenen
- <emphasis>Konvertierungsfilter</emphasis> installieren und
- dessen Pfad in der Datei <filename>/etc/printcap</filename>
- angeben. Ein Konvertierungsfilter verhält sich im
- Prinzip wie ein Textfilter bei einer einfachen
- Druckerkonfiguration (lesen Sie dazu auch den Abschnitt <link linkend="printing-textfilter">Den Textfilter installieren</link>),
- allerdings konvertiert er die Datei in ein Format, das Ihr Drucker
- versteht, anstatt normalen Text zu drucken.</para>
- </sect4>
-
- <sect4>
- <title>Welche Konvertierungsfilter sollte ich installieren?</title>
-
- <para>Sie sollten nur Filter installieren, die Sie auch
- benötigen. Wenn Sie sehr viele DVI-Dateien drucken,
- sollten Sie auch einen DVI-Konvertierungsfilter installieren.
- Müssen Sie viele troff-Daten drucken, ist ein troff-Filter
- hilfreich.</para>
-
- <para>Die folgende Tabelle listet die von
- <application>LPD</application> unterstützten Filter
- sowie die Einträge in <filename>/etc/printcap</filename> auf,
- mit denen Sie diese Fähigkeiten aktivieren. Zusätzlich
- wird angegeben, wie Sie <command>lpr</command> jeweils
- aufrufen müssen:</para>
-
- <informaltable frame="none" pgwide="1">
- <tgroup cols="3">
- <thead>
- <row>
- <entry>Dateityp</entry>
- <entry><filename>/etc/printcap</filename>-Fähigkeit</entry>
- <entry><command>lpr</command>-Option</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry>cifplot</entry>
- <entry><literal>cf</literal></entry>
- <entry><option>-c</option></entry>
- </row>
-
- <row>
- <entry>DVI</entry>
- <entry><literal>df</literal></entry>
- <entry><option>-d</option></entry>
- </row>
-
- <row>
- <entry>plot</entry>
- <entry><literal>gf</literal></entry>
- <entry><option>-g</option></entry>
- </row>
-
- <row>
- <entry>ditroff</entry>
- <entry><literal>nf</literal></entry>
- <entry><option>-n</option></entry>
- </row>
-
- <row>
- <entry>FORTRAN-Text</entry>
- <entry><literal>rf</literal></entry>
- <entry><option>-f</option></entry>
- </row>
-
- <row>
- <entry>troff</entry>
- <entry><literal>tf</literal></entry>
- <entry><option>-f</option></entry>
- </row>
-
- <row>
- <entry>Rasterdaten</entry>
- <entry><literal>vf</literal></entry>
- <entry><option>-v</option></entry>
- </row>
-
- <row>
- <entry>Normaler Text</entry>
- <entry><literal>if</literal></entry>
- <entry>keine, <option>-p</option>, or
- <option>-l</option></entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>Wollen Sie also <command>lpr -d</command>
- verwenden, muss die <literal>df</literal>-Fähigkeit in
- <filename>/etc/printcap</filename> aktiviert sein.</para>
-
- <indexterm><primary>FORTRAN</primary></indexterm>
-
- <para>Obwohl manche Leute etwas anderes behaupten, sind
- Formate wie FORTRAN-Text und -Plot inzwischen nahezu
- obsolet. Wenn Sie diese Formate dennoch benötigen,
- installieren Sie einfach einen angepassten Filter. Wollen
- Sie beispielsweise zwar Printerleaf-Dateien (also Dateien des
- Desktop Publishing-Programms von Interleaf), aber keine
- Plotdateien drucken, so können Sie einen
- Printerleaf-Konvertierungsfilter installieren, der es durch
- die Aktivierung der <literal>gf</literal>-Fähigkeit
- erlaubt, diese Dateien direkt zu drucken. Nun müssen
- Sie Ihren Mitarbeitern nur noch mitteilen, dass
- <command>lpr -g</command> nun für
- <quote>drucke Printerleaf-Dateien</quote> steht.</para>
- </sect4>
-
- <sect4>
- <title>Konvertierungsfilter installieren</title>
-
- <para>Da Konvertierungsfilter nicht zum Basissystem von &os;
- gehören, sollten diese unter <filename>/usr/local</filename> installiert werden.
- Häufig wird das Verzeichnis <filename>/usr/local/libexec</filename> verwendet, da es
- sich bei Konvertierungsfiltern um spezielle Programme
- handelt, die nur von <application>LPD</application>, aber
- nicht von einem normalen Benutzer gestartet werden.</para>
-
- <para>Um einen Konvertierungsfilter zu aktivieren, müssen
- Sie dessen Pfad zusätzlich zur benötigten Fähigkeit
- in der Datei <filename>/etc/printcap</filename> eintragen.</para>
-
- <para>In unserem Beispiel wollen wir einen
- DVI-Konvertierungsfilter für den Drucker
- <literal>bamboo</literal> installieren. Unsere bereits
- bekannte <filename>/etc/printcap</filename> wurde
- allerdings um die <literal>df</literal>-Fähigkeit
- für den Drucker <literal>bamboo</literal> erweitert:</para>
+ <varlistentry xml:id="print-pdls-host-based">
+ <term>Host-basiert</term>
- <programlisting>#
-# /etc/printcap des Rechners rose - neuer df-Filter für bamboo
-#
-rattan|line|diablo|lp|Diablo 630 Line Printer:\
- :sh:sd=<filename>/var/spool/lpd/rattan</filename>:\
- :lp=<filename>/dev/lpt0</filename>:\
- :if=<filename>/usr/local/libexec/if-simple</filename>:
-
-bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
- :sh:sd=<filename>/var/spool/lpd/bamboo</filename>:\
- :lp=<filename>/dev/ttyu5</filename>:ms#-parenb cs8 clocal crtscts:rw:\
- :if=<filename>/usr/local/libexec/psif</filename>:\
- :df=<filename>/usr/local/libexec/psdf</filename>:</programlisting>
+ <listitem>
+ <para>Hersteller können die Kosten eines Druckers
+ reduzieren, indem sie einen einfachen Prozessor und etwas
+ Speicher verbauen. Diese Drucker sind nicht in der Lage
+ normalen Text zu drucken. Stattdessen werden die Texte
+ und Grafiken von einem Treiber auf dem Host-Rechner
+ generiert und dann an den Drucker gesendet. Diese Drucker
+ werden Host-basierte Drucker genannt.</para>
+
+ <para>Die Kommunikation zwischen dem Treiber und dem Drucker
+ wird oft durch proprietäre oder nicht dokumentierte
+ Protokolle realisiert, weshalb sie nur mit den gängigsten
+ Betriebssystemen funktionieren.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
- <para>Beim DVI-Filter handelt es sich um ein Shell-Skript
- namens <filename>/usr/local/libexec/psdf</filename>:</para>
+ <sect2 xml:id="print-pdls-table">
+ <title>&postscript; in eine andere Sprache konvertieren</title>
- <programlisting>#!/bin/sh
-#
-# psdf - DVI-nach-PostScript Druckerfilter
-# Installiert unter: /usr/local/libexec/psdf
-#
-# Wird von lpd aktiviert, wenn der Nutzer lpr -d eingibt.
-#
-exec /usr/local/bin/dvips -f | /usr/local/libexec/lprps "$@"</programlisting>
+ <para>Viele Anwendungen aus der Ports-Sammlung und &os;
+ Werkzeuge können &postscript; erzeugen. Die folgende Tabelle
+ listet die verfügbaren Programme, um &postscript; in andere
+ <acronym>PDL</acronym>s zu konvertieren:</para>
+
+ <table xml:id="printing-pdls-ps-to-other-tbl">
+ <title>Ausgabe <acronym>PDL</acronym>s</title>
+
+ <tgroup cols="3" align="left">
+ <thead>
+ <row>
+ <entry align="left">Ausgabe
+ <acronym>PDL</acronym></entry>
+ <entry align="left">Generiert von</entry>
+ <entry align="left">Hinweis</entry>
+ </row>
+ </thead>
+
+ <tbody>
+ <row>
+ <entry><acronym>PCL</acronym> oder
+ <acronym>PCL5</acronym></entry>
+ <entry><package>print/ghostscript9</package></entry>
+ <entry><literal>-sDEVICE=ljet4</literal> für
+ Schwarzweiß, <literal>-sDEVICE=cljet5</literal> für
+ Farbe</entry>
+ </row>
+
+ <row>
+ <entry><acronym>PCLXL</acronym> oder
+ <acronym>PCL6</acronym></entry>
+ <entry><package>print/ghostscript9</package></entry>
+ <entry><literal>-sDEVICE=pxlmono</literal> für
+ Schwarzweiß, <literal>-sDEVICE=pxlcolor</literal> für
+ Farbe</entry>
+ </row>
+
+ <row>
+ <entry><acronym>ESC/P2</acronym></entry>
+ <entry><package>print/ghostscript9</package></entry>
+ <entry><literal>-sDEVICE=uniprint</literal></entry>
+ </row>
+
+ <row>
+ <entry><acronym>XQX</acronym></entry>
+ <entry><package>print/foo2zjs</package></entry>
+ <entry/>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </sect2>
- <para>Dieses Skript startet <command>dvips</command> im
- Filtermodus (durch das Argument <option>-f</option> wird der
- Druckauftrag über die Standardeingabe entgegengenommen).
- Danach wird der &postscript;-Druckerfilter
- <command>lprps</command> (lesen Sie dazu auch den Abschnitt <link linkend="printing-advanced-if-conversion">Drucken von reinen
- Textdateien auf einem &postscript;-Drucker</link>) mit den von
- <application>LPD</application> übergebenen Argumenten
- gestartet. Das <command>lprps</command>-Werkzeug wiederum nutzt
- diese Argumente, um die gedruckten Seiten zu verrechnen.</para>
- </sect4>
-
- <sect4>
- <title>Beispiele für Konvertierungsfilter</title>
-
- <para>Da es keine verbindliche Prozedur zur Installation eines
- Druckerfilters gibt, folgen nun weitere Beispiele in diesem
- Abschnitt. Verwenden Sie diese, um Ihre eigenen Filter zu
- erstellen. Falls ein Filter Ihren Anforderungen bereits
- entspricht, können Sie ihn auch direkt verwenden.</para>
-
- <para>Das erste Beispiel beschreibt einen Konvertierungsfilter
- für GIF-Dateien für den Drucker LaserJet III-Si von
- Hewlett Packard:</para>
+ <sect2 xml:id="print-pdls-summary">
+ <title>Zusammenfassung</title>
- <programlisting>#!/bin/sh
-#
-# hpvf - Konvertiert GIF-Dateien nach HP/PCL, danach wird gedruckt.
-# Installiert unter: /usr/local/libexec/hpvf
+ <para>Um die Konfiguration einfach zu halten, wählen Sie einen
+ Drucker, der &postscript; oder auch <acronym>PCL</acronym>
+ unterstützt. Mit <package>print/ghostscript</package> können
+ diese Drucker &postscript; nativ verstehen. Wenn der Drucker
+ &postscript; oder <acronym>PCL</acronym> direkt unterstützt,
+ können Sie auch sofort einfache
+ <acronym>ASCII</acronym>-Textdateien drucken.</para>
+
+ <para>Zeilenbasierte Drucker wie Tintenstrahldrucker
+ unterstützen in der Regel kein &postscript; oder
+ <acronym>PCL</acronym>. Dennoch können Sie
+ <acronym>ASCII</acronym>-Textdateien drucken.
+ <package>print/ghostscript</package> unterstützt die Sprachen
+ dieser Drucker. Jedoch ist der Druck von Grafiken auf diesen
+ Druckern oft sehr langsam, da aufgrund der großen Menge an
+ Daten übertragen und ausgedruckt werden müssen.</para>
+
+ <para>Host-basierte Drucker sind oft schwieriger einzurichten.
+ Einige Drucker können überhaupt nicht benutzt werden, da sie
+ proprieräte <acronym>PDL</acronym>s verwerden. Solche
+ Drucker sollten Sie nach Möglichkeit vermeiden.</para>
+
+ <para>Die Beschreibungen vieler <acronym>PDL</acronym>s finden
+ Sie auf <link
+ xlink:href="http://www.undocprint.org/formats/page_description_languages"></link>.
+ Spezielle <acronym>PDL</acronym>s, die von einigen Druckern
+ verwendet werden finden Sie auf <link
+ xlink:href="http://www.openprinting.org/printers"></link>.</para>
+ </sect2>
+ </sect1>
-PATH=/usr/X11R6/bin:$PATH; export PATH
-giftopnm | ppmtopgm | pgmtopbm | pbmtolj -resolution 300 \
- &amp;&amp; exit 0 \
- || exit 2</programlisting>
-
- <para>Dieser Filter konvertiert eine GIF-Datei in eine portable
- Anymap, diese in ein portables Graustufenbild, dieses wiederum in
- eine portable Bitmap, die schließlich in ein
- LaserJet/PCL-kompatibles Format umgewandelt wird.</para>
+ <sect1 xml:id="printing-direct">
+ <title>Direktes Drucken</title>
- <para><filename>/etc/printcap</filename> muss für einen Drucker,
- der diesen Filter nutzen will, folgenden Eintrag enthalten:</para>
+ <para>Für den gelegentlichen Druck können die Dateien auch direkt,
+ ohne zusätzliche Einstellungen, an den Drucker gesendet werden.
+ Zum Beispiel kann die Datei <filename>sample.txt</filename>
+ direkt an einen <acronym>USB</acronym>-Drucker gesendet
+ werden:</para>
+
+ <screen>&prompt.root; <userinput>cp sample.txt /dev/unlpt0</userinput></screen>
+
+ <para>Ob Sie direkt auf einen Netzwerkdrucker drucken können,
+ hängt von den Fähigkeiten des Druckers ab. Die meisten
+ akzeptieren jedoch Druckaufträge auf Port 9100, die Sie mit
+ &man.nc.1; an den Drucker senden können. So drucken Sie die
+ gleiche Datei auf einem Drucker mit dem
+ <acronym>DNS</acronym>-Namen
+ <replaceable>netlaser</replaceable>:</para>
- <programlisting>#
-# /etc/printcap des Rechners orchid
-#
-teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
- :lp=<filename>/dev/lpt0</filename>:sh:sd=<filename>/var/spool/lpd/teak</filename>:mx#0:\
- :if=<filename>/usr/local/libexec/hpif</filename>:\
- :vf=<filename>/usr/local/libexec/hpvf</filename>:</programlisting>
-
- <para>Das folgende Skript ist ein Konvertierungsfilter, der
- das Drucken von troff-Daten des groff-Textsatzsystems
- auf dem &postscript;-Drucker <literal>bamboo</literal>
- ermöglicht:</para>
+ <screen>&prompt.root; <userinput>nc <replaceable>netlaser</replaceable> 9100 &lt; sample.txt</userinput></screen>
+ </sect1>
- <programlisting>#!/bin/sh
-#
-# pstf - Konvertiert groff's troff-Daten nach PS, dann wird gedruckt.
-# Installiert unter: /usr/local/libexec/pstf
-#
-exec grops | /usr/local/libexec/lprps "$@"</programlisting>
+ <sect1 xml:id="printing-lpd">
+ <title><acronym>LPD</acronym> (Line Printer Daemon)</title>
- <para>Dieses Skript nutzt wiederum <command>lprps</command>,
- um mit dem Drucker zu kommunizieren. Wäre der Drucker
- an einem parallelen Port angeschlossen, würde das Skript
- so aussehen:</para>
+ <para>Drucken im Hintergrund wird <emphasis>Spooling</emphasis>
+ 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.</para>
+
+ <para>&os; enthält den Spooler namens &man.lpd.8;. Druckaufträge
+ werden mit &man.lpr.1; übermittelt.</para>
+
+ <sect2 xml:id="printing-lpd-setup">
+ <title>Konfiguration</title>
+
+ <para>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:</para>
+
+ <screen>&prompt.root; <userinput>mkdir -p /var/spool/lpd/lp</userinput>
+&prompt.root; <userinput>chown daemon:daemon /var/spool/lpd/lp</userinput>
+&prompt.root; <userinput>chmod 770 /var/spool/lpd/lp</userinput></screen>
+
+ <para>Drucker werden in <filename>/etc/printcap</filename>
+ angelegt. Ein Eintrag für einen Drucker enthält dessen Name,
+ Anschluss sowie weitere Einstellungen. Erstellen Sie
+ <filename>/etc/printcap</filename> mit folgendem
+ Inhalt:</para>
+
+ <programlisting>lp:\ <co xml:id="printing-lpd-co-name"/>
+ :lp=/dev/unlpt0:\ <co xml:id="printing-lpd-co-device"/>
+ :sh:\ <co xml:id="printing-lpd-co-header"/>
+ :mx#0:\ <co xml:id="printing-lpd-co-mx"/>
+ :sd=/var/spool/lpd/lp:\ <co xml:id="printing-lpd-co-sd"/>
+ :lf=/var/log/lpd-errs: <co xml:id="printing-lpd-co-lf"/></programlisting>
+
+ <calloutlist>
+ <callout arearefs="printing-lpd-co-name">
+ <para>Der Name des Druckers. &man.lpr.1; sendet
+ Druckaufträge an den Drucker <literal>lp</literal>, es sei
+ denn, ein anderer Drucker wird mit der Option
+ <option>-P</option> angegeben. Der Standarddrucker sollte
+ also <literal>lp</literal> genannt werden.</para>
+ </callout>
+
+ <callout arearefs="printing-lpd-co-device">
+ <para>Der Anschluss, über den der Drucker verbunden ist.
+ Ersetzen Sie diese Zeile mit dem entsprechenden, hier
+ aufgeführten Verbindungstyp.</para>
- <programlisting>#!/bin/sh
-#
-# pstf - Konvertiert groff's troff-Daten nach PS, danach wird gedruckt.
-# Installiert unter: /usr/local/libexec/pstf
-#
-exec grops</programlisting>
+ <informaltable xml:id="printing-lpd-co-devices-tbl">
+ <tgroup cols="2">
+ <thead>
+ <row>
+ <entry>Verbindungstyp</entry>
+ <entry>Gerätename in
+ <filename>/etc/printcap</filename></entry>
+ </row>
+ </thead>
- <para>Das ist alles. Um den Filter verwenden zu können,
- müssen Sie ihn allerdings noch in
- <filename>/etc/printcap</filename> aktivieren:</para>
+ <tbody>
+ <row>
+ <entry><acronym>USB</acronym></entry>
+ <entry><programlisting>:lp=/dev/unlpt0:\</programlisting>
- <programlisting>:tf=<filename>/usr/local/libexec/pstf</filename>:</programlisting>
+ <para>Der <acronym>USB</acronym>-Drucker. Falls
+ Probleme auftauchen, verwenden Sie stattdessen
+ <filename>ulpt0</filename>, das den
+ <acronym>USB</acronym>-Anschluss nach jedem
+ Gebrauch zurücksetzt.</para></entry>
+ </row>
- <para>Das nächste Skript ist ein FORTRAN-Textfilter
- für jeden Drucker, der normalen Text direkt drucken
- kann und der hier für den Drucker
- <literal>teak</literal> installiert wird:</para>
+ <row>
+ <entry>Parallel</entry>
+ <entry><programlisting>:lp=/dev/lpt0:\</programlisting></entry>
+ </row>
- <programlisting>#!/bin/sh
-#
-# hprf - FORTRAN-Textfilter für den Drucker LaserJet 3si:
-# Installiert unter: /usr/local/libexec/hprf
-#
+ <row>
+ <entry>Netzwerk</entry>
+ <entry><para>Für einen Drucker, der das
+ <acronym>LPD</acronym>-Protokoll
+ unterstützt:</para>
+
+ <programlisting>:lp=:rm=<replaceable>network-printer-name</replaceable>:rp=raw:\</programlisting>
+
+ <para>Für Drucker, die den Druck über Port 9001
+ unterstützen:</para>
+
+ <programlisting>:lp=9100@<replaceable>network-printer-name</replaceable>:\</programlisting>
+
+ <para>Ersetzen Sie für beide Typen
+ <replaceable>network-printer-name</replaceable>
+ durch den <acronym>DNS</acronym>-Namen des
+ Netzwerkdruckers.</para></entry>
+ </row>
-printf "\033&amp;k2G" &amp;&amp; fpr &amp;&amp; printf "\033&amp;l0H" &amp;&amp;
- exit 0
-exit 2 </programlisting>
-
- <para>Zusätzlich benötigen wir wiederum einen Eintrag in
- <filename>/etc/printcap</filename>, um diesen Filter für den
- Drucker <literal>teak</literal> zu aktivieren:</para>
-
- <programlisting>:rf=<filename>/usr/local/libexec/hprf</filename>:</programlisting>
-
- <para>Das letzte Beispiel ist etwas komplexer. Es soll ein
- DVI-Filter für den bereits erwähnten
- LaserJet-Drucker <literal>teak</literal> installiert werden.
- Der erste Teil ist einfach: Sie müssen den Pfad des
- DVI-Filters in <filename>/etc/printcap</filename> eintragen:</para>
-
- <programlisting>:df=<filename>/usr/local/libexec/hpdf</filename>:</programlisting>
-
- <para>Nun kommt der schwierige Teil: Sie müssen den
- Filter funktionsfähig machen. Dazu benötigen Sie
- einen DVI-nach-LaserJet/PCL-Konverter.
- Glücklicherweise enthält die &os; <link linkend="ports">Ports-Sammlung</link> mit <package>print/dvi2xx</package> ein solches Programm. Nach
- der Installation des Pakets verfügen wir über das
- Programm <command>dvilj2p</command>, das zur Konvertierung
- von DVI-Daten in zu den Druckern LaserJet IIp, LaserJet III,
- sowie LaserJet 2000 kompatible Codes benötigt wird.</para>
-
- <para>Durch den Einsatz von <command>dvilj2p</command> wird
- der Filter <command>hpdf</command> relativ komplex, da
- <command>dvilj2p</command> nicht von der Standardeingabe
- lesen kann, sondern als Eingabe einen Dateinamen erwartet.
- Zusätzlich muss der Dateiname auf <filename>.dvi</filename>
- enden, daher ist die Verwendung von <filename>/dev/fd/0</filename> als Standardeingabe
- problematisch. Wir können diese Problem aber umgehen, indem
- wir einen temporären Dateinamen symbolisch nach <filename>/dev/fd/0</filename> linken.
- Dadurch wird <command>dvilj2p</command> gezwungen, dennoch von der
- Standardeingabe zu lesen.</para>
-
- <para>Das letzte Problem, das wir noch lösen müssen,
- ist, dass wir <filename>/tmp</filename> nicht als
- temporären Link verwenden können. Symbolische
- Links gehören dem User sowie der Gruppe
- <systemitem class="username">bin</systemitem>. Der Filter läuft aber als
- User <systemitem class="username">daemon</systemitem>. Außerdem ist
- <filename>/tmp</filename> durch ein Sticky-Bit
- gesichert. Daher kann der Filter den Link zwar erzeugen, ein
- Aufräumen ist aber nicht mehr möglich, weil sich
- die Eigentümer des Filters und des temporären
- Verzeichnisses unterscheiden.</para>
-
- <para>Daher legt der Filter den symbolischen Link im
- Arbeitsverzeichnis an, das gleichzeitig als Spooling-Verzeichnis
- dient (festgelegt durch die Aktivierung
- der <literal>sd</literal>-Fähigkeit in
- <filename>/etc/printcap</filename>). Das Arbeitsverzeichnis
- ist ein idealer Ort für den Filter, insbesondere da dieses
- (manchmal) sogar über mehr freien Speicherplatz als <filename>/tmp</filename> verfügt.</para>
+ <row>
+ <entry>Seriell</entry>
+ <entry><programlisting>:lp=/dev/cuau0:br=9600:pa=none:\</programlisting>
- <para>Mit diesen Informationen sind wir nun in der Lage, den
- Filter zu entwickeln:</para>
+ <para>Diese Werte sind für einen typischen
+ seriellen Drucker geeignet. Die Baudrate
+ beträgt 9600 und es wird keine Parität
+ benutzt.</para></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </callout>
- <programlisting>#!/bin/sh
-#
-# hpdf - DVI-Daten auf einen HP/PCL-Drucker drucken
-# Installiert unter: /usr/local/libexec/hpdf
+ <callout arearefs="printing-lpd-co-header">
+ <para>Unterdrückt das Drucken eines Deckblattes zu Beginn
+ des Druckauftrags.</para>
+ </callout>
-PATH=/usr/local/bin:$PATH; export PATH
+ <callout arearefs="printing-lpd-co-mx">
+ <para>Die maximale Größe des Druckauftrags wird nicht
+ begrenzt.</para>
+ </callout>
-#
-# Eine Funktion zum Aufräumen unserer temporären Dateien.
-# Diese finden sich im Arbeitsverzeichnis, das wir auch als
-# Spooling-Verzeichnis für unseren Drucker verwenden werden.
-#
-cleanup() {
- rm -f hpdf$$.dvi
-}
+ <callout arearefs="printing-lpd-co-sd">
+ <para>Das Verzeichnis zur Speicherung der Druckdaten. Jeder
+ Drucker verwendet ein eigenes Verzeichnis.</para>
+ </callout>
-#
-# Eine Funktion, um fatale Fehler zu behandeln. Dazu die Meldung
-# ausgeben, danach ein exit 2. Dadurch weiß LPD, dass es
-# den Auftrag nicht noch einmal drucken soll.
-#
-fatal() {
- echo "$@" 1&gt;&amp;2
- cleanup
- exit 2
-}
+ <callout arearefs="printing-lpd-co-lf">
+ <para>Die Logdatei, in welche die Fehler des Druckers
+ geschrieben werden.</para>
+ </callout>
+ </calloutlist>
-#
-# Wenn ein Anwender den Auftrag entfernt, sendet LPD ein SIGINT, daher
-# wollen wir SIGINT und einige andere Signale abfangen (trappen), um
-# nach der Konvertierung aufräumen zu können.
-#
-trap cleanup 1 2 15
+ <para>Nachdem Sie <filename>/etc/printcap</filename> erstellt
+ haben, verwenden Sie &man.chkprintcap.8; um die Datei auf
+ Fehler zu testen:</para>
-#
-# Bevor wir anfangen, räumen wir noch auf. Sicher ist sicher.
-#
-cleanup
+ <screen>&prompt.root; <userinput>chkprintcap</userinput></screen>
-#
-# Die DVI-Eingabedatei auf die Standardeingabe linken (die zu druckende
-# Datei).
-#
-ln -s /dev/fd/0 hpdf$$.dvi || fatal "Konnte Symlink nicht anlegen!"
+ <para>Beheben Sie alle gemeldeten Fehler, bevor Sie
+ fortfahren.</para>
-#
-# Umwandeln: LF = CR+LF
-#
-printf "\033&amp;k2G" || fatal "Konnte Drucker nicht initialisieren!"
+ <para>Aktivieren Sie &man.lpd.8; in
+ <filename>/etc/rc.conf</filename>:</para>
-#
-# Konvertieren und drucken. Da der Rückgabewert von dvilj2p
-# unzuverlässig ist, ignorieren wir ihn einfach.
-#
-dvilj2p -M1 -q -e- dfhp$$.dvi
+ <programlisting>lpd_enable="YES"</programlisting>
-#
-# Aufräumen und beenden.
-#
-cleanup
-exit 0 </programlisting>
- </sect4>
-
- <sect4 xml:id="printing-advanced-autoconv">
- <title>Automatische Konvertierung: Eine Alternative zu
- Konvertierungsfiltern</title>
-
- <para>Alle in diesem Abschnitt besprochenen Konvertierungsfilter sind
- zwar sehr hilfreich, allerdings müssen Sie nach wie vor bei
- jedem Aufruf von &man.lpr.1; angeben, welchen Filter sie verwenden
- wollen, was mit der Zeit sicher nervend wird. Schlimmer ist
- allerdings, dass die Auswahl eines unpassenden Filters dazu
- führen kann, dass Sie Hunderte Seiten Papier ausdrucken.</para>
-
- <para>Statt also Konvertierungsfilter zu installieren,
- könnten Sie den Textfilter (der ohnehin der
- Standardfilter ist) verwenden, um den zu druckenden
- Dateityp zu erkennen und anschließend den korrekten
- Konvertierungsfilter auszuwählen. Um den Dateityp
- zu bestimmen, können Sie beispielsweise
- <command>file</command> verwenden. Leider ist es bei
- <emphasis>einigen</emphasis> Dateitypen problematisch, diese zu
- unterscheiden. Daher könnten Sie für diese Dateitypen
- dennoch einen Konvertierungsfilter installieren.</para>
-
- <indexterm><primary>apsfilter</primary></indexterm>
-
- <indexterm>
- <primary>Drucken</primary>
- <secondary>Filter</secondary>
- <tertiary>apsfilter</tertiary>
- </indexterm>
-
- <para>Die &os; Ports-Sammlung enthält mit
- <command>apsfilter</command> (<package>print/apsfilter</package>) einen Textfilter, der
- diese automatische Konvertierung durchführen kann. Er ist
- in der Lage, normalen Text, &postscript;, DVI und beinahe jede
- Art von Datei zu erkennen, diese zu konvertieren und auf
- Ihren Drucker auszugeben.</para>
- </sect4>
- </sect3>
+ <para>Starten Sie den Dienst:</para>
- <sect3 xml:id="printing-advanced-of">
- <title>Ausgabefilter</title>
+ <screen>&prompt.root; <userinput>service lpd start</userinput></screen>
+ </sect2>
- <para><application>LPD</application> unterstützt noch eine
- weitere Filterart, die sogenannten Ausgabefilter. Diese sind
- &ndash;&nbsp;analog zu einem Textfilter&nbsp;&ndash;&nbsp;
- für den Druck von normalem Text ausgelegt, allerdings
- verfügen sie im Vergleich zu diesen nur über
- sehr eingeschränkte Fähigkeiten. Wenn Sie einen
- Ausgabefilter (aber keinen Textfilter) verwenden, dann</para>
-
- <itemizedlist>
- <listitem>
- <para>startet <application>LPD</application> nur einen
- Ausgabefilter für den kompletten Druckauftrag, statt
- für jede Datei des Auftrags einen eigenen Filter zu
- starten.</para>
- </listitem>
-
- <listitem>
- <para>kümmert sich <application>LPD</application> nicht
- darum, den Beginn oder das Ende einer Datei innerhalb des
- Druckauftrages zu finden.</para>
- </listitem>
-
- <listitem>
- <para>übergibt <application>LPD</application> weder
- den Benutzer- noch den Rechnernamen desjenigen, der den
- Druckauftrag erteilt hat, an den Ausgabefilter, was
- eine Verrechnung von Druckaufträgen unmöglich
- macht. Ausgabefilter unterstützen insgesamt nur
- zwei Argumente:</para>
-
- <cmdsynopsis>
- <command>filter-name</command>
- <arg choice="plain">-w <replaceable>width</replaceable></arg>
- <arg choice="plain">-l <replaceable>length</replaceable></arg>
- </cmdsynopsis>
-
- <para><replaceable>width</replaceable> basiert auf der
- <literal>pw</literal>-Fähigkeit,
- <replaceable>length</replaceable> hingegen auf der
- <literal>pl</literal>-Fähigkeit des gewählten
- Druckers.</para>
- </listitem>
- </itemizedlist>
-
- <para>Lassen Sie sich von dieser angeblichen Einfachheit eines
- Ausgabefilters nicht täuschen. Ausgabefilter sind
- beispielsweise <emphasis>nicht dazu in der Lage</emphasis>,
- jede Datei eines Druckauftrages auf einer neuen Seite zu
- drucken. Dazu benötigen Sie einen Textfilter (die im
- Abschnitt <link linkend="printing-textfilter">Den Textfilter
- installieren</link> beschrieben werden). Außerdem
- sind Ausgabefilter in Wirklichkeit
- <emphasis>komplexer</emphasis>, da sie den gesendeten
- Bytestrom nicht nur auf Sonderzeichen hin untersuchen
- müssen, sondern auch die Übertragung von Signalen
- für <application>LPD</application> übernehmen
- müssen.</para>
-
- <para>Sie <emphasis>benötigen</emphasis> Ausgabefilter
- aber dann, wenn Sie Deckblätter drucken wollen, da
- dazu Escape-Sequenzen und Initialisierungsstrings
- erforderlich sind. (Es ist allerdings <emphasis>nicht
- möglich</emphasis>, den Druck dieser Deckblätter
- zu verrechnen, da <application>LPD</application>
- keine Benutzer- oder Rechnerinformationen an den Ausgabefilter
- übergibt.)</para>
-
- <para><application>LPD</application> kann für den gleichen
- Drucker sowohl Ausgabefilter als auch Textfilter verwenden.
- In solchen Fällen verwendet <application>LPD</application>
- den Ausgabefilter nur für den Druck von Deckblättern
- (die im Abschnitt <link linkend="printing-advanced-header-pages">Deckblätter</link>
- näher beschrieben werden). Nach dem Druck des Deckblattes
- erwartet <application>LPD</application>, dass sich der
- Ausgabefilter <emphasis>selbst beendet</emphasis>. Dazu werden
- zwei Bytes an den Ausgabefilter gesendet: ASCII 031, gefolgt
- von ASCII 001. Wenn ein Ausgabefilter diese zwei Bytes
- (031, 001) empfängt, sendet er das Signal
- <literal>SIGSTOP</literal> an sich selbst. Nachdem
- <application>LPD</application> den Rest des Druckauftrages
- erledigt hat, wird der Ausgabefilter erneut gestartet, indem
- ein <literal>SIGCONT</literal> an den Ausgabefilter
- gesendet wird.</para>
-
- <para>Haben Sie nur einen Ausgabefilter, aber
- <emphasis>keinen</emphasis> Textfilter installiert, dann
- verwendet <application>LPD</application> den Ausgabefilter auch
- für den Druck von normalem Text. Wie bereits erwähnt,
- werden dabei allerdings alle Dateien des Druckauftrags unmittelbar
- hintereinander gedruckt, Seitenumbrüche oder ein
- zusätzlicher Papiervorschub sind also nicht möglich.
- Da dieses Verhalten von Ihnen wahrscheinlich
- <emphasis>nicht</emphasis> gewünscht wird, werden Sie in
- fast allen Fällen einen zusätzlichen Textfilter
- benötigen.</para>
-
- <para>Der weiter oben beschriebene Textfilter
- <command>lpf</command> kann auch als Ausgabefilter verwendet
- werden. Wenn Sie nur einen funktionierenden Ausgabefilter
- benötigen, aber nicht den dafür benötigten
- Code (zur Zeichenerkennung und zum Senden von Signalen)
- schreiben wollen, sollten Sie sich <command>lpf</command>
- näher ansehen. Sie können <command>lpf</command>
- auch in ein Shell-Skript einbinden, um von Ihrem Drucker
- benötigte Initialisierungscodes zu verarbeiten.</para>
- </sect3>
+ <sect2 xml:id="printing-lpd-lpr">
+ <title>Drucken mit &man.lpr.1;</title>
- <sect3 xml:id="printing-advanced-lpf">
- <title><command>lpf</command>: Ein Textfilter</title>
+ <para>Mit <command>lpr</command> werden Dokumente an den
+ Drucker geschickt. Die Datei können Sie auf der Kommandozeile
+ angeben, oder über eine Pipe an <command>lpr</command>
+ schicken. Die beiden folgenden Kommandos sind gleichwertig,
+ sie schicken den Inhalt von <filename>doc.txt</filename> an
+ den Standarddrucker:</para>
+
+ <screen>&prompt.user; <userinput>lpr doc.txt</userinput>
+&prompt.user; <userinput>cat doc.txt | lpr</userinput></screen>
+
+ <para>Drucker können auch mit <option>-P</option> ausgewählt
+ werden. Um auf einen Drucker namens
+ <replaceable>laser</replaceable> zu drucken:</para>
- <para>Der Textfilter (Eingabefilter)
- <filename>/usr/libexec/lpr/lpf</filename> wird bereits mit
- &os; geliefert. Er erlaubt das Einrücken der
- Ausgabe (über <command>lpr -i</command>), die
- Übergabe von Zeichen-Literalen
- (über <command>lpr -l</command>), das Anpassen
- der Druckposition bei gelöschten Zeichen
- (<foreignphrase>Backspaces</foreignphrase>) oder Tabulatoren,
- sowie die Verrechnung gedruckter Seiten. Zusätzlich
- kann dieser Textfilter auch als Ausgabefilter arbeiten.</para>
-
- <para><command>lpf</command> ist für viele verschiedene
- Druckumgebungen geeignet. Zwar ist dieser Textfilter nicht
- in der Lage, Initialisierungssequenzen an einen Drucker
- zu senden, dieses Problem kann allerdings durch das Schreiben
- und Ausführen eines Shell-Skripts (das diese Funktion
- übernimmt) und das anschließende Aufrufen von
- <command>lpf</command> gelöst werden.</para>
-
- <indexterm><primary>Seiten verrechnen</primary></indexterm>
- <indexterm>
- <primary>verrechnen</primary>
- <secondary>Druckernutzung</secondary>
- </indexterm>
-
- <para>Damit Sie <command>lpf</command> für die Verrechnung
- von Druckaufträgen einsetzen können, müssen Sie
- die korrekten Werte für die <literal>pw</literal>- und
- <literal>pl</literal>-Fähigkeiten in
- <filename>/etc/printcap</filename> eintragen.
- <command>lpf</command> verwendet diese Werte, um festzustellen,
- wieviel Text auf eine Seite passt und wieviele Seiten im
- Druckauftrag enthalten sind. Weitere Informationen zur
- Verrechnung der Druckernutzung enthält der Abschnitt
- <link linkend="printing-advanced-acct">Die Druckernutzung
- verrechnen</link>.</para>
- </sect3>
+ <screen>&prompt.user; <userinput>lpr -Plaser doc.txt</userinput></screen>
</sect2>
- <sect2 xml:id="printing-advanced-header-pages">
- <title>Deckblätter</title>
+ <sect2 xml:id="printing-lpd-filters">
+ <title>Filter</title>
- <para>Wenn Sie <emphasis>viele</emphasis> Benutzer mit verschiedenen
- Druckern verwalten müssen, sollten Sie
- <emphasis>Deckblätter</emphasis> als notwendiges Übel
- akzeptieren.</para>
-
- <indexterm>
- <primary>Bannerseiten</primary>
- <see>Deckblätter</see>
- </indexterm>
-
- <indexterm><primary>Deckblätter</primary></indexterm>
-
- <para>Deckblätter (manchmal auch als
- <emphasis>Bannerseiten</emphasis> oder
- <emphasis>burst pages</emphasis> bezeichnet) geben an, wem
- die Ausgabe eines Druckauftrags gehört. Sie werden
- normalerweise in großen fetten Buchstaben gedruckt,
- manchmal sogar mit zusätzlicher Umrandung, damit man
- sie leichter von den tatsächlichen Seiten eines
- Druckauftrages unterscheiden kann. Der Nachteil von
- Deckblättern ist allerdings, dass es sich dabei um
- eine zusätzliche zu druckende Seite handelt, die in
- der Regel bereits nach wenigen Minuten wieder im Papierkorb
- landet. Da aber für jeden Druckauftrag nur ein einziges
- Deckblatt gedruckt wird, ist der Papierverbrauch in den
- meisten Fällen tolerierbar.</para>
-
- <para>Das <application>LPD</application>-System kann
- Deckblätter automatisch erzeugen, <emphasis>wenn</emphasis>
- Ihr Drucker normalen Text direkt drucken kann. Haben Sie
- hingegen einen &postscript;-Drucker, benötigen Sie ein
- externes Programm, um die Deckblätter zu generieren
- (Lesen Sie dazu auch den Abschnitt <link linkend="printing-advanced-header-pages-ps">Deckblätter
- auf &postscript;-Druckern erzeugen</link>.).</para>
-
- <sect3 xml:id="printing-advanced-header-pages-enabling">
- <title>Deckblätter aktivieren</title>
-
- <para>Im Abschnitt <link linkend="printing-simple">Einfache
- Drucker-Konfiguration</link> haben wir die Ausgabe von
- Deckblättern durch die die Angabe der Option
- <literal>sh</literal>
- (<foreignphrase>suppress header</foreignphrase>) in
- <filename>/etc/printcap</filename> deaktiviert. Um die
- Ausgabe von Deckblättern wieder zu aktivieren,
- müssen Sie daher die <literal>sh</literal>-Fähigkeit
- wieder entfernen.</para>
-
- <para>Das klingt zu einfach? Wo ist der Haken?</para>
-
- <para>Sie haben recht. Es ist <emphasis>möglich</emphasis>,
- dass Sie einen Ausgabefilter verwenden müssen, um die
- nötigen Initialisierungsstrings an den Drucker zu senden.
- Das folgende Beispiel beschreibt einen Ausgabefilter für
- PCL-kompatible Drucker von Hewlett Packard:</para>
+ <para>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.</para>
+
+ <para>Einige Drucker sind nicht in der Lage einfachen Text zu
+ drucken. Es kann sogar sein, das die Eingabedatei gar keinen
+ Text enthält.</para>
+
+ <para>Mit Hilfe von <emphasis>Filtern</emphasis> 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 <acronym>PCL</acronym>. 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.</para>
+
+ <para>Die hier beschriebenen Filter werden
+ <emphasis>Eingabefilter</emphasis> oder auch
+ <emphasis>Textfilter</emphasis> genannt. Diese Filter
+ übersetzen die eingehende Datei in verschiedene Formen.
+ Werden Sie mit &man.su.1; zu <systemitem
+ class="username">root</systemitem>, bevor Sie die
+ Dateien erstellen.</para>
+
+ <para>Filter werden in <filename>/etc/printcap</filename> mit
+ der Kennung <literal>if=</literal> festgelegt. Um
+ <filename>/usr/local/libexec/lf2crlf</filename> als Filter
+ einzusetzen, bearbeiten Sie <filename>/etc/printcap</filename>
+ wie folgt:</para>
+
+ <programlisting>lp:\
+ :lp=/dev/unlpt0:\
+ :sh:\
+ :mx#0:\
+ :sd=/var/spool/lpd/lp:\
+ :if=/usr/local/libexec/lf2crlf:\ <co xml:id="printing-lpd-filters-co-if"/>
+ :lf=/var/log/lpd-errs:</programlisting>
+
+ <calloutlist>
+ <callout arearefs="printing-lpd-filters-co-if">
+ <para><literal>if=</literal> identifiziert den
+ Eingangsfilter, der auf den eingehenden Text angewendet
+ werden soll.</para>
+ </callout>
+ </calloutlist>
+
+ <tip xml:id="printing-lpd-filters-oneline">
+ <para>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:</para>
+
+ <programlisting>lp:lp=/dev/unlpt0:sh:mx#0:sd=/var/spool/lpd/lp:if=/usr/local/libexec/lf2crlf:lf=/var/log/lpd-errs:</programlisting>
+ </tip>
+
+ <sect3 xml:id="printing-lpd-filters-stairstep">
+ <title>Den Treppeneffekt verhindern</title>
+
+ <para>Typische Textdateien enthalten einen Zeilenvorschub am
+ Ende jeder Zeile. Diese Zeilen erzeugen auf dem Drucker
+ einen <quote>Treppeneffekt</quote>:</para>
+
+ <programlisting>A printed file looks
+ like the steps of a staircase
+ scattered by the wind</programlisting>
+
+ <para>Ein Filter kann Zeilenumbrüche in Wagenrückläufe und
+ Zeilenumbrüche konvertieren. Erstellen Sie
+ <filename>/usr/local/libexec/lf2crlf</filename> mit
+ folgendem Inhalt:</para>
<programlisting>#!/bin/sh
-#
-# hpof - Ausgabefilter für PCL-kompatible Drucker von Hewlett Packard
-# Installiert unter: /usr/local/libexec/hpof
-
-printf "\033&amp;k2G" || exit 2
-exec /usr/libexec/lpr/lpf</programlisting>
-
- <para>Geben Sie den Pfad des Ausgabefilters über die
- <literal>of</literal>-Fähigkeit an. Weitere Informationen
- finden Sie im Abschnitt <link linkend="printing-advanced-of">Ausgabefilter</link>.</para>
-
- <para>Das nächste Beispiel beschreibt die Datei
- <filename>/etc/printcap</filename> des bereits erwähnten
- Druckers <literal>teak</literal>. Allerdings sind nun die
- Ausgabe von Deckblättern sowie der vorhin beschriebene
- Ausgabefilter enthalten:</para>
-
- <programlisting>#
-# /etc/printcap für den Rechner orchid
-#
-teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
- :lp=<filename>/dev/lpt0</filename>:sd=<filename>/var/spool/lpd/teak</filename>:mx#0:\
- :if=<filename>/usr/local/libexec/hpif</filename>:\
- :vf=<filename>/usr/local/libexec/hpvf</filename>:\
- :of=<filename>/usr/local/libexec/hpof</filename>:</programlisting>
-
- <para>Wenn ein Anwender nun einen Druckauftrag an den Drucker
- <literal>teak</literal> schickt, wird für jeden
- Druckauftrag ein Deckblatt erstellt. Benötigt ein
- Anwender keine Deckblätter, kann er die Ausgabe dieser
- Seiten durch die Verwendung von <command>lpr
- -h</command> unterdrücken. Weitere, für
- die Ausgabe von Deckblättern interessante &man.lpr.1;-Optionen
- finden Sie im Abschnitt <link linkend="printing-lpr-options-misc">Deckblattoptionen</link>.</para>
-
- <note>
- <para><application>LPD</application> verwendet ein
- <foreignphrase>Form Feed</foreignphrase>, um das Deckblatt
- abzuschließen. Wenn Ihr Drucker ein anderes Zeichen
- verwendet, um eine Seite auszuwerfen, geben Sie dieses
- über die <literal>ff</literal>-Fähigkeit in
- <filename>/etc/printcap</filename> an.</para>
- </note>
- </sect3>
-
- <sect3 xml:id="printing-advanced-header-pages-controlling">
- <title>Deckblätter kontrollieren</title>
-
- <para>Haben Sie die Ausgabe von Deckblättern aktiviert,
- gibt <application>LPD</application> eine ganze Seite in
- großen Buchstaben aus, die den Anwender, den
- verwendeten Rechner sowie den Druckauftrag beschreiben.
- Das folgende Beispiel ist ein Deckblatt für den
- Druckauftrag <quote>outline</quote>, der von
- <systemitem class="username">kelly</systemitem> auf dem Rechner <systemitem>rose</systemitem>
- erstellt wurde:</para>
-
- <screen> k ll ll
- k l l
- k l l
- k k eeee l l y y
- k k e e l l y y
- k k eeeeee l l y y
- kk k e l l y y
- k k e e l l y yy
- k k eeee lll lll yyy y
- y
- y y
- yyyy
-
-
- ll
- t l i
- t l
- oooo u u ttttt l ii n nnn eeee
- o o u u t l i nn n e e
- o o u u t l i n n eeeeee
- o o u u t l i n n e
- o o u uu t t l i n n e e
- oooo uuu u tt lll iii n n eeee
-
-
-
-
-
-
+CR=$'\r'
+/usr/bin/sed -e "s/$/${CR}/g"</programlisting>
+ <para>Setzen Sie die Berechtigungen und machen Sie die Datei
+ ausführbar:</para>
+ <screen>&prompt.root; <userinput>chmod 555 /usr/local/libexec/lf2crlf</userinput></screen>
- r rrr oooo ssss eeee
- rr r o o s s e e
- r o o ss eeeeee
- r o o ss e
- r o o s s e e
- r oooo ssss eeee
+ <para>Passen Sie <filename>/etc/printcap</filename> an, so
+ dass der neue Filter verwendet wird:</para>
+ <programlisting>:if=/usr/local/libexec/lf2crlf:\</programlisting>
-
-
-
-
-
- Job: outline
- Date: Sun Sep 17 11:04:58 1995</screen>
-
- <para><application>LPD</application> fügt ein
- <foreignphrase>Form Feed</foreignphrase> an diesen Text an,
- damit der eigentliche Druckauftrag auf einer neuen Seite
- gestartet wird (es sei denn, Sie haben die
- <literal>sf</literal>-Fähigkeit (<foreignphrase>suppress
- form feeds</foreignphrase>) des jeweiligen Druckers in
- <filename>/etc/printcap</filename> aktiviert).</para>
-
- <para>Wenn Sie dies wüschen, kann
- <application>LPD</application> auch nur ein <emphasis>kurzes
- Deckblatt</emphasis> ausgeben. Dazu verwenden Sie die
- Option <literal>sb</literal>
- (<foreignphrase>short banner</foreignphrase>)
- in <filename>/etc/printcap</filename>. Dadurch erhalten Sie
- ein Deckblatt ähnlich dem folgenden:</para>
-
- <screen>rose:kelly Job: outline Date: Sun Sep 17 11:07:51 1995</screen>
-
- <para>In der Voreinstellung druckt <application>LPD</application>
- zuerst das Deckblatt und danach den eigentlichen Druckauftrag.
- Um diese Reihenfolge umzukehren, geben Sie die Option
- <literal>hl</literal> (<foreignphrase>header
- last</foreignphrase>) in <filename>/etc/printcap</filename>
- ans.</para>
+ <para>Drucken Sie nochmal die gleiche Datei, um den Filter zu
+ testen.</para>
</sect3>
- <sect3 xml:id="printing-advanced-header-pages-accounting">
- <title>Deckblätter verrechnen</title>
+ <sect3 xml:id="printing-lpd-filters-enscript">
+ <title>Mit <package>print/enscript</package> normalen Text
+ auf &postscript;-Druckern drucken</title>
- <para>Wenn Sie die in <application>LPD</application> eingebaute
- Funktion zur Erstellung von Deckblättern verwenden,
- werden Sie auf folgendes Paradigma stoßen:
- Deckblätter müssen <emphasis>kostenlos</emphasis>
- sein.</para>
-
- <para>Warum ist das so?</para>
-
- <para>Weil der Ausgabefilter das einzige externe Programm ist,
- das zum Zeitpunkt der Erstellung des Deckblatts eine
- Verrechnung durchführen könnte. Da Ausgabefilter
- aber weder über <emphasis>Benutzer- noch über
- Rechnerinformationen</emphasis> verfügen, ist es nicht
- möglich, einen Druckauftrag einem bestimmten Benutzer
- zuzuordnen. Da ein Benutzer die Ausgabe von Deckblättern
- über <command>lpr -h</command>
- unterdrücken kann, ist es auch nicht möglich, die Vorgabe
- <quote>verrechne eine zusätzliche Seite</quote> in den Text-
- oder Konvertierungsfilter (die über die zur Verrechnung
- nötigen Benutzer- und Rechnerinformationen verfügen)
- aufzunehmen, weil Benutzer sonst für Deckblätter
- bezahlen müssten, die sie nicht gedruckt haben.</para>
-
- <para>Es ist <emphasis>ebenfalls nicht ausreichend</emphasis>,
- jeden Filter eigene Deckblätter erzeugen zu lassen (und
- sie dadurch verrechnen zu können). Wollte ein Benutzer
- durch ein <command>lpr -h</command> die Ausgabe
- eines Deckblattes unterdrücken, würde dieses nun trotzdem
- verrechnet werden, da <application>LPD</application> keine
- Informationen über die Verwendung der Option
- <option>-h</option> an einen Filter weitergibt.</para>
-
- <para>Welche Möglichkeiten habe ich nun?</para>
-
- <para>Sie können:</para>
-
- <itemizedlist>
- <listitem>
- <para>Das Paradigma von <application>LPD</application> einfach
- akzeptieren und die Deckblätter gratis abgeben.</para>
- </listitem>
-
- <listitem>
- <para>Eine alternatives Drucksystem wie
- <application>LPRng</application><indexterm><primary>LPRng</primary></indexterm>
- installieren. Der Abschnitt <link
- linkend="printing-lpd-alternatives"> Alternativen zum
- Standard-Drucksystem</link> beschreibt verschiedene
- Drucksysteme, die <application>LPD</application>
- ersetzen können.</para>
- </listitem>
-
- <listitem>
- <para>Schreiben Sie einen <emphasis>intelligenten</emphasis>
- Ausgabefilter. Normalerweise kümmert sich ein
- Ausgabefilter nur um die Initialisierung des Druckers oder
- um eine einfache Zeichenkonvertierung. Außerdem
- eignet er sich für die Ausgabe von Deckblättern
- und normalem Text, wenn Sie keinen Text- oder Eingabefilter
- installiert haben. Haben Sie allerdings einen Textfilter
- installiert, verwendet <application>LPD</application>
- Ausgabefilter nur für die Ausgabe von Deckblättern.
- Ein Ausgabefilter kann den Text des von
- <application>LPD</application> erzeugten Deckblattes
- untersuchen, um festzustellen, welcher Benutzer und welcher
- Rechner den Druckauftrag gestartet hat. Leider weiß
- der Ausgabefilter auch mit dieser Methode nicht, welche
- Datei er zur Verrechnung verwenden soll (da der Name dieser
- Datei durch die <literal>af</literal>-Fähigkeit
- übergeben wird). Wenn Sie eine
- Standard-Verrechnungsdatei verwenden, können Sie diese
- in den Ausgabefilter einbauen. Um den Text des Deckblattes
- zu untersuchen, verwenden Sie die
- <literal>sh</literal>-Fähigkeit
- (<foreignphrase>short header</foreignphrase>) in
- <filename>/etc/printcap</filename>. Falls Ihnen das zuviel
- Aufwand ist, freuen sich Ihre Benutzer sicher darüber,
- wenn Sie ihnen den kostenlosen Druck von Deckblättern
- erlauben.</para>
- </listitem>
- </itemizedlist>
- </sect3>
-
- <sect3 xml:id="printing-advanced-header-pages-ps">
- <title>Deckblätter auf &postscript;-Druckern ausgeben</title>
+ <para><acronym>GNU</acronym>
+ <application>Enscript</application> 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 <package>print/enscript-letter</package> oder
+ <package>print/enscript-a4</package> aus der Ports-Sammlung
+ installieren.</para>
- <para>In der Regel erzeugt <application>LPD</application> ein Deckblatt
- mit normalem Text, das für viele verschiedene Drucker geeignet
- ist. Da &postscript;-Drucker normalen Text aber nicht drucken
- können, ist die <application>LPD</application>-Funktion zur
- Erstellung von Deckblättern auf diesen Drucker relativ
- sinnlos.</para>
-
- <para>Es sei denn, jeder Text- und Konvertierungsfilter erzeugt
- über den Benutzer- und Rechnernamen sein eigenes, für
- den jeweiligen Drucker geeignetes Deckblatt. Das Problem
- dieser Methode ist allerdings, dass ein Anwender auch dann ein
- Deckblatt erhält, wenn er dies über
- <command>lpr -h</command> verhindern wollte.</para>
-
- <para>Das folgende Skript benötigt drei Argumente (den
- Loginnamen des Benutzers, den Rechnernamen und den Namen
- des Druckauftrages), um daraus ein einfaches
- &postscript;-Deckblatt zu erzeugen:</para>
+ <para>Erstellen Sie
+ <filename>/usr/local/libexec/enscript</filename> mit diesem
+ Inhalt:</para>
<programlisting>#!/bin/sh
-#
-# make-ps-header - ein PostScript-Deckblatt auf stdout ausgeben
-# Installiert unter: /sr/local/libexec/make-ps-header
-#
-
-#
-# Die folgenden Werte sind PostScript-Einheiten (72 pro Zoll).
-# Passen Sie diese Werte für A4 oder die von Ihnen verwendete
-# Papiergröße an:
-#
-page_width=612
-page_height=792
-border=72
-
-#
-# Argumente prüfen
-#
-if [ $# -ne 3 ]; then
- echo "Usage: `basename $0` &lt;user&gt; &lt;host&gt; &lt;job&gt;" 1&gt;&amp;2
- exit 1
-fi
-
-#
-# Diese Werte in Variablen speichern, damit der PostScript-Code
-# übersichtlicher wird.
-#
-user=$1
-host=$2
-job=$3
-date=`date`
-
-#
-# Sende den PostScript-Code an stdout.
-#
-exec cat &lt;&lt;EOF
-%!PS
+/usr/local/bin/enscript -o -</programlisting>
-%
-% Sicherstellen, dass es keine unerwünschten Wechselwirkungen mit
-% dem folgenden Druckauftrag gibt.
-%
-save
-
-%
-% Ziehe eine fette Umrandung.
-%
-$border $border moveto
-$page_width $border 2 mul sub 0 rlineto
-0 $page_height $border 2 mul sub rlineto
-currentscreen 3 -1 roll pop 100 3 1 roll setscreen
-$border 2 mul $page_width sub 0 rlineto closepath
-0.8 setgray 10 setlinewidth stroke 0 setgray
-
-%
-% Zeige den Benutzernamen groß und fett an.
-%
-/Helvetica-Bold findfont 64 scalefont setfont
-$page_width ($user) stringwidth pop sub 2 div $page_height 200 sub moveto
-($user) show
-
-%
-% Und nun zeige noch die Einzelheiten an.
-%
-/Helvetica findfont 14 scalefont setfont
-/y 200 def
-[ (Job:) (Host:) (Date:) ] {
-200 y moveto show /y y 18 sub def }
-forall
-
-/Helvetica-Bold findfont 14 scalefont setfont
-/y 200 def
-[ ($job) ($host) ($date) ] {
- 270 y moveto show /y y 18 sub def
-} forall
-
-%
-% Das wars.
-%
-restore
-showpage
-EOF </programlisting>
-
- <para>Nun kann jeder Konvertierungs- oder Textfilter dieses
- Skript aufrufen, um zuerst das Deckblatt zu erzeugen und
- danach den Druckauftrag zu drucken. Das nächste
- Beispiel enthält den bereits beschriebenen
- DVI-Konvertierungsfilter, der hier um die Funktion zur
- Erzeugung eines Deckblatts erweitert wurde:</para>
+ <para>Setzen Sie die Berechtigungen und machen Sie die Datei
+ ausführbar:</para>
- <programlisting>#!/bin/sh
-#
-# psdf - DVI-nach-PostScript - Druckerfilter
-# Installiert unter: /usr/local/libexec/psdf
-#
-# Wird von lpd aufgerufen, wenn der Benutzer lpr -d verwendet.
-#
+ <screen>&prompt.root; <userinput>chmod 555 /usr/local/libexec/enscript</userinput></screen>
-orig_args="$@"
+ <para>Bearbeiten Sie <filename>/etc/printcap</filename> um den
+ neuen Filter zu verwenden:</para>
-fail() {
- echo "$@" 1&gt;&amp;2
- exit 2
-}
+ <programlisting>:if=/usr/local/libexec/enscript:\</programlisting>
-while getopts "x:y:n:h:" option; do
- case $option in
- x|y) ;; # Ignore
- n) login=$OPTARG ;;
- h) host=$OPTARG ;;
- *) echo "LPD started `basename $0` wrong." 1&gt;&amp;2
- exit 2
- ;;
- esac
-done
-
-[ "$login" ] || fail "No login name"
-[ "$host" ] || fail "No host name"
-
-( /usr/local/libexec/make-ps-header $login $host "DVI File"
- /usr/local/bin/dvips -f ) | eval /usr/local/libexec/lprps $orig_args</programlisting>
-
- <para>Beachten Sie, dass der Filter die Liste der Argumente
- überprüft, um den Benutzer- und den Rechnernamen
- zu ermitteln. Dieser Vorgang ist prinzipiell für alle
- Filter identisch. Der Textfilter benötigt allerdings
- etwas andere Argumente, die im Abschnitt <link linkend="printing-advanced-filters">Die Funktionsweise von
- Filtern</link> beschrieben werden.</para>
-
- <para>Wie bereits erwähnt, deaktiviert diese Methode
- leider die <quote>suppress header page</quote>-Option
- (also die Option <option>-h</option>) von
- <command>lpr</command>. Benutzer können danach den
- Ausdruck eines Deckblattes nicht mehr verhindern, da der
- angepasste Filter zu jedem Druckauftrag automatisch ein
- Deckblatt erstellt.</para>
-
- <para>Damit ein Benutzer bei Bedarf den Ausdruck eines
- Deckblatts dennoch unterbinden kann, müssen Sie
- auch hier den im Abschnitt <link linkend="printing-advanced-header-pages-accounting">
- Deckblätter verrechnen</link> beschriebenen
- Trick einsetzen: Schreiben Sie einen Ausgabefilter, der
- das von LPD erzeugte Deckblatt untersucht und daraus
- eine &postscript;-Version erzeugt. Wenn der Benutzer
- den Druckauftrag mit <command>lpr -h</command>
- verschickt, erzeugt <application>LPD</application> kein Deckblatt,
- was in weiterer Folge auch für Ihren Ausgabefilter gilt.
- Soll hingegen ein Deckblatt erzeugt werden, liest der
- Ausgabefilter den von <application>LPD</application>
- übergebenen Text und erzeugt daraus ein für
- Ihren &postscript;-Drucker geeignetes Deckblatt.</para>
-
- <para>Haben Sie Ihren &postscript;-Drucker über eine
- serielle Verbindung angeschlossen, können Sie auch
- <command>lprps</command> verwenden. In diesem Paket ist
- mit <command>psof</command> auch ein Ausgabefilter
- enthalten, der die eben beschriebenen Funktionen
- übernehmen kann. Beachten Sie aber, dass Sie mit
- <command>psof</command> keine Deckblätter verrechnen
- können.</para>
+ <para>Testen Sie den Filter, indem Sie eine einfache Textdatei
+ drucken.</para>
</sect3>
- </sect2>
- <sect2 xml:id="printing-advanced-network-printers">
- <title>Drucken über ein Netzwerk</title>
+ <sect3 xml:id="printing-lpd-filters-ps2pcl">
+ <title>&postscript; auf <acronym>PCL</acronym>-Druckern
+ drucken</title>
- <indexterm>
- <primary>Drucker</primary>
- <secondary>Netzwerk</secondary>
- </indexterm>
+ <para>Viele Programme erzeugen &postscript;-Dokumente.
+ Allerdings können kostengünstige Drucker oft nur Textdateien
+ oder <acronym>PCL</acronym> verstehen. Dieser Filter
+ wandelt &postscript;-Dateien in <acronym>PCL</acronym>
+ um, bevor die Datei an den Drucker geschickt wird.
+ Installieren Sie den Ghostscript &postscript; Interpreter
+ <package>print/ghostscript9</package> aus der
+ Ports-Sammlung.</para>
- <indexterm><primary>Netzwerkdruck</primary></indexterm>
+ <para>Erstellen Sie
+ <filename>/usr/local/libexec/ps2pcl</filename> mit diesem
+ Inhalt:</para>
- <para>&os; unterstützt das Drucken über ein Netzwerk, also den
- Versand von Druckaufträgen an einen entfernten Drucker. Man
- unterscheidet dabei zwei Möglichkeiten:</para>
-
- <itemizedlist>
- <listitem>
- <para>Den Zugriff auf einen an einem entfernten Rechner
- angeschlossenen Drucker. Sie konfigurieren dabei auf Ihrem
- System einen Drucker, der über eine konventionelle
- serielle oder parallele Verbindung an einem anderen Rechner
- angeschlossen ist. Danach richten Sie
- <application>LPD</application> auf dem entfernten System
- so ein, dass andere Drucker über das Netzwerk auf
- diesen Drucker zugreifen können. Der Abschnitt
- <link linkend="printing-advanced-network-rm">Auf entfernten
- Rechnern installierte Drucker</link> beschreibt, wie Sie
- dazu vorgehen müssen.</para>
- </listitem>
-
- <listitem>
- <para>Den Zugriff auf einen direkt an ein Netzwerk
- angeschlossenen Drucker. Ein solcher Drucker verfügt
- anstelle (oder zusätzlich zu) einer parallelen oder
- seriellen Schnittstelle über eine Netzwerkschnittstelle.
- Ein solcher Drucker kann sich auf zwei Arten verhalten:</para>
-
- <itemizedlist>
- <listitem>
- <para>Er kann das <application>LPD</application>-Protokoll
- direkt unterstützen und sogar Druckjobs von entfernten
- Rechner verwalten. In diesem Fall verhält sich der
- Drucker wie ein normaler Rechner, auf dem
- <application>LPD</application> läuft. Lesen Sie den
- Abschnitt <link linkend="printing-advanced-network-rm">
- Auf entfernten Rechnern installierte Drucker</link>, um
- einen solchen Drucker einzurichten.</para>
- </listitem>
-
- <listitem>
- <para>Er könnte Verbindungen über ein
- Netzwerk unterstützen. In diesem Fall
- <quote>verbinden</quote> Sie den Drucker mit einem
- Rechner Ihres Netzwerks, der danach für die
- Verwaltung von Druckaufträgen sowie den
- tatsächlichen Druck verantwortlich ist. Der
- Abschnitt <link linkend="printing-advanced-network-net-if">Drucker mit
- direkter TCP-Schnittstelle</link> enthält
- Hinweise zur Installation derartiger Drucker.</para>
- </listitem>
- </itemizedlist>
- </listitem>
- </itemizedlist>
-
- <sect3 xml:id="printing-advanced-network-rm">
- <title>Auf entfernten Rechnern installierte Drucker</title>
-
- <para>Das <application>LPD</application>-Drucksystem
- unterstützt den Versand von Druckaufträgen an
- andere Rechner, auf denen entweder
- <application>LPD</application> läuft oder die zu
- <application>LPD</application> kompatibel sind. Dadurch
- können Sie einen Drucker auf einem Rechner installieren
- und von anderen Rechnern des Netzwerks darauf zugreifen.
- Außerdem werden Drucker mit direkter TCP-Schnittstelle
- unterstützt, wenn diese das
- <application>LPD</application>-Protokoll
- unterstützen.</para>
-
- <para>Um diese Art des Druckens über ein Netzwerk zu
- aktivieren, installieren Sie zuerst Ihren Drucker auf einem
- Rechner Ihres Netzwerks, dem sogenannten
- <emphasis>printer host</emphasis>. Die dazu nötigen
- Schritte werden im Abschnitt <link linkend="printing-simple">
- Einfache Drucker-Konfiguration</link> beschrieben. Falls
- Sie eine erweiterte Druckerkonfiguration benötigen,
- sollten Sie auch den Abschnitt <link linkend="printing-advanced">Erweiterte
- Drucker-Konfiguration</link> lesen. Danach testen Sie, ob
- der Drucker alle von Ihnen aktivierten
- <application>LPD</application>-Fähigkeiten
- unterstützt. Stellen Sie auch sicher, dass Ihr
- <emphasis>lokales System</emphasis> berechtigt ist, den
- <application>LPD</application>-Dienst auf dem
- <emphasis>entfernten System</emphasis> zu nutzen (lesen
- Sie dazu den Abschnitt <link linkend="printing-advanced-restricting-remote">
- Druckaufträge auf entfernten Druckern
- beschränken</link>).</para>
-
- <indexterm>
- <primary>Drucker</primary>
- <secondary>Netzwerk</secondary>
- </indexterm>
-
- <indexterm><primary>Netzwerkdrucker</primary></indexterm>
-
- <para>Wenn Sie einen Drucker mit einer zu
- <application>LPD</application> kompatiblen
- Netzwerkschnittstelle verwenden, handelt es sich beim
- <emphasis>printer host</emphasis> um den Drucker selbst,
- und der <emphasis>Druckername</emphasis> ist der von Ihnen
- für diesen Drucker vorgegebene Name. Lesen Sie die
- Dokumentation Ihres Druckers und/oder der Netzwerkschnittstelle
- Ihres Druckers, um dies zu klären.</para>
+ <programlisting>#!/bin/sh
+/usr/local/bin/gs -dSAFER -dNOPAUSE -dBATCH -q -sDEVICE=ljet4 -sOutputFile=- -</programlisting>
- <tip>
- <para>Wenn Sie einen Hewlett Packard Laserjet-Drucker
- verwenden, sorgt der Druckername <literal>text</literal>
- für eine automatische LF-zu-CRLF-Konvertierung. In
- diesem Fall wird das <filename>hpif</filename>-Skript
- nicht benötigt.</para>
- </tip>
+ <para>Setzen Sie die Berechtigungen und machen Sie die Datei
+ ausführbar:</para>
- <para>Danach müssen Sie auf jedem Rechner, der auf diesen
- Drucker zugreifen soll, einen entsprechenden Eintrag in
- deren <filename>/etc/printcap</filename> aufnehmen. Dazu
- werden folgende Informationen benötigt:</para>
-
- <orderedlist>
- <listitem>
- <para>Der Name des Eintrags. Entspricht in der Regel dem
- Eintrag auf dem <emphasis>printer host</emphasis>.</para>
- </listitem>
-
- <listitem>
- <para>Lassen Sie den Eintrag für die
- <literal>lp</literal>-Fähigkeit leer, schreiben Sie
- also <literal>:lp=:</literal>.</para>
- </listitem>
-
- <listitem>
- <para>Erzeugen Sie ein Spooling-Verzeichnis und geben Sie
- dessen Pfad über die
- <literal>sd</literal>-Fähigkeit an.
- <application>LPD</application> speichert Ihre
- Druckaufträge in diesem Verzeichnis, bevor sie an den
- Drucker geschickt werden.</para>
- </listitem>
-
- <listitem>
- <para>Geben Sie den Namen des <emphasis>printer
- hosts</emphasis> über die
- <literal>rm</literal>-Fähigkeit an.</para>
- </listitem>
-
- <listitem>
- <para>Geben Sie den Namen des Druckers (auf dem
- <emphasis>printer host</emphasis>) über die
- <literal>rp</literal>-Fähigkeit an.</para>
- </listitem>
- </orderedlist>
-
- <para>Das ist alles. Sie benötigen weder
- Konvertierungsfilter, noch Seitengrößen oder
- sonstige Angaben in Ihrer lokalen
- <filename>/etc/printcap</filename>.</para>
-
- <para>Dazu ein Beispiel. Der Rechner <systemitem>rose</systemitem>
- verfügt über zwei Drucker, <literal>bamboo</literal>
- und <literal>rattan</literal>. Wir wollen nun allen Benutzern
- des Rechners <systemitem>orchid</systemitem> erlauben, diese Drucker
- zu verwenden. Es folgt nun wieder die bereits aus dem Abschnitt
- <link linkend="printing-advanced-header-pages-enabling">
- Deckblätter verwenden</link> bekannte
- <filename>/etc/printcap</filename> für den Rechner
- <systemitem>orchid</systemitem>. Diese enthielt bereits einen Eintrag
- für den Drucker <literal>teak</literal>. Zusätzlich
- tragen wir nun die zwei Drucker des Rechners
- <systemitem>rose</systemitem> ein:</para>
-
- <programlisting>#
-# /etc/printcap für den Rechner orchid - mit zusätzlichen
-# Einträgen für die (entfernten) Drucker auf dem Rechner rose
-#
+ <screen>&prompt.root; <userinput>chmod 555 /usr/local/libexec/ps2pcl</userinput></screen>
-#
-# teak ist ein lokaler Drucker und direkt mit orchid verbunden:
-#
-teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
- :lp=<filename>/dev/lpt0</filename>:sd=<filename>/var/spool/lpd/teak</filename>:mx#0:\
- :if=<filename>/usr/local/libexec/ifhp</filename>:\
- :vf=<filename>/usr/local/libexec/vfhp</filename>:\
- :of=<filename>/usr/local/libexec/ofhp</filename>:
+ <para>Die &postscript;-Eingabe wird von dem Skript erst in
+ <acronym>PCL</acronym> umgewandelt, bevor es an den Drucker
+ geschickt wird.</para>
-#
-# rattan ist mit rose verbunden, Druckaufträge für rattan gehen daher
-# an den Rechner rose:
-#
-rattan|line|diablo|lp|Diablo 630 Line Printer:\
- :lp=:rm=rose:rp=rattan:sd=<filename>/var/spool/lpd/rattan</filename>:
+ <para>Bearbeiten Sie <filename>/etc/printcap</filename> um den
+ neuen Filter zu verwenden:</para>
-#
-# bamboo ist ebenfalls mit rose verbunden:
-#
-bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
- :lp=:rm=rose:rp=bamboo:sd=<filename>/var/spool/lpd/bamboo</filename>:</programlisting>
+ <programlisting>:if=/usr/local/libexec/ps2pcl:\</programlisting>
- <para>Nun müssen wir nur noch die Spooling-Verzeichnisse
- auf dem Rechner <systemitem>orchid</systemitem> erzeugen:</para>
+ <para>Testen Sie den Filter mit einem kleinen
+ &postscript;-Programm.</para>
- <screen>&prompt.root; <userinput>mkdir -p /var/spool/lpd/rattan /var/spool/lpd/bamboo</userinput>
-&prompt.root; <userinput>chmod 770 /var/spool/lpd/rattan /var/spool/lpd/bamboo</userinput>
-&prompt.root; <userinput>chown daemon:daemon /var/spool/lpd/rattan /var/spool/lpd/bamboo</userinput></screen>
-
- <para>Damit können Benutzer des Rechners
- <systemitem>orchid</systemitem> die Drucker <literal>rattan</literal>
- und <literal>bamboo</literal> verwenden. Ein Benutzer gibt
- auf <systemitem>orchid</systemitem> beispielsweise ein:</para>
-
- <screen>&prompt.user; <userinput>lpr -P bamboo -d sushi-review.dvi</userinput></screen>
-
- <para>Die Anwendung <application>LPD</application> auf dem Rechner
- <systemitem>orchid</systemitem> kopiert daraufhin den Druckauftrag in das
- Spooling-Verzeichnis <filename>/var/spool/lpd/bamboo</filename> und stellt fest,
- dass es sich um einen DVI-Auftrag handelt. Sobald
- <systemitem>rose</systemitem> über genug freien Platz im
- <literal>bamboo</literal>-Spooling-Verzeichnis verfügt,
- würden die beiden <application>LPD</application> die Datei auf
- den Rechner <systemitem>rose</systemitem> transferieren. Diese Datei
- verbleibt danach in der Druckerwarteschlange des Rechners
- <systemitem>rose</systemitem>, bis der Ausdruck der Datei abgeschlossen ist.
- Vor dem Ausdruck würde die Datei noch von DVI nach &postscript;
- konvertiert werden, da es sich bei <literal>bamboo</literal> um einen
- an den Rechner <systemitem>rose</systemitem> angeschlossenen
- &postscript;-Drucker handelt.</para>
+ <screen>&prompt.user; <userinput>printf "%%\!PS \n /Helvetica findfont 18 scalefont setfont \
+72 432 moveto (PostScript printing successful.) show showpage \004" | lpr</userinput></screen>
</sect3>
- <sect3 xml:id="printing-advanced-network-net-if">
- <title>Drucker mit direkter TCP-Schnittstelle</title>
+ <sect3 xml:id="printing-lpd-filters-smart">
+ <title>Intelligente Filter</title>
- <para>Wenn Sie eine Netzwerkkarte für Ihren Drucker kaufen,
- können Sie zwei verschiedene Versionen wählen:
- Eine Version, die ein Drucksystem emuliert (die teure Version),
- oder eine Version, die sich verhält, als wäre der
- Drucker an eine serielle oder parallele Schnittstelle
- angeschlossen (die billige Version). Dieser Abschnitt
- beschreibt die billige Variante. Bevorzugen Sie die teure
- Variante, sollten Sie den Abschnitt <link linkend="printing-advanced-network-rm">Auf entfernten
- Rechnern installierte Drucker</link> nochmals lesen.</para>
-
- <para>Das Format der Datei <filename>/etc/printcap</filename>
- erlaubt es Ihnen, anzugeben, welche serielle oder parallele
- Schnittstelle verwendet werden soll und (falls Sie eine
- serielle Schnittstelle verwenden) welche Parameter (Baudrate,
- Flußkontrolle, Behandlung von Tabulatoren, Konvertierung
- von neuen Zeilen und andere mehr) Sie verwenden wollen. Es
- gibt allerdings keine Möglichkeit, eine Verbindung zu
- einem Drucker zu definieren, der einen TCP/IP- oder einem
- anderem Netzwerkport auf Druckaufträge hin abfragt.</para>
-
- <para>Um Daten an einen Netzwerkdrucker zu schicken, müssen
- Sie daher ein Kommunikationsprogramm entwickeln, das von
- Text- und Konvertierungsfiltern aufgerufen werden kann. Dazu
- ein Beispiel. Das Skript <command>netprint</command>
- übernimmt alle Daten von der Standardeingabe und schickt
- sie an einen Netzwerkdrucker. <command>netprint</command>
- erwartet zwei Argumente: Als erstes Argument wird der Hostname
- des Druckers und als zweites Argument der Port, über den
- die Verbindung erfolgen soll, übergeben. Dabei handelt
- sich allerdings um eine Ein-Wege-Kommunikation (von &os; zum
- Drucker). Viele Netzwerkdrucker unterstützen aber auch
- eine Zwei-Wege-Kommunikation, deren Vorteile (Abfrage des
- Druckerstatus, die Verrechnung von Druckaufträgen und
- andere mehr) Sie vielleicht nutzen wollen.</para>
-
- <programlisting>#!/usr/bin/perl
-#
-# netprint - Textfilter für einen Netzwerkdrucker
-# Installiert unter: /usr/local/libexec/netprint
-#
-$#ARGV eq 1 || die "Usage: $0 &lt;printer-hostname&gt; &lt;port-number&gt;";
-
-$printer_host = $ARGV[0];
-$printer_port = $ARGV[1];
-
-require 'sys/socket.ph';
-
-($ignore, $ignore, $protocol) = getprotobyname('tcp');
-($ignore, $ignore, $ignore, $ignore, $address)
- = gethostbyname($printer_host);
-
-$sockaddr = pack('S n a4 x8', &amp;AF_INET, $printer_port, $address);
-
-socket(PRINTER, &amp;PF_INET, &amp;SOCK_STREAM, $protocol)
- || die "Can't create TCP/IP stream socket: $!";
-connect(PRINTER, $sockaddr) || die "Can't contact $printer_host: $!";
-while (&lt;STDIN&gt;) { print PRINTER; }
-exit 0; </programlisting>
-
- <para>Dieses Skript kann für verschiedene Filter
- eingesetzt werden. Das folgende Beispiel verwendet den
- an ein Netzwerk angeschlossenen Zeilendrucker Diablo 750-N.
- Dieser Drucker empfängt zu druckende Daten auf dem
- Port 5100. Der Hostname des Druckers lautet
- <systemitem>scrivener</systemitem>.
- Daher sieht der Textfilter für diesen Drucker wie folgt
- aus:</para>
+ <para>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
+ <literal>%!</literal>. 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
+ <application>Enscript</application> in &postscript;
+ umgewandelt werden. Erstellen Sie
+ <filename>/usr/local/libexec/psif</filename> mit diesem
+ Inhalt:</para>
<programlisting>#!/bin/sh
#
-# diablo-if-net - Textfilter für den Diablo-Drucker `scrivener'.
-# Drucker lauscht auf Port 5100.
-# Installiert unter: /usr/local/libexec/diablo-if-net
-#
-exec /usr/libexec/lpr/lpf "$@" | /usr/local/libexec/netprint scrivener 5100</programlisting>
- </sect3>
- </sect2>
-
- <sect2 xml:id="printing-advanced-restricting">
- <title>Den Druckerzugriff beschränken</title>
-
- <indexterm>
- <primary>Drucker</primary>
- <secondary>den Zugriff beschränken</secondary>
- </indexterm>
-
- <para>Dieser Abschnitt beschreibt, wie Sie den Druckerzugriff
- beschränken können. Das
- <application>LPD</application>-Drucksystem erlaubt Ihnen die
- Kontrolle darüber, wer lokal oder über ein Netzwerk
- auf einen Drucker zugreifen darf, ob mehrere Kopien erstellt
- werden dürfen und wie groß Druckaufträge und
- Druckerwarteschlangen werden dürfen.</para>
-
- <sect3 xml:id="printing-advanced-restricting-copies">
- <title>Den Ausdruck von mehreren Kopien verhindern</title>
-
- <para>Das <application>LPD</application>-System macht es dem
- einzelnen Benutzer einfach, mehrere Kopien einer Datei zu
- drucken. So werden mit <command>lpr -#5</command>
- beispielsweise fünf Kopien jeder Datei des Druckauftrags
- erstellt. Ob dies gut oder schlecht ist, müssen Sie
- selbst entscheiden.</para>
-
- <para>Wenn Sie der Meinung sind, dass multiple Kopien eine
- unnötige Beanspruchung Ihres Druckers darstellen,
- sollten Sie die <option>-#</option>-Opion von &man.lpr.1;
- deaktivieren, indem Sie die
- <literal>sc</literal>-Fähigkeit in Ihre
- <filename>/etc/printcap</filename> aufnehmen. Verwendet ein
- Benutzer dennoch die Option <option>-#</option>, erhält
- er daraufhin folgende Meldung:</para>
-
- <screen>lpr: multiple copies are not allowed</screen>
-
- <para>Wenn Sie den Zugriff auf einen entfernten Drucker
- (wie in Abschnitt <link linkend="printing-advanced-network-rm">Auf entfernten
- Rechnern installierte Drucker</link> beschrieben) konfiguriert
- haben, müssen Sie die <literal>sc</literal>-Fähigkeit
- auch auf den entfernten Rechnern, die auf Ihren Drucker
- zugreifen dürfen, in <filename>/etc/printcap</filename>
- eintragen, damit Benutzer diese Vorgabe nicht durch den Wechsel
- auf einen anderen Rechner umgehen können.</para>
-
- <para>Dazu ein Beispiel. Es handelt sich dabei um die Datei
- <filename>/etc/printcap</filename> auf dem Rechner
- <systemitem>rose</systemitem>. Der Drucker <literal>rattan</literal>
- soll multiple Kopien zulassen, auf dem Laserdrucker
- <literal>bamboo</literal> sollen multiple Kopien hingegen
- nicht erlaubt sein, daher müssen wir für diesen
- Drucker die <literal>sc</literal>-Fähigkeit
- aktivieren:</para>
-
- <programlisting>#
-# /etc/printcap für den Rechner rose - multiple Kopien auf bamboo verbieten
-#
-rattan|line|diablo|lp|Diablo 630 Line Printer:\
- :sh:sd=<filename>/var/spool/lpd/rattan</filename>:\
- :lp=<filename>/dev/lpt0</filename>:\
- :if=<filename>/usr/local/libexec/if-simple</filename>:
-
-bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
- :sh:sd=<filename>/var/spool/lpd/bamboo</filename>:sc:\
- :lp=<filename>/dev/ttyu5</filename>:ms#-parenb cs8 clocal crtscts:rw:\
- :if=<filename>/usr/local/libexec/psif</filename>:\
- :df=<filename>/usr/local/libexec/psdf</filename>:</programlisting>
-
- <para>Außerdem müssen wir noch die
- <literal>sc</literal>-Fähigkeit in der Datei
- <filename>/etc/printcap</filename> des Rechners
- <systemitem>orchid</systemitem> aktivieren. Parallel dazu untersagen
- wir das Erstellen von multiplen Kopien auf dem Drucker
- <literal>teak</literal>:</para>
-
- <programlisting>#
-# /etc/printcap für den Rechner orchid - lokal machen wir keine multiplen Kopien
-# Lokaler Drucker teak oder entfernter Drucker bamboo:
-teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
- :lp=<filename>/dev/lpt0</filename>:sd=<filename>/var/spool/lpd/teak</filename>:mx#0:sc:\
- :if=<filename>/usr/local/libexec/ifhp</filename>:\
- :vf=<filename>/usr/local/libexec/vfhp</filename>:\
- :of=<filename>/usr/local/libexec/ofhp</filename>:
-
-rattan|line|diablo|lp|Diablo 630 Line Printer:\
- :lp=:rm=rose:rp=rattan:sd=<filename>/var/spool/lpd/rattan</filename>:
-
-bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
- :lp=:rm=rose:rp=bamboo:sd=<filename>/var/spool/lpd/bamboo</filename>:sc:</programlisting>
-
- <para>Durch die Verwendung der
- <literal>sc</literal>-Fähigkeit ist zwar die Verwendung
- von <command>lpr -#</command> nicht mehr
- möglich, ein Benutzer kann aber weiterhin &man.lpr.1; mehrmals
- hintereinander aufrufen oder eine Datei mehrfach in den gleichen
- Druckauftrag aufnehmen:</para>
-
- <screen>&prompt.user; <userinput>lpr forsale.sign forsale.sign forsale.sign forsale.sign forsale.sign</userinput></screen>
-
- <para>Auch dieser Mißbrauch Ihres Druckers kann verhindert
- werden, falls Sie dies wünschen. Diese Maßnahmen
- werden in diesem Abschnitt allerdings nicht behandelt.</para>
- </sect3>
-
- <sect3 xml:id="printing-advanced-restricting-access">
- <title>Den Zugriff auf bestimmte Drucker beschränken</title>
-
- <para>Sie können angeben, wer auf welchem Drucker drucken
- darf, wenn Sie den Gruppenmechanismus von &unix; in Kombination
- mit der <literal>rg</literal>-Fähigkeit von
- <filename>/etc/printcap</filename> einsetzen. Weisen Sie dazu
- alle Benutzer, die auf einen Drucker zugreifen dürfen,
- einer gemeinsamen Gruppe zu und geben Sie diese Gruppe
- über die <literal>rg</literal>-Fähigkeit an.</para>
-
- <para>Wenn Benutzer, die dieser Gruppe nicht angehören (dies
- gilt auch für <systemitem class="username">root</systemitem>), werden diese durch
- die Meldung begrüsst, wenn Sie diesen Drucker verwenden
- wollen.</para>
-
- <screen>lpr: Not a member of the restricted group</screen>
-
- <para>Analog zur <literal>sc</literal>-Fähigkeit
- (<emphasis>suppress multiple copies</emphasis>) müssen
- Sie die <literal>rg</literal>-Fähigkeit auch auf allen
- entfernten Rechnern aktivieren, die auf Ihren Drucker
- zugreifen dürfen (lesen Sie dazu auch den Abschnitt
- <link linkend="printing-advanced-network-rm">Auf entfernten
- Rechnern installierte Drucker</link>).</para>
-
- <para>Wollen wir beispielsweise allen Benutzern die Verwendung
- des Druckers <literal>rattan</literal>, aber nur Mitgliedern
- der Gruppe <systemitem class="groupname">artists</systemitem> die Verwendung des
- Druckers <literal>bamboo</literal> erlauben, passen wir die
- bereits bekannte <filename>/etc/printcap</filename> des
- Rechners <systemitem>rose</systemitem> entsprechend an:</para>
-
- <programlisting>#
-# /etc/printcap des Rechners rose - Zugriffsbeschränkung für bamboo
-#
-rattan|line|diablo|lp|Diablo 630 Line Printer:\
- :sh:sd=<filename>/var/spool/lpd/rattan</filename>:\
- :lp=<filename>/dev/lpt0</filename>:\
- :if=<filename>/usr/local/libexec/if-simple</filename>:
-
-bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
- :sh:sd=<filename>/var/spool/lpd/bamboo</filename>:sc:rg=artists:\
- :lp=<filename>/dev/ttyu5</filename>:ms#-parenb cs8 clocal crtscts:rw:\
- :if=<filename>/usr/local/libexec/psif</filename>:\
- :df=<filename>/usr/local/libexec/psdf</filename>:</programlisting>
-
- <para>Die Datei <filename>/etc/printcap</filename> des Rechners
- <systemitem>orchid</systemitem> wird dadurch nicht beeinflusst. Jeder
- Benutzer des Rechners <systemitem>orchid</systemitem> kann also
- weiterhin den Drucker <literal>bamboo</literal> verwenden.</para>
-
- <note>
- <para>Für jeden Drucker kann nur eine einzige
- priviligierte Gruppe erstellt werden.</para>
- </note>
- </sect3>
-
- <sect3 xml:id="printing-advanced-restricting-sizes">
- <title>Die Größe von Druckaufträgen kontrollieren</title>
-
- <indexterm><primary>Druckaufträge</primary></indexterm>
-
- <para>Wenn Sie viele Benutzer haben, die Ihre Drucker verwenden
- dürfen, werden Sie wahrscheinlich eine Obergrenze für
- Dateien angeben wollen, die Benutzer an Ihren Drucker senden
- dürfen. Dies ist sinnvoll, weil Speicherplatz für
- Spooling-Verzeichnisse nur begrenzt verfügbar ist und Sie stets
- sicherstellen müssen, dass auch die Druckaufträge anderer
- Benutzer verarbeitet werden können.</para>
-
- <indexterm>
- <primary>Druckauftrag</primary>
- <secondary>kontrollieren</secondary>
- </indexterm>
-
- <para><application>LPD</application> verwendet die
- <literal>mx</literal>-Fähigkeit, um die maximal erlaubte
- Größe von Dateien eines Druckauftrags anzugeben.
- Dieser Wert wird in 1.024 Bytes großen
- <literal>BUFSIZ</literal>-Blöcken angegeben. Setzen Sie
- diesen Wert auf Null, gibt es keine
- Größenbeschränkung. Existiert die
- <literal>mx</literal>-Fähigkeit hingegen überhaupt
- nicht, so gilt ein Limit von 1.000&nbsp;Blöcken.</para>
-
- <note>
- <para>Diese Limits gelten nur für die Größe
- von <emphasis>Dateien</emphasis> innerhalb eines
- Druckauftrages, <emphasis>nicht aber</emphasis> für
- die Gesamtgröße des Druckauftrags.</para>
- </note>
-
- <para><application>LPD</application> lehnt eine Datei auch dann
- nicht ab, wenn sie das Limit des Druckers überschreitet.
- Vielmehr wird die Datei bis zum Erreichen des Limits in die
- Warteschlange geladen, danach wird der Druck gestartet. Der
- das Limit überschreitende Rest wird hingegen verworfen
- und nicht gedruckt!</para>
-
- <para>Mit diesem Wissen können wir nun Limits für die
- Drucker <literal>rattan</literal> und <literal>bamboo</literal>
- definieren. Da &postscript;-Dateien der Gruppe
- <systemitem class="groupname">artists</systemitem> in der Regel sehr groß
- sind, setzen wir ein Limit von fünf Megabytes. Für
- den Druck von normalen Text (auf dem Drucker
- <literal>rattan</literal>) setzen wir hingegen kein Limit:</para>
-
- <programlisting>#
-# /etc/printcap für den Rechner rose
+# psif - Print PostScript or plain text on a PostScript printer
#
+IFS="" read -r first_line
+first_two_chars=`expr "$first_line" : '\(..\)'`
-#
-# Kein Größenlimit:
-#
-rattan|line|diablo|lp|Diablo 630 Line Printer:\
- :sh:mx#0:sd=<filename>/var/spool/lpd/rattan</filename>:\
- :lp=<filename>/dev/lpt0</filename>:\
- :if=<filename>/usr/local/libexec/if-simple</filename>:
-
-#
-# Ein Limit von 5 Megabyte:
-#
-bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
- :sh:sd=<filename>/var/spool/lpd/bamboo</filename>:sc:rg=artists:mx#5000:\
- :lp=<filename>/dev/ttyu5</filename>:ms#-parenb cs8 clocal crtscts:rw:\
- :if=<filename>/usr/local/libexec/psif</filename>:\
- :df=<filename>/usr/local/libexec/psdf</filename>:</programlisting>
-
- <para>Auch diese Limits gelten nur für lokale Benutzer.
- Wenn Sie den Zugriff auf Ihren Drucker auch über ein
- Netzwerk erlauben wollen, unterliegen die Benutzer dieser
- Rechner diesen Limits nicht. Daher müssen Sie diese
- Limits über die <literal>mx</literal>-Fähigkeit
- auch in der <filename>/etc/printcap</filename> jedes
- Rechners definieren, der Ihren Drucker verwenden darf.
- Der Abschnitt <link linkend="printing-advanced-network-rm">
- Auf entfernten Rechnern installierte Drucker</link>
- enthält weitere Informationen zum Drucken über
- ein Netzwerk.</para>
-
- <para>Es gibt eine weitere Möglichkeit, um die
- Größe von Druckaufträgen von entfernten
- Rechnern zu beschränken. Lesen Sie dazu den Abschnitt
- <link linkend="printing-advanced-restricting-remote">
- Druckaufträge von entfernten Rechnern
- beschränken</link>.</para>
- </sect3>
-
- <sect3 xml:id="printing-advanced-restricting-remote">
- <title>Druckaufträge von entfernten Rechnern
- beschränken</title>
-
- <para>Das <application>LPD</application>-System bietet mehrere
- Möglichkeiten, um Druckaufträge zu beschränken,
- die auf entfernten Rechnern gestartet wurden:</para>
-
- <variablelist>
- <varlistentry>
- <term>Rechner beschränken</term>
-
- <listitem>
- <para>Sie können festlegen, von welchen entfernten
- Rechnern ein lokaler <application>LPD</application>
- Druckaufträge annimmt, indem Sie die Dateien
- <filename>/etc/hosts.equiv</filename> sowie
- <filename>/etc/hosts.lpd</filename> entsprechend
- anpassen. <application>LPD</application>
- überprüft diese Dateien, um festzustellen,
- ob ein Druckauftrag von einem Rechner stammt, der in
- einer dieser Dateien aufgeführt ist. Ist dies
- nicht der Fall, lehnt <application>LPD</application>
- den Druckauftrag ab.</para>
-
- <para>Der Aufbau dieser Datei ist sehr einfach: Jede
- Zeile enthält einen einzigen Rechnernamen.
- Beachten Sie aber, dass
- <filename>/etc/hosts.equiv</filename> auch vom
- &man.ruserok.3;-Protokoll benötigt wird und
- Änderungen dieser Datei auch Programme wie
- &man.rsh.1; und &man.rcp.1; beeinflussen
- können.</para>
-
- <para>Das folgende Beispiel beschreibt die Datei
- <filename>/etc/hosts.lpd</filename> auf dem Rechner
- <systemitem>rose</systemitem>:</para>
-
- <programlisting>orchid
-violet
-madrigal.fishbaum.de</programlisting>
-
- <para>Durch diese Vorgaben akzeptiert <systemitem>rose</systemitem>
- nur noch Druckaufträge von den Rechnern
- <systemitem>orchid</systemitem>, <systemitem>violet</systemitem>,
- und <systemitem class="fqdomainname">madrigal.fishbaum.de</systemitem>.
- Versucht ein anderer Rechner, auf den
- <application>LPD</application> von
- <systemitem>rose</systemitem> zuzugreifen, wird dieser
- Druckauftrag abgelehnt werden.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>Größenbeschränkungen</term>
-
- <listitem>
- <para>Sie können festlegen, wieviel Speicherplatz
- auf dem Dateisystem, in dem das Spooling-Verzeichnis
- liegt, mindestens frei sein muss. Dazu erzeugen Sie im
- Spooling-Verzeichnis Ihres lokalen Druckers die Datei
- <filename>minfree</filename>. In dieser Datei geben
- Sie an, wieviele 512&nbsp;Byte große
- Blöcke auf Ihrer Platte frei sein müssen,
- damit ein Druckauftrag von einem entfernten Rechner
- akzeptiert wird.</para>
-
- <para>Durch diese Vorgabe können Sie sicherstellen,
- dass Benutzer von entfernten Rechnern Ihr Dateisystem
- nicht <quote>zumüllen</quote>. Außerdem
- können Sie damit lokale Benutzer bevorzugen, da
- diese auch dann noch Druckaufträge erteilen
- dürfen, wenn der verfügbare Plattenplatz
- unter das in der Datei <filename>minfree</filename>
- definierte Limit gefallen ist.</para>
-
- <para>Legen wir nun die Datei <filename>minfree</filename>
- für den Drucker <literal>bamboo</literal> an. Zuerst
- untersuchen wir <filename>/etc/printcap</filename>, um
- das Spooling-Verzeichnis für diesen Drucker zu
- finden. Das folgende Beispiel zeigt den Eintrag
- für den Drucker <literal>bamboo</literal>:</para>
-
- <programlisting>bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
- :sh:sd=<filename>/var/spool/lpd/bamboo</filename>:sc:rg=artists:mx#5000:\
- :lp=<filename>/dev/ttyu5</filename>:ms#-parenb cs8 clocal crtscts:rw:mx#5000:\
- :if=<filename>/usr/local/libexec/psif</filename>:\
- :df=<filename>/usr/local/libexec/psdf</filename>:</programlisting>
-
- <para>Das Spooling-Verzeichnis wird über die
- <literal>sd</literal>-Fähigkeit festgelegt.
- Wir wollen, dass mindestens drei Megabyte
- (also 6144&nbsp;Blöcke) freier Plattenplatz
- vorhanden sein müssen, damit
- <application>LPD</application> einen Druckauftrag
- von einem entfernten Rechner akzeptiert:</para>
-
- <screen>&prompt.root; <userinput>echo 6144 &gt; /var/spool/lpd/bamboo/minfree</userinput></screen>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>Benutzer beschränken</term>
-
- <listitem>
- <para>Sie können auch festlegen, welche entfernten
- Benutzer Ihren lokalen Drucker verwenden dürfen,
- indem Sie die <literal>rs</literal>-Fähigkeit in
- <filename>/etc/printcap</filename> definieren. Wenn
- für den Eintrag eines lokalen Druckers die
- <literal>rs</literal>-Fähigkeit definiert ist,
- akzeptiert <application>LPD</application>
- Druckaufträge von entfernten Rechnern nur dann,
- <emphasis>wenn</emphasis> der Benutzer, der den
- Druckauftrag gesendet hat, auch über ein
- gleichnamiges Benutzerkonto auf dem lokalen Rechner
- verfügt. Ist dies nicht der Fall, lehnt
- <application>LPD</application> den Druckauftrag ab.</para>
-
- <para>Diese Fähigkeit ist besonders in Umgebungen
- nützlich, in denen beispielsweise verschiedene
- Abteilungen ein gemeinsames Netzwerk teilen, wobei
- einige Benutzer zu mehreren Abteilungen gehören.
- Haben diese Benutzer auch ein Benutzerkonto auf Ihrem
- System, so können sie Ihren Drucker auch von
- ihrer eigenen Abteilung aus nutzen. Wollen Sie zwar
- den Zugriff auf Ihren Drucker, <emphasis>nicht
- aber</emphasis> den Zugriff auf Ihre übrigen
- Ressourcen erlauben, können Sie für diese
- Benutzer einen sogenannten <quote>Token-Account</quote>
- ohne Heimatverzeichnis und mit einer nutzlosen Shell
- wie <filename>/usr/bin/false</filename> erstellen.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </sect3>
- </sect2>
-
- <sect2 xml:id="printing-advanced-acct">
- <title>Die Druckernutzung verrechnen</title>
+case "$first_two_chars" in
+%!)
+ # %! : PostScript job, print it.
+ echo "$first_line" &amp;&amp; cat &amp;&amp; exit 0
+ exit 2
+ ;;
+*)
+ # otherwise, format with enscript
+ ( echo "$first_line"; cat ) | /usr/local/bin/enscript -o - &amp;&amp; exit 0
+ exit 2
+ ;;
+esac</programlisting>
- <indexterm>
- <primary>Drucker</primary>
- <secondary>verrechnen</secondary>
- </indexterm>
-
- <para>Sie wollen die Nutzung Ihrer Drucker kostenpflichtig machen?
- Warum auch nicht? Papier und Tinte kosten Geld. Auch eine
- regelmäßige Wartung muss bezahlt werden. Nachdem Sie
- einen Preis festgelegt haben, den Sie für jede
- gedruckte Seite verrechnen wollen, stellt sich die Frage, wie Sie
- die Verrechnung der Druckkosten technisch umsetzen
- können.</para>
-
- <para>Die schlechte Nachricht ist, dass das
- <application>LPD</application>-System dabei wenig hilfreich ist.
- Die Verrechnung von Druckaufträgen hängt stark vom
- verwendeten Drucker, den zu druckenden Dateiformaten und
- <emphasis>Ihren</emphasis> Anforderungen an die Verrechnung
- der Druckernutzung ab.</para>
-
- <para>Um die Verrechnung der Druckernutzung zu implementieren,
- müssen Sie sowohl Ihre Textfilter (um den Druck von
- normalem Text abzurechnen) als auch Ihre Konvertierungsfilter
- (um den Druck sonstiger Formate abzurechnen) entsprechend
- anpassen, damit diese die Zahl der gedruckten Seiten
- ermitteln können. Leider können Sie dazu nicht
- einen einfachen Ausgabefilter verwenden, da diese die
- Verrechnung von Druckaufträgen nicht unterstützen.
- Weitere Informationen zu den verschiedenen Filterarten finden
- Sie im Abschnitt <link linkend="printing-advanced-filter-intro">Filter</link>.</para>
+ <para>Setzen Sie die Berechtigungen und machen Sie die Datei
+ ausführbar:</para>
- <para>Prinzipiell gibt es zwei Möglichkeiten, wie Sie diese
- Verrechnung umsetzen können:</para>
+ <screen>&prompt.root; <userinput>chmod 555 /usr/local/libexec/psif</userinput></screen>
- <itemizedlist>
- <listitem>
- <para>Die <emphasis>periodische Verrechnung</emphasis> wird
- häufiger verwendet, da sie einfacher zu implementieren
- ist. Wenn ein Druckauftrag ausgeführt wird,
- schreibt der Filter den Benutzer, den verwendeten Rechner
- sowie die Anzahl der gedruckten Seiten in eine
- Verrechnungsdatei. Nach einem zu definierenden Zeitraum
- werden diese Dateien ausgewertet, die Gesamtzahl der
- von einem Benutzer gedruckten Seiten bestimmt und dem
- jeweiligen Benutzer verrechnet. Danach werden alle
- Protokolldateien zurückgesetzt, und die Protokollierung
- beginnt von Neuem.</para>
- </listitem>
+ <para>Bearbeiten Sie <filename>/etc/printcap</filename> um den
+ neuen Filter zu verwenden:</para>
- <listitem>
- <para>Die <emphasis>unmittelbare Verrechnung</emphasis> wird
- nur selten eingesetzt, das sie schwieriger zu implementieren
- ist. Bei dieser Methode wird der Druckauftrag verrechnet,
- sobald der Drucker verwendet wird. Dadurch können Sie
- beispielsweise verhindern, dass ein Benutzer seine erlaubte
- <quote>Druckquote</quote> überschreitet.
- Zusätzlich können Sie es Ihren Benutzern erlauben,
- deren Druckquote abzufragen oder anzupassen. Allerdings
- benötigen Sie eine Datenbank, um Benutzer und deren
- Quoten verwalten zu können.</para>
- </listitem>
- </itemizedlist>
+ <programlisting>:if=/usr/local/libexec/psif:\</programlisting>
- <para>Das <application>LPD</application>-Drucksystem
- unterstützt beide Methoden. Allerdings müssen Sie
- die benötigen Filter sowie den zur Verrechnung nötigen
- Code selbst bereitstellen. Der Vorteil dabei ist allerdings,
- dass Sie in der Wahl Ihrer Verrechnungsmethode äußerst
- flexibel sind. So können Sie sich etwa für die
- periodische oder die unmittelbare Verrechnung entscheiden. Sie
- können festlegen, welche Informationen Sie erfassen wollen:
- Benutzernamen, Rechnernamen, die Art der Druckaufträge,
- die Anzahl der gedruckten Seiten, den Papierverbrauch, den
- Zeitaufwand für die Bearbeitung eines Druckauftrages und
- viele andere mehr. Dazu müssen Sie Ihre Filter entsprechend
- anpassen, damit diese Informationen erfassst und gespeichert
- werden.</para>
-
- <sect3>
- <title>Kurzanleitung für die Implementierung der
- Druckerverrechnung</title>
-
- <para>&os; bietet Ihnen zwei Programme, um eine periodische
- Verrechnung rasch zu implementieren. Dabei handelt es sich
- um den im Abschnitt <link linkend="printing-advanced-lpf">lpf: Ein Textfilter</link>
- behandelten Textfilter sowie um &man.pac.8;, ein Programm,
- mit dem Sie Einträge aus Verrechnungsdateien auslesen
- und aufsummieren können.</para>
-
- <para>Wie bereits im Abschnitt <link linkend="printing-advanced-filters">Filter</link> erwähnt,
- startet <application>LPD</application> den Text- oder
- Konvertierungsfilter mit dem Namen der Verrechnungsdatei als
- Argument. Dadurch weiß der Filter, in welche Datei
- er einen Verrechnungseintrag schreiben soll. Der Name dieser
- Datei wird über die <literal>af</literal>-Fähigkeit
- in <filename>/etc/printcap</filename> festgelegt. Falls die
- Datei nicht über einen absoluten Pfad angegeben wird,
- handelt es sich um einen Pfad relativ zum
- Spooling-Verzeichnis.</para>
-
- <para><application>LPD</application> startet
- <command>lpf</command> mit den Argumenten <emphasis>page width
- und page length</emphasis>, die über die
- <literal>pw</literal>- und <literal>pl</literal>-Fähigkeit
- definiert werden. Das Kommando <command>lpf</command> verwendet
- diese Argumente danach, um den Papierverbrauch zu bestimmen. Nachdem
- die Datei an den Drucker geschickt wurde, wird ein
- Verrechnungseintrag in die Verrechnungsdatei geschrieben. Ein
- solcher Eintrag sieht dabei ähnlich den folgenden aus:</para>
-
- <programlisting>2.00 rose:andy
-3.00 rose:kelly
-3.00 orchid:mary
-5.00 orchid:mary
-2.00 orchid:zhang</programlisting>
-
- <para>Sie sollten für jeden Drucker eine eigene
- Verrechnungsdatei verwenden, da <command>lpf</command>
- die Verrechnungsdatei nicht sperren kann. Sind also
- gleichzeitig zwei <command>lpf</command>-Instanzen aktiv,
- kann es dazu kommen, dass Ihre Verrechnungsdatei zerstört
- wird, wenn beide Instanzen gleichzeitig in die gleiche Datei
- schreiben. Damit für jeden Drucker eine eigene
- Verrechnungsdatei angelegt wird, fügen Sie den
- Eintrag <literal>af=acct</literal> in
- <filename>/etc/printcap</filename> ein. Dadurch wird für
- jeden Drucker eine separate Verrechnungsdatei mit dem Namen
- <filename>acct</filename> im Spooling-Verzeichnis des
- jeweiligen Druckers erzeugt.</para>
-
- <para>Wenn Sie Ihre Daten erfasst haben und die entstandenen
- Kosten Ihren Benutzern verrechnen wollen, starten Sie
- &man.pac.8;. Dazu wechseln Sie in das Spooling-Verzeichnis
- des auszuwertenden Druckers und geben <command>pac</command>
- ein. Dadurch erhalten Sie eine Ausgabe ähnlich
- der folgenden:</para>
-
- <screen> Login pages/feet runs price
-orchid:kelly 5.00 1 $ 0.10
-orchid:mary 31.00 3 $ 0.62
-orchid:zhang 9.00 1 $ 0.18
-rose:andy 2.00 1 $ 0.04
-rose:kelly 177.00 104 $ 3.54
-rose:mary 87.00 32 $ 1.74
-rose:root 26.00 12 $ 0.52
-
-total 337.00 154 $ 6.74</screen>
-
- <para>Folgende Argumente können an &man.pac.8;
- übergeben werden:</para>
-
- <variablelist>
- <varlistentry>
- <term><option>-P<replaceable>Drucker</replaceable></option></term>
-
- <listitem>
- <para>Gibt an, welcher <replaceable>Drucker</replaceable>
- ausgewertet werden soll. Diese Option setzt voraus,
- dass für die <literal>af</literal>-Fähigkeit
- in <filename>/etc/printcap</filename> ein absoluter
- Pfad angegeben wurde.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-c</option></term>
-
- <listitem>
- <para>Sortiert die Ausgabe nach den verursachten Kosten
- anstelle einer alphabetischen Sortierung der
- Benutzernamen.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-m</option></term>
-
- <listitem>
- <para>Ignoriert den Rechnernamen in Verrechnungsdateien.
- Ist diese Option gesetzt, ist der Benutzer
- <systemitem class="username">smith</systemitem> auf dem Rechner
- <systemitem>alpha</systemitem> mit dem Benutzer
- <systemitem class="username">smith</systemitem> auf dem Rechner
- <systemitem>gamma</systemitem> identisch. Ist diese Option
- nicht gesetzt, handelt es sich um unterschiedliche
- Benutzer.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-p<replaceable>Preis</replaceable></option></term>
-
- <listitem>
- <para>Berechnet die entstandenen Kosten aus dem
- <replaceable>Preis</replaceable> in Dollar pro Seite
- statt aus dem über die
- <literal>pc</literal>-Fähigkeit in
- <filename>/etc/printcap</filename> definierten Preis.
- In der Voreinstellung sind dies zwei Cent pro Seite.
- Sie können aber auch einen eigenen
- <replaceable>Preis</replaceable> in Form einer
- Gleitkommazahl angeben.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-r</option></term>
-
- <listitem>
- <para>Die Sortierreihenfolge umkehren.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-s</option></term>
-
- <listitem>
- <para>Die Verrechnungsdatei in einer neuen Datei
- aufsummieren und die originale Verrechnungsdatei
- zurücksetzen.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><replaceable>name</replaceable>
- <replaceable>&hellip;</replaceable></term>
-
- <listitem>
- <para>Verrechnungsinformationen nur für die
- angegebenen Benutzernamen ausgeben.</para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- <para>In der Voreinstellung gibt &man.pac.8; aus, wieviele
- Seiten von welchem Benutzer auf welchem Rechner gedruckt
- wurden. Wenn Rechnernamen für Sie uninteressant sind
- (weil sich Benutzer beispielsweise auf jedem Rechner
- anmelden können), sollten Sie <command>pac
- -m</command> verwenden, um die folgende Ausgabe zu
- erhalten:</para>
-
- <screen> Login pages/feet runs price
-andy 2.00 1 $ 0.04
-kelly 182.00 105 $ 3.64
-mary 118.00 35 $ 2.36
-root 26.00 12 $ 0.52
-zhang 9.00 1 $ 0.18
-
-total 337.00 154 $ 6.74</screen>
-
-
- <para>Um den zu verrechnenden Betrag zu ermitteln, verwendet
- &man.pac.8; die <literal>pc</literal>-Fähigkeit von
- <filename>/etc/printcap</filename> (Voreinstellung 200, dieser
- Wert entspricht 2 Cents). Geben Sie hier (als Hundertfaches
- des tatsächlichen Wertes) den Preis pro Seite an, den
- Sie verrechnen wollen. Sie können diesen Wert
- überschreiben, wenn Sie &man.pac.8; mit der Option
- <option>-p</option> ausführen. Beachten Sie dabei aber,
- dass Sie in diesem Fall die Einheiten in Dollar angeben, und
- nicht als Hundertfaches des tatsächlichen Cent-Betrages.
- So steht</para>
-
- <screen>&prompt.root; <userinput>pac -p1.50</userinput></screen>
-
- <para>beispielsweise für einen Preis von einem Dollar und
- fünfzig Cent pro Seite.</para>
-
- <para>Der Aufruf von <command>pac -s</command>
- führt schließlich dazu, dass die aufsummierten
- Informationen in einer eigenen Auswertedatei gespeichert werden.
- Diese hat den gleichen Namen wie die Verrechnungsdatei, es wird
- lediglich ein <literal>_sum</literal> an den Dateinamen
- angehängt. Danach wird die Verrechnungsdatei
- zurückgesetzt. Wenn Sie &man.pac.8; erneut aufrufen,
- wird die Auswertedatei eingelesen, um die Startbeträge
- zu erhalten, alle weiteren Informationen stammen danach
- aus der normalen Verrechnungsdatei.</para>
+ <para>Um den Filter zu testen, drucken Sie &postscript;- und
+ einfache Textdateien.</para>
</sect3>
- <sect3>
- <title>Wie kann man die Anzahl der gedruckten Seiten
- ermitteln?</title>
-
- <para>Um die Druckernutzung auch nur annähernd genau
- verrechnen zu können, müssen Sie ermitteln, wieviel
- Papier ein Druckauftrag verbraucht. Die Bestimmung dieses
- Wertes ist das zentrale Problem, das Sie lösen müssen,
- wenn Sie Druckaufträge kostenpflichtig machen wollen.</para>
-
- <para>Normaler Text stellt in der Regel kein Problem dar: Sie
- zählen dazu nur die Zeilen des Druckauftrages und
- dividieren diesen Wert durch die Anzahl der Zeilen pro Seite,
- die Ihr Drucker bietet. Allerdings dürfen Sie dabei
- nicht vergessen, dass gelöschte Zeichen
- (<foreignphrase>Backspaces</foreignphrase>) Zeilen
- überschreiben. Außerdem können sich lange
- logische Zeilen (im Druckauftrag) über mehrere
- physikalische Zeilen (am Ausdruck) erstrecken.</para>
-
- <para>Der im Abschnitt <link linkend="printing-advanced-lpf">lpf:
- Ein Textfilter</link> vorgestellte Textfilter
- <command>lpf</command> berücksichtigt diese
- Besonderheiten. Wenn Sie einen eigenen Textfilter für
- die Verrechnung der Druckernutzung schreiben wollen, sollten
- Sie sich daher den Quellcode von <command>lpf</command>
- näher ansehen.</para>
-
- <para>Aber was ist mit anderen Dateiformaten?</para>
-
- <para>Für die DVI-nach-LaserJet- oder für die
- DVI-nach-&postscript;-Konvertierung können Sie die
- Protokolldateien von <command>dvilj</command> oder
- <command>dvips</command> auslesen, um festzustellen, wieviele
- Seiten konvertiert wurden. Die gleiche Methode könnte
- auch mit anderen Dateitypen funktionieren.</para>
-
- <para>Alle diese Methoden haben aber das Problem, dass ein
- Drucker möglicherweise nicht alle Seiten des
- Druckauftrages drucken kann. So könnte es etwa zu einem
- Papierstau kommen, der Toner könnte zu Ende gehen oder
- es könnte ein Druckerdefekt
- auftreten&nbsp;&ndash;&nbsp;trotzdem würden alle Seiten
- des Druckauftrages verrechnet werden.</para>
-
- <para>Was kann man dagegen tun?</para>
-
- <para>Es gibt nur eine einzige <emphasis>sichere</emphasis>
- Methode, um die Druckernutzung <emphasis>exakt</emphasis>
- zu bestimmen. Besorgen Sie sich einen Drucker, der das
- verbrauchte Papier protokolliert und verbinden Sie ihn
- über eine serielle oder eine Netzwerkverbindung.
- Nahezu alle &postscript;-Drucker, aber auch viele andere
- Modelle und Druckertypen (beispielsweise Laserdrucker von
- Imagen) sind dazu in der Lage. Passen Sie die Filter
- für diese Drucker entsprechend an, damit diese
- nach jedem Druckauftrag die Anzahl der gedruckten Seiten
- ermitteln und verrechnen Sie Druckaufträge
- <emphasis>ausschließlich</emphasis> über diesen
- Wert. Danach müssen Sie sich um die Anzahl
- der gedruckten Zeilen oder um mögliche Druckerprobleme
- nie mehr kümmern.</para>
+ <sect3 xml:id="printing-lpd-filters-othersmart">
+ <title>Weitere intelligente Filter</title>
- <para>Sie können aber auch großzügig sein und alle
- Ausdrucke kostenlos abgeben.</para>
+ <para>Einen Filter zu schreiben, der verschiedene Arten von
+ Eingaben erkennen und formatieren kann, ist eine große
+ Herausforderung. <package>print/aspfilter</package> aus der
+ Ports-Sammlung ist auch ein intelligenter Filter, der
+ Dutzende Dateitypen automatisch in eine für den Drucker
+ verständliche <acronym>PDL</acronym> umwandeln kann.
+ Weitere Details finden Sie auf <link
+ xlink:href="http://www.aspfilter.org"></link>.</para>
</sect3>
</sect2>
- </sect1>
-
- <sect1 xml:id="printing-using">
- <info><title>Drucker verwenden</title>
- <authorgroup>
- <author><personname><firstname>Johann</firstname><surname>Kois</surname></personname><contrib>Übersetzt von </contrib></author>
- </authorgroup>
- </info>
-
-
-
- <indexterm>
- <primary>Drucker</primary>
- <secondary>verwenden</secondary>
- </indexterm>
-
- <para>Dieser Abschnitt beschreibt, wie Sie einen unter &os;
- konfigurierten Drucker verwenden können. Die folgende
- Liste bietet einen Überblick über wichtige
- Anwenderbefehle:</para>
-
- <variablelist>
- <varlistentry>
- <term>&man.lpr.1;</term>
-
- <listitem>
- <para>Einen Druckauftrag drucken</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&man.lpq.1;</term>
-
- <listitem>
- <para>Eine Druckerwarteschlange prüfen</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&man.lprm.1;</term>
-
- <listitem>
- <para>Einen Druckauftrag aus einer Warteschlange entfernen
- (stornieren)</para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- <para>Zusätzlich existiert mit &man.lpc.8; ein Befehl zur
- zur Steuerung von Druckern und Druckerwarteschlangen, der im
- Abschnitt <link linkend="printing-lpc">Drucker verwalten</link>
- näher beschrieben wird.</para>
-
- <para>Jeder der drei Befehle &man.lpr.1;, &man.lprm.1;, sowie
- &man.lpq.1; akzeptiert die Option
- <option>-P <replaceable>printer-name</replaceable></option>,
- mit der Sie den zu verwendenden Drucker (der dazu in
- <filename>/etc/printcap</filename> definiert sein muss)
- festlegen. Dadurch sind Sie in der Lage, Druckaufträge
- zu erstellen, zu stornieren, oder den Status Ihrer
- Druckaufträge zu überprüfen. Verwenden Sie die
- Option <option>-P</option> nicht, wird der in der Umgebungsvariable
- <envar>PRINTER</envar> definierte Drucker verwendet. Existiert
- diese Variable nicht, greifen diese Befehle auf den Drucker
- <literal>lp</literal> zurück.</para>
-
- <para>Im Folgenden steht der Begriff
- <emphasis>Standarddrucker</emphasis> daher
- für den über die Umgebungsvariable <envar>PRINTER</envar>
- definierten Drucker, oder, falls diese Variable nicht existiert,
- für den Drucker <literal>lp</literal>.</para>
-
- <sect2 xml:id="printing-lpr">
- <title>Druckaufträge erstellen</title>
-
- <para>Um eine Datei zu drucken, geben Sie folgenden Befehl ein:</para>
-
- <screen>&prompt.user; <userinput>lpr filename ...</userinput></screen>
-
- <indexterm><primary>printing</primary></indexterm>
-
- <para>Dadurch wird jede angegebene Datei an den Standarddrucker
- geschickt. Wenn Sie keine Datei angeben, liest &man.lpr.1;
- die zu druckenden Daten von der Standardeingabe. Um
- beispielsweise einige wichtige Systemdateien zu drucken, geben
- Sie folgenden Befehl ein:</para>
-
- <screen>&prompt.user; <userinput>lpr /etc/host.conf /etc/hosts.equiv</userinput></screen>
-
- <para>Um einen bestimmten Drucker auszuwählen, verwenden Sie:</para>
-
- <screen>&prompt.user; <userinput>lpr -P printer-name filename ...</userinput></screen>
-
- <para>Das folgende Beispiel gibt eine ausführliche Liste aller
- im Arbeitsverzeichnis enthaltenen Dateien auf den Drucker
- <literal>rattan</literal> aus:</para>
-
- <screen>&prompt.user; <userinput>ls -l | lpr -P rattan</userinput></screen>
-
- <para>Da keine Dateien an &man.lpr.1; übergeben werden, liest
- <command>lpr</command> die zu druckenden Daten von der
- Standardeingabe, in unserem Fall also die Ausgabe des Befehls
- <command>ls -l</command>.</para>
-
- <para>&man.lpr.1; akzeptiert auch verschiedene Optionen zur
- Formatierung und Konvertierung von Dateien, zur Erzeugung von
- multiplen Ausdrucken und so weiter. Lesen Sie dazu den
- Abschnitt <link linkend="printing-lpr-options">Druckoptionen</link>.</para>
- </sect2>
-
- <sect2 xml:id="printing-lpq">
- <title>Druckaufträge verwalten</title>
- <indexterm><primary>Druckauftrag</primary></indexterm>
+ <sect2 xml:id="printing-lpd-queues">
+ <title>Mehrere Warteschlangen</title>
- <para>Wenn Sie &man.lpr.1; verwenden, werden alle zu druckenden
- Daten in ein Paket, den sogenannten <quote>Druckauftrag</quote>,
- gepackt und an <application>LPD</application> geschickt. Jeder
- Drucker verfügt über eine Druckerwarteschlange, in der Ihre
- Druckaufträge gemeinsam mit denen anderer Benutzer verbleiben, bis
- sie gedruckt werden können. Zuerst eintreffende
- Druckaufträge werden dabei auch zuerst gedruckt.</para>
-
- <para>Um die Druckerwarteschlange des Standarddruckers anzuzeigen,
- verwenden Sie &man.lpq.1;. Wollen Sie einen anderen Drucker
- abfragen, müssen Sie die Option <option>-P</option>
- verwenden. Der Befehl
-
- <screen>&prompt.user; <userinput>lpq -P bamboo</userinput></screen>
-
- zeigt so die Druckerwarteschlange des Druckers
- <literal>bamboo</literal> an. Dieser Befehl liefert eine
- Ausgabe ähnlich der folgenden:</para>
-
- <screen>bamboo is ready and printing
-Rank Owner Job Files Total Size
-active kelly 9 /etc/host.conf, /etc/hosts.equiv 88 bytes
-2nd kelly 10 (standard input) 1635 bytes
-3rd mary 11 ... 78519 bytes</screen>
-
- <para>Derzeit enthält die Warteschlange von
- <literal>bamboo</literal> drei Druckaufträge. Dem ersten
- Auftrag, der vom Benutzer kelly erstellt wurde, wurde die
- <quote>Auftragsnummer (job number)</quote> 9 zugewiesen.
- Analog erhält jeder Druckerauftrag eine eindeutige Nummer
- zugewiesen. Diese Nummern sind nur dann von Bedeutung, wenn
- Sie einen Druckauftrag stornieren wollen. Der Abschnitt
- <link linkend="printing-lprm">Druckaufträge
- stornieren</link> beschreibt, wie Sie dazu vorgehen.</para>
-
- <para>Der Auftrag mit der Nummer 9 besteht aus zwei Dateien,
- mehrere an &man.lpr.1; übergebene Dateien werden also als
- Teil eines (gemeinsamen) Druckauftrags betrachtet. Dieser
- Druckauftrag ist derzeit aktiv (beachten Sie den Status
- <literal>active</literal> in der Spalte <quote>Rank</quote>),
- wird also gerade gedruckt. Der zweite Auftrag besteht aus
- Daten, die von der Standardeingabe an &man.lpr.1;
- übergeben wurden. Der dritte Auftrag wurde vom Benutzer
- <systemitem class="username">mary</systemitem> erstellt. Er ist sehr viel
- größer als die anderen Aufträge. Da der
- Pfad der zu druckenden Datei aufgrund seiner Länge nicht
- in der Spalte <quote>Files</quote> Platz hat, werden von
- &man.lpq.1; nur drei Punkte angezeigt.</para>
-
- <para>Die erste Zeile der Ausgabe von &man.lpq.1; ist ebenfalls
- sehr nützlich: Sie beschreibt den momentanen Druckerstatus
- (oder zumindest, was <application>LPD</application> denkt,
- dass der Drucker gerade macht).</para>
-
- <para>&man.lpq.1; unterstützt auch die Option
- <option>-l</option> zur Erstellung einer ausführlicheren
- Ausgabe. Die Eingabe von <command>lpq -l</command>
- erzeugt für unser obiges Beispiel die folgende Ausgabe:</para>
-
- <screen>waiting for bamboo to become ready (offline ?)
-kelly: 1st [job 009rose]
- /etc/host.conf 73 bytes
- /etc/hosts.equiv 15 bytes
-
-kelly: 2nd [job 010rose]
- (standard input) 1635 bytes
-
-mary: 3rd [job 011rose]
- /home/orchid/mary/research/venus/alpha-regio/mapping 78519 bytes</screen>
+ <para>Die Einträge in <filename>/etc/printcap</filename> 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.</para>
+
+ <para>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 <filename>/etc/printcap</filename>
+ erstellt:</para>
+
+ <programlisting>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:</programlisting>
+
+ <para>Dokumente, die zum <literal>textprinter</literal>
+ geschickt werden, werden wie im vorherigen Beispiel durch den
+ Filter <filename>/usr/local/libexec/enscript</filename>
+ formatiert. Fortgeschrittene Anwender können
+ &postscript;-Dateien direkt auf dem Drucker
+ <literal>psprinter</literal> drucken, wo keine
+ Filterung stattfindet.</para>
+
+ <para>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.</para>
</sect2>
- <sect2 xml:id="printing-lprm">
- <title>Druckaufträge stornieren</title>
-
- <para>Mit &man.lprm.1; können Sie einen Druckauftrag
- stornieren. Häufig ist &man.lprm.1; auch noch in der
- Lage, einen bereits aktiven Auftrag abzubrechen, allerdings
- wird dabei in der Regel trotzdem ein Teil des Auftrages oder
- der gesamte Auftrag gedruckt.</para>
-
- <para>Um einen Druckauftrag auf dem Standarddrucker zu
- stornieren, müssen Sie zuerst die Auftragsnummer
- über &man.lpq.1; ermitteln. Danach geben Sie
- Folgendes ein:</para>
-
- <screen>&prompt.user; <userinput>lprm Job-Nummer</userinput></screen>
-
- <para>Um einen Druckauftrag eines anderen Druckers zu stornieren,
- benötigen Sie wiederum die Option <option>-P</option>. Der
- folgende Befehl entfernt den Druckauftrag mit der Nummer 10
- aus der Warteschlange des Druckers
- <literal>bamboo</literal>:</para>
-
- <screen>&prompt.user; <userinput>lprm -P bamboo 10</userinput></screen>
-
- <para>&man.lprm.1; unterstützt verschiedene Kurzbefehle:</para>
-
- <variablelist>
- <varlistentry>
- <term>lprm -</term>
-
- <listitem>
- <para>Entfernt alle Druckaufträge (des Standarddruckers),
- die von Ihnen erstellt wurden.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>lprm <replaceable>user</replaceable></term>
-
- <listitem>
- <para>Entfernt alle Druckaufträge (des Standarddruckers),
- die vom Benutzer <replaceable>user</replaceable> erstellt
- wurden. Der Superuser kann im Gegensatz zu einem normalen
- Benutzer auch Aufträge anderer Benutzer entfernen.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>lprm</term>
-
- <listitem>
- <para>Wenn Sie weder eine Auftragsnummer, einen Benutzernamen,
- noch die Option <option>-</option> angeben, entfernt
- &man.lprm.1; den aktiven Druckauftrag auf dem
- Standarddrucker, falls dieser Auftrag von Ihnen erstellt
- wurde. Der Superuser kann hingegen jeden aktiven
- Druckauftrag abbrechen.</para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- <para>Verwenden Sie zusätzlich die Option <option>-P</option>
- zu den eben beschriebenen Kurzbefehlen, wenn Sie diese auf einen
- anderen Drucker als den Standarddrucker anwenden wollen. So
- entfernt der folgende Befehl beispielsweise alle
- Druckaufträge des aktuellen Benutzers aus der
- Druckerwarteschlange des Druckers
- <literal>rattan</literal>:</para>
-
- <screen>&prompt.user; <userinput>lprm -P rattan -</userinput></screen>
-
- <note>
- <para>Wenn Sie in einer Netzwerkumgebung arbeiten, erlaubt es
- &man.lprm.1; Ihnen nur, Druckaufträge auf dem Rechner
- zu stornieren, auf dem sie erstellt wurden. Dies gilt selbst
- dann, wenn der gleiche Drucker auch auf anderen Rechnern des
- Netzwerks verfügbar ist. Die folgende Befehlsfolge
- veranschaulicht diesen Umstand:</para>
-
- <screen>&prompt.user; <userinput>lpr -P rattan myfile</userinput>
-&prompt.user; <userinput>rlogin orchid</userinput>
-&prompt.user; <userinput>lpq -P rattan</userinput>
-Rank Owner Job Files Total Size
-active seeyan 12 ... 49123 bytes
-2nd kelly 13 myfile 12 bytes
-&prompt.user; <userinput>lprm -P rattan 13</userinput>
-rose: Permission denied
-&prompt.user; <userinput>logout</userinput>
-&prompt.user; <userinput>lprm -P rattan 13</userinput>
-dfA013rose dequeued
-cfA013rose dequeued
- </screen>
- </note>
- </sect2>
+ <sect2 xml:id="printing-lpd-monitor">
+ <title>Druckaufträge steuern und überwachen</title>
- <sect2 xml:id="printing-lpr-options">
- <title>Abseits von normalem Text: Druckoptionen</title>
+ <para>Es stehen verschiedene Programme zur Verfügung um
+ Druckaufträge zu überwachen und den Druckbetrieb zu
+ steuern.</para>
+
+ <sect3 xml:id="printing-lpd-monitor-lpq">
+ <title>&man.lpq.1;</title>
+
+ <para>&man.lpq.1; zeigt den Status der Druckaufträge des
+ Benutzers an. Druckaufträge anderer Benutzer werden nicht
+ angezeigt.</para>
+
+ <para>Dieser Befehl zeigt die anstehenden Druckaufträge eines
+ Benutzers für einen Drucker an:</para>
+
+ <screen>&prompt.user; <userinput>lpq -P<replaceable>lp</replaceable></userinput>
+Rank Owner Job Files Total Size
+1st jsmith 0 (standard input) 12792 bytes</screen>
+
+ <para>Der folgende Befehl zeigt die anstehenden Druckaufträge
+ eines Benutzers für alle Drucker an:</para>
+
+ <screen>&prompt.user; <userinput>lpq -a</userinput>
+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</screen>
+ </sect3>
+
+ <sect3 xml:id="printing-lpd-monitor-lprm">
+ <title>&man.lprm.1;</title>
+
+ <para>Mit &man.lprm.1; können Druckaufträge gelöscht werden.
+ Normale Benutzer dürfen lediglich ihre eigenen Aufträge
+ löschen. <systemitem class="username">root</systemitem>
+ kann hingegen jeden beliebigen Auftrag löschen.</para>
+
+ <para>Dieser Befehl löscht alle anstehenden Druckaufträge
+ eines Druckers:</para>
+
+ <screen>&prompt.root; <userinput>lprm -P<replaceable>lp</replaceable> -</userinput>
+dfA002smithy dequeued
+cfA002smithy dequeued
+dfA003smithy dequeued
+cfA003smithy dequeued
+dfA004smithy dequeued
+cfA004smithy dequeued</screen>
+
+ <para>Mit dem folgenden Befehl löschen Sie einen bestimmten
+ Druckauftrag. Benutzen Sie &man.lpq.1;, um die Nummer des
+ Auftrags zu finden.</para>
+
+ <screen>&prompt.user; <userinput>lpq</userinput>
+Rank Owner Job Files Total Size
+1st jsmith 5 (standard input) 12188 bytes
+&prompt.user; <userinput>lprm -P<replaceable>lp</replaceable> <replaceable>5</replaceable></userinput>
+dfA005smithy dequeued
+cfA005smithy dequeued</screen>
+ </sect3>
+
+ <sect3 xml:id="printing-lpd-monitor-lpc">
+ <title>&man.lpc.8;</title>
+
+ <para>Mit &man.lpc.8; kann der Druckerstatus überprüft und
+ verändert werden. <command>lpc</command> wird zusammen mit
+ einem Kommando und optional mit einem Druckernamen
+ aufgerufen. Mit <literal>all</literal> können alle Drucker
+ angesprochen werden, auf denen das Kommando ausgeführt
+ werden soll. Normale Benutzer können sich den Status mit
+ &man.lpc.8; ansehen. Nur <systemitem
+ class="username">root</systemitem> darf Kommandos
+ ausführen, die den Status des Druckers verändern.</para>
+
+ <para>Dieser Befehl zeigt den Status von allen Druckern
+ an:</para>
+
+ <screen>&prompt.user; <userinput>lpc status all</userinput>
+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</screen>
+
+ <para>Der Drucker kann die Annahme neuer Druckaufträge
+ verweigern. Anschließend sollen Aufträge wieder akzeptiert
+ werden:</para>
+
+ <screen>&prompt.root; <userinput>lpc stop <replaceable>lp</replaceable></userinput>
+lp:
+ printing disabled
+&prompt.root; <userinput>lpc start <replaceable>lp</replaceable></userinput>
+lp:
+ printing enabled
+ daemon started</screen>
+
+ <para>Starten Sie den Drucker nach einem Fehler neu:</para>
+
+ <screen>&prompt.root; <userinput>lpc restart <replaceable>lp</replaceable></userinput>
+lp:
+ no daemon to abort
+ printing enabled
+ daemon restarted</screen>
+
+ <para>Schalten Sie die Warteschlange aus und deaktivieren Sie
+ den Druck. Sie können den Benutzern gleichzeitig eine
+ Nachricht hinterlassen:</para>
+
+ <screen>&prompt.root; <userinput>lpc down <replaceable>lp</replaceable> Ersatzteile werden am Montag ankommen</userinput>
+lp:
+ printer and queuing disabled
+ status message is now: Ersatzteile werden am Montag ankommen</screen>
+
+ <para>Reaktivieren Sie den Drucker:</para>
+
+ <screen>&prompt.root; <userinput>lpc up <replaceable>lp</replaceable></userinput>
+lp:
+ printing enabled
+ daemon started</screen>
- <para>&man.lpr.1; unterstützt verschiedene Optionen zur
- Formatierung von Text, zur Konvertierung von Grafik- und
- anderen Dateiformaten, zur Erzeugung von multiplen Kopien,
- zur Verwaltung von Druckaufträgen und andere mehr.
- Dieser Abschnitt beschreibt einige dieser Optionen.</para>
-
- <sect3 xml:id="printing-lpr-options-format">
- <title>Formatierungs- und Konvertierungsoptionen</title>
-
- <para>Die folgenden &man.lpr.1;-Optionen kontrollieren die
- Formatierung von in einem Druckauftrag enthaltenen Dateien.
- Verwenden Sie diese Optionen, wenn Ihr Druckauftrag keinen
- normalen Text enthält, oder wenn Sie normalen Text
- mit &man.pr.1; formatieren wollen.</para>
-
- <indexterm><primary>&tex;</primary></indexterm>
-
- <para>Der folgende Befehl druckt so beispielsweise eine
- DVI-Datei (des &tex;-Satzsystems) namens
- <filename>fish-report.dvi</filename> auf
- dem Drucker <literal>bamboo</literal>:</para>
-
- <screen>&prompt.user; <userinput>lpr -P bamboo -d fish-report.dvi</userinput></screen>
-
- <para>Diese Optionen gelten für jede Datei des
- Druckauftrags, daher ist es nicht möglich beispielsweise
- DVI- und ditroff-Dateien über den gleichen Druckauftrag
- zu drucken. Sie müssen diese Dateien vielmehr über
- getrennte Druckaufträge drucken, wobei Sie jeweils
- geeignete Konvertierungsoptionen verwenden.</para>
-
- <note>
- <para>Alle Optionen mit Ausnahme von <option>-p</option> und
- <option>-T</option> setzen einen installierten und
- für den jeweiligen Drucker konfigurierten
- Konvertierungsfilter voraus. So benötigt die Option
- <option>-d</option> den DVI-Konvertierungsfilter. Diese
- Filter werden im Abschnitt <link linkend="printing-advanced-convfilters">
- Konvertierungsfilter</link> ausführlich
- beschrieben.</para>
- </note>
-
- <variablelist>
- <varlistentry>
- <term><option>-c</option></term>
-
- <listitem>
- <para>Druckt cifplot-Dateien.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-d</option></term>
-
- <listitem>
- <para>Druckt DVI-Dateien.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-f</option></term>
-
- <listitem>
- <para>Druckt FORTRAN-Textdateien.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-g</option></term>
-
- <listitem>
- <para>Druckt Plot-Daten.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-i <replaceable>anzahl</replaceable></option></term>
-
- <listitem>
- <para>Rückt die Ausgabe um
- <replaceable>anzahl</replaceable> Spalten ein, lassen
- Sie <replaceable>anzahl</replaceable> weg, wird der Text
- um 8 Spalten eingerückt. Beachten Sie aber, dass
- diese Option nicht mit allen Konvertierungsfiltern
- funktioniert.</para>
-
- <note>
- <para>Zwischen der Option <option>-i</option> und der
- der Zahl darf dabei kein Leerzeichen stehen.</para>
- </note>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-l</option></term>
-
- <listitem>
- <para>Druckt Text inklusive vorhandener Steuerzeichen.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-n</option></term>
-
- <listitem>
- <para>Druckt ditroff-Dateien (geräteunabhängiges
- troff).</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>-p</term>
-
- <listitem>
- <para>Formatiert normalen Text mit &man.pr.1;, bevor der
- Ausdruck erfolgt.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-T <replaceable>titel</replaceable></option></term>
-
- <listitem>
- <para>Verwende <replaceable>titel</replaceable> auf dem
- &man.pr.1;-Deckblatt anstelle des Dateinamens. Diese
- Option ist nur wirksam, wenn sie gemeinsam mit der
- Option <option>-p</option> verwendet.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-t</option></term>
-
- <listitem>
- <para>Druckt troff-Daten.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-v</option></term>
-
- <listitem>
- <para>Druckt Rasterdaten.</para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- <para>Dazu ein Beispiel. Der folgende Befehl druckt eine
- formatierte Version der Manualpage zu &man.ls.1; auf den
- Standarddrucker:</para>
-
- <screen>&prompt.user; <userinput>zcat /usr/share/man/man1/ls.1.gz | troff -t -man | lpr -t</userinput></screen>
-
- <para>&man.zcat.1; dekomprimiert den Quellcode der Manualpage
- &man.ls.1; und reicht ihn an &man.troff.1; weiter, das
- ihn formatiert und daraus GNU troff-Daten erzeugt. Diese
- werden wiederum an &man.lpr.1; weitergereicht, das den
- Druckauftrag schließlich an
- <application>LPD</application> übergibt. Da die Option
- <option>-t</option> von &man.lpr.1; verwendet wurde,
- konvertiert das Drucksystem die GNU troff-Daten zuvor in
- ein Format, das der Standarddrucker verstehen und ausgeben
- kann.</para>
+ <para>Weitere Kommandos und Optionen finden Sie in
+ &man.lpc.8;.</para>
</sect3>
+ </sect2>
- <sect3 xml:id="printing-lpr-options-job-handling">
- <title>Druckaufträge verwalten</title>
+ <sect2 xml:id="printing-lpd-shared">
+ <title>Gemeinsam genutzte Drucker</title>
- <para>Die folgenden Optionen von &man.lpr.1; weisen
- <application>LPD</application> an, den Druckauftrag auf
- verschiedene Art und Weise zu behandeln:</para>
-
- <variablelist>
- <varlistentry>
- <term>-# <replaceable>anzahl</replaceable></term>
-
- <listitem>
- <para>Erzeugt <replaceable>anzahl</replaceable> Ausdrucke
- jeder im Druckauftrag enthaltenen Datei anstelle eines
- einzigen Exemplars. Diese Option kann von einem
- Administrator deaktiviert werden, um die Beanspruchung
- des Druckers zu verringern. Lesen Sie den Abschnitt
- <link linkend="printing-advanced-restricting-copies">
- Den Ausdruck von mehreren Kopien verhindern</link>,
- wenn Sie diese Funktion benötigen.</para>
-
- <para>Das folgende Beispiel druckt drei Kopien der Datei
- <filename>parser.c</filename>,
- gefolgt von drei Kopien von
- <filename>parser.h</filename> auf
- den Standarddrucker:</para>
-
- <screen>&prompt.user; <userinput>lpr -#3 parser.c parser.h</userinput></screen>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>-m</term>
-
- <listitem>
- <para>Verschickt eine E-Mail, nachdem der Druckauftrag
- beendet wurde. Verwenden Sie diese Option, sendet
- <application>LPD</application> Ihnen eine E-Mail, wenn
- es die Bearbeitung Ihres Druckauftrages abgeschlossen
- hat. Diese Nachricht enthält Informationen
- darüber, ob Ihr Auftrag erfolgreich erledigt wurde
- oder ob ein Fehler auftrat. Ist dies der Fall, wird
- meist noch angegeben, welcher Fehler auftrat.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>-s</term>
-
- <listitem>
- <para>Kopiert die Dateien nicht in das
- Spooling-Verzeichnis, sondern verlinkt stattdessen
- symbolisch auf diese Dateien.</para>
-
- <para>Wenn Sie einen umfangreichen Druckauftrag erstellen,
- werden Sie diese Option wahrscheinlich verwenden wollen.
- Einerseits sparen Sie dadurch Speicherplatz im
- Spooling-Verzeichnis (im schlimmsten Fall könnte
- Ihr Druckauftrag ansonsten das Dateisystem des
- Spooling-Verzeichnis zum Überlaufen bringen),
- andererseits sparen Sie dadurch auch Zeit, weil
- <application>LPD</application> die in Ihrem Druckauftrag
- enthaltenen Dateien nicht in das Spooling-Verzeichnis
- kopieren muss.</para>
-
- <para>Da <application>LPD</application> in diesem Fall die
- Originaldateien verwendet, muss sichergestellt sein,
- dass diese nicht verändert werden, bevor der
- Ausdruck abgeschlossen ist.</para>
-
- <note>
- <para>Wenn Sie auf einen entfernten Drucker drucken,
- muss <application>LPD</application> die Dateien dennoch
- vom lokalen auf den entfernten Rechner kopieren. In
- diesem Fall spart die Option <option>-s</option>
- Speicherplatz lediglich im lokalen Spooling-Verzeichnis,
- nicht aber im entfernten. Dennoch ist diese Option auch in
- diesem Fall nützlich.</para>
- </note>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>-r</term>
-
- <listitem>
- <para>Löscht die im Druckauftrag enthaltenen Dateien,
- nachdem sie in das Spooling-Verzeichnis kopiert oder
- unter Verwendung der Option <option>-s</option>
- gedruckt werden. Verwenden Sie diese Option daher
- nur mit äußerster Vorsicht!</para>
- </listitem>
- </varlistentry>
- </variablelist>
+ <para>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.</para>
+
+ <sect3 xml:id="printing-shared-aliases">
+ <title>Aliase</title>
+
+ <para>Der Druckername wird in der ersten Zeile von
+ <filename>/etc/printcap</filename> festgelegt. Weitere
+ Namen oder <emphasis>Aliase</emphasis> können nach dem
+ Druckernamen hinzugefügt werden. Aliase werden vom Namen
+ durch das Pipe-Zeichen <literal>|</literal> getrennt:</para>
+
+ <programlisting>lp|<replaceable>repairsprinter</replaceable>|<replaceable>salesprinter</replaceable>:\</programlisting>
+
+ <para>Anstelle des Druckernamens können Aliase verwendet
+ werden. Zum Beispiel können Mitarbeiter der
+ Verkaufsabteilung wie folgt auf ihren Drucker
+ drucken:</para>
+
+ <screen>&prompt.user; <userinput>lpr -P<replaceable>salesprinter</replaceable> <replaceable>sales-report.txt</replaceable></userinput></screen>
+
+ <para>Mitarbeiter der Reparaturabteilung drucken auf dem
+ Drucker mit:</para>
+
+ <screen>&prompt.user; <userinput>lpr -P<replaceable>repairsprinter</replaceable> <replaceable>repairs-report.txt</replaceable></userinput></screen>
+
+ <para>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.</para>
</sect3>
- <sect3 xml:id="printing-lpr-options-misc">
- <title>Deckblatt-Optionen</title>
+ <sect3 xml:id="printing-shared-headers">
+ <title>Deckblätter</title>
- <para>Die folgenden &man.lpr.1;-Optionen passen den Text an,
- der auf einem Deckblatt eines Druckauftrages ausgegeben
- wird. Wird die Ausgabe von Deckblättern auf dem
- Zieldrucker unterdrückt, bleiben diese Optionen
- wirkungslos. Lesen Sie den Abschnitt <link linkend="printing-advanced-header-pages">Deckblätter</link>,
- wenn Sie diese Funktion benötigen.</para>
-
- <variablelist>
- <varlistentry>
- <term>-C <replaceable>text</replaceable></term>
-
- <listitem>
- <para>Ersetzt den Rechnernamen auf dem Deckblatt durch
- <replaceable>text</replaceable>. Der Rechnername ist
- dabei in der Regel der Name des Rechners, auf dem der
- Druckauftrag erstellt wurde.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>-J <replaceable>text</replaceable></term>
-
- <listitem>
- <para>Ersetzt den Namen des Druckauftrages auf dem
- Deckblatt durch <replaceable>text</replaceable>. Der
- Name des Druckauftrages entspricht in der Regel dem
- Namen der ersten Datei des Druckauftrages oder
- <filename>stdin</filename>, wenn Sie die
- Standardeingabe an den Drucker weiterleiten.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>-h</term>
-
- <listitem>
- <para>Verhindert den Ausdruck von Deckblättern.</para>
-
- <note>
- <para>Ob diese Option funktioniert, hängt von der
- Art und Weise ab, wie Deckblätter auf Ihrem
- System erzeugt werden. Lesen Sie den Abschnitt
- <link linkend="printing-advanced-header-pages">
- Deckblätter</link> für weitere
- Informationen.</para>
- </note>
- </listitem>
- </varlistentry>
- </variablelist>
+ <para>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 <emphasis>Deckblätter</emphasis> verwendet werden.
+ Dabei wird vor jedem Druckauftrag ein Deckblatt mit dem
+ Benutzernamen und dem Dokumentnamen gedruckt. Deckblätter
+ werden manchmal auch als
+ <emphasis>Banner</emphasis> oder
+ <emphasis>Trennseite</emphasis> bezeichnet.</para>
+
+ <para>Das Aktivieren der Deckblätter hängt davon ab, ob der
+ Drucker direkt über ein <acronym>USB</acronym>, paralleles
+ oder serielles Kabel, oder über ein Netzwerk mit dem Rechner
+ verbunden ist.</para>
+
+ <para>Wenn der Drucker direkt verbunden ist, aktivieren Sie
+ die Deckblätter durch Entfernen der Zeile
+ <literal>:sh:\</literal> (<foreignphrase>Supress
+ Header</foreignphrase>) in
+ <filename>/etc/printcap</filename>. Diese Deckblätter
+ verwenden lediglich einen Zeilenvorschub für neue Zeilen.
+ Einige Drucker benötigen den Filter
+ <filename>/usr/share/examples/printing/hpif</filename> um
+ den Treppeneffekt zu vermeiden. Der Filter konfiguriert
+ <acronym>PCL</acronym>-Drucker so, dass sowohl
+ Zeilenumbrüche als auch Zeilenvorschübe verwendet werden,
+ wenn ein Zeilenvorschub empfangen wird.</para>
+
+ <para>Für Netzwerkdrucker müssen Deckblätter auf dem Drucker
+ selbst konfiguriert werden, da Einträge für Deckblätter in
+ <filename>/etc/printcap</filename> ignoriert werden. Die
+ Einstellungen sind über einen Webbrowser zugänglich und
+ stehen in der Regel auf der Hauptseite der
+ Konfigurations-Webseite zur Verfügung.</para>
</sect3>
+ <!-- conversion, filters?,
+ restricting printer usage?, accounting? -->
</sect2>
- <sect2 xml:id="printing-lpc">
- <title>Drucker verwalten</title>
-
- <para>Als Administrator Ihres Systems ist es Ihre Aufgabe, Drucker
- zu installieren, zu konfigurieren und zu testen. Um mit Ihrem
- Drucker zu kommunizieren, können Sie &man.lpc.8; verwenden.
- Dadurch sind Sie in der Lage,</para>
-
- <itemizedlist>
- <listitem>
- <para>Ihre Drucker zu starten und zu beenden.</para>
- </listitem>
+ <sect2 xml:id="printing-lpd-references">
+ <title>Referenzen</title>
- <listitem>
- <para>Die Warteschlangen Ihrer Drucker zu aktivieren und zu
- deaktivieren.</para>
- </listitem>
+ <para>Beispieldateien:
+ <filename>/usr/share/examples/printing/</filename>.</para>
- <listitem>
- <para>Die Reihenfolge der Druckaufträge zu
- ändern.</para>
- </listitem>
- </itemizedlist>
+ <para>Das <emphasis>4.3BSD Line Printer Spooler
+ Manual</emphasis>,
+ <filename>/usr/share/doc/smm/07.lpd/paper.ascii.gz</filename>.</para>
- <para>Am Anfang dieses Abschnitts steht die Erklärung
- einiger Begriffe. Wenn ein Drucker <emphasis>beendet</emphasis>
- ist, wird der Inhalt seiner Warteschlange nicht gedruckt.
- Druckaufträge können zwar weiterhin erstellt werden,
- diese verbleiben aber solange in der Warteschlange, bis der
- Drucker wieder <emphasis>gestartet</emphasis> oder die
- Warteschlange gelöscht wird.</para>
-
- <para>Ist eine Warteschlange <emphasis>deaktiviert</emphasis>,
- kann (mit Ausnahme von <systemitem class="username">root</systemitem>) kein Benutzer
- mehr einen Druckauftrag erteilen. Ist die Warteschlange hingegen
- <emphasis>aktiviert</emphasis>, können Druckaufträge
- erteilt werden. Ist ein Drucker zwar
- <emphasis>gestartet</emphasis>, die Warteschlange hingegen
- <emphasis>deaktiviert</emphasis>, werden dennoch alle noch in
- der Warteschlange vorhandenen Druckaufträge gedruckt.</para>
-
- <para>Im Allgemeinen benötigen Sie
- <systemitem class="username">root</systemitem>-Rechte, um &man.lpc.8; einsetzen zu
- können. Als normaler Benutzer erlaubt es Ihnen &man.lpc.8;
- lediglich, den Druckstatus abzufragen und einen hängenden
- Drucker neu zu starten.</para>
-
- <para>Es folgt nun eine Zusammenfassung der Befehle von
- &man.lpc.8;. Die meisten dieser Befehle benötigen das
- Argument <replaceable>printer-name</replaceable>, mit dem Sie
- angeben, auf welchen Drucker der Befehl angewendet werden soll.
- Wenn Sie für <replaceable>printer-name</replaceable>
- <literal>all</literal> angeben, wird der Befehl auf alle in
- <filename>/etc/printcap</filename> definierten Drucker
- angewendet.</para>
-
- <variablelist>
- <varlistentry>
- <term><command>abort
- printer-name</command></term>
-
- <listitem>
- <para>Bricht den aktuellen Druckauftrag ab und beendet den
- Drucker. Solange die Warteschlange aktiviert ist,
- können allerdings weiterhin Druckaufträge
- erteilt werden.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>clean
- printer-name</command></term>
-
- <listitem>
- <para>Entfernt veraltete Dateien aus dem
- Spooling-Verzeichnis des Druckers, da diese manchmal nicht
- vollständig von <application>LPD</application>
- entfernt werden können. Dies ist insbesondere dann
- der Fall, wenn während der Bearbeitung des
- Druckauftrages Fehler auftraten. Dieser Befehl sucht
- dabei nach Dateien, die nicht in das Spooling-Verzeichnis
- gehören und entfernt diese.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>disable
- printer-name</command></term>
-
- <listitem>
- <para>Deaktiviert die Annahme neuer Druckaufträge.
- Solange der Drucker nicht beendet wird, werden weiterhin
- alle in der Warteschlange enthaltenen Auftrage bearbeitet
- und gedruckt. <systemitem class="username">root</systemitem> kann jederzeit
- Druckaufträge erstellen, selbst dann, wenn die
- Druckerwarteschlange deaktiviert ist.</para>
-
- <para>Dieser Befehl ist besonders nützlich, wenn Sie
- einen neuen Drucker testen müssen oder einen neuen
- Filter installiert haben. Dazu deaktivieren Sie die
- Warteschlange des Druckers und erstellen Ihre
- Druckaufträge als <systemitem class="username">root</systemitem>.
- Andere Benutzer können erst dann einen Druckauftrag
- erstellen, wenn Sie Ihre Tests abgeschlossen haben und
- die Druckerwarteschlange mit <command>enable</command>
- wieder reaktivieren.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>down printer-name
- nachricht</command></term>
-
- <listitem>
- <para>Beendet einen Drucker. Äquivalent zu
- <command>disable</command>, gefolgt von
- <command>stop</command>. Die von Ihnen definierte
- <replaceable>nachricht</replaceable> wird als
- Druckerstatus angezeigt, wenn ein Benutzer die
- Warteschlange des Druckers mit &man.lpq.1; oder
- mit <command>lpc status</command> abfragt.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>enable
- printer-name</command></term>
-
- <listitem>
- <para>Aktiviert die Warteschlange eines Druckers. Erteilte
- Druckaufträge können zwar erteilt werden, diese
- werden aber nur dann gedruckt, wenn der Drucker auch
- gestartet ist.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>help
- command-name</command></term>
-
- <listitem>
- <para>Ausgaben von hilfreichen Informationen zu
- <replaceable>command-name</replaceable>. Wird kein
- <replaceable>command-name</replaceable> angegeben, wird
- die Liste der verfügbaren Befehle ausgegeben.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>restart
- printer-name</command></term>
-
- <listitem>
- <para>Startet den Drucker. Normale Benutzer können diesen
- Befehl verwenden, um einen hängenden
- <application>LPD</application> zu reaktivieren, sie sind
- allerdings nicht berechtigt, einen Drucker zu starten, der mit
- <command>stop</command> oder <command>down</command> beendet
- wurde. Dieser Befehl ist äquivalent zu
- <command>abort</command>, gefolgt von
- <command>start</command>.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>start
- printer-name</command></term>
-
- <listitem>
- <para>Startet den Drucker, um die in der Warteschlange
- enthaltenen Aufträge zu drucken.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>stop
- printer-name</command></term>
-
- <listitem>
- <para>Beendet den Drucker. Der Drucker beendet den aktiven
- Druckauftrag noch, danach wird kein weiterer in der
- Warteschlange enthaltener Auftrag gedruckt. Obwohl der
- Drucker beendet wurde, können weiterhin
- Druckaufträge erteilt werden, solange die
- Warteschlange nicht deaktiviert wurde.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>topq printer-name
- job-or-username</command></term>
-
- <listitem>
- <para>Sortiert die Druckerwarteschlange des Druckers
- <replaceable>printer-name</replaceable> um, wobei
- der Auftrag mit der angegebenen
- <replaceable>Auftragsnummer</replaceable>,
- oder Druckaufträge, die von
- <replaceable>username</replaceable> erstellt wurden, an
- den Beginn der Warteschlange gesetzt werden. Für
- diesen Befehl kann die Option <literal>all</literal>
- nicht als <replaceable>printer-name</replaceable>
- verwendet werden.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>up
- printer-name</command></term>
-
- <listitem>
- <para>Startet einen Drucker. Das Gegenstück zu
- <command>down</command>. Äquivalent zu
- <command>start</command>, gefolgt von
- <command>enable</command>.</para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- <para>&man.lpc.8; akzeptiert diese Befehle direkt auf der
- Kommandozeile. Geben Sie keinen Befehl ein, wird
- &man.lpc.8; im interaktiven Modus gestartet. In diesem
- Modus können Sie solange Befehle eingeben, bis Sie
- <command>exit</command> oder <command>quit</command>
- eingeben.</para>
+ <para>Manualpages: &man.printcap.5;, &man.lpd.8;, &man.lpr.1;,
+ &man.lpc.8;, &man.lprm.1;, &man.lpq.1;.</para>
</sect2>
</sect1>
- <sect1 xml:id="printing-lpd-alternatives">
- <title>Alternativen zum
- <application>LPD</application>-Drucksystem</title>
-
- <para>Wenn Sie dieses Kapitel bis hierher gelesen haben, wissen
- Sie so gut wie alles über
- <application>LPD</application>, das Standarddrucksystem von
- &os;. Wahrscheinlich sind Ihnen bereits einige
- Unzulänglichkeiten dieses Systems aufgefallen, und Sie
- fragen sich nun, welche anderen Drucksysteme es für &os;
- gibt.</para>
-
- <variablelist>
- <varlistentry>
- <term>LPRng</term>
+ <sect1 xml:id="printing-other">
+ <title>Andere Drucksysteme</title>
- <listitem>
- <indexterm><primary>LPRng</primary></indexterm>
-
- <para><application>LPRng</application> steht für
- <quote>LPR: the Next Generation</quote>. Dabei handelt es
- sich um eine von Grund auf neu geschriebene Version von PLP.
- LPRng wurde von Patrick Powell und Justin Mason, dem
- Hauptmaintainer von PLP, entwickelt. Die offizielle
- Webseite von <application>LPRng</application> ist unter
- <uri xlink:href="http://www.lprng.org/">http://www.lprng.org/</uri> zu finden.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>CUPS</term>
-
- <listitem>
- <para><application>CUPS</application><indexterm><primary>CUPS</primary></indexterm>,
- das <foreignphrase>Common UNIX Printing
- System</foreignphrase>, stellt eine portable
- Abstraktionsschicht dar, die das Drucken auf allen
- &unix;-artigen Betriebsystemen ermöglicht.
- <application>CUPS</application> wurde von Easy Software
- entwickelt, um &unix;-Herstellern und -Benutzern eine
- einheitliche Standardlösung für den Druck von Dokumenten
- zu bieten.</para>
-
- <para><application>CUPS</application> verwendet das Internet
- Printing Protocol (<acronym>IPP</acronym>), um
- Druckaufträge und -warteschlangen zu verwalten.
- Zusätzlich werden die Protokolle
- <foreignphrase>Line Printer Daemon</foreignphrase>
- (<acronym>LPD</acronym>),
- <foreignphrase>Server Message Block</foreignphrase>
- (<acronym>SMB</acronym>), und
- <foreignphrase>AppSocket/JetDirect</foreignphrase>),
- unterstützt, wenn auch nur mit eingeschränkter
- Funktionalität. Ausserdem ermöglicht
- <application>CUPS</application> das Auffinden von
- Netzwerkdruckern sowie die Verwendung auf
- <foreignphrase>PostScript Printer
- Description</foreignphrase> (<acronym>PPD</acronym>)
- basierender Druckoptionen.</para>
-
- <para>Die offizielle Webseite von <application>CUPS</application>
- ist <uri xlink:href="http://www.cups.org/">http://www.cups.org/</uri>.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>HPLIP</term>
-
- <listitem>
- <para><application>HPLIP</application><indexterm><primary>HPLIP</primary></indexterm>,
- das HP &linux; Imaging and Printing System, ist eine von
- HP entwickelte Sammlung von Programmen, die Unterstützung
- für das drucken, scannen und faxen bei HP-Geräten bieten.
- Diese Programm-Sammlung verwendet
- <application>CUPS</application> als Grundlage für einige
- seiner Druck-Eigenschaften.</para>
-
- <para>Die Hauptseite für <application>HPLIP</application> ist
- <uri xlink:href="http://hplipopensource.com/hplip-web/index.html">http://hplipopensource.com/hplip-web/index.html</uri>.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </sect1>
-
- <sect1 xml:id="printing-troubleshooting">
- <title>Problembehandlung</title>
-
- <para>Wenn Sie eine einfache Testseite mit &man.lptest.1; gedruckt
- haben, könnte eines der folgenden Probleme aufgetreten
- sein:</para>
-
- <variablelist>
- <varlistentry>
- <term>Der Druck hat erst mit einer gewissen Verzögerung
- geklappt oder das bedruckte Blatt verblieb im Drucker, so als
- wäre der Druckvorgang noch nicht abgeschlossen.</term>
-
- <listitem>
- <para>Die Testseite wurde zwar gedruckt, danach tat sich
- allerdings nichts mehr. Vielleicht mussten Sie sogar eine
- Taste Ihres Druckers, etwa PRINT REMAINING oder FORM FEED
- drücken, damit der Druckvorgang fortgesetzt wurde.</para>
-
- <para>Wenn das der Fall ist, hat der Drucker vermutlich vor
- dem eigentlichen Drucken gewartet, ob noch weitere Daten
- für Ihren Druckauftrag gesendet werden. Um dieses
- Problem zu beheben, können Sie den Textfilter
- anweisen, ein <foreignphrase>Form Feed</foreignphrase>
- -Zeichen (oder ein anderes entsprechendes Zeichen) an den
- Drucker zu senden. Dies reicht für gewöhnlich
- aus, um den Drucker zum Druck des noch im internen
- Puffer verbliebenen Textes zu bewegen. Dadurch kann auch
- sichergestellt werden, dass jeder neue Druckauftrag auf
- einer neuen Seite beginnt.</para>
-
- <para>Der folgende Ersatz für das Shell-Skript
- <filename>/usr/local/libexec/if-simple</filename> gibt
- ein <quote>Form Feed</quote> aus, nachdem der Auftrag an
- den Drucker geschickt wurde:</para>
-
- <programlisting>#!/bin/sh
-#
-# if-simple - Einfacher Eingabefilter für lpd
-# Installiert unter /usr/local/libexec/if-simple
-#
-# Kopiert stdin einfach nach stdout. Ignoriert alle Filter-Argumente.
-# Schreibt ein Form-Feed-Zeichen (\f) nach dem Ende des Druckauftrages.
-
-/bin/cat &amp;&amp; printf "\f" &amp;&amp; exit 0
-exit 2</programlisting>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>Der Drucker erzeugte einen <quote>Treppeneffekt</quote>
- (<foreignphrase>staircase effect</foreignphrase>).</term>
-
- <listitem>
- <para>Sie haben einen Ausdruck ähnlich dem folgenden
- erhalten:</para>
-
- <screen>!"#$%&amp;'()*+,-./01234
- "#$%&amp;'()*+,-./012345
- #$%&amp;'()*+,-./0123456</screen>
-
- <para>Sie sind zu einem weiteren Opfer des
- <emphasis>Treppeneffekts</emphasis> geworden. Verursacht
- wird dieser Effekt durch unterschiedliche Ansichten
- darüber, welche Zeichen den Beginn einer neuen Zeile
- anzeigen sollen. &unix;-ähnliche Betriebssysteme
- verwenden dafür ein einzelnes Zeichen:
- ASCII<indexterm><primary>ASCII</primary></indexterm>-Code
- 10, auch als <foreignphrase>Line Feed</foreignphrase> (LF)
- bekannt.
- &ms-dos;<indexterm><primary>MS-DOS</primary></indexterm>,
- &os2;<indexterm><primary>OS/2</primary></indexterm> und
- andere Betriebssysteme verwenden stattdessen ein
- Zeichenpaar: ASCII-Code 10 <emphasis>und</emphasis>
- ASCII-Code 13, <foreignphrase>Carriage
- Return</foreignphrase> (CR). Viele Drucker verwenden in
- der Voreinstellung die Konvention von &ms-dos;, um
- Zeilenumbrüche darzustellen.</para>
-
- <para>Wenn Sie unter &os; drucken, wird nur das Zeichen
- <foreignphrase>Line Feed</foreignphrase> verwendet. Der
- Drucker erkennt dieses Zeichen und erweitert den
- Druckbereich um eine Zeile, verbleibt zum Druck des
- nächsten Zeichens aber in derselben horizontalen
- Position. Das ist der Grund für die Verwendung des
- <foreignphrase>Carriage Return</foreignphrase>: Es setzt
- die Position für das folgende Zeichen auf den linken
- Rand der Seite.</para>
-
- <para>&os; erwartet von einem Drucker das folgende
- Verhalten:</para>
-
- <informaltable frame="none" pgwide="1">
- <tgroup cols="2">
- <tbody>
- <row>
- <entry>Drucker empfängt CR</entry>
- <entry>Drucker druckt CR</entry>
- </row>
-
- <row>
- <entry>Drucker empfängt LF</entry>
- <entry>Drucker druckt CR + LF</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>Es gibt mehrere Möglichkeiten, dieses Verhalten zu
- erreichen:</para>
-
- <itemizedlist>
- <listitem>
- <para>Verändern Sie die Konfiguration Ihres Druckers,
- um die Interpretation dieser Zeichen zu verändern.
- Lesen Sie Ihr Druckerhandbuch, wenn Sie nicht wissen,
- was Sie dazu tun müssen.</para>
-
- <note>
- <para>Wenn Sie auf Ihrem Rechner neben &os; noch
- andere Betriebssysteme verwenden, müssen Sie
- Ihren Drucker möglicherweise anschließend
- <emphasis>erneut konfigurieren</emphasis>, damit die
- Zeichen CR und LF unter diesen Systemen korrekt
- interpretiert werden. Ist dies bei Ihnen der Fall,
- werden Sie wohl eine der folgenden Lösungen
- bevorzugen.</para>
- </note>
- </listitem>
-
- <listitem>
- <para>Lassen Sie LF durch den Treiber der seriellen
- Schnittstelle automatisch in CR+LF konvertieren.
- Selbstverständlich funktioniert dies nur mit
- Druckern, die an einer seriellen Schnittstelle
- angeschlossen sind. Um diese Möglichkeit zu
- nutzen, müssen Sie die
- <literal>ms#</literal>-Fähigkeit verwenden und
- in <filename>/etc/printcap</filename> den
- <literal>onlcr</literal>-Modus für den Drucker
- aktivieren.</para>
- </listitem>
-
- <listitem>
- <para>Senden Sie eine <emphasis>Escape-Sequenz</emphasis>
- an den Drucker, damit das Zeichen LF zeitweilig anders
- behandelt wird. Suchen Sie im Handbuch Ihres Druckers
- nach den von Ihrem Drucker unterstützten
- Escape-Sequenzen. Wenn Sie eine entsprechenden
- Escape-Sequenz finden, müssen Sie den Textfilter so
- anpassen, dass zuerst die Escape-Sequenz und
- anschließend der Druckauftrag gesendet wird.</para>
-
- <indexterm><primary>PCL</primary></indexterm>
-
- <para>Es folgt nun ein Bespieltextfilter für einen
- Drucker, der die Hewlett Packard PCL Escape-Sequenzen
- versteht. Dieser Filter veranlasst den Drucker,
- LF-Zeichen als Folgen von LF+CR aufzufassen.
- Anschließend wird der Druckauftrag gesendet. Als
- Abschluss wird ein <foreignphrase>Form
- Feed</foreignphrase> gesendet, um die letzte Seite des
- Druckauftrags auszuwerfen. Dieses Beispiel sollte mit
- nahezu allen Druckern von Hewlett Packard
- funktionieren.</para>
-
- <programlisting>#!/bin/sh
-#
-# hpif - Einfacher Text-Eingabefilter für lpd für auf HP-PCL basierende Drucker
-# Installiert unter /usr/local/libexec/hpif
-#
-# Kopiert stdin einfach nach stdout. Ignoriert alle Filterargumente.
-# Weist den Drucker an LF als CR+LF zu interpretieren.
-# Wirft die Seite nach dem Drucken aus.
-
-printf "\033&amp;k2G" &amp;&amp; cat &amp;&amp; printf "\033&amp;l0H" &amp;&amp; exit 0
-exit 2</programlisting>
-
- <para>Das nächste Beispiel aus
- <filename>/etc/printcap</filename> beschreibt den
- Rechner <systemitem>orchid</systemitem>, an dessen Parallelport
- ein Drucker angeschlossen ist. Es handelt sich dabei um
- einen Hewlett Packard LaserJet&nbsp;3Si, der den Namen
- <literal>teak</literal> verwendet. Als Textfilter wird
- das Skript aus dem letzten Beispiel verwendet:</para>
-
- <programlisting>#
-# /etc/printcap für den Rechner orchid
-#
-teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
- :lp=<filename>/dev/lpt0</filename>:sh:sd=<filename>/var/spool/lpd/teak</filename>:mx#0:\
- :if=<filename>/usr/local/libexec/hpif</filename>:</programlisting>
- </listitem>
- </itemizedlist>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>Alle Zeilen wurden in die gleiche Zeile gedruckt.</term>
-
- <listitem>
- <para>Der Drucker hat niemals eine neue Zeile begonnen. Alle
- Zeilen des Textes wurden in eine einzige Zeile gedruckt.</para>
-
- <para>Dieses Problem ist das <quote>Gegenteil</quote> des
- oben beschriebenen Treppeneffekts und kommt wesentlich
- seltener vor. Die von &os; zum Abschluss einer Zeile
- benutzten LF-Zeichen werden als CR-Zeichen interpretiert.
- Dadurch wird die Druckposition zwar auf den linken Rand
- der Seite, aber nicht um eine Zeile nach unten gesetzt.</para>
-
- <para>Konfigurieren Sie Ihren Drucker, um die folgende
- Interpretation der Zeichen LF und CR zu erzwingen:</para>
-
- <informaltable frame="none" pgwide="1">
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Drucker empfängt</entry>
- <entry>Drucker druckt</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry>CR</entry>
- <entry>CR</entry>
- </row>
-
- <row>
- <entry>LF</entry>
- <entry>CR + LF</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>Manche Zeichen wurden nicht gedruckt.</term>
-
- <listitem>
- <para>Der Drucker hat in jeder Zeile einige Zeichen nicht
- gedruckt. Vielleicht ist das Problem auch während des
- Druckens schlimmer geworden, und der Drucker hat immer mehr
- Zeichen nicht gedruckt.</para>
-
- <para>Dieses Problem entsteht, weil der Drucker mit der
- Geschwindigkeit, mit der die Daten über die serielle
- Schnittstelle (an einer parallelen Schnittstelle sollte das
- Problem nicht auftreten) eintreffen, nicht mithalten kann.
- Es gibt zwei Möglichkeiten, dieses Problem zu
- lösen:</para>
-
- <itemizedlist>
- <listitem>
- <para>Wenn der Drucker die Flusskontrolle mit XON/XOFF
- unterstützt, können Sie in der
- <literal>ms#</literal>-Fähigkeit den
- <literal>ixon</literal>-Modus aktivieren.</para>
- </listitem>
-
- <listitem>
- <para>Unterstützt der Drucker die Anfrage zum
- Senden/Löschen des Sende-Hardware-Handshakes (allgemein
- bekannt als <literal>RTS/CTS</literal>, dann sollten Sie den
- <literal>crtscts</literal>-Modus in der
- <literal>ms#</literal>-Fähigkeit aktivieren.
- Stellen Sie aber sicher, dass das verwendete
- Druckerkabel auch für die Hardware-Flusskontrolle
- geeignet ist.</para>
- </listitem>
- </itemizedlist>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>Es wurden nur wirre Zeichen gedruckt.</term>
+ <para>Neben dem in &os; enthaltenen &man.lpd.8; existieren noch
+ weitere Drucksysteme. Diese Systeme bieten zusätzliche
+ Funktionen und Unterstützung für andere Protokolle.</para>
+
+ <sect2 xml:id="printing-other-cups">
+ <title><acronym>CUPS</acronym>
+ (Common &unix; Printing System)</title>
+
+ <para><acronym>CUPS</acronym> ist ein beliebtes Drucksystem, das
+ für viele Betriebssysteme erhältlich ist.
+ <acronym>CUPS</acronym> unter &os; wird in einem separaten
+ Artikel beschrieben: <link
+ xlink:href="&url.articles.cups;/article.html">
+ <acronym>CUPS</acronym> on &os;</link>.</para>
+ </sect2>
- <listitem>
- <para>Anstelle des gewünschten Textes wurden nur
- zufällige Zeichen gedruckt.</para>
+ <sect2 xml:id="printing-other-hplip">
+ <title>HPLIP</title>
- <para>Dieses Problem wird ebenfalls durch falsche
- Konfigurationsparameter im Zusammenhang mit einem seriellen
- Drucker verursacht. Kontrollieren Sie die bps-Rate in der
- <literal>br</literal>-Fähigkeit und die
- Paritätseinstellung
- (<foreignphrase>Parity</foreignphrase>) in der
- <literal>ms#</literal>-Fähigkeit. Überprüfen
- Sie außerdem, ob der Drucker auch tatsächlich die
- gleichen Einstellungen verwendet, die in
- <filename>/etc/printcap</filename> definiert wurden.</para>
- </listitem>
- </varlistentry>
+ <para>Hewlett Packard stellt ein Drucksystem zur Verfügung, das
+ viele ihrer Drucker unterstützt. Der Port heißt
+ <package>print/hplip</package>. Die Webseite befindet sich
+ unter <link
+ xlink:href="http://hplipopensource.com/hplip-web/index.html"></link>.
+ Der &os;-Port kümmert sich um alle Details während der
+ Installation. Informationen zur Konfiguration finden Sie
+ unter <link
+ xlink:href="http://hplipopensource.com/hplip-web/install/manual/hp_setup.html"></link>.</para>
+ </sect2>
- <varlistentry>
- <term>Der Drucker hat überhaupt nicht reagiert.</term>
+ <sect2 xml:id="printing-other-lprng">
+ <title>LPRng</title>
- <listitem>
- <para>Wenn gar nichts passiert ist, dann liegt das vermutlich
- an &os; und nicht am Drucker. Aktivieren Sie die
- Protokollierung (<literal>lf</literal>-Fähigkeit)
- für den entsprechenden Drucker in der Datei
- <filename>/etc/printcap</filename>. Es folgt nun ein
- Beispieleintrag für den Drucker
- <literal>rattan</literal>, bei dem die
- <literal>lf</literal>-Fähigkeit aktiviert wurde.</para>
-
- <programlisting>rattan|line|diablo|lp|Diablo 630 Line Printer:\
- :sh:sd=<filename>/var/spool/lpd/rattan</filename>:\
- :lp=<filename>/dev/lpt0</filename>:\
- :if=<filename>/usr/local/libexec/if-simple</filename>:\
- :lf=<filename>/var/log/rattan.log</filename></programlisting>
-
- <para>Versuchen Sie jetzt noch einmal zu drucken.
- Überprüfen Sie die Protokolldatei (in unserem
- Beispiel <filename>/var/log/rattan.log</filename>) auf
- etwaige Fehlermeldungen. Versuchen Sie aufgrund dieser
- Meldungen, das Problem zu beheben.</para>
-
- <para>Wenn Sie keine Protokolldatei festlegen, verwendet
- <application>LPD</application> in der Voreinstellung <filename>/dev/console</filename> für die Ausgabe
- der Fehlermeldungen.</para>
- </listitem>
- </varlistentry>
- </variablelist>
+ <para><application>LPRng</application> wurde als eine
+ verbesserte Alternative zu &man.lpd.8; entwickelt. Der Port
+ heißt <package>sysutils/LPRng</package>. Weitere
+ Informationen und Dokumentation finden Sie unter <link
+ xlink:href="http://www.lprng.com/"></link>.</para>
+ </sect2>
</sect1>
</chapter>

File Metadata

Mime Type
text/plain
Expires
Fri, Jul 31, 7:11 PM (17 h, 54 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35793975
Default Alt Text
D6540.id.diff (260 KB)

Event Timeline