Die Druckerinstallation unter Unix läuft über ein typische Unix-Spoolsystem. Die wichtigsten Programme zum Umgang mit dem Druckersystem sind:

lpd

Der Drucker-Daemon selbst. Er kann entweder über die Startdateien des Systems (runlevelabhängig) vom init-Prozess gestartet werden, oder über den inetd-Superserver.

lpr

Übergibt einen Druckauftrag an die Warteschlange. Der Daemon bearbeitet diese Warteschlange.

lpq

Zeigt den Inhalt der Warteschlange(n) an.

lprm

Löscht Aufträge aus der Warteschlange.

lpc

Line-Printer-Controll. Hier können die einzelnen Drucker aktiviert oder deaktiviert werden. Es gibt hier eine Datei, die die einzelnen Drucker beschreibt, sie heißt /etc/printcap und hat ein etwas cryptisches Format. Jeder Eintrag beschreibt einen Drucker, allerdings nicht seine interne Ansteuerung, sondern seine Gerätedatei, sein Spoolverzeichnis und eben Filterprogramme, die den Auftrag in ein Format bringen, das der jeweilige Drucker versteht.

Unix arbeitet intern fast ausschließlich mit Postscript, daher bietet es sich an, als Ausgabe für alle Programme Postscript zu wählen und mit dem Postscript-Interpreter ghostscript in das Format des jeweiligen Druckers zu bringen. Das kann durch den Einsatz etwa von apsfilter geschehen, so dass der User überhaupt keine Arbeit mit der Umrechnung in Postscript hat…

Um im Netz zu drucken, genügt es, einen kurzen Eintrag in die Datei /etc/printcap zu machen, der den remote-printer beschreibt.

  lp|lp1|lp2|lp3:\
        :lp=:\
        :rm=marvin:\
        :rp=lp2:\
        :sd=/var/spool/marvin_drucker:

Die Drucker lp, lp1, lp2 und lp3 haben als Gerätedatei nichts zugewiesen bekommen (:lp=:). Das heißt sie haben keine Schnittstelle wie /dev/lp1, auf die sie drucken sollen.

Die Zeile rm=marvin zeigt, dass der remote host, an dem der Drucker angeschlossen ist, marvin heißt. Das rp=lp2 erklärt, dass es sich um den Drucker lp2 auf marvin handelt.

Die letzte Zeile enthält schließlich wieder ein Spoolverzeichnis, in das die Aufträge zwischengespeichert werden. Das ist natürlich nicht auf marvin, sondern lokal, sonst könnten wir nicht drucken wenn marvin nicht am Netz ist. So wird der Auftrag zwischengespeichert und sobald marvin wieder da ist, übergibt unser lokaler Printer-Daemon die Aufträge an den Printer-Daemon von marvin…

Bleibt wieder die Frage, was am Druckserver eingestellt werden muß, damit ein Client darauf drucken darf. Dabei gibt es mehrere Systeme, entweder wird in der Datei /etc/hosts.lpd eingestellt, welcher Host drucken darf (altes Berkley Drucksystem), oder über die Datei /etc/printer_perms werden die einzelnen User bestimmt, die drucken dürfen. Damit sind so detailierte Einstellungen möglich, wie „der User hans des Rechners marvin darf täglich nur 4 Seiten drucken…“.