printing basics


Drucker einrichten unter Unix ist nicht immer leicht (hauptsächlich, weil die Hersteller von Druckern meist nur Windows User direkt supporten). Aber wenn ein Drucker mal eingerichtet ist, geht alles ganz leicht.

Hier zunächst ein kurzer Überblick, wie alles zuammenhängt und die wichtigsten Anwendungsprogramme zum Drucken.
Zu den Grundlagen:

Hat man einen Drucker der direkt am Parallelport angeschlossen ist und wird dieser von einem Unix Treiber unterstützt, so kann man direkt rohe Daten an diesen Drucker schreiben. z.B.:

echo blabla > /dev/lp0

Die Namen des Drucker "devices" sind von Unix zu Unix leicht verschieden. Bei Linux heisst der erste Drucker /dev/lp0. Dorthin schreiben darf i.a. natürlich nur der root user. Aber das blabla sollte dann direkt ausgedruckt werden. (Ein Drucker der nur ganze seiten druckt (z.B. Laserdrucker) wartet dann noch auf das Seitenende. Das kann man ihm mit einem Control-L Zeichen schicken:

echo ^L > /dev/lp0

(Control Zeichen kann man in der Shell eingeben in dem man zuerst Control-v drückt und dann den Control den man senden will. also z.B. Control-v Control-l hier)

Besonders bequem ist diese Art zu drucken nicht. Man will ja z.B. auch übers Netzwerk drucken oder wenn der Drucker gerade belegt ist, soll der Druckauftrag zwischengespeichert ("ge-queued") werden. etc.

Dazu laüft ein sogenannter "Drucker daemon" (meist "lpd" ). Es gibt inzwischen verschieden Arten dieses "Drucker daemons" (lpd, lpr-ng, cups, ...), am verbreitetsten ist aber noch der alte BSD "lpd".

Der "lpd" übernimmt das Zwischenspeichern, das Rausschicken der Daten an den /dev/lp Port. Er stellt den Drucker anderen Computern im Netz zur Verfügung und erlaubt das Drucken auf andere Netzwerkdrucker. Weiters können die Daten bevor sie gedruckt werden noch durch Programme aufbereitet werden (z.B. weil man Daten in einem Format drucken will, das der Drucker nicht direkt unterstützt.)

Die vorhandenen Drucker auf einem System sind beim BSD "lpd" in /etc/printcap definiert.

Hat man einen richtig eingerichtetn Drucker, so kann man einen Druckauftrag mit dem "lpr" kommando an den "lpd" weitergeben.

echo blabla^L | lpr

"lpr" druckt dabei auf den Standard Printer mit dem Namen "lp". Hat man mehrere Drucker, so kann man den Namen des Druckers angeben:

echo blabla^l| lpr -Pbrother

würde auf einem Drucker mit dem Namen "brother" drucken sofern dieser eingerichtet ist.

mit

lpq -Pbrother

sieht man alle Druckaufträge die zur Bearbeitung in der "queue" stehen.

lprm 1234

würde den Druckauftrag mit der Nummer 1234 aus der "queue" des Standarddruckers "lp" entfernen. (man kann hier wieder mit -P einen anderen Druckernamen angeben)

In welchem Datenformat müssen die Daten sein, damit sie ausgedruckt werden?
Das hängt vom Drucker ab und davon ob der "lpd" so eingestellt ist, dass er Daten in anderen Formaten in das Format umwandelt, das der Drucker versteht.

Die meisten Drucker heutzutage sprechen entweder ein "laserjet" (PCL) Format oder "deskjet". Gute Drucker können direkt die Seitenbeschreibungssprache "postscript" verstehen. Da die meisten Programme im Unix erwarten, mit einem Postscript Drucker zu sprechen, sollte der "lpd" so eingestellt sein, dass er Postscript Daten in jedem Falle drucken kann. (Ein gutes Programm dafür ist "apsfilter")

Wir gehen im folgenden davon aus. dass der "lpd" gut eingerichtet ist und Postscript versteht.
Wir können dann mit dem Befehl:

lpr tiger.ps

oder

cat tiger.ps | lpr

die Postscript Datei "tiger.ps" ausdrucken. (Die Datei "tiger.ps" liegt normalerweise dem Programm "gs" (ghostscript) bei und sollte auf jedem Unix zu finden sein. Am besten "locate" benutzen.

Programme wie Netscape, xv, etc... rufen intern das Programm "lpr" zum Drucken auf, können aber alternativ auch in ein File drucken. Dieses File ist dann ein .ps file.

Hat man die grafische X11 Oberfläche zur Verfügung, kann man sich die Postscript Dateien mit

gv tiger.ps

oder:

ghostscript tiger.ps

anschauen, bevor man sie ausdruckt.

Zum Ausdrucken von normalen Text Dateien auf einem Postscript Drucker ist das Programm a2ps sehr zu empfehlen:

a2ps -2 blabla.txt

würde die Datei blabla.txt in ein mit 2 Spalten pro Seite formatiertes Postscript umwandeln und zum Standarddrucker schicken.

a2ps -2 -oblabla.ps blabla.txt

würde die Ausgabe nicht direkt zum Drucker schicken, sondern in die Datei blabla.ps speichern (die wir dann vor dem echten Ausdrucken noch mal mit gv anschauen können)

a2ps versucht je nach Art der Textdatei diese speziell fomatiert auszudrucken. (so z.B. Email oder C programme etc. Das kann manchmal störend sein. Mit der Option --pretty-print=text schaltet man auf normalen Text Ausdruck zurück.)

Will man direkt aus dem Mail Programm "mutt" heraus mit der p Taste drucken können, kann man z.B. folgendes in sein .muttrc File eintragen:

set print=ask-yes # ask me if I really want to print messages
set print_command="/usr/bin/a2ps -=mail -2 "

Ebenfalls zum Ausdrucken von Textdatein geeignet ist enscript:

enscript -oblabla.ps -2 blabla.txt

(ich finde aber a2ps besser)

Zum interaktiven Ausdrucken von Bildern ist "xv" sehr praktisch. Für Webseiten kann man seinen Browser verwenden. (a2ps kann bei HTML-Seiten auch Netscape aufrufen um die Umwandlung durchzuführen)

Die GNU Version von "man" (bzw. "groff") kann "man pages" auch schön formatiert als Postscript ausgeben:

man -Tps lpr > bla.ps

würde die "manpage" zum "lpr" Programm in die Datei bla.ps speichern.

Zum Umgang mit Postscript Dateien gibt es eine Menge nützlicher Tools. (Das "psutils" Paket ist hier besonders zu empfehlen). Hier kurz die wichtigsten:

psnup -2 bla.ps bla2.ps

macht aus einem Postscript File bla.ps ein neues, wobei immer 2 Seiten verkleinert auf eine geschrieben werden.

ps2pdf

wandelt ps Dateien in pdf um (meist aber nicht so gut wie Programme die direkt pdf-Dateien erzeugen können)

pstopdf

ebenfalls. (.pdf Files kannst du dir unter Unix mit acroread oder xpdf ansehen)

pdftops

und

pdf2ps

wandeln pdf in ps um

pstops

ist ein sehr leistungsfähiges Programm um ps Dateien in andere umzuwandeln (kann wie psnub verkleinern aber auch Seiten umordnen etc. Damit kann man sich z.B. die Seiten so formatieren, dass sie als kleines "booklet" zusammenheftbar sind etc.)

psselect -p 1-3,7 bla.ps bla2.ps

erlaubt es, einzelne Seiten aus einem Postscript Dokument herauszufiltern. (Im obigen Fall die Seiten 1 bis 3 und die Seite 7) werden aus bla.ps gelesen und in bla2.ps gespeichert.

pstoedit

versucht Postscript Daten in editierbare Vektor Grafiken umzuwandeln (xfig, fig, ai, hpgl, dxf, ....)


EXERCISES:

* Wenn du einen direkt angeschlossenen Drucker hast und root bist, dann versuche einige Zeichen probehalber direkt auf /dev/lp0 (o.ä.) zu schreiben.

* Schau dir dein /etc/printcap File an oder informier dich bei deinem Sysadmin welche Drucker eingerichtet sind.

* Drucke eine kurze Textdatei direkt mit "lpr"

* Verwende "lpq" und "lprm" um einen Druckjob zu löschen.

* Erzeuge mit "a2ps" und/oder enscript Postscript Ausdrucke von Text Files (zum Papierschonen am besten nicht gleich auf den Drucker sondern zuerst in ein .ps File schreiben).

* Betrachte Postscript Files mit "gv" oder "ghostscript"

* Verwende "psnup" um eine Postscript Datei mit vielen Seiten in eine umzuwandeln die nur halb soviele Seiten hat.

* Verwende "ps2pdf" um eine Postscript Datei in ein pdf umzuwandeln. Sieh dir das entstandene pdf File an.


REFERENCES:

man lpr

lpr --help

man lpq

man lprm

man lpd

man printcap

man a2ps

info a2ps

a2ps --help

a2ps --list topics

man enscript

man psnup

man psselect

man psmerge

man pstödit

man man