• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Drucker druckt keine Umlaute aus der Konsole.

OP
M

macsys

Newbie
Em,

möchte nicht arrogant erscheinen oder dein Wissen in frage stellen.

Möchte es einfach nur schnallen.
 

Tooltime

Advanced Hacker
Tja wenn ich mir gerade keine Zeit habe mich mit deinen Problem zu beschäftigen und ein schöne Erkältung eingefangen habe das mir die Murmel brummt, musst du wohl warten bis ich wieder Zeit und Lust.

Und ehrlich gesagt bist du nicht gerade hilfreich mit deinen Informationen, was meinen Lustfaktor auch wieder senkt. Wenn ich danach frage was passiert wenn du die Druckerqueue anhältst, erwarte ich Antworten wie:

  • Der Drucker druckt/druckt nicht.
    Ich sehe den Druckauftrag in der Warteschlange.
    Habe mal in die Spooldatei unter /var/spool/cups reingeschaut und konnte den Text sehen.
Damit kann ich etwas anfangen, dann ist klar wir drucken über cups. Deine Antwort lautete
macsys schrieb:
Jedoch geht der Job hinterher doch über die q von cups (aber auch nicht grafisch!!).Gut wenn die Druckerqueue gestopt wurde und das Programm drucken will, entsteht in den logs von cups der Inhalt ohne Umlaute.
Da lese ich heraus:

  • Der Drucker druckt, irgendwann wenn der Drucker fertig ist (so 5-10min später) läuft der Job durch die Queue. --> ergibt keinen Sinn für mich
    Halte ich die Druckerqueue an landet der Druckauftrag im Logfile von Cups --> Das habe ich noch nie gesehen, da müsste man schon an den Debugoptionen herum gespielt haben.
Irgendwie ergibt das für mich keinen Sinn, so nach dem Motto, gedruckt wird direkt über die Schnittstelle und
Cups bekommt eine Kopie für die Akten.

macsys schrieb:
Weil ich das schon getestet hab. Mit dem Serversupport aus Berlin.Er hat ein Job gestartet und ich hab die cups der Clients vorher gestoppt.
Was dann passiert ist wird nicht verraten, sondern nur die Schlussfolgerung die wir daraus gezogen haben!
macsys schrieb:
Und, da OpenOffice oder sonstige KDE,GNOME etc Texteditor alle grafisch drucken, und es von da aus ja funktioniert.
Nö, die drucken Postscript, das hat nichts mit Grafik zu tun.

macsys schrieb:
Warum druckt der Drucker Datein im UTF-8 mit Umlaute und warum nicht im ISO-8859 ?
Das hängt davon ab wie man druckt, per Drucksystem lp Dateiname oder direkt auf das Gerät cat Dateiname > /dev/lp0
macsys schrieb:
Oder sehe ich das falsch ? ;oP
Ich denke du verstehst immer noch nicht den Unterschied zwischen drucken über Cups und ein Datei Byte für Byte auf der Druckerschnittstelle ausgeben.

macsys schrieb:
ps. und wenn die bash,root-shell, user-shell doch auf "de_DE.UTF-8" steht warum funktioniert dann die echo ausgabe der umlaute nicht ?
Ein Blick ins Druckerhandbuch dürfte zeigen das der Drucker nicht weiß was utf8 ist.

So nun hatte ich wieder eine Menge Arbeit, nur voran bringt uns das nicht. Ich brauche Indizien die mir zeigen wo der Druckauftrag lang läuft und keine Schlussfolgerungen von Leuten denen nicht ganz klar ist was passiert. Damit meine ich nur dich, sondern auch irgendwelchen Hotline-Typen die das Problem auch nicht lösen können, aber alles dafür tun den Fall abzuwälzen damit sie ihr Ticket wieder schließen können.
 
OP
M

macsys

Newbie
Joooo stümmt, recht haste !!! :???:

Also, da ich jetzt das Tool nicht benutzen kann, weil ich einen Rechner +(Drucker) mit genommen habe
mach ich also jetzt:

Drucker stop << via cups localhost:631
lp iso8859datei ( inhalt: abcdef öäüß ) << drucker druckt nicht
schau mir unter /var/spool/cups/letztedatei an. Und drin steht "abcdef ??????"<< ?=invertiert"

