Drucken unter Linux
49.Linuxstammtisch der CLUG, Freitag, 13. November 2000
Matthias.Ehrig@Hrz.tu-chemnitz.de
-
Überblick zum Drucken
-
Einrichten neuer Drucker
-
Einrichten von Druckerqueues
-
Drucken eines Files
-
Queue-Administration
-
Accounting
-
LPRng-New Generation Printing
-
sonstiges
Drucken in UNIX-Systemen ist ein komplexer Vorgang, der sich ggf. aus mehreren
Schritten zusammensetzt:
-
Nutzer schickt einen Druckauftrag ab - der Auftrag wird i.allg. an eine
sogenannte Drucker-Queue geschickt und nicht direkt zu einem physischen
Drucker; in Linux-Systemen sind die vorhandenen Queues in /etc/printcap
beschrieben
-
der Auftrag wird im System in ein sogenanntes Spoolverzeichnis abgelegt
-
ein Druck-Daemon arbeitet alle Druckaufträge sequentiell ab; der Nutzer
kann den Status seines Jobs erfragen solange dieser noch nicht fertig ausgedruckt
ist
-
der Druck-Daemon übergibt zur eigentlichen Ausgabe auf einem Drucker
die Steuerung an ein sogenanntes Interface-Script, das die Druckereigenschaften
kennt und die Daten in entsprechender Form ausgibt.
Evtl. werden die Daten an einen Serverrechner weitergereicht, der diese
Aufgaben zentral erledigen kann
-
nach erfolgtem Ausdruck werden die Aufträge aus der Spool-Queue entfernt
Generell werden historisch in UNIX-Systemen 2 Spooling-Systeme unterschieden:
-
lpr (BSD wie z.B. Linux) RFC1179
-
lp (SVR4) : proprietäre Lösung (HP; SUN)
Zentrale Frage: wann wird welches Dokument auf welchem Drucker gedruckt
?
Unterschiedlicher Ansatz: early (Windows-Treiber) / late Binding (Output-Filter)
Problem early Binding: allgemeingültige Dokumente (Internet)
Wertvolle Anleitung für Linux ist Printing-HOWTO
-
lokale Drucker an seriellem, parallelem oder USB-Port (Server) möglich
-
Parallel-Drucker: /dev/lp oder ähnlich (s. Dokumentatation)
-
serieller Drucker: Schnittstellen-Config. entsprechend Terminals (stty)
-
Einrichten lokaler Drucker: zentrale Rolle unter LINUX spielt Postscript
(Umsetzung auf Drucker mittels PPD - einige
Steueranweisungen und ein Beispiel)
und ghostscript
-
neuer Drucker mit Netzanschluß sollte i.allg. auf BOOTP konfiguriert
sein
d.h. beim Einschalten wird über Netz per Broadcast nach IP-Adresse
(ARP) und BOOTP-Konfigurationen gefragt; Netzanschluß heißt
i.allg. eine Netzkarte mit integriertem Printserver, d.h. Implemantation
verschiedener Protokolle zum Drucken: lpr(TCP), IPX, Netbui, ...
-
Drucker wird dann wie ein Rechnerhost betrachtet
-
Installation per hostname und Remote_queue (raw, lp0, ...)
-
viele Netzdrucker haben lpr-Protokoll implementiert
-
PrintServer/Jetdirect (SNMP, webjetadmin)
-
einige Spooling-Systeme für Linux sind im Printing-HOWTO beschrieben
-
unter UNIX gibt es i.allg. graf. Tools (printtool,
admintool, sam, ...)
-
Linux ist Beispiel für BSD-Spooling mit /etc/printcap
-
in BSD-Systemen erfolgt für jeden Drucker ein Eintrag in die /etc/printcap:
newpr:lp=:rp=raw:rm=newpr.phil.tu-chemnitz.de:\
-
:sd=/var/spool/lpd/newpr:
-
Ein printcap-Eintrag im URZ zum Print-Server sieht wie folgt aus:
-
raffael:\
:lp=:rp=raffael:rm=pspooler.hrz.tu-chemnitz.de:\
:sd=/var/spool/printers/raffael:\
:lf=/var/spool/printers/raffael/log:\
:mx#0:sh:
oder für einen Drucker direkt per lpd-Port 9100:
-
lp_egal_phil:\
:lp=:rp=raw:rm=egal.phil.tu-chemnitz.de:\
:sd=/var/spool/printers/lp_egal_phil:\
:lf=/var/spool/printers/lp_egal_phil/log:\
-
:mx#0:sh:
-
Konfigurationshinweise zu verschiedenen Network-Ports sind im Printing-HOWTO beschrieben
-
spezielle Filter-Programme: z.B. apsfilter
-
bei NT/Win lpd-Protokoll wählen - vgl. Admin-Kurs
NT, Punkt 4.5 (Servereinsatz: Drucken)
ACHTUNG: der lpd-Port bei Druckern wird in gleicher Weise verwendet
wie bei Servern ! (RFC1179)
-
Problem ist Verwaltung der Queues. Sowohl unter Linux (lpc) als auch unter
NT ist die Queue-Steuerung nur mit Admin-Rechten möglich; siehe Kap.
Queue-Administration zu vorhandenen Möglichkeiten.
-
Windows/NT: Auswahl/Einrichten eines Druckers (lpd-Protokoll), Driver muss
zu Drucker passen (Postscript, PCL, Deskjet, ...)
Drucken direkt aus Anwendungen - mitunter auf Standarddrucker
-
UNIX: Kommando lpr (BSD) oder lp (SysV), im URZ print
es gibt im Printing-HOWTO dazu
einige Hinweise zu aktuellen Entwicklungen, da ist noch viel Bewegung drin: pdq,
glp,
-
viele Kommandos in UNIX-Systemen erzeugen Postscript:
WEB, xv, gv, a2ps, convert, ...
-
wichtig ist Kenntnis von PPDs - Postscript Printer
Description: kommt aus Windows-Driver-Umfeld und beschreibt Druckereigenschaften
(Steueranweisungen)
-
einige praktische Hinweise auf Tools zur
Bearbeitung von Postscriptfiles
-
Kommando lpc [status|stop|start|enable|disable]
(Help von LPRng-lpc)
-
printop grafisches Tool zur lokalen
Queue-Administration
-
bscxlpr
(Linux-Tool zur graf. Queue-Steuerung - Motif)
- root-Access
!
-
lpinfo - WEB-Tool
zur Queue-Abfrage und Administration
Beispiel für User-Page und Admin-Page
-
jetadmin zur HP-Drucker Konfiguration
(manuell (telnet))
-
WEB-Jetadmin: von HP bereitgestelltes WEB-Interface
zu jetadmin
-
FORDERUNG: gesicherter Zugang zu Druckern: Paßwortschutz und Host-Access
-
basiert auf der Fähigkeit der Drucker, ihren HARDWARE-Pagecounter
anzuzeigen; dazu gibt es verschiedene Möglichkeiten, die ggf.
in Filterprogrammen oder Admin-Werkzeugen integriert sind:
-
Postscript-Code
-
statusdict begin pagecount == flush end
-
PJL-Steueranweisungen
-
@PJL USTATUS PAGE = ON
-
@PJL USTATUS DEVICE = ON
-
SNMP-Abfragen
-
snmp_dump [-s] <drucker_ip_name>
-
snmpget <drucker_ip_name> public .iso.<var_nr>
-
TCP-Abfragen (Socket-basiert)
-
LPRng bietet Account-Interface mit DB-Zugang
-
sicherer Umgang mit Account-Informationen (kriminelle Energie unterbinden)
-
keinesfalls Daten per NFS exportieren
-
regelmäßige Sicherung der Accountdaten (stündlich temporär)
-
Behandlung undef. Jobabbrüche: "record last dead hjob"
-
Umgang mit "Ausschuß" klären: Fehlverhalten, Zufall, unerwartet
Ereignisse
-
Problem viel Aufwand - wenig Nutzen ?
-
Verzeichnisstruktur (auf spuler: /var/spool/lpadm)
-
/var/spool/lp
-
/var/log
-
/etc/printcap
-
spezielle Tools in URZ (netzbasiert):
-
Analyse des Postscriptfiles
-
pgcnt550 - Zählen der Seiten/Kopien mittels ghostscript
-
seitenzaehler - Abfrage Pagecounter per Socket
-
copies_check - Durchsuchen des PS-Files nach copies-Anw.
-
snmp_pages - HPCLJ8500-Abfrage nach farbig gedruckten Seiten
-
von print-Kommando generierte Anweisungen
-
spezielle Postscriptanweisungen
-
LPRng
stellt Erweiterung des RFC1179 dar:
-
ab Redhat7 Standard-Spooling-System
-
Druck ohne lokales Spooling (lightweight print): lpr -Pqueue@host
-
wesentliche optionale Erweiterungen: lpq -ast5
-
viele Konfigurationsmöglichkeiten für lpd-Server: lpd.conf, lpd.perms
-
dynamisch steuerbare Job-Queues
-
automatisches Halten einzelner Jobs
-
Load Balancing zwischen Queues und Servern
-
bessere Security (Clienten ohne SUID für lpr,lpq,lprm)
(RFC1179 nutzt Port 515 - LPRng Port 2000 für Clienten)
-
checkpc - Kommando zur Konsistenzprüfung der Spool-Queues
(Abgleich mit /etc/printcap)
-
viele Logging und Testmöglichkeiten (DEBUG-Optionen)
-
Control-File
cfAnnnfromhost entsprechend RFC1179 (lpd)
neues Control-File hfAnnn beinhaltet viele Zusatzinformationen
-
das Config-File lpd.conf
legt Default-Werte für das Drucken fest: kann von lp-Kommandos
an Klienten abgefragt werden. An Server können damit allg. Optionen
der printcap festgelegt werden.
-
das Config-File lpd.perms
legt Zugriffsrechte für die verschiedenen Druckdienste
(lpr,lpq,lprm,lpc) fest:
-
ACCEPT SERVICE=C SERVER REMOTEUSER=root
ACCEPT SERVICE=C LPC=lpd,status,printcap
ACCEPT SERVICE=C SERVER USER
ACCEPT SERVICE=C REMOTEHOST=stipe.hrz.tu-chemnitz.de
REJECT SERVICE=C
ACCEPT SERVICE=M REMOTEIP=134.109.72.0/255.255.255.0 SAMEUSER
ACCEPT SERVICE=M REMOTEIP=134.109.132.0/255.255.255.0 SAMEUSER
ACCEPT SERVICE=M REMOTEIP=134.109.200.0/255.255.255.0 SAMEUSER
ACCEPT SERVICE=M SERVER USER=root,meh,bmu
ACCEPT SERVICE=M REMOTEHOST=stipe.hrz.tu-chemnitz.de
REJECT SERVICE=M
Matthias Ehrig
Januar 2000