• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Samba-PDF-Drucker geht nicht...

Chartmän

Member
Hi,

ich hab den PDF-Printer nach Anleitung installiert... Nur leider mag er nicht. Es gibt überhaupt keine Ausgabedatei. Weiß aber als Linux-Neuling nicht wirklich woran es liegt. Ich poste hier halt mal alle Config-Dateien:

pdfprint.pl
Code:
#!/usr/bin/perl

# Samba/Ghostscript/Unix PDF Services -- Scriptsammlung von Mattias Schlenker,
# webweaver.de zur Einrichtung eines PDF-Printservices für Windows-Clients

#==============================================================================#
#                                                                              #
# pdfprint.pl v0.9.1                                                           #
# (c) Mattias Schlenker                                                        #
#                                                                              #
# Konvertiert eine PS-Datei nach PDF und benennt diese Datei nach Benutzer und #
# Uhrzeit.                                                                     #
#                                                                              #
# Bekommt übergeben: Dateiname und Username                                    #
#                                                                              #
#==============================================================================#

#
# Falls Gruppe und Zugriffsrechte gesetzt werden sollen, muß der entsprechende
# System-Befehl unten aktiviert werden.
#
#
# Bugs:
#
# Doppelpunkt im Dateinamen ist nicht zulässig, wenn von MacOS auf den
# Samba-Server zugegriffen wird, da der Doppelpunkt hier Pfadtrenner ist.
#
# Auf manchen Unices enthält der Suchpfad bei von nobody geöffneten Shells
# gs nicht. Hier muß explizit ein Pfad mit angegeben werden. Ein Beispiel
# findet sich unten im Quellcode.
#
# Änderungen: Führende Null bei einstelligen Tagen wird erzwungen


# Bitte Pfadangabe zum Basisverzeichnis des PDF-Services anpassen!

$pdf_base = "/home/public/PDF";

# Temporäres Verzeichnis, in dem die empfangenen Druckdateien
# zwischengespeichert werden.

$tmp_dir = "/tmp";

@months = ("01_Januar", "02_Februar", "03_Maerz", "04_April", "05_Mai",
	   "06_Juni", "07_Juli", "08_August", "09_September", "10_Oktober",
	   "11_November", "12_Dezember");

($s,$m,$h,$day,$month,$year,$wtag,$jtag,$isds) = localtime(time);

$mon = $months[$month];

$year += 1900;

$day = sprintf "%02d", $day;

$m = sprintf "%02d", $m;
$s = sprintf "%02d", $s;
$h = sprintf "%02d", $h;

$filename = join '' , $ARGV[1],"_",$h,".",$m,".",$s,".pdf";

$file = join '/', $pdf_base,$year,$mon,$day,$filename;

system ("ps2pdf -sPAPERSIZE=a4 $tmp_dir/$ARGV[0] $file");
# Anpassung für FreeBSD:
#system ("PATH=$PATH:/usr/local/bin ps2pdf -sPAPERSIZE=a4 $tmp_dir/$ARGV[0] $file");
system ("rm -f $tmp_dir/$ARGV[0]")
 
OP
Chartmän

Chartmän

