vine-users ML アーカイブ



[vine-users:071104] Re: ls > /dev/lp0 で /dev/lp0: Device or resource busy になる

  • From: 長南洋一 <cyoichi@xxxxxxxxxxxxxxx>
  • Subject: [vine-users:071104] Re: ls > /dev/lp0 で /dev/lp0: Device or resource busy になる
  • Date: Fri, 25 Mar 2005 00:39:34 +0900 (JST)
長南です。

うーん、難しいですね。でも……、

たけ(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 に説明があります。

# もう眠いので、ボケたことを書いているかもしれません。でもお急ぎのこと
# でしょうから、出してしまいます。変なところがあったら、ご容赦。

-- 
長南洋一