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

IP-anhängige Printerwahl

bakaroo

Newbie
Hallo,

Kennt jemand eine Möglichkeit, um im einem Samba/CUPS/ Win2k-client-Netzwerk eine einzige Druckerfreigabe so zu nutzen, das abhängig von der Client-IP (oder Netbios/TCPIP-Name) eine bestimmte von mehreren Druckerwarteschalngen angesprochen wird?
Hintergrund: Jeder Windows-Admin kennt das: der Standard-Drucker ist im User-Teil der Registry verankert. Wandert nun ein User mit seinem roaming profile von einem Büro zum anderen, nimmt er per roaming profile seinen Standard-Drucker mit. Dumm nur, wenn der dann in einem anderen Büro sitzt.
Nun ist es unter Windows jedem User möglich, seinem Standarddrucker auf einen der anderen installieren Drucker zu ändern. Und Word, Excel etc. übernehmen das ohne zu meckern.
Leider sehen das andere Programme nicht so locker, sie beharren darauf, das ein Admin vorbeikommt und dies korrigiert.
Deshalb meine Überlegung: eine Druckerfreigabe für alle. Und hinter dieser Druckerfreigabe steht ein Script, das den Druckjob annimmt und abhängig von der sendenden IP (und damit Client Standort) den entsprechenden Drucker wählt.
Alle hiesige Drucker sind per Printserver angeschlossen, (einige wenige bleiben lokal und stören nicht weiter) sowas sie einfach anzusprechen sind.
Hat jemand schonmal von so einem Script gehört?

Gruß
Bakaroo
 

ThomasF

Hacker
Hi,

ich kann Dir vielleicht nicht direkt helfen, kann Dein Problem aber verstehen.

Ich denke jetzt einfach einmal laut, vielleicht bekommst Du oder jemand anderes einen Denkanstoß in welcher Richtung sich die Lösung bewegt.

Also, Du bietest über einen Samba eine Print-Queue für Deine Windows-Clients an.
Auf dem Client ist dieser Samba-Share sozusagen als Standard-Drucker fest verdrahtet.
Samba übergibt nun den Job an Cups.

Wenn ich mir nun die printers.conf von Cups anschaue sehe ich das die Netzwerkdrucker (oder Printserver wie bei Dir) über eine URI angesprochen werden, also über ihren DNS-Namen.

Hier denke ich wäre ein Ansatzpunkt, denn es gibt eine Methode um die Netzwerklast zu verteilen, namens "Round Robin" z.B für DNS

Dies funktioniert im Prinzip so das der DNS für einen Namen (URI) mehrere IP-Adressen kennt und bei jeder Anfrage eine andere IP zurückgibt (reihum).

Und jetzt kommt "Spekulation" : Wenn man nun dieses "reihum" abhängig von der Anfrage-IP machen könnte und die IPs auch räumlich so verteilt sind das eine Zuordnung von IP zu Ort möglich ist, sollte es möglich sein den Drucker nach der räumlichen Nähe des Clients zu vergeben....

Diese Idee hat jedoch sehr viele "wenn" und "aber" angefangen mit der Frage ob Cups überhaupt die IP des Clients weitergibt oder ob eine Version von DNS Round Robin diesen Zusammenhang herstellen kann.

Wenn Cups nicht mitspielt wäre auch eine Lösung denkbar in der Art, für jeden Drucker einen kleinen PC mit Samba hinzustellen der jeweils den gleichen DNS-Namen hat und dort schon bei einer Anfrage das Round-Robin beginnt ...

Die Idee ist jedenfalls interessant, aber bis zu einer Lösung mussen die User eben weiterhin über Datei -> Drucken gehen um den jeweils nächsten Drucker zu wählen. Vielleicht kennt Windows ja einen Weg das "drucken" Icon so zu ändern das nicht automatisch der Standard Drucker angesprochen wird, sondern die Auswahl der Drucker erscheint.

Jedenfalls viel Erfolg bei der Problemlösung

ThomasF
 
OP
B

bakaroo

Newbie
Ich habe mir ein paar Inspirationen aus dem archiv von lists.samba.org geholt und bin grad dabei, das über einen kleinen Shell-Wrapper um das Print-Command zu machen. Leider habe ich den Server grad nicht vor mir, also muss ich das hier aus dem Kopf wiedergeben:

smb.conf:
Code:
[printers]
Browseable = no
#damit die vorhandenen Drucker nicht angezeigt werden

[laser]
printeable = yes
print command = script.sh laser %s %m %u

[laser2]
printeable = yes
print command = script.sh laser2 %s %m %u

[color]
printeable = yes
print command = script.sh color %s %m %u

Die Druckershares sind extra so in smb.conf angelegt. Auf dem Server gibt es keine Drucker namens LASER, LASER2 oder COLOR. Es sind "virtuelle Drucker" wie etwa sambafax.

dazu gibt es eine script.sh:
Code:
#!/bin/bash
#4 Parameter: $1-$4. bei Aufruf übergeben:
#$1 = welches Druckershare wurde angesprochen
#$2 = spool-datei in /var/temp = Druckdaten
#$3 = Netbiosname des rufenden clients
#$4 = Benutzer

cause $3 in
client01  )
            cause $1 in
             laser ) lpr -d hplj2300 $2 ;;
             laser2 ) lpr -d kyo3800 $2 ;;
             Color ) lpr -d canoni960 $2 ;;
             esac
client02  )
            cause $1 in
             laser ) lpr -d kyo3800 $2 ;;
             laser2 ) lpr -d hplj2300 $2 ;;
             Color ) lpr -d canoni960 $2 ;;
             esac
client03  )
            cause $1 in
             laser ) lpr -d hplj6 $2 ;;
             laser2 ) lpr -d hplj6 $2 ;;
             Color ) lpr -d Minolta3100 $2 ;;
             esac
esac

die ganzen Drucker im lpr-Kommando müssen natürlich existieren. Die Clients sehen nur die drei Drucker LASER, LASER2 und COLOR und bekommen dafür nur generische Postscript-Treiber. Auf dem Samba-Server läuft auch der DruckerServer und der kümmert sich per Ghostscript um die Umsetzung. Neue Drucker werden also nur auf dem Linux-Server installiert, deren Name in die script.sh eingetragen und fertig. Keine Arbeit an den Clients. Ebenso kann mal ein Drucker ausgetauscht werden. :)
Ich muss das ganze jetzt noch ein wenig optimieren, testen, etc. dann sollte das klappen.

Mit welchen Druckertreiber habt ihr gute Erfahrungen gemacht? 'Apple Laserwriter 600 PS' oder 'HP Laserjet PS'
oder nehmt ihr stets die Windows-Druckertreiber des Herstellers und druckt dann RAW aus?

Gruß
bakaroo
 
Oben