linux-l: Deskjet am Netz (Loesungsvorschlag)
Wolfgang Jung
woju at keep.in-berlin.de
Di Jun 2 09:14:10 CEST 1998
On Mon, Jun 01, 1998 at 01:10:14PM +0200, Andreas Fitzner wrote:
> So was Aehnliches was Joachim als zweite Lsgvariante
> vorgeschlagen hat.
>
> Das Problem ist doch erst die PS daten in PCL
> umzuwandeln und dann das zeug via jetdirect zu versenden.
>
> Moegliche Loesung bei Verwendung von lpr, ..
> 1.) an einen Filter schicken
> 2.) Gefiltertes an ip schicken
Mavhct alles der lpd... einfach ueber die normalen PS Filter
(zb rhs-printerfilter poder so aehnlich) und den Drucker als
remote kennzeichnen.
diese Jetprints koennen einen lpd simulieren :)
>
>
> Genaueres:
>
> Die User drucken auf 'dsk'. Also erst nach pcl wandeln.
> ------ Eintrag in /etc/printcap ---------------
> dsk:\
> :lp=/dev/null:\
> :sd=/usr/spool/lp1:\
> :af=/var/log/lpd-acc:\
> :lf=/var/log/lpd-err:\
> :if=/usr/local/bin/tex/dsk_filter:\
> :sh:
> ---------------------------------------------
> 'dsk' ist also an /dev/null angeschlossen :->
> aber vorher kommen die Daten in meinen Filter.
>
> So wird der job durch meinen filter 'dsk_filter' geschickt.
> das ist ein Perlscript von mir, das erkennt ob PS oder PCL
> kommt.
>
> ------------- dsk_filter --------------------
> #! /usr/bin/perl
>
> $LOG=">>/tmp/dsk_filter.log";
> $tmp_file="/var/spool/hm"; # also hier muss man sich was bauen,
> # damit man immer dynamisch ein
> # eineindeutigen Namen erzeugt. damit
> # das script auch parallel laufen kann.
>
> ################################################################################
> open(LOG,$LOG) || die;
>
> w2log("anfang ", join("/", at ARGV));
> w2log("writing to $tmp_file");
>
> $a=<>;
> if ($a =~ /^%[%!]/) {
> # ist eps /^%!/ oder fast eps /^%%/
> print LOG "e?ps !?\n";
>
> open(GS,"| gs -dNOPAUSE -q -sDEVICE=djet500 -sOutputFile=$tmp_file -") || die;
> print GS $a;
> while (<>) { print GS $_; }
> close(GS);
>
> } elsif ($a =~ /^\033E\033/) {
> # HP PCL ist \033 E \033 (siehe /etc/magic)
> # und durchgefuehrte eigene Versuche
> # 033 ist 27 dec = esc
> print LOG "PCL !?\n";
> open(TMP,">$tmp_file") || die;
> print TMP $a;
> while (<>) { print TMP; }
> close(TMP);
>
> } else {
> # Es Koennte jetzt auch noch non-eps ps sein
> # oder ascii text ?
> #
> # ich weiss nicht so recht, was mach ich damit?
> # am besten ich veraendere erst mal nix
> print LOG "unrecognized format, I don't change it\n";
> open(TMP,">$tmp_file") || die;
> print TMP $a;
> while (<>) { print TMP; }
> close(TMP);
> }
>
> # ok jetzt hab ich das umgewandelte in $tmp_file
> # jetzt schick ich es auf "dsk_remote" ab
> w2log("starting new printjob");
> system("lpr -Pdsk_remote $tmp_file");
> w2log("ende");
>
> ################################################################################
>
> sub w2log { # write 2 log
> my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)
> =localtime(time);
>
> if ($sec<10) { $sec="0$sec"; }
> if ($min<10) { $min="0$min"; }
> if ($hour<10) { $houre="0$hour"; }
> $mon++;
> print LOG "$hour:$min:$sec $mday-$mon-$year: ", @_, "\n";
> }
>
> close(LOG);
> -----------------------------------
>
> so und jetzt muss natuerlich in der printcap sowas wie
> -------- Eintrag in /etc/printcap ---------------
> dsk_remote:\
> :sd=/var/spool/lpd/dsk_remote:\
> :mx#0:\
> :rm=192.168.1.9:\
> :rp=dsk_remote:
> # also die ip-adress ... ist klar
> # und dsk_remote koennte/(sollte?) der dns
> # name vom drucker sein
> -------------------------------------------------
>
> Also zusammenfassend
> die User drucken auf 'dsk' der an /dev/null angeschlossen ist :->
> mein Druckerfilter ist aber zwischen dsk -> /dev/null und
> schickt die veraenderten (oder wenn schon PCL, dann nicht
> veraenderten) Daten an den Drucker 'dsk_remote'
> 'dsk' und 'dsk_remote' muessen natuerlich mit
> spooldir's und allen ans jeweilige system angepasst werden.
>
>
> bye, Andreas
> Ich bitte die sicherlich zahlreich vorhandenen Rechtschreibfehler respective
> Tippfehler zu ignorieren :->
--
Mehr Informationen über die Mailingliste linux-l