Member
Hier noch die smb.conf
Code:
# smb.conf is the main Samba configuration file. You find a full commented
# version at /usr/share/doc/packages/samba/examples/smb.conf.SuSE
# Date: 2003-11-04
[global]
	client code page = 850
	character set = ISO8859-15
	workgroup = MSHOME
	os level = 2
	time server = Yes
	unix extensions = Yes
	encrypt passwords = Yes
	map to guest = Bad User
	printing = CUPS
	printcap name = CUPS
	socket options = SO_KEEPALIVE IPTOS_LOWDELAY TCP_NODELAY
	wins support = No
	veto files = /*.eml/*.nws/riched20.dll/*.{*}/
	Server String = Fileserver
[homes]
	comment = Home Directories
	valid users = %S
	browseable = No
	read only = No
	create mask = 0640
	directory mask = 0750
[public]
	comment = Fuer alle
	path = /home/public
	writeable = Yes
	browseable = Yes
	create mask = 0660
	directory mask = 0770
#
# Einträge für PDF-Export-Verzeichnis
#
[PDF-Export]
	path = /home/public/PDF
	browseable = Yes
	writeable = Yes
	guest ok = Yes
	force user = nobody
#
# Einträge für PDF-Printer
#
[PDF-Printer]
	path = /tmp
	printable = Yes
	guest ok = Yes
	print command = /usr/local/bin/pdfprint.pl %s %U
	lpq command = 
	lprm command = 
	use client driver = Yes

Die Verzeichnisangaben passen alle... Vielleicht entdeckt ihr nen Fehler.
 

sir_one

Newbie
warum so kompliziert, probier mal das aus:

liegt in der Standart smb.conf von SuSE 9.1 bei

einfach ein Share so wie hier

[pdf]
comment = PDF creator
path = /var/tmp
printable = Yes
print command = /usr/bin/smbprngenpdf -J '%J' -c %c -s %s -u '%u' -z %z
create mask = 0600

falls du keine SuSE 9.1 nutzt prüfe bitte ob unter /usr/bin auch die Datei smbprngenpdf existiert.

Wird auf diesen Drucker gedruckt, wird ein Verzeichnis PDF in deinem Home Verzeichnis angelegt und darunter dein PDF Dokument

MFG

SR
 
OP
Chartmän

Chartmän

Member
Hm, diese Datei gibt es auch in 9.0... Allerdings hab ich das Problem, dass ich den Drucker hauptsächlich ja von Windows aus nutzen möchte, wo meine Accountinformationen mit denen für Linux nicht übereinstimmen. Das heißt, der Drucker wird meistens ohne Übergabe eines Benutzernamens benutzt.

Funktioniert das dann auch?

Und weiß jemand vielleicht warum der andere Drucker nicht funktioniert? Die Spool-Datei wird noch in den richtigen Ordner geschrieben. Jedoch geschieht dann nichts mehr, außer, dass die Datei wieder gelöscht wird...
 

sir_one

Newbie
probier mal

guest ok = yes

zu deiner Definition des PDF Druckers in der smb.conf hinzuzufügen, dann sollte für den Drucker keine Benutzer und Passwortabfrage notwendig sein

Warum gleichst du deine Benutzerinformationen zwischen Linux und Windows nicht ab?
 

Lumocolor

Member
Hi
ich hab das auch mal ausprobiert, hab unter /etc/samba/smb.conf das hier

sir_one schrieb:
[pdf]
comment = PDF creator
path = /var/tmp
printable = Yes
print command = /usr/bin/smbprngenpdf -J '%J' -c %c -s %s -u '%u' -z %z
create mask = 0600

mit dazu eingetragen. also der PDF-Drucker war dann auch da, blos konnte ich noch nicht darauf drucken, WinXP verlangte einen treiber dafür. Hab irgendeinen genommen, der ging (war wahrscheinlich falsch, oder?). naja im Home-Verzeichnis von mir war dann schließlich ein ordner mit PDF da drin war aber nur eine ".pdf" Datei (die hieß wirklich so!) und beim öffnen war sie nicht lesbar.
Wenn ich Sie mit einem normalen Editor öffne steht folgendes drin :)
Code:
%PDF-1.3
%Ç쏢
3 0 obj
<< /Type /Pages /Kids [
] /Count 0
>>
endobj
1 0 obj
<</Type /Catalog /Pages 3 0 R
>>
endobj
2 0 obj
<</Producer(ESP Ghostscript 7.07)>>endobj
xref
0 4
0000000000 65535 f 
0000000068 00000 n 
0000000116 00000 n 
0000000015 00000 n 
trailer
<< /Size 4 /Root 1 0 R /Info 2 0 R
>>
startxref
166
%%EOF
Kann doch irgendwie nicht sein, dass ein sehr umfangreiches Word-Dokument durch PDF so klein wird, oder?

P.S. ich verwende SuSE Linux 9.0 und die Datei smbprngenpdf existiert bei mir unter dem angegebenen Pfad.

MfG
Flo
 
OP
Chartmän

Chartmän

Member
Das mit guest ok = yes hab ich inzwischen auch schon eingefügt, hat aber nichts geändert... Keine Ausgabe.

Und naja, die Benutzerdaten abzugleichen geht nicht so einfach... Auf Win hat der Benutzername ein Leerzeichen. Man kann zwar den angezeigten Namen ändern, aber den eigentlichen Account anscheinend nicht. Das heißt, ich müsste nen neuen User anlegen.
 

sir_one

Newbie
sorry ich hab vergessen zu sagen,

dass du beim Verbinden des Druckers auf den Client PC einen Postscript Drucker Treiber auswählen musst,

bitte nimm mal den: Apple Color LaserWriter 12/600, das hat den Vorteil., dass du PDF Dokumente in Farbe bekommst.

Postscript hat auch den Vorteil, dass das zu druckende Dokument mehr als doppelt so groß von der Datenmenge ist als über PCL gedruckt.
 

sir_one

Newbie
cybermailer schrieb:
Hallo sir_one,

hast du das selber getestet? Hättest du Lust zu dem Thema ein Mini-HowTo zu schreiben, das wir dann in die Linkliste aufnehmen. Kurze Anleitung mit Beschreibung der Schalter und so, kein Mammutwerk. Ich würde mich sehr über ein bischen Unterstützung hier freuen.

ok ich lasse mir mal was einfallen, ich habe das ganze auch unter lpr gehabt und SuSE 8.2
 
OP
Chartmän

Chartmän

Member
Klar, ich hab schon nen PS-Treiber ausgewählt. Die Spool-Datei wird anscheinend auch richtig geschrieben. Bloß wird sie dann falsch verwertet. Soll heißen, anscheinend nicht korrekt an das Script übergeben.
Muss ich vielleicht noch irgendwelche Rechte vergeben, dass das Script geöffnet werden kann bzw. dann den Auftrag wiederum an Ghostscript weitergeben kann? Ich gehe jetzt mal von meinem ursprünglich verwendeten Script aus.

PS: Das mit den Benutzerdaten hat jetzt geklappt. Man kann auf Linux in der Datei smbusers im Sambaverzeichnis Aliase eingeben für die Linuxnamen... Und so hab ich einfach eingegeben linuxname = "Windowsvorname Windowsnachname" und scho funktioniert die Anmeldung ;-)

Was aber leider am Problem mit dem Drucker immer noch nichts geändert hat. Ich finde aber auch in den Logdateien keinen Fehler.
 
OP
Chartmän

Chartmän

Member
Hier meine derzeit aktuelle smb.conf
Code:
# smb.conf is the main Samba configuration file. You find a full commented
# version at /usr/share/doc/packages/samba/examples/smb.conf.SuSE
# Date: 2003-11-04
[global]
   client code page = 850
   character set = ISO8859-15
   workgroup = MSHOME
   os level = 2
   time server = Yes
   unix extensions = Yes
   encrypt passwords = yes
   map to guest = Bad User
   printing = CUPS
   printcap name = CUPS
   socket options = SO_KEEPALIVE IPTOS_LOWDELAY TCP_NODELAY
   wins support = No
   veto files = /*.eml/*.nws/riched20.dll/*.{*}/
   server string = Fileserver
   username map = /etc/samba/smbusers
[homes]
   comment = Home Directories
   valid users = %S
   browseable = no
   read only = No
   create mask = 0640
   directory mask = 0750
[public]
   comment = Fuer alle
   path = /home/public
   writeable = Yes
   browseable = yes
   create mask = 0660
   directory mask = 0770
[printers]
   comment = All Printers
   path = /var/tmp
   printable = yes
   create mask = 0600
[print$]
   comment = Printer Drivers
   path = /var/lib/samba/drivers
   write list = @ntadmin root
   force group = ntadmin
   create mask = 0664
   directory mask = 0775
   browseable = yes
[pdffiles]
   path = /home/public/PDF
   browseable = yes
   writeable = yes
[pdfprint]
   path = /tmp
   printable = yes
   printing = sysv
   print command = /usr/local/bin/pdfprint.pl %f %U
   use client driver = yes
   browseable = yes
   lpq command =
   lprm command =
 

sir_one

Newbie
Samba PDF Drucker

- Samba installieren ( per Source oder rpm)
- cups installieren (Common UNIX Printing System) mit ghostscript (mit oder ohne X11 Unterstützung)

Etwas vorweg:

Früher wurde in der smb.conf das traditionelle Drucksystem verwendet:

printing = BSD
printcap name = /etc/printcap

Heutzutage wird das moderne leistungsfähigere Drucksystem CUPS eingesetzt und Samba wird mit libcups kompiliert, jedoch ergeben sich dadurch Probleme.

Die smb.conf Out of the Box von SuSE für die Version 9.1 enthält einen gut durchdachten PS zu PDF Konverter, der leider so nicht funktioniert.

Es ist einfach den PDF Drucker durch Änderung der Parameter zu:

printing = BSD
printcap name = /etc/printcap

zum Drucken zu bewegen, jedoch verliert man dabei die Vorzüge von CUPS.

Diese sind unter http://www.danka.de/printpro/faq.html nachzulesen


Es wäre also interessant das Druckssystem CUPS in Samba zu integrieren und einen PDF Drucker zu nutzen.

Hier die smb.conf von SuSE 9.1 Out of the Box


# smb.conf is the main Samba configuration file. You find a full commented
# version at /usr/share/doc/packages/samba/examples/smb.conf.SuSE
# Date: 2004-04-06
[global]
workgroup = TUX-NET
interfaces = 127.0.0.1 eth0
bind interfaces only = true
printing = cups
printcap name = cups
printer admin = @ntadmin, root, administrator
map to guest = Bad User

[homes]
comment = Home Directories
valid users = %S
browseable = No
read only = No
[users]
comment = All users
path = /home
writeable = Yes
inherit permissions = Yes
veto files = /aquota.user/groups/shares/
[groups]
comment = All groups
path = /home/groups
writeable = Yes
inherit permissions = Yes
[pdf]
comment = PDF creator
path = /var/tmp
printable = Yes
print command = /usr/bin/smbprngenpdf -J '%J' -c %c -s %s -u '%u' -z %z
create mask = 0600
[printers]
comment = All Printers
path = /var/tmp
printable = Yes
create mask = 0600
browseable = No
[print$]
comment = Printer Drivers
path = /var/lib/samba/drivers
write list = @ntadmin root
force group = ntadmin
create mask = 0664
directory mask = 0775




In der /var/log/samba/log.smbd befinden sich nach einem versuchten Druckjob folgende Einträge:

[2004/07/13 19:29:16, 0] printing/print_cups.c:cups_job_submit(779)
Unable to print file to pdf - client-error-not-found

Dieses Problem ist Distributions unabhängig und wurde in verschiedenen Foren behandelt, oft ohne Erfolg.

Die Lösung besteht daraus, Samba zu erklären, dass der PDF Drucker nicht über das Drucksystem von CUPS angesteuert wird, CUPS muss für den PDF Drucker als Drucksystem ausgegrenzt werden, da sonst CUPS in unserem Beispiel den Drucker [PDF] als physisch vorhandenen und eingerichteten Drucker im CUPS System sucht, diesen dort jedoch nicht finden kann. Für unseren PDF Drucker muss ein anderes Drucksystem definiert werden.

Durch die Option "printing = cups" wird das manuell definierte "print command =" ignoriert.
Um das zu ändern muss für den PDF Drucker der Parameter "printing = sysv" im Abschnitt für den PDF Drucker deklariert werden.

Der Parameter "printing = " definiert das zu nutzende Drucksystem und ersetzt den bestehenden Eintrag
es muss nicht zwingend " printing = sysv" verwendet werden, " printing = BSD" ist ebenso möglich.

- SYSV = System-V-System Drucksystem
- BSD = BSD Drucksystem ( LPRNG und PLP von Patrick Powell, bauen auf dem BSD Drucksystem auf )

zum Beispiel so:

[pdf]
comment = PDF creator
path = /var/tmp
printing = sysv
printable = Yes
print command = /usr/bin/smbprngenpdf -J '%J' -c %c -s %s -u '%u' -z %z
create mask = 0600



Das wars auch schon.

Nachdem die Dienste smb und nmb neugestartet wurden kann ein Testdruck durchgeführt werden.

Ein Druckjob, der an den PDF Drucker gesandt wird, ist unter dem Home Verzeichnis des Benutzers im Verzeichnis PDF zu finden.

es ist auch möglich, die Dokumente in ein zentrales Verzeichnis zu legen.

Hier die Aussgabe des Befehls /usr/bin/smbprngenpdf -h

-D destination sub directory
-J job name as provided by the %j macro
-b amount of backups kept; default are 10
-c print job page count as provided by the %c macro
-d set a debug level to write messages to the syslog
-k keep the PostScript file
-p absolute path to the destination directory
-h this text
-s spool file name as provided by the %s macro
-u user name as provided by the %u macro
-z spool file size as provided by the %z macro

Durch die zahlreichen Optionen der Konverter Datei sollten keine Wünsche offen bleiben.

Auf dem Windows Client PC sollte dem PDF Drucker ein Postscript Drucker Treiber
zugeordnet werden z.B. Apple Color LaserWriter 12/600
Der Vorteil an diesem Treiber ist, dass die PDF Dokumente in Farbe konvertiert werden.

MFG

SR
 
OP
Chartmän

Chartmän

Member
Hab vor kurzem dem Autor des von mir verwendeten Perl-Scripts ne Mail geschrieben und heut eine Antwort bekommen:

Die Fehler im Zusammenhang mit Linux, Samba und Cups sind ihm wohlbekannt und zur Zeit wird auch schon an einer neuen Lösung gearbeitet. Soll spätestens in 2 Wochen fertig sein.

Ich werd solang mal noch warten...

greetz und danke!
 

germanny

Newbie
Moin,
habe eine PDF-Lösung benutzt, die Samba nur insofern nutzt, als das ein Share freigegeben wird,
auf dem alle Netzwerkuser zugreifen können.
Die erzeugten PDF-Files werden im Format "Username_TT-MM-JJ_hh-mm--ss.pdf" in diesem Share abgelegt.
Für Home-Netzwerke finde ich das einfach super!
Wie der dann von Win 2000/XP angebunden wird, steht unten im Readme.
Ich habe das PDF-Backend etwas modifiziert, damit die Qualität von enthaltenen Grafiken höher ist.
Könnt Ihr mal probieren, hier alle benötigten Files im Download :

:arrow: http://www.germanja.de/files/temp/suse_mod_pdfprint.tar.gz

Der Drucker wird erzeugt mit:
Code:
lpadmin -p pdfdrucker -v pdf:/mein_share_pfad/ -E -P /usr/share/cups/model/distiller6.ppd

Hier nochmal mein in der Downloaddatei enthaltenes Readme, das sollte alles klären :
Ach, und bitte VORHER ein Backup der vorhanden Dateien anlegen..;)
PDF - Printing mit SuSE(Novell) Linux ab. 8.x
Dieses Package enthaelt leicht modifizierte Pdf-Druckdateien.
Die Qualitaet der Ausdrucke ist hier gesteigert worden.
Date: 11.12.2004 Mod.: R.Hinrichsen Tested: Suse 8.2/9.1/9.2 pro

#----------------------------------------------------------------
Die Dateien im einzelnen:
Datei: ps2pdfwr
Ort: /usr/bin/ps2pdfwr
Diese Datei konvertiert die erzeugte Postscriptdatei zu Pdf.
In dieser Datei Gostscript - Opts zugefgt (Qualitaet)

Datei: pdf
Ort: /usr/lib/cups/backend/pdf
Die Datei ist das Backend des Pdf-Druckers.
Kleine Aenderungen (Ausgabedatei -Namensgebung verbessert)

Datei: distiller6.ppd
Ort: /usr/share/cups/model/distiller6.ppd
Das Printer definiton File von Adobe.
Dies ist die neueste Version ! (updated 3 Dec 2002, Ver. 4.3)

#------------------------------------------------
Install:
ps2pdfwr kopieren nach /usr/bin/
chmod 755, o=root g=root

pdf kopieren nach /usr/lib/cups/backend/
chmod 755, o=root g=root

distiller6.ppd kopieren nach /usr/share/cups/model/
chmod 755, o=root g=root

Ein Zielverzeichnis erzeugen, z.b. /usr/local/exchange
Achtung!
Das Zielverzeichnis muss offen sein! (chmod 0777 zielordner)
Tip: Zielordner mit Samba freigeben.

lpadmin-Command zum setzen der Warteschlange:
lpadmin -p pdfdrucker -v pdf:/usr/local/exchange/ -E -P /usr/share/cups/model/distiller6.ppd
Eingabe:
rccups restart


#------------------------------------------------
Unter Windows XP einbinden:
Neuer Drucker > URL waehlen, Eingabe:
http://ip_adresse:631/printers/pdfdrucker

Als Druckertreiber am besten einen dieser hier:
-Apple Color LW 12/660 PS
-HP Color LaserJet 4550 PS
-HP Color LaserJet PS

#-------------------------------------------------
Die Pdf-Dateien werden mit Namensmaske:
username_tt-mm-jj_hh-mm-ss.pdf
abgelegt.

-fertig

Und das Samba - Share:
Code:
[mein_share_pfad]
	writeable = yes
	path = /mein_share_pfad
	force directory mode = 775
	force create mode = 775
	comment = Linux PDFMaker Dokumente
	create mode = 0775
	public = yes
	directory mode = 775
	allow hosts = 127.0.0.1, 192.168.xx.xx, 192.168.xx.xx
Das Share ist so ziemlich offen, aber das kann ja Schrittweise zurückgenommen werden.
Erstmal soll es ja gehen !
 

germanny

Newbie
Idee einer Erweiterung zu meiner Lösung oben:
(Wer sich zutraut, Shell-Scripts zu lesen + zu modifizieren..!)
Wer die Files lieber im jeweiligen $HOME des Users ablegen möchte,
kann versuchen, das Backend "pdf" zu modifizieren:

Die Variable $2 , die darin initialisiert wird, enthält den Usernamen des druckenden Users.
Dieser Mod erfordert, das Linux-Samba-Win User abgeglichen sind und auf dem Linux für jeden User
auch ein $HOME - Verzeichnis existiert(das ja mit dem Usernamen erzeugt wird).
Nun könnte man die Variable $PDFDIR durch die Variable $2 ersetzen, den Pfad den Gegebenheiten anpassen.
Zeile jetzt:
Code:
OUTPUTFILENAME="$PDFDIR/$2_$PRINTTIME.pdf"
Sieht dann ca. so aus:
Code:
OUTPUTFILENAME="/home/$2/$2_$PRINTTIME.pdf"
Diese Änderung sollte erst, nachdem alles wie oben beschrieben funktioniert benutzt werden..
Die Variable $PDFDIR bezieht ihren Wert übrigens aus der Warteschlange (DEVICE_URI) von "pdf".

:!: [EDIT+UPDATE!]
So, hab das mal geprobt, es geht...quick and dirty :)

Es muss dazu in jedem $Home händisch ein Directory erstellt werden, mit dem Namen 'pdf'. chmod 0777 pdf.
(der User 'lp' führt die Scripte aus, deswegen klappt mkdir+chmod auf $HOME im script nicht.?!)
Im Backend jetzt die beiden Zeilen ändern:
Code:
OUTPUTFILENAME="$PDFDIR/unknown.pdf"
in
OUTPUTFILENAME="/home/$2/pdf/$2_unbekannt.pdf"
und
Code:
OUTPUTFILENAME="$PDFDIR/$2_$PRINTTIME.pdf"
in
OUTPUTFILENAME="/home/$2/pdf/$2_$PRINTTIME.pdf"

Dann legt der Drucker alle erzeugten Pdf´s im $HOME/pdf/ ab.
 
Hallo,
ich habe die Sache so gemacht, wie es sir_one in seinem HowTo geschrieben hat. Das erstellen von PDF's funktioniert auch prima. Nun habe ich aber noch eine Frage. Bei mir unter WinXP => Drucker => pdf an SERVER steht: Zugriff verweigert; keine Verbindung möglich, obwohl das Erstellen von PDF's funktioniert. Habe darauf hin guest ok = Yes unter PDF in smb.conf geschrieben. Keine Veränderung. Was könnte das noch sein?

Kasselhöfer
 
Oben