Author: Jean-Jacques

## Mtink

Mtink ist ein Status-Monitor für EPSON Tintenstrahldrucker.

Mtink zeigt Ihnen die Tintenmenge und gibt Ihnen Auskunft über den allgemeinen Status Ihres Druckers. Zudem ist das Überprüfen und Reinigen der Düsen und das Ausrichten der Druckköpfe möglich. Einige Drucker, darunter der Stylus Color 480 und der Stylus Color 580, benötigen extra Software um die Tintenbehälter zu wechseln. In Mtink sind diese Steuercodes bereits eingebaut.

### Inhalt

Voraussetzungen für den Betrieb
Mtink und die EPSON Kommunikationsprotokolle
Wie Mtink funktioniert
Internationalisation
Optionen in der Befehlszeile
Das Hauptfenster
Das Konfigurationsfenster
Druckkopf justieren
Das Minifenster
Bugs
Siehe auch
To do

### Voraussetzungen für den Betrieb

Für den Betrieb sollte openMotif, Motif oder die Lesstif library installiert sein. Falls Mtink kompiliert wird, muss zusätzlich das X-Entwicklerpaket und vom oben genannten die Runtime- und die Entwicklerumgebung installiert sein. Für Mtink muss die Schnittstelle bi-directional sein, das heißt, dass Daten vom Drucker auch gelesen werden müssen.

#### Linux

Wenn Sie den parallelen Druckerausgang benutzen, dann muss der Kernel oder das parport-Modul korrekt konfiguriert sein. Beim Standardkernel ist das auch in der Regel der Fall, beim Selbstkompilieren von 2.2-Kernelversionen muss der Eintrag in der Konfigurationsdatei "/usr/src/linux/.config" im Abschnitt "CONFIG_PRINTER_READBACK" auf "y" stehen.

Leider ist das USB-Druckerport-Modul für ältere 2.2- und 2.4-Kernel fehlerhaft. Gibt es Schwierigkeiten, müssen Sie sich einen neuen Kernel mit höherer Versionsnummer besorgen oder die Datei /usr/src/linux/drivers/usb/printer.c modifizieren. Das ist nicht schwer, es brauchen nur die folgenden Zeilen geändert werden:

    static ssize_t usblp_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
    {
        struct usblp *usblp = file->private_data;
        ....
        if ((usblp->readcount += count) == usblp->readurb.actual_length)
          usb_submit_urb(&usblp->readurb);
        return count;
    }

ändern nach:

    static ssize_t usblp_read(struct file *file, char *buffer, size_t count, loff_t *ppos)
    {
       struct usblp *usblp = file->private_data;
       ....
       if ((usblp->readcount += count) == usblp->readurb.actual_length) {
         usblp->readcount = 0;
         usblp->readurb.dev = usblp->dev;
         usb_submit_urb(&usblp->readurb);
         return count;
       }
    }

Die Änderungen sind rot und fett gekennzeichnet.

#### Solaris

Leider besitze ich keine Sparc-Station, die eine bi-direktionale Schnittstelle zum drucken hat, deshalb konnte ich es nicht testen. Neuere Workstations verfügen über einen "ecpp"-Port, der beidseitige Kommunikation erlaubt. Falls das Jemanden mit einem Epson-Drucker gelingt, so möge er mir bitte Bescheid geben, damit ich es in künftigen Versionen berücksichtigen kann.

### Mtink und die EPSON Kommunikationsprotokolle

Mit Erscheinen des Stylus Color 740 und des Stylus Scan verwendet Epson ein neues Protokoll, um diese Drucker anzusteuern. Es heißt D4 und basiert auf dem Entwurf des Datenübertragungsprotokolls IEEE 1284.4, Version 1.5, und ermöglicht die Kommunikation über mehrere logische Kanäle. Der größte vorteil ist, dass Kommandos über einen control-Kanal geschickt werden können, und obwohl der Drucker gerade arbeitet, also eigentlich busy ist, ausgeführt werden können. Dank dieses Protokolls ist es auch möglich, diesen Port mit anderen Geräten, beispielsweise einem Scanner, zu teilen.

