現在、うちの研究室では 5 台の FreeBSD マシンが動いていて (うち 1 台は私の個人研究室)、 すべてのマシンに CANON のレーザープリンタ LASER SHOT (LBP) が ついています (詳しくはこちら)。
このページでは、その利用に関して調べたことなどを (備忘録として) あげておきます。 ただし、いずれも 5 年以上経っている古い物ばかりです。 (03/09 2001)
年度変わりにあわせて、普段使用していないプリンタを少し整理し始めました。 LBP-730 以外は一時引退となりそうです (現役復帰の可能性はあります)。 (04/03 2002)
以下、それぞれ LBP-A405Jr, LBP-A404GII, LBP-B406GII, LBP-730 と略します (最後の 2 つは同じ機種なので区別はしません)。
購入時期は正確にはわかりませんが、多分 LBP-A405Jr と LBP-A404GII が 一番古くて、次が LBP-B406GII、そして LBP-730 がこの中では 一番新しいのではないかと思います。
目次へプリンタ | インターフェース | 紙サイズ | プリント速度 | 搭載メモリ |
---|---|---|---|---|
LBP-A405Jr | パラレル | A4 以下 | 5.5 枚/分 | 1.5MB |
LBP-A404GII | パラレル/シリアル | A4 以下 | 4 枚/分 | 1.5MB |
LBP-B406GII | パラレル/シリアル | B4, A4 以下 | 8 枚/分 | 2MB |
LBP-730 | パラレル/シリアル | A3, B4, A4 以下 | 8 枚/分 | 4MB |
こんなんでわかるでしょうか (^^;
目次へプリンタのパネル上での給紙の設定とソフトウェア上の給紙設定の 関係などについて調べてみました。
調査に使用した項目は以下の通りです。
給紙コマンド | カセット | トレイ | ||||
---|---|---|---|---|---|---|
[C] | [T] | [B] | [C] | [T] | [B] | |
なし | C | X1 | T | NT | T | T |
0 | C | X1 | C | C | NC | C |
1 | NT | X1 | T | NT | T | T |
2 | C | X1 | C | C | NC | C |
10 | C | X1 | C | NT | NC | T |
11 | C | X1 | C | NT | NC | T |
12 | C | X1 | C | NT | NC | T |
給紙コマンド | カセット | トレイ | ||||
---|---|---|---|---|---|---|
[C] | [T] | [B] | [C] | [T] | [B] | |
なし | C | X1 | X2 | NT | T | T |
0 | C | X1 | X2 | C | T | T |
1 | NT | X1 | T | NT | T | T |
2 | C | X1 | X2 | C | T | T |
10 | C | X1 | X2 | NT | T | T |
11 | C | X1 | X2 | NT | T | T |
12 | C | X1 | X2 | NT | T | T |
給紙コマンド | カセット | トレイ | 自動 | ||||||
---|---|---|---|---|---|---|---|---|---|
[C] | [T] | [B] | [C] | [T] | [B] | [C] | [T] | [B] | |
なし | C | X1 | C | NT | T | T | C | T | C |
0 | C | X1 | C | C | T | C | C | T | C |
1 | NT | X1 | T | NT | T | T | NT | T | T |
2 | C | X1 | C | C | NC | C | C | NC | C |
10 | C | X1 | C | NT | T | T | C | T | C |
11 | C | X1 | C | NT | T | T | C | T | C |
12 | C | X1 | C | NT | T | T | C | T | C |
給紙コマンド | カセット | トレイ | 自動 | ||||||
---|---|---|---|---|---|---|---|---|---|
[C] | [T] | [B] | [C] | [T] | [B] | [C] | [T] | [B] | |
なし | C | NC | C | NT | T | T | C | T | T |
0 | C | T | C | C | T | C | C | T | C |
1 | NT | T | T | NT | T | T | NT | T | T |
2 | C | NC | C | C | NC | C | C | NC | C |
10 | NT | T | T | NT | T | T | NT | T | T |
11 | C | NC | C | C | NC | C | C | NC | C |
12 | C | NC | C | C | NC | C | C | NC | C |
プリンタホストマシンは立ち上がっていて、プリンタの電源が入っていない場合の スプールの挙動についてテストしてみました。項目は以下の通りです。
プリンタ | ジョブ | lpq の 1 行目の表示 |
---|---|---|
LBP-A405Jr | そのうちに消える | lp is ready and printing |
LBP-A404GII | そのうちに消える | lp is ready and printing |
LBP-B406GII | 残ったまま | lp is ready and printing |
LBP-730 | 残ったまま | waiting for lp to become ready (offline?) |
いずれの項目についても、LBP-730 のものが正しいような気がします。 これらの違いが、プリンタによるものか、ホストマシンの OS によるものか、 ホストマシン自身 (ハードウェア) によるものかはわかりません。 ただし、メッセージに関しては OS によるものでは、と予想しています。
現在 (07/09 2002) の FreeBSD(98)2.2.8R + LBP-730 で同じテストをしてみました。以前 LBP-A405Jr がつながっていたマシンです。
プリンタ | ジョブ | lpq の 1 行目の表示 |
---|---|---|
LBP-730 | 残ったまま | lp is ready and printing |
ということで、「残ったまま」かどうかはプリンタに依存し、
lpq のメッセージは OS の version に依存するらしいことがわかりました。
(07/09 2002)
LIPS に関するソフトのパッチ等をここで紹介します。
最近、ghostscript を 7.05 から 7.07 にバージョンアップしたら、 LIPS プリンタで 1 枚目が正常に印刷されない場合があることに 気がつきました。 ある PDF ファイルを acroread (または pdf2ps) で PS にしたものを psnup -2 にしたもの (A4) を印刷したときに起きていました。
それは ghostscript 7.06 辺りから発生する、gdevlips-2.4.0 の不具合 なので、それを修正したパッチを gdevlips-240-2 パッチとして公開します。 詳しくは 「パッチ等」、 及び gdevlips-240-2 付属ドキュメント (readme-gdevlips240-2) を参照して下さい。
下 (「その他の情報 (11/07 2003)」) にあげたバグを修正したパッチを、 「その他の情報 (11/06 2003), (06/27 2003)」 で紹介した gdevlips-ppsz.patch, gdevlips-ulse.patch と統合して gdevlips-240-1 パッチとして公開することにしました。 詳しくは 「パッチ等」、 及び gdevlips-240-1 付属ドキュメント (readme-gdevlips240-1) を参照して下さい。
下 (「その他の情報 (11/06 2003)」) に書いた問題ですが、 少し実験してみました。その結果、
バグの方は詳しくいうと、CSI 80p, 81p で指定できる紙サイズの最大長は 1/720 インチ単位で縦 11906, 横 8419 のようで、 いずれか一方でもこのサイズを越えるとこのサイズ指定は無視されるようです。 しかし、gdevlips-2.4.0 では最大長を 11900, 8420 としているので、 それでそのようなユーザ定義サイズ指定が無視されてしまっているようです。 このバグに関しては、後で gdevlips-2.4.0 へのパッチを作成する予定です。
奥村@松阪大 さん (注: 2004 年 4 月から三重大へ移られたようです) の運営されておられる 「TeX Q & A」の WWW ページで、 LIPS プリンタで OpenOffice の作った PDF ファイルの A3 の印刷がうまくいかない、という事例が報告されました (23273: gs による pdf ファイルの A3 出力)。 その後、その掲示板上、あるいはメールで元記事投稿者の Lykeion さんと 色々情報交換をした結果、 どうやら gdevlips-2.4.0 に次のようなパッチを入れるのが良さそうだ、 ということになりましたので、ここで公開します。 なお、これは下 (06/27 2003) で紹介した gdevlips-ppsz.patch とは衝突しませんので、 両方とも当てることもできますし (それがいいでしょう)、 一方のみ当てることもできます。
なお、このパッチの作成にあたり、Lykeion さんには詳しい情報や サンプルファイル、パッチに関する意見などを頂きました。 どうもありがとうございました。
私が普段 LIPS コードの解析に使っている簡単な (100 行弱) C のプログラムをここに置いておきます。 なお、先頭のコメント部分に日本語が含まれますが そこは EUC コードになっていますので、 Shift_JIS 環境などの場合は、コメント部分を削除してから コンパイルして下さい。
lipsb2t.c (2162 Byte; EUC コード)LIPS プリンタで直接 LIPS コードのダンプ出力を吐かせることもできますが、 大量の紙を使用しますし CSI や DCS などを表示してくれませんので、 多少こちらの方が便利だろうと思います。 ただ、本当は各コマンドの意味も表示させると便利なのでしょうが、 そこまではやっていません。
下 (06/27 2003, 06/24 2003) に書いた、 Ghostscript ドライバ gdevlips-2.4.0 の、 -sPAPERSIZE=b4 の不具合の問題ですが、 やはり bug のようです。
対処するには、以下の 2 つの方法があります。
gdevlips-2.4.0 用のパッチ (gdevlips-ppsz.patch: 4228 Byte) (06/27 2003)
なお後者は、例えば Ghostscript 7.05 だと、gs_statd.ps に
/isob4 {709 1002 //.setpagesize exec} bind def
/b4 /isob4 load def
のように書かれている部分を
/isob4 {709 1002 //.setpagesize exec} bind def
% /b4 /isob4 load def
とコメントアウトし、その代わりその下に
/jisb4 {729 1032 //.setpagesize exec} bind def
と書かれている部分に
/jisb4 {729 1032 //.setpagesize exec} bind def
/b4 /jisb4 load def
という行を入れてやれば OK です。
ただし、この後者の対処法では、 B4 等の定義済みではないサイズの場合は 下 (06/24 2003) と同じ問題が発生します。
下 (06/24 2003) に書いた、 gs -sPAPERSIZE=b4 の不具合ですが、 どうも PS ファイルによっては -sPAPERSIZE=jisb4 でも発生する可能性がある ことがわかりました。
以下のようにして作った 3 種類の PS ファイルを調べてみました:
file2.ps, file3.ps は gs -sPAPERSIZE=b4 なら
CSI 80;7090;10020p
gs -sPAPERSIZE=jisb4 なら
CSI 24p
が生成されます。しかし、file1.ps の場合、どちらの場合でも
CSI 80;7090;10020p
となってしまいます。
PS ファイルのヘッダを比較してみると、 file1.ps, file3.ps には
%%DocumentPaperSizes: B4
のような行が含まれますが、file2.ps には
%%DocumentPaperSizes: A4
と書かれています (PS ファイルの最後の方でスケール変換しているようです)。
また、file1.ps,file2.ps には BoundingBox 行はありませんが、file3.ps
には
%%BoundingBox: 0 0 729 1032
と書かれています。これらが影響しているようにも思えます。
そして、以上の問題は Ghostscript の gs_statd.ps を書き換えて、 b4 の場合はすべて jisb4 になるようにすれば一応は解決し、 いずれの場合でも (file1.ps でも file2.ps でも file3.ps でも、 そして -sPAPERSIZE が b4 でも jisb4 でも) "CSI 24p" が生成されるようになります。 ただし、これは問題が表面化しなくなるだけで バグは相変わらず残っているのだろうと思いますので、 修正パッチは考えてみようと思います。
大森さんによる Ghostscript の lips4 ドライバ (gdevlips-2.4.0) を使って b4 の PS ファイルを印刷しようとして気がつきましたが、 -sPAPERSIZE=b4 だとどうも不正な LIPS コードが生成されてしまいました。 -sPAPERSIZE=jisb4 だと問題なく、とりあえずはそれで大丈夫なようです。 (cf. lips4 ドライバの WWW ページ)
-sPAPERSIZE=b4 の場合に生成される LIPS コード内の ページフォーマット命令は
CSI 80;7090;10020p
となっているのですが (7090,10020 は 1/720 inch 単位の紙の幅)、
これは不正で、どうやら
CSI 80;10020;7090p
が正しいようです (常に大きいサイズから指定する必要がある)。
そして正しくない上のコマンド自体が無視されるので、
結局紙のサイズが A4 (default) などと認識されてしまい、
最悪の場合印刷もできない、という状態になってしまいます。
gdevlips4 のソースの対応する部分を眺めてみたのですが、 landscape の場合の入れ換えのコードのような物があり、 その辺にバグがあるのでは、と考えています。 パッチができたらここで公開したいと思います。
なお、-sPAPERSIZE=b4 の場合は上にあるように "80" という 「ユーザ定義紙サイズ」を使うのですが、-sPAPERSIZE=jisb4 では
CSI 24p
というコマンドが使われ、これは「B4」を意味するので問題なく動きます。
LaTeX のファイルのプリントアウトは、現在 2 種類の方法を使っています。
通常研究室のユーザは Solaris のマシンを使っていて、 そこから PostScript ファイルを CANON の LBP でプリントアウトするときは、 Solaris の上の Ghostscript を使って PostScript を LIPS III の コードに変換し、それを FreeBSD のマシンへ送ってプリントアウト しています。
Ghostscript は VFlib 版ですが、和文の TrueType font は Solaris 2.6 の OpenWindows に含まれる Richo の平成明朝、平成ゴシックの フォント (/usr/openwin/lib/locale/ja/X11/fonts/TT/) を利用しています。 ただし、多少左右にずれるようで、vfontcap に ":ox#1300:" などを入れないと正しく表示されませんでした。