2012年4月21日土曜日

Printer Settings And Tools (BSD)


Printer Settings and Tools (BSD)

プリンタの設定と共有について、情報を集めています。特にUNIXワークステーションにプリンタをつなぎ、それをUNIX環境から、あるいはPCから利用する方法が中心です。

lbp-ifのウェブサイト移転に対応(2011-12-07)

このページではBSD系UNIXの印刷スプーラLPDを扱っています。実際にはSunOS 4.1.xでの設定例が中心です。Solaris 2.xなどSVR4系のOS でプリンタを接続して利用する方法は、「みんなでプリンタを使おう (Solaris編)」を御覧下さい。また、ネットワークプリンタを利用する方法は、長くなったので独立したページに引っ越しました。

みんなでプリンタを使おう (Solaris編)
ネットワークプリンタを使う

日経BP, Find'X(コンピュータ・通信分野の専門検索サイト)に「厳選お薦めサイト」として登録されました。

あなたはだいたい 人目のお客様です。(1997年3月1日以降)


おいおい説明しますが、たいていのプリンタは印刷したいファイルをただ流し込んだだけでは印刷できず、そのプリンタに合わせた変換が必要となります。どうやって変換するかも重要ですが、その前に、その変換をどのマシンで行なうかを決めなければなりません。

あるマシンからプリンタを使おうとするとき、そのマシンから見た対象のプリンタの接続形態によって、次のようにプリンタを分類することができます。

ローカルプリンタ
当該マシン(UNIXワークステーション)に直結されているプリンタ。た いていの場合は、シリアルポートまたはパラレルポートを介して接続 されます。この場合は他のマシンの助けを借りることはできないので、 印刷の設定や印刷データをプリンタ記述言語に変換する作業は、自前 で行なわなければなりません。
リモートプリンタ
他のマシン(UNIXワークステーション)を経由して印刷するプリンタ。 あるマシンに取っては"ローカルプリンタ"に見えるものは、別のプリ ンタからはリモートプリンタとして利用できます。
この設定がもっとも簡単です。印刷データを変換する作業は、プリン タがつながっているマシン(印刷サーバ)が行なうので、ただデータを 転送するだけで済みます。
ネットワークプリンタ
Ethernetインターフェイスなどを持っていて、どのマシンにも直結さ れずに、ネットワークに接続して利用するプリンタをこう呼ぶことに します。印刷データを自前で変換しなければなりません。

対象のプリンタがネットワークプリンタであっても、印刷は別のマシン(印刷サーバ)を経由して行なうときには、リモートプリンタとして設定します。

このページではまずローカルプリンタの接続と設定について扱い、次にネットワークプリンタの設定について書きます。リモートプリンタの設定方法については述べていません。悪しからず。リモートプリンタは、マニュアルや参考文献をちょっと調べればすぐに設定できますから頑張ってね。


