Brother HL 1230

orangutanklaus

надеть шляпу, снять шляпу
Tach zusammen,

kann mir jemand einen Tipp geben, wie ich einen Brother HL 1230 (GDI-Drucker) unter "5.4" zum Drucken bewegen kann? Drucksystem (apsfilter, lpd, lpr, cups...) ist mir egal. Ich habe es schon mit apsfilter und LPR/LPRng versucht, Ergebnis: eine oder mehrere leere Seiten. :confused:

Danke im Voraus fuer Eure Hilfe. :)
 
Falls du die (neuere) Version mit Parallelport und USB hast, würde ich ihn auf JEDEN Fall an den Parallelport hängen. Auch wenn dies nicht optimal ist, erspart es dir doch jede Menge "ulpt0: offline" Hänger und dem entsprechende Wartezeiten.
Als Treiber würde ich allerdings nicht den hl1250 nehmen, sondern Ghostscript-GPL mit pxlmono kombinieren. Bedenke auch, dass du eventuell PJL-Steuerzeichen an den Drucker senden musst, bevor er wie gewünscht druckt.

Ich habe ihn (Revision C, lässt sich nur über das Drucker-BIOS unter Windows auslesen) mit lpd und diesem Inputfilter am Laufen:
Code:
#!/bin/sh
#
#  filter - Billiges Filterscript für PJL oder HP/PCL-XL Drucker.
#  Nutzt Ghostscript zum Umwandeln von PS-Input. Eventuell
#  sollte Plain-Text-Input mittels a2ps gerendert werden.
#
#  Basiert auf ifhp aus dem FreeBSD-Handbuch

#
#  PCL einschalten, bei Antwort (Drucker kann kein PCL) abbruch!
#
printf "\033&k2G" || exit 2

#
#  Die ersten beiden Zeichen des Inputs lesen
#
IFS="" read -r first_line
first_two_chars=`expr "$first_line" : '\(..\)'`

if [ "$first_two_chars" = "%!" ]; then
    #
    #  Wir haben Postscript, also müssen wir es wandeln!
    #
    /usr/local/bin/gs -dSAFER -dNOPAUSE -r1800x600 -dBATCH -q -sDEVICE=pxlmono \
      -sPAPERSIZE=a4 -sOutputFile=- - && printf "\f" && printf "\033&l0H" && exit 0
else
    #
    #  Plain-Text schicken wir gleich zum Drucker. Hinterher senden wir ein "Page End"
    #
    echo "$first_line" && cat && printf "\f" && printf "\033&l0H" && 
    exit 0
fi

exit 2
Eventuell kann man statt pxlmono auf lj4mono oder lj5mono nutzen. Musst du mal ausprobieren!
 
tach,

@chaos
auf dieser Seite war ich auch schon, ppd-file habe ich. Aber hier steht:
In later GhostScript versions the driver was removed again, use this package to add this and some other removed drivers to GhostScript 7.x (already added in ESP GhostScript 7.x) or these files for GPL/AFPL GhostScript 8.x (already there in ESP GhostScript 8.x). If you want to add the driver to your GhostScript 8.x, put the gdevhl12.c file into the src/ subdirectory of the GhostScript source package, append gdevhl12-hl1250.mak to src/contrib.mak, and add "$(DD)hl1250.dev" to one of the "DEVICE_DEVS..." lines of src/Makefile.in. Then compile as ususal.
Der Treiber war in ghostscript-gnu nur bis zur Version 7.04 enthalten, installiert habe ich ghostscript-gnu-7.07_12.

Wie geht man da vor? Any help?
 
Zuletzt bearbeitet:
tach,

@OOZE
Wie genau verwende ich nun das Shellscript? Kannst Du mir da etwas auf die Sprünge helfen :rolleyes:
Ich bin mit dem ganzen Drucker(filter)-Kram nicht so bewandert.
(Ich habe den HL 1230 nur mit Parallel-Anschluss.)
 
OK, dieses Beispiel bezieht sich nun auf BSD/lpd. Für CUPS, etc musst du etwas querdenken.

1. Erst istallierst du einmal Ghostscript-GPL in einer einigermaßen aktuellen Version
2. Du kopierst das Script in eine ausführbare Datei
3. Du trägst das Script als Inputfilter in die /etc/printcap ein: :if=/path/to/script:\
4. Du versucht nach einem Neustart von lpd mal etwas zu drucken.

Vielleicht solltest du dir auch noch Kapitel 9 "Printing" im englischen Handbuch durchlesen. Dort werden Filter und so weiter gut erklärt...
 
tach,

@OOZE
Danke für die schnelle Hilfe. Ich werde das heute Abend (zu Hause) mal durchspielen und dann einen Bericht abgeben. :)
 
tach,

