Es scheint ein ungelöstes Problem zu sein: Thermotransfer- oder Thermodirektdrucker von einem anderen Betriebssystem als Windows aus anzusteuern. In meinem vorliegenden Fall geht es genau darum. Ein für die Bedruckung Paketversandetiketten angeschaffter Thermodirektdrucker Toshiba TEC B-EV4 soll nicht nur aus der Versandsoftware (hier DHL EasyLog) vom Windows-Terminalserver aus, sondern eben auch direkt aus der Warenwirtschaft (auf einem Linux-Server) Etiketten erzeugen können. Es sind also mehrere User gleichzeitig auf unterschiedlichen Druckern zugange.
Treiber gibt es aber ausschließlich nur für Windows…

Ein erster fixer Gedanke, wie in vielen anderen Fällen eine PPD-Datei zu finden und diese dem CUPS unterzuschieben, ist nicht möglich. Derartige Drucker erfordern den exzensiven Einsatz von Steuercodes, was über verschiedene DLLs erledigt wird.

Die nächste Idee gründete darin, von der Warenwirtschaft PDFs erzeugen und in einem Spool-Verzeichnis ablegen zu lassen. Dieses wird von einer Applikation auf einem Windowsrechner periodisch gepollt und ggf. die Dokumente einfach auf dem Drucker ausgegeben. Das habe ich abe wieder verworfen. Der Druck wird auf jeden Fall verzögert durch die Pollings, u.U. ist keine direkte Zurordnung zwischen Auftrag und Ausdruckreihenfolge mehr gegeben, gerade bei höherem Aufkommen.

Die dritte und letzte Idee war, dem Windows-Server einen “Dummy-Drucker” mitzugeben, der die Aufträge per Freigabe entgegennimmt, umrechnet und auf dem lokalen Etikettendrucker einfach ausdruckt. Das dauert zwar auch, aber es ist eine direkte Zuordnung möglich und ein durcheinanderwerfen der Aufträge ist ausgeschlossen.

Hier die Umsetzung:

Grundeinrichtung Etikettendrucker

Zu allererst muss der Etikettendrucker natürlich eingerichtet werden. Wir wollen generell über Netzwerk drucken. Dazu schließt man das Gerät zuerst per USB an einen PC an und startet das Konfigurationstool “B-EV4_SettingTool”. Damit stellt man folgende Dinge ein:

  • Tab “Maintainance Mode”: [Sensor Calib] Sensor “Trans.”; anschließend ein klick auf “Send”
  • Tab “Extra Setting”: [LAN] hier die IP-Adresse einstellen und auf “Set” klicken (die Default-IP ist die 192.168.10.20).

Installation des Etikettendruckers

Nun installiert man den Seagull-Treiber und gibt im Verlauf bei Anschluss einen neuen IP-Port mit der eben eingestellten IP und Port 8000 an. Wir nennen den Drucker hier mal “Etikett1″. Diesem müssen auch die richtigen Eigenschaften eingestellt werden:

ToshibaEV4DHL_1_klToshibaEV4DHL_2_klToshibaEV4DHL_3_kl

Wichtig: Im Eigenschaften-Dialog des Druckers darf unter “Anschlüsse” der Hacken bei “Bidirektionale Unterstützung aktivieren” NICHT gesetzt sein.

Installation des Dummy-Druckers

Das schweizer Taschenmesser im Umgang mit Dokumentumwandlung von Druckdaten allgemein ist das freie Tool Ghostscript. In Verbindung mit GSView und Redmon ermöglicht es das hier benötige Umwandeln. Diese drei Tools downloaden und mit Standardwerten installieren.
Wichtig: es muss alles als Administrator ausgeführt werden. Unter Vista ff. also immer per “Ausführen als…” starten.
Nach Abschluss dieser Prozedur funktioniert das System bereits prinzipiell. Ein kleiner Test schadet aber nie:

cd C:\Programme\Ghostgum\gsview
gsprint.exe -noquery -printer “Etikett1″ -ghostscript “C:\Programme\gs\gs8.71\bin\gswin32c.exe” “C:\Programme\gs\gs8.71\examples\tiger.eps”

Wichtig: Der angegebene Druckername muss hier genau so eingetragen werden, wie er auch in der Systemsteuerung unter Drucker angezeigt wird, die Version im Pfad muss nat. der aktuellen Ghostscript-Installation angepaßt werden.

Installation PostScript-Drucker

Nun wird ein PostScript-Drucker installiert. Vorzugsweise der “originale” von Adobe. Im Laufe der Installation auf folgendes achten:
Typ:” Lokaler Drucker
“Anschluss:” File
“Standarddrucker:” Nein
“Testseite:” Nein
Als Namen verwenden wir hier mal “Etikett1_PS”.

