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