Die Implementation des D4-Protokolls scheint für ältere Drucker sehr unvollständig zu sein und ist somit nicht frei von Fehlern - im Gegensatz zu neueren Geräten wie dem Stylus Photo 890 (das ist mein eigener).

Das D4-Protokoll erfordert, dass der Drucker zumindest ein paar Grundzüge der EJL (Epson Job Language) beherrscht. Das wichtigste Kommando daraus ist der Exit from D4 mode-Befehl, der von allen Geräten unterstützt wird, die das D4-Kommunikations-Protokoll und den Get ID-Befehl beherrschen. Letzterer veranlasst den Drucker zur Ausgabe über das Modell, die Bezeichnung und die unterstützten Sprachen. Der Get ID-Befehl wird offensichtlich nicht vom Stylus Scan 2500 und wahrscheinlich auch nicht vom Stylus Scan 2000 und von der Stylus Cxxx-Reihe unterstützt. Diese benötigen das D4 Pendant vonGet ID . Bisher erfuhr man Informationen über den Drucker-Status durch die Epson REMOTE-Befehle. Diese Befehle sind in den neueren Geräten weiterhin eingebaut.

Mtink unterscheidet die unterschiedlichen Protokolle, aber der Autor kennt nicht alle Fähigkeiten der Drucker, die von Epson ausgeliefert wurden. Um zu verhindern, dass Mtink auf Reaktionen des Druckers wartet, die schlicht nicht vorhanden sind, können die erforderlichen Modifikationen leicht vorgenommen werden.

Die Fähigkeiten der verschiedenen Drucker sind zu Beginn der Datei model.c beschrieben. Die wichtigsten Felder sind die, in denen das "protocol" steht und die "id". Im "protocol"-Feld muss einer der folgenden Einträge stehen:

- PROT_OLD Der Drucker kann mit dem D4-Protokoll überhaupt nichts anfangen.
- PROT_NEW Der Drucker kennt einige wenige Befehle von D4 . Exit from D4 mode ist erforderlich.
- PROT_D4 Der Drucker unterstützt das D4-Protokoll im größeren Rahmen.

Sollte der Drucker auf das get ID-Kommando (bei EJL und D4 Versionen) nicht antworten, wird es problematisch, denn Fragen an den Drucker werden unmöglich und der Wert des Feldes der id wird anstelle von True auf False gesetzt.

    /*   name            colors prot      state exch   e.sep  cl sep reset             id   */
       { "Stylus C20SX",      4,PROT_D4,  True, False, False, True,  PROT_D4,          True, 3, 15, 2, 9, NULL },
       { "Stylus Color",      4,PROT_OLD, True, False, False, False, PROT_OLD,         True, 1,  7, 0, 0, NULL },
       { "Stylus Photo 750",  6,PROT_NEW, True, False, False, False, PROT_NEW,         True, 3, 15, 0, 0, NULL },
       { "Stylus Scan 2500",  4,PROT_D4,  True, False, False, False, PROT_OLD|PROT_D4, False,3, 15, 0, 0, NULL },

Aus den Daten der Datei model.c können Sie erkennen, das der Stylus Scan 2500 nichts über seine Identität preisgibt, aber das D4-Protokoll benötigt. Der Stylus Photo 750 ist einer aus der ersten Generation, die D4 beherrschen. Die Kommunikation funktioniert aber nur, wenn der Exit from D4-Befehl dem erforderlichen REMOTE -Befehl vorangestellt wird. Der Stylus Color ist ein älterer Drucker, der nichts über das D4-Protokoll weiß. Letztlich benötigt der Stylus C20SX das D4-Protokoll (das "alte" Get ID funktioniert nicht).

