Hallo zusammen, ich hätte da eine Verständnisfrage zu Samba: Es geht um folgende Freigabe: comment = PDF creator path = /var/pdf-spool/pdf-output printable = Yes print command = /usr/local/bin/printpdf %s Was macht denn Samba mit dieser Freigabe? Nach meinem Verständnis sollte ein PS-File (oder was auch immer der Windows-Druckertreiber anliefert) in folgende Datei schreiben: /var/pdf-spool/pdf-output/%s, wobei %s irgendein von Samba gewähltes Spoolfile ist. Ich beobachte nun zwar, daß in dem pdf-output-Verzeichnis ganz kurz eine Datei namens smbprn... entsteht, aber die ist sofort wieder weg. /usr/local/bin/printpdf hat nur folgenden Inhalt: echo $1 > /tmp/dateiname D.h. also erstens, daß die temporäre Druckdatei nicht von meinem Skript printpdf gelöscht wird. Und zweitens entsteht /tmp/dateiname gar nicht erst, was bedeutet, daß mein Skript überhaupt nicht ausgeführt wird. Vermutlich habe ich einen grundlegenden Fehler in meinen Überlegungen. Welchen? Danke für Erhellung! -- Andre Tann -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, ----- Original Message ----- From: "Andre Tann" Sent: Wednesday, November 04, 2009 3:51 PM
Hallo zusammen,
ich hätte da eine Verständnisfrage zu Samba:
Es geht um folgende Freigabe:
comment = PDF creator path = /var/pdf-spool/pdf-output printable = Yes print command = /usr/local/bin/printpdf %s
Was macht denn Samba mit dieser Freigabe? Nach meinem Verständnis sollte ein PS-File (oder was auch immer der Windows-Druckertreiber anliefert) in folgende Datei schreiben: /var/pdf-spool/pdf-output/%s, wobei %s irgendein von Samba gewähltes Spoolfile ist.
Nein. Es wird eine smbprn....ps-Datei in das bei path angegebene Verzeichnis geschrieben. Ob man den Namen ändern kann und ggf. wie, weiß ich nicht. Bei mir ist z.B. path = /tmp, denn die ps-Datei will man ja nicht wirklich mehr haben. %s gibst Du "nur" als Parameter an das Skript printpdf weiter, da das sonst ja nicht weiß, mit welcher Datei es arbeiten soll.
Ich beobachte nun zwar, daß in dem pdf-output-Verzeichnis ganz kurz eine Datei namens smbprn... entsteht, aber die ist sofort wieder weg.
Dass die gelöscht wird, habe ich bei mir noch nicht erlebt.
/usr/local/bin/printpdf hat nur folgenden Inhalt:
echo $1 > /tmp/dateiname
D.h. also erstens, daß die temporäre Druckdatei nicht von meinem Skript printpdf gelöscht wird. Und zweitens entsteht /tmp/dateiname gar nicht erst, was bedeutet, daß mein Skript überhaupt nicht ausgeführt wird.
Passen die Attribute? Das Skript muss für alle ausführbar sein und in der ersten Zeile eine Anweisung wie #!/bin/bash enhalten. Ich bin zwar selber nie wirklich über den Status als Anfänger bei den Skripten gekommen, aber es gibt im Netz einige Beispiele dazu.
Vermutlich habe ich einen grundlegenden Fehler in meinen Überlegungen. Welchen?
Keine Ahnung. Aber siehe meine Ideen!
Danke für Erhellung!
Ich hoffe es hilft. Gruß, Alex -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi Andre, From: "Andre Tann" <atann@alphasrv.net>
ich hätte da eine Verständnisfrage zu Samba:
Es geht um folgende Freigabe:
comment = PDF creator path = /var/pdf-spool/pdf-output printable = Yes print command = /usr/local/bin/printpdf %s
meines Wissens darfst Du die Variable nicht im Pfad verwenden, sondern solltest sie an Dein Script übergeben. Meine Freigabe sieht so aus: [pdfprinter] comment = PDF-Server printable = yes print command = ( /script/ps2pdf.sh %I %s %U %m) & path = /var/spool/pdfserver
Was macht denn Samba mit dieser Freigabe? Nach meinem Verständnis sollte ein PS-File (oder was auch immer der Windows-Druckertreiber anliefert) in folgende Datei schreiben: /var/pdf-spool/pdf-output/%s, wobei %s irgendein von Samba gewähltes Spoolfile ist.
Ich beobachte nun zwar, daß in dem pdf-output-Verzeichnis ganz kurz eine Datei namens smbprn... entsteht, aber die ist sofort wieder weg.
/usr/local/bin/printpdf hat nur folgenden Inhalt:
echo $1 > /tmp/dateiname D.h. also erstens, daß die temporäre Druckdatei nicht von meinem Skript printpdf gelöscht wird. Und zweitens entsteht /tmp/dateiname gar nicht erst, was bedeutet, daß mein Skript überhaupt nicht ausgeführt wird.
Ich denke, Dein Script wird ausgeführt, aber Du übergibst ja keinen Parameter ($1 = leer), somit führt Dein Script keine Aktion aus. Ich habe das wie folgt gelöst: # Dateiname aus dem Postscriptfile ermitteln datei=`grep --text %%Title $2 | cut -b 10-512 | tr -d '\n' | tr -d '\r' | tr -d '\f'` # Benutzername aus dem Postscriptfile ermitteln benutzer=`grep --text %%For $2 | cut -b 8-512 | tr -d '\n' | tr -d '\r' | tr -d '\f'` # Testen ob der Dateiname gueltig ist touch "/home/$benutzer/pdfout/$datei.test" if cat "/home/$benutzer/pdfout/$datei.test" 1>/dev/null 2>/dev/null then rm "/home/$benutzer/pdfout/$datei.test" else datei=$2 fi # Logging #date > /tmp/smbpdf.$3-$2.log #echo "Benutzer: $3" >> /tmp/smbpdf.$3-$2.log #echo "Maschine: $4, IP $1" >> /tmp/smbpdf.$3-$2.log #echo "SMB File: $2" >> /tmp/smbpdf.$3-$2.log #echo "Dateiname: $datei" >> /tmp/smbpdf.$3-$2.log #echo "Benutzer: $benutzer" >> /tmp/smbpdf.$3-$2.log #echo >> /tmp/smbpdf.$3-$2.log #cp $2 /tmp/smbpdf.$3-$2.ps >> /tmp/smbpdf.$3-$2.log # Postscriptfile in PDF File umwandeln, evtl. mit Logging #ps2pdf $2 "/home/$benutzer/pdfout/$datei.pdf" >> /tmp/smbpdf.$3-$2.log #ps2pdf $2 "/home/$benutzer/pdfout/$datei.pdf" > "/home/$benutzer/pdfout/$datei.log" ps2pdf $2 "/home/$benutzer/pdfout/$datei.pdf" # Berechtigungen setzen chown $benutzer "/home/$benutzer/pdfout/$datei.pdf" chmod 600 "/home/$benutzer/pdfout/$datei.pdf" # SMB Printfile loeschen rm $2 Ich hoffe das hilft Dir etwas weiter. Daniel -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Servus Daniel, Daniel Bauer, Mittwoch 04 November 2009:
comment = PDF creator path = /var/pdf-spool/pdf-output printable = Yes print command = /usr/local/bin/printpdf %s
meines Wissens darfst Du die Variable nicht im Pfad verwenden, sondern solltest sie an Dein Script übergeben. Meine Freigabe sieht so aus: [pdfprinter] comment = PDF-Server printable = yes print command = ( /script/ps2pdf.sh %I %s %U %m) & path = /var/spool/pdfserver
Wie meinst Du denn das? Du hast %s doch auch im print command stehen...? Und im Pfad, also im path, steht %s weder bei Dir noch bei mir.
Ich denke, Dein Script wird ausgeführt, aber Du übergibst ja keinen Parameter ($1 = leer),
Sorry, nochmal für die blöden... Aus man smb.conf: %s, %f - the path to the spool file name Also wird %s zum Spoolfile expandiert. Damit wird doch mein Skript so aufgerufen: /usr/local/bin/printpdf /pfad/zum/spoolfile
Ich habe das wie folgt gelöst:
# Dateiname aus dem Postscriptfile ermitteln
...wo nimmst Du denn das Postscriptfile her? Übergibt samba das auf stdin? -- Andre Tann -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo Andre, ----- Original Message ----- From: "Andre Tann" Sent: Thursday, November 05, 2009 10:17 AM
Daniel Bauer, Mittwoch 04 November 2009:
meines Wissens darfst Du die Variable nicht im Pfad verwenden, sondern solltest sie an Dein Script übergeben. Meine Freigabe sieht so aus: [pdfprinter] [...]
Wie meinst Du denn das? Du hast %s doch auch im print command stehen...? Und im Pfad, also im path, steht %s weder bei Dir noch bei mir.
Meiner Meinung nach hast Du es schon (fast )richtig. Versuche mal zwischen dem Namen Deines Skriptes und dem %s ein Leerzeichen zu machen und die Zeile nach einem weiteren Leerzeichen mit einem & abzuschließen. In Deinem Ausgangspost scheint es kein Leerzeichen zu geben.
[...]
Also wird %s zum Spoolfile expandiert. Damit wird doch mein Skript so aufgerufen:
/usr/local/bin/printpdf /pfad/zum/spoolfile
Theoretisch ja. Siehe oben. Ich habe es damals so gemacht, dass ich mich Stück für Stück rangearbeitet habe. Mein Skript war am Anfang leer. Es hat nichts mit der .ps-Datei gemacht, so dass ich erstmal prüfen konnte, wo die Datei von Samba hingeschrieben wurde. Dann habe ich aus dem (bei mir) Verzeichnis /tmp heraus von Hand mein Skript mit den Parametern aufgerufen, wie es Samba tun sollte und immer wieder das Ergebnis überprüft... Solange bis es exakt das tat, was ich wollte. Hast Du printing = (alles außer cups) gesetzt? Falls Du Samba > Version 3.0.26a haben solltest, kann es ggf. auch daran liegen. testparm hast Du bestimmt schon laufen lassen? Alex -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Servus Alexander, Alexander Winzer, Donnerstag 05 November 2009:
Meiner Meinung nach hast Du es schon (fast )richtig. Versuche mal zwischen dem Namen Deines Skriptes und dem %s ein Leerzeichen zu machen und die Zeile nach einem weiteren Leerzeichen mit einem & abzuschließen. In Deinem Ausgangspost scheint es kein Leerzeichen zu geben.
Doch, da ist eins drin.
Hast Du printing = (alles außer cups) gesetzt?
Ja.
testparm hast Du bestimmt schon laufen lassen?
Ja. Das meckert auch nicht weiter. Ich bin nach wie vor der Meinung, daß mein Skriptfile nicht ausgeführt wird, und daß Samba ein anderes Problem hat: 1. Mein Skriptfile besteht nur noch aus einer Zeile: #!/bin/bash touch /tmp/bingelaufen Aber diese Datei wird nicht angelegt. Also wird das Skript auch nicht ausgeführt. 2. Im Spoolverzeichnis entsteht die Datei, die Samba erzeugt (smbprn... heißt die). Aber sowohl via Samba von Windows aus als auch über die Shell sehe ich, daß die Datei nur ca. 1 Sekunde lebt, und dann wieder gelöscht wird. Keine Ahnung, wer das macht. 3. Im log.smb sehe ich bei jedem Druckjob: sh: lpr: command not found Ja, das sieht wirklich so aus. Es gibt nicht den sonst üblichen Vorspann wie "[2009/11/06 13:12:17, 0]" Natürlich habe ich nach der Fehlermeldung schon gegoogelt, aber es gibt nichts, was genau paßt. Also hab ich den Eindruck, daß mein Samba an sich einen Knall hat. Aber welchen? Gruß! -- Andre Tann -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hi Andre, From: "Andre Tann" <atann@alphasrv.net>
Daniel Bauer, Mittwoch 04 November 2009:
comment = PDF creator path = /var/pdf-spool/pdf-output printable = Yes print command = /usr/local/bin/printpdf %s
meines Wissens darfst Du die Variable nicht im Pfad verwenden, sondern solltest sie an Dein Script übergeben. Meine Freigabe sieht so aus: [pdfprinter] comment = PDF-Server printable = yes print command = ( /script/ps2pdf.sh %I %s %U %m) & path = /var/spool/pdfserver
Wie meinst Du denn das? Du hast %s doch auch im print command stehen...? Und im Pfad, also im path, steht %s weder bei Dir noch bei mir.
Du hast natürlich recht, irgendwie hab ich das zu dieser Stunde wohl nicht mehr überrissen ;) Ich denke Du solltest das printcmd wie bei mir abändern ... print command = ( /usr/local/bin/printpdf %s) &
Ich denke, Dein Script wird ausgeführt, aber Du übergibst ja keinen Parameter ($1 = leer),
Sorry, nochmal für die blöden... Aus man smb.conf:
%s, %f - the path to the spool file name
Also wird %s zum Spoolfile expandiert. Damit wird doch mein Skript so aufgerufen:
/usr/local/bin/printpdf /pfad/zum/spoolfile
Ich habe das wie folgt gelöst:
# Dateiname aus dem Postscriptfile ermitteln
...wo nimmst Du denn das Postscriptfile her? Übergibt samba das auf stdin?
Nein wie Du siehst ist es %s, der als 2. Parameter im Printcommand übergeben wird. Ich kann Dir leider nicht mehr sagen, woher ich mir die Syntax vom Print Command zusammengegurgelt habe. Aber ich hatte am meisten Probleme mit der Übergabe der Infos an mein Script aus Samba. Probier mal obige printcmd Zeile. Gruß Daniel -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Servus Daniel, Daniel Bauer, Freitag 06 November 2009:
Ich denke Du solltest das printcmd wie bei mir abändern ... print command = ( /usr/local/bin/printpdf %s) &
Selbst wenn ich print command = /bin/true setze, dann entsteht die Spooldatei für eine Sekunde, und verschwindet dann wieder. -- Andre Tann -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Moin zusammen, um die Lösung hier für die Akten zu liefern: Andre Tann, Mittwoch 04 November 2009:
Ich beobachte nun zwar, daß in dem pdf-output-Verzeichnis ganz kurz eine Datei namens smbprn... entsteht, aber die ist sofort wieder weg.
Es gab kein Problem mit meinem Skript, und man braucht um den print command auch keine Klammern, d.h. also es funktioniert so: print command = /pfad/zum/skript %s Das Problem lag in der printing-Definition. printing = cups funktioniert natürlich nicht. Aber auch zB AIX oder PLP funktionieren bei mir nicht. Stelle ich also printing = AIX ein, dann wird die ps-Datei erstellt und gleich wieder gelöscht. Außerdem wird mein Skript nicht ausgeführt. Keine Ahnung wieso. Stelle ich aber printing = BSD ein, dann funktionierts. Die PS-Datei wird erstellt und bleibt auch da. Das Skript wird ausgeführt, und alles ist nun gut. -- Andre Tann -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
participants (3)
-
Alexander Winzer
-
Andre Tann
-
Daniel Bauer