treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

プリンタからバグった印刷がずっと印刷される

プリンタから「意味不明な文字列」「文字化けしたような文字列」が印刷されたことはありませんか?
今日、今まで正常動作していたプリンタ(正確にはそのプリンタをインストールしたOS)に何か異常があったらしく、変な印刷が止まらなくなった、という対処う方法のご報告です。

以前も同様の症状が発生しました件、今回は再報告となります。

以前はプリンタドライバに端を発した「プリンタから勝手に(自動で)変な文字列が印刷される」という症状でした。

blog.treedown.net

今日は正常稼働していたプリンタが、ある日ちょっとおかしくなったらしい、と言うところからスタートします。

夜に受けた問合せ

「プリンタの印刷が止まらないんだよね、どうにかならないもんでしょうか?」
そう声を掛けられた時刻はもう夜、仕事熱心ですね。
なんでも、プリンタから意味不明な文字列が印刷され続けるらしい。
「…B…なんとか、って書いてあります、意味不明な文字列なんですよ。」
ほほう、で、印刷はどうなりました。
「で、コントロールパネルからプリンタを削除したんですよ。消したらさすがに印刷されないだろうと思って。そしたらね…。印刷が止まるどころか、出てくるわけです、プリンタ消えているのに。」
むむっ、そうですか。
「とりあえず、放っておくと印刷され続けるので、電源OFFにしました。」
そこは懸命な対処方法ですね。

「プリンタ削除してもバグった印刷が継続されてしまいますから、どうにか…。」

お困りのようですね。それでは早速調査に掛かります。

まずはPCから

コントロールパネルの「デバイスとプリンタ」画面を開いて確認してみます。なるほど、確かに対象のプリンタは削除されたのでもう存在していないことは確認できました。

f:id:treedown:20170420012622p:plain

ちょっと踏み込んだところを調べるために、メニューバーに表示される「プリントサーバープロパティ」を開きます。どれかプリンタを選択するとメニューバーに表示されます。これがトラブルシューティングに意外と便利。
画面を開いてポートやドライバのタブを開いて確認してみると、削除したはずのプリンタに設定されていたポートやドライバが残存していることが分かりました。

f:id:treedown:20170420012651p:plain

「削除した」という話だったけど、プリンタオブジェクトだけ削除してて、ドライバとかは消さなかったのかな?とも思いましたが、ポートの設定変更をする時に「使用中だから設定変更できないよ」みたいなメッセージが表示されてポートの設定は変更できませんでした。
ん?おかしいな…。
試しに、同じプリンタを同じ名称で改めてプリンタ追加をやってみると…
「同名のプリンタが存在しているから追加できません」みたいなメッセージが表示され、プリンタの追加ができない状態になっていました。
「削除した」という話だったけど、なんとなく残存しているように思えます。

ここでちょっとプリンタを見てみよう、という流れになり、電源をOFFしていた現物のプリンタを確認してみることにしました。電源再投入。

プリンタを監視

プリンタの現物を見てみます。このプリンタはネットワーク経由で内蔵のプリンタサーバ経由で印刷するタイプ、なのでブラウザから設定やジョブを見ることができます。
プリンタに届くジョブを監視していたら確かに数分に一回謎のジョブが対象のPC(のIPアドレスを発信源として)から届きます。
実際に印刷されないように画面上のジョブキャンセル(削除)操作を実行し、ジョブを停止します。
モグラたたきのようです。ジョブが送られてきては、ジョブキャンセル、コンピュータは粛々と処理を実行しますので人間の手で止めるのはなかなかに骨が折れます。

ここでふと思いました。
ジョブキューが残ってるだけじゃないの?

印刷ジョブキューを確認する

一旦印刷ジョブがキューされたら、そのジョブをキャンセルなりで消すまでOS上に残存します。
さっそく確認してみました。
まずは、さっき開いた「プリントサーバーのプロパティ」画面から詳細設定タブを開きます。

f:id:treedown:20170420012801p:plain

ここにOSのスプールフォルダのパスが記述されています。これを参照して、エクスプローラでスプールフォルダを開いてみました。

f:id:treedown:20170420012818p:plain

おお、あるよ、このフォルダに印刷ジョブが残っている限り、永遠に謎の印刷は継続することになります。
となると、このフォルダに格納された印刷ジョブたるファイルたちを消してやればよいことになります。
早速消そうとしたら…

「このファイルは消せません」見たいなエラーでOSに怒られてしまいました。
そうでした。キューされた印刷ジョブってPrint Spoolerサービスでロックされています。
早速サービス(services.msc)を起動して…

f:id:treedown:20170420012840p:plain

いったんサービスを停止します。

サービスを停止すれば、ファイルのロックは外れます。
問題の原因となっている印刷ジョブファイルを消してしまいましょう。

f:id:treedown:20170420012906p:plain

このフォルダのファイルはPrint Spoolerサービスが停止していれば消すことが可能になります。不安な場合は移動でもOKです。再利用できるかどうかは知りませぬが。

あーすっきり消えました。フォルダの中身は空っぽに。

とりあえずここでPrint Spoolerサービスを再度起動します。一回OS再起動でまっさら状態に戻してもいいですね。Print Spoolerサービスが始動すれば、現象が再現するかどうかによってこの問題が対処できたかどうかが切り分けできます。

これで、印刷ジョブが来ないことを確認します。再度プリンタ側のジョブを監視して、と。
数分待ちましたが印刷ジョブは来ませんでした。テスト印刷やってみるとテスト印刷はサクッと完了。
でも変な印刷ジョブはもう来ません。スプールフォルダの残存データを消したから動作は正常に戻ってくれたようです。

と、このようなレアケースに遭遇することは稀かと思いますが、いちおうこういうこともあるよ、という一例でした。