Durch Korrekturen an den jeweiligen Feldern sollte Mtink mit Ihrem Drucker zusammenarbeiten. Bitte informieren Sie mich, wenn Sie eine Kombination gefunden haben, die mit Ihrem Drucker zusammenarbeitet und die von den Vorgaben aus der Datei model.c abweicht. In der gimp-print-Dokumentation steht mehr dazu:

http://gimp-print.sourceforge.net

### Wie Mtink funktioniert

Wenn Sie Mtink das erste Mal aufrufen, werden sie nach der Gerätedatei (Anschluss) und dem Drucker gefragt. Dann wird die Drucker-Beschreibungsdatei geladen und mit dem Druckereintrag verglichen. Steht das id-Feld auf True, versucht Mtink, das Gerät zu bestimmen. War Ihre Angabe zum Druckermodell nicht korrekt, wird von Mtink dasjenige, dass es selbst herausgefunden hat, genommen (ausser wenn ein Gerät deklariert wurde, das keine Identifikation zurück gab). Diese Daten, Druckermodell und Port, werden in der Datei $HOME/.mtink gespeichert. Wenn Sie Mtink danach aufrufen, wird die Konfigurationsdatei eingelesen und mit der Antwort des angeschlossenen Druckers verglichen. Das Löschen der Datei $HOME/.mtink ist wie ein Reset der Konfiguration.

Mtink belegt zwei Bereiche im Arbeitsspeicher und kommuniziert über "Shared Memory". Das erlaubt kurze Refresh-Zeiten für die grafische Ausgabe über X und vermeidet Fehlfunktionen im printer code, damit sich der nicht mit der X-Umgebung, den Timer, den Interrupts und anderen Funktionen ins Gehege kommt.

Mtink entspricht vom Aufbau her nicht herkömlichen X-Anwendungen. Damit Daten von verschiedenen Darstellungsmasken zurückgeliefert werden können und damit die Ansteuerung des Druckers nicht zu Wartezeiten führt, bei denen die Oberfläche nicht mehr bedienbar wird, beinhaltet Mtink für jede Maske und für die Schnittstelle zur Druckeransteuerung eigene XEven-Schleifen.

#### Internationalisation

Mtink kann auf einfache Weise an andere Sprachen angepasst werden. Zur Zeit kennt es die Sprachen Englisch, Französisch, Italienisch, Deutsch und Türkisch. Sie können leicht Ihre eigene Sprache einbauen, in dem Sie die Datei Mtink.res editieren und in Ihr Home-Verzeichnis als EpsonUtil kopieren. Der Resourcen-Name für Ihre Sprache leitet sich von den Umgebungsvariablen LANG, LC_ALL und LC_MESSAGE ab. So erwartet beispielsweise Mtink beim Inhalt einer Variablen von fr_FR eine Resourcen-Datei mit dem Namen EpsonUtil.Fr. Bitte beachten Sie, dass bei der Länderkennung der erste Buchstabe, hier das F, großgeschrieben ist und der zweite Buchstabe entsprechend dem Variableninhalt von LANG ist. Wird die Resourcendatei nicht gefunden, kommt default zum Zug, also Englisch.

#### Beispiel:

     EpsonUtil*title_LB.fontList: *-helvetica-*-r-normal--14-*-*-*-*-*-iso8859-1
     EpsonUtil*fontList: *-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-1
     !!! set the font required for turkish
     EpsonUtil.Tr*title_LB.fontList: *-helvetica-*-r-normal--14-*-*-*-*-*-iso8859-9
     EpsonUtil.Tr*fontList: *-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-9
     ....

     !!! The default (english)
     EpsonUtil*previous_PB.labelString:    Previous

     !!! and the texts for german, french, italian and turkish
     EpsonUtil.De*previous_PB.labelString: Zurück
     EpsonUtil.Fr*previous_PB.labelString: précédent
     EpsonUtil.It*previous_PB.labelString: Informazioni
     EpsonUtil.Tr*previous_PB.labelString: Geri