Und genau so sah es auch aus, wenn das Tool die Ausgabe machen sollte und er Drucker gestopt war.
 

Tooltime

Advanced Hacker
macsys schrieb:
Und genau so sah es auch aus, wenn das Tool die Ausgabe machen sollte und er Drucker gestopt war.
Dann scheint er definitiv mit CUPS zu drucken. Mach eine Sicherheitskopie vom ppd-File (/etc/cups/ppd/Druckername.ppd) und entferne im Original die Zeile
  • *cupsFilter: "application/vnd.cups-raster 50 rasterto..."
Dann werden die Druckdaten ohne Bearbeitung von Cups direkt an den Drucker geschickt. Bin gespannt ob das funktioniert. Und zeige bitte hier das original ppd-File über nopaste, hatte ich auch schon einmal bestellt. Für die endgültige Lösung müsste man dann ein spezielle Verarbeitung für Textdateien einbauen, dafür brauche ich zwingend einen Blick in dein ppd-File.
 
OP
M

macsys

Newbie
okay,

hab ich gemacht und der Drucker druckt andere Zeichen, aber keine Umlaute.

Als erste habe ich es auskommentiert, und er druckte $%§1 << mehr mals.

Bei gestoppter Q jedoch die Zeichen "...?.." im spooltext. (lad die datein auch hoch)

Dann hab ich die Zeile komplett gelöscht.

Und er fing an mit einem Druck der ähnlich dem Inhalt der ppd Datei aussah.
Und dann machte er weiter und weiter und weiter mit hexdezimalen Zahlen.
Das sich aber nicht in der Spooldatei wiedergab.

Hier das originale ppd Drucker file und der spool bei gestoppter cups Q.
http://www.file-upload.net/download-2394538/EPSONLQ1.ppd.html

/var/spool/cups/
http://www.file-upload.net/download-2394557/c00014.html
http://www.file-upload.net/download-2394559/d00014-001.html

gruss macsys
 

Tooltime

Advanced Hacker
Hatte erwartet das der Druckauftrag einfach auf den Drucker ausgegeben wird, anscheinend hängt CUPS noch weitere Informationen zum Job hinter. Macht nichts, nach dem ich mir das ppd-File angeschaut habe, konnte ich ein kleines Script bauen. Denke es sollte damit funkionieren. Es geht los.

Da ich kein Debian-System habe, kann es sein das du ein paar Pfade korrigieren musst. Als erstes suche das Cups-Verzeichnis mit den Druckfiltern (bei mir /usr/lib/cups/filter), das du richtig bist kannst du daran erkennen das sich dort einige Dateien mit dem Namen rasterto... befinden. Dort legst du die Datei myfilter mit folgenden Inhalt an:
Code:
#!/bin/sh
#
# altes logfile löschen
# echo "" > /tmp/myfilter.log
# echo "Anzahl Parameter: "$# >> /tmp/myfilter.log
# echo "Parameter: "$* >> /tmp/myfilter.log
#
# Parameter 6 ist der Dateiname der Druckdatei
# Mal schauen welche Kodierung die Textdatei benutzt
FILE_ENCODING=`/usr/bin/file -b --mime-encoding $6`
#
#
DIRECT_PRINTING=no
[ $FILE_ENCODING = us-ascii ] && DIRECT_PRINTING=yes
[ $FILE_ENCODING = utf-8 ] && DIRECT_PRINTING=yes
#
#
# echo "Die Auswertung ergibt DIRECT_PRINTING="$DIRECT_PRINTING >> /tmp/myfilter.log
# DIRECT_PRINTING=yes
#
#
PIPE_FILTER_PARAMETER="$1 $2 $3 $4 $5 -"
FILTER_PATH="/usr/lib/cups/filter"
# echo "die Parameter für pipe-Filter " $PIPE_FILTER_PARAMETER >> /tmp/myfilter.log
#
#
if [ $DIRECT_PRINTING = yes ]
then
    # Textdatei ist ASCII oder UTF-8
    # echo "drucken über normales Filterkommando" >> /tmp/myfilter.log
    $FILTER_PATH/texttops $* | \
    $FILTER_PATH/pstops $PIPE_FILTER_PARAMETER | \
    $FILTER_PATH/foomatic-rip $PIPE_FILTER_PARAMETER