Konfiguration PostScript-Drucker

Über die Druckereigenschaften ändert man im Tab “Anschlüsse” den Port auf den (von Redmon installierten) “RPT1:”. Dieser muss noch konfiguriert werden. In “Redirect this port to the program:” steht der komplette Pfad für gsprint.exe. Auch die Zeile “Arguments for this program are:” muss gefüllt werden. Generell gibt es hier zwei Möglichkeiten:

  • Entweder man legt für jeden umzuleitenden Drucker für GSView eine eigene Konfigurationsdatei an, dann
    -config “C:\Programme\Ghostgum\gsview\namederkonfigdatei.cfg” -

    Die Konfigurationsdatei ist eine reine Textdatei, enthält nur einen Parameter je Zeile und endet mit genau einer Leerzeile.

  • oder man gibt nötigen alle Parameter in den Arguments mit an, dann
    -mono -noquery -printer “Etikett1″ -ghostscript “C:\Programme\gs\gs8.71\bin\gswin32c.exe” -

Ich habe mich – der Übersichtlichkeit halber – für zweiteres entschieden. Somit siehen die RPT1:Properties folgendermaßen aus:

ToshibaEV4PS_1

Wichtig: Egal für was man sich entscheidet, in der Zeile “Arguments for this program are:” muss als Abschluss ein freistehendes “-” stehen, sonst funktioniert das nie.

Alle möglichen Parameter für gsprint.exe finden sich in der Dokumentation.

Registry tunen

Wenn “Run as User” aktivert wird, läuft ein kleines schwarzes Fenster bei Aufruf eines Druckauftrages im Userkontext und es sollte funktionieren. Möchte man das nicht, ist ein kleiner Hinweis zur Registry angebracht. Der Aufruf läuft dann im System-Kontext, der leider keine eigenen Drucker zur Verfügung hat und deswegen auf die Einstellungen des Default-User zurückgreift. Und hier treten die bisher installierten Drucker nicht auf. Deswegen müssen diese manuell umkopiert werden:
aus

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices]

die Einträge für die Zieldrucker (”Etikett1″) nach

[HKEY_USERS\.DEFAULT\Software\Microsoft\Windows NT\CurrentVersion\Devices]

kopieren. Damit ist der Drucker auch für den System-Kontext und damit für die Druckumleitung sichtbar.

Freigabe erstellen

Der Drucker “Etikett1_PS” kann nun wie gewohnt freigegeben und von anderen Systemen eingebunden werden.

Einbindung in Linux

Im verwendeten SuSE-Linux erfolgt die Einrichtung eines neuen Druckers über Yast – Hardware – Drucker. Bei “Bereits installierte Drucker und Warteschlangen” wählt man “Ändern…” und anschließend “Hinzufügen”. Über den Auswahlpunkt “Über SMB-Netzwerkserver drucken” und “Weiter” gelant man zum Konfigurationsdialog. Rechnername, Freigabename sowie Username und Passwort sind hier notwendig. Bei der Abfrage des Treibers wird als Hersteller “Generic” und als Gerät “Generic PostScript Printer” gewählt. Damit ist die Installation fertig und ein Testdruck sollte eine Ausgabe auf dem Labelprinter ergeben.

Ergebnis

Es ist nun ein Bedrucken der Etiketten von Linux (oder jedem anderen Betriebsystem) aus möglich. Die Zeit zwischen Start des Druckaufrufes unter Linux und dem Start des Druckvorganges auf dem Labelprinter ist mit gut 4 Sekunden (in der getesteten und nicht hochperformanten Umgebung) gar nicht mal so schlecht. Mehrere Seiten und Aufträge hintereinander gehen aber flotter zu werke.

Mögliche Erweiterungen

Es muss als Druckprotokoll nicht unbedingt SMB sein, es kann auch IPP eingesetzt werden. Dazu muss der Windowsrechner um diese Sprache erweitert werden. Windows benötigt dazu den Internet Information Server von Microsoft und eine dazugehörige Freigabe. Eine sehr detaillierte Installationsanleitung findet sich bei serverhowto.de. Sollte im IIS keine virtuelles Verzeichnis “printers” auftauchen, so muss dieses manuell angelegt und als Zielpfad “%systemroot%\Web\Printers” (i.d.R. also “C:\Windows\Web\Printers”) angegeben werden. Die Befehle

net stop spooler
net start spooler

vermeiden auch den Neustart des Windowsservers. Über einen Browseraufruf zu “http://windowsserver/printers” sind nun alle freigegebenen Drucker zu sehen.

sehr große Hilfen: wiki.ubuntuusers.de, serverhowto.de, rumborak-Forum, redmon, dragonblogger