Samba Server - Treiber fuer Windows Clienten bereitstellen

C

cpg-nighty

Grünschnabel
Hallo

ich versuche seit zwei Tagen einen Samba Server so einzurichten, dass Windows Clienten die dazugehoerigen Treiber automatisch runterladen.
Sowas soll mit Hilfe der print$ Freigabe ja auch moeglich sein.

Meine bisherige Vorgehensweise:

- Samba installiert
- Samba so konfiguriert, dass root printer admin ist
- Schreib- / Leserechte in den Ordnern
/etc/samba/drivers
/usr/share/cups/drivers
fuer jeden gegeben
- root fuer samba freigegeben (smbpasswd -a root)

(folgendes habe ich nach der Anleitung von http://www.cups.org/doc-1.2/man-cupsaddsmb.html durchgefuehrt)
- die Dateien
ps5ui.dll
pscript.hlp
pscript.ntf
pscript5.dll
aus System32\spool\drivers\w32x86\3 in den Ordner /usr/share/cups/drivers kopiert
- gleiches habe ich auch mit den Dateien auf http://svn.easysw.com/public/windows/trunk/i386/ getan

- mit Hilfe von cupsaddsmb (-a -v -U root -H localhost) die Ordner WIN40 und W32X86 in dem print$ share angelegt

Beim Aufruf vom letzten Befehl kam es zu einem Fehler, den ich allerdings nicht als wichtig eingestuft habe, da die passenden Ordner angelegt wurden:

PHP:
printerbase1:/usr/share/cups/drivers# cupsaddsmb -a -v -U root -H localhost
Password for root required to access localhost via SAMBA:
Running command: smbclient //localhost/print$ -N -A /var/spool/cups/tmp/47d92c9e17f55 -c 'mkdir W32X86;put /var/spool/cups/tmp/47d92c9bd4c5f W32X86/HP_Laserjet_3_2200.ppd;put /usr/share/cups/drivers/ps5ui.dll W32X86/ps5ui.dll;put /usr/share/cups/drivers/pscript.hlp W32X86/pscript.hlp;put /usr/share/cups/drivers/pscript.ntf W32X86/pscript.ntf;put /usr/share/cups/drivers/pscript5.dll W32X86/pscript5.dll'
WARNING: The "printer admin" option is deprecated
Domain=[PRINTERBASE1] OS=[Unix] Server=[Samba 3.0.24]
NT_STATUS_OBJECT_NAME_COLLISION making remote directory \W32X86
putting file /var/spool/cups/tmp/47d92c9bd4c5f as \W32X86/HP_Laserjet_3_2200.ppd (9358.4 kb/s) (average 9358.9 kb/s)
putting file /usr/share/cups/drivers/ps5ui.dll as \W32X86/ps5ui.dll (2911.1 kb/s) (average 3185.5 kb/s)
putting file /usr/share/cups/drivers/pscript.hlp as \W32X86/pscript.hlp (12713.2 kb/s) (average 3574.4 kb/s)
putting file /usr/share/cups/drivers/pscript.ntf as \W32X86/pscript.ntf (18001.5 kb/s) (average 10317.5 kb/s)
putting file /usr/share/cups/drivers/pscript5.dll as \W32X86/pscript5.dll (16796.2 kb/s) (average 11787.5 kb/s)

Running command: smbclient //localhost/print$ -N -A /var/spool/cups/tmp/47d92c9e17f55 -c 'put /usr/share/cups/drivers/cups6.ini W32X86/cups6.ini;put /usr/share/cups/drivers/cupsps6.dll W32X86/cupsps6.dll;put /usr/share/cups/drivers/cupsui6.dll W32X86/cupsui6.dll'
WARNING: The "printer admin" option is deprecated
Domain=[PRINTERBASE1] OS=[Unix] Server=[Samba 3.0.24]
putting file /usr/share/cups/drivers/cups6.ini as \W32X86/cups6.ini (65.4 kb/s) (average 65.4 kb/s)
putting file /usr/share/cups/drivers/cupsps6.dll as \W32X86/cupsps6.dll (6136.4 kb/s) (average 4113.0 kb/s)
putting file /usr/share/cups/drivers/cupsui6.dll as \W32X86/cupsui6.dll (6675.5 kb/s) (average 5138.1 kb/s)

Running command: rpcclient localhost -N -A /var/spool/cups/tmp/47d92c9e17f55 -c 'adddriver "Windows NT x86" "HP_Laserjet_3_2200:pscript5.dll:HP_Laserjet_3_2200.ppd:ps5ui.dll:pscript.hlp:NULL:RAW:pscript5.dll,HP_Laserjet_3_2200.ppd,ps5ui.dll,pscript.hlp,pscript.ntf,cups6.ini,cupsps6.dll,cupsui6.dll"'
WARNING: The "printer admin" option is deprecated
Printer Driver HP_Laserjet_3_2200 successfully installed.

Running command: rpcclient localhost -N -A /var/spool/cups/tmp/47d92c9e17f55 -c 'setdriver HP_Laserjet_3_2200 HP_Laserjet_3_2200'
WARNING: The "printer admin" option is deprecated
SetPrinter call failed!
result was WERR_ACCESS_DENIED

Unable to set Windows printer driver (1)!


Folgendes Vorgehensweise hatte ich auf einer von vielen Howto Seiten gelesen...
Danach habe ich mich auf dem Server mit dem Samba Protokoll als root eingeloggt und den Ordner "Drucker und Faxgeraete" geoeffnet. Den entsprechenden Drucker mit der rechten Maustaste angeklickt und Eigenschaften gewaehlt.
Dabei erscheint direkt ein Prompt in dem gefragt wird, ob ich die Treiber des Druckers installieren moechte. Hier sollte man "Nein" waehlen.
Im erscheinenden Fenster waehlte ich die Registerkarte "Erweitert" und klickte den Button "Neue Treiber" an. Dort waehlte ich die passenden Treiber aus und bestaetigte das letzte Fenster mit dem Button "Fertig stellen". Hierbei erscheint eine Grafik, die zeigt, dass die Treiber in die print$ Freigabe auf dem Server kopiert werden.
Wenn ich dann alle Einstellungen uebernehmen moechte, sagt er mir, ich solle die Treiber auf meinem clienten installieren. Das funktioniert auch wunderbar. (somit sollte eigentlich alles getan sein)
Schließe ich dann allerdings alle Fenster und wiederhole den Vorgang, so sind die Treiber nicht mehr auf dem Server, obwohl in der print$ Freigabe keine Aenderung zu sehen ist.

Ich hoffe, dass ich mein Problem einigermaßen ordentlich geschildert habe und irgendjemand nicht vor dem etwas laengerem Text zurueckschreckt und mir weiterhilft ;)

