5605 lines
216 KiB
XML
5605 lines
216 KiB
XML
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
<!--
|
|
The FreeBSD Documentation Project
|
|
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: 1.124
|
|
-->
|
|
|
|
<chapter id="printing">
|
|
<chapterinfo>
|
|
<authorgroup>
|
|
<author>
|
|
<firstname>Sean</firstname>
|
|
<surname>Kelly</surname>
|
|
<contrib>Beigetragen von </contrib>
|
|
</author>
|
|
<!-- 30 Sept 1995 -->
|
|
</authorgroup>
|
|
<authorgroup>
|
|
<author>
|
|
<firstname>Jim</firstname>
|
|
<surname>Mock</surname>
|
|
<contrib>Restrukturiert und aktualisiert durch </contrib>
|
|
<!-- Mar 2000 -->
|
|
</author>
|
|
</authorgroup>
|
|
<authorgroup>
|
|
<author>
|
|
<firstname>Stefan</firstname>
|
|
<surname>Bethke</surname>
|
|
<contrib>Übersetzt von </contrib>
|
|
<!-- Jan 2003 -->
|
|
</author>
|
|
</authorgroup>
|
|
</chapterinfo>
|
|
|
|
<title>Drucken</title>
|
|
|
|
<sect1 id="printing-synopsis">
|
|
<title>Übersicht</title>
|
|
|
|
<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>
|
|
|
|
<sect1 id="printing-intro-spooler">
|
|
<title>Einführung</title>
|
|
|
|
<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>
|
|
<indexterm>
|
|
<primary>Druckaufträge</primary>
|
|
</indexterm>
|
|
|
|
<para>Die Entgegennahme von Dateien, die gedruckt werden
|
|
sollen; eine so an das Drucksystem übergebene Datei
|
|
wird als <emphasis>Druckauftrag</emphasis>
|
|
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 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>
|
|
|
|
<listitem>
|
|
<indexterm>
|
|
<primary>&tex;</primary>
|
|
</indexterm>
|
|
|
|
<para><application>LPD</application> kann Druckaufträge
|
|
mit Kopf- oder Fußzeilen versehen, oder ein spezielles
|
|
Dateiformat, wie DVI von &tex;, automatisch in ein für
|
|
den Drucker verständliches Format umwandeln;
|
|
Sie müssen diese Schritte nicht manuell
|
|
ausführen.</para>
|
|
</listitem>
|
|
|
|
<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>
|
|
</sect1>
|
|
|
|
<sect1 id="printing-intro-setup">
|
|
<title>Grund-Konfiguration</title>
|
|
|
|
<warning>
|
|
<para>Mit &os; 8.0 wurden die Gerätedateien für
|
|
serielle Ports von
|
|
<filename>/dev/ttyd<replaceable>N</replaceable></filename> in
|
|
<filename>/dev/ttyu<replaceable>N</replaceable></filename>
|
|
umbenannt. Setzen Sie noch &os; 7.X ein, müssen
|
|
Sie die Befehle in den folgenden Abschnitten entsprechend
|
|
anpassen.</para>
|
|
</warning>
|
|
|
|
<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 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>
|
|
|
|
<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>
|
|
|
|
<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>
|
|
</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 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 id="printing-ports">
|
|
<title>Schnittstellen und Kabel</title>
|
|
|
|
<para>Praktisch alle Drucker unterstützen mindestens
|
|
eine dieser Schnittstellen:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<indexterm>
|
|
<primary>Drucker</primary>
|
|
<secondary>serielle</secondary>
|
|
</indexterm>
|
|
|
|
<para><emphasis>Seriell</emphasis> 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 bps;
|
|
zum Ausdruck großer Grafiken sind serielle
|
|
Drucker daher ungeeignet.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<indexterm>
|
|
<primary>Drucker</primary>
|
|
<secondary>parallele</secondary>
|
|
</indexterm>
|
|
|
|
<para><emphasis>Parallel</emphasis> 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>
|
|
|
|
<indexterm>
|
|
<primary>Centronics</primary>
|
|
<see>Drucker, parallele</see>
|
|
</indexterm>
|
|
|
|
<para>Die parallele Schnittstelle wird auch als
|
|
<quote>Centronics</quote>-Schnittstelle bezeichnet,
|
|
nach dem Namen des Steckverbinders, der hier
|
|
häufig zum Einsatz kommt.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<indexterm>
|
|
<primary>Drucker</primary>
|
|
<secondary>USB</secondary>
|
|
</indexterm>
|
|
|
|
<para>USB-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 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 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
|
|
class="devicefile">ppc0</filename>, der der zweiten <filename
|
|
class="devicefile">ppc1</filename>, und so weiter. Der
|
|
Gerätename für den Drucker an der ersten parallelen
|
|
Schnittstelle folgt dem selben Schema und lautet <filename
|
|
class="devicefile">/dev/lpt0</filename>, usw.</para>
|
|
</sect4>
|
|
|
|
<sect4 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>
|
|
<indexterm>
|
|
<primary>Nullmodemkabel</primary>
|
|
</indexterm>
|
|
|
|
<para>Ein <emphasis>Nullmodemkabel</emphasis> 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 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 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><command>grep sio<replaceable>N</replaceable> <filename>/var/run/dmesg.boot</filename></command></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 ppc<replaceable>N</replaceable> /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: <Parallel port> 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 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><command>lptcontrol <option>-i</option> <option>-d</option> <filename class="devicefile">/dev/lpt<replaceable>N</replaceable></filename></command></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><command>lptcontrol <option>-p</option> <option>-d</option> <filename class="devicefile">/dev/lpt<replaceable>N</replaceable></filename></command></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 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 id="printing-checking-parallel">
|
|
<title>Einen Paralleldrucker prüfen</title>
|
|
|
|
<indexterm>
|
|
<primary>Drucker</primary>
|
|
<secondary>parallele</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
|
|
parallelen Schnittstelle:</emphasis></para>
|
|
|
|
<procedure>
|
|
<step>
|
|
<para>Werden Sie <username>root</username> 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 > /dev/lpt<replaceable>N</replaceable></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><command>cat <filename><replaceable>file</replaceable></filename> > <filename class="devicefile">/dev/lpt<replaceable>N</replaceable></filename></command></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 <replaceable>Testprogramm</replaceable> > /dev/lpt<replaceable>N</replaceable></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 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 <username>root</username> 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 class="devicefile">/dev/<replaceable>port</replaceable></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 Baud kommuniziert und
|
|
keine Parität verwendet:</para>
|
|
|
|
<programlisting>printer:dv=<filename class="devicefile">/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><command>tip</command> printer</userinput></screen>
|
|
|
|
<para>Kommt es hierbei zu einer Fehlermeldung,
|
|
ändern Sie den Eintrag in
|
|
<filename class="devicefile">/dev/cuaa<replaceable>N</replaceable></filename> und verwenden Sie <filename
|
|
class="devicefile">/dev/cuaa<replaceable>N</replaceable></filename>
|
|
statt <filename
|
|
class="devicefile">/dev/ttyu<replaceable>N</replaceable></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>><replaceable>Testprogramm</replaceable></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 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>
|
|
<indexterm>
|
|
<primary>Deckblätter</primary>
|
|
</indexterm>
|
|
|
|
<para>Schalten Sie den Druck von Deckblättern 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 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 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 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 class="directory">/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><command>mkdir <filename class="directory">/var/spool/<replaceable>printer-name</replaceable></filename></command></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><command>mkdir <filename class="directory">/var/spool/lpd</filename></command></userinput>
|
|
&prompt.root; <userinput><command>mkdir <filename class="directory">/var/spool/lpd/rattan</filename></command></userinput>
|
|
&prompt.root; <userinput><command>mkdir <filename class="directory">/var/spool/lpd/bamboo</filename></command></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 <username>daemon</username> und der Gruppe
|
|
<groupname>daemon</groupname> gehören, und auch nur
|
|
vom Benutzer und der Gruppe les-, schreib- und
|
|
durchsuchbar sein. Für unsere
|
|
Beispieldrucker:</para>
|
|
|
|
<screen>&prompt.root; <userinput><command>chown daemon:daemon <filename class="directory">/var/spool/lpd/rattan</filename></command></userinput>
|
|
&prompt.root; <userinput><command>chown daemon:daemon <filename class="directory">/var/spool/lpd/bamboo</filename></command></userinput>
|
|
&prompt.root; <userinput><command>chmod 770 <filename class="directory">/var/spool/lpd/rattan</filename></command></userinput>
|
|
&prompt.root; <userinput><command>chmod 770 <filename class="directory">/var/spool/lpd/bamboo</filename></command></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>
|
|
|
|
<programlisting>#
|
|
# /etc/printcap for host rose - added spooling directories
|
|
#
|
|
rattan|line|diablo|lp|Diablo 630 Line Printer:\
|
|
:sh:sd=<filename class="directory">/var/spool/lpd/rattan</filename>:
|
|
|
|
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
|
|
:sh:sd=<filename class="directory">/var/spool/lpd/bamboo</filename>:</programlisting>
|
|
|
|
<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
|
|
class="directory">/var/spool/lpd</filename> als Verzeichnis.</para>
|
|
</sect4>
|
|
|
|
<sect4 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
|
|
class="directory">/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>
|
|
|
|
<programlisting>#
|
|
# /etc/printcap for host rose - identified what devices to use
|
|
#
|
|
rattan|line|diablo|lp|Diablo 630 Line Printer:\
|
|
:sh:sd=<filename class="directory">/var/spool/lpd/rattan</filename>:\
|
|
:lp=<filename class="devicefile">/dev/lpt0</filename>:
|
|
|
|
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
|
|
sh:sd=<filename class="directory">/var/spool/lpd/bamboo</filename>:\
|
|
:lp=<filename class="devicefile">/dev/ttyu5</filename>:</programlisting>
|
|
|
|
<para>Wenn Sie <literal>lp</literal> nicht angeben, versucht
|
|
<application>LPD</application> die Gerätedatei <filename
|
|
class="devicefile">/dev/lp</filename> zu verwenden. <filename
|
|
class="devicefile">/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 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#<replaceable>Baudrate</replaceable></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#<replaceable>stty-Modi</replaceable></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 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 class="directory">/var/spool/lpd/bamboo</filename>:\
|
|
:lp=<filename class="devicefile">/dev/ttyd5</filename>:ms#-parenb cs8 clocal crtscts:</programlisting>
|
|
</sect4>
|
|
|
|
<sect4 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>
|
|
|
|
<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.
|
|
|
|
/bin/cat && exit 0
|
|
exit 2</programlisting>
|
|
|
|
<para>Machen Sie die Datei ausführbar:</para>
|
|
|
|
<screen>&prompt.root; <userinput><command>chmod 555 <filename>/usr/local/libexec/if-simple</filename></command></userinput></screen>
|
|
|
|
<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>
|
|
|
|
<programlisting>#
|
|
# /etc/printcap for host rose - added text filter
|
|
#
|
|
rattan|line|diablo|lp|Diablo 630 Line Printer:\
|
|
:sh:sd=<filename class="directory">/var/spool/lpd/rattan</filename>:\ :lp=<filename class="devicefile">/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 class="directory">/var/spool/lpd/bamboo</filename>:\
|
|
:lp=<filename class="devicefile">/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
|
|
class="directory">/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><command>lpd</command></userinput></screen>
|
|
</sect4>
|
|
|
|
<sect4 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><command>lptest 20 5 | lpr <option>-P</option><replaceable>Druckername</replaceable></command></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 <replaceable>Dateiname</replaceable></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>!"#$%&'()*+,-./01234
|
|
"#$%&'()*+,-./012345
|
|
#$%&'()*+,-./0123456
|
|
$%&'()*+,-./01234567
|
|
%&'()*+,-./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>
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1 id="printing-advanced">
|
|
<sect1info>
|
|
<authorgroup>
|
|
<author>
|
|
<firstname>Johann</firstname>
|
|
<surname>Kois</surname>
|
|
<contrib>Übersetzt von </contrib>
|
|
</author>
|
|
</authorgroup>
|
|
</sect1info>
|
|
|
|
<title>Erweiterte Drucker-Konfiguration</title>
|
|
|
|
<warning>
|
|
<para>Mit &os; 8.0 wurden die Gerätedateien für
|
|
serielle Ports von
|
|
<filename>/dev/ttyd<replaceable>N</replaceable></filename> in
|
|
<filename>/dev/ttyu<replaceable>N</replaceable></filename>
|
|
umbenannt. Setzen Sie noch &os; 7.X ein, müssen
|
|
Sie die Befehle in den folgenden Abschnitten entsprechend
|
|
anpassen.</para>
|
|
</warning>
|
|
|
|
<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>
|
|
|
|
<sect2 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>Dieser Abschnitt behandelt folgende Themen:</para>
|
|
|
|
<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>
|
|
</listitem>
|
|
|
|
<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>
|
|
|
|
<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 <option>-t</option></command> troff-Daten,
|
|
von <command>lpr <option>-d</option></command> &tex;-DVI-Daten,
|
|
oder von <command>lpr <option>-v</option></command> Rasterbilddaten
|
|
drucken können.
|
|
Daher sollten Sie diesen Abschnitt auf jeden Fall lesen.</para>
|
|
</listitem>
|
|
|
|
<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>
|
|
</listitem>
|
|
|
|
<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>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<note>
|
|
<para>Eine Kopie der verschiedenen Skripte finden Sie im
|
|
Verzeichnis <filename
|
|
class="directory">/usr/share/examples/printing</filename>.</para>
|
|
</note>
|
|
|
|
<sect3 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
|
|
class="devicefile">/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 <option>-t</option></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
|
|
<option>-l</option></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
|
|
<option>-i</option></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>
|
|
<indexterm>
|
|
<primary>Drucken</primary>
|
|
<secondary>Filter</secondary>
|
|
</indexterm>
|
|
|
|
<para>Ein <emphasis>Konvertierungsfilter</emphasis>
|
|
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 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 <filename
|
|
role="package">print/lprps-a4</filename> oder <filename
|
|
role="package">print/lprps-letter</filename>. 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" && cat && printf "\004" && exit 0
|
|
exit 2
|
|
else
|
|
#
|
|
# Normaler Text - zuerst konvertieren, dann drucken.
|
|
#
|
|
( echo "$first_line"; cat ) | /usr/local/bin/textps && printf "\004" && 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 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 <filename
|
|
role="package">print/ghostscript-gpl</filename>.</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 <option>-h</option></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&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=- - && 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" && cat && printf "\033&l0H" &&
|
|
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
|
|
<filename><replaceable>normaler.text</replaceable></filename></command>
|
|
als auch ein <command>lpr <replaceable>wasauchimmer.ps</replaceable></command>
|
|
funktionieren und beide Dateien sollten problemlos gedruckt
|
|
werden.</para>
|
|
</sect3>
|
|
|
|
<sect3 id="printing-advanced-convfilters">
|
|
<title>Konvertierungsfilter</title>
|
|
|
|
<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><command>dvips <filename><replaceable>seaweed-analysis.dvi</replaceable></filename></command></userinput>
|
|
&prompt.user; <userinput><command>lpr <filename><replaceable>seaweed-analysis.ps</replaceable></filename></command></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><command>lpr <option>-d</option> <filename><replaceable>seaweed-analysis.dvi</replaceable></filename></command></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 <option>-d</option></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 <option>-g</option></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
|
|
class="directory">/usr/local</filename> installiert werden.
|
|
Häufig wird das Verzeichnis <filename
|
|
class="directory">/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>
|
|
|
|
<programlisting>#
|
|
# /etc/printcap des Rechners rose - neuer df-Filter für bamboo
|
|
#
|
|
rattan|line|diablo|lp|Diablo 630 Line Printer:\
|
|
:sh:sd=<filename class="directory">/var/spool/lpd/rattan</filename>:\
|
|
:lp=<filename class="devicefile">/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 class="directory">/var/spool/lpd/bamboo</filename>:\
|
|
:lp=<filename class="devicefile">/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>Beim DVI-Filter handelt es sich um ein Shell-Skript
|
|
namens <filename>/usr/local/libexec/psdf</filename>:</para>
|
|
|
|
<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>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>
|
|
|
|
<programlisting>#!/bin/sh
|
|
#
|
|
# hpvf - Konvertiert GIF-Dateien nach HP/PCL, danach wird gedruckt.
|
|
# Installiert unter: /usr/local/libexec/hpvf
|
|
|
|
PATH=/usr/X11R6/bin:$PATH; export PATH
|
|
giftopnm | ppmtopgm | pgmtopbm | pbmtolj -resolution 300 \
|
|
&& 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>
|
|
|
|
<para><filename>/etc/printcap</filename> muss für einen Drucker,
|
|
der diesen Filter nutzen will, folgenden Eintrag enthalten:</para>
|
|
|
|
<programlisting>#
|
|
# /etc/printcap des Rechners orchid
|
|
#
|
|
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
|
|
:lp=<filename class="devicefile">/dev/lpt0</filename>:sh:sd=<filename class="directory">/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>
|
|
|
|
<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>
|
|
|
|
<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>
|
|
|
|
<programlisting>#!/bin/sh
|
|
#
|
|
# pstf - Konvertiert groff's troff-Daten nach PS, danach wird gedruckt.
|
|
# Installiert unter: /usr/local/libexec/pstf
|
|
#
|
|
exec grops</programlisting>
|
|
|
|
<para>Das ist alles. Um den Filter verwenden zu können,
|
|
müssen Sie ihn allerdings noch in
|
|
<filename>/etc/printcap</filename> aktivieren:</para>
|
|
|
|
<programlisting>:tf=<filename>/usr/local/libexec/pstf</filename>:</programlisting>
|
|
|
|
<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>
|
|
|
|
<programlisting>#!/bin/sh
|
|
#
|
|
# hprf - FORTRAN-Textfilter für den Drucker LaserJet 3si:
|
|
# Installiert unter: /usr/local/libexec/hprf
|
|
#
|
|
|
|
printf "\033&k2G" && fpr && printf "\033&l0H" &&
|
|
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 <filename
|
|
role="package">print/dvi2xx</filename> 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
|
|
class="devicefile">/dev/fd/0</filename> als Standardeingabe
|
|
problematisch. Wir können diese Problem aber umgehen, indem
|
|
wir einen temporären Dateinamen symbolisch nach <filename
|
|
class="devicefile">/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 class="directory">/tmp</filename> nicht als
|
|
temporären Link verwenden können. Symbolische
|
|
Links gehören dem User sowie der Gruppe
|
|
<username>bin</username>. Der Filter läuft aber als
|
|
User <username>daemon</username>. Außerdem ist
|
|
<filename class="directory">/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
|
|
class="directory">/tmp</filename> verfügt.</para>
|
|
|
|
<para>Mit diesen Informationen sind wir nun in der Lage, den
|
|
Filter zu entwickeln:</para>
|
|
|
|
<programlisting>#!/bin/sh
|
|
#
|
|
# hpdf - DVI-Daten auf einen HP/PCL-Drucker drucken
|
|
# Installiert unter: /usr/local/libexec/hpdf
|
|
|
|
PATH=/usr/local/bin:$PATH; export PATH
|
|
|
|
#
|
|
# 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
|
|
}
|
|
|
|
#
|
|
# 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>&2
|
|
cleanup
|
|
exit 2
|
|
}
|
|
|
|
#
|
|
# 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
|
|
|
|
#
|
|
# Bevor wir anfangen, räumen wir noch auf. Sicher ist sicher.
|
|
#
|
|
cleanup
|
|
|
|
#
|
|
# Die DVI-Eingabedatei auf die Standardeingabe linken (die zu druckende
|
|
# Datei).
|
|
#
|
|
ln -s /dev/fd/0 hpdf$$.dvi || fatal "Konnte Symlink nicht anlegen!"
|
|
|
|
#
|
|
# Umwandeln: LF = CR+LF
|
|
#
|
|
printf "\033&k2G" || fatal "Konnte Drucker nicht initialisieren!"
|
|
|
|
#
|
|
# Konvertieren und drucken. Da der Rückgabewert von dvilj2p
|
|
# unzuverlässig ist, ignorieren wir ihn einfach.
|
|
#
|
|
dvilj2p -M1 -q -e- dfhp$$.dvi
|
|
|
|
#
|
|
# Aufräumen und beenden.
|
|
#
|
|
cleanup
|
|
exit 0 </programlisting>
|
|
</sect4>
|
|
|
|
<sect4 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> (<filename
|
|
role="package">print/apsfilter</filename>) 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>
|
|
|
|
<sect3 id="printing-advanced-of">
|
|
<title>Ausgabefilter</title>
|
|
|
|
<para><application>LPD</application> unterstützt noch eine
|
|
weitere Filterart, die sogenannten Ausgabefilter. Diese sind
|
|
– analog zu einem Textfilter –
|
|
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>
|
|
|
|
<sect3 id="printing-advanced-lpf">
|
|
<title><command>lpf</command>: Ein Textfilter</title>
|
|
|
|
<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 <option>-i</option></command>), die
|
|
Übergabe von Zeichen-Literalen
|
|
(über <command>lpr <option>-l</option></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>
|
|
</sect2>
|
|
|
|
<sect2 id="printing-advanced-header-pages">
|
|
<title>Deckblätter</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 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>
|
|
|
|
<programlisting>#!/bin/sh
|
|
#
|
|
# hpof - Ausgabefilter für PCL-kompatible Drucker von Hewlett Packard
|
|
# Installiert unter: /usr/local/libexec/hpof
|
|
|
|
printf "\033&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 class="devicefile">/dev/lpt0</filename>:sd=<filename class="directory">/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
|
|
<option>-h</option></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 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
|
|
<username>kelly</username> auf dem Rechner <hostid>rose</hostid>
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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>
|
|
</sect3>
|
|
|
|
<sect3 id="printing-advanced-header-pages-accounting">
|
|
<title>Deckblätter verrechnen</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 <option>-h</option></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 <option>-h</option></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> 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 id="printing-advanced-header-pages-ps">
|
|
<title>Deckblätter auf &postscript;-Druckern ausgeben</title>
|
|
|
|
<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 <option>-h</option></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>
|
|
|
|
<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` <user> <host> <job>" 1>&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 <<EOF
|
|
%!PS
|
|
|
|
%
|
|
% 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>
|
|
|
|
<programlisting>#!/bin/sh
|
|
#
|
|
# psdf - DVI-nach-PostScript - Druckerfilter
|
|
# Installiert unter: /usr/local/libexec/psdf
|
|
#
|
|
# Wird von lpd aufgerufen, wenn der Benutzer lpr -d verwendet.
|
|
#
|
|
|
|
orig_args="$@"
|
|
|
|
fail() {
|
|
echo "$@" 1>&2
|
|
exit 2
|
|
}
|
|
|
|
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>&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 <option>-h</option></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>
|
|
</sect3>
|
|
</sect2>
|
|
|
|
<sect2 id="printing-advanced-network-printers">
|
|
<title>Drucken über ein Netzwerk</title>
|
|
|
|
<indexterm>
|
|
<primary>Drucker</primary>
|
|
<secondary>Netzwerk</secondary>
|
|
</indexterm>
|
|
|
|
<indexterm><primary>Netzwerkdruck</primary></indexterm>
|
|
|
|
<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 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>
|
|
|
|
<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>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 <hostid>rose</hostid>
|
|
verfügt über zwei Drucker, <literal>bamboo</literal>
|
|
und <literal>rattan</literal>. Wir wollen nun allen Benutzern
|
|
des Rechners <hostid>orchid</hostid> 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
|
|
<hostid>orchid</hostid>. Diese enthielt bereits einen Eintrag
|
|
für den Drucker <literal>teak</literal>. Zusätzlich
|
|
tragen wir nun die zwei Drucker des Rechners
|
|
<hostid>rose</hostid> ein:</para>
|
|
|
|
<programlisting>#
|
|
# /etc/printcap für den Rechner orchid - mit zusätzlichen
|
|
# Einträgen für die (entfernten) Drucker auf dem Rechner rose
|
|
#
|
|
|
|
#
|
|
# teak ist ein lokaler Drucker und direkt mit orchid verbunden:
|
|
#
|
|
teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\
|
|
:lp=<filename class="devicefile">/dev/lpt0</filename>:sd=<filename class="directory">/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>:
|
|
|
|
#
|
|
# 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 class="directory">/var/spool/lpd/rattan</filename>:
|
|
|
|
#
|
|
# bamboo ist ebenfalls mit rose verbunden:
|
|
#
|
|
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
|
|
:lp=:rm=rose:rp=bamboo:sd=<filename class="directory">/var/spool/lpd/bamboo</filename>:</programlisting>
|
|
|
|
<para>Nun müssen wir nur noch die Spooling-Verzeichnisse
|
|
auf dem Rechner <hostid>orchid</hostid> erzeugen:</para>
|
|
|
|
<screen>&prompt.root; <userinput><command>mkdir <option>-p</option> <filename class="directory">/var/spool/lpd/rattan</filename> <filename class="directory">/var/spool/lpd/bamboo</filename></command></userinput>
|
|
&prompt.root; <userinput><command>chmod 770 <filename class="directory">/var/spool/lpd/rattan</filename> <filename class="directory">/var/spool/lpd/bamboo</filename></command></userinput>
|
|
&prompt.root; <userinput><command>chown daemon:daemon <filename class="directory">/var/spool/lpd/rattan</filename> <filename class="directory">/var/spool/lpd/bamboo</filename></command></userinput></screen>
|
|
|
|
<para>Damit können Benutzer des Rechners
|
|
<hostid>orchid</hostid> die Drucker <literal>rattan</literal>
|
|
und <literal>bamboo</literal> verwenden. Ein Benutzer gibt
|
|
auf <hostid>orchid</hostid> beispielsweise ein:</para>
|
|
|
|
<screen>&prompt.user; <userinput><command>lpr <option>-P</option> bamboo <option>-d</option> <filename><replaceable>sushi-review.dvi</replaceable></filename></command></userinput></screen>
|
|
|
|
<para>Die Anwendung <application>LPD</application> auf dem Rechner
|
|
<hostid>orchid</hostid> kopiert daraufhin den Druckauftrag in das
|
|
Spooling-Verzeichnis <filename
|
|
class="directory">/var/spool/lpd/bamboo</filename> und stellt fest,
|
|
dass es sich um einen DVI-Auftrag handelt. Sobald
|
|
<hostid>rose</hostid> über genug freien Platz im
|
|
<literal>bamboo</literal>-Spooling-Verzeichnis verfügt,
|
|
würden die beiden <application>LPD</application> die Datei auf
|
|
den Rechner <hostid>rose</hostid> transferieren. Diese Datei
|
|
verbleibt danach in der Druckerwarteschlange des Rechners
|
|
<hostid>rose</hostid>, 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 <hostid>rose</hostid> angeschlossenen
|
|
&postscript;-Drucker handelt.</para>
|
|
</sect3>
|
|
|
|
<sect3 id="printing-advanced-network-net-if">
|
|
<title>Drucker mit direkter TCP-Schnittstelle</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 <printer-hostname> <port-number>";
|
|
|
|
$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', &AF_INET, $printer_port, $address);
|
|
|
|
socket(PRINTER, &PF_INET, &SOCK_STREAM, $protocol)
|
|
|| die "Can't create TCP/IP stream socket: $!";
|
|
connect(PRINTER, $sockaddr) || die "Can't contact $printer_host: $!";
|
|
while (<STDIN>) { 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
|
|
<hostid>scrivener</hostid>.
|
|
Daher sieht der Textfilter für diesen Drucker wie folgt
|
|
aus:</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 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 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 <option>-#5</option></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
|
|
<hostid>rose</hostid>. 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 class="directory">/var/spool/lpd/rattan</filename>:\
|
|
:lp=<filename class="devicefile">/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 class="directory">/var/spool/lpd/bamboo</filename>:sc:\
|
|
:lp=<filename class="devicefile">/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
|
|
<hostid>orchid</hostid> 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 class="devicefile">/dev/lpt0</filename>:sd=<filename class="directory">/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 class="directory">/var/spool/lpd/rattan</filename>:
|
|
|
|
bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\
|
|
:lp=:rm=rose:rp=bamboo:sd=<filename class="directory">/var/spool/lpd/bamboo</filename>:sc:</programlisting>
|
|
|
|
<para>Durch die Verwendung der
|
|
<literal>sc</literal>-Fähigkeit ist zwar die Verwendung
|
|
von <command>lpr <option>-#</option></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 <filename><replaceable>forsale.sign forsale.sign forsale.sign forsale.sign forsale.sign</replaceable></filename></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 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 <username>root</username>), 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 <groupname>artists</groupname> die Verwendung des
|
|
Druckers <literal>bamboo</literal> erlauben, passen wir die
|
|
bereits bekannte <filename>/etc/printcap</filename> des
|
|
Rechners <hostid>rose</hostid> 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 class="directory">/var/spool/lpd/rattan</filename>:\
|
|
:lp=<filename class="devicefile">/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 class="directory">/var/spool/lpd/bamboo</filename>:sc:rg=artists:\
|
|
:lp=<filename class="devicefile">/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
|
|
<hostid>orchid</hostid> wird dadurch nicht beeinflusst. Jeder
|
|
Benutzer des Rechners <hostid>orchid</hostid> 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 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 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
|
|
<groupname>artists</groupname> 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
|
|
#
|
|
|
|
#
|
|
# Kein Größenlimit:
|
|
#
|
|
rattan|line|diablo|lp|Diablo 630 Line Printer:\
|
|
:sh:mx#0:sd=<filename class="directory">/var/spool/lpd/rattan</filename>:\
|
|
:lp=<filename class="devicefile">/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 class="directory">/var/spool/lpd/bamboo</filename>:sc:rg=artists:mx#5000:\
|
|
:lp=<filename class="devicefile">/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 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
|
|
<hostid>rose</hostid>:</para>
|
|
|
|
<programlisting>orchid
|
|
violet
|
|
madrigal.fishbaum.de</programlisting>
|
|
|
|
<para>Durch diese Vorgaben akzeptiert <hostid>rose</hostid>
|
|
nur noch Druckaufträge von den Rechnern
|
|
<hostid>orchid</hostid>, <hostid>violet</hostid>,
|
|
und <hostid role="fqdn">madrigal.fishbaum.de</hostid>.
|
|
Versucht ein anderer Rechner, auf den
|
|
<application>LPD</application> von
|
|
<hostid>rose</hostid> 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 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 class="directory">/var/spool/lpd/bamboo</filename>:sc:rg=artists:mx#5000:\
|
|
:lp=<filename class="devicefile">/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 Blöcke) freier Plattenplatz
|
|
vorhanden sein müssen, damit
|
|
<application>LPD</application> einen Druckauftrag
|
|
von einem entfernten Rechner akzeptiert:</para>
|
|
|
|
<screen>&prompt.root; <userinput><command>echo 6144 > <filename>/var/spool/lpd/bamboo/minfree</filename></command></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 id="printing-advanced-acct">
|
|
<title>Die Druckernutzung verrechnen</title>
|
|
|
|
<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>Prinzipiell gibt es zwei Möglichkeiten, wie Sie diese
|
|
Verrechnung umsetzen können:</para>
|
|
|
|
<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>
|
|
|
|
<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>
|
|
|
|
<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
|
|
<username>smith</username> auf dem Rechner
|
|
<hostid>alpha</hostid> mit dem Benutzer
|
|
<username>smith</username> auf dem Rechner
|
|
<hostid>gamma</hostid> 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>…</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
|
|
<option>-m</option></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><command>pac <option>-p1.50</option></command></userinput></screen>
|
|
|
|
<para>beispielsweise für einen Preis von einem Dollar und
|
|
fünfzig Cent pro Seite.</para>
|
|
|
|
<para>Der Aufruf von <command>pac <option>-s</option></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>
|
|
</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 – 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>
|
|
|
|
<para>Sie können aber auch großzügig sein und alle
|
|
Ausdrucke kostenlos abgeben.</para>
|
|
</sect3>
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1 id="printing-using">
|
|
<sect1info>
|
|
<authorgroup>
|
|
<author>
|
|
<firstname>Johann</firstname>
|
|
<surname>Kois</surname>
|
|
<contrib>Übersetzt von </contrib>
|
|
</author>
|
|
</authorgroup>
|
|
</sect1info>
|
|
|
|
<title>Drucker verwenden</title>
|
|
|
|
<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 id="printing-lpr">
|
|
<title>Druckaufträge erstellen</title>
|
|
|
|
<para>Um eine Datei zu drucken, geben Sie folgenden Befehl ein:</para>
|
|
|
|
<screen>&prompt.user; <userinput><command>lpr <filename><replaceable>filename</replaceable></filename> <replaceable>...</replaceable></command></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><command>lpr <filename>/etc/host.conf</filename> <filename>/etc/hosts.equiv</filename></command></userinput></screen>
|
|
|
|
<para>Um einen bestimmten Drucker auszuwählen, verwenden Sie:</para>
|
|
|
|
<screen>&prompt.user; <userinput><command>lpr <option>-P</option> <replaceable>printer-name</replaceable> <filename><replaceable>filename</replaceable></filename> <replaceable>...</replaceable></command></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><command>ls <option>-l</option> | lpr <option>-P</option> rattan</command></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 <option>-l</option></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 id="printing-lpq">
|
|
<title>Druckaufträge verwalten</title>
|
|
|
|
<indexterm><primary>Druckauftrag</primary></indexterm>
|
|
|
|
<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><command>lpq <option>-P</option> bamboo</command></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
|
|
<username>mary</username> 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 <option>-l</option></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>
|
|
</sect2>
|
|
|
|
<sect2 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><command>lprm <replaceable>Job-Nummer</replaceable></command></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><command>lprm <option>-P</option> bamboo 10</command></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><command>lprm <option>-P</option> rattan -</command></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><command>lpr <option>-P</option> rattan <filename><replaceable>myfile</replaceable></filename></command></userinput>
|
|
&prompt.user; <userinput><command>rlogin orchid</command></userinput>
|
|
&prompt.user; <userinput><command>lpq <option>-P</option> rattan</command></userinput>
|
|
Rank Owner Job Files Total Size
|
|
active seeyan 12 ... 49123 bytes
|
|
2nd kelly 13 myfile 12 bytes
|
|
&prompt.user; <userinput><command>lprm <option>-P</option> rattan 13</command></userinput>
|
|
rose: Permission denied
|
|
&prompt.user; <userinput><command>logout</command></userinput>
|
|
&prompt.user; <userinput><command>lprm <option>-P</option> rattan 13</command></userinput>
|
|
dfA013rose dequeued
|
|
cfA013rose dequeued
|
|
</screen>
|
|
</note>
|
|
</sect2>
|
|
|
|
<sect2 id="printing-lpr-options">
|
|
<title>Abseits von normalem Text: Druckoptionen</title>
|
|
|
|
<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 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><replaceable>fish-report.dvi</replaceable></filename> auf
|
|
dem Drucker <literal>bamboo</literal>:</para>
|
|
|
|
<screen>&prompt.user; <userinput><command>lpr <option>-P</option> bamboo -d <filename><replaceable>fish-report.dvi</replaceable></filename></command></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><command>zcat <filename>/usr/share/man/man1/ls.1.gz</filename> | troff <option>-t</option> -man | lpr <option>-t</option></command></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>
|
|
</sect3>
|
|
|
|
<sect3 id="printing-lpr-options-job-handling">
|
|
<title>Druckaufträge verwalten</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><replaceable>parser.c</replaceable></filename>,
|
|
gefolgt von drei Kopien von
|
|
<filename><replaceable>parser.h</replaceable></filename> auf
|
|
den Standarddrucker:</para>
|
|
|
|
<screen>&prompt.user; <userinput><command>lpr <option>-#3</option> <filename><replaceable>parser.c parser.h</replaceable></filename></command></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>
|
|
</sect3>
|
|
|
|
<sect3 id="printing-lpr-options-misc">
|
|
<title>Deckblatt-Optionen</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>
|
|
</sect3>
|
|
</sect2>
|
|
|
|
<sect2 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>
|
|
|
|
<listitem>
|
|
<para>Die Warteschlangen Ihrer Drucker zu aktivieren und zu
|
|
deaktivieren.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Die Reihenfolge der Druckaufträge zu
|
|
ändern.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
<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 <username>root</username>) 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
|
|
<username>root</username>-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
|
|
<replaceable>printer-name</replaceable></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
|
|
<replaceable>printer-name</replaceable></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
|
|
<replaceable>printer-name</replaceable></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. <username>root</username> 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 <username>root</username>.
|
|
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 <replaceable>printer-name</replaceable>
|
|
<replaceable>nachricht</replaceable></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
|
|
<replaceable>printer-name</replaceable></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
|
|
<replaceable>command-name</replaceable></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
|
|
<replaceable>printer-name</replaceable></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
|
|
<replaceable>printer-name</replaceable></command></term>
|
|
|
|
<listitem>
|
|
<para>Startet den Drucker, um die in der Warteschlange
|
|
enthaltenen Aufträge zu drucken.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term><command>stop
|
|
<replaceable>printer-name</replaceable></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 <replaceable>printer-name</replaceable>
|
|
<replaceable>job-or-username</replaceable></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
|
|
<replaceable>printer-name</replaceable></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>
|
|
</sect2>
|
|
</sect1>
|
|
|
|
<sect1 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>
|
|
|
|
<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
|
|
<ulink url="http://www.lprng.org/"></ulink> zu finden.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term>CUPS</term>
|
|
|
|
<listitem>
|
|
<indexterm><primary>CUPS</primary></indexterm>
|
|
|
|
<para><application>CUPS</application>, 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 <ulink url="http://www.cups.org/"></ulink>.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
<term>HPLIP</term>
|
|
|
|
<listitem>
|
|
<indexterm><primary>HPLIP</primary></indexterm>
|
|
|
|
<para><application>HPLIP</application>, 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
|
|
<ulink url="http://hplipopensource.com/hplip-web/index.html"></ulink>.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</sect1>
|
|
|
|
<sect1 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 && printf "\f" && 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>!"#$%&'()*+,-./01234
|
|
"#$%&'()*+,-./012345
|
|
#$%&'()*+,-./0123456</screen>
|
|
|
|
<indexterm><primary>MS-DOS</primary></indexterm>
|
|
<indexterm><primary>OS/2</primary></indexterm>
|
|
<indexterm><primary>ASCII</primary></indexterm>
|
|
|
|
<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-Code 10,
|
|
auch als <foreignphrase>Line Feed</foreignphrase> (LF)
|
|
bekannt. &ms-dos;, &os2; 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&k2G" && cat && printf "\033&l0H" && exit 0
|
|
exit 2</programlisting>
|
|
|
|
<para>Das nächste Beispiel aus
|
|
<filename>/etc/printcap</filename> beschreibt den
|
|
Rechner <hostid>orchid</hostid>, an dessen Parallelport
|
|
ein Drucker angeschlossen ist. Es handelt sich dabei um
|
|
einen Hewlett Packard LaserJet 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 class="devicefile">/dev/lpt0</filename>:sh:sd=<filename class="directory">/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>
|
|
|
|
<listitem>
|
|
<para>Anstelle des gewünschten Textes wurden nur
|
|
zufällige Zeichen gedruckt.</para>
|
|
|
|
<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>
|
|
|
|
<varlistentry>
|
|
<term>Der Drucker hat überhaupt nicht reagiert.</term>
|
|
|
|
<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 class="directory">/var/spool/lpd/rattan</filename>:\
|
|
:lp=<filename class="devicefile">/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
|
|
class="devicefile">/dev/console</filename> für die Ausgabe
|
|
der Fehlermeldungen.</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</sect1>
|
|
</chapter>
|