SDB:Drucken via SMB (Samba) Share bzw. Windows Freigabe

aus openSUSE, der freien Wissensdatenbank


Version: 9.0

Inhaltsverzeichnis

Anliegen

Sie möchten auf einem Drucker ausdrucken, der an einem SMB-Rechner angeschlossen ist bzw. der via Netzwerk und SMB-Rechner ansprechbar ist.

Hintergundinformation

Ein SMB-Rechner ist ein Rechner, der via SMB-Protokoll angesprochen werden kann. Normalerweise ist das ein Windows-Rechner. Es kann aber auch ein Linux-Recher sein, auf dem der Dienst "Samba" läuft. Damit der Drucker via SMB-Protokoll angesprochen werden kann, muss auf dem SMB-Rechner ein "Share" für den Drucker freigegeben sein, d.h. es muss auf dem SMB-Rechner eine "Freigabe" für den Drucker existieren.

Das Drucker-Share ist durch "Namen" eindeutig im Netzwerk idetifiziert:

  • Rechnername des SMB-Rechners (ist immer notwendig).
  • Name des Shares (ist immer notwendig).
  • Name der "Workgroup" bzw. "Arbeitsgruppe" (ist nicht immer notwendig).

Um Zugriff auf das Drucker-Share zu bekommen kann zusätzlich noch ein Benutzername und ein Passwort notwendig sein.

Diese Namen, die das SMB-Protokoll benötigt, werden vom NetBIOS-Namensdienst verwaltet. Der NetBIOS-Namensdienst ist strikt zu trennen von dem üblichen DNS-Namensdienst in TCP/IP-Netzwerken. Auch wenn das SMB-Protokoll auf dem TCP/IP-Protokoll aufsetzt, verwendet das SMB-Protokoll nicht DNS, sondern NetBIOS als Namensdienst. Insbesondere der NetBIOS-Rechnername kann vom DNS-Rechnernamen verschieden sein. Normalerweise stimmen aber NetBIOS-Rechnername und DNS-Rechnername überein. In jedem Fall ist aber die DNS-Domain im NetBIOS-Namensraum sinnlos, so dass der voll qualifizierte DNS-Rechnername bestehend aus DNS-Rechnername und DNS-Domain im NetBIOS-Namensraum immer sinnlos ist. In praktisch jedem Fall ist auch die IP-Adresse im NetBIOS-Namensraum sinnlos, es sei denn, der NetBIOS-Rechnername ist tatsächlich etwas in der Art "192.168.100.1".

Wenn ein Drucker von einem Linux-Rechner aus via SMB-Protokoll angesprochen wird, dann dient das nur zur reinen Datenübertragung. Insbesondere erfolgt auf dem SMB-Rechner keine Filterung (Umwandlung) der zu druckenden Daten aus den Anwendungsprogrammen (z.B. PostScript) in druckerspezifische Daten. Daher muss die Filterung auf dem Linux-Rechner erfolgen und dazu muss auf dem Linux-Rechner ein komplettes Drucksystem laufen. Auf dem Linux-Rechner wird eine Warteschlange mit Filterung eingerichtet, die nach der Filterung die druckerspezifischen Daten an das SMB-Share sendet. Der SMB-Rechner empfängt die druckerspezifischen Daten und leitet sie an den zum Share gehörenden Drucker weiter.

Vorgehen

Benötigte Pakete:

  • Um Daten (hier Druckerdaten) an ein SMB-Share zu senden wird nur das Paket "samba-client" benötigt.
  • Zusätzlich ist ein komplettes Drucksystem (CUPS oder LPRng/lpdfilter) notwendig.

Ermitteln der NetBIOS Namen:

Der "nmbstatus" Befehl listet die im Netzwerk verfügbaren Workgroups und deren zugehörige NetBIOS-Rechnernamen auf - z.B.:

user@host> nmbstatus
Found 123 hosts. Collecting additional information. Please wait.
...
WORKGROUP    TUX-NET
MEMBERS      GEEKO     TUX
...

Ermitteln der verfügbaren Shares:

Der "smbclient -L NetBIOS-Rechnername -N" Befehl listet die frei verfügbaren Shares auf dem SMB-Rechner mit dem angegebenen NetBIOS-Rechnernamen - z.B.:

 user@host> smbclient -L GEEKO -N
 ...
 Sharename      Type      Comment
 ---------      ----      -------
 LPT1           Printer
 ...
 

Bei Bedarf kann "-U Benutzername%Passwort" hinzugefügt werden, damit auch solche Shares angezeigt werden, die beim Zugriff einen Benutzernamen und ein Passwort benötigen:

smbclient -L GEEKO -U USER%PASSWORD -N

Testen, ob der Zugriff auf den Drucker via SMB-Share möglich ist:

Der folgende Befehl schickt ein einzelnes Carriage-Return-Zeichen "\r" via SMB-Share an den Drucker. Dabei wird nichts gedruckt, aber evtl. wird der Drucker ein leeres Blatt auswerfen.

