長南です。 うーん、難しいですね。でも……、 たけ(tk)さんのメールより [vine-users:071073] > > [root@EDiCube-02 root]# cat /var/spool/lpd/lp7900/status.pr > : > printing 'root@localhost+64' starting OF 'bfout1' at 2005-03-23-15:18:37.051 ##A=root@localhost+64 number=64 process=20068 > lp7900: Wait_for_pid: OF filter died with signal 'Hangup' at 2005-03-23-15:26:36.416 ## A=<NULL> number=0 process=20068 > OF filter problems, error 'JSIGNAL' at 2005-03-23-15:26:36.417 ## A=root@localhost+64 number=64 process=20068 ここから、どうやら output filter の問題らしいと思います。 Miracle Linux で使っていたものと、下のフィルタは全く同じですか。また、 このフィルタで印刷は出来ないとしても、切り替え機は切り替っているでしょうか。 > [root@EDiCube-02 root]# cat /usr/libexec/filters/bfout1 > #!/bin/sh > echo -n '@bFOUT1;' > cat /usr/share/doc/LPRng-3.8.21/LPRng-HOWTO.html にこんなふうに書いてあります (16.4. OF Filter)。 During operation, the lpd server will send the special stop sequence of \031\001 to the :of filter. The filter must then suspend itself using a kill -STOP operation. The lpd server will detect that the :of filter has suspended itself and then will perform other printing operations. After the other printing operations have been completed, the :of will then be sent a kill -CONT signal. output filter の中で、自分自身を kill -STOP する必要があるのではない でしょうか。かなりいい加減ですが、下のように書き加えてみました。 本当は、\031\001 を受け取ったことを確認してから、kill -STOP するべき なのでしょうが、どうやっていいか私にはわからないので。 [root@EDiCube-02 root]# cat /usr/libexec/filters/bfout1 #!/bin/sh pid=`ps ax |grep $0 |cut -f 2 -d ' ' |head -1` echo -n '@bFOUT1;' kill -STOP $pid cat 泥縄で調べたことですし、こちらでもちょっと試してみたとは言っても、 環境がかなり違います。プリンタはパラレルポートに直に付いていますし、 Vine のバージョンも 2.6r4 です。また、うちでは、たけ(tk)さんの フィルタに似たものを使って ls | lpr -Praw を実行しても、「OF filter died with signal 'Hangup'」になるのではなく、プロセスの進行がただ 止まってしまうだけです(ps ax をやってみると cat が S 状態で存在して いて、印刷データを受け取れないでいるらしい)。ですから、たけ(tk)さんの ところでは、上のやり方だけではうまく行かないかもしれません。 ついでに書いておくと、このマシンでは印刷データを加工しないわけですから、 output filter の代わりに input filter を使っても、ほぼ同じではないかと 思います。たけ(tk)さんのフィルタをそのままにして、printcap で of を if に書き換えたらどうなるでしょうか。もっとも、何か不都合が出てくるかも しれません。LPRng-HOWTO.html によれば、次のような違いがあるそうですから (16.4. OF Filter)。 While the various file filters are invoked on a once per print file basis, the :of filter is invoked on a once per print job basis. なお JSIGNAL についても LPRng-HOWTO.html に説明があります。 # もう眠いので、ボケたことを書いているかもしれません。でもお急ぎのこと # でしょうから、出してしまいます。変なところがあったら、ご容赦。 -- 長南洋一