ich bekomme leider nur leere Seiten. :confused:
Hier meine /etc/printcap:
Code:
lp|Brother HL 1230:\
        :sd=/var/spool/lpd/lp:\
        :af=/root/Brother-HL-1250-pxlmono.ppd:\
        :lp=/dev/lpt0:\
        :sh:mx#0:\
        :if=/usr/local/bin/lpfilter:
Wo ist der Fehler?
 
Zuletzt bearbeitet:
Toner ist drinn, oder? ;)

Da deine printcap in Ordnung zu sein scheint, kann der Fehler dort nicht liegen. Daher jetzt einmal eine Reihe gängiger Fehlerquellen, arbeite sie mal ab... Leider sind Ferndiagnosen bei zickigen Druckern gar nicht so einfach.

1. Stimmt das in Ghostscript (gs) angegebene Papierformat mit dem im Papierschacht überein?
2. Gibt gs oder lpd irgendwelche Fehler in die Syslog? Wenn ja, welche?
3. Hast du mal andere PCL/PJL-Treiber probiert? Zum Beispiel lj5mono oder pxlgrey.
4. Benötigt der Drucker in deiner Revision vielleicht ein spezielles "start rendering"-Kommando? Rufe notfalls mal die Hotline an (auch wenn die eh keine Ahnung haben...).
5. Ist die Ghostscriptzeile richtig, oder will der Drucker noch eine Reihe PJL-Angaben haben?
6. Stimmt die Auflösung mit der des Druckers überein? In meinem Script steht 1800x600, ältere Revisionen konnten aber nur 600x600 oder 1200x600.
7. Wie ist der Parallelport im BIOS eingestellt? Stelle ihn mal testweise auf "normal" oder "standart".
8. Hast du die neueste Firmware für den Drucker?

So, dass war jetzt mal ne ganze Menge. Da wird Google wohl rauchen ;). Ich würde dir empfehlen, mal mit Nummer 6. 7. 1. und 3. (in dieser Reihenfolge) anzufangen. Wenn das alles nichts hilft, sehen wir noch mal weiter...
 
tach,

@OOZE
ist der Treiber richtig in die /etc/printcap eingebunden? Oder kann ich die Zeile...
Code:
:af=/root/Brother-HL-1250-pxlmono.ppd:\
...auch weglassen?
Werde dann nochmal den Filter prüfen.
Fehlerquelle Toner scheidet definitiv aus. :)
 
Du kannst die Zeile schon weglassen, der der Filter die PPD nicht verarbeitet. Aber andererseits schadet sie aus eben diesem Grund auch nicht. Da einige Programme (z.B. acroread7) lpd nach Spezifikationen des Druckers fragen und den Eintrag der af bekommen, würde ich sie drinnlassen...

Noch mal was aus Futurama (hilft bei Frust):
Bender: Und obwohl der Computer aus war, leuchtete auf seinem Monitor noch immer das Windowszeichen...
Leela: Bender, dass ist nicht witzig!
Bender: Wenn du ein Laserdrucker bist, schon!
Leela: Ach was. Unter Windows werden sie nicht erkannt, Unix lässt sie durchbrennen!
 
tach,

ich habe an den BIOS-Einstellungen gedreht (EPP, ECP, EPP+ECP), habe den Filter angepasst (Auflösung 600x600), verschiedene ppd-files probiert, aber...
der Drucker gibt mir trotzdem nur leere Seiten aus. ;'(
Mittels tail habe ich in /var/log/messages beim Auslösen des Druckvorgangs folgendes gefunden:
Code:
...kernel: Interrupt storm detected on "irq7: lpt0"; throttling interrupt source
Das ist doch nicht normal, oder?
Was kann ich tun?

p.s. Unter Windows tut's der Drucker..
 
Jetzt habe ich es nochmal mit "/usr/sbin/lptcontrol -e" (Polling-Mode) probiert,
wieder dasselbe... :zitter:
/var/log/messeages
Code:
...kernel: lpt0: advanced mode not avail, polling
Was hat das zu bedeuten?
Danke für die Hilfe!
 
FreeBSD 5 hat Probleme den Mode nach dem Boot zu verändern. Aus diesem Grund ist lptcontrol auch eigentlich veraltet, nur wird es natürlich nirgends gesagt. Stattdessen musst du ein Hint in die devices.hints eintragen:
hint.ppc.0.flags:"0x8"
für ECP oder
hint.ppc.0.flags:"0x28"
für Polling.

Gehen wir das ganze mal etwas systematischer an:

1. Drucker allgemein:
Schieße lpd mal ab und mach ein "lptest > /dev/lpt0". Er sollte nun eine Seite voll mit Zeichen drucken. Macht er es, ist lpd schuld. Macht er es nicht, liegt der Fehler woanders.

2. lpd:
Tauche den Textfilter mal gegen diesen aus:
Code:
/bin/cat && exit 0
exit 2
Dieser sende einfach den stdin an den stdout und filtert gar nicht. Versuche nun einmal etwas einfaches zu drucken, z.B. mit "echo "Test!" | lpr -Plp -". Druckt er nun, ist mein Filter schuld. Druckt er wieder nicht, gäbe es da noch einen sehr schmuzigen Workaround um zickige Drucker zum Laufen zu bringen...
 
