The Japanese Version of Linux Printing HOWTO Grant Taylor, <gtaylor+pht@picante.com> v3.12, 28 July 1997 田所 裕之 訳 (tadokoro@ask.or.jp) この文書は、Linux(そして一般的に他の Unix 等でも)の下で作成、プレビュー、印刷そしてファックスの全ての情報の集まりであ る Linux Printing HOWTO である。 目次 1. 前置き 1.1 歴史 1.2 版権 2. どうやって印刷するのか 3. カーネル プリンター デバイス 3.1 lp デバイス 3.2 シリアル デバイス 4. サポートされているプリンター 5. どのスプールソフトを使う? 6. どうやって働くのか、基本 7. どうやって設定するのか、基本 7.1伝統的な lpd の設定方法 7.2 ファイル許可 8. 印刷ソフトを入手する 8.1 Magic-filter 8.2 APS フィルター 8.3 EZ-Magic 9. ベンダー(配布パッケージ)ごとの解決方法 9.1 RedHat 9.2 他の配付方法 10. Ghostscript 10.1 ghostscript の起動 10.2 ghostscript の出力の改善 10.2.1 出力の位置とサイズ 10.2.2 ガンマ、ドットサイズ、その他 11. ネットワークを越えたプリンターへの印刷方法 11.1 Unix/lpd ホストへ 11.1.1 lpd を用いて 11.1.2 rlpr を用いて 11.2 Windows95, Windows NT, LanManager または Samba プリンターへ 11.3 NetWare プリンターへ 11.4 EtherTalk(Apple) プリンターへ 11.5 HP または他のイーサネットプリンターへ 11.5.1 HP の古いプリンターへ 11.6 離れた(リモート)プリンターのための if の走らせ方 12. ファックスマシンへの印刷の仕方 12.1 ファックスモデムを使用する 12.2 遠隔印刷サービスを使用する 13. 何か価値のある印刷を作成する方法 13.1 Markup language 13.2 WYSIWYG 14. 印刷可能なもののスクリーン上でのプレビュー 14.1 PostScript 14.2 Tex dvi 14.3 Adobe PDF 15. lpd の下でのシリアル プリンター 15.1 printcap の中での設定 15.2 文字落ちする古いシリアル プリンター 16. 謝辞 1. 前置き この Printing HOWTO はあなたの使用している Linux システムでの印刷サービスを設定する手助けとなる知識の全てを含むべきである。ポ イントとクリックの世界である Microsoft や Apple と比べれば多少繁雑であるが、このシステムはより柔軟で、大規模な LAN 環境の管理を確実に容易にする。 この第3版 (version 3.x) は完全に書き換えられたので、前の版に含まれていた多くの情報は失われてしまった 。以前の HOWTO は印刷すると60ページにも達する巨大なもになり、どんずまりの流れに突っ込んだ 死んだ亀のごとき状態に陥ってしまった。それ故に、この変更は意図して行なわれた 。答えがここに見つけられなかったら、a) printing HOWTO のホームページ <http://www.picante.com/~gtaylor/pht/> で以前の版を探すが、b) ここにあるべきなんだが、ないぞと私に知らせてくれ。 Printing HOWTO ホームページ <http://www.picante.com/~gtaylor/pht/> は最新の版を見つけるには最適の場所であるが、そしてもちろん、SunSite<sunsite. euc.edu> や近くの親切な LDP ミラーサイトにも配付される。 1.1 歴史 この文書は第3世代(いわゆる3度目の大改訂)の printing HOWTO である。 printing HOWTO の歴史はこのようにつづられる。 1.ニュースグループ comp.os.linux の中での非常に多くの印刷に関する質問と回答に対する答えとして私は、printing HOWTO を書いた。この文書は HOWTO プロジェクトに先立つことほんの2ー3ヶ月だったので 'howto' と呼ばれる最初の FAQ パンフレット(FAQlet)となった。この版は、単なる ASCII で書かれていた。 2. HOWTO プロジェクトに参加した後は、 printing HOWTO は Brian McCauley <B.A.McCauley@bham.ac.uk> による Lpd FAQ と併合された。我々はで2人で作業を行った。いくつかの点で我々は、Karl Auer <Karl.Auer@ann.edu.au> の仕事を加えた。この世代の printing HOWTOは Texinfo であった。そして PostScrit、ASCII、HTML そして Info でも入手可能である。 3.1年以上に渡って放置され、腐り落ちそして誰もこれを維持するしようとする人 を見いだせなっかた後、この改訂が持ち上がった。この世代の printing HOWTO は Linuxdoc-SGML で記述されている。 1.2 著作権 この文書の著作権(1997)は Grant Taylor にある。複製及び配付は自由であるが、しかし、変更や作者の名前の削除は許されない。 2. どうやって印刷するの 既にあなたのプリンターに印刷する lpd が設定されているか、システム管理者がしてくれているか、またはソフト会社が代り にしてくれてたのなら、あなたに必要なことは、lpr コマンドの使い方を勉強する必要があるだけだ。Printing Usage HOWTO <http://sunsite.unc.edu/mdw/HOWTO/Printing-Usage-HOWTO.html> がこれをカバーする。そして2ー3の印刷キューコマンドはもう既に知っていること であろう。 3. カーネル プリンター デバイス 3.1 lp デバイス あなたがカーネルの中にコンパイルしているか、lp デバイスを (cat/proc/devices の出力をデバイス lp に含む必要がある)ロードするかしているとして、Linux のカーネルは1つ以上の /dev/lp0,/dev/lp1 そして /dev/lp2 を提供する。これらは動的に割り当てられるのではなく、各々は特定のハードウェア の I/O アドレスに対応する。あなたの最初のプリンターは、あなたのコンピューターのハー ドウェアによって、lp0 か lp1 のどちらかになることを意味している。両者を試してみてくれ;)。 単方向しかサポートしていない古いケーブルを用いると、双方向通信をサポート している lp ポートが認識されない現象が、2ー3のユーザーから報告されている。きちんとした ケーブルが使用されているかチェックしてくれ。 いかなる与えられたポートでも、plip と lp ドライバーを同時に走らせることは出来ない。しかし、マニュアル(手作業という意 味)又はversion 2.x(そして、後期の 1.3x )の kerneld デーモンによって複数のドライバーを好きな時にロードすることは可能である。 割り込み等を慎重に設定すれば、1つのポートで plip を、そして他のポートで lp をおそらく走らせることができる。ある人がドライバーを編集することによってそれ を行っている。私は、賢いコマンドラインのみによって誰かがそれを成功したという 報告を熱望している。 どこかそこいらに転がっている tunelp と呼ばれる小さなユーティリティがある。それを利用すれば、あなたがルートとして Linux の lp デバイスの割り込みの利用、転送速度や他のオプションをチューン出来る。 lp が 1.3.x 又はそれ以降の幾つかのカーネルに組み込まれている時、カーネルは割り込みやその io アドレスを設定する lp= オプションを受け付けるだろう。 lp ドライバーがカーネルに組み込まれたなら、ドライバーが使用するであろうポートア ドレスと割り込みを設定する LILO/LOADLIN コマンドを使用できるかもしれない。 構文: lp=port0[,irq0[,port1[,irq1[,port2[,irq2]]]]] 例: lp=0x378,0 or lp=0x278,5,0x378,7 ** 注意:これが使用されたのなら、考慮されるべき総てのポートに対して指定されなけ ればならない。デフォールトは無い。 lp=0 で組み込み済のドライバーを無効に出来る。 version 2.0 や 1.3.x の後期のカーネルでモジュールとしてロードされた時、io アドレスと割り込みを insmod のコマンドライン(又は、kerneld デーモンに影響を与えるように、/etc/conf.modules の中)で通常の構文を用いて可能である。パラメーターは、io=port0, port1, port2 そしてirq=irq0, irq1, irq2 である。より詳しい情報を得るために、汝ら man ページを読みなさい。 **必要な時に標準のポート番号を見つけられなかった(私みたいな)人のために、上 の2つ目の例がある。他のポート (lp0) は 0x3bc にある。どの割り込み番号が通常使われているかは私には見当がつかない。 Linux パラレルポートドライバーのソースコードは、/usr/src/linux/drivers/char/lp.c にある。 3.2シリアル デバイス シリアルデバイスは Linux では通常 /dev/tts1 というように呼ばれる。stty ユーティリティはシリアルポートの設定を確認しそして設定できる。 setserial コマンドはさらに広い属性と IRQ や I/O アドレスを一般的でないポートに対しても制御可能である。 Linux 上でのシリアルポートのさらに詳しい議論は、Serial-HOWTO <http://sunsite.unc.edu/mdw/HOWTO/Serial-HOWTO.html> にて見つかるだろう。 フロー制御を行う遅いシリアルプリンターを使用する際に、印刷ジョブが不完全に終 了してしまう場合がある事を発見するかもしれない。これは、シリアルポートに責任 がある。このポートはポートデバイスが閉じられた30秒後に、まだ送信されていな い文字をバッファーから一掃してしまうように、デフォールトで設定されているから である。バッファーは最大で4096文字貯えることが可能であるが、使用しているプリ ンターがフロー制御を行っていて、印刷ソフトがシリアルポートを閉じてから30秒 以内にバッファーから全てのデータをプリンターが受け取ることが出来ない位遅いの であるならば、バッファーの最後の方が失われてしまうであろう。cat file > /dev/ttyS2 コマンドが短いファイルでは完璧な印刷が出来るのに対し長いファイルでは不完全に なる場合、このような状況に遭遇しているかもしれない。 この30秒間の間隔は setserial のコマンドライン オプションである "closing_wait" を介して調節できる(バージョン 2.12 以降)。マシンのシリアルポートは、 rc.serial 起動ファイル中にある setserial を呼び出す事によって通常は初期化を行っている。印刷用のシリアルポートの呼び出 しは、ポートの他のパラメーターを設定するのと同時に closing_wait を変更することができる。 4. サポートされているプリンター Linux のカーネルはシリアルやパラレルポートにコネクタを差し込めるあらゆるプリンター をサポートしている。しかし、注意する必要がある。Linux と交信できる(電気的に会話ができる)としても、使用できないプリンターが存在す る。これらの相容れないプリンター達は、”Windows 印刷システム (Windows Printing System) ”を当てにして動作する。(これらのプリンターは漠然と”Windows 用”というラベルが張られている。こういったプリンターは、Linux では動作しない。これらのプリンターはいわゆるスマートさは持ち合わせていない。 そして、かつてプリンターに搭載された CPU が行っていた仕事の多くの部分を、代わってコンピュータの CPU が行う事をあてにされている。不幸な事にこれらの仕事はベンダー(製造元が)供給 しているドライバーのみが行える。そしてそれらは Windows の下でのみ動作する。Linux で使用するなら、そのようなプリンターは買わない事だ。 Linux で動作するプリンターにはどんなものがあるかと言えば、最善の選択はポストスクリ プト (PostScript) をネーティブに理解するプリンターを買う事だ。Unix のソフトウェアのほとんどが PostScript で最終印刷物を作成する。従って、直接に PostScript をサポートするプリンターを入手することは素晴らしい事である。不幸な事に、レー ザープリンターの範疇以外で PostScript をサポートするものは少ない。 残念な事に PostScript プリンターを購入するには(より多くの)資金が必要である。だが、Ghostscript によってサポートされているどれかのプリンターを使用する事が可能である。Ghosts cript は実際に PostScript をサポートしている実際のプリンターの代わりに使用されるフリーの PostScript インタープリターである。Ghostscript ホームページ <hhtp://www.cs.wisc.edu/ghost/> にはサポートされているプリンターの一覧と新しい又は実験段階にあるドライバーの 状況に関する情報がある。Ghostscript のプリンターのサポートに関するページを改良するために成功例や失敗例を報告して 欲しい。 5. どのスプールソフトを使う? ごく」最近まで、Linux ユーザーは選択肢は極めて単純であった。皆同様に BSD の Net-2 distribution を逐語訳的に向上させた古い lpd を走らせていた。現在に至っても多くのベンダーはこのソフトを出し続けている。し かし変革の時がやって来た。Sun の Solaris パッケージに含まれている SVR4 様システムは lpsched を中心とする今までと完全に異なる印刷スプールパッケージを持っている。そして、 いくつかの Linux ベンダーが LPRng を提供する兆しがある。LPRng はそれ程昔のでないフリーな印刷スプールの移植である。LPRng は巨大にも関らず簡単にインストールでき、lpd に貯えてあるのと比べてもはるかにましのコードを持っている。 現時点では、新しいオプションに照らしてみても、lpd は恐らく多くの Linux ユーザーにとって素晴らしい物であろう。それが魅力的でないシステムだとしても、 一度セットしてしまえばそれは素晴らしく働く。そしてそれはよく理解されており、 サードパーティーから出版されている Unix の本に非常に良く記述されている。 更に詳しい LPRng の情報が欲しい場合は、LPTng - An Enhanced Printer Spooler <http://ltpwww.gsfc.nasa.gov:81/ltpcf/about/unix/Deptdoc/LPRmg/> をチェックしてくれ。将来のこの HOWTO の版では LPRng と通常の lpd 両者の情報を含めることになるだろう。 6. どのように動くのか、基本 印刷がきちんと行われるためには、lpd システムがどのように働くかを理解する必要がある。lpd は Line Printer Daemon を表す。そして、デーモンあるいは印刷スプールを走らせるプログラムの集まりの全 てという2つの異なる意味で参照される。これらは lpd スプーリングデーモン。マシン上の全てのことをコントロールするためにこれら の1つが走っている。そして、プリンターが印刷している間は、プリンター毎に1つ が作動する。 lpr ユーザーのスプールコマンド。lpr は lpd と連絡をとり、新たな印刷ジョブをスプールに投入する。 lpq 印刷キューの中の印刷ジョブ待ちリストを表示する。 lpc lpd システムをコントロールするコマンド。この lpc コマンドで印刷キューを止めたり、スタートさせたり、順番の変更等が出来る。 lprm lprm は印刷スプールより印刷ジョブを取り除く。 そー、どうやったら一緒になるかって? よろしい、コンピューターが立ち上が った時、lpd が走り出す。 lpd はスプールを管理するプリンターがどれかを知るために、/etc/printcap ファイルを見る。誰かが lpr コマンドを走らせる毎に、lprは/dev/printer と名付けられたソケットを経由してlpdと接触する。そして、印刷するファイル、誰 が印刷するのか、とかどうやって印刷するのかといったいくつかの情報を lpd に与える。そして、lpd はファイルを適当なプリンター上で順番に印刷する。 lp システムは、かつて殆どのプリンターが ascii 文字のみを印刷するラインプリンターだった頃に元来デザインされた。そしてそれら が追い出された後、現在の印刷の仕事(ポストスクリプトやテキストや dvi といった複雑な)のために lpd が素晴らしく動くようにする、ほんのわずかだけの余分な記述(スクリプト)が必要 である。 7. どうやって設定するのか、基本 7.1 伝統的な lpd の設定方法 最小の lpd に対する設定は、待ち行列(キュー)にファイルを放り込み、そしてそれを印刷でき るようにすることである。プリンターがこれらを理解するか否かについて注意を払う 必要は無い。そしてあなたの注意を引くような出力は得られないであろう。それでも 理解する為の第1段階だ、それ続け! 基本的に言って、lpd に印刷キューを付け加えるには、/etc/printcap の中に入り口(エントリー)を付け加え、/var/spool/lpd の下に新しいスプールの為のディレクトリを作成しなければならない。 /etc/printcap の中のエントリーはこんな風だ # LOCAL djet500 lp|dj|deskjet:\ :sd=/var/spool/lpd/dj:\ :mx#0:\ :lp=/dev/lp0:\ :sh: これは、lp, dj または deskjet と呼ばれるスプールを定義し、/var/spool/lpd/dj ディレクトリー中にスプールされる。ジョブ毎の最大サイズの制限はなし、/dev/lp0 で指定されたデバイスより印刷する。大見出しページ(印刷する人の名前等を含んで いる)を印刷ジョブの先頭に加えることなしに、印刷を行う設定である。 さあー、今だ! printcap の man ページを読もう。 上記のスプールはじつに単純であるが、本当は引っ掛けがある。Deskjet500 が理解できるファイルを送っているにもかかわらず、Deskjet は変な印刷を行う。例えば、通常の Unix のテキストファイルを送っても、Deskjet は文字どおりに newline を翻訳してしまう。そして、こんな具合になる。 This is line one. This is line two. This is line three. あー嫌になっちゃう。このスプールでポストスクリプトのファイルを印刷したなら、 この梯子段状になった美しい、しかしなんの役にも立たないポストスクリプトのコマ ンドのリストが得られるであろう。 明らかに何かが必要なのだ。そしてこれがフィルターの目的なのだ。printcap の man ページを読んだ観察力の鋭いあなたならスプールの属性である if と of に気が付いたに違いない。よろしい、if または input filter は我々がここで正に必要なものだ。 newline の前にキャリッジリターンを付け加えるフィルターと呼ばれる小さなシェルスクリプ トを書けば、この階段状の印刷は除去できる。そーだ、printcap のエントリーにifの行を付け加えなければならない。 lp|dj|deskjet:\ :sd=/var/spool/lpd/dj:\ :mx#0:\ :lp=/dev/lp0:\ :if=/var/spool/lpd/dj/filter:\ :sh: 簡単なフィルター スクリプトはこんな具合だ: #!perl # The above line should really have the whole path to perl # (上記の行は perl への完全なパスでなくてはならない) # This script must be executable:chmod 755 filter # (このスクリプトは実行可能であること。chmod 755 を忘れるな) while(<STDIN>){chop $_; print "$_\r\n";}; # you might also want to end with form feed:print "\f"; # 印刷の最後に改頁が必要なら、print "\f" を入れる 上記のようなことが出来たなら、通常の Unix テキストファイルが印刷できるスプールを持てる。そして意味のある結果が得られる 。(そう、より良いフィルターを書く400万通りもの方法があるが、実例となるも のは殆ど無い。あなたはより有効なものを作れるだろう。) 残っている問題は、単なるテキストファイルを印刷する事ではなく、PostScript やその他のフォーマット又は、グラフィクスを含む印刷を可能とすることである。そ う、可能だ。それを可能にすることは簡単である。この方法は前述した改行修正フィ ルターの単純な拡張である。入力としてかって気ままなファイルを受け入れ、それぞ れに Deskjet のようにきれいな出力を得られるようなフィルターを書くことが出来たなら、本当に すごい印刷スプールを得たことになる。 そのようなフィルターは、魔法のフィルター(magic filter)と呼ばれている。変てこなのが印刷されるとしても、自分自身でそれを書く 必要はない。ネット上には、既に多くの素晴らしいスプールが存在している。 7.2 ファイル許可 一般的な要求により、私は私のシステム上での重要なファイルに以下のリストで 示される許可を与えている。何種類ものより良い方法があるが、理想的には、SGID binary を使用するのみで、SUID root を何にでも与えるべきではない。しかし、これが箱(システム)の中から引っ張り出 してきた(特に変更を加えていない)私のシステムのやり方である。そして、私のた めに立派に働いてくれる。(正直に言って、あなたのベンダーが動作する lpd を出していないのなら、荒馬乗りに立ち向かうみたいなものだ。) -r-sr-sr-x 1 root lp /usr/bin/lpr* -r-sr-sr-x 1 root lp /usr/bin/lprm* -rwxr--r-- 1 root root /usr/sbin/lpd* -r-xr-sr-x 1 root lp /usr/sbin/lpc* drwxrwxr-x 4 root lp /var/spool/lpd/ drwxr-xr-x 2 root lp /var/spool/lpd/lp/ 低い番号 (low-numbered) の lp サービスポートに接続されるように、現在のところ lpd は root として実行されなければならない。接続された後はおそらく、UID lp.lp または何かになるべきであろう。しかし、私はそれが何をするのかは考えない。ブー。 8. 印刷ソフトを入手する 8.1 Magicfilter Magic filter は完全な仕様を兼ね備えたフィルターパッケージの一つである。これはたった10分 でインストールできるようにデザインされている。著者は LPRng の特別サポートを含んでいると告げられている。 Title: magicfilter Version: 1.1b Entered-date: 04APR95 Description: A customizable, extensible automatic printer filter. Lets you automatically detect and print just about any data type you can find a conversion utility for. This filter is written in C and is controlled completely from an external printer configuration file. This version adds automagic creation of configuration files based on the installed software on your system, courtesy of GNU Autoconf. This version is a bug fix from 1.1/1.1a; filters for non-ASCII capable PostScript printers have been added. カスタマイズおよび拡張可能な自動印刷フィルター。あなたが変換ユーティリティを 見つける代わりにあらゆるデータタイプを自動的に認識し印刷する。このフィルター はCで書かれていて、外部のプリンター設定ファイルより完全にコントロールされて いる。このバージョンでは、 GNU Autoconf の作法に則り、あなたのシステム上にインストールされているソフトウェアに基づい て設定ファイルを自動的に作成する。このバージョンでは、1.1/1.1aからのバグが修 正されており、ポストスクリプトを処理できる非 ASCII プリンター用のフィルターが追加されている。 Author: H. Peter Anvin <Peter.Anvin@linux.org> Primary-site: sunsite.unc.edu 53000 /pub/Linux/system/Printing/magicfilter-1.1b.tar.gz Copying-policy: GPL 8.2 APS フィルター 多くのマジックフィルフィルターのパッケージ中で推薦できる他の物は、Andrea s Klemm による aps フィルターである。Linux Software Map のエントリーはこのようになっている。 Begin3 Title: apsfilter Version: 4.9.1 Entered-date: Montag, 10. Juli 1995, 21:22:35 Uhr MET DST Description: magicfilter for lpd with auto filetype detection 自動ファイル認識型のlpd用のマジックフィルター Keywords: lpd magicfilter aps apsfilter Author: andreas@knobel.GUN.de (Andreas Klemm) Maintained-by: sledge@hammer.oche.de (Thomas Bueschgens) andreas@knobel.GUN.de (Andreas Klemm) Primary-site: sunsite.unc.edu /pub/Linux/system/Printing/ 211KB aps-491.tgz Original-site: ftp-i2.informatik.rwth-aachen.de /pub/Linux/pak/APSfilter/aps-491.tgz Platforms: C-Compiler, gs Postscript emulator, pbmutils Copying-policy: GPL End APS フィルターは印刷キューに対するifフィルターとしてインストールされる。そして、 多くの一般的な形式のファイルをプリンターの命令セットへと翻訳する。 APS フィルターは、例えば、テキスト、ポストスクリプト、dvi、gif そしてその他の物も処理できる。 8.3 EZ-Magic EZ-Magic は別なフィルターパッケージである。bash で書かれていて、sunsite で入手可能である。 Title: ez-magic printer filter Version: 1.0.5 Entered-date: January 26, 1997 Description: ez-magic is a printer filter that supports 8 common file formats (txt,ps,gif,bmp,pcx,png,jpg,tif) for printing. It can print over a network (SMB), or to a local printer. Reads from a file, STDIN, or lpd. Simple to use and configure. Just one script file, no huge manuals and multibillion drivers. The only catch is that you need a few common helper programs like netpbm and ghostscript. Written in bash. Easy to add formats and code. Still more bugs than I have appendages, but less than the number of grams of fat in a hot dog. Pre-configured for HP DeskJet 870Cse over network. Comparable to apsfilter and others. Keywords: magic filter, print, graphics, samba, network, smb, ghostscript, postscript, gif, jpg, simple Author: toby@eskimo.com (Toby Reed) Maintained-by: toby@eskimo.com (Toby Reed) Primary-site: http://www.eskimo.com/~toby/ez-magic-1.0.5.tar.gz 38 kb ez-magic-1.0.5.tar.gz Alternate-site: sunsite.unc.edu /pub/Linux/system/printing 38 kb ez-magic-1.0.5.tar.gz Copying-policy: Copyrighted, full manipulation rights, with one or two restrictions. 9. ベンダー(配布パッケージ)ごとの解決方法 この章は、当然未完成である。御自由に、あなたのお気に入りの配付形式の詳しい 情報を送って欲しい。 9.1 RedHat RedHat は遠隔プリンターやローカルデバイス上のプリンターを付け加えることの出来る GUI プリンター管理ツールを持っている。それは、ghostscript をサポートしているプリンターやそれに印刷する Unix デバイスファイルを選択することができる。そして、/etc/printcap の中に印刷キューをインストールし、gs や nenscript に基づいた、短い PostScript と ascii のマジックフィルターを書き込む。この解決方法はかなりよく動く、そして、たいて いの場合、この作業はとるに足りないことだ。 9.2 他の配付方法 他の配付形態がどうしているかを私に連絡して下さい。 10. Ghostscript ghostscript は Linux の印刷にとって非常にすぐれたプログラムの一つである。多くの Unix での印刷ソフトウェアは PostScript コードを作り出す。そして、PostScript は100ドルのオプションである。しかし、ghostscript はフリーソフトであり。PostScript からあなたのプリンター言語を作り出す。 ghostscript と lpd の input filter を結合させると仮想の PostScript プリンターを提供する。そして素晴らしく単純化する。 訳注 以前の版では PostScript は100-300ドルのオプションだった。アメリカでは安くなったのかな。しかし日本で はフォントの問題もあって、まだまだ高いですね。 ghostscript は2つの形で入手可能である。Aladdin Ghostscript と呼ばれる市販品は、個人使用に対しては自由に利用できるが、市販の Linux パッケージによる配布はできない。この版はフリーの ghostscript に比して一般に1年位先を行っている。例えば現在のところ、Adobe Acrobat Portable Document Format をサポートしているが、古い版ではそうではない。 フリー版の ghostscript は GNU ghostscript である。そしてそれは単に Aladdin Ghostscript の古い版であり、GNU に寄贈されたものだ(この協定に対して、Aladdin に名誉を。より多くのソフトウェア会社がフリーのソフトウェアをこの方法でサポー トすることを)。 ghostscript を用いて何かをするときはいつでもファイルアクセスを禁止するオプション(-dSAFE R)と共に走らせること。ポストスクリプトは十分な機能を持つ言語である。そして 悪いポストスクリプト プログラムは全く頭痛ものである。 訳注 PostScript Level2 からはファイルアクセスが可能となっている。従って、かってにファイルを削除した り、トロイの木馬のようなプログラムを書くことが可能となっている。 PDF について言及しよう、Adobe Portable Document Format は実際のところ、圧縮してまとまられた PostScript ファイルより多少ましである。ghostscript は PostScript が行うのと同様、PDF の入力を処理できる。そうだよ、あなたは PDF を印刷可能なプリンターを所有しているのだ。 10.1 Ghostscript の起動 通常は、ghostscript はマジックフィルターが起動された時点で、実行されているはずである。しかしデバ ッグの目的のためにしばしば直接実行する必要がある。 gs -help はオプションと利用可能なドライバーに関する短い一覧を表示する。(このドライバ ーリストはコンパイル時に組み込まれているものであり、利用可能なすべてのドライ バーではない。) テストの目的で gs をこんな風に走らせる事ができる。 gs options -q -dSAFER -sOutputFile=/dev/lp1 test.ps 10.2 Ghostscript の出力の改善 満足できない出力しか得られない場合、やるべき事はたくさんある(ソースコー ドがあるので、実際のところ、なんだってできる)。 10.2.1 出力の位置とサイズ ページ上のイメージの場所、大きさそしてアスペクトレシオ(縦横比)は ghostscript の印刷指定 (printer-specific) ドライバーによって制御できる。出力が短すぎたり、長すぎたり、倍のサイズだった ら、ドライバーのソースコードを眺めて、パラメーターを調整してみたくなるだろう 。残念なことに、ドライバーはそれぞれ異なっているので、どこを調節すべきかを述 べることできない。しかし、良くコメントが加えられている。 10.2.2 ガンマ、ドットサイズ、その他 ほどんどのレーザーでないプリンターは、そのドットの大きさが思いのほか大き いという事実に襲われる。このことは、画像が暗すぎるという結果を引き起こす。こ の問題に直面したなら、それ専用の転送 関数 (transfer function) を使用すべきである。以下のファイルを ghostscript の lib ディレクトリに作成し、実際のファイの前に ghostscript の呼び出しににその名前を付け加えるだけである。プリンターによって実際の値を変 更する必要があるかもしれない。低い値は明るい印刷をもたらす。特に、プリンター が Floyd-Steinberg アルゴリズムをカラーの展開に使用しているのなら、低い値(0.2 - 0.15)がたぶん最適だろう。 ---8<---- gamma.ps ----8<--- %! %transfer functions for cyan magenta yellow black {0.3 exp} {0.3 exp} {0.3 exp} {0.3 exp} setcolortransfer ---8<------------------8<--- これらの値を変更することによって、プリンターの持つある種の色の欠点を修正する ことも可能である。もしこのことを行うのであるならば、colorcir.ps ファイルを使用することを推薦する。それは、テストページとして ghostscript と一緒に付いてくる( examples/ サブディレクトリの中に)。 11. ネットワークを越えたプリンターへの印刷方法 lpd の特徴の一つは、異なった機械に物理的に接続されているプリンターにネットワーク を介しての印刷をサポートしていることである。フィルタースクリプトと取り揃えら れたユーティリティの注意深い組み合わせで、あらゆる種類のネットワーク上のプリ ンターへ意識することなしに印刷する lpr を作成することが可能である。 11.1 Unix/ldp ホストへ あなたの使用しているプリンターに離れたマシンから印刷することを許す為には、 /etc/hosts.equiv 又は /etc/hosts.lpd の中リストにそのマシンを入れなければならない。(注意、 hosts.equiv は他の影響を持つホストも入っている。そこにいかなる器械をリストに加える場合、 あなたが何をしているのかをしっかりと知る必要がある。)rs 属性を用いて、他のマシンの特定のユーザーのみをあなたのプリンターでの印刷を許 可することができる。このことについては、lpd の man page を読んでください。 11.1.1 lpd を用いて ほかのマシンに接続されているプリンターへ印刷する場合、/etc/printcap のエントリーを次のように作成しなさい。 # REMOTE djet500 lp|dj|deskjet:\ :sd=/var/spool/lpd/dj:\ :rm=machine.out.there.com:\ :rp=printername:\ :lp=/dev/null:\ :sh: lpd によって管理されているそのローカルマシン上にスプールディレクトリーは存在する 。離れたマシンがビジーだったり、オフラインだった場合、ローカルマシンからの印 刷ジョブは送ることができるようになるまでスプール領域の中で待たされる。 11.1.2 rlpr を用いて lpd の設定で激論を交わすことなしに、離れたマシン上の印刷キューに直接印刷ジョブを 送り込むrlprも使用することができる。これは、様々なプリンターにほんのたまに印 刷させるにはもっとも利用価値のある解決方法である。rlpr の宣伝から、 rlpr はネットワーク上のどこかにある lpd サーバーに対して印刷ジョブを送るのに TCP/IP を用いる。 lpr と異なり、rlpr はどのマシンから印刷されているのかを(/etc/printcap を通して)離れたプリンターがはっきりと知る必要はない。それゆえ、rlpr はかなりの柔軟性を持ち、管理の低減をもたらす。 rlpr は、伝統的な lpr が使用できるいかなる場所で使用できるだろう。そしてこれは、rlpr は逆の意味で従来の BSD lpr と互換性を持つ。 rlpr によって得られるもっとも大きな力は、システムが印刷に関してどんな設定になって いるかにかかわらず、あらゆるところからどんな場所へも印刷すできることである。 従来の lpr のようにフィルターとして働くことができるので、netscape、xemacs、その他のリモ ートマシン上の動作しているクライエントはほんの僅かの努力でローカルマシン上で 印刷を行える。 rlpr は SunSite<ftp://sunsite.unc.edu/pub/Linux/system/Printing/> より入手可能である。 11.2 Windows95, Windows NT, LanManagerまたはSambaプリンターへ どこかそこいらに、"Printing to Windows mini-HOWTO" がある。それには、ここに書いてある以上に詳しい情報がある。 smbclient プログラム(samba suite の一部であるが)を介して、TCP/IP ベースの SMB 印刷サービスへ lpd キューを送ることができる。 Samba は smbprint と呼ばれるこれを実行するスクリプトを含んでいる。手短に言って、当のプリンター に対する設定ファイルをスプールディレクトリーの中に入れ、ifとして smbprint スクリプトをインストールすればよい。 /etc/printcap の中のエントリーはこんな具合だ。 lp|remote-smbprinter:\ :lp=/dev/null:sh:\ :sd=/var/spool/lpd/lp:\ :if=/usr/local/sbin/smbprint: これをどのように設定するかのより詳しい情報を得るために、inside smbprint script のドキュメンテーションを読むべきである。 lpd を巻き込むことなしに、SMB 印刷サービスに直接ファイルを差し出す、 smbclient も使用可能である。man page を見なさい。 11.3 NetWare プリンターへ ncpfs セットは、nprint と呼ばれるユーティリティを含んでいる。この nprint は smbprint と機能的には同じであるが、NetWare 用である。ncpfs は SunSite より入手可能である。バージョン0.16の LSM エントリーによると、 ncpfs を用いれば、Linux の下で NetWare のサーバーのボリュームをマウントできる。NetWare 印刷キューへの印刷も可能であるし、また、Linux の印刷システムへ NetWare の印刷キューをスプールすることもできる。カーネル1.2x 又は 1.3.54 以降が必要。ncpfs は1.3.54より初期のいかなる1.3xカーネルでも動かない。 lpd を介して nprint を動かすには NetWare のプリンター上で stdin を印刷する小さなシェルスクリプトを書く必要がある。そして lpd の印刷キュー用の if の如くインストールする必要がある。こんな風に、 sub2|remote-NWprinter:\ :lp=/dev/null:sh:\ :sd=/var/spool/lpd/sub2:\ :if=/var/spool/lpd/nprint-script: nprint スクリプトは大体こんな具合だ、 #! /bin/sh /usr/local/bin/nprint -S net -U name -P passwd -q printq-q - 11.4 EtherTalk(Apple) プリンターへ netatalk パッケージは nprint や smbclient のようなものを含んでいる。他の者が、私がかつてやってきた以上に素晴らしい Apple ネットワークへそして Apple ネットワークからの印刷の手順について文書化している。Linux Netatalk-HOWTO <http://thehamptons.com/anders/netatalk>を見てくれ。 今週の警告:Netatalk は DEC チューリップチップ(tulip chip)を用いた SMC Etherpower PCI カードでは動かない。 11.5 HP または他のイーサネットプリンターへ HP や他のプリンターは、lpd を用いて直接印刷できるイーサネットインターフェースを持っている。プリンターや ネットワークアダプターに付いてくる説明書に従ってくれ。しかし、一般的に言って このようなプリンターは lpd が走っており1つか又は複数の印刷可能なキューを割り当てる。例えば HP の場合、このような printcap で動作するであろう。 lj-5|remote-hplj:\ :lp=/dev/null:sh:\ :sd=/var/spool/lpd/lj-5:\ :rm=printer.name.com:rp=raw: HP の Jet Direct インターフェースを備えた Laserjet プリンターは、2つの組み込み済みの lpd キューを一般的にサポートしている。それらは PCL(そして、恐らく PostScript )を受け付ける raw と、連続した ascii コード を受け付ける(そして階段状の影響を自動的に対処する)text である。 大きなスケールの環境、特にいくつかのプリンターがポストスクリプトをサポートし ない環境に於ては、全てのマシンが印刷する専用のプリンターサーバーを設け、そし て全ての ghostscript のジョブをその上で走らせるのが有効であろう。 この事はあなたの Linux マシンが印刷用のスプールサーバーとして活用できる事を示している。それ故ネット ワークユーザーはすばやく印刷ジョブを終了できるし、誰かがプリンターを使用して いてそれが終了するまで待つ必要がなくなる。 これを行うには、あたなの Linux box がイーサネットを備えている HP LJ (上を参照のこと)を指し示すキューを設定しなくてはならない。さあ、あなたの LAN 上の全てのクライエントを Linux キューを指し示す様に( lj-5 の例が上にある)設定しよう。 ある HP のネットワークプリンターはクライエントから送られたバナーページ(大見出しのペ ージ)の設定を明らかに気に止めない。あなたは telnet そのプリンターに接続し、return を2回叩き、"banner: 0" とタイプして、最後に "quit" を送ることで、始めに作成されたそれらのバナーページを止められる。 11.5.1 HP の古いプリンターへ あるプリンター(ブラックボックスとしてネットワークに接続されているプリン ター)は基本的な TCP 接続を含む安っぽいかつ貧弱なぴプロトコールのみをサポートしている。このカテゴ リーの中で注目に値するのは、JetDirect(JetDirectEX を含む)カードの初期モデルである。基本的に言って、この手のプリンターに印刷す るには、特定のポート(典型的には9100)上のプリンターへの TCP 接続を開かなければならない。そして、その中に印刷ジョブを押し込める。 いろんな方法があるが、Perl でこれを実行するには、 #!/usr/bin/perl # Thanks to Dan McLaughlin for writing the original version of this # script (And to Jim W. Jones for sitting next to Dan when writing me # for help ;) $fileName = @ARGV[0]; open(IN,"$fileName") || die "Can't open file $fileName"; $dpi300 = "\x1B*t300R"; $dosCr = "\x1B&k3G"; $ends = "\x0A"; $port = 9100 unless $port; $them = "bach.sr.hp.com" unless $them; $AF_INET = 2; $SOCK_STREAM = 1; $SIG{'INT'} = 'dokill'; $sockaddr = 'S n a4 x8'; chop($hostname = `hostname`); ($name,$aliases,$proto) = getprotobyname('tcp'); ($name,$aliases,$port) = getservbyname($port,'tcp') unless $port =~ /^\d+$/;; ($name,$aliases,$type,$len,$thisaddr) = gethostbyname($hostname); ($name,$aliases,$type,$len,$thataddr) = gethostbyname($them); $this = pack($sockaddr, $AF_INET, 0, $thisaddr); $that = pack($sockaddr, $AF_INET, $port, $thataddr); if (socket(S, $AF_INET, $SOCK_STREAM, $proto)) { # print "socket ok\n"; } else { die $!; } # Give the socket an address. if (bind(S, $this)) { # print "bind ok\n"; } else { die $!; } # Call up the server. if (connect(S,$that)) { # print "connect ok\n"; } else { die $!; } # Set socket to be command buffered. select(S); $| = 1; select(STDOUT); # print S "@PJL ECHO Hi $hostname! $ends"; # print S "@PJL OPMSG DISPLAY=\"Job $whoami\" $ends"; # print S $dpi300; # Avoid deadlock by forking. if($child = fork) { print S $dosCr; print S $TimesNewR; while (<IN>) { print S; } sleep 3; do dokill(); } else { while(<S>) { print; } } sub dokill { kill 9,$child if $child; } 11.6 離れた(リモート)プリンターのためのifの走らせ方 lpd の奇妙なことの1つは、遠隔プリンターの為に if を走らせない事だ。if を走らせる必要があると発見した時は、2重のキューを設定し印刷ジョブを再びキュ ーをくぐらせる事によって可能となる。例えば、この printcap を試してみて、 lj-5:remote-hplj:\ :lp=/dev/null:sh:\ :sd=/var/spool/lpd/lj-5:\ :if=/usr/lib/lpd/filter-lj-5: lj-5-remote:lp=/dev/null:sh:rm=printer.name.com:\ :rp=raw:sd=/var/spool/lpd/lj-5-raw: この filter-lj-5 スクリプトの中身は、 #!/bin/sh gs <options> -q -dSAFER -sOutputFile=- - | \ lpr -Plj-5-remote -U$5 lpr の -U オプションは、lpr がデーモンとして走っている場合のみ有効である。そして、再送されたキューの中で 正しく送り側の名前がセットされるようにする。ある場合は引数は5じゃない時があ るので、ユーザーの名を得るより賢明な方法を使いたいかもしれない。 printcap の man page を見るように。 11.7 Windows から Windows(あるいは、恐らく OS/2 も)クライエントから Linux サーバーへの印刷は、SAMBA パッケージを利用する事によって、SMB を介して直接サポートされている。そのパッケージは Windows クライエントに対して Linux ファイルシステムを提供する事ももちろんサポートしている。 samba は素晴らしく完全なドキュメントを含んでいる。Linux box 上でマジックフィルターを設定したり、PostScript ファイルをそれで印刷したり、全ての Windows マシンにプリンターに特化したドライバーをインストールするプログラムを走らせた り、全くフィルターを介さないキューを持つ事を可能とする。Windows のプリンタードライバを当てにする事は、ある場合に於いてより良い出力を得ること ができる。しかし、数多くの Windows マシンが存在する場合、より多くの激論が要求される。そう、まず PostScript を試してくれ。 11.8 Apple から Apple クライエントから EtherTalk を介しての印刷を Netatalk は差っポートしている。Netatalk HOWTO ページ <http://thethompsons.com/anders/netatalk/> を見てくれ。 11.9 Netware から Caldera から Linux の為のある種の Netware をサポートするサービスが入手可能のである。しかし、Netware クライエントに対する印刷サービスを提供できるかは解らない。 12. ファックスマシンへの印刷の仕方 12.1 ファックスモデムを使用する そこかしこに文書の送信や受信のできるファックスプログラムが存在する。最も 複雑なものの1つが、ftp.sgi.com より入手可能な Sam Leffler の Hylafax である。このプログラムは複数のモデムや放送(braodcast)に至るまでのあらゆる 部類のことをこなす。 多くの Linux ユーザーにより良い選択は、efax である。これはファックスを送るだけの単純なプログラムである。gtty のプログラムである mgetty はファックスを受信できる(そして、いくつかのモデム上ではボイスメールの受信も できる)。 12.2 遠隔印刷サービスを使用する 印刷したいものを含む電子メールを送ることによってどっかしらのファックス上 に出てくる実験的なサービスがある。PostScript のような素晴らしいフォーマットもサポートされているが、全体に渡ってざらざらし ている。これはとても素晴らしいサービスになるに違いない。リモート印刷サービス を介しての印刷についてのより詳しい情報は、FAQ <fttp://www.town.hall.org/fax/faq.html> を見るように。 13. 何か価値のある印刷を作成する方法 我々はソフトウェアの本当のネズミの巣(迷路)に入ってしまった。基本的にい くぶんかの程度の差はあるが、Linux は多くのタイプのバイナリーを走らせることができる。Linux/X86、Linux/Alpha, Linux/Sparc, Linux/foo, iBCS、WIN16/Win32s(dosemu またはいつの日か Wine を用いて)そして Mac/68K(Executorを用いて) そして JAVA。 Linux の iBCS エミュレーション下で素晴らしく良く動く SCO 用の WordPerfectそして他のコマーシャルベースのワードプロセッサーに言及することは 避けて、 Linux そのもの、そして一般的な Unix のソフトについてここでは議論しよう。 訳注 ver 3.10 では”4つの”バイナリーだった。1年間で”多くの”に代ったのには驚くばかりで ある。 Linux自身に関しては、一般的なUnixの為に入手可能なものは、ほとんど限られた選 択肢しかない。 13.1 Markup language ほとんどのマークアップ言語は巨大な又は反復するプロジェクトにより適してい る。一方、コンピューターにテキストを一様の形式にレイアウトすることを制御させ たいという要望もある。マークアップ言語できれいな表示をしようとすることは、恐 らく有害では... nroff これは最初の Unix の整形言語である。man ページは多くの人が信用している *roff マクロで整形された最も一般的な例である。それに対して悪口を言う人も多く、少な くとも私にとって、nroff は必要以上に難解な構文を持ち、新しい仕事に選択する価値は低い。groff を用いると man ページを直接にポストスクリプトへ印刷できるのを知っている事は価値がある。これ を可能とする man コマンドはman -t foo | lprである。 Tex Tex 及びそのマクロパッケージ LaTex は Unix 上で広く使用される整形言語の一つである。レイアウトが簡単に行え、完全に且つ良 好に数学的記述をサポートする数少ないテキスト処理システムとして、技術的な仕事 はしばしば Latex にて記述される。Tex の出力形式は dvi であり、ポストスクリプトやヒュレットパッカードの PCL へ dvips や dvilj にて変換できる。 SGML Unix 及び Linux のために入手可能なフリーの sgml パーサーが少なくとも1つだけある。それは Linuxdoc-SGML 文書システムの基礎を形成している。それは、他の DTD(文書型定義、訳者が知らなかったので、岡田雄木さんの説明によると、HTMLの タグの標準みたいなもの...だそうです)も同様にサポートしている。 HTML 誰かがこれを単純な仕事向けだと示唆してくれた。HTML で書けば十分かもしれないし、Netscape を用いれば印刷することも可能だ。私はそれには賛成しないが、あなたの環境によっ て違うかもしれません。 13.2 WYSIWYG WYSIWYG 型のワープロソフトは、もはや不足していない。幾つかの完全なオフィス用スイート (***オフィスパッケージのようなもの)が入手可能である。その中には、個人の 使用に関してはフリーな物もある (StarOffice)。 StarOffice ドイツの会社が StarOffice 3.1 をネット上でフリーに配布している(これに対して最新版は version 4)。この成熟したオフィススイートはあなたが期待する全ての機能を兼ね備えてい るし、価格もすばらしい。どこかそこいらに、それをどうやって入手しインストール かを記述した mini-HOWTO が転がっている。それは PostScript または PCL を生成する。それ故、 Linux 上で動くもほとんどのプリンターで 印刷できる。 LyX LyX は将来性のあるLaTexのフロントエンドである。より詳しい情報は、LyX のホームページ <http://www-pu.inormatik.uni-tuebingen.de/users/ettrich/> まで。 The Andrew User Interface System このシステムは、基本的なワードプロセッサーとしての機能、HTML、MIME 電子メールそしてニュースグループのサポートの機能を持つ WYSIWYG 型の ez というエディターを含んでいる。 市販品 最後に、Caldera と Red Hat は WYSIWYG 型のワードプロセッサーとスプレッドシートの通常のオフィス向けのアプリケーショ ンをパッケージに入れて出荷している。それは素晴らしい仕事だと思うが、残念なが ら、私は使用したことがない。Caldera は SUN の WABI も出荷している。それゆえ、他の人のファイルをまとめなければならないとしたら、 WABI を用いて MS Office の様なソフトを走らせられるだろう。 Jeff Phillips<jeff@I_RATUS.org> は Caldera の WordPerfect for Linux を(Slackware 上でや)使用している。そして巧く働いていると話している。それは期待している通 り、プリンターサポートを明らかに組み込んでいる。Caldera は <http://www.caldera.com/> より情報を得られる。 Red Hat は Applixware と呼ばれるスイートソフトを出荷している。Red Hat のウェブサイトは、<http://www.redhat.com/>である。 他のベンダーもぜひあなた方の提供するものの情報を連絡してくれ。 14. 印刷可能なもののスクリーン上でのプレビュー 印刷できるもののうちかなりのものがスクリーン上でも表示できる。 14.1 PostScript ghostscript は PostScript のプレビューワーである Ghostview の管理の下で使用されると最も良く働く X11 ドライバーを持っている。これらのプログラムの最新版は、PDF ファイルも同様に表示できる。 14.2 Tex dvi Tex DeVice Independent ファイルは xdvi を用いると X11 の下でプレビュー出来るかもしれない。最新版の xdvi は PostScript の特殊コードを展開するのに ghostscript を呼び出す。 VT100 ドライバーも同様に存在する。それは、dgvt と呼ばれる。 Linux と svgalib が使える事の全てなら、Tmview が動作する。 14.3 Adome PDF Linux 用の Adobe's acrobat Reader が利用可能である。彼らのウェブサイト <http://www.adobe.com/> からダウンロードするだけである。 xpdf もまた使用できる。それはソース付きでやって来るフリーウェアである。今のままで 、X11 の下で gs を用いて PDF ファイルを表示する事をサポートしていると思うのだが。 15 lpd の下でのシリアル プリンター 15.1 printcap の中での設定 プリンターが接続されているシリアルポートの全ての設定を制御するために、lp dは/etc/printcap 中で設定する5つの属性を持っている。printcap の man ページを読みなさい。そして、br#、fc#、xc#、fs# そして xs# に注目すること。この内、後の4つの属性は、ポートを使用する為の設定を示すビッ トマップである。br# は単にボーレートを示す。例えば 'br#9600'。 stty の設定を printcap のフラグ設定に翻訳するのはとても簡単である。そうする必要があるなら、今すぐ stty の man ページを見よう。 プリンターポートにファイルを連結(cat)して正しく印刷されるように、プリンタ ーポートを設定するのには stty を使用しなさい。私のプリンターポートの為の'stty -a'はこのようになっている。 dina:/usr/users/andy/work/lpd/lpd# stty -a < /dev/ttyS2 speed 9600 baud; rows 0; columns 0; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; min = 1; time = 0; -parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon -ixoff -iuclc -ixany -imaxbel -opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 -isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke この設定とブートアップ時のポートの初期化の方法とのわずかな違いは、-clocal、- crtscts そして ixon である。ポートは使用しているプリンターがどのようなフロー制御をしているかによ って異なっているかもしれない。 実際のところ、stty は奇妙な使われ方をしている。stty は標準入力に接続された端末上で動作するので、上記の例のごとく '<' 文字を使うことによって、与えられたポートを操作することが stty を使って出来る。 一度、stty の設定がうまくいったのなら、'cat file > /dev/ttyS2'(私の場合であるが)がプリンターにファイルを送る。 /usr/src/linux/include/linux/termios.h ファイルを見なさい。このファイルはたくさんの #define と2ー3の構造体を含む(あなたはプリンターにこのファイルを送りたいと思うかも しれない(ちゃんと動いたかい?)そしてそれを落書き用紙に使いなさい)。さあー 、次の部分に移動しよう。 /* c_cflag bit meaning */ #define CBAUD 0000017 ここでは、fc# と fs# ビットの意味について述べる。stty の出力の行の一つと一致するそこにある名前(ボーレートの後だよ)に気が付いただ ろう。わたしは簡単だと言わなかったかい。 sttyの出力の中で - が先についている設定に注意しなさい。これらの全ての番号を加算してごらん(これ らは8進数だよ)。これは、あなたがクリアーしたいビットを表している。そう、そ の結果は fc# の設定である。もちろん、クリアーした後直接ビットを設定できるということも覚え ておいてください。そーとも、 fc#0177777 を使用できる(私はそうしている)。 stty の出力の中では - が先についていないこれらの設定(この章で示されている)に対しても同様の事がで きる。 私の例の中で、重要なのは CS8(0000060)、 HUPCL(0002000) そして CREAD(0000200)。また、ボーレートの為のフラグ(私のは、0000015)にも注意しな さい。これらを全て足すと、私の例では 0002275 になる。これがあなたの fs# の設定になる(私の例では 'fs#02275' で上手く動いてる)。 インクルードファイル "c_lflag bits" の次の部分の為に、セットとクリアーを同じように行いなさい。私の場合、全てのこ とを設定するわけではないので、ただ、'xc#0157777' と 'xs#0' のみ使用している。 15.2 文字落ちする古いシリアル プリンター 安物のシリアルインターフェースと小さなバッファーを持つある種の古いシリア ルプリンターは、フロー制御の際に確かに止まってしまうことを Jon Luckey が指摘している。彼は、setserial を用いて彼の Linux マシンの 16550 シリアルポートの FIFO を無効にすると、文字落ちの問題を解決できることを発見した(どうもこれを行うに は、uart のタイプを 8250 と指定した方が良いらしい)。 16. 謝辞 smbprint の情報は、Marcel Roelofs <marcel@paragon.nl> による著作によっている。 NetWare プリンターを使用するための nprint の情報は、Michael Smith <mikes@bioch.ox.ac.uk> によって提供された。 lpd の下でのシリアルプリンターの章は、Andrew Tefft <teffta@engr.dnet.ge.com> による。 ガンマそして gs に対する情報は Andreas <quasi@hub-fue.franken.de> より送られた。 シリアルドライバーの30秒間の閉鎖待ちについての2章は Chris Johnson <cdj@netcom.com> より贈られた。 私はただ掲げただけであったが、ネットワークに接続された HP プリンターへのプリントサーバーの設定方法について、Robert Hart は幾つかのすばらしい章を送ってくれた。 そして、何年にも渡って数多くのタイプミス、間違った URL、そして文書の間違いを指摘してくれた人々に対し大変感謝している。 Japanese Version of Printing HowTo V3.12 田所 裕之 Hiroyuki Tadokoro, M.D. 1-16, Miyamoto 2-chome Funabashi-shi, Chiba Pref. 273 JAPAN tadokoro@ask.or.jp tadokoro@nms.ac.jp tadokoro@nirs.go.jp