echo -en "\r" | smbclient "//NetBIOS-Rechnername/Share" -c "print -" -N

Dabei ist der NetBIOS-Rechnername und das Share passend einzusetzen. Je nach Bedarf kann eine Workgroup und/oder ein Benutzername und ein Passwort dem smbclient-Befehl hinzugefügt werden:

smbclient "//NetBIOS-Rechnername/Share" "Passwort" -c "print -" -N -U "Benutzername" -W "Workgroup"

Kann der Drucker ASCII-Text direkt (es ist keine Filterung zwischengeschaltet) ausdrucken, dann kann der echo-Befehl durch folgenden ersetzt werden

echo -en "\rHello\r\f"

um das Wort "Hello" auszudrucken.

Insgesamt kann das dann so aussehen:

echo -en "\rHello\r\f" | smbclient "//NetBIOS-Rechnername/Share" "Passwort" -c "print -" -N -U "Benutzername" -W "Workgroup"

wobei NetBIOS-Rechnername und Share immer und Passwort, Benutzername und Workgroup je nach Bedarf passend einzusetzen sind.

Die korrekte DeviceURI für CUPS:

Bei CUPS wird durch die DeviceURI in /etc/cups/printers.conf festgelegt, wie die Daten an den Drucker (bzw. hier an das SMB-Share) zu übertragen sind. Die DeviceURI muss so sein, wie es in "man smbspool" steht:

 · smb://server/printer
 · smb://workgroup/server/printer
 · smb://username:password@server/printer
 · smb://username:password@workgroup/server/printer

Hier ist mit "server" der NetBIOS-Rechnername gemeint und mit "printer" das Share. Die Werte für "server", "printer" und ggf. für "username", "password" und "workgroup" müssen exakt denen entsprechen, die bei obigem Befehl für NetBIOS-Rechnername und Share und ggf. für Passwort, Benutzername und Workgroup verwendet worden sind.

Sonderfall Windows XP/2000:

Falls Sie einen Drucker an einem Windows XP/2000 Rechner haben, welcher ohne Benutzer oder Passwortangabe freigegeben ist, beachten Sie bitte bei Problemen hierbei den Artikel "CUPS - Kein Ausdruck am XP Client":

SDB:CUPS - Kein Ausdruck am XP Client

Konfiguration mit YaST bei SUSE LINUX 9.0:

Beim Einrichten mit YaST gibt es Probleme, insbesondere wenn eine Workgroup eingetragen wird.

Am sichersten funktioniert es, wenn man die Werte für

  • Server bzw. NetBIOS-Rechnername
  • Printer bzw. Share

und ggf. für

  • Workgroup
  • Benutzername
  • Passwort

genau so in die YaST-Maske einträgt, wie sie bei obigem smbclient Befehl verwendet wurden, wobei vorausgesetzt wird, dass der smbclient Befehl fehlerfrei funktioniert hat.

Man sollte dann aber nicht den SMB-Zugang testen, sondern weitermachen und erst am Ende mit dem Ausdruck der YaST-Testseite testen, ob alle Teile (d.h. sowohl der SMB-Zugang als auch die Filterung) korrekt funktionieren.

Erklärung der derzeitigen Probleme in YaST:

  1. Vermischung von NetBIOS Namen und DNS Namen bzw. IP Adressen:

Bei obigem Eintrag setzt YaST als "Sever" nicht den NetBIOS-Rechnernamen, sondern fälschlicherweise den DNS-Rechnernamen plus die DNS-Domain ein, nämlich genau dann, wenn die automatische Erkennung verwendet wird. Der NetBIOS-Rechnername stimmt zumeist mit dem DNS-Rechnernamen überein, aber wie oben beschrieben ist die DNS-Domain im SMB-Fall sinnlos. Auch die IP-Adresse ist im SMB-Fall normalerweise sinnlos.

  1. Ein fehlerhaftes Test-Script um den SMB-Zugang zu testen falls eine Workgroup verwendet wird:

Es kommt in dem Fall etwa folgende Meldung im YaST

Ein Problem ist aufgetreten.
Ihr Netzwerkzugang ist nicht richtig konfiguriert ...
... bitte Namen des Druckers überprüfen ...
auch wenn alle Eintragungen korrekt sind, was natürlich nur Verwirrung stiftet.

Das Test-Script /usr/lib/YaST2/bin/test_remote_smb sollte auf die Schnelle korrigiert werden können, indem die Zeilen

[ -z "$WORKGROUP" ] || HOST="$WORKGROUP/$HOST"
echo -en "\r" | smbclient "//$HOST/$QUEUE" "$PASSWORD" ...

durch folgende Zeilen ersetzt werden:

echo -e "\nTesting $QUEUE on $WORKGROUP $HOST:"
echo -en "\r" | smbclient "//$HOST/$QUEUE" "$PASSWORD" -c "print -" -N -U "$USER" -W "$WORKGROUP"