Wenn Sie die Übersetzung in andere Sprachen unterstützen möchten, senden Sie mir bitte Ihre Datei, die mit Ihrem Namen und Ihrer Internetadresse, sofern Sie es möchten, versehen ist.

### Optionen in der Befehlszeile

Mtink mit Optionen aufzurufen ist normalerweise nicht erforderlich. Falls Mtink seine Bildschirmausgabe zu einem anderen Computer schicken soll, müssen Sie die DISPLAY-Variable anpassen, oder Mtink so aufrufen: mtink -display ComputerName:0. Es ist nicht erforderlich, dass auf dem Rechner, an dem der Drucker angeschlossen ist, ein X-Server läuft. Mtink kann mittels ssh und rsh, sofern vorhanden, gestartet werden:

    $ ssh serverName /home/jj/mtink/mtink -display workStationName:0.

Sie können auf diesem Weg auch die Sprache einstellen.

    $ ssh serverName LANG=fr /home/jj/mtink/mtink -display workStationName:0

veranlasst Mtink zur Ausgabe von französischen Texten. Bitte berücksichtigen Sie, dass nicht alle Browser (Hilfe Funktion) korrekt arbeiten, wenn diese vom entfernten Rechner aus aufgerufen werden.

Die automatische Druckererkennung kann mit dieser Option ausgeschaltet werden:

    $ mtink -noAutoDetect

Die Option -config <Nummer> erlaubt den gleichzeitigen Betrieb mit unterschiedlichen Druckern.

Beispiel:

Drucker 1 ist ein Stylus Color 980 an /dev/lp0

und

Drucker 2 ist ein Stylus Photo 890 an /dev/usb/lp0.

Sie können mit mtink -config 1 Mtink für Drucker 1 (Stylus Color 980) und mit mtink -config 2 für Drucker 1 (Stylus Photo 890) aufgerufen werden.

Die Konfigurationsdaten werden in die Dateien ~/.mtinkrc.1 beziehungsweise ~/.mtinkrc.2 gespeichert.

Ohne Angabe der Option -config # oder mit -config 0 wird auf die Datei ~/.mtinkrc zurückgegriffen.

### Das Hauptfenster

Ganz oben im Fenster wird der angeschlossenen Drucker angezeigt. Grafisch als Balken und in Zahlen wird die Tintenmenge dargestellt, die sich aktuell in den Behältern befindet. Die Zahl der Balken hängt von der tatsächlich verfügbaren Zahl der Farben des Druckers ab. Der Druckerstatus beinhaltet einige Informationen über den internen Zustand, beipielsweise ob er gerade druckt. Die Schaltflächen unter der Statuszeile erlauben verschiedene Aktionen. Hier im Beispiel ist der letzte Button nicht aktiv, weil dieser Drucker das Wechseln der Patronen auf diesem Wege nicht unterstützt. In diesem Fall müsste man selbst am Drucker die entsprechenden Knöpfe drücken. Mit den Buttons ganz unten kann man sich verschiedene Informationen über Mtink anschauen und das Programm mit Exit verlassen. Die Schaltfläche mit der Bezeichnung Hilfe zeigt diesen Text an, den Sie gerade lesen.

### Das Konfigurationsfenster

Hier können Sie bestimmen, welcher Browser die HTML-Hilfedatei anzeigen soll. Mtink kann mitgeteilt werden, dass beim Programmaufruf automatisch nach einem Browser gesucht werden soll. Das ist die Voreinstellung.

#### Auswahl eines Browsers

Sie können den Namen des Browsers in das Eingabefeld schreiben oder den [ ... ]-Button drücken. Dann erscheint ein Dateimanager. Mtink kennt Optionen für die verschiedenen Browser wie Netscape, Mozilla und Galeon und startet sie entsprechend. Andere Browser, beispielsweise der Konqueror, der Gnome-Help-Browser und Opera brauchen keine besonderen Optionen und können auch verwendet werden.