レジストリからプリンタドライバを削除する方法

  • 最近売られているSun SPARCstation (おそらくSS10以降)にはセントロ ニクス互換パラレルポートを1基持っています。パラレルポートにプリ ンタを接続すると、シリアル接続よりも設定が簡単で、データの転送 も速いので、可能ならパラレル接続をお勧めします。
  • パラレルポートがあるのは、Sun SPARCstation 4/5/10/20以降の機種 とLX/Classic、そしてUltraシリーズです。IPC/IPX/SLC/ELCにもある かもしれませんが確認できません。
    SS1/2にはパラレルポートはありません。
  • SS 5/10/20のパラレルポートは特殊な形状なので、これを利用するに は専用のケーブル(Centronics-compatible Parallel Port Adapter(530-1857/JE(X976A/JE))、SunExpress価格 11,000円)が必要 です(SS4でも必要かもしれませんが確認できません)。私の所属する研 究室でもこのケーブルを使っています。
    LX/Classicのパラレルポートの形状は分かりません。
  • SS1、2のマザーボードを交換(アップグレード)してSS5相当にする製品 が、Cycle Computerや Axil Computer, Inc.から販売 されています。他社からも出ているようです。これらのボードにもパ ラレルポートが付いています。私の所属する流体研では、SS1をAxilの ボードでアップグレードしたマシンにCanon LBP-720というパラレルポ ートしか持っていないページプリンタを接続して使っています。
    (最近は安価なワークステーションがどんどん出ていますね。アップグ レードボードは今や良い選択肢とは言えないかもしれません。)

    SS1/2にはシリアルポートが2つあり、DB-25コネクタが2つついている のですが、マザーボードを交換するとこのうち一方、背面に向かって 左のポートAがパラレルポートになります。右のポ ートBはシリアルポートです。私はこれを逆だと勘違いしていて、長い こと無意味に悩みました。試してみればすぐ分かることなのに…。同 じボードを使っている方は気をつけて下さい。

    蛇足ですが、ポートBのシリアルポートに専用のY字ケーブルを接続す ると、シリアルポートを2つ使えます。

  • Sun Ultraシリーズや上記のようなアップグレードボードは、パラレル ポートのインターフェイスがDB-25コネクタになっています。このコネ クタはPCのプリンタポートと同じコネクタで、実際、PC用のプリンタ ケーブルがそのままSunワークステーションで使えます。

    ここでいうPCとは、DOS/V機とかAT互換機といわれているもののことで、 NEC PC-9800シリーズのことではありません。PC-9800シリーズのプリ ンタポートは世代によって異なりますが、PCと同じコネクタを持つ PC-9800は見たことがありません。ですから、PC-9800用のケーブルは 流用できないでしょう。(あぁそういえばNXとか出たっけ。あれはどう だったかなぁ。)

"/> パラレルポート接続の注意点とテスト方法


BSD系の印刷スプーラLPDで、プリンタをなるべく利用しやすいように設定する方法を説明します。目標は、

  1. lprコマンドで印刷できる。
  2. 漢字の入った文書も印刷できる。
  3. 非PostScriptプリンタであっても、PostScriptファイルを印刷できる。
  4. テキストファイルとPSファイルの違いを意識せずに印刷できる。ファ イルの種類の識別は利用者ではなく印刷スプーラが行う。
  5. プリンタの制御コード(ESC/PやLIPS IIなど)で書かれたファイルをプ リンタに流し込むことができる。(lprに"-l"オプションをつける。)

といったところです。これら全てを実現するのは、結構大変なんですよ。UNIX の解説書を読んだだけではできないはずです。

この節では、lprコマンドを使ってテキストファイルが印刷できるところまでを簡単に説明します。

LPDは、BSD系のOSで採用されています。SunOS 4.xは厳密に言えばBSD系の OSではありませんが、印刷スプーラはLPDを使います。 Solaris 2.xなどSVR4系のOSでプリンタを接続する方法は、 「みんなでプリンタを使おう (Solaris編)」を御覧下さい。


ディレクトリ内のいくつかのファイルは青色で

フィルタを用意する

たいていのプリンタは、テキストファイルをそのまま流し込んでも意図した通りの印刷結果が得られません。これはなぜかというと、

  • 改行コードが違うから
  • 漢字コードが違うから
  • そのプリンタが特殊なコード(ページ記述言語)で書かれた入力以外を 受け付けないから

などの理由が考えられます。

この障害を乗り越えてテキストファイルを印刷できるようにするためには、 フィルタと呼ばれるコード変換ソフトウェアを用意する必要があります。フィルタは例えばテキストファイルをプリンタが理解できるコードに変換する、などの仕事を行います(もっといろいろな仕事をさせることも出来ます)。このフィルタさえ用意できれば、半分勝ったようなものです。