EDIT:
habe noch ein bisschen gegoogelt und bin auf folgende Anleitung gestoßten: http://www.netadmintools.com/art258.html

eigentlich habe ich genau das getan... selbst alle gegebenen Screenshots stimmen ueberein
nur dass die Treiber halt nicht "auf dem Server bleiben"... bzw. nicht automatisch an die clienten uebertragen werden, wenn diese den Drucker hinzufuegen

EDIT2:
habe noch ein bisschen mehr ausprobiert und die ganze Geschichte mal mit der Linuxconsolen Variante durchprobiert (Treiber kopieren und mit rpcclient installieren bzw. zuweisen).
Dabei bleibe ich bei dem "setdriver" Befehl haengen:

PHP:
printerbase1:/var/lib/samba# rpcclient -H localhost -U root%XXXXX -c 'setdriver "HP_Laserjet_3_2200" "HP_Laserjet_3_2200"' -N
WARNING: The "printer admin" option is deprecated
SetPrinter call failed!
result was WERR_ACCESS_DENIED

Ich denke, dass bei der obigen Variante das gleiche Problem auftritt.
Meine Frage: Warum? Ich fuehre alles unter Root aus... Es geht doch um irgendwelche Rechte, oder? Wo sollten "root" Rechte fehlen?

Gruss
David
 
Zuletzt bearbeitet:
hab dann doch noch selber ne loesung gefunden ;)

hier mal ne "kurze" anleitung fuer alle interessierten =)

ps: entschuldigt die wiki Formatierung, aber ich hatte schlichtweg keine Lust das abzuändern...

mfg

cpg-nighty

Dieser Artikel beschreibt, wie man einen Printserver aufsetzt, der an Windows XP Clienten automatisch die passenden Druckertreiber überträgt.
Vorwort:
Wichtig ist, dass alle Aktionen von ein und dem selben Windowsclienten durchgeführt werden. Dieser sollte sich stehts mit dem Namen "root" auf dem Sambaserver eingeloggt haben (egal ob per SSH oder Samba).

=Debian 4.0 installieren=
Debian auf einem PC installieren (Ich habe die Netinstallation von debian.org benutzt; ~160MB Iso Image)=

=CUPS installieren=
Wird mit folgendem Befehl ausgeführt:
apt-get install cupsys

