Gut gedruckt
The Answer Girl
Warum diese Leere?
Nach all diesen Vorarbeiten schlägt endlich die Stunde der Wahrheit: Mit lpr -Premote testdatei schicken wir eine testdatei an den eingerichteten Drucker remote. Wer jetzt mit schnöden Fehlermeldungen abgespeist wird, wird
- ggf. nochmal das Filterskript einzeln testen,
- sich mit
lpq -Premoteüber den Zustand der Druckerwarteschlange informieren, - ggf. den Lineprinter-Dämonen
lpdneu starten: Möglicherweise hat der die/etc/printcapschlichtweg nicht neu eingelesen. Dazu sucht man sich in dem Verzeichnis, in dem die Systeminitialisierungsskripte liegen (/etc/init.d,/etc/rc.d,/etc/rc.d/init.do.ä.), jenes namenslpdaus. Beim altenlpr/lpd-System (re)startet esrootselbst (etwa:/etc/init.d/lpd restart), beilprnglegtrootseine Sonderrechte beiseite und startet das Initialisierungsskript als spezialisierter Userlp(- lp /etc/rc.d/init/lpd restart). Sollte sich der Parameterrestartals falsch erweisen, muss man sich leider das Initialisierungsskript auf distributionsspezifische Eigenheiten hin näher ansehen. - nachprüfen, ob das Spoolverzeichnis existiert. Da wir hier das
smbprint-Skript liegen haben, ist das zwar wahrscheinlich, aber vielleicht stimmt der Name nicht mit dem überein, was in der/etc/printcapsteht. - nach den Rechten am Spoolverzeichnis schauen. Orientieren Sie sich dabei ggf. an Spoolverzeichnissen, die Ihr Distributor Ihnen z.B. bei der Installation eingerichtet hat. Sinnvoll ist in diesem Zusammenhang auch die Verwendung des
Set-Group-ID-Bitsmitchmod g+s spoolverzeichnis, sodass Dateien, die dahinein geschrieben werden (z.B. Lockdateien), automatisch in den Besitz der Gruppe übergehen, der das Spoolverzeichnis gehört (beispielsweiselp).
Sie halten glücklich einen Ausdruck in den Händen? Herzlichen Glückwunsch! Um zu kontrollieren, ob auch wirklich alles geklappt hat, werfen wir einen Blick in die Logdatei /var/log/smb-print.log.
Schmerz lass nach – warum ist nichts? So nah am Ziel, und dann das… Also gut, raffen wir uns nochmal auf…
Da lediglich unser smbprint-Inputfilter in die Logdatei schreibt, können wir unsere Fehlersuche auch auf diesen Schritt begrenzen. Versuchen wir also einmal, lpd "per Hand" zu spielen: Der schnappt sich schließlich auch nur eine Datei aus dem Spoolverzeichnis und jagt sie als User lp durch den Inputfilter.
Wir sind bescheidener und nehmen eine beliebige testdatei, um sie von /var/spool/lpd/ljet4/smbprint behandeln zu lassen. Doch zunächst machen wir uns als root zu lp:
lillegroenn:/# su - lp lp@lillegroenn:/$ cat testdatei | /var/spool/lpd/ljet4/smbprint ./smbprint: /var/log/smb-print.log: Permission denied ./smbprint: /var/log/smb-print.log: Permission denied
Kein Wunder, dass es das Logfile nicht gibt, wenn die zwei Schreibzugriffe (von date und smbclient) verweigert werden. Nur warum? Ein Blick auf das Logverzeichnis /var/log spricht trotz der Kürze Bände (die ls-Option -d bewirkt, dass das Verzeichnis selbst, nicht aber sein Inhalt aufgelistet wird):
lillegroenn:/$ ls -ld /var/log drwxr-xr-x 8 root root 3072 May 9 22:48 /var/log
Lediglich root hat im Verzeichnis Schreibrechte. Verständlich, dass lp darin keine neue Datei anlegen darf. Da jedoch alle Benutzer nach /var/log wechseln dürfen, kann root darin mit touch die Logdatei namens smb-print.log anlegen und lp mit chown schenken. Wenn lp Schreibrechte an diesem seinem File hat, so kann das Skript darin auch die Fehlermeldungen ablegen.
root löst das Problem also folgendermaßen:
lillegroenn:/# touch /var/log/smb-print.log lillegroenn:/# chown lp:lp /var/log/smb-print.log lillegroenn:/# exit trish@lillegroenn:/$ ls -al /var/log/smb-print.log -rw-r--r-- 1 lp lp 0 May 9 22:48 /var/log/smb-print.log
Wunderbar, nun sollte doch alles klappen…
Die Last der Vielfältigkeit
… oder auch nicht: Obwohl fast alle Distributionen auf lpr/lpd bzw. lprng setzen, herrscht leider gerade bei den Print-Spoolsystemen fröhliche Verschiedenheit. Das macht es unmöglich, wirklich alle Eventualitäten in einem Artikel abzudecken. Die hier beschriebenen Fallen sind zwar alle der Realität entnommen, doch es ist sehr wohl möglich, dass ausgerechnet Ihr Problem nicht dabei war. Dann bleibt Ihnen lediglich, selbst auf die Suche zu gehen – vielleicht konnte das Answer-Girl immerhin Gedankenpfade vorbereiten.
Glossar
SMB
Die Abkürzung SMB steht für "Server Message Block", ein proprietäres Protokoll der Firma Microsoft (ursprünglich von Intel und Microsoft entwickelt), das die verteilte Nutzung von Ressourcen – Drucker, Verzeichnisse, Laufwerke – ermöglicht. Auf Linuxrechnern kann man derlei über einen Samba-Server für andere Rechner im "Microsoft Network" frei geben und mit dem smbclient-Programm auf angebotene SMB-Datei- und Druckershares zugreifen.
ODER
Ist von zwei oder mehreren Werten mindestens einer wahr, so ist ihre Verknüpfung durch logisches ODER ebenfalls wahr. Klassisches Beispiel aus der Schulphysik: Schaltet man zwei Glühbirnen parallel, so wird es hell, wenn entweder der eine oder der andere Schalter oder beide geschlossen sind. Bei der Reihenschaltung hingegen bekommt man ausschließlich Licht, wenn beide Schalter geschlossen sind – eine logische UND-Verknüpfung.
lp1
Während die erste parallele Schnittstelle bei stabilen Linuxversionen kleiner 2.2 analog zu LPT1 unter DOS in der Regel über
/dev/lp1angesprochen wird, beginnt bei aktuellen Kerneln die Zählung bei/dev/lp0.chown
Wer mit dem "change owner"-Kommando Dateien an andere Benutzer "verschenken" will, muss root sein – schließlich mag sich nicht jede von ihren lieben Mitbenutzern Kuckuckseier in Dateiform unterschieben lassen.
chmod
Kommando zum Ändern von Berechtigungen ("change mode"). Wenn man dem Leserecht die 4, dem Schreibrecht die 2 und dem Ausführbarkeitsrecht die 1 zuordnet sowie weiß, dass ls -l die Rechte in der Reihenfolge Besitzer/in--Gruppe--Andere angibt, kommt man schnell hinter das Geheimnis der Zahl 511: 5=4+1, also Lese- und Ausführbarkeitsrecht für die Besitzerin sowie auschließlich letzteres (1) für die Gruppe und den Rest der Welt.
Kommentarzeile
Ein Kommentar ist normalerweise für menschliche Leser/innen eines Programms gedacht: Für den Rechner, der es ausführt, hat er keine Bedeutung. Da das Format der printcap-Datei jedoch fest vordefiniert ist, ist darin kein Platz für printtool-spezifische Erweiterungen. Daher griffen die Red-Hat-Entwickler zu einem "fiesen Hack" und bringen Zusatz-Informationen des printtools in einer Kommentarzeile unter. Bei Unix-Skriptsprachen (z.B. den meisten Shells) werden die oft durch ein # eingeleitet.
Escapen
(von engl. "to escape" – "fliehen/flüchten"), Slangausdruck, der besagt, dass man die Sonder-Bedeutung eines Zeichens aufhebt. Eine Möglichkeit dazu ist das Voranstellen des Fluchtzeichens \.
grep
Kommandozeilenwerkzeug, das im einfachsten Fall die als erstes Argument angegebene Zeichenkette in einer Datei, dem zweiten Argument, sucht und die entsprechenden Zeilen ausgibt. Statt aus einer Datei kann grep auch von einer Pipe lesen: Das Pipesymbol | bewirkt, dass die Ausgabe des davor stehenden Kommandos zur Eingabe für das hinter dem | stehende grep wird. Im Beispiel sucht grep so beispielsweise nach dem String lpr in der Ausgabe des rpm-Paketmanagerkommandos.
su
Das "substitute user"-Kommando erlaubt es einem Benutzer, eine andere Identität anzunehmen. Steht als letztes Argument zu su ein Kommando, hält die Verwandlung nur für dessen Ausführung an. Außer root, die sich ohne weitere Formalitäten in alle anderen Benutzer "hinein versetzen" darf, müssen sonstige User sich mit dem Passwort des gewünschten Benutzers identifizieren. Zu "Pseudobenutzern" wie lp, bei denen in der /etc/shadow statt des verschlüsselten Passwords ein Sternchen steht, kann sich daher lediglich root machen.
Lockdateien
(von engl. "to lock" – (ab)schließen) Eine Datei, die signalisiert, dass hier schon "gearbeitet" wird und bitte nicht gestört werden soll. Beim Drucken verhindert sie, dass ein Drucker zeitgleich mit mehreren Dateien bombardiert wird.
touch
Fasst man eine Datei mit touch an, ändert sich der Zeitstempel ihrer letzten Änderung. Existiert die Argumentdatei noch nicht, so wird sie als leeres File angelegt.
Infos
[1] http://sunsite.net.edu.cn/tutorials/linux/rhl20.htm#E66E20
[2] ftp://ftp.gwdg.de/pub/linux/misc/cesdis.gsfc.nasa.gov/linux-info/Printing-HOWTO
[3] http://www.astart.com/LPRng/LPRng-HOWTO-21.html Magicfilter
[4] ftp://metalab.unc.edu/pub/Linux/system/printing/magicfilter-1.2.tar. gz smbclient ist Teil des Samba-Projekts



