[Start] [Computer] [Physik] [Bilder] [Sprüche] [Wiki] [Blog] [Kontakt]
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.):

  1. KDE-Druckdialog öffnen und auf "Eigenschaften" ("Properties") klicken.
  2. Den Karteireiter "Filter" ("filter") auswählen.
  3. Auf das trichterförmige Icon "Filter hinzufügen" ("add filter") klicken.
  4. Hier den Filter "Pamphlet Printing (use with small side duplex printing)" auswählen und auf "OK" klicken.
  5. Zurück auf den Karteireiter "Allgemein" ("General") klicken und dort unter "Beidseitiger Druck" (Duplex Printing") "Schmalseitig" ("short side") auswählen.
  6. 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:

  1. Falls nicht vorhanden im Homeverzeichnis ein Verzeichnis .a2ps anlegen und in diesem eine Datei namens a2psrc erzeugen:
    > mkdir .a2ps
    > cd a2ps
    > pico a2psrc
    
  2. 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:
  1. Umwandlung der man-page in ein PDF:
    > man -t rsync | ps2pdf - > rsync.pdf
    
    Danach kann die Datei über jeden PDF-Anzeiger ausgedruckt werden.
  2. 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.
  3. Umwandlung der man-page in eine reine Textdatei:
    > man rsync | col -b > rsync.txt
    
    Danach kann die Datei über jeden Texteditor ausgedruckt werden.