else
    # Textdatei ist kein ASCII- oder UTF-Code --> nach utf-8 umwandeln
    # echo "vor dem Drucken nach utf8 konvertieren" >> /tmp/myfilter.log
    iconv -cs -f $FILE_ENCODING -t utf-8 $6 | \
    $FILTER_PATH/texttops $PIPE_FILTER_PARAMETER | \
    $FILTER_PATH/pstops $PIPE_FILTER_PARAMETER | \
    $FILTER_PATH/foomatic-rip $PIPE_FILTER_PARAMETER
fi
Nicht vergessen das Script mit chmod a+x myfilter ausführbar zu machen.
Dann öffnest du mit einen Editor das ppd-File zum Drucker /etc/cups/ppd/Druckername.ppd, stellst den Orginalzustand wieder her und fügst eine Zeile hinzu, so das diese so aussieht:
Code:
...
*cupsManualCopies: True
*cupsModelNumber:  2
*cupsFilter:	"text/plain 0 myfilter"
*cupsFilter:	"application/vnd.cups-postscript 0 foomatic-rip"
*%pprRIP:        foomatic-rip other
*ModelName:     "Epson LQ-570+"
...
Hoffe das es funktionieren sollte.
 
OP
M

macsys

Newbie
Hi tooltime,

immo hab ich wieder suse 11.2 mit drauf, von daher wird der path schon stimmen.
Okay ich hab das Filterscript mit deinem Inhalt in /usr/lib/cups/filter/ erstellt und mit chmod a+x myfilter
ausführbar gemacht.

Danach das originale ppd file mit der Zeile
*cupsFilter: "text/plain 0 myfilter" erweitert.

/etc/init.d/cups restart

lp isofile << brachte keinen Ausdrucken nur eine Spooldatei wie diese http://www.file-upload.net/download-2394557/c00014.html

Dann hab ich mal alles rückgängig gemacht weil ich noch mal was probieren wollte.

lp -o raw isofile << der druck brach nicht bei den Umlauten ab sondern druckte die Zeichen "abcdef vdö_VDÖ_" für "abcdef öäüßÖÄÜß"
(Das kann man wohl auch noch in der mime.convs und mime.types permanent einstellen.)

______________________________________________________________________________________________________
Mittelweile habe ich auch noch suse 10.1 mit drauf. Da dort auch noch cups 1.1.23 mit drauf war und ich noch hier liegen hatte.
Und weil in Cups 1.3.9 fest auf UTF-8 programmiert und kompiliert wurde und
man nicht mehr in der cupsd.conf das Defaultcharset ISO-8859-1x einstellen kann.
Nur hat das bis jetzt irgendwie auch nix gebracht !!! :irre: :???: :irre: :???: :irre:
^^^^^^^^^^vielleicht bringen dir die Info´s auch noch was ^^^^^^^^^^^^

:schockiert: debian 5.0 (cups 1.3.9), suse 11.2 (cups 1.3.9) und suse 10.1 (cups 1.1.23) wer wird gewinnen ?? :schockiert:
 

Tooltime

Advanced Hacker
So, Version zwei des Script, dieses mal habe ich es auch mit meinem Drucker getestet,
myfilter:
Code:
#!/bin/sh
#
# altes logfile löschen
# echo "" > /tmp/myfilter.log
# echo "Anzahl Parameter: "$# >> /tmp/myfilter.log
# echo "Parameter: "$* >> /tmp/myfilter.log
#
# Parameter 6 ist der Dateiname der Druckdatei
# Mal schauen welche Kodierung die Tex5datei benutzt
FILE_ENCODING=`/usr/bin/file -b --mime-encoding $6`
#
#
DIRECT_PRINTING=no
[ $FILE_ENCODING = us-ascii ] && DIRECT_PRINTING=yes
[ $FILE_ENCODING = utf-8 ] && DIRECT_PRINTING=yes
#
#
# echo "Die Auswertung ergibt DIRECT_PRINTING="$DIRECT_PRINTING >> /tmp/myfilter.log
# DIRECT_PRINTING=yes
#
#
FILTER_PATH="/usr/lib/cups/filter"
# echo "die Parameter für pipe-Filter " $PIPE_FILTER_PARAMETER >> /tmp/myfilter.log
#
#
if [ $DIRECT_PRINTING = yes ]
then
    # Textdatei ist ASCII oder UTF-8
    # echo "drucken über normales Filterkommando" >> /tmp/myfilter.log
    $FILTER_PATH/texttops "$1" "$2" "$3" "$4" "$5" "$6" | \
    $FILTER_PATH/pstops "$1" "$2" "$3" "$4" "$5" | \
    $FILTER_PATH/foomatic-rip "$1" "$2" "$3" "$4" "$5"
