Wenn Sie eine einfache Testseite mit lptest(1) gedruckt haben, könnte eines der folgenden Probleme aufgetreten sein:
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.
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 Form Feed -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.
Der folgende Ersatz für das Shell-Skript
/usr/local/libexec/if-simple
gibt
ein „Form Feed“ aus, nachdem der Auftrag an
den Drucker geschickt wurde:
Sie haben einen Ausdruck ähnlich dem folgenden erhalten:
Sie sind zu einem weiteren Opfer des Treppeneffekts 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 Line Feed (LF) bekannt. MS-DOS®, OS/2® und andere Betriebssysteme verwenden stattdessen ein Zeichenpaar: ASCII-Code 10 und ASCII-Code 13, Carriage Return (CR). Viele Drucker verwenden in der Voreinstellung die Konvention von MS-DOS®, um Zeilenumbrüche darzustellen.
Wenn Sie unter FreeBSD drucken, wird nur das Zeichen Line Feed 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 Carriage Return: Es setzt die Position für das folgende Zeichen auf den linken Rand der Seite.
FreeBSD erwartet von einem Drucker das folgende Verhalten:
Drucker empfängt CR | Drucker druckt CR |
Drucker empfängt LF | Drucker druckt CR + LF |
Es gibt mehrere Möglichkeiten, dieses Verhalten zu erreichen:
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.
Wenn Sie auf Ihrem Rechner neben FreeBSD noch andere Betriebssysteme verwenden, müssen Sie Ihren Drucker möglicherweise anschließend erneut konfigurieren, 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.
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
ms#
-Fähigkeit verwenden und
in /etc/printcap
den
onlcr
-Modus für den Drucker
aktivieren.
Senden Sie eine Escape-Sequenz 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.
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 Form Feed gesendet, um die letzte Seite des Druckauftrags auszuwerfen. Dieses Beispiel sollte mit nahezu allen Druckern von Hewlett Packard funktionieren.
Das nächste Beispiel aus
/etc/printcap
beschreibt den
Rechner orchid
, an dessen Parallelport
ein Drucker angeschlossen ist. Es handelt sich dabei um
einen Hewlett Packard LaserJet 3Si, der den Namen
teak
verwendet. Als Textfilter wird
das Skript aus dem letzten Beispiel verwendet:
/dev/lpt0
:sh:sd=/var/spool/lpd/teak
:mx#0:\
:if=/usr/local/libexec/hpif
:Der Drucker hat niemals eine neue Zeile begonnen. Alle Zeilen des Textes wurden in eine einzige Zeile gedruckt.
Dieses Problem ist das „Gegenteil“ des oben beschriebenen Treppeneffekts und kommt wesentlich seltener vor. Die von FreeBSD 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.
Konfigurieren Sie Ihren Drucker, um die folgende Interpretation der Zeichen LF und CR zu erzwingen:
Drucker empfängt | Drucker druckt |
---|---|
CR | CR |
LF | CR + LF |
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.
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:
Wenn der Drucker die Flusskontrolle mit XON/XOFF
unterstützt, können Sie in der
ms#
-Fähigkeit den
ixon
-Modus aktivieren.
Unterstützt der Drucker die Anfrage zum
Senden/Löschen des Sende-Hardware-Handshakes (allgemein
bekannt als RTS/CTS
, dann sollten Sie den
crtscts
-Modus in der
ms#
-Fähigkeit aktivieren.
Stellen Sie aber sicher, dass das verwendete
Druckerkabel auch für die Hardware-Flusskontrolle
geeignet ist.
Anstelle des gewünschten Textes wurden nur zufällige Zeichen gedruckt.
Dieses Problem wird ebenfalls durch falsche
Konfigurationsparameter im Zusammenhang mit einem seriellen
Drucker verursacht. Kontrollieren Sie die bps-Rate in der
br
-Fähigkeit und die
Paritätseinstellung
(Parity) in der
ms#
-Fähigkeit. Überprüfen
Sie außerdem, ob der Drucker auch tatsächlich die
gleichen Einstellungen verwendet, die in
/etc/printcap
definiert wurden.
Wenn gar nichts passiert ist, dann liegt das vermutlich
an FreeBSD und nicht am Drucker. Aktivieren Sie die
Protokollierung (lf
-Fähigkeit)
für den entsprechenden Drucker in der Datei
/etc/printcap
. Es folgt nun ein
Beispieleintrag für den Drucker
rattan
, bei dem die
lf
-Fähigkeit aktiviert wurde.
/var/spool/lpd/rattan
:\
:lp=/dev/lpt0
:\
:if=/usr/local/libexec/if-simple
:\
:lf=/var/log/rattan.log
Versuchen Sie jetzt noch einmal zu drucken.
Überprüfen Sie die Protokolldatei (in unserem
Beispiel /var/log/rattan.log
) auf
etwaige Fehlermeldungen. Versuchen Sie aufgrund dieser
Meldungen, das Problem zu beheben.
Wenn Sie keine Protokolldatei festlegen, verwendet
LPD in der Voreinstellung /dev/console
für die Ausgabe
der Fehlermeldungen.
Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an
<de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an
<de-bsd-translators@de.FreeBSD.org>.