テキストファイルを扱うフィルタには、例えば次のようなものがあります。 (すべて私の所属する流体研で実際に使われている/使われていたものです。)

  • テキストファイル→PostScript
    SunOS-JLE標準のコマンドjtopsが使えます。漢字コ ードはEUCを扱うことができます。
  • テキストファイル→LIPS II
    LIPS II (LIPS2)はキャノンのレーザープリンタで使われているページ 記述言語です。テキストファイルをLIPS IIに変換するフィルタには、 lbp-ifがあります。漢字コードは、JISおよびShift JIS、あるいはJISおよびEUC漢字コードを扱うことが出来ます。
  • テキストファイル→ESC/P
    esc-ifというフィルタがあります。漢字コードは lbp-ifと同じく、JISおよびShift JIS、あるいはJISおよびEUC漢字コ ードを扱うことが出来ます。
    ESC/Pコードを受け付けるプリンタは、インクジェットプリンタ、ドッ トインパクトプリンタなどを中心にたくさんあります。ちなみに キャノンの最近のプリンタは、LIPSだけではなくESC/Pにも対応していま す。実際に印刷してみると、lbp-ifで印刷するよりもesc-ifで印刷 した方が、ちょっときれいだと思います。

lbp-ifおよびesc-ifについては、以下のページをご覧下さい。

"/> lbp-ifとesc-ifのページ
(作者である伊藤 高一氏による)

lbp-ifとesc-ifは、どちらも利用制限があります。ご利用になる前に、必ず付属の文書をお読み下さい。

LIPSに関しては、大森 紀人氏のページも参考になります。特にLIPS III以上に対応した新しいプリンタをお持ちの場合は、それに対応したフィルタを用いた方が、LIPS II+用のフィルタを使うよりもきれいな出力を得られるので、検討する価値があります。

印刷スプーラの設定

以下の説明では、例としてCanon LBP-B406というページプリンタを取り上げます。古い…。私の所属する流体研では、裏紙専用のプリンタとして活躍しています。 (ほぼ同じ設定で、Canon LBP-720というページプリンタも使っています。)

Canon LBP-B406はLIPS IIを受け付けますので、フィルタにはlbp-ifを使うことにします。

BSD系の印刷スプーラ(LPD)は/etc/printcapというファイルをいじってプリンタの設定を行います。例えば次のような内容をprintcapに追加します。

 # Canon LASER SHOT B406 (Good Old Monocrome Laser Printer) # on /dev/bpp0 (parallel port) lbp-b406|lbp|lips2|Canon LASER SHOT B406 (LIPS II)DEV=lips # DEVOPT=""   # gsコマンドの絶対パス gs=/usr/local/bin/gs262  width= length= indent= user= host= afile=   # 引数処理 while test $# != 0 do case $1 in 	-c) ;; 	-x*)    width=$1 ;; 	-y*)    length=$1 ;; 	-n)     user=$2 ; shift ;; 	-n*)    user=`expr $1 : '-.\(.*\)'` ;; 	-h)     host=$2 ; shift ;; 	-h*)    host=`expr $1 : '-.\(.*\)'` ;; 	-*)     ;;  	*)      afile=$1 ;; esac shift done   # SIGINTが発行されたときの後始末 trap '/bin/rm -f $OF; 	echo "$use/strong> (tar+gzip、約32kB) 

lprpsのパッケージには、印刷するファイルを解析してテキストファイルとPS ファイルの識別をするpsifというプログラムが入っています。私はこれを改造して使っています。改変したのは以下の2点です。


自由のための文書をPDFに変換する方法
  • オリジナルのpsifはプリンタ制御コードを含むファイルを扱えなかった (フィルタの"-c"オプションに対応していなかった)ので、これを扱える ようにした。
  • 複数のプリンタを扱いやすいように、プログラム名を変えると起動さ れるフィルタも変えるようにした。プログラム名がfiltだとすると、 テキストファイルのときはfilt-textを、PSファイルのときはfilt-ps を起動する。

以上の変更を施すためのパッチを用意しました。お役に立てば幸いです。

"/> プリンタ制御コードを含むファイルを印刷できるようにする理由
psif.c.diff

フィルタを置くディレクトリはソースコードに直接書き込まれています。適当に書き換えてご利用下さい。

psif利用の具体例

Canon LBP-B406の場合を例に取って、使い方を具体的に説明します。まず、フィルタを次のような名前でコピーします。