Manche Browser verweigern die Arbeit, wenn die dazugehörige Desktop-Umgebung fehlt. Die bessere Lösung sind in diesem Fall Browser wie Netscape, Mozilla, Galeon und Opera, die von einem speziellen Desktop wie beispielsweise KDE unabhängig sind. Der Autor steht der Entwicklung von KDE kritisch gegenüber, lediglich die Bluescreens sind bei KDE noch nicht implementiert.

#### Automatische Erkennung

Der Check-Button erlaubt den Wechsel zwischen der automatischen und der manuellen Erkennung. Im automatischen Modus versucht Mtink , den angeschlossenen Drucker zu identifzieren. Falls Ihr Modell älter als der Stylus Color 400/600 und dergleichen ist, und er nach dem ersten Versuch nicht erkannt wurde, sendet Mtink einen Code, damit der Drucker ein paar Zeichen auf Papier ausgibt. Dabei ist es ein Vorteil, wenn die automatische Erkennung ausgeschaltet wird, dann gehen die späteren Programmstarts schneller. Das könnte lediglich in dem Fall problematisch werden, sobald ein anderer Drucker angeschlossen wird. Nach dem Ändern der Einstellungen müssen sie auch gesichert werden. Diese Daten werden in die Datei $HOME/.mtinkrc geschrieben.

#### Druckkopf justieren

Mtink kann auch die Druckköpfe ausrichten. Diese Funktion ist jedoch abhängig vom Druckermodell und die Erscheinung des Programmfensters hängt ebenfalls davon ab. Manche Drucker, wie der Stylus Color 480 und Stylus Color 580, erfordern eine getrennte Justierung für den farbigen und für den schwarzen Kopf. Dementsprechend werden auch die Fenster mit den Auswahlmöglichkeiten angepasst, so dass es in diesem Fall zwei Buttons, einen für den farbigen und einen für den schwarzen Kopf, gibt. Ein weiterer Unterschied ist im Ausdruck des Testmusters zu sehen, denn es können 8 oder 15 Streifen sein. Unterschiedlich ist auch die Zahl der Durchgänge.

Mtink Einstellung Erstes-Fenster | Mtink Einstellung Pause-Fenster
Mtink Einstellung Setup-Fenster | Mtink Einstellung letztes Fenster

Das zweite und das dritte Fenster wird je nach Druckermodell bis zu dreimal angezeigt.

### Bugs

Wahrscheinlich eine Menge. Ich kann nicht garantieren, dass der Code, der zum Drucker gesendet wird, immer korrekt ist, weil mir Informationen darüber oft fehlen. Die Benutzung des Programms geschieht auf eigene Gefahr.

### Das MiniFenster

Diese Fenster wird nur aufgeschaltet wenn der Server mtinkd läuft oder die Rc-Datei .mtinkrc deb Pfad "/var/mtink/..." beinhaltet.

Das Fenster kann 2 Fareben annehmen, Grün (alles klar), Orange (Tintenmenge weniger als 10%) oder Rot (Drucker nicht verfügbar oder wenige als 5 % Tinte).
Durch betätigen er linke Maustaste, wird das Mtink-Hauptfenster aufgeschaltet bzw. geschlossen.
Das Fenster kann frei positionniert werden (rechte Maustaste). Die Position des Fensters wird in der Datei ~/.mtinksess[.Konfiguration nummer festgehalten wenn mtink via ALT + F4 oder der Schliessschaltfläche der Titelleiste beendet wird.

### Siehe auch

Index
mtinkd der server for D4 Drucker
minkc ein Auswahl Dialog für Besitzern von mehereren EPSON druckern
ttink ein Konsolen basierten Statusmonitor

### To do

- Bessere Dokumentation.
- Übersetzen der Dokumentation.
- Test mit mehreren Druckern.
- ....

### Autor

Jean-Jacques Sarton jj.sarton@t-online.de
Zur Xwtools Home Page