マックの小部屋


無保証

このページに書かれている内容やパッチの動作について一切の保証はいたしません。利用に伴う費用・損失等全てのことがらについて利用者がその責任を負うものとします。


転載について

このページに記載されているパッチの転載・再利用は自由に行ってくださってかまいません。


netatalkでQDプリンタを使う

以下、netatalkでQDプリンタのキューを作成し使用する方法です。

netatalkは、PSプリンタしかサポートしていませんが、比較的簡単な改造で、一部のQDプリンタを使用することができます。

利用可能なプリンタの最低条件として

です。但し、これを満たしても動くかどうかはわかりません。HP社のプリンタなら多分動くと思います。

対応バージョン

netatalk1.4b2+asun2.1.2/2.1.3で確認しています。これ以外のバージョンでも近ければ動くと思います。

手順

以下のパッチを切り取り、papd.patchと名前を付けてセーブし、netatalkのソースディレクトリのルートへ移動する。

cd etc/papd
patch -p1 < papd.patch

これでパッチは終了。後は、netatalkのドキュメントに従ってコンパイル、インストールを行う。

最後にpapd.confに以下のように使用したいプリンタの定義を記述する。
lj4ljpro¥:HP LaserJet 4LJ Pro:pr=lp:op=root:pd=RAW:
  1. プリンタ名の所に機種名(タイプ)も含めて記述する。区切りは:だが、papd.confの区切りと同じなので¥(バックスラッシュ)でエスケープする。機種名は、AppleTalk上での機種名である。これに付いては利用者で調べてください。
  2. ppdファイルの代わりにpd=RAWを指定する。これを指定するとプリンタドライバから送られてきたデータをそのままlprへ渡すように動作を変更する。

機種名(タイプ)

一応、わかっているものを書いておきます。

タイププリンタ
HP LaserJet 4LJ ProHP社 LaserJet 4LJ Pro
DeskWriterHP社 DeskWriter(DeskJetも含めシリーズ共通)

パッチ

----ここから----
diff -cPr papd.org/file.c papd/file.c
*** papd.org/file.c	Wed May 21 02:35:42 1997
--- papd/file.c	Sat Feb 17 23:04:54 2001
***************
*** 40,45 ****
--- 40,64 ----
      }
  }
  
+ markline2( start, stop, pf )
+     char		**start, **stop;
+     struct papfile	*pf;
+ {
+     char		*p;
+ 
+     if ( PF_BUFSIZ( pf ) == 0 && ( pf->pf_state & PF_EOF )) {
+ 	return( 0 );
+     }
+ 
+     *start = pf->pf_cur;
+     *stop = pf->pf_end - 1;
+     if ( *stop == *start ) {
+ 	return( 1 );			/* don't return len 0 lines */
+     } else {
+ 	return( *stop - *start );
+     }
+ }
+ 
  consumetomark( start, stop, pf )
      char		*start, *stop;
      struct papfile	*pf;
diff -cPr papd.org/magics.c papd/magics.c
*** papd.org/magics.c	Fri May 30 09:28:03 1997
--- papd/magics.c	Sat Feb 17 23:04:54 2001
***************
*** 8,14 ****
--- 8,23 ----
  #include 
  #include 
  
+ #include 
+ #include 
+ #include 
+ #include 
+ #include 
+ #include 
+ #include 
+ 
  #include "file.h"
+ #include "printer.h"
  #include "comment.h"
  
  ps( infile, outfile )
***************
*** 18,24 ****
      struct comment		*comment;
  
      for (;;) {
! 	if ( comment = compeek()) {
  	    switch( (*comment->c_handler)( infile, outfile )) {
  	    case CH_DONE :
  		continue;
--- 27,59 ----
      struct comment		*comment;
  
      for (;;) {
! 	if (strcmp(printer->p_ppdfile, "RAW") == 0) {
! 	    switch ( markline2( &start, &stop, infile )) {
! 	    case 0 :
! 		/* eof on infile */
! 		outfile->pf_state |= PF_EOF;
! 		lp_close();
! 		return( 0 );
! 
! 	    case -1 :
! 		return( 0 );
! 	    }
! 	    if ( infile->pf_state & PF_BOT ) {
! 	        syslog( LOG_ERR, "reset PF_BOT." );
! 		infile->pf_state &= ‾PF_BOT;
! 
! 		/* set up spool file */
! 		if ( lp_open( outfile ) < 0 ) {
! 		    syslog( LOG_ERR, "lp_open failed" );
! 		    spoolerror( outfile, "Ignoring job." );
! 		}
! 	    }
! 
! 	    /* write to file */
! 	    lp_write( start, stop - start + 1 );
! 	    consumetomark( start, stop, infile );
! 	}
! 	else if ( comment = compeek()) {
  	    switch( (*comment->c_handler)( infile, outfile )) {
  	    case CH_DONE :
  		continue;
----ここまで---

トップへ戻る