else
    # Textdatei ist kein ASCII- oder UTF-Code --> nach utf-8 umwandeln
    echo "vor dem Drucken nach utf8 konvertieren" >> /tmp/myfilter.log
    /usr/bin/iconv -cs -f $FILE_ENCODING -t utf-8 $6 | \
    $FILTER_PATH/texttops "$1" "$2" "$3" "$4" "$5" | \
    $FILTER_PATH/pstops "$1" "$2" "$3" "$4" "$5" | \
    $FILTER_PATH/foomatic-rip "$1" "$2" "$3" "$4" "$5"
fi
 
OP
M

macsys

Newbie
HI tooltime,

auch dein zweites Script macht das gleichen wie das erste.

Ich hab es aber mittlerweile mit cups 1.1.23 und auf dem anderen Client mit cups 1.2.8 hinbekommen.
Also einfach in der /etc/cups/cupsd.conf den Eintrag machen:

DefaultCharset ISO-8859-15
DefaultLanguage de


Und cups druckt alles mit Umlauten,@ und Eurozeichen. ISO, UTF-8 etc.
5 verschiedene Datein getestet !!

Was ich jetzt nur noch komisch finde. Beim Server der auch cups 1.2.8 drauf hat,
funktionieren die gleichen Einstellungen nicht.

Gruss macsys
 

Tooltime

Advanced Hacker
macsys schrieb:
Was ich jetzt nur noch komisch finde. Beim Server der auch cups 1.2.8 drauf hat, funktionieren die gleichen Einstellungen nicht.
Sind das denn identische Systeme? Du darfst das nicht einfach an cups festmachen, der eine oder andere Druckfilter greift vielleicht auf ein externes Tool zu, das seine eigene Vorstellung von der Codierung eines Textes hat. Deshalb war mein Ansatz mit einen eigenen Druckfilter die Textcodierung zu ermitteln und falls erforderlich (nicht ASCII oder UTF8) nach UTF8 zu konvertieren.

Was mich wieder zu meinen Script bringt. Das Problem der ersten Version bestand darin, das der fünfte Parameter ($5) zerbröselt ist. Er enthält nämlich mehrere Optionen die durch ein Leerzeichen getrennt sind, welche nicht als ganzer String übergeben, sondern in einzelne Parameter aufgeteilt wurde. Damit kamen die Druckfilter nicht klar. Drucke mal eine Textdatei mit dem original ppd-File, schau danach mal in /var/log/cups/error_log, mich interessiert vor allem welche Druckfilter benutzt wurden. Die Einträge sehen in etwa so aus, wobei das entscheidende Schlüsselwort "Started filter" ist:
Code:
I [01/Apr/2010:00:13:57 +0200] Saving subscriptions.conf...
I [01/Apr/2010:00:13:57 +0200] [Job 61] Started filter /usr/lib/cups/filter/texttops (PID 26286)
I [01/Apr/2010:00:13:57 +0200] [Job 61] Started filter /usr/lib/cups/filter/pstops (PID 26287)
I [01/Apr/2010:00:13:57 +0200] [Job 61] [i]Started filter[/i] /usr/lib/cups/filter/foomatic-rip (PID 26288)
I [01/Apr/2010:00:13:57 +0200] [Job 61] Started backend /usr/lib/cups/backend/serial (PID 26289)
I [01/Apr/2010:00:13:57 +0200] Saving subscriptions.conf...
 
Oben