/usr/local/lib/lp/lbp-b406-if
上記psifのコピー
/usr/local/lib/lp/lbp-b406-if-text
テキストファイル用フィルタ、lbp-ifのコピー
/usr/local/lib/lp/lbp-b406-if-ps
PSファイル用フィルタ、上で説明したシェルスクリプト

次に/etc/printcapを編集し、フィルタをlbp-b406-ifに設定します。つまりif=/usr/local/lib/lp/lbp-b406-ifとします。

これでおしまいです。テキストファイルおよびプリンタの制御コードを含むファイルはテキストファイル用のフィルタを通って、PSファイルはPSファイル用のフィルタを通って印刷されるはずです。

プリンタ制御コードを含むファイルを印刷できるようにする理由

プリンタ制御コードを含むファイルを印刷できるようにしておく理由は何でしょうか。事情はいろいろあるでしょうが、私にとって重要な理由は次のようなものです。

  • SambaでプリンタをPCと共有できるから。PCからSamba経由で印刷スプ ーラに渡されるファイルは、すでにプリンタ制御コードに変換されて いますので、これを印刷できるようにしておく必要があるのです。
  • UNIX上にも、画像ファイルなどをプリンタの制御コードに変換するソ フトウェアがいろいろありますので、それが使えると便利です。例え ばgnuplot、PGPLOTなど。

上記の方法をそのまま普通のPSプリンタに応用するのはお勧めできません。なぜなら上記のpsifを使う方法では、

  • テキストファイル → テキストファイル用のフィルタ
  • プリンタ制御コード → テキストファイル用のフィルタ
  • PostScriptファイル → PSファイル用のフィルタ

のように仕事を振り分けています。しかしPSプリンタの場合はプリンタ制御コードがすなわちPostScriptですから、

  • テキストファイル → テキストファイル用のフィルタ
  • プリンタ制御コード → PSファイル用のフィルタ
  • PostScriptファイル → PSファイル用のフィルタ

のように振り分けたい。この場合は次のような方法が考えられます。

  1. パッチを当てていないpsifを使う。これだとバイナリファイルをはじ く機能が働くので、PSプリンタには都合がよいでしょう。
  2. プリンタ制御コードが来たとき、つまりフィルタに"-c"オプションが 付けられたときだけ処理を変えるようなフィルタを書く。

1番目の方法のほうがよいとは思いますが、2種類のフィルタを使い分けるのが面倒なので、私は2番目の方法を採っています。具体的には次のような簡単なシェルスクリプトをテキストファイル用のフィルタとして登録しています。


 #! /bin/sh  # qms1660-if-text --- テキストファイルをPostScriptファイルに変換する。 # 漢字コードの変換も行う。 PSfilter=/usr/local/lib/lp/qms1660-if-ps  for arg in $*; do   if [ $arg = "-c" ]; then     imageflag="-c"   fi done  if [ -z "$imageflag" ]; then    # テキストファイルだと判断して、漢字コードを変換し、   # PSファイルに変換する。   /usr/local/bin/nkf -e | /usr/bin/jtops -v | $PSfilter "/strong> (tar+gzip、約6kB)
SunOS専用です。

