■症状
印刷が途中で停止してしまう
■詳細
・Linux上で、Samba を実行し、Windows2000SP3から AcrobatReader
を使用して、そのLinuxBoxに接続したプリンターに印刷したとこ
ろ、全10ページのうち3ページ目を出力した時点で停止してしまっ
た。
■確認1
・上記時点で、プリンターの「ジョブ」ランプは点灯したままの
状態。
これは、プリンター内のバッファにデータが残っている状態。
LinuxBoxからのデータ送信は停止してしまっている状態。
・しばらく放置後、lpq で確認すると該当 job は、stalled の
状態になっている。
・lprm によるクリア、プリンターの再起動、サーバーの再起動、
クライアントの再起動を行い数回行うが、同じ状態。
■確認2
・Samba の影響かどうかを確認。
・Windowsの AcrobatReader の印刷先をファイルに変更し、
foo.dat として保存。
ファイルをLinuxBoxに持っていき、lpr foo.dat で出力。
・このファイルは、10ページ分のデータをLIPS4のドライバで出力
したもので、約3.8Mbytes。
・最初と同じように途中で停止してしまう。
■確認3
・lpd の影響かどうかを確認。
・上記確認2のファイルを cat foo.dat > /dev/lp0 で出力。
・最初と同じように途中で停止してしまう。
■確認4
・PDFファイル、プリンタードライバの影響を確認。
・WindowsPCに直接プリンターを接続し、AcrobatReader から出力
すると問題なく最後まで出力された。
■その他
・Windows2000 - Samba の状態で、画像を多く含む Word 文書を印
刷した際にも同様にプリンターが停止する症状がある。
・他のPCサーバー(他メーカー、異ハード構成、OSは同一)にも同様
の設定をして実験したところ、同じ症状が出た。
■想像...
こんなことが起きてしまっているのでは、と想像。
・印刷データが大きくなった場合に停止している。
・プリンターのバッファが一杯になった時点で、プリンターから
サーバーに対し「待て」がかかる。
・プリンターの処理が進み、プリンターは「受信準備OK」をサー
バーに指示するが、サーバーが送信を開始しない。
■環境(プリンター)
Canon LBP-740e
パラレルポート接続
■環境(サーバーハードウェア)
DELL PowerEdge 600SC
Pentium4 1.7GHz
256 Memory
IDE 40G x 3 RAID5 (有効 80G)
■環境(サーバーソフトウェア)
# cat /etc/redhat-release
Red Hat Linux release 8.0 (Psyche)
# uname -r
2.4.18-14
# rpm -q LPRng
LPRng-3.8.20-1
■環境(設定)
# head -n25 /etc/printcap
# /etc/printcap
#
# DO NOT EDIT! MANUAL CHANGES WILL BE LOST!
# This file is autogenerated by printconf-backend during lpd init.
#
# Hand edited changes can be put in /etc/printcap.local, and will be
included.
lbp-740:\
:ml#0:\
:mx#0:\
:sd=/var/spool/lpd/lbp-740:\
:sh:\
:lp=/dev/lp0:
以下略
# cat /etc/modules.conf
alias parport_lowlevel parport_pc
alias eth0 e1000
alias scsi_hostadapter aic7xxx
alias scsi_hostadapter1 megaraid
alias usb-controller usb-ohci
/etc/lpd.conf はデフォルトのままです。
■まとめ
・要するに、Windows上で作成された、LIPS4のデータを
Samba - lpr - lpd - /dev/lp0 - プリンター
と、そのまま出力してくれればいいのですが...
・「ここを調べてみたら?」や、「ここの設定をこうしてみたら?」
等、何かアドバイスをいただければと思います。
よろしくお願いします。
_/_/_/_/
_/_/_/_/ Hideki Suzuki
_/_/_/_/ hi...@dainana.jp
_/_/_/_/
印刷時の不具合について、なんとか解決しました。
■対処方法
spintime の設定を変更し、対処した
■参考文書
Kernel 付属の parport.txt
/usr/src/linux-xxxx/Documentation/ にあります。
xxxx は、kernel のバージョンです。
■詳細
・/proc/sys/dev/parport/parport0/spintime
の値 初期値 500 を 125 にした。
・但し、直接修正しても、ファイルが「つかまれている」
様子で正しく修正できない。
・/etc/rc.d/rc.local に下記を付加し、処理した。
-----8<-----8<-----
rmmod lp
rmmod parport_pc
echo 125 > /proc/sys/dev/parport/default/spintime
insmod parport_pc
-----8<-----8<-----
・default/spintime を指定することにより、parport0/spintime
も同じ値になる。
・spintime とは (上記、parport.txt より抜粋)
> The number of microseconds to busy-loop while waiting
> for the peripheral to respond.
ということで、プリンターとのやり取りのタイミングについて
関連しているものと思われる。
spintime の設定については、もっといい方法があるかもしれ
ません。
ご存知の方がいらっしゃいましたら、ご指摘ください。
> ■症状
> 印刷が途中で停止してしまう
>
> ■詳細
> ・Linux上で、Samba を実行し、Windows2000SP3から AcrobatReader
> を使用して、そのLinuxBoxに接続したプリンターに印刷したとこ
> ろ、全10ページのうち3ページ目を出力した時点で停止してしまっ
> た。
Hideki Suzuki <hi...@dainana.jp> wrote
> ・/etc/rc.d/rc.local に下記を付加し、処理した。
> -----8<-----8<-----
> rmmod lp
> rmmod parport_pc
> echo 125 > /proc/sys/dev/parport/default/spintime
> insmod parport_pc
> -----8<-----8<-----
(snip)
> spintime の設定については、もっといい方法があるかもしれ
> ません。
> ご存知の方がいらっしゃいましたら、ご指摘ください。
/etc/modules.conf に以下のように記述すればよいかと。
post-install parport echo 250 > /proc/sys/dev/parport/default/spintime 2>/dev/null || :
--
SEKINE Tatsuo:
http://www.sdri.co.jp/~tsekine/
tse...@sdri.co.jp(business) System Design & Research Institute Co.,Ltd.
tse...@ylug.org(private) Yokohama Linux Users Group
情報ありがとうございます。
> /etc/modules.conf に以下のように記述すればよいかと。
>
> post-install parport echo 250 > /proc/sys/dev/parport/default/spintime 2>
> /dev/null || :
man modules.conf
> post-install module command
> 指定したモジュールをインストールした後に command を実行
> する。
ですね。
もしかしたら、pre-install の方が、上手くいくかも知れません。
但し、現状では、既存の modules.conf の parport の行を削除
しても、parport モジュールがインストールされていたので、上
手くいくかどうか心配です。
サーバーが稼動し始めてしまいましたので、次回停止可能な時に
トライしてみます。
大変参考になりました。
Hideki Suzuki <hi...@dainana.jp> wrote
> > post-install parport echo 250 > /proc/sys/dev/parport/default/spintime 2>
> > /dev/null || :
>
(snip)
>
> もしかしたら、pre-install の方が、上手くいくかも知れません。
> 但し、現状では、既存の modules.conf の parport の行を削除
> しても、parport モジュールがインストールされていたので、上
> 手くいくかどうか心配です。
多分 post-install じゃなきゃだめです。
/proc/sys/dev/parport/default/spintime
という proc エントリ(仮想ファイル)は、parport モジュールがロード
されないとできません。
/proc/sys 以下のエントリについては
rc.sysinit 実行中にエントリが存在する
→ /etc/sysctl.conf に記述
モジュールをロードするとエントリが作成される
→ /etc/modules.conf の post-install に記述
になると思います。
> サーバーが稼動し始めてしまいましたので、次回停止可能な時に
> トライしてみます。
サーバを止めなくても、プリンターさえ止めてよければ確認できますよ。
# /etc/init.d/lpd stop
# /sbin/modprobe -r lp
# /sbin/modprobe -r parport_pc
# /sbin/modprobe -r paport
<ファイル修正>
(それと、/proc/sys/dev/parport がないことの確認)
# /sbin/depmod -a
# /etc/init.d/lpd start
パラレルポートが 2 つ以上あるなら無理ですが。
返信が遅れてすみませんでした。
教えていただいたとおり、/etc/modules.conf への記述のみで目
的は達成できました。
プリンターのみの停止、サーバーの再起動の双方とも、テストし
確認できました。
詳しく説明していただき、ありがとうございました。
/proc/sys 以下の生成について、理解を深めることができました。
> 多分 post-install じゃなきゃだめです。
> /proc/sys/dev/parport/default/spintime
> という proc エントリ(仮想ファイル)は、parport モジュールがロード
> されないとできません。
>
> /proc/sys 以下のエントリについては
> rc.sysinit 実行中にエントリが存在する
> → /etc/sysctl.conf に記述
> モジュールをロードするとエントリが作成される
> → /etc/modules.conf の post-install に記述
> になると思います。
>
> > サーバーが稼動し始めてしまいましたので、次回停止可能な時に
> > トライしてみます。
>
> サーバを止めなくても、プリンターさえ止めてよければ確認できますよ。
>
> # /etc/init.d/lpd stop
> # /sbin/modprobe -r lp
> # /sbin/modprobe -r parport_pc
> # /sbin/modprobe -r paport
> <ファイル修正>
> (それと、/proc/sys/dev/parport がないことの確認)
> # /sbin/depmod -a
> # /etc/init.d/lpd start
_/_/_/_/