=Drucker hinzufügen=
Die entsprechenden Drucker bei CUPS hinzufügen (für HP-Drucker bietet sich hier das script hplip an); Sicherheitshalber sollte man einmal im CUPS Webinterface (http://ipvomserver:631) nachschauen, ob der oder die Drucker wirklich hinzugefügt wurden.

=Samba installieren=
Wird mit folgendem Befehl ausgeführt:
apt-get install samba

=Samba konfigurieren=

=smb.conf editieren=
Die smb.conf (liegt unter /etc/samba/) mit einem Editor öffnen und folgendes ändern/hinzufügen:

Abschnitt ###### Printing ######
load printers = yes
printing = cups
printcap name = cups
printer admin = root
cups options = raw

Abschnitt ###### Authentication ######
; invalid users = root
-> auskommentieren

Abschnitt ###### Share Definitions ######
[printers]
comment = All Printers
browseable = no
path = /var/spool/samba
printable = yes
public = yes
writable = no
guest ok = yes
printer admin = root

[print$]
comment = Printer Drivers
path = /etc/samba/drivers
browseable = yes
read only = yes
guest ok = no
write list = root

=Root als gültigen Sambauser hinzufügen=
Als nächstes fügt man den Benutzer root zu den Sambabenutzern hinzu:
smbpasswd -a root
Folgend legt man ein Passwort für den Sambazugriff des Benutzers root fest.
Damit root auch den Sambadienst nutzen kann, aktiviert man den Usernamen mit:
smbpasswd -e root
Damit alle Einstellungen übernommen werden, ist ein Neustart des Dienstes nötig:
/etc/init.d/samba restart
Testen kann man die Einstellungen beispielsweise mit einem Windowsclienten, der auf den Sambaserver mit den Userdaten von root zugreift.

=Ordnerstruktur/Dateien anlegen=
Nun erstellt man einen Ordner drivers im Unterordner /etc/samba mit:
mkdir /etc/samba/drivers

Als nächstes kopiert man folgende Dateien in den Ordner /usr/share/cups/drivers:
ps5ui.dll
pscript.hlp
pscript.ntf
pscript5.dll
Die Dateien liegen auf jedem Windows XP Computer in: %WINDOWS%\SYSTEM32\SPOOL\DRIVERS\W32X86\3
Wichtig hierbei ist, dass die Dateinamen nur kleine Buchstaben, wie angegeben beinhalten. Man muss die Dateien also gegebenenfalls umbennen.

Gleiches führt man mit den folgenden Dateien aus:
cups6.inf
cups6.ini
cups6.ppd
cupsps6.dll
cupsui6.dll

Diese Dateien bekommt man unter folgender URL: http://svn.easysw.com/public/windows/trunk/i386/

Sobald alle Dateien im Ordner /usr/share/cups/drivers liegen und passend benannt wurden, installiert man den Samba Clienten:
apt-get install smbclient

Als nächstes erstellt man im Ordner /etc/samba/drivers/ den Ordner W32X86 mit:
mkdir /etc/samba/drivers/W32X86

=Ordnerstruktur in print$ anpassen=
Zusätzlich benötigt man noch einen Ordner mit dem Namen "3" im Ordner W32X86:
mkdir /etc/samba/drivers/W32X86/3

=Treiber kopieren=
Nun kopiert man folgende Dateien in den gerade erstellten Ordner:
UNIDRV.DLL
UNIDRVUI.DLL
pscript.hlp

Diese Dateien findet man wieder im Ordner %WINDOWS%\SYSTEM32\SPOOL\DRIVERS\W32X86\3 eines Windows XP Clienten.

Hinzu fügt man die sogenannte .PPD Datei des Druckers. Diese lässt sich normalerweise in dem Windows XP Treiber des Druckers finden.
Somit sollten im Ordner /etc/samba/drivers/W32X86/3 auf dem Linuxserver folgende Dateien liegen:
UNIDRV.DLL
UNIDRVUI.DLL
pscript.hlp
*.ppd

=Treiber initialisieren=
Nun führt man folgendes Kommando in der Linuxshell aus, ersetzt aber die XXXXXX durch den Namen der *.ppd Datei.

rpcclient -H localhost -U root -c 'adddriver "Windows NT x86" "HP_Laserjet_3_2200:UNIDRV.DLL:XXXXX:UNIDRVUI.DLL:pscript.hlp:NULL:RAW:NULL" 2'

Ein Beispielaufruf wäre (hier für einen HP2200dtn):
rpcclient -H localhost -U root -c 'adddriver "Windows NT x86" "HP_Laserjet_3_2200:UNIDRV.DLL:hpb22007.ppd:UNIDRVUI.DLL:pscript.hlp:NULL:RAW:NULL" 2'

=Windows Treiber hochladen=
Nun öffnet man von einem XP Clienten mit der Windowsfreigabe den Ordner "Drucker und Faxgeräte" auf dem Linuxserver.
Als nächstes klickt man auf den entsprechenden Drucker mit der rechten Maustaste und wählt Eigenschaften.
Wichtig ist, dass man im erscheinenden Fenster "Nein" auswählt.
Als nächstes klickt man auf die Schaltfläche "Erweitert" und klickt den Button "Neuer Treiber..." an.
Im Dialog wählt man den passenden Windows XP Treiber entweder von einem separaten Datenträger, oder von den vorgegeben aus.
Beendet man den Dialog mit "Fertig stellen" sieht man eine kleine Grafik, die anzeigt, dass der Treiber auf die "print$" Freigabe auf den Linux Server hochgeladen wird.
Abschließend klickt man den Button "Übernehmen" an und beendet das Dialogfeld.

Nun können alle Clienten, die Zugriff auf die Sambafreigaben haben, die Drucker installieren, ohne manuell einen Treiber auswählen zu müssen.

=Weitere Drucker hinzufügen=
Möchte man nun noch weiter Drucker hinzufügen, muss man zunächst dafür sorgen, dass sie im CUPS Interface aufgenommen werden. Danach wiederholt man den vorherigen Schritt für den entsprechenden Drucker. Demnach sind alle anderen Schritte auf dem Server lediglich einmalig durchzuführen.
 
Probleme

Hilfe, ich brauch Hilfe :-)
Ich mach das auch gerade und ich bekomme diese Fehlermeldung, nachdem ich fen Befehl rpcclient -H localhost -U root -c 'adddriver "Windows NT x86" "HP_Laserjet_3_2200UNIDRV.DLL:XXXXX:UNIDRVUI.DLL: pscript.hlp:NULL:RAW:NULL" 2'

