Tipps zum Drucken unter Linux
Beim Drucken zeigen sich die Stärken und Schwächen des Betriebssystems ganz besonders. Die Treiberunterstützung ist im Vergleich zu Windows oft noch schlecht und die Installation und Einrichtung von lokalen Druckern ist unter Linux manchmal immer noch ein unnötig komplizierter Vorgang. Hat jedoch ein fähiger Administrator einen CUPS-Server eingerichtet, ist die Einrichtung und Nutzung von Netzwerkdruckern ganz im Gegensatz zu Windows ein Kinderspiel. Zur Druckersteuerung unter Linux verwendet man häufig noch kryptische Kommandozeilen, die jedoch, wenn man sie einmal gelernt hat, dann wieder ein wesentlich schnelleres Arbeiten ohne Überraschungen erlaubt.
Drucken unter CUPS
Benutzt man das Common Unix Printing System (CUPS), so kann man viele Einstellungen und Informationen zum Druckvorgang über den Webbrowser bekommen. Folgende Adressen ([cupsserver] steht für die IP-Adresse des CUPS-Servers, z.B. 192.168.0.2 oder bei lokaler Installation localhost) sind u.a. nützlich:
- Bedienung über HTML allgemein:
http://[cupsserver]:631/
- Anleitung zu CUPS-Bedienung
http://[cupsserver]:631/sum.html
- Laufende Jobs:
http://[cupsserver]:631/jobs
- vorhandene bzw. eingerichtete Drucker:
http://[cupsserver]:631/printers
Das CUPS erweitert auch die Steuerungsmöglichkeiten des Druckvorgangs über die Kommandozeile. Einige nützliche Optionen sind u.a.:
- nur bestimmte Seiten drucken:
> lpr -o page-ranges=1-4,7,9-12 dateiname
Mit diesem Kommando werden nur die Seiten 1-4,7 und 9-12 der Datei dateiname gedruckt. Zu beachten ist, dass die Seitenangabe hier meist nicht mit der Seitennummerierung innerhalb der Datei übereinstimmt, z.B. wenn das Titelblatt die Seitennummer 0 hat. - mehrere Seiten auf ein Blatt drucken:
> lpr -o number-up=4 -o number-up-layout=tblr dateiname
Hiermit werden vier Seiten auf ein Blatt gedruckt. Die Option number-up-layout gibt dabei an, in welcher Reihenfolge die einzelnen Seiten auf das Blatt gedruck werden sollen. Die Defaulteinstellung ist lrtb (left to right, top to bottom), eine andere Möglichkeit ist das im Beispiel verwendete tblr (top to bottom, left to right). - doppelseitig drucken:
> lpr -o sides=two-sided-long-edge dateiname
Die Option sides=two-sided-long-edge gibt dabei an, dass das doppelseitige Dokument später über die lange Blattkante geblättert werden soll. Sie macht natürlich nur dann Sinn, wenn der Drucker auch doppelseitig drucken kann und entsprechend eingerichtet wurde. - Anzeige der Druckerwarteschlange:
> lpq
- Druckaufträge aus der Warteschlange löschen:
> lprm
Dies löscht alle eigenen Druckaufträge, aber nicht die anderer Benutzer. Will man nur einen bestimmten Druckauftrag löschen, so muß man dies extra angeben:> lprm -Plp1 42
Dies löscht den Druckauftrag Nummer 42 aus der Druckerwarteschlange für den Drucker lp1.
Poster drucken
Um Poster oder andere große Bilder einfach auf mehrere Blätter verteilt zu drucken gibt es für Linux eine einfache Antwort:
Mit diesem kleinen Programm kann ein beliebiges Bild in ein entsprechendes mehrseitiges PDF umgewandelt werden, welches man dann mit einem beliebigem PDF-Viewer ausdrucken kann. Dabei bietet es intuitive Benutzeroberfläche, so dass man sofort sieht, wie das Bild auf die verschiedenen Seiten aufgeteilt wird. Das ist wesentlich einfacher als mit einem Programm, welches nur irgendwelche kryptischen Parameter auf der Kommandozeile entgegennimmt, wie z.B. bei poster der Fall. Wer es unbedingt doch über die Kommandozeile machen möchte findet bei Printing huge posters eine Anleitung, wie man das mit obengenanntem poster bewerkstelligt.
Drucken von DIN A5-Heftchen
Manchmal ist es praktisch ein Dokument (z.B. die Würzburger Busfahrpläne) als DIN A5-Heftchen (d.h. es werden jeweils zwei Seiten auf ein DIN A4 Blatt gedruckt und dann so gefaltet, dass ein DIN A5-Heft entsteht) zu drucken. Dies kann man ganz einfach über den KDE-Druckdialog erreichen (Leider steht dieser im Acrobat Reader nicht zur Verfügung. PDF-Dokumente sollte man daher mit KGhostview öffnen.):
- KDE-Druckdialog öffnen und auf "Eigenschaften" ("Properties") klicken.
- Den Karteireiter "Filter" ("filter") auswählen.
- Auf das trichterförmige Icon "Filter hinzufügen" ("add filter") klicken.
- Hier den Filter "Pamphlet Printing (use with small side duplex printing)" auswählen und auf "OK" klicken.
- Zurück auf den Karteireiter "Allgemein" ("General") klicken und dort unter "Beidseitiger Druck" (Duplex Printing") "Schmalseitig" ("short side") auswählen.
- Den Dialog mit "OK" abschließen und das Dokument drucken.
Alternativ dazu kann man das ganze auch über die Kommandozeile erreichen. Dazu ist es notwendig, dass das Paket "psutils" installiert ist (einfach mit YAST2 überprüfen und gegebenenfalls nachinstallieren). Dann kann man PS-Dokumente (PDF-Dokumente muß man vorher in PS-Dokumente umwandeln wie hier beschrieben.) mit folgendem Befehl umwandeln:
> psbook datei.ps | psnup -2 > datei_A5.ps
Der Befehl psbook ändert dabei die Reihenfolge der Seiten des PS-Dokuments in geeigneter Weise und der anschließende Befehl psnup generiert ein PS-Dokument so, dass 2 Seiten des ursprünglichen Dokuments jetzt auf ein Blatt verkleinert werden. Jetzt kann man das so generierte Dokument ausdrucken:
> lpr -o sides=two-sided-short-edge datei_A5.ps
Präsentationen drucken
Viele Präsentationen sind als PDFs im Querformat erstellt. Um diese platzsparend auszudrucken kann man folgende Befehlszeile versuchen:
> lpr -o number-up=4 -o number-up-layout=lrtb praesentation.pdf
Leider funktioniert das nicht immer richtig, da viele PDF-Präsentationen seltsame Seitenformate verwenden und daher zunächst noch skaliert werden müssen. Eine Lösung ist diese Präsentationen mit dem Acrobat Reader auszudrucken. Dort muß man dann unter "Page Scaling: Fit to Printer Margins" auswählen und als "Printer Command"
/usr/bin/lpr -P lp1 -o number-up=4 -o number-up-layout=lrtb
eintragen.
Tipps zu a2ps
Das Programm a2ps erlaubt es ASCII-Text "schön" formatiert
auszudrucken. Dies ist besonders zum Ausdrucken von Quellcode nützlich,
da a2ps z.B. Kommentare und Schlüsselwörter im Code automatisch erkennt
und diese durch Farbe, Schriftgrad oder Schriftart hervorhebt und damit den
Code erheblich lesbarer gestaltet. Der Vorteil von a2ps gegenüber
dem direkten Ausdruck aus einem Editor mit eigener Synaxerkennung heraus
(z.B. Kile für Latex oder Kate für C++) ist, dass es insbesondere für
den Graustufendruck angepasste und optimierte Designs anbietet und
natürlich das a2ps aus der Kommandozeile
heraus zu starten immer schneller ist als mühsam einen Editor zu laden,
sich durch die notwendigen Druckeinstellungen zu quälen um schließlich drucken
zu können. Ein großer Nachteil von a2ps ist jedoch, dass es
(noch?) keine UTF8-Kodierung unterstützt (mehr dazu siehe weiter unten).
Das a2ps-Kommando erlaubt eine Unmenge von Optionen. Einige
wichtige zeigt das folgende Beispiel, welches ich als
Alias in meiner .alias-Datei definiert habe:
alias druck="a2ps --line-numbers=1 -l 100 -T 3 -s 2 -M A4 --delegate=0 -P display"
Die Layoutoptionen dabei sind:
- Zeilennummern einschalten: --line-numbers=1
- Zeilenlänge von 100 Buchstaben: -l 100 oder --chars-per-line=100
- Tabulatorabstand von 3 Zeichen: -T 3 oder --tabsize=3
- Zweiseitiger Ausdruck (wenn der Drucker es erlaubt): -s 2 oder --sides=duplex
- Papierformat DIN A4: -M A4 oder --medium=A4
Die Option --delegate=0 verhindert, dass a2ps automatisch
mithilfe externer Programme die übergebenen Dateien in PS-Dateien umzuwandeln
versucht (z.B. möchte es in der Standardeinstellung HTML-Dateien mithilfe von
Netscape in PS-Dateien umzuwandeln). Dies ist meistens nicht gewollt; wenn man
a2ps schon verwendet, dann will man eigentlich immer den Quelltext drucken
und nicht das gerenderte Ergebnis.
Die Option -P display schließlich sorgt dafür, dass a2ps das Ergebnis
nicht gleich an den Standarddrucker schickt, sondern zunächst als Vorschau in
gv öffnet. Gefällt das Ergebnis kann man es von da aus bequem ausdrucken.
Druckvorschau mit kghostview statt gv:
In Suse 9.3 wird gv nicht mehr standardmäßig installiert und die
Druckvorschau funktioniert mit a2ps dementsprechend zunächst nicht.
Will oder kann man das alte gv deswegen nicht installieren, so kann man
zur Druckvorschau auch kghostview verwenden, wenn man a2ps
entsprechend konfiguriert. Dazu sind folgende Schritte nötig:
- Falls nicht vorhanden im Homeverzeichnis ein Verzeichnis .a2ps
anlegen und in diesem eine Datei namens a2psrc erzeugen:
> mkdir .a2ps > cd a2ps > pico a2psrc
- In diese Datei folgende Zeile eintragen:
Variable: ghostview kghostview
Das wars. Beim nächsten Start von a2ps wird als Vorschau immer
kghostview statt gv verwendet. Will man noch andere
Einstellungen ändern, so empfiehlt es sich als Vorlage die systemweite
Konfigurationsdatei von a2ps anzuschauen, welche unter Suse Linux 9.3
unter /etc/a2ps.cfg zu finden ist.
Weitere Optionen:
- Ein bestimmtes Syntaxhighlighting erzwingen:
Manchmal erkennt a2ps die verwendete Sytax nicht richtig.
Dies kann man überprüfen durch:
> a2ps --guess dateiname
Wird dabei eine offensichtlich falsche Syntax erkannt, kann man dies mit der -E-Option erzwingen. Verwendet man mein obiges Alias, dann kann man z.B. die Verwendung von Fortran-Syntaxhighlighting für die Datei "dateiname" erzwingen durch:> druck -Efortran dateiname
Weitere Möglichkeiten sind z.B. -Ec (C), -Ecpp (C++), -Etex (Latex). Sämtliche möglichen Programmiersprachen bzw. Syntax-Stylesheets findet man z.B. hier. - Farbe erzwingen:
Will man ein farbiges statt graues Syntaxhighlighting so kann man dies erreichen durch> druck --prologue=color dateiname
Damit wird eine farbige PS-Datei generiert und als Vorschau angezeigt. - Aktuelles Verzeichnis im Kopf der Ausdrucks:
In den Standardeinstellungen erscheint der Pfad der ausgedruckten Datei leider nicht. Aber durch folgende Option kann man das gerade aktive Verzeichnis und damit auch meist den richtigen Pfad zur Datei im Header des Ausdrucks angeben:> druck --header=$PWD
Jedoch erlebt man eine Enttäuschung, wenn man diese Option zusätzlich zu den anderen in einem Alias definiert. Die .alias-datei wird immer beim Start eines neuen Terminals ausgeführt und somit wird man immer das beim Start des Terminals aktive Verzeichnis (also meist das eigene Homeverzeichnis) im Kopf der ausgedruckten Datei finden. Um das gewünschte Ergebnis zu erzielen, muß man stattdessen eine Funktion (s. auch Tipps zur Shell) in der .bashrc-Datei wie folgt definieren:druckiso() { druck --header=$PWD $1; }
Mithilfe von> druckiso dateiname
ist es dann einfach alle Dateien (zumindest die mit ISO-Encoding) schön formatiert auszudrucken. - UTF8-kodierte Dateien ausdrucken:
UTF8 wird von a2ps leider noch immer nicht unterstützt. Das Einzige was möglich ist, ist eine UTF8-Datei automatisch in ein Encoding umzuwandeln welches a2ps kennt. Dazu bietet sich z.B. das Tool iconv an (andere Möglichkeiten wären mit dem recode-Befehl oder dem u2ps-Skript). Ich habe mir dazu folgende Funktion in der .bashrc definiert:druckutf() { iconv -f utf8 -t latin1 $1 | druck --header=$PWD --center-title=$1; }
Damit werden alle UTF8-Dateien von iconv zunächst in das Latin1-Encoding konvertiert und die Ausgabe an a2ps (bzw. meinen Alias druck) weitergegeben. Die Option --center-title=$1 ist nötig, da a2ps ansonsten in den Kopf des Ausdrucks nicht den Dateinamen übernimmt.Stattdessen steht dort stdin, da die Ausgabe von iconv direkt per Pipe | an und damit über stdin an a2ps geht.
Passwortgeschütztes PDF über die Kommandozeile drucken
Der offensichtliche Weg über acroread -toPostScript | lpr funktioniert nicht, da es beim Aufruf des Acrobat Readers über die Kommandozeile keine Möglichkeit gibt ein Passwort zu übergeben. Daher muss man unter Suse Linux erst mit Yast das Paket xpdf installieren. Dieses enthält das Tool pdftops mit dem man dann das PDF ausdrucken kann
> pdftops -upw [Passwort] Dateiname.pdf - | lpr
Dabei steht -upw für "user password" und [Passwort] sollte durch das entsprechende Passwort ersetzt werden. Die Angabe von - als Ausgabedateinamen bewirkt die Ausgabe in die Standardausgabe stdout, welche dann mit dem Pipe-Kommando | in die Standardeingabe des nächsten Befehls (hier lpr) weitergeleitet wird (siehe dazu auch Kapitel 9.3 von Monash Image Library for Linux). Statt pdftops kann man auch pdf2ps versuchen, aber letzteres erzeugt viel größere und qualitativ schlechtere PS-Dateien.
Man-Pages ausdrucken
Angenommen wir wollen die man-page von rsync ausdrucken, Dann gibt es drei Möglichkeiten:- Umwandlung der man-page in ein PDF:
> man -t rsync | ps2pdf - > rsync.pdf
Danach kann die Datei über jeden PDF-Anzeiger ausgedruckt werden. - Umwandlung der man-page in HTML: Dazu unter KDE den Konqueror starten und in die Adresszeile man:rsync eingeben. Dann kann man wie üblich die HTML-Seite mit dem Konqueror ausdrucken.
- Umwandlung der man-page in eine reine Textdatei:
> man rsync | col -b > rsync.txt
Danach kann die Datei über jeden Texteditor ausgedruckt werden.