sivale
Goto Top

Aus entfernter DOS-Anwendung heraus auf dem lokalen Drucker drucken

hallo,

in meiner Firma läuft schon seit 2 Jahrzehnten ein Clipper Programm,
dessen Haupaufgabe es ist, Buchungen für Beförderungsleistungen
zu tätigen und zu verwalten.

Das Programm und die DBF Dateien sind auf einem Server im LAN über
NetWare erreichbar.

Es sollen auch Buchungen von ausserhalb für die Agenturen ermöglicht werden.

Mit Ach und Krach so gelöst:

Ein Linuxserver ins LAN eingehängt,

ncpmount auf das NetWare Verzeichnis in dem das Programm sitzt.

* Nachtrag *
mcpmount ist eine schlechte Lösung. Es kommt zu ernsthaften
Problemen mit dem File Locking. Beim gleichzeitigem Zugriff von
Dos und Linux aus werden Datenbankeinträge teilweise
überschrieben. Ich werde die Lösung aus:
/usr/share/doc/dosemu/NOVELL-HOWTO.txt.gz
ausprobieren und berichten wie es damit funktioniert.
* Nachtrag Ende *

DOSemu Installiert.

Mount als Laufwerk in der DOSemu eingebunden.

Neuer User "agentur" angelegt.

Zugriff auf Rechner vom Internet aus mit SSH. (Putty von Windows aus).

Damit die Agenturen nicht in die Verzeichnisse reinkommen startet der
sshd beim Login direkt DOSemu mit einer batch-datei als Argument
mit der das Clipper Programm direkt gestartet wird und nach dem
Verlassen des Programms die DOSemu geschlossen wird.

Jetzt aber wäre es wünschenswert, wenn die Agenturen auch
ihre Rechnungen selber LOKAL drucken könnten. Wie kann ich
das machen ? Zu bedenken ist, dass gleichzeitig mehrere
Agenturen eingeloggt sein könnten.

Danke im Voraus

[Edit Biber 18.3.2009] .... und Danke im Nachhinein. "Beitrag" zur "Anleitung" umgestuft. [/Edit]

Content-Key: 111412

Url: https://administrator.de/contentid/111412

Printed on: April 28, 2024 at 06:04 o'clock

Member: sivale
sivale Mar 18, 2009 at 09:52:47 (UTC)
Goto Top
Problem gelöst !

Das Schlüsselwort heißt: "pass through printing"
Manche sagen auch "terminal printing"
Manche auch "transparent printing"

--excurs--

Wie funktioniert das ?

Theorie:

Das ist eine Technik die noch aus den Tagen stammt als es keine PCs gab und Mainfraimrechner über echte Terminale gesteuert wurden. Wenn man Text in so einem Terminal eintippt, dann sieht es nur so aus als ob dieser direkt auf dem Bildschirm eingegeben wird. Tatsächlich werden die Zeichen zuerst zum Rechner gesendet. Der Rechner versieht dann den Text zusätzlich mit "escape sequences" (Steuerbefehle für Darstellung von Text und Cursor im Client u. noch viel mehr ) und sendet diese zurück zum Terminal. Im Terminalbildschirm wird dann der Text entsprechend dargestellt. Diese Steuerzeichen können auch dafür verwendet werden, um einen Text der normalerweise auf die Standarteingabe gesendet wird, direkt auf den Drucker auszugeben. So ähnlich funktioniert das auch Heute noch.

Praxis:

Man baut über eine Terminal-Emulation (Win: Putty etc., Linux: xterm etc. ) eine Verbindug zu einem entferntem Rechner per SSH auf. Gibt man auf dem Terminal folgenden Text zusammen mit den "escape sequences" ein, erfolgt die Ausgabe auf dem Drucker:

printf "\033[5i\c"; mein Text der gedruckt wird; printf "\033[4i\c".

--excursende--

Meistens klappt so etwas nicht auf Anhieb. Der Client muss noch konfiguriert werden. So war es zumindest bei mir sowohl unter WindowsXP als auch unter Ubuntu 8.10

Konfiguration.:

Putty:
Unter dem Menüpunkt Terminal den angeschlossenen Drucker auswählen
Passenden Zeichensatz auswählen - bei mir utf8.

