--- [管理番号 1454] (最終更新 1999/11/19 15:53:08) Q. プリンタがうまく動きません。プリンタの設定方法が分かりません。 A. 以下の説明を順に読んでください。 [管理番号 1455] Q. UNIX や FreeBSD でのプリンタの扱いはどうなってるの? (必ず読んでください) [管理番号 1456] Q. プリンタが反応しない(接続のチェック) [管理番号 1457] Q. テキスト印刷をするためのフィルタはありますか? (テキスト印刷がしたい/テキスト印刷がうまくできない) + Q. 日本語が化けて印刷されるのですが? [管理番号 1458] Q. PostScript/Ghostscript ってなんですか? [管理番号 1459] Q. gs はどうやって使うの? [管理番号 1460] Q. Ghostscript が対応しているプリンタはどれですか? (見分け方は?) [管理番号 1461] Q. Ghostscript を用いて PostScript の図を印刷したいのですが [管理番号 1462] Q. 日本語の ps file が印刷したいんですけど [管理番号 1463] Q. VFlib って何ですか? [管理番号 1464] Q. gs でもっと簡単に印刷したい [管理番号 1465] Q. gs でもっともっと簡単に印刷したい (lpr の利用) lpr/lpd がうまく動かない(lpr/lpd の利用 & 関連 QandA 集) [管理番号 1466] Q. その他 プリンタ関連 QandA リソースリスト --- [管理番号 160] (最終更新 1999/02/17 23:58:45) Q. samba-1.9.15p8 を用いて、このプリンタを LAN 上の Windows 95 機と 共有しているのですが、95機からプリントジョブを送ると、最後に何も 印刷されていない紙が一枚必ず出てきます。 A. samba が使用する /etc/printcap の entry に sf は入っていますか. --- [管理番号 163] (最終更新 1999/02/17 23:58:45) Q. プリンタに出力できません。調べてみるとスプールディレクトリにはちゃ んと出力されているのでスプールはされているみたいです。また、どうも lpd が動いてないみたいなのでシェル上で lpd & して動かそうとしてもすぐ終了 してしまいます。ログを覗いたら "startup: duplicate spool directories" なメッセージが入ってました。 A. スプールディレクトリが重複しています。/etc/printcap の異なるエント リで同じスプールディレクトリを指定してませんか。別々のエントリには異な るスプールディレクトリを指定しましょう。/etc/printcapを参考にして /var/spool/output以下に mkdir すればいいでしょう。 --- [管理番号 177] (最終更新 1999/11/19 15:50:29) Q. FreeBSD の lpr、lpd では リモートプリンタの /etc/printcap の if 等で指定する入力フィルタは無効だと聞いたのですが? A. 以前のバージョンの FreeBSD では rm、rp が指定された printcap エントリでも if、nf、gf 等のフィルタ指定は無視されていました。 しかし、少なくとも FreeBSD 2.2.6 RELEASE 以降の 2.2.x 系列および 3.0 RELEASE 以降の 3.0 系列のバージョンではリモートプリンタに 対してもフィルタ指定は有効になっています。 --- [管理番号 375] (最終更新 1999/02/17 23:58:45) Q. 印刷をしたら、ハンドブックでいう「階段効果」が現れてしまいました。 プリンタの設定は変更できず、エスケープシーケンスもマニュアルがない のでわかりません。日本語版ハンドブックの訳注にある「LF を CR+LF に 置き換える cat コマンド を作る方法」を教えて下さい。 A. 以下のような 2 行だけのシェルスクリプトを作成します。 #!/bin/sh sed 's/$/\^M/' $* ここで ^M は実際の CR を表す制御文字ですから、vi では Ctrl キーを 押しながら v を押した後に Ctrl キーを押しながら m を押して下さい。 Emacs(Mule) では Ctrl キーを押しながら q を押した後に Ctrl キーを 押しながら m を押して下さい。 例えば これを /usr/local/libexec/lf2crlf という名前で保存し、 # chmod +x /usr/local/libexec/lf2crlf として実行できるようにします。 こうして LF を CR+LF に変換する cat コマンドができましたから、 /etc/printcap に if=/usr/local/libexec/lf2crlf という項目を加えてやれ ば階段効果を解消することができます。ghostscript を使ってPostScript プ リンタとして使いたい時には、ハンドブック「非 PostScript プリンタで PostScript をシミュレートする」で紹介されているフィルタの cat を /usr/local/libexec/lf2crlf に置き換えてやれば良いです。 --- [管理番号 376] (最終更新 1999/02/17 23:58:45) Q. Canon LaserShotにファイルを出力する時に テキストファイルと PSファイ ルを自動判別してくれるような printcapに書くフィルタスクリプトはありま せんか? A. LaserShot A404GII(LIPS II & III) では以下のようにすると良いようです。 ただし ^[ は ESC コードです。 #!/bin/sh # Initialize Printer echo -n '^[%@' # End of emulation mode, Text mode start printf '^[P31;300;1J^[\' # JOB Start as LIPS3, JIS printf '^[<' # LIPS printer soft reset printf '^[[?5h' # LF -> LF+CR mode printf '^[[?1h' read first_line first_two_chars=`expr "$first_line" : '\(..\)'` if [ "$first_two_chars" = '%!' ]; then /usr/local/bin/gs -dSAFER -dNOPAUSE -q -sDEVICE=lips3 -sOutputFile=- - else echo -n '^[%0' # ShiftJIS mode ( echo "$first_line" && cat ) | /usr/local/bin/nkf -s printf '\f' fi printf '^[P0J^[\' # Job End echo -n '^[%@' # Start Text Mode exit 0 --- [管理番号 377] (最終更新 2001/10/19 21:29:32) Q. Canon LaserShot を使っているのですが、プリンタ言語 LIPS を使ったプ リントアウト用ソフトはありますか? A. FreeBSD の ports/packages に含まれているのは lipsf だけですが、他に もいくつかのソフトウェアがあり、FreeBSD で利用できます。ただし、 プリンタ名 lp で、べたテキストや ghostscript を用いて PostScript ファイルを印刷できるようにしている場合は lips など新しいプリンタ名 を用意して、LIPS コードを生のままプリンタに流せるようにしなければ なりません。どなたか自動的に LIPS コードのファイルかどうか確かめる 方法をご存知ないですか? lipsf ja-lipsf という port/package が用意されています。用紙サイズや紙の 向き、段組を指定することができます。対話的にファイルやオプションを 指定できる pols というコマンドも付属しています。 txt2lips より入手可能。 機能的には lipsf と似ている。段組時に段の間に点線を引けるのが 個人的には好き。 xwd2shot XWD 形式のファイルを LIPS に変換する。ソースに簡単な修正が必要 (プロトタイプ宣言部分をコメントアウト)。 xwd | xwd2shot -R | lp -Plips のように使うのが一般的? dvipr より入手可能。 TeX の DVI ファイルを印刷する。コンパイルはできたが、設定はまだして ない。 lips3dvi TeX の DVI ファイルを印刷する。こちらもコンパイルはできたが、まだ試 していない。同梱の dvipr は lips3dvi のフロントエンドにすぎず、上記 の dvipr とは別物です。 その他使えるかもしれないけど試してないもの pls テキスト出力 clist 横置きの A 4用紙に 2 段組に 15cpi で濃縮された形でリスト出力 hpfil ローランドのプロッタ言語 RD−GL を変換してL ASER SHOT に出力 bookbind テキスト出力 DVI ファイルの出力は、dviware に依存するスタイルファイルを使ってい たり、ゴシックフォントを内蔵してないので VFlib を使いたいといった場 合には、dvi2ps-j などのソフトで PostScript に変換して ghostscript で印刷した方がいいのでは……、と思います。もちろん内蔵フォントを使 った方が格段に速いと思われますし、dvipr も lips3dvi も使ったことな い私が云うのも、アレなんですが。 --- [管理番号 411] (最終更新 2002/08/24 06:22:43) Q. PostScript 対応でないプリンタを FreeBSD で使いたいのですが、なにか 良い方法がありませんか? A. お使いのプリンタによって、以下の方法があります。 1. エプソン製のインクジェットプリンタの場合、エプソンコーワが配布して いる PIPS を使うことで、 PostScript プリンタのように扱えます。 ports/packages が japanese/pips* として用意されていますので、そこから インストールして下さい。 # PM-700C 用のドライバはありませんが、ヘッドの仕様が同じ (たぶん) PM-670用のドライバで動かせます。 PIPS は PNG フォーマットの入力を Epson の inkjet プリンタコードに変 換するソフトで、エプソンコーワより配布されています。Ghostscript と 組み合わせたフィルタを利用することにより、PostScript の印刷時にも活 用できます (そのためのフィルタなどが付いているはず)。 Ghostscript による mjc720 や uniprint ドライバなどの Epson inkjet 用 出力に比べて 6色インクのサポートなどにより Windows ドライバ並の良い 画質が得られます。 他にも似たようなやり方をするものには、HP の inkjet の低価格機種など で、gs の出力を別のプログラムで制御コードに変換することにより印刷が 可能になるものがあります (詳しい情報求む)。 2. その他のプリンタの場合、 Ghostscript を使うことにより PostScript プリンタのように扱えるものもあります。 Ghostscript については、[管理番号 1458] を参照してください。 --- [管理番号 552] (最終更新 2003/11/17 02:28:48) Q. ローカルプリンタへ lpr で印刷できません。 $ lpr hogehoge lpr: connect: No such file or directory jobs queued, but cannot start daemon. と言われます。 A. FreeBSD では、デフォルトの状態ではプリンタデーモンである lpd(8) を起動しません。/etc/rc.conf で lpd_enable="YES" と設定し、リブートしてください。 --- [管理番号 584] (最終更新 1999/02/17 23:58:45) Q. ports の japanese/vfghostscript5 (ja-vfghostscript-5.10) で pdf ファ イルを印刷しているんですが、14 ページ目で Error:/VMerror in --dict-- VM status: 1 958546 1037640 Current allocation mode is local Last OS error: 12 となり以降のページは表示せずにまた最初からリピートして印刷しだします。 何なんでしょうか? A. datasize に limit がかかってますね。あなたの御使いのシェルかまたは lpd デーモン自体に設定されている datasize の上限値を超えてしまったからです。 これに対する対処法は [管理番号 316]、[管理番号 532]、[管理番号 533] にありますのでそちらを参考にして対処してください。 --- [管理番号 614] (最終更新 1999/02/17 23:58:45) Q. オンラインマニュアル (英語/日本語) を綺麗に印刷するにはどうやったら いいですか? A. man -t マニュアル名 (英語版) または jman -t マニュアル名 (日本語版) を実行するとPSファイルが作られます。{man,jman} -t マニュアル名 > hoge.ps を実行すれば hoge.psというファイルに保存されます。 PSプリンタであればこれを lpr hoge.ps としてやれば出力されるでしょう。 PSプリンタではない場合でも FreeBSDから印刷できる場合があります。 [管理番号 411] を参照してください。 --- [管理番号 664] (最終更新 1999/02/17 23:58:45) Q. Canon の バブルジェットプリンタを ghostscript で使おうとしているの ですが、DEVICE に何を指定したらよいのですか? A. に ghostscript で 動作が確認されているプリンタが 記述されています。 上記に記述されていないものに関しても 以下のものが使用可能であろうと いう情報が に あります。 DEVICE=bj10e BJ-5/10ex/10sx/20/30/100/200/200e/200ex/230 DEVICE=bj200 BJ-30/100/200/200e/200ex/230 DEVICE=bjc600 BJC-70/80/210/240/250/600/600e/610/620/800/820/4xxx DEVICE=bjc800 BJC-70/210/240/600/600e/610/620/800/820/4xxx --- [管理番号 773] (最終更新 1999/02/17 23:58:45) Q. プリンタで印刷しようとすると途中までしか印刷できません。 A. lpqで印刷ジョブのキューを見ると印刷しようとしている エントリのサイズが1025024bytesになっていませんか? lpr: hogehoge.ps : copy file is too large などのメッセージが表示されませんでしたか? Windows からの大きな文書のプリントアウトを samba で利用して FreeBSD の lpr で行う場合や ghostscript を用いて printer に 出力している場合など、大量の出力を行う場合にキューファイルの サイズ制限を超えてしまっていることが考えられます。 /etc/printcap の mx フィールドでスプールに置かれるファイルの 上限サイズが決まりますが、そのデフォルトが 1025024bytesです。 mx#0と指定するとこのサイズは無制限になります。 (例) /etc/printcap に以下のようなエントリがあったとします。 lp|local line printer:\ :sh:\ :lp=/dev/lpt0:sd=/var/spool/output/lpd:lf=/var/log/lpd-errs: このとき、以下のように変更すればよいでしょう。 lp|local line printer:\ :sh:mx#0:\ :lp=/dev/lpt0:sd=/var/spool/output/lpd:lf=/var/log/lpd-errs: あるいは、エントリの最後に追加する場合には lp|local line printer:\ :sh:\ :lp=/dev/lpt0:sd=/var/spool/output/lpd:lf=/var/log/lpd-errs:\ :mx#0: などとします。最後の行に追加する場合には、前の行の行末に「\」を つけて継続行にするのを忘れないようにして下さい。 詳細は printcap(5) (および termcap(5)) を参照して下さい。 また、lpr 起動時に -s option をつけて lpr -s として使用 すると、印刷対象ファイルをスプールにコピーするかわりに シンボリックリンクの作成を指定することができますので、 この方法を用いてもその現象は回避可能です。 この方法を使うと、印刷が完了するまで印刷対象のファイルを 消したり変更することができなくなりますが、ディスク容量を 節約できるという利点があります。 --- [管理番号 774] (最終更新 1999/02/17 23:58:45) Q. Ghostscript を使って印刷をしているのですが、先頭ページに次のよう なメッセージが印刷されてしまいます。このメッセージを消すにはどう すればよいのでしょうか。 Aladdin Ghostscript 5.10 (1997-11-23) Copyright (C) 1997 Aladdin Enterprises, Menio Park, CA. All rights reserved. This software comes with No WARRANTY: see the file PUBLIC for details. A. Ghostscript の起動オプションに -q を付けていますか? プリントフィルタとして Ghostscript を起動するスクリプトを指定した ときは、-sOutputFile=- というオプションを使用して Ghostscript の 出力を標準出力(stdout)に出力しますが、Q.のような著作権表示などの メッセージも stdout に表示されているので、印刷時に混ざってしまい ます。 このため、メッセージを stdout に出力されないようにしなければなり ませんが、この、メッセージを stdout に出力しないように抑止するの が、-q オプションです。ghostscript のコマンドラインオプションに ついては gs(1) を参照して下さい。 フィルタプログラムの設定例(プリンタは CANON LIPS III系)を以下に 示します。 #!/bin/sh /usr/local/bin/gs -q -dNOPAUSE -sDEVICE=lips3 -sOutputFile=- - quit.ps --- [管理番号 883] (最終更新 1999/02/24 03:26:44) Q. YHP の DeskJet 505J Plus (DJ505J) を使用しています。Ghostscript で TrueType フォントを使ってきれいに印刷したいのですが。 A. packages/ports の ja-vfghostscript-5.10 を使用しましょう。 DJ505J は ghostscript の 汎用プリンタドライバ (dmprt) を利用して 使用することができます。 dmprt は、この他のさまざまなプリンタをサポートしています。詳しくは、 /usr/local/share/ghostscript/5.10vflib/doc/gdevdmpr.sj を参照して下さい。なお、dmprt 用のプリンタ定義ファイルは、 にて入手することができます。 --- [管理番号 1142] (最終更新 2001/04/18 02:12:12) Q. リモートプリンタへの出力がうまくいきません。 ただし、プリンタが接続されているホストからはプリントアウトできます し、ネットワークの状況にも問題ないようです。 A. 以下では、次のような状態になっていると仮定します。 remote: プリンタが直接接続されているホスト machine1: remote へプリンタ出力要求を送るクライアント machine1 で lpd(8) が動作しているかどうかを確認します。 そうでないのなら /etc/rc.conf に lpd_enable="YES" をいれ、 再起動します。 machine1 の /etc/printcap を確認してください。 例えば、 lp|ps-oki:\ :lp=:rm=hogehoge.kanazawa-gu.ac.jp:rp=lp:\ :sd=/var/spool/ps-oki:\ :lf=/var/spool/ps-oki/log: のように、rm (remote.host) フィールドと rp (remote.queue) フィール ドの指定が正しいかどうかを確認します。各フィールドの意味およびこの ファイルの詳しい書式については printcap(5) の man ページを参照して ください。 次に machine1 で lpq(1) コマンドを実行してみます。 (4:08pm)[machine1: 75] % lpq machine1: waiting for queue to be enabled on remote Rank Owner Job Files Total Size 1st okada 2 (standard input) 299486 bytes remote: /usr/lib/lpd: Your host does not have line printer access 上記のような出力が得られた場合、remote の /etc/hosts.equiv ないしは /etc/hosts.lpd を確認し、machine1 をいずれかのファイルに登録する 必要があります。これらのファイルの書式については hosts.equiv(5)、 hosts.lpd(5) そして lpd(8) の man ページを参照してください。 ホスト名や IP アドレスをいれてもうまくいかない場合には、両方を 試してみてください。 注意: /etc/hosts.equiv に machine1 を登録した場合、machine1 からの rlogin(1) などがパスワードのチェック無しで使えるようになってしまい ます。これを望まない場合には /etc/inetd.conf を編集しサービスを停止 する、tcp_wrapper(tcp_wrappers) でアクセス制限を行う、あるいはプリ ンタアクセスのみを許可する /etc/hosts.lpd の使用を考える必要があり ます。 --- [管理番号 1209] (最終更新 1999/05/07 00:49:33) Q. リモートプリンタで PostScript ファイルを印刷したいのですが、ローカ ルホスト側で Ghostscript にフィルタを使って通すと PostScript スクリプ トが印字されてしまいます。 A. 以下のことを確認して下さい。 1. /etc/printcap の記述は正しいですか? FreeBSDのバージョンが古過ぎませんか? 現在のバージョン (2.2.8R で確認) では、リモートプリンタの設定 ("rm=リモートホスト名") がしてあってもローカル側でのフィルタの設定 ("if=フィルタ") は有効ですが、古いバージョンでは "rm" の設定があると "if" の設定は無効になってしまいます。 プリンタスプール ("sd") が他のエントリと重複していませんか? プリンタスプールディレクトリは各エントリ毎に別個にして下さい。 FreeBSD のバージョンを上げて見て下さい。 古いバージョンで対応させる場合は [FreeBSD-users-jp 14570] を参考に /etc/printcap を書き直して下さい。 2. フィルタの記述は正しいですか? Ghostscript をローカルホスト側で通す場合、フィルタが正しいことを確認し て下さい。とくに、プリンタのデバイス名が、使用する Ghostscript に対応 しているか調べて下さい。("gs -h" コマンドで対応デバイス一覧が出てきま す。) できれば、使用するプリンタをまずローカルに接続し、フィルタを通して PostScript ファイルが印刷できることを確かめて下さい。 設定例: リモートホスト "rhost" につながるプリンタ "rps" からプリントする。 プリンタのデバイスは "epag" を使用する。 フィルタは "/usr/local/libexec/psfilter.sh" とする。 ------ /etc/printcap -------- r-ps|remote printer with gs:\ :lp=:rm=rhost:rp=rps:\ :sd=/var/spool/output/rps:\ :if=/usr/local/libexec/psfilter.sh:\ :lf=/var/log/lpd-errs:\ :mx#0:sh: ---------------------------------- -----/usr/local/libexec/psfilter.sh ------------ #!/bin/sh /usr/local/bin/gs -q -dNOPAUSE -sDEVICE=epag -sOutputFile=- - quit.ps ----------------------------------------------- --- [管理番号 1243] (最終更新 1999/04/07 06:49:20) Q. NAT によって異なるネットワークに分割されている Windows 機の間で、 ファイルやプリンタの共有を行いたいのですが。 A. ファイル共有やプリンタ共有は次の要領で行います。  ・プロトコルを TCP/IP とする。  ・WINS を立ててどのマシンがどこに属しているかを教える。 (もしくは、LMHOSTS で指定する)  ・静的NAT情報を設定する。 以下に設定例を示します。ここでは、Windows におけるコンピュータ名の 解決に LMHOSTS を使い、また NAT として FreeBSD2.2.8 で IP Filter3.2.10 を用いているものとします。また、この例では、 hostA: public なネットワーク上 (123.45.67/24) の Windows 機 hostB: local なネットワーク上 (192.168.1/24) の Windows 機 とし、この2機間で共有を行うとします。 1. Windows 機で LMHOSTS を設定する。 ・hostA の LMHOSTS IPアドレス: IP filter 機 に割り当てられている public なIPアドレス ホスト名: hostB の Windows 上におけるコンピュータ名 ・hostB の LMHOSTS IPアドレス: hostA に割り当てられている public なIPアドレス ホスト名: hostA の Windows 上におけるコンピュータ名 (hostAにおける Window s上のコンピュータ名を、DNS で指定されている ホスト名と同じにしている時は、hostB の LMHOSTS を設定しなくても良い 場合がある。) 2. NAT 機で静的 NAT の設定をする。 IP Filter の場合、/etc/natrulesに、 rdr de0 123.45.67.0/24 port netbios-ssn -> 192.168.1.1 port netbios-ssn rdr de0 123.45.67.0/24 port netbios-dgm -> 192.168.1.1 port netbios-dgm を加える (192.168.1.1は hostB のIPアドレス、de0 は NAT 機の public 側の ネットワークインターフェースのドライバ)。 (投稿者の環境では、hostA、hostBいずれからでも[ネットワークコンピュータ] では相手のマシンが見えません。[スタート]-[検索]-[ほかのコンピュータ] とし、さらに相手のコンピュータ名を明示して検索することで、相手を 見ることが出来ます。) --- [管理番号 1455] (最終更新 2000/12/07 02:35:58) Q. UNIX や FreeBSD でのプリンタの扱いはどうなってるの? A. まず FreeBSD handbook 7章 プリンタの利用 その中でも特に 基本的なセットアップ プリンタを使う プリンタ設定上級編 をよく読んでください。実はこの説明のほとんどは、FreeBSD に限らず、 UNIX 一般に当てはまります。少々長いですが、ここをちゃんと読めば 90% の人の疑問は解決します。 逆にここをちゃんと読まずに メーリングリストやネットニュースに投稿しても 結局何が問題なのか他の人にも判別がつかないので、解決はできないと思って ください。 しかし、ハンドブックも万全ではありません。また広い範囲を対象にしている ので少し説明が冗長である部分もあります。また、日本人が書いたものではない ので、日本語のテキスト関連の情報や日本のプリンタの情報などはありません。 そこでこの QandA 集では主にその辺りを中心にはまりやすいポイントと 解決法を書きます。 PostScript についてよく知らない人は [管理番号 1458] Q. PostScript/Ghostscript ってなんですか? を読んでください。 lpr/lpd についてよく知らない人は [管理番号 1465] Q. gs でもっともっと簡単に印刷したい。lpr/lpd がうまく動かない を読んでください。 --- [管理番号 1456] (最終更新 1999/11/19 15:53:18) Q. プリンタが反応しない (接続のチェック) A. きちんと接続されているかどうか、ケーブル/電源などを確認してください。 [よくある問題] printer port を間違えていないか もう一つよくある間違いに、ハードウェア的な接続は正しいのに、 デバイスファイルなどを間違えているというものがあります。 パラレルポートは /dev/lpt0 (Linux だと /dev/lp0) が一番目です (番号は unix 系では 0 から始まるのが一般的)。 デバイスファイル名を間違えていたら何をどうやっても印刷できません。 デバイスが /dev/lpt0 であると思われる場合は、まず % ls -l /dev/lpt0 を実行してみて、デバイスファイルの存在を確認しましょう。 これは キャラクタデバイスなので ls -l した先頭の文字は 'c' となっているはずです。もし /dev/lpt0 が存在しなければ # cd /dev; ./MAKEDEV lpt0 してください。 デバイスファイルがない、あるいはデバイスファイルはあっても 正しく作られていない場合に以下の作業を行うと、/dev 以下に 巨大なファイルが作られ、/ file system が溢れて、印刷も されないということになってしまいます。 次に # echo test > /dev/lpt0 としてみて何か(ごみでもいいから)印刷されるか、印刷されなくても ピーピー言うとか LED が一瞬光るなど反応をしているかを見てください。 なにかしら反応があれば、デバイス名は多分あっています。 なお、プリンタ言語によっては適当な text を送るだけでは 印刷はしないものもあるようですが、たいてい何かしらの 反応は示すものと思われます。 注意: /dev/lpt0 は通常は root 以外は書き込み出来ません。 --- [管理番号 1457] (最終更新 1999/11/19 15:53:20) Q. テキストの印刷をするためのフィルタ はありますか? (テキスト印刷がしたい/テキスト印刷がうまくできない) A. プリンタの種類によっては、escpf、lipsf などいくつかあります。 また、a2ps などを用いて一旦 PostScript に変換して Ghostscript を 用いて印刷するという方法もよく用いられます。少々重いのが難点ですが、 gs にさえ対応していれば、日本語フォントを搭載していないプリンタでも 大丈夫、というのが魅力です。 もしあなたが使ってるプリンタが文字コードと(復帰改行や改ページなどの) 簡単なプリンタ制御コードのみで印刷可能であるなら、特別なフィルタが なくてもテキストの印刷はできます。そういうプリンタはかつてはよく 使われていましたので、/etc/printcap のみで設定できるようになって います。最近のプリンタでもそういったテキスト印刷のモードを持って いればフィルタ無しでテキスト印刷できます。ただし、その他(グラフィック など)のモードとの切替が必要だったり、プリンタにテキスト印刷の モードがない場合には専用のテキストフィルタを用いたり、gs を使う 必要があります。また、テキスト用のモードがあっても漢字フォントを 搭載していない場合は日本語の印刷は gs を利用する必要があります。 おまけ Q. 日本語が化けて印刷されるのですが A1. そのプリンタは日本語フォントを持っていますか? 安価な color inkjet printer の多くは日本語フォントを 持っておらず、windows でもすべて"画像"として印刷します。 一旦 ps に変換し、gs を使いましょう [管理番号 1458] A2. 印刷する漢字コード/プリンタ側の設定は合っていますか? --- [管理番号 1458] (最終更新 1999/11/19 15:53:21) Q. PostScript/Ghostscript ってなんですか? A. UNIX の世界では多くのソフトが印刷用の出力などを PostScript(ps) というPDL (Page Description Language: ページ記述言語) で出力 します。PostScript は簡単に綺麗な絵などを描ける代わりに、処理が 複雑です。PostScript の処理系を内蔵していて印刷できるプリンタは 市販されていますが、通常のプリンタより高価です。 そこで、Ghostscript(gs) という PostScript 互換の処理系でパソコン 側で PostScript 形式のデータを処理して、繋がっているプリンタ用の データ形式に変換してから送りつけるという方法がよく使われます。 これは、プリンタのカタログで「ソフトウェア RIP で PostScript を 出力」と書いてある方法に相当します。 --- [管理番号 1459] (最終更新 1999/11/19 15:53:22) Q. gs はどうやって使うの? A. まず gs の動作チェックをしましょう。 Ghostscript をインストールしてください。FreeBSD の場合は ja-vfghostscript-*.tgz といった名前の package を入れれば OK です。 プリンタ用フィルタをつくる前に、gs の動作確認を。 以下、"GS_VERSION" はお使いの Ghostscript の version 名などで 適当に置き換えてください。 /usr/local/share/ghostscript/"GS_VERSION"/examples/tiger.ps などのサンプルを用いて (FreeBSD の ports/package では上記のような パスにインストールされますが、システムによってはパスが異なるか、 入ってないかもしれません) % gs tiger.ps で画面上に虎の絵が表示されますか? されなければ、Ghostscript が 正常に動作していません。ports/packages を用いるなり、自分で コンパイルするなりして入れ直しましょう。次に gs をプリンタ用の フィルタとして使うためには % gs -help を実行してみて、gs のバージョンおよび Available devices: の 中に自分の使いたいデバイスドライバが入っているかどうかを確認して ください。自分の使いたいプリンタとデバイスドライバ名の対応は /usr/local/share/ghostscript/"GS_VERSION"/doc などを片っ端からあさって見てみましょう。なお、gs さえ日本語対応 していれば、プリンタドライバとしては日本語対応していなくても問題 ありませんので海外で開発された stcolor なども Epson machjet/colorio プリンタで問題なく使用できます。 [管理番号 1460] Q. Ghostscript が対応しているプリンタはどれですか? (見分け方は?) に 1999年6月現在、筆者が把握している gs ドライバとプリンタとの 対応表を挙げておきます(間違い訂正や、情報の追加/更新は大歓迎です:)。 ごく一部ですが、gs 2.6x でしか使えないドライバというものもあります。 また、最近開発されたドライバで、まだ ports/packages に組み込まれて いないものについては自分で gs に組み込んでコンパイルする必要があります。 --- [管理番号 1460] (最終更新 1999/11/19 15:53:26) Q. Ghostscript が対応しているプリンタはどれですか? (見分け方は?) A. gs driver と対応するプリンタリストと URI 集: (1999/6/27 チェック) (物凄く要補完) canon LBP series [LIPS III, LIPS IV, (LIPS II+)] lips3(300dpi),lips4(600dpi),lips4c(color) (220 など LIPS 非搭載 windows 専用プリンタは不可) 太古の LIPS II+ , LBP-8 などは gs 2.6.x のみ対応? Epson LP series [ESC/Page] epag (除く LP-5000?) NEC laser(?) npdl 上記 3つ共に by 大森さん他() HP laserjet [PCL?] ?? (??? deskjet djet500 laserjet ljetplus ljet2p ljet3 ljet4 とかかな?) ricoh [RPDL] rpdl OKI MICROLINE 620CL Fujitsu FMLBP2xx (gs 2.6.x 用) fj.sources Date: Wed, 24 Jun 1998 11:40:25 JST Message-ID: Epson machjet/colorio/stylus [ESC/Pラスター? ] mj{180,360,720},stcolor,uniprint (mjc: 大森さんによる改良版があるらしい?) Canon BJC(最近のカラーのもの)[BJラスターコマンド?] bjc600? (bjc800), uniprint 古いモノクロ[???] bj10v bj10vh bj10e bj200 などを試す? HP (PCL 3 のもの; PPA の物は不可) (????? cdjcolor cdjmono cdj550 pj pjxl pjxl300 ??????) hp850 などなど... 大森さんのところからいくつか最近の HP inkjet のドライバリンクがある ALPS MD シリーズ? md2k(?) ??? dmprt(?) ( []内は PDL 名 ) 他で集められた gs でのプリンタ実績リスト このリストを見てプリンタを購入しようという方は、なるべくドライバの 配布元など より詳細な情報をチェックして、例外や注意事項などを把握 するようにしてください。 また、Windows で 6色インクなどを用いて写真画質と言っているものは 基本的には gs で使うときは CMYK の4色のみ (CMY 3色もあるかも) しか 利用できません。薄色インクの利用法は実質上、プリンタメーカーの 細かい設計やノウハウに依存するため、開発が難しいのです。プリンタ 会社が gs のドライバも開発してくれると良いのですが。 上記のプリンタのリストに自分のプリンタと全く同じ型番のプリンタが ある必要があるわけではありません。[管理番号 1459] で軽く触れてあるように、 プリンタは実際にはある固有の言語 (PDL) を解釈し、それをラスタ画像 (ビットマップイメージ)に展開して紙に写します。そしてこの PDL と いうのは通常同じ会社の同じシリーズであれば、全く同じか、少なくとも 似ているものになっています。特に新しい機種は古い PDL に対し上位 互換の PDL を搭載しているのが普通です。プリンタのカタログの仕様を よく見ると "ページ記述言語" "PDL" "制御コード" "コマンド体系" などと書かれていないでしょうか? 機種名が違っていても、場合によってはメーカーが違っていても PDL と そのバージョンが共通であれば基本的には使えるはずです。なお、PDL の バージョンはプリンタドライバのバージョンとは別の概念です。 --- [管理番号 1461] (最終更新 2000/05/24 21:06:34) Q. Ghostscript を用いて PostScript の図を印刷したいのですが A. [管理番号 1460] の表などから gs のデバイスドライバの当たりをつけます。 ここでは仮に Canon の laser printer を例にとります。 するとドライバはたとえば lips3 となります(以下の説明では 'lips3' を 適宜自分のプリンタの該当するものに置き換えてください)。 また、自分のプリンタにピッタリな説明がなくても同じ会社のもの、とか 適当に当たってみると動くものがあることもあります。プリンタの仕様の 言語の欄などを参考にいろいろ試してみてもいいかもしれません。未知の プリンタの場合は、適当に近そうなドライバをいくつか試して試行錯誤する ことが必要かもしれません。 (grep lips3 などと gs の doc directory でやるなどして 関連ドキュメントは読んでおく; driver の配布元があればそこも 見ておくのがなお良いでしょう) % cat tiger.ps | gs -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=lips3 -sOutputFile=/tmp/gstest.bin - quit.ps として、/tmp/gstest.bin を作ってみてください。/tmp/gstest.bin の ファイルサイズが妙に小さければ、gs が正常に機能していません。 color ならたとえば大体、 解像度に応じたドット数 × CMY(K) × 各色 8bit というようなデータサイズになるはずです。ただしデータを圧縮する機能を 持つドライバもあるので、必ずこの大きさになるわけではありませんが。 上記コマンドを実行した際に gs がなにかしら文句を言ってくるようで あれば、それを良く読んでください。このメッセージがプリンタの制御 コードに混ざってしまうと、フィルタとして実行する際に邪魔になります。 次に less (jless) で /tmp/gstest.bin を見てみましょう。 "/tmp/gstest.bin" may be a binary file. See it anyway? と言われますが、構わず見てみて、わけわからないデータであれば気に しなくていいです。通常、プリンタ用のデータは わけのわからない バイナリ形式になっています。逆に英語の warning メッセージのような ものが書いてあったら、要注意でしょう。良く読んでください。 次に # cat /tmp/gstest.bin > /dev/lpt0 してみてください。テストデータファイル名やプリンタデバイス名は 適宜合わせてください。tiger.ps なら虎の画像が A4 一面にでるはずです。 ここで inkjet 系のプリンタについて注意: 擦れたり、横に線(スジ)が入って印刷される場合があります。 それらは多くの場合、プリンタヘッドが詰まっているなどが原因で、 ドライバの問題ではないかもしれません。何度かクリーニングを しましょう。プリンタヘッドが問題の場合は、Windows で印刷を 行っても同様の結果になります。 --- [管理番号 1462] (最終更新 2000/06/06 23:24:42) Q. 日本語の ps file が印刷したいんですが。 A. [管理番号 1461] と基本的に同じです。日本語の ps ファイルについても、 まず X 上で表示できるかどうかを確認してください。 % gs hoge.ps とすると画面上に表示されるはずです。確認したら GS> quit と入力して抜けてください。 ports/packages で gs をインストールしたなら、サンプルは /usr/local/share/ghostscript/"GS_VERSION"/vflib/article9.ps などにあるかもしれません。 ここで日本語が表示できなかったら gs が日本語対応になっていないか、 うまく機能していない可能性があります。ports/packages を使って インストールし直してください。 VFlib については [管理番号 1463] VFlib って何ですか を参照してください。 画面上で確認できたら、[管理番号 1461] と同様に、プリンタで印刷できるか どうか確かめてください。 --- [管理番号 1463] (最終更新 1999/11/19 15:53:36) Q. VFlib って何ですか? A. 日本語の TrueType フォントなどを利用して、任意の解像度の日本語 フォントを扱うための、フォントレンダラーです。これが組み込まれた gs では、日本語文字がギザつきなしにきれいに印刷できます。 また、X-TT と呼ばれる、X サーバに freetype という同様のフォント レンダラーを組み込んだものもあり、これを利用すると X の画面の上 でも多様な大きさの日本語文字をきれいに扱うことができます。 最近の gs は日本語文字の表示(レンダリング)に VFlib という ライブラリを用いています。VFlib の設定ファイルの vfontcap が 正しく設定されているか、ktest -f min などとしてみて確認して みてください。 FreeBSD の ports/packages 以外で VFlib をインストールした場合 には、ktest はパスが通っていないかもしれません。 /usr/local/lib/VFlib などにないか探してみてください。 VFlib については を参照してください。 vfontcap は FreeBSD の ports/packages の場合、 /usr/local/share/VFlib/__VERSION__/ にあります。 --- [管理番号 1464] (最終更新 2002/08/24 06:22:44) Q. gs でもっと簡単に印刷したい! A. PostScript を受け取って自分のプリンタの PDL に変換する フィルタスクリプトを作りましょう。 適当なディレクトリ、例えば /usr/local/libexec/ などに、ps2pr.sh と いうフィルタを作ります (ファイル名は何でもいいです)。 ----- ps2pr.sh の例 ---- #!/bin/sh /usr/local/bin/gs -q -dSAFER -dNOPAUSE -sDEVICE=lips3 -sOutputFile=- - quit.ps ------------------------ -sDEVICE=lips3 の部分は、自分の使うプリンタで置き換えましょう。 gs は間違いを避けるために フルパスで記述した方がいいでしょう。 また、シェルスクリプトなので、作ったら chmod +x しておくのを 忘れないようにしましょう。 良く使う option: -r360x360 (解像度を dpi で指定) そのほかに ドライバによってはいくつか独自のオプションを持つものが あるので、ドキュメントを見ておきましょう。オプションを指定しないと 実力を発揮できないどころか全く機能しないものもありますし、逆に何も 指定しない状態に比べて格段にきれいになるドライバもあります。 注意点 o stcolor は stcolor.ps というファイルを先に読み込ませてやる必要があります。 o uniprint driver を使う場合は適切な upp file を指定する必要があります Ghostscript の doc directory の Devices.htm (devices.txt) を良く読み ましょう(環境によってはフルパスで指定しないと動作しないかもしれません)。 用意できたら、 # cat test.ps | /usr/local/libexec/ps2pr.sh > /dev/lpt0 としてみましょう。パスは環境に合わせて適宜置き換えてください。 うまく印刷できたらフィルタは完成です。 --- [管理番号 1465] (最終更新 1999/11/19 15:53:39) Q. gs でもっともっと簡単に印刷したい (lpr の利用) lpr/lpd がうまく動かない (lpr/lpd の利用 & 関連 QandA 集) A. UNIX の世界では、普通は直接プリンタを操作せずに、プリンタを 担当する daemon (lpd) に lpr コマンドを通して依頼を出します。 lpd は、複数の人から複数の仕事の依頼があるかもしれないので、 それらを調整して出力をします。なお、SystemV 系の UNIX では、 lpr ではなく lp というコマンドを利用します。設定は異なりますが、 基本的な思想は共通です。詳しくは lpr、lpd のマニュアルをどうぞ。 lpd の設定はハンドブックや printcap のマニュアルなどを参考に してください。FreeBSD では printcap のマニュアルも、jman に より日本語で参照できます。 よくある注意事項: ・ printcap: 行の最後の '\' を忘れていないか? ・ '\' の後に空白などがついていないか? ・ ':' が最初や最後でつけ忘れていないか? (サンプルの書式を良く見ましょう) まずは % grep lpd /var/log/messages の結果と printer log (printcap の lf で指定したファイル) 確認してください。とにかく、問題が起きたらエラーメッセージを 確認しましょう。lpd/printcap について ML/news などで質問する ときも、これらの情報は必須です。 lpd は起動していますか? % ps auxww | grep '[ l]pd' でlpd が起動しているかどうか確認してください。なければ FreeBSD では /etc/rc.conf に lpd_enable="YES" の行を追加。 関連 QandA: [管理番号 558] (lpd 死亡:2.2.5R のみ?) [管理番号 552] (lpd:/etc/rc.conf 関連) Q. lpc restart "PRINTER_ENTRY" すると "no daemon to abort" と言われてしまう A. "no daemon" というのは lpd の親玉のことではなくて、 現在プリンタと通信してデータを送ろうとしている lpd の "子分 daemon" がいないという意味(印刷中であっても、 データが転送し終わっていればもういなくなります)なので、 特に印刷中でなければこのメッセージには問題はありません。 複数エントリで spool ディレクトリがだぶっていないか? FreeBSD では別なエントリに同じ spool dir を 割り当てることを禁止しています。 [管理番号 163] duplicate spool lpd から if を起動するときの PATH は 自分がログインしているときの PATH とは違うので、フィルタにはなるべくフルパスを書きましょう。 [管理番号 773] (mx #0 関連) [管理番号 584] lpd が datasize limit に引っ掛かった... ECP の関連 remote printing 関連 通常の lpd では remote printer (rm の項)に対しては if(入力フィルター) の設定は無視されますが、FreeBSD では 2.2.6-RELEASE 以降、if が有効になるようになっています。 [管理番号 177] rm には if 効かない => 2.2.6-RELEASE 以降の FreeBSD では obsolete --- [管理番号 1466] (最終更新 2001/08/12 05:24:59) Q. プリンタ関連 QandA リソースリスト A. [管理番号 411] 三田さんページへのリンクの gs の使い方 [管理番号 614] man -t の使い方 [管理番号 1142] remote printer、/etc/hosts.lpd 関連 [管理番号 1209] (remote 関連 + filter 記述チェック)ある程度メタ的 UNIX Magazine 1999年6月号 p.133 プリンタの設定(UNIX の玉手箱) lpr/lpd のガイドが出ています --- [管理番号 1470] (最終更新 2000/05/24 20:52:55) Q. FreeBSD から、Windows NT 4.0 に接続されたプリンタへの印刷。 A. 以下のような2つの方法があります。 1. WinNT に lpd(8) サービスを導入して印刷。 まず FreeBSD 側の設定です。 a) /etc/printcap に実際のプリント用と Ghostscript のフィルタ用の二つの エントリを追加します。なお、リモートホスト名を BLESS、リモートプリンタ 名を LP-1500 と仮定します。書式についての詳細は printcap(5) を読んで ください。 remote:\ :lp=/dev/null:sh:mx#0:lf=/var/log/lpd-errs:\ :sd=/var/spool/output/remote:\ :if=/usr/local/libexec/LP-1500.sh: remote-help:\ :lp=/dev/null:sh:mx#0:lf=/var/log/lpd-errs:\ :rm=BLESS:rp=LP-1500:\ :sd=/var/spool/output/remote-help: b) 上記で追加したエントリ用のスプールディレクトリを作成します。 # mkdir /var/spool/output/remote # mkdir /var/spool/output/remote-help c) 以下の様なフィルタ /usr/local/libexec/LP-1500.sh を作成し、chmod +x しておきます。使用するプリンタにより設定は異るでしょう。 #!/bin/sh exec /usr/local/bin/gs -q -dNOPAUSE -sDEVICE=epag \ -sOutputFile=- - | lpr -l -Premote-help d) WinNT で lpd の service を稼働させるには、 サービス -----> TCP/IP Print Server です。 e) 印刷方法は、 % lpr -Premote tiger.ps です。 森さんよりの貴重なアドバイスについては、[FreeBSD-beginners-jp 6561] 前後を見てください。 2. lpd を使わずに smbclient(1) の print コマンドで印刷する。 /etc/printcap は使いません。スクリプトによる自動化では [FreeBSD-users-jp 38229] を参考にしました。 a) /usr/local/bin/gsf として以下の内容のスクリプトを作成します。 #!/bin/sh OF=/var/tmp/gsf.$$.LP-1500 trap "rm -f $OF; exit 1" 2 15 touch $OF chmod 600 $OF { echo showpage ; echo quit ; } | \ /usr/local/bin/gs -q -dSAFER -dNOPAUSE -sDEVICE=epag \ -sPAPERSIZE=a4 -sOutputFile=$OF $1 > /dev/null 2>&1 /usr/local/bin/smbclient '\\BLESS\lp-1500' \ himitu -U user1 -P -N -c "print $OF" rm -f $OF exit 0 b) スクリプトのパーミッションを設定します。特に smbclient へのパスワー ドとユーザ名については、一般ユーザに読めないようにする必要があるかも しれません。 # chown root.wheel /usr/local/bin/gsf # chmod 711 /usr/local/bin/gsf c) そして印刷は、 % gsf tiger.ps です。ただし、一時ファイル /var/tmp/gsf.$$.LP-1500 を印刷実行中に変更 しないこと! ここでも森さんにお世話になりました。[FreeBSD-beginners-jp 6586] 前後を 見てください。