tach,

@OOZE
den "Interrupt Storm" habe ich beseitigt, indem ich acpi abgeschaltet habe.
Ich werde Deine Lösungsvorschläge heute abend testen.
Herzlichen Dank einstweilen.. :)
 
tach,

da bin ich wieder mit dem blöden "Brother-Problem".
Ich habe "lptest > /dev/lpt0" gemacht, /var/log/messages sagt:
Code:
...kernel: Interrupt storm detected on "irq7: lpt0"; throttling interrupt source
es kommt keine Seite aus dem Drucker.
Danach mal mit "/usr/sbin/lptcontrol -e" in den Polling-Mode geschalten, wieder "lptest..."
/var/log/messages sagt:
Code:
...kernel: lpt0: switched to polled extended mode
...kernel: lpt0: advanced mode not avail, polling
und der Drucker gibt mir 3 leere Seiten aus.

Da ist noch ein Auszug aus dmesg:
Code:
ppc0: <Parallel port> at port 0x378-0x37f irq 7 on isa0
ppc0: SMC-like chipset (ECP/EPP/PS2/NIBBLE) in COMPATIBLE mode
ppc0: FIFO with 16/16/16 bytes threshold
ppbus0: <Parallel port bus> on ppc0
ppbus0: IEEE1284 device found /NIBBLE/PS2/ECP
Probing for PnP devices on ppbus0:
ppbus0: <Brother HL-1230 series> PRINTER PJL
plip0: <PLIP network interface> on ppbus0
lpt0: <Printer> on ppbus0
lpt0: Interrupt-driven port
ppi0: <Parallel I/O> on ppbus0
Übrigens steht da auch folgendes drin:
Code:
mptable_probe: MP Config Table has bad signature: \^B\^C
Also: Drucker tut nicht... :confused: :zitter: :confused:
Was kann ich noch machen, um das Ding zum Drucken zu bringen?
 
Wir haben den Fehler gefunden, der Parallelport ist schuld. Oder dein Mainboardhersteller mit seiner schlechten Implementation...

Du machst jetzt folgendes:
1. Spiele - wenn verfügbar - ein neues BIOS ein
2. Stelle den Parallelport im BIOS auf 378/IRQ7, DMA 3, ECP
3. Setzte ein Hind in devices.hind auf den ECP-Mode: hint.ppc.0.flags="0x8"
4. Setzt die Interrupt-Sturm-Erkennung in /etc/sysctl.conf hoch: sysctl hw.intr_storm_threshold=20000
5. Starte noch einmal, neu um den Hind sicher zu übernehmen

Bestenfalls geht es jetzt. Wenn nicht, kommt mein schmutziger Workaround:

6. Baue einen SMB-Kernel, auch wenn du nur eine CPU hast. Oftmals funktioniert der Port danach, auch wenn ich nicht weiß warum???

Wenn es jetzt immer noch nicht geht, weiß ich nicht mehr weiter. Dann wäre die Mailinglist (de-bsd-question@de.freebsd.org) die nächste Anlaufstelle.
 
tach,

@OOZE
mein Mainboardhersteller ist MSI. Werde mal sehen, ob ich ein neues BIOS bekomme.
Herzlichen Dank. :)
 
tach,

die BIOS-Updates habe ich gemacht, übrigens Board ist ein MSI 6533. device.hints und sysctl.conf geändert und... neeeeeiiiiinnnnn - wieder nur leere Blätter ;'(
dmesg sieht jetzt so aus:
Code:
ppc0: <Parallel port> at port 0x378-0x37f irq 7 flags 0x8 on isa0
ppc0: SMC-like chipset (ECP-only) in ECP mode
ppc0: FIFO with 16/16/16 bytes threshold
ppbus0: <Parallel port bus> on ppc0
ppbus0: IEEE1284 device found /NIBBLE/PS2/ECP
Probing for PnP devices on ppbus0:
ppbus0: <Brother HL-1230 series> PRINTER PJL
plip0: <PLIP network interface> on ppbus0
lpt0: <Printer> on ppbus0
lpt0: Interrupt-driven port
ppi0: <Parallel I/O> on ppbus0
@OOZE
Ich danke Dir vorerst für Deine äusserst kompetente Hilfe, den smb-kernel werde ich aber erst später bauen,
meine Freundin drängt mich jetzt zu diversen Urlaubsvorbereitungen. :cool:
Melde mich dann später wieder.
 
Es sieht doch alles OK aus. Und wenn da ein Fehler wäre, hätten wir ihn so eigentlich finden müssen. Tut mir Leid, aber ich habe keine Ideen mehr. Vielleicht hast du woanders ja mehr Glück...

Schönen Urlaub, weit ab aller Druckerprobleme!
 
Zurück
Oben