Zebra Generic Drucker in einer Remote Desktop Farm nutzen

Die lästigen Remote Drucker

Druckermapping in Remote Desktop Terminalserver-Umgebungen waren schon immer ein Problem. Es hat sich zwar seit Windows Server 2012 mit dem easyPrint Treiber einiges gebessert, aber Sonderdrucker wie z.b. Zebra Etikettendrucker die via “Generic / Text only” Treiber angesprochen werden, machen hier leider noch das ein oder andere Problem.

Den Zebra Etikettendrucker benötigt zum Drucken von ZPL Kommandos den Generic Treiber.
Die ZPL Befehle werden hier mit 1:1 an den Drucker übergeben. Es gibt zwar auch die Möglichkeit einen Image Treiber wie z.b. den von Seagull zu verwenden, aber wenn wir eine Applikation haben die ZPL Codes verwendet, führt leider kein Weg am Generic Treiber vorbei.

Am “Generic / Text Only” gibt es eigentlich nicht viel einzustellen. In den meisten fällen reicht es, den Drucker via USB oder Netzwerk mit dem Client zu Verbinden und los zu Drucken.
Es kann jedoch aber auch sein, dass die Code Page, eine sogenannte Übersetzungstabelle eine Änderung benötigt.
Die Code Page Einstellung im Treiber steht Standardmäßig auf “US (ANSI) (1252)”.
Diese Einstellung macht aber vor allem beim Drucken von Umlauten und Sonderzeichen Probleme.

Die Lösung ist hier natürlich am Client die CodePage Einstellung auf “Multilingual – Latin 1 (850) zu stellen.

Am Client HUI – Per Remote Pfui

Das ganze funktioniert am Client wunderbar, nicht jedoch wenn der Drucker dann auf einem Remote Server gemappt wird.
Hier macht als erstes das easyPrint Probleme, denn dies tauscht den CodePage Treiber einfach durch einen Image-Treiber aus und versucht somit die ZPL Kommandos als Image am Drucker zu Drucken.
Als Ergebnis bekommen wir beim Drucken lauter schöne ZPL Kommandos auf dem Ausdruck zu sehen.

Da der “Generic / Text Only” Treiber den meisten Windows Betriebssystemen beiliegt, kann hier das EasyPrint deaktiviert werden.
Als ersten Schritt erstellen wir eine GPO, die auf den RemoteDesktop Hosts das EasyPrint erst als zweite Wahl auswählt.
Hier wird im ersten Step versucht den lokalen Druckertreiber, wenn er am RD Host vorhanden ist, zu verwenden. Schlägt dies fehl, wird auf den EasyPrint Treiber gewechselt.

Nach erneutem Verbinden auf den RD Host sieht man nun im Drucker, das der “Generic / Text Only” Treiber auch in der Remote Sitzung verwendet wird. So weit so gut.

Beim Ausdruck erkennt man aber auch hier, dass irgendetwas noch nicht passt.
Der Ausdruck ist auf den ersten Blick richtig, alle Barcodes und Angaben sind auf dem Etikett. Jedoch bei genauerer Betrachtung sieht man, dass alle Umlaute und Sonderzeichen wieder falsch übersetzt wurden.

Wenn wir nun am RD Host in die Druckereigenschaften schauen, sehen wir dass die CodePage wieder auf den Defaultwert “US (ANSI) (1252)” steht.
Obwohl also am lokalen Client die richtige Multilingual Code Page eingestellt wurde, wird dies beim Mapping auf dem RD Host nicht übernommen.

Auch ein anpassen der CodePage innerhalb der RD Sitzung ging nicht. Man konnte zwar den Wert ändern, aber sobald man das Menü schloss und erneut öffnete war der Default Wert wieder da.
Eine Lösung des Problems konnte also nur sein, den Default Wert des Treibers auf “Multilingual” zu setzen. Dies ist so einfach aber nicht machbar.
Eine Analyse der Registry als auch der geänderten Dateien beim Umstellen der CodePage ergab, dass der Defaultwert scheinbar direkt im Treiber fest einprogrammiert wurde.

So war es leider auch.
Dennoch gibt es hierzu eine Lösung.

Ein eigener Treiber

Microsoft hat im WDK Driver Sample Paket den SourceCode vom Treiber veröffentlicht.
Das Paket gibt es hier

Windows driver code samples
Nach dem Ändern des Default wertes im Quellcode und neu Kompilieren der DLL Dateien war der Default wert nun auf Multilingual gestellt.
Nach dem Installieren des umprogrammierten Treibers, klappte auch das Etikett Drucken über eine Remote Session ohne Probleme.

Speichere in deinen Favoriten diesen permalink.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

This site uses Akismet to reduce spam. Learn how your comment data is processed.