eingebe. Was mach ich Falsch?

-> failed session setup with NT_STATUS_LOGON_FAILURE
Cannot connect to server. Error was NT_STATUS_LOGON_FAILURE
 
tja, das hab ich auch schon gemacht, leider haben mir die vorschläge alle nichts gebracht.
ich hab es jetzt zu einer anderen fehlermeldung gebracht result was WERR_BADFILE allerdings glaub ich das, das noch nicht mal men Hauptproblem ist.

Ich bekomme bei cups wenn ich einen drucker modifizieren will auch die fehlermeldung: client-error-not-possible.
Unter windows kann ich auf meinem server auf die drucker zugreifen, diese aber nicht konfigurieren. wenn ich drucker -> eigenschaften -> neuen Treibermache, und den Treiber auswähle kopiert er diese auf \\server\print$\W32X86 was ja ok ist :) aber dann löscht er die daten sofort wieder und wenn ich dann auf übernehmen gehe Kommt die Meldung: Die Druckereinstellungen konnten nicht gespeichert werden. Zugriff verweigert.

Danach ist mir in den sinn gekommen mal due cupsd.conf zu editieren... allerdings brachte das auch keine Lösung...
Ich hatte für </Location/printers> alles freigegeben, und trotzdem darf niemand den drucker modifizieren.
Das hängt dann sicher wieder mit der Fehlermeldung von oben zusammen mit den client-error...
Ach man was soll ich jetzt nur machen...
Das ist auch noch meine Scheiss Projektarbeit zur Abschlussprüfung wäre echt froh wenn mir einer helfen kann ;)
hab nur noch 3 Tage...
 
also ich habs geschafft immerhin als root zu drucken ;)
somit war ich am ende doch noch siegreich.
Ich habe jetzt aber wieder ein neues Problem, und zwar kann ich als samba user nicht drucken.. Die cups error_log spuckt aus das ich nicht authorisiert bin. wo stellt man den das ein bitte?
In der cupsd.conf schon mal nicht.
Und in der Printers.conf funktioniertes auch nicht...
wenn das mal läuft werd ich luftsprünge machen...
 

Ähnliche Themen

Zugriff Ubuntu 16.04. auf Freigabe 18.04. LTS nicht möglich

Samba-Server mit Univention Corporate Server

ganze Netzwerkumgebung schagartig unsichtbar - 0S 13.1

Samba 4.1.3 auf falschen Netzwerkinterface

Samba 4.1.11 Domänen anbindung funktioniert nicht !!!

Zurück
Oben