私の設定したプリンタは全てrwエントリを入れるだけでトラブル無く 使えているので、普段はbppoutを使っていません。おそらくエラーが 出るかどうかは接続するプリンタに依存するのでしょう。

  • 私はbppoutをプリンタの接続テストのときに使っています。プリンタ の制御コードに書き直したファイルを用意して、

    のようにしてファイルを印刷してみます。そしてこれでうまく印刷で きることが確認できてから、おもむろにprintcapの設定をします。

  • シリアルプリンタ(ページプリンタでないもの)のページ下端マージン

    インクジェットプリンタや熱転写プリンタなどの、紙を送りながら少しずつ印刷していくタイプのプリンタは、印刷が紙の下の方まで進むと、紙をちゃんと押えることができなくなります。そのせいか、ページの下端1、2センチの部分の印刷は下手です。プリンタによってはその部分への印刷は出来ないようになっています。

    たとえばEPSON MJ-5100Cの場合は、用紙下端から14mmの部分は印刷できないことになっています。また用紙上端より3〜12.5mm、用紙下端より14〜16mmの領域は「印刷可能ですが、紙送り精度は保証できません。」とマニュアルに記載されています。PCやマック用の賢いソフトウェアはこの辺をきちんと押えて印刷してくれるはずですが、UNIXからGhostscriptのドライバを使って印刷しようとするとはまります。

    言われてみれば納得なのですが、実はこれを知らなかったために書類のページ番号が全て抜け落ちてしまい、どうしてなんだろうと悩みました。皆さんも気をつけて下さい。



    「Solaris2と戦う」のページの 参考にしよう!!との重複があります。

    • オンラインマニュアル :-)
    • 「UNIXプログラミング環境」Brian W. Kernighan and Rob Pike, 石田 晴久 監訳, ASCII
      ちょっと古いですが非常によくできた本です。シェルスクリプトを書 くときなどに役に立ちます。
    • UNIX MAGAZINE 1995年7月号 「Inside DVI→PS---PSプリンタの接続方法」 高山 健三、ASCII
      プリンタの接続方法を紹介しています。タイトルは"PSプリンタの…" となっていますが、非PSプリンタでも役に立ちます。特にシリアル接 続のプリンタを使う際には参考になるでしょう。

      この記事に関わらず、Inside DVI→PSには有用な情報が書かれていま す。特に「ワンポイント・トラブルシューティング」は、まさにトラ ブルが起きたときに我々を助けてくれます。

    • UNIX MAGAZINE 1995年4、5月号 「ワークステーションのおと」坂下 秀、ASCII
      "SPARCstationとパラレルポート"というパラレル接続に関する記事が あります。この記事もPSプリンタを接続する話なのですが、非PSプリ ンタでも役に立つことが多い。
    • The Linux Printing HOWTO
      LinuxのプリンタスプーラはBSD系のスプーラを拡張したものなので、 多くの記述がそのままBSD系OSで役に立ちます。(ちなみに私はLinuxを 使ったことがありません。)

      国内にミラーを持っているサイトがたくさんあります。あまりに沢山 あるのでどこにリンクを張ったらいいのか分からないくらいです :-) 検索をかけるなどしてお近くのサイトをお探し下さい。

      なおLinux関連のHOWTO集が Linux Online - HOWTO Documentsにまとめられています。


    トップページ
    工学院大学 ・ 機械工学科 ・ 流体研

    リンクはご自由に。でもメールをくれると嬉しいな。

    金野 祥久  konn

    Last modified: Wed Dec 7 13:38:33 JST 2011



    These are our most popular posts:

    Macでネットワークプリンタの設定

    Macでネットワークプリンタの設定 ... Macで研究室のプリンタを使う設定がよく分からず ,もっぱらWindowsで印刷作業は済ませていました. どうも以下の手順を ... +」の ボタンをクリックして,以下のような新規にプリンタを追加するダイアログを表示させます. read more

    どのように私はデル1700Nネットワークプリンタを設定するか? » ウィキ便利

    どのように私はデル1700Nネットワークプリンタを設定するか? CAT5イーサネット ケーブルは、家庭用またはオフィスネットワークへの1700Nを接続するために使用され ます。 ネットワーク印刷のためのデル1700Nプリンタを設定すると、プリンタに組み込ま れた ... read more

    ネットワークプリンタに接続できません

    プリンタ ドライバはこのコンピュータで有効な、 NT4.0ドライバを拒否するポリシーと互換 性がありません。 ... プリンタのアイコンが追加されて、認識はされていて、 プリンタへは データ送信されているようなのですが、動かず、 この先、どの様にすればいいのかが ... read more

    異なるLANにあるネットワークプリンタを利用するには

    ルーター(A)に接続されているネットワークプリンタ(a)を、ルーター(B)に接続されている PC(b)から利用したいのですが、可能なのでしょうか。また、可能ならどのような設定を 行えば良いのでしょうか。 read more

    Related Posts



    0 コメント:

    コメントを投稿