xterm:
vim .XResources
i
xterm*printerCommand: lpr -PLaserJet 2100M # eigenen Drucker angeben
xterm*printAttributes: 0
xterm*printerFormFeed: false
xterm*printerAutoClose: true
xrdb -merge .Xresources
ESC
:wq

Nachtrag:
es müssen noch weiter Optionen gefunden werden weil sonst der Drucker evtl. Steuerzeichen mitdruckt.
Die codierung sollte auch festgelegt werden.

Gnome-Terminal:
laut bugs.launchpad.net BUGREPORT 234518 nicht möglich

Console:
Option mit Absicht nicht möglich.


Nach dem Einrichten der Clients hat dann auch der Ausdruck des obigen Einzeillers geklappt.
Bei späterem Druck von Dokumenten aus der Anwendug konnte nur Putty (für Windows) richtig drucken.
xterm muss noch weiter konfiguriert werden. Die Konfiguration wird nachgetragen sobald ich sie gefunden habe.

Die verwendeten Drucker:

HP LaserJet 1200: geht
HP DeskJet 6122: geht
HP LaserJet 2100M : geht.
Epson LQ 580 Nadeldrucker: geht.

Über die direkte Eingabe der "escape sequnces" kann man auch Dateien drucken, ist aber etwas umständlich.. Um es komfortabler zu machen kann man das Programm "vtprint" installieren. Damit kann man eine Datei als Argument angeben und sofort lokal ausdrucken.

Jetzt muss nur noch der Druck aus dem DOS Programm eingestellt werden. Dafür reichte bei mir ein einziger Konfigurationseintrag in /etc/dosemu/dosemu.config
statt:
  1. $_lpt1 = "lpr -l"
eingegeben:
$_lpt1 = "vtprint"

Damit wird die Druckausgabe, die mein DOS Program an LPT1 sendet, einfach auf einen beliebiges Programm oder Script umgebogen. Ziemlich praktisch - so etwas. Damit eröffnen sich unzählige weitere Anwendungsmöglichkeiten.

Und jetzt klappt's auch mit dem lokalen-drucken-vom-remote-host. Natürlich nur mit Textdateien/streams aber das gibt mein DOS-Programm auch aus.

Ich weiss nicht ob das eine gute, geschweige denn eine sichere Lösung ist. Nachmachen auf eigene Gefahr.
Member: Biber
Biber Mar 18, 2009 at 10:05:29 (UTC)
Goto Top
Moin sivale,

danke für diese Lösung!

Ich stufe diesen Beitrag mal um zur "Anleitung".

Sehr gut.

Danke
Biber
Mitglied: 16568
16568 Nov 14, 2009 at 13:17:04 (UTC)
Goto Top
ÖHM, lieber Biber,

kann das sein, daß das Verschieben vielleicht schief gegangen ist? face-smile

Kategorie Job???


Lonesome Walker
(der gerade Beiträge archiviert für ein Weihnachts-Special...)
Member: Biber
Biber Nov 14, 2009 at 22:18:02 (UTC)
Goto Top
Moin Lonesome Walker,

da hast du natürlich Recht.
Das Verschieben des Beitrags ist mir sicherlich versehentlich passiert beim "Umstufen" zur Anleitung.
Allerdings... nächstes Problem - ich habe keine Ahnung mehr, in welchem Bereich der Beitrag ursprünglich gepostet war und ...hmm... ich finde auch gar keine Kategorie, zu der er eindeutig zuzuordnen wäre.

Ich habe ihn jetzt zumindest in einen weniger verkehrten Bereich als "Jobs" verschoben.
Vielleicht meldet sich ja nochmal der Threadowner und gibt den entscheidenden Hinweis.

Grüße
Biber

[Edit 19.11.2009] Nochmal verschoben nach "Unix und Linux"->"Netzwerk" (siehe nächsten Kommentar) [/Edit]
Member: sivale
sivale Nov 19, 2009 at 11:36:26 (UTC)
Goto Top
Hmm, das weiß ich auch nich mehr.

vielleicht: Linux & Unix --> Netzwerke ?

Gruß

S.