diff --git a/ja_JP.eucJP/books/handbook/install/chapter.sgml b/ja_JP.eucJP/books/handbook/install/chapter.sgml index 86e8403abb..bd99b9bded 100644 --- a/ja_JP.eucJP/books/handbook/install/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/install/chapter.sgml @@ -1,1923 +1,1923 @@ FreeBSDのインストール 改訂: &a.jim;, 2000 年 1 月. この章では この章では, あなたのシステムに FreeBSD をインストールする方法について説明しています. FreeBSD は, CD-ROM, フロッピーディスク, 磁気テープ, MS-DOS パーティション, (モデムや LAN を経由できるなら) anonymous FTP や NFS を通じてインストールすることができます. どのインストール方法を利用する場合も, まず 次のセクションで説明する インストールディスクの作成から始める必要があります. あなたが今すぐにインストールするつもりがなくとも, このディスクでコンピュータを起動すれば, あなたのハードウェアを FreeBSD で利用する上で重要な情報を得ることができます. また, その情報はどのインストール方法が利用できるのかについての判断材料にもなりますし, さらに, 後々起こるかも知れない問題を解決する手がかりにもなるでしょう. もし anonymous FTP を使用してインストールすることを考えているなら, 必要な作業はインストールフロッピーを用意することだけです. インストールプログラムは自動的に, 他に必要なものを用意してくれます. FreeBSD の入手に関する詳しい情報は, 付録の FreeBSD の入手方法 をご覧ください. さて, これまでの説明では, まだ具体的に何をすれば良いのかはっきりしないと思います. 続いて, 次のインストールガイドへ進んでください. インストールガイド この節では FreeBSD のインストールの準備から, 実際にインストールするところまでをひととおり解説しています. もし, 何か足りないな, と思われる部分に気付かれましたら, &a.doc; まで電子メールでお知らせください. 訳注 &a.doc; へのメールは英語でお願いします. 日本語訳に関するお問い合わせや, 英語でのやりとりが不安な方は &a.jp.doc-jp; まで日本語でお問い合わせください. インストールの準備 FreeBSD をインストールするには, その前にさまざまな準備作業が必要になります. これから, それぞれのインストール方法に対して どのような下準備が必要かを説明します. まず最初に, あなたの使っているハードウェアが FreeBSD でサポートされているかどうか確認しなければなりません. これには, サポートされている設定一覧 の節が便利です. ;-) SCSI コントローラやイーサネットアダプタ, サウンドカード等, あなたのマシンが装備している拡張カードのリストを作っておくと良いでしょう. このリストには割り込み番号 (IRQ) や IO ポートのアドレスといった, 拡張カードの設定に関する内容も書いておきます. インストールフロッピーの作成 何枚かのフロッピーディスクを用意します. これらのディスクは あなたのコンピュータを起動して, インストーラを起動するのに使用します. この手順は, あなたのシステムが CDROM からの起動をサポートしていて, CDROM からインストールを行う場合には必要ありません. もしそうでなければ, 起動用のフロッピーが必要です. あなたのシステムが CDROM からの起動をサポートしているかどうかわからない場合は, 試してみてください. 普通にドライブに CDROM を入れてシステムを再起動します. その際, システムがハードディスクよりも先に CDROM から起動を試みるように, BIOS の設定を変更する必要が あるかも知れません. もしあなたが CDROM を持っていても, ファイルをダウンロードすることには意味があります. それは, CD がリリースされた後に FreeBSD のインストーラのバグが見つかった場合, FTP サイトのイメージは速やかに修正されるからです. 当たり前のことですが, プレスされた後の CD が修正されることはありません. 起動フロッピーイメージの入手 イメージは .flp という拡張子のファイルです. FreeBSD の CD-ROM を持っている場合は, floppies サブディレクトリの中にあります. また, FreeBSD の FTP サイトの floppies ディレクトリおよび, そのミラーサイトからイメージをダウンロードすることも可能です. ファイルの名前は (時々) FreeBSD のリリースによって, またインストールを行うアーキテクチャによっても異なります. FTP サイトにあるインストール用起動ディスクのイメージに関する説明において, あなたが必要とするファイルに関する最新の情報が提供されています. フロッピーディスクの準備 ダウンロードしたイメージファイル一つに対して, 欠陥の無いフロッピーディスクを一枚用意する必要があります. 欠陥が無いことを確認する簡単な方法は, ディスクをフォーマットしてみることです. フォーマット済みで販売されているフロッピーディスクを信頼してはいけません. FreeBSD をインストールしようとした時に, インストーラがクラッシュもしくはフリーズしてしまったり, - 不正な振る舞いをする場合にまず疑わなけばならないのは, + 不正な振る舞いをする場合にまず疑わなければならないのは, 起動フロッピーです. 別のディスクにイメージファイルを書き込んで, もう一度試してみてください. イメージファイルのフロッピーディスクへの書き込み kern.flp というイメージファイルは, ディスクにコピーする通常ファイルではありません. これらはディスク全体の内容を含んだイメージファイルです. したがって, DOS の copy のような コマンドを使用してファイルを書き込むことはできません. これには, イメージを直接ディスクに書き込む特別なツールを使用する必要があります. もし DOS が動いているコンピュータ上でフロッピーを作成する場合は, わたしたちが提供する fdimage というツールを使用します. E: にある CD-ROM を利用して起動フロッピーを作成するには, 次のようにします. E:\> tools\fdimage floppies\kern.flp A: これをそれぞれの .flp ファイルに対して 毎回新しいフロッピーディスクに入れ換えながら繰り返します. コマンドは .flp の存在する場所に応じて調整してください. もし CD-ROM を持っていない場合には, FreeBSD の FTP サイトの tools ディレクトリから fdimage をダウンロードすることができます. (他の FreeBSD システムなどの) UNIX システム上で 起動フロッピーに書き込む場合は, &man.dd.1; コマンドが利用できます. FreeBSD 上でなら, コマンドの実行は次のようになるでしょう. &prompt.root; dd if=kern.flp of=/dev/rfd0 FreeBSD 上で /dev/rfd0 は 一台目のフロッピーディスク (A: ドライブ) を表し, /dev/rfd1 は同様に, 二台目のフロッピーディスク (B: ドライブ) を表します. 他の異なる UNIX システムでは, フロッピーディスクのデバイスに 違う名前が使われているかも知れません. 必要に応じて, それぞれのシステムに付属する文書を参照する必要があるでしょう. CDROM からインストールする前に あなたの CDROM ドライブが FreeBSD でサポートされない型である場合は, MS-DOS パーティションのセクションをご覧ください. BSDi の FreeBSD CD-ROM からインストールする場合は, 準備作業のすべてを行なう必要はありません (その他の CDROM でもそうだと思いますが, わたしたちはその CDROM の構成を知りませんので, 確実にそうかどうかはわかりません). Walnut Creek の CD-ROM に収録されている install.bat で直接 FreeBSD を起動することもできますし, makeflp.bat で起動フロッピーディスクをつくることも可能です. CD が El Torrito 規格の起動をサポートしていて, あなたのシステムが CDROM から直接起動する機能をサポートしているなら (多くの古いシステムは サポートしていません), 単に FreeBSD の CD の一枚目をドライブに CD を入れてシステムを再起動してください. すると CD から直接起動して, インストールメニューが表示されます. MS-DOS パーティションからインストールするつもりでいて, CD ドライブにアクセス可能なドライバが組み込まれているなら, CDROM に入っている install.bat スクリプトを起動してください. これは, DOS から直接 FreeBSD のインストールへと進みます. これは本当の DOS から行なわなければいけません (たとえば DOS モードで起動するなど). Windows の DOS プロンプトからでは駄目です. (DOS から) 最も簡単なインタフェースを使うには, view と入力してください. すると DOS メニューユーティリティが起動し, 可能なすべてのインストール方法の選択ができるようになります. UNIX システム上で起動フロッピーを作成する場合は, このガイドのインストールフロッピーの作成のセクションを参照してください. DOS から, もしくはフロッピーディスクからの起動が完了したら, インストールプログラムでインストールメディアとして CDROM を選択することができるようになっているはずです. すべての配布ファイルは, CDROM から読み込まれますので, 他の種類のインストールメディアは不要です. システムのインストールがすべて終わって (ハードディスクから) 再起動したら, 次のように入力することで, いつでも CDROM をマウントすることができます: &prompt.root; mount /cdrom CD をドライブから取り出す前にはまず, 必ずアンマウントする必要があります. アンマウントは次のコマンドで行なうことができます. &prompt.root; umount /cdrom 単純にドライブから取り出さないように! インストールに入る前に CD-ROM をドライブに入れておいて, インストールフロッピーディスクが立ち上がるときに CD-ROM を見つけられるようにしておくようにしましょう. CD-ROM をデフォルトでシステムにつけ加えたい場合も CD-ROM を入れておきます (インストールメディアとして実際に CDROM を選択しない場合も同様). おわりに, あなたのマシンの CD-ROM を直接使って, FTP 経由で別のマシンに FreeBSD をインストールさせたいとします. やり方は簡単です. あなたのマシンのインストールが終了した後に, vipw コマンドを使って, passwd ファイルに以下の行を追加します. ftp:*:99:99::0:0:FTP:/cdrom:/nonexistent こうするとあなたのマシンにネットワーク接続できる人 (そして, login 許可を持っている人) は, メディアタイプとして FTP を選択できるように なります. 具体的には, FTP サイトの選択メニューから “Other” を選択して, ftp://あなたのマシンのアドレス を入力します. もしインストールの途中であなたのシステムの anonymous FTP を有効にしたなら, 上の設定はインストーラが自動的に 行います. フロッピーディスクからのインストールの前に あなたがフロッピーディスクからのインストールをしなくては ならない場合 (私たちはこの方法を とらない ことを強く提案します), その理由はハードウェアがサポートされてなかったためか, 単にいばらの道を通ることを楽しんでいるからでしょうが, インストール用の フロッピーディスクを用意する必要があります. 最低でも bin (基本配布ファイル) ディレクトリ内のすべてのファイル を入れられるだけの 1.44 メガバイトか 1.2 メガバイトのフロッピーディスク が必要です. これらのフロッピーディスクを DOS で作成している場合は, フロッピーディスクは「MS-DOS の FORMAT コマンドでフォーマット」 されなくてはなりません. Windows をお使いの場合は, Windowsのエクスプローラを使用してディスクを 初期化してください. (A: ドライブを 右クリックして, "フォーマット"を選択します). 工場での初期化済みディスクを「信用しないでください」. 念のためにあなた 自身でフォーマットし直してください. ユーザからのトラブル報告の多くは ちゃんと初期化されていないディスクを 使用していたことが原因となっています. 私が特にフォーマットし直してくださいと述べているのも, この理由からです. 他の FreeBSD マシンでフロッピーディスクを作成している場合, フォーマットすることは悪いことではありません. いちいち DOS ファイルシステムのフロッピーディスクを作成する必要は ありませんので, disklabel コマンドと newfs コマンドを使って, 次のような手順で (3.5 インチ 1.44 メガバイトディスク用の) UFS ファイルシステムを 作成することもできます. &prompt.root; fdformat -f 1440 fd0.1440 &prompt.root; disklabel -w -r fd0.1440 floppy3 &prompt.root; newfs -t 2 -u 18 -l 1 -i 65536 /dev/rfd0 5.25 インチの 1.2 メガバイトディスクの場合は "fd0.1200" と "floppy5" にしてください これで他のファイルシステムと同様に mount して書き込むことができます. フォーマットされたフロッピーディスクを用意したら, それらにファイル をコピーしなくてはなりません. 配布ファイルはいくつかのかたまり にわかれていて, これらのかたまり五つで一般的な 1.44 メガバイトの フロッピーディスクに収まるようになっています. フロッピーディスクに 入るだけファイルを入れていって, 配布ファイルをすべてコピーしてください. それぞれの配布ファイルはサブディレクトリに コピーする必要があります. たとえば, a:\bin\bin.aaや, a:\bin\bin.abのようになります. インストールメディアの選択場面になったら, Floppy を選択して, 残りの指定をやってください. ハードディスクの MS-DOS パーティションからインストールする前に ハードディスクの MS-DOS パーティションからインストールするときは, まずファイルを c:\freebsd にコピーします. CD-ROM にあるディレクトリ構造を反映してコピーしなくてはなりません. そこで, DOS の xcopy コマンドの使用をおすすめします. たとえば, FreeBSD の最低限のインストールをするには, このような手順で コピーします. C:\> md c:\FreeBSD C:\> xcopy e:\bin c:\FreeBSD\bin\ /s C:\> xcopy e:\manpages c:\FreeBSD\manpages\ /s ここで, C: ドライブには十分なディスクスペースが残っており, CD-ROM は E: ドライブに接続されているものとします. CDROM ドライブを持っていない場合, ftp.FreeBSD.org から配布ファイル (DISTS) をダウンロードすることができます. それぞれの配布ファイル (DISTS) は, それぞれ独自の ディレクトリに入っています; たとえば, bin 配布ファイルは &rel.current;/bin ディレクトリにあります. MS-DOS からたくさんの配布ファイル (DISTS) をインストールしたい (そしてディスクの余裕がある) 場合は, それぞれ c:\freebsd ディレクトリにコピーします — BIN 配布ファイルは, 最低限必要なものです. QIC/SCSI テープからのインストールの前に テープからのインストールは, おそらく FTP を利用したオンライン インストールか, CD-ROM を利用したインストールができない場合の, もっとも簡単な方法でしょう. インストールプログラムは, 以下のような コマンドを使用して, 単純に配布ファイルがテープ上に tar されていることを 期待しています. &prompt.root; cd /freebsd/distdir &prompt.root; tar cvf /dev/rwt0 dist1 ... dist2 インストールに入る前に, テンポラリ (一時使用) ディレクトリに 十分なディスクスペースを確保して, 作成したテープのすべての ファイルを格納できることを確認してください (テンポラリディレクトリは 自分で選ぶことができます). テープの特性上, ランダムにアクセスするこ とができませんので, 一時的に極めて大量の容量を必要とします. テープに準備しただけの量のディスクスペースを 一時的に使用することに 留意してください. インストールに入るときは, 起動フロッピーディスク から立ち上げる にテープをドライブに入れておかなくてはなりません. さもないとインストール時のデバイス検出のときにテープを 見つけられません. ネットワーク経由のインストールの前に 三つの物理的な接続形態で, ネットワーク経由のインストールを おこなうことができます. シリアルポート (SLIP もしくは PPP), パラレルポート (PLIP (laplink ケーブル使用)), またはイーサネット (標準的なイーサネットコントローラ (いくつかの PCMCIA カードにも対応)) を使用することができます. SLIP のサポートはまだまだ原始的とも呼べる方法なので, ラップトップと 他のコンピュータをシリアルケーブルで接続するといった具合いに, 直接接続してなくてはいけません. SLIP インストールは, ダイヤル機能を 持っていませんので, インストールするためには直接接続しなくてはなりません. PPP インストールではダイヤルアップ接続が可能ですので, できれば PPP 接続の 方を選択しましょう. もしもあなたがモデムを使用しているなら, あなたに残された選択肢は ほぼ間違いなく PPP インストールでしょう. インストール時に必要になりますので, サービスプロバイダ (ISP) に関する情報を用意しておきましょう. PPP ダイヤルの際は, とてもシンプルな端末エミュレーターで 作業することになります. もし ISP に接続するのに PAP や CHAP を用いるなら (言い換えると, もしあなたが Windows で ISP に接続する時に スクリプトを使用していないのであれば), dialppp のプロンプトに対して入力 するだけでいいです. しかしそれ以外の場合は, お手持ちのモデムで ISP にダイヤルするための“ATコマンド”の使い方を 知っておく必要があります. これ以上の情報については, handbook や FAQ のユーザー PPP エントリーを参照してください. 問題が起きた場合には, set log local ... コマンドを用いてログを画面に吐くこともできます. FreeBSD (2.0R 以降) の動いている別のマシンと直接接続が可能でしたら, laplink パラレルポートケーブルで接続することを考えてみましょう. パラレルポート経由のデータ転送スピードは, シリアルラインでの 一般的なスピード (最高 50kbit/sec) よりもずっと高速ですので, 高速にインストールすることができます. 最後になりますが, ネットワークインストールのうちでもっとも高速なものとしては イーサネットアダプタを使用するのがあげられます. FreeBSD ではきわめて多くの PC イーサネットカードをサポートしています. サポートされている カードの表 (と, 必要な設定) は, サポートされているハードウェア に書いてあります. サポートされている PCMCIA カードを使っている場合には, ラップトップの電源を 入れる「前」に差し込んでおくことにも注意してください. 残念ながら今の FreeBSD は, インストール時の活線挿抜には対応していません. ネットワークでの IP アドレス, あなたのアドレスクラスに対応した ネットマスク, マシン名を知っておくことも必要です. PPP 接続を利用したインストールを行いたいけれども固定 IP アドレスを持っていないという場合は, ISP が自動的に IP アドレスを割り当てます. ネットワーク管理者の方に たずねればどんな値を使ったらよいかを教えてくれるでしょう. もしも他のホストを IP アドレスではなくて名前で引きたい場合, ネームサーバとゲートウェイ のアドレスも知らなくてはなりません (PPP をご使用の場合は, プロバイダの IP アドレスになります). HTTP proxy (下記参照) 経由で FTP インストールを行いたい場合は, proxy サーバのアドレスも必要になります. これらのうちのすべて, またはいくつかを 知らない場合は, イーサネット経由でのインストールを始める前に「まず」 ネットワーク管理者に相談してください. NFS インストールのための下準備 NFS インストールはまったく単純明解です. FreeBSD の配布ファイルを サーバの好きな場所にコピーしておいて, メディア選択で NFS を選択します. もしサーバが privileged (特権) ポート へのアクセスのみをサポート している場合, (Sun ワークステーションの標準ではこうなっています) インストールを進める前に Options メニューを選択して, ``privileged port'' オプションを選択してください. イーサネットカードの性能が悪くて, 転送速度が遅くて困っている場合も, 適当な Options を選択するとよいでしょう. NFS 経由でインストールするためには, サブディレクトリも 含めたマウントにサーバが対応している必要があります. たとえば, FreeBSD &rel.current; の配布ファイルが ziggy:/usr/archive/stuff/FreeBSD にあるとすると, マシン ziggy では /usr/usr/archive/stuff だけではなく, /usr/archive/stuff/FreeBSD の直接マウントが可能に なっていなければなりません. FreeBSD の /etc/exports ファイルでは, このことは オプションによって制御されています. 他の NFS サーバの場合だとまた話が違ってくるかもしれません. もしもサーバから permission denied というメッセージが 返ってくるようでしたら, サブディレクトリマウントをちゃんと 有効にできていないことが考えられます. FTP インストールのための下準備 FTP 経由のインストールは, FreeBSD &rel.current; の最新バージョンを ミラーしているどのサイトからでも可能です. 世界中の妥当な FTP サイトの 選択肢をメニューに並べておきました. このメニューに出ていない他の FTP サイトからインストール する場合や, ネームサーバの設定に問題が生じた場合は, メニューでサイト “Other” を選ぶところで, お好みの URL でサイトを指定することができます. URL として直接 IP アドレスで指定してもよく, 直接指定した場合はネームサーバ がなくても FTP インストールが可能になります. たとえば, 以下のようにします. ftp://209.55.82.20/pub/FreeBSD/&rel.current;-RELEASE FTP 経由のインストールを行う場合, active, passive, HTTP proxy 経由の三種類のモードが利用できます. FTP Active すべての FTP 転送の際に Active モードを使用します. ファイアウォール内部のマシンではうまく動きませんが, passive モードをサポートしていない古い FTP サーバでも 動作します. passive モードでの FTP 転送 (こちらが デフォルトです) が失敗した場合は, active を使ってください. FTP Passive すべての FTP 転送の際に Passive モードを使用します. このモードを使用することで, ランダムポートアクセスインを 許さないファイアウォールを 越えることができるようになります. HTTP proxy 経由の FTP この方法では, (ウェブブラウザと同様に) HTTP プロトコルを使って proxy サーバに接続し, FTP の操作を実現します. proxy サーバは FTP 要求を (訳注: HTTP から FTP に) 変換して FTP サーバに送るため, ファイアウォールが FTP 接続を禁止していても, HTTP proxy サーバが提供されていれば ファイアウォールを超えた FTP 接続を行なうことが可能です. この方法を用いる場合は, FTP サーバの他に proxy サーバを指定する必要があります. FTP proxy には HTTP proxy タイプでないものもありますが, そういったタイプは非常にまれです. どちらであるかわからないような場合は大抵, 上で述べている HTTP proxy タイプであると考えて良いでしょう. 通常 proxy FTP サーバに対しては, ユーザ名の一部として @ 記号に続いて実際に接続したいサーバの名称を与える必要が あります. そうすると proxy サーバは本当のサーバの「ふり」 をするようになります. たとえば: ftp.FreeBSD.org から ポート番号 1234 で要求を待つ proxy FTP サーバ foo.bar.com を使って インストールしたいとします. この場合では, 「オプション」メニューで FTP username を ftp@ftp.FreeBSD.org, パスワードとして自分の電子メールアドレス を指定します. インストールメディアとして FTP (または proxy サーバがサポートしていれば passive FTP), URL を以下のようにします: ftp://foo.bar.com:1234/pub/FreeBSD ftp.FreeBSD.org/pub/FreeBSD に対する FTP 要求については foo.bar.com が代理で処理をおこなうことになり, むこう のマシンからインストールすることができます (インストール時 の要求により ftp.FreeBSD.org からファイルをもってきます). BIOS によるドライブの番号付けの確認 BIOS の, ケーブルのつなぎ直しを必要としない番号の 付け替え機能を利用している場合は, 混乱しないように, まずはじめに を読んでください. FreeBSD のインストール ここまでのインストールの準備段階を状況に応じて完全に行うと, FreeBSDをインストールする準備が整います. 何かうまくいかなかった場合は, あなたが使おうとしている インストールメディアのことが書いてある箇所まで戻って もう一度読むとよいでしょう. おそらく最初読んだときに 見落していた, 有効なヒントがあるものと思います. ハードウェアの問題が出てきたとか, FreeBSD がまったく 立ち上がらない場合は, boot フロッピーディスクに提供されている Hardware Guide を読んで, 何か解決方法はないか探してください. FreeBSD の起動フロッピーディスクには, インストールをおこなうために 必要と思われるすべてのオンラインドキュメントを用意してあります. もしもそのドキュメントがお望みのものでないようでしたら, 私たちはあなたが何にもっとも困っているのかを知りたいと思います. コメントを &a.doc; にお送りください. FreeBSD のインストールプログラム (sysinstall) を, うっとうしい step-by-step ガイドなしに, プログラム自身で使用方法がわかるようにするのが最終目標です. 目標達成までには時間がかかりそうですが, ともかくそれが 目標なのであります :-) 閑話休題. ここに, 典型的なインストールの手順 を まとめてみましたので, お役にたてるものと思います. kern.flp を書き込んだフロッピーで 起動します. その後, 指示に従ってこれを取り出し, mfsroot.flp を書き込んだフロッピーを ドライブに入れ return キーを叩きます. ハードウェアの性能に よりますが, 起動には 30秒から 3分かかります. 起動したら 初期選択画面が出てくるでしょう. もしも kern.flp からまったく起動 しなかったり, どこかの段階で起動が止まってしまった 場合は, ハードウェアガイド の Q&A を読んで, 理由を探ってみます. F1 キーを叩きます. メニューシステムとインストールプログラム 全般に対しての使い方が表示されます. このメニューシステムを 使ったことがない場合は, 徹底的に読んでください. Options を選択し, 他に必要な特別な選択を おこないます. 典型的なインストールでおまかせしたいか, それぞれの段階をいちいちコントロールしたいか (可能であれば適切なデフォルトを使用して) 簡単にさっさと 済ませたいかによってそれぞれ, Standard, Custom, または Express を選択してください. FreeBSD を初めて使う方には, Standard を一番におすすめします. final configuration メニューからは, メニュー形式のさらに 進んだ設定をおこなうことができます. ネットワーク周りの 設定は, 特に CD-ROM / テープ / フロッピーディスクから インストールして, まだネットワーク設定をおこなっていない 人にとっては特に重要でしょう. インストールの時点できちんと 設定しておけば, ハードディスクからシステムを立ち上げ直した 時点でネットワーク接続ができるようになっていることでしょう. サポートされているハードウェア 現在 FreeBSD は, ISA, VLB, EISA, PCI バスを搭載した, 386SX から Pentium クラス までのさまざまな種類の PC で動作します (386SX はおすすめではありません). IDE, ESDIドライブや, さまざまな SCSI コントローラ, ネットワークカードや シリアルカードにも対応しています. FreeBSD は IBM のマイクロチャネル (MCA) バスもまたサポートしています. FreeBSD を走らせるには, 最低 8メガバイトの RAM が推奨されます. あなたのハードウェアによっては, それより少ないメモリでは 問題が発生する可能性があるため, 16メガバイトの RAM を推奨します. 以下のリストは, 現在 FreeBSD で動作が確認されているハードウェアの リストです. 他のハードウェアでも問題なく動いていると思いますが, 私たちのところには情報は入ってきていません. ディスクコントローラ WD1003 (あらゆる MFM/RLL) WD1007 (あらゆる IDE/ESDI) IDE ATA Adaptec 社製 1535 ISA SCSI コントローラ Adaptec 社製 154X シリーズ ISA SCSI コントローラ Adaptec 社製 174X シリーズ EISA SCSI コントローラ (スタンダード, エンハンスドモード) Adaptec 社製 274X/284X/2920C/294X/2950/3940/3950 (Narrow/Wide/Twin) シリーズ EISA/VLB/PCI SCSI コントローラ Adaptec 社製 AIC-7850, AIC-7860, AIC-7880, AIC-789X オンボード SCSI コントローラ Adaptec 社製 1510 シリーズ ISA SCSI コントローラ (起動デバイスとしては使用できません) Adaptec 社製 152X シリーズ ISA SCSI コントローラ AHA-152X および SoundBlaster SCSI カードなどの Adaptec 社製 AIC-6260 および AIC-6360 を使用したボード. AdvanSys 社製 SCSI コントローラ (全てのモデル). BT-948, BT-958, BT-9580 などの BusLogic 社製 MultiMaster W シリーズホストアダプタ. BT-946C, BT-956C, BT-956CD, BT-445C, BT-747C, BT-757C, BT-757CD, BT-545C, BT-540CF などの BusLogic 社製 MultiMaster C シリーズホストアダプタ. BT-445S, BT-747S, BT-747D, BT-757S, BT-757D, BT-545S, BT-542D, BT-742A, BT-542B などの BusLogic 社製 MultiMaster S シリーズホストアダプタ. BT-742A, BT-542B などの BusLogic 社製 MultiMaster A シリーズホストアダプタ. BusLogic 社製 MultiMaster の完全なクローンである AMI 社製 FastDisk コントローラもサポートされます. BusLogic/Mylex 社製 Flashpoint アダプタはまだサポートされていません. DPT 社製 SmartCACHE Plus, SmartCACHE III, SmartRAID III, SmartCACHE IV, および SmartRAID IV SCSI/RAID コントローラ. DPT 社製 SmartRAID/CACHE V はまだサポートされていません. DPT 社製 PM3754U2-16M SCSI RAID コントローラは サポートされています. Compaq 社製 Intelligent Disk Array コントローラ: IDA, IDA-2, IAES, SMART, SMART-2/E, Smart-2/P, SMART-2SL, Integrated Array, および Smart Arrays 3200, 3100ES, 221, 4200, 4200, 4250ES. ASUS 社製 SC-200, Data Technology 社製 DTC3130 (およびその変種すべて), Diamond 社製 FirePort (すべて), NCR 社製のカード (すべて), SymBios 社製のカード (すべて), Tekram 社製 DC390W, 390U, および 390F, それに Tyan 社製 S1365 などの SymBios 社(旧 NCR 社)製 53C810, 53C810a, 53C815, 53C820, 53C825a, 53C860, 53C875, 53C875j, 53C885, および 53C896 PCI SCSI コントローラ QLogic 社製 1020, 1040, 1040B, および 2100 など SCSI および Fibre Channel アダプタ DTC 社製 3290 EISA SCSI コントローラの 1542 エミュレーションモード サポートされている SCSI コントローラのすべてで, ハードディスク, 光ディスク, テープドライブ (DAT および 8mm Exabyte を含む), メディアチェンジャ, プロセッサターゲットデバイスおよび CD-ROM といった SCSI-I, SCSI-II 周辺機器が利用可能です. CDROM コマンドをサポートする WORM デバイスは, CDROM ドライバを使用することで読み込みアクセスのみサポートされます. WORM/CD-R/CD-RW への書き込みは Ports ツリーにある cdrecord によってサポートされます. 現在, 次にあげるタイプの CD-ROM ドライブがサポートされてます. cd - SCSI インタフェース (ProAudio Spectrum および SoundBlaster SCSI を含む) matcd - 松下 / Panasonic (Creative SoundBlaster) 独自のインタフェース (562/563 モデル) scd - ソニー 独自のインタフェース (全モデル) acd - ATAPI IDE インタフェース 以下のドライバは従来の SCSI サブシステムでサポートされていたものですが, 新しい CAM SCSI サブシステムではまだサポートされていません: NCR5380/NCR53400 (ProAudio Spectrum) SCSI コントローラ UltraStor 社製 14F, 24F, および 34F SCSI コントローラ Seagate 社製 ST01/02 SCSI コントローラ Future Domain 社製 8XX/950 シリーズ SCSI コントローラ WD7000 SCSI コントローラ UltraStor 社製ドライバについては, 現在新しい CAM フレームワークへ移植作業中のものがあります. しかし, いつ完成するか, そもそも完成するのかどうか, わかりません. 次のドライバは保守されていないので動作しないかもしれません: フロッピーテープ インタフェース (Colorado/Mountain/Insight) mcd - Mitsumi 独自の CD-ROM インタフェース (全モデル) ネットワークカード Adaptec 社製 AIC-6195 Fast Ethernet コントローラチップを使用した Fast Ethernet アダプタ: Adaptec 社製 Duralink PCI Fast Ethernet アダプタ ANA-62011 64-bit シングルポート 10/100baseTX アダプタ ANA-62022 64-bit デュアルポート 10/100baseTX アダプタ ANA-62044 64-bit 4 ポート 10/100baseTX アダプタ ANA-69011 32-bit シングルポート 10/100baseTX アダプタ ANA-62020 64-bit シングルポート 100baseFX アダプタ Allied-Telesys 社製 AT1700 および RE2000 カード Alteon Networks 社製 PCI ギガビット Ethernet NIC など Tigon 1 および Tigon 2 チップセットを使用した ギガビットイーサネットカード. 他に Alteon 社製 AceNIC (Tigon 1 および 2), 3Com 社製 3c985-SX (Tigon 1 および 2), Netgear 社製 GA620 (Tigon 2), Silicon Graphics 社製 ギガビット Ethernet, DEC/Compaq 社製 EtherWORKS 1000, NEC 社製 ギガビット Ethernet AMD 社製 PCnet/PCI (79c970 および 53c974 または 79c974) RealTek 社製 8129/8139 を使用した Fast Ethernet NIC Allied-Telesys 社製 AT2550 Allied-Telesys 社製 AT2500TX Genius 社製 GF100TXR (RTL8139) NDC Communications 社製 NE100TX-E OvisLink 社製 LEF-8129TX OvisLink 社製 LEF-8139TX Netronix Inc. 社製 EA-1210 NetEther 10/100 KTX-9130TX 10/100 Fast Ethernet Accton 社製 Cheetah EN1207D (MPX 5030/5038; RealTek 8139 クローン?) SMC 社製 EZ Card 10/100 PCI 1211-TX LinkSys 社製 EtherFast LNE100TX, NetGear 社製 FA310-TX Rev. D1, Matrox 社製 FastNIC 10/100, Kingston 社製 KNE110TX など Lite-On 社製 98713, 98713A, 98715 および 98725 を使用した Fast Ethernet NIC. NDC Communications 社製 SFA100A (98713A), CNet 社製 Pro120A (98713 または 98713A), CNet 社製 Pro120B (98715), SVEC 社製 PN102TX (98713) など Macronix 社製 98713, 98713A, 98715, 98715A および 98725 を使用した Fast Ethernet NIC. LinkSys 社製 EtherFast LNE100TX version 2 など Macronix/Lite-On 社製 PNIC II LC82C115 を使用した Fast Ethernet NIC Trendware 社製 TE100-PCIE など Winbond 社製 W89C840F を使用した Fast Ethernet NIC Hawking Technologies 社製 PN102TX および D-Link 社製 DFE-530TX など, VIA Technologies 社製 VT3043 Rhine I および VT86C100A Rhine II を使用した Fast Ethernet NIC Silicon Integrated Systems 社製 SiS 900 および SiS 7016 を使用した PCI fast Ethernet NIC D-Link 社製 DFE-550TX など Sundance Technologies 社製 ST201 を使用した PCI fast ethernet NIC SysKonnect 社製 SK-984x を使用した PCI ギガビット Ethernet カード. SK-9841 1000baseLX (シングルモード Fiber, シングルポート), SK-9842 1000baseSX (マルチモード Fiber, シングルポート), SK-9843 1000baseLX (シングルモード Fiber, デュアルポート) および SK-9844 1000baseSX (マルチモード Fiber, デュアルポート) など. Compaq 社製 Netelligent 10, 10/100, 10/100 Proliant, 10/100 デュアルポート, 10/100 TX Embedded UTP, 10 T PCI UTP/Coax および 10/100 TX UTP, Compaq 社製 NetFlex 3P, 3P Integrated および 3P w/BNC, Olicom 社製 OC-2135/2138, OC-2325, OC-2326 10/100 TX UTP および Racore 社製 8165 10/100baseTX and 8148 10baseT/100baseTX/100baseFX multi-personality カード など Texas Instruments 社製 ThunderLAN を使用した PCI NIC ADMtek 社製 AL981 および AN985 ベースの PCI Fast Ethernet NIC Alfa Inc. 社製 GFC2204 および CNet 社製 Pro110B など ASIX Electronics 社製 AX88140A を使用した PCI NIC DEC 社製 EtherWORKS III NIC (DE203, DE204 および DE205) DEC 社製 EtherWORKS II NICs (DE200, DE201, DE202 および DE422) DEC 社製 DC21040, DC21041 または DC21140 ベースの NIC (SMC 社製 Etherpower 8432T, DE245 およびその他のもの) DEC 社製 FDDI (DEFPA/DEFEA) NIC Efficient 社製 ENI-155p ATM PCI FORE 社製 PCA-200E ATM PCI 富士通 社製 MB86960A/MB86965A HP 社製 PC Lan+ カード (モデルナンバー: 27247B および 27252A) Intel 社製 EtherExpress ISA (ドライバが不安定なため推奨しません) Intel 社製 EtherExpress Pro/10 Intel 社製 EtherExpress Pro/100B PCI Fast Ethernet Isolan 社製 AT 4141-0 (16 ビット) Isolink 社製 4110 (8 ビット) Novell 社製 NE1000, NE2000 および NE2100 Ethernet インタフェース RealTek 社製 8029, NetVin 社製 5000, Winbond 社製 W89C940, Surecom 社製 NE-34, VIA 社製 VT86C926 など NE2000 をエミュレートする PCI ネットワークカード. 3Com 社製 3C501, 3C503 Etherlink II, 3C505 Etherlink/+, 3C507 Etherlink 16/TP, 3C509, 3C579, 3C589 (PCMCIA), 3C590/592/595/900/905/905B/905C PCI および EISA (Fast) Etherlink III / (Fast) Etherlink XL, 3C980/3C980B Fast Etherlink XL サーバ アダプタ, 3CSOHO100-TX OfficeConnect アダプタ 東芝 Ethernet カード IBM 社および National Semiconductor 社製 PCMCIA Ethernet カードもサポートされています. USB 接続の周辺機器 様々な USB 接続の周辺機器がサポートされています. このリストに機種名は書かれていません. しかしいくつかの例外はありますが, ここに書かれている種類のほとんどすべてのデバイスが サポートされます. USB キーボード USB マウス USB プリンタ および USB - パラレル プリンタ変換ケーブル USB ハブ マザーボードのチップセット: ALi 社製 Aladdin-V Intel 社製 82371SB (PIIX3) および 82371AB および EB (PIIX4) チップセット NEC 社製 uPD 9210 ホストコントローラ VIA 社製 83C572 USB ホストコントローラ およびその他の UHCI または OHCI に準拠した マザーボードのチップセット (現在使用できないものは知られていません). PCI プラグイン USB ホストコントローラ ADS Electronics 社製 PCI プラグインカード (2 ポート) Entrega PCI プラグインカード (4 ポート) 動作が報告されている個々の USB デバイス: Agiler マウス 29UO Andromeda ハブ Apple iMac マウスおよびキーボード ATen パラレルプリンタアダプタ Belkin F4U002 パラレルプリンタアダプタ および Belkin 社製 マウス マウスポートが付属した BTC 社製 BTC7935 キーボード Cherry G81-3504 Chic マウス Cypress マウス Entrega USB - パラレル プリンタアダプタ Genius 社製 Niche マウス Iomega 社製 USB Zip 100 MB Kensington 社製 Mouse-in-a-Box Logitech 社製 M2452 キーボード - Logictech 社製 ホイールマウス (3 ボタン) + Logitech 社製 ホイールマウス (3 ボタン) Logitech 社製 PS/2 / USB マウス (3 ボタン) MacAlly 社製マウス (3 ボタン) MacAlly 社製 self-powered ハブ (4 ポート) Microsoft 社製 Intellimouse (3 ボタン) Microsoft 社製キーボード NEC 社製ハブ Trust Ami マウス (3 ボタン) ISDN (European DSS1 [Q.921/Q.931] プロトコル) Asuscom 社製 I-IN100-ST-DV (実験的なドライバ, おそらく動作します) Asuscom 社製 ISDNlink 128K AVM A1 AVM Fritz!Card classic AVM Fritz!Card PCI AVM Fritz!Card PCMCIA (現在は FreeBSD 3.x のみ) AVM Fritz!Card PnP (現在は FreeBSD 3.x のみ) Creatix ISDN-S0/8 Creatix ISDN-S0/16 Creatix ISDN-S0 PnP Dr.Neuhaus Niccy 1008 Dr.Neuhaus Niccy 1016 Dr.Neuhaus Niccy GO@ (ISA PnP) Dynalink 社製 IS64PH (保守されていません) ELSA 社製 1000pro ISA ELSA 社製 1000pro PCI ELSA 社製 PCC-16 ITK ix1 micro (現在は FreeBSD 3.x のみ) ITK ix1 micro V.3 (現在は FreeBSD 3.x のみ) Sagem Cybermod (ISA PnP, おそらく動作します) Sedlbauer Win Speed Siemens I-Surf 2.0 Stollman Tina-pp (開発途中) Teles 社製 S0/8 Teles 社製 S0/16 Teles 社製 S0/16.3 (16.3c などの c バージョンはサポートされません!) Teles 社製 S0 PnP (実験的なドライバ, おそらく動作します) 3Com/USRobotics 社製 Sportster ISDN TA 内蔵 (non-PnP バージョン) サウンドデバイス 次のサウンドカードおよびコーデックがサポートされます ('実験的なドライバ' と書かれているものをサポートしているのは, FreeBSD-CURRENT のみであり, 不安定かもしれません): 16550 UART (Midi) (実験的なドライバ, ヒントファイル中にトリックが必要です) Advance 社製 Asound 100, 110 および Logic ALS120 Aureal 社製 Vortex1/Vortex2 および Vortex Advantage ベースのサウンドコーデックは サードパーティのドライバ でサポートされます Creative Labs 社製 SB16, SB32, SB AWE64 (Gold を含む), Vibra16, SB PCI (実験的なドライバ), SB Live! (実験的なドライバ) およびほとんどの SoundBlaster 互換のカード Creative Labs 社製 SB MIDI ポート (実験的なドライバ), SB OPL3 シンセサイザ (実験的なドライバ) Crystal Semiconductor 社製 CS461x/462x オーディオアクセラレータ, CS461x MIDI ポートのサポートは実験的なものです Crystal Semiconductor 社製 CS428x オーディオコントローラ CS4237, CS4236, CS4232, CS4231 (ISA) ENSONIQ AudioPCI ES1370/1371 ESS 社製 ES1868, ES1869, ES1879, ES1888 Gravis 社製 UltraSound PnP, MAX NeoMagic 社製 256AV/ZX (PCI) OPTi931 (ISA) OSS-互換シーケンサ (Midi) (実験的なドライバ) Trident 社製 4DWave DX/NX (PCI) ヤマハ OPL-SAx (ISA) その他のデバイス AST 4 ポート シリアルカード (シェアード IRQ 使用) ARNET 8 ポート シリアルカード (シェアード IRQ 使用) ARNET (現在は Digiboard) 570/i high-speed 同期シリアルカード Boca BB1004 4 ポート シリアルカード (モデムはサポートしません) BOCA IOAT66 6 ポート シリアルカード (モデムをサポート) Boca BB1008 8 ポート シリアルカード (モデムはサポートしません) Boca BB2016 16 ポート シリアルカード (モデムをサポート) Cyclades Cyclom-y シリアルボード Moxa SmartIO CI-104J 4 ポート シリアルカード STB 4 ポート カード (シェアード IRQ 使用) SDL Communications RISCom/8 シリアルボード SDL Communications RISCom/N2 and N2pci high-speed 同期シリアルボード Specialix SI/XIO/SX マルチポート シリアルカード, SIHOST2.x より古いものおよび 拡張 (transputer ベース, aka JET) ホストカード どちらもサポートされます: ISA, EISA および PCI Stallion マルチポート シリアルボード: EasyIO, EasyConnection 8/32 & 8/64, オンボード 4/16 および Brumby Adlib, SoundBlaster, SoundBlaster Pro, ProAudioSpectrum, Gravis UltraSound および Roland MPU-401 サウンドカード Connectix QuickCam Matrox Meteor Video フレームグラバー Creative Labs Video Spigot フレームグラバー Cortex1 フレームグラバー Brooktree BT848 チップ および BT878 チップベースのフレームグラバー HP4020, HP6020, Philips CDD2000/CDD2660 および Plasmon CD-R ドライブ バスマウス PS/2 マウス 標準的な PC ジョイスティック X-10 power コントローラ GPIB および Transputer ドライブ Genius および Mustek ハンドスキャナ Floppy テープドライブ (いくつかのより古いモデルのみ, ドライバは不完全です) Lucent Technologies 社製 WaveLAN/IEEE 802.11 PCMCIA および ISA standard speed (2Mbps) および turbo speed (6Mbps) ワイヤレス ネットワークアダプタ および同様に動作するもの (NCR WaveLAN/IEEE 802.11, Cabletron RoamAbout 802.11 DS) これらのアダプタの ISA バージョンは, 実際には PCMCIA カードと ISA - PCMCIA ブリッジカードを組み合わせたものなので, どちらのデバイスも同じドライバで動作します. トラブルシューティング この節では基本的なインストールの際の, 報告された標準的な問題に対するトラブルシューティングのための情報が 書いてあります. また, FreeBSD と MS-DOS のデュアルブートを行う際の いくつかの質問と回答も書いてあります. なにかおかしいときには何をすればよいでしょうか PC アーキテクチャの様々な制限により, 100% 確実に原因を突き止めることは不可能ですが, いくつか失敗した時に できることがあります. サポートされているハードウェア を調べて, あなたのハードウェアがサポートされているかどうか 確認してください. もしあなたのハードウェアがサポートされているにもかかわらず, 動作しなかったり他の問題点がある時は, コンピュータをリセットして, ビジュアルカーネルコンフィギュレーション オプションを与えているときにはそれを選択してください. ここで設定することで, あなたのハードウェアを通過するようにしたり, システムに対して情報を与えたりすることができます. 起動ディスクのカーネルは, ほとんどのハードウェアデバイスの IRQ, IO アドレス, DMA チャンネルは出荷されたままの状態であるとして 設定されています. もしハードウェアの設定が変更されていると, コンフィギュレーションエディタを使用してこれらの値を設定しなければ なりません. 存在しないデバイスを認識してしまうことにより, その後実際に存在するデバイスの認識を失敗してしまうことがあります. このような場合は, 衝突しているドライバを無効にします. スクリーン (sc0) などのインストールに必要なドライバを無効にしないでください. もし, コンフィギュレーションエディタを終了したあと, インストーラが動かなくなったり, 不思議な失敗をする場合は, 削除したり変更したりしてはいけないものを, 削除あるいは変更してしまった可能性があります. 再起動してやり直してください. コンフィギュレーションモードでは, 次のことができます: カーネルにインストールされているドライバの一覧表示. システムに存在しないドライバの変更. デバイスドライバが使用する IRQ, DRQ および IO ポートアドレスの変更. カーネルをハードウェアの設定にあわせた後, Q と叩くことで, 新しい設定で起動します. インストールが終了すると, コンフィギュレーションモードで変更した 設定は保存されますので, 毎回起動するたびに設定する必要はありません. また, カスタムカーネル を作りたくなるかもしれません. X サーバーの設定 ここはダミー MS-DOS ユーザの質問と回答 多くのユーザは, FreeBSD を MS-DOS が入っている PC にインストールしようとするでしょう. このようなシステムへの FreeBSD のインストールに関して, よく聞かれる質問が以下にあります. 助けて! FreeBSD をインストールする容量がありません! まずはじめに, すべてを消去しなければいけないのですか? あなたのマシンではすでに MS-DOS が動いていて, FreeBSD をインストールする容量がないとしても, すべての望みがなくなったわけではありません. FreeBSD CDROM や 様々な FreeBSD の FTP サイトの tools ディレクトリにある FIPS ユーティリティを使うことができます. FIPS を使用することで, すでにある MS-DOS パーティションを, もともとの内容を保存したままのパーティションと, 何も入っていない FreeBSD をインストールすることのできる パーティションの二つに分割することができます. まず, Windows のデフラグ (DEFRAG) ユーティリティ (エクスプローラ上で ハードドライブを右クリックして, デフラグ (DEFRAG) を選択) か, ノートンディスクツールを使用して, 指示に従ってデフラグメントを行ってください. その後, 再起動して, 新しい空いているスライスに, FreeBSD をインストールすることができます. あなたが行うインストール方法では, どの程度の空き容量が必要なのかということについては, - Distributioins メニューを見てください. + Distributions メニューを見てください. また, PowerQuest 社の Partition Magic という, とても便利な製品があります. このアプリケーションは, FIPS よりも優れた機能をもっており, あなたが (わたしのように) 良くオペレーティングシステムを追加したり, 削除したりしようとしているのであれば, 強く推奨します. しかし, このアプリケーションは, お金がかかりますし, あなたが FreeBSD を一度インストールして, そのまま使用しようと考えているのであれば, FIPS が最も良いでしょう. FreeBSD から 圧縮された MS-DOS のファイルシステムを利用することができますか? できません. Stacker(tm) や DoubleSpace(tm) などのユーティリティを使用している場合は, FreeBSD からは圧縮していない部分しか扱うことができません. 残りのファイルシステムは, 一つの巨大なファイル (Stack された, または Double Space されたファイル) として見えるでしょう. このファイルを削除しないでください. さもないと強く後悔するでしょう! 別の圧縮されていない標準 MS-DOS パーティションを作成して, MS-DOS と FreeBSD との間のやりとりに使うのがよいでしょう. 拡張 MS-DOS パーティションをマウントすることができますか? できます. DOS 拡張パーティションは FreeBSD では, D: ドライブは /dev/da0s5, E: ドライブは /dev/da0s6 などといったように, その他のスライスの終わりに配置されます. これはもちろん, 拡張パーティションが SCSI のドライブ 0 にある場合の例です. IDE ドライブでは, da の代わりに, 4.0-RELEASE およびそれ以降の場合は ad を, それ以前のバージョンでは wd を使用してください. それ以外の点では, 拡張パーティションをマウントする際も, 他の DOS ドライブをマウントするときと同様に, 以下のようにします: &prompt.root; mount -t msdos /dev/ad0s5 /dos_d diff --git a/ja_JP.eucJP/books/handbook/mirrors/chapter.sgml b/ja_JP.eucJP/books/handbook/mirrors/chapter.sgml index 27453cfaf3..7e91dbcb93 100644 --- a/ja_JP.eucJP/books/handbook/mirrors/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/mirrors/chapter.sgml @@ -1,2740 +1,2740 @@ FreeBSD の入手方法 CDROM/DVD 出版社 リテールボックス製品 FreeBSD は (FreeBSD CD、追加ソフトウェア、 印刷されたドキュメントなどから構成される) 箱入りの製品として以下の取り扱い業者から入手できます。
CompUSA WWW:
Frys Electronics WWW:
CD/DVD セット FreeBSD の CD/DVD セットは以下のオンライン業者から入手できます。
Daemon News Mall 560 South State Street, Suite A2 Orem, UT 84058 USA 電話: +1 800 407-5170 Fax: +1 1 801 765-0877 Email: sales@bsdmall.com WWW:
FreeBSD Mall, Inc. 3623 Sanford Street Concord, CA 94520-1405 USA 電話: +1 925 674-0783 Fax: +1 925 674-0821 Email: info@freebsdmall.com WWW:
FreeBSD Services Ltd 11 Lapwing Close Bicester OX26 6XR United Kingdom WWW:
Hinner EDV St. Augustinus-Str. 10 D-81825 München Germany 電話: (089) 428 419 WWW:
Ikarios 22-24 rue Voltaire 92000 Nanterre France WWW:
Ingram Micro 1600 E. St. Andrew Place Santa Ana, CA 92705-4926 USA 電話: 1 (800) 456-8000 WWW:
JMC Software Ireland 電話: 353 1 6291282 WWW:
The Linux Emporium Hilliard House, Lester Way Wallingford OX10 9TA United Kingdom 電話: +44 1491 837010 Fax: +44 1491 837016 WWW:
Linux System Labs Australia 21 Ray Drive Balwyn North VIC - 3104 Australia 電話: +61 3 9857 5918 Fax: +61 3 9857 8974 WWW:
UNIXDVD.COM LTD 57 Primrose Avenue Sheffield S5 6FS United Kingdom WWW:
問屋 あなたが小売業を営んでいて FreeBSD の CDROM 製品を取り扱いたいと考えているなら次の場所に連絡してください。
Cylogistics 2672 Bayshore Parkway, Suite 307 Mountain View, CA 94043 USA 電話: +1 650 694-4949 Fax: +1 650 694-4953 Email: sales@cylogistics.com WWW:
FreeBSD Services Ltd 11 Lapwing Close Bicester OX26 6XR United Kingdom WWW:
Kudzu, LLC 7375 Washington Ave. S. Edina, MN 55439 USA 電話: +1 952 947-0822 Fax: +1 952 947-0876 Email: sales@kudzuenterprises.com
Navarre Corp 7400 49th Ave South New Hope, MN 55428 USA 電話: +1 763 535-8333 Fax: +1 763 535-0341 WWW:
FTP サイト FreeBSD の公式な情報は anonymous FTP によって世界中から ミラーサイトより入手できます。 各サイトは にまとめられています。 これらのサイトは大規模な接続を受け付けていますが、 よりネットワーク的に近い ミラーサイトを探した方が良いでしょう (特にミラーサイトのようなものを 構築しようとした場合はこれに該当します)。 FreeBSD ミラーサイトデーターベース FreeBSD ハンドブックの ミラーサイト一覧 よりも正確です。というのはその情報を DNS から取得するので、 静的に記述されたリストよりも信頼性が高いのです。 さらに、FreeBSD は以下のミラーサイトから anonymous FTP によって 入手できます。もし FreeBSD を anonymous FTP によって手にいれる場合は、 近くのサイトを利用するようにしてください。 主要なミラーサイト としてあげられているサイトには、 FreeBSD の各アーキテクチャで利用可能な すべてのバージョンのアーカイブ一式が用意されています。 あなたが住んでいる国には より高速にダウンロードできるサイトがおそらくあるでしょう。 各国のミラーサイトには、 人気のあるアーキテクチャの最新のバージョンが置いてありますが、 FreeBSD のアーカイブ全体はもしかするとないかもしれません。 すべてのサイトは anonymous FTP によるアクセスを提供していますが、 別の方法によるアクセスも提供しているサイトもあります。 &chap.mirrors.ftp.inc; Anonymous CVS 訳: &a.jp.sugimura;、1998 年 7 月 19 日 <anchor id="anoncvs-intro">導入 Anonymous CVS (もしくは、anoncvs として知られています) は離れたところにある CVS リポジトリと同期を取るために FreeBSD に付属している CVS ユーティリティに含まれている機能です。他にもありますが、 それは FreeBSD のユーザが、特別な権限なしに FreeBSD プロジェクトの公式な anoncvs サーバに読み取り専用で CVS の操作をすることができるようにするためのものです。 それを使うには、単に CVSROOT 環境変数を設定して適切な anoncvs サーバを指定し、 cvs login を使って パスワード anoncvs を入力してください。 そして次に &man.cvs.1; コマンドを使うことで、 手元にあるリポジトリと同じようにアクセスできるようになります。 cvs login コマンドは、CVS サーバの認証に使われるパスワードを HOME ディレクトリの .cvspass というファイルに保存します。 このファイルが存在しなければ、最初に cvs login を使おうとしたときにエラーが出るでしょう。空の .cvspass ファイルを作成して再度ログインに挑戦してください。 CVSup と anoncvs のサービスは本質的に同じ機能ではないかということも言われていますが、 ユーザが同期を取る方法を選ぶときに影響を与える、 さまざまなトレードオフが存在します。要約して言えば、 CVSup はネットワーク資源の使い方においては非常に効率が良く技術的にもはるかに洗練されたものですが、 相当な手間がかかります。CVSup を使うには特別なクライアントをまずインストールして設定しなくては 1 bit も取ってくることができませんし、さらにそのとき CVSup で取ってくることができるのは、 コレクション (collection) と呼ばれる、 かなり大きなかたまりだけです。 それに対して anoncvs では、 CVS モジュールの名前を指定することで特定のプログラムの (lsgrep のような) 個々のファイルから調べることができます。もちろん、 anoncvs は CVS リポジトリの読み取り専用の操作に対してのみ適しているので、 もしあなたが FreeBSD プロジェクトのものと共有されたなにか ローカルなリポジトリを作ってそこでの開発を 行おうというときには、CVSup だけが唯一の手段となってしまいます。 <anchor id="anoncvs-usage">Anonymous CVS を使う &man.cvs.1; を設定して Anonymous CVS リポジトリを使うには単に CVSROOT 環境変数を設定して FreeBSD プロジェクトの anoncvs サーバを指定するだけのことです。 この文書を書いているときには、 次のサーバが利用できるようになっています。 USA: :pserver:anoncvs@anoncvs.freebsd.org:/home/ncvs (cvs login コマンドを使い、 プロンプトが表示されたらパスワード anoncvs を入力してください) ドイツ: :pserver:anoncvs@anoncvs.de.FreeBSD.org:/home/ncvs (cvs login コマンドを使い、 プロンプトが表示されたらパスワード anoncvs を入力してください) ドイツ: :pserver:anoncvs@anoncvs2.de.FreeBSD.org:/home/ncvs (rsh、pserver、ssh、ssh/2022 が使えます) 日本: :pserver:anoncvs@anoncvs.jp.FreeBSD.org:/home/ncvs (cvs login コマンドを使い、 プロンプトが表示されたらパスワード anoncvs を入力してください) オーストリア: :pserver:anoncvs@anoncvs.at.FreeBSD.org:/home/ncvs (cvs login コマンドを使い、 プロンプトが表示されたら任意のパスワードを入力してください) CVS はかつて存在した (もしくはこれから存在するものも) ほとんどどんなバージョンの FreeBSD のソースを check out することができますが、あなたは &man.cvs.1; の リビジョン () のオプションや FreeBSD プロジェクトのリポジトリの中で それをどのように指定したらいいものかということを よく知っておく必要があります。 タグには 2 種類あって、 リビジョンタグとブランチタグがあります。 リビジョンタグは特定の改訂版を指しており、 それはいつも同じものを意味しています。一方ブランチタグは、 指定されたときの指定された開発の流れにおける 最も新しい改訂版を示しています。 ブランチタグは特定の改訂版を指していないために、 その意味はきょうと明日では違うものになっているでしょう。 にはユーザが興味を持つであろうリビジョンタグの一覧が載せられています。 これらはいずれも Ports Collection に対して使うことはできません。 Ports Collection は複数のリビジョンを持っていないからです。 ブランチタグを指定したときには、 普通はその開発の流れにおける 最も新しいバージョンのファイルを受け取ることができます。 もし以前のバージョンのものが欲しいときには、日付を オプションを使って指定すればよいです。 これ以上のことは &man.cvs.1; man page を見てください。 本当はなにかする前には &man.cvs.1; のマニュアルページの全体をちゃんと読んでからのほうがいいのですが、 Anonymous CVS の使い方の本質的なところを簡単に例を挙げて説明します。 -CURRENT (&man.ls.1;) をちょっと確認してから消してみます。 &prompt.user; setenv CVSROOT :pserver:anoncvs@anoncvs.freebsd.org:/home/ncvs &prompt.user; cvs login プロンプトが表示されたら、パスワード anoncvs を入力します。 &prompt.user; cvs co ls &prompt.user; cvs release -d ls &prompt.user; cvs logout &man.ls.1; のバージョンを 3.X-STABLE ブランチから調べてみます。 &prompt.user; setenv CVSROOT :pserver:anoncvs@anoncvs.freebsd.org:/home/ncvs &prompt.user; cvs login プロンプトが表示されたら、パスワード anoncvs を入力します。 &prompt.user; cvs co -rRELENG_3 ls &prompt.user; cvs release -d ls &prompt.user; cvs logout &man.ls.1; の変更点のリストを (Unified diff で) 作ってみます。 &prompt.user; setenv CVSROOT :pserver:anoncvs@anoncvs.freebsd.org:/home/ncvs &prompt.user; cvs login プロンプトが表示されたら、パスワード anoncvs を入力します。 &prompt.user; cvs rdiff -u -rRELENG_3_0_0_RELEASE -rRELENG_3_4_0_RELEASE ls &prompt.user; cvs logout 他のどんなモジュールの名前が 使われているか検索してみます。 &prompt.user; setenv CVSROOT :pserver:anoncvs@anoncvs.freebsd.org:/home/ncvs &prompt.user; cvs login プロンプトが表示されたら、パスワード anoncvs を入力します。 &prompt.user; more modules/modules &prompt.user; cvs release -d modules &prompt.user; cvs logout 他の資料 次の資料は CVS を学ぶのに役に立つでしょう。 CVS チュートリアル Cal Poly によるものです。 CVS Home、 CVS の開発とサポートをしているコミュニティです。 CVSWeb は FreeBSD Project の CVS のための WWW インタフェースです。 CTM を使う 訳: &a.hanai;、1997 年 9 月 13 日 CTM はリモートのディレクトリツリーを中央のツリーに同期させるための 手段です。 これはFreeBSDのソースツリーの配布を行なうために開発されまし たが、時が経つにつれて別の目的にも有用であることがわかるかも しれません。 デルタを作り出す処理に関するドキュメントは現在ほとんど ありません。従って、もしあなたがCTM を他のことに使いたいなら &a.phk; にさらなる情報を問い合わせてください。 なぜ <application>CTM</application> を使うの? CTM を使うことにより FreeBSD ソースツリーのローカルコピーを手にいれることができます。 ソースツリーが使えることの魅力は数多くあります。完全な cvs ツリーを追いかけるにしても、ひとつのブランチを追いかける にしても CTM は必要な情報を与えてくれます。 もしあなたが FreeBSD のアクティブな開発者であるにもかかわらず お粗末な TCP/IP 接続しか持っていなかったり、または TCP/IP 接続が 行なえないとしたら、あるいは単に変更が自動的に送られてきて ほしいというのであれば CTM はそんなあなたのために 作られたのです。 アクティブなブランチでは 1 日に最大三つまでのデルタを受け取る必要があります。 これが自動的に e-mail で送られてくるという方法を ぜひ検討してみてください。 デルタのサイズは常にできるだけ小さく保たれています。 大抵の場合 5KB よりも小さく、 たまに (10 回に 1 回程度) 10-50KB になり、 ときおり 100KB かもっと大きくなるでしょう。 開発ソースから直接に得られたものを使うことについては、 あらかじめパッケージにされたリリースとは違い、 いろいろと注意することが あります。これは特に current のソースを選んでいるときは重要です。 最新の FreeBSD を追いかけるを読むことをお勧めします。 <application>CTM</application>を使うには何が必要? 二つのものが必要でしょう: CTM プログラムとそれに与える (current レベルを得るための) 最初のデルタです。 CTM プログラムはバージョン 2.0 のリリース以来 FreeBSD の一部にな りました。もしソースのコピーを持っているなら /usr/src/usr.sbin/ctmにあります。 もしFreeBSDの 2.0 以前のバージョンなら、 最新の CTM のソースを直接 から入手できます。CTM に与える デルタ は二つの方法、FTP または e-mail、 で得ること ができます。 もしインターネットに FTP アクセスできるなら、 次の FTP サイト: または、そのミラーサイトが CTM へのアクセスをサポートします。 適切なディレクトリに FTP して README ファイルを入手し、そこからスタートしてください。 e-mail によってデルタを得たいという場合は: CTM 配布メーリングリストのいずれかに参加してください。 &a.ctm-cvs-cur.name; は完全な CVS ツリー、 &a.ctm-src-cur.name; は開発先端ブランチに対応しています。&a.ctm-src-4.name; は 2.2 リリースのブランチに対応したものです (もし参加方法が分からない場合は、メーリングリスト名をクリックするか、 &a.mailman.lists.link; に行って参加したいメーリングリストをクリックしてください。 このページには、参加手順が詳しく書かれています)。 メールで CTM による更新ファイルを受け取り始めると、中身を取り出して使用 するために ctm_rmail プログラムを使うかもしれません。それを完全 に自動で行ないたいなら、/etc/aliases から ctm_rmailプロ グラムを直接使うこともできます。 さらに詳しいことは ctm_rmail manページを御覧ください。 どの方法を使って CTM デルタを入手していたとしても、 &a.ctm-announce.name; メーリングリストには参加しておくといいでしょう。 このメーリングリストは将来的には CTM システムの操作に関する アナウンスがポストされる唯一の場になるでしょう。 メーリングリストに参加するには、上のメーリングリスト名をクリックして、 参加手順に従ってください。 はじめて <application>CTM</application> を使い始める CTM デルタを使い始めるためには、これは以降作られる全ての デルタの出発点を手にいれる必要があります。 最初にあなたが何をすでに持っているかをはっきりさせましょう。 すべての人は のディレクトリから始めなければなりません。 ツリーをサポートしてるあなたの CTM を稼働するためには 指定した のデルタを使う必要があります。いくつかの分岐点 では、あなたの都合により CD 内に分配されている スタータ デルタを使用できるようになっています。しかしながら、これは 頻繁に行われることではありません。 適切な出発点が決まれば、その出発点を CTM が 維持するツリーへ変換するための スタータ 初期デルタを使う必要が あります。 移行デルタは番号の後ろに X をつけたものがそうです (たとえば src-cur.3210XEmpty.gz)。 X の後ろは最初の開始ポイントに対応します。 Empty は 空のディレクトリです。 ルールとして Empty からの移行デルタは 100 デルタごとに 作られます。ちなみに、 これらは非常に大きくなります! XEmptyのデルタは 70 から 80MB の gzip で圧縮されたデータというのが普通です。 一度スタートするためのベースデルタを得ると、 それに続く多数のすべてのデルタも必要になるでしょう。 <application>CTM</application> を日常で使う デルタを適用するためには、単に &prompt.root; cd /where/ever/you/want/the/stuff &prompt.root; ctm -v -v /where/you/store/your/deltas/src-xxx.* とします。 CTM はどれが gzip されているか理解します。 従って最初に gunzip しておく必要はありません。 ディスクの節約にもなります。 全体の処理に関して確信するまでは CTM は (ソース) ツリーに対して 何もしません。また、デルタを確かめるためには フラグを使うことができます。 このフラグがあると CTM はツリーに対して実際には何も行ないません。 単にデルタの完全性を確認し、 現在のツリーに問題なく使用できるかを確認 するだけです。 CTM には他にもオプションがあります。詳細に関しては マニュアルページを参照するかソースを見てください。 以上でやることは本当に全部です。 新しいデルタを入手した時には、 ソースを最新のものにするためにそれを CTMに通すだけです。 もしデルタを再ダウンロードするのが 骨の折れる作業であれば、デルタを消さないでおいてください。 なにかおかしなことが起こった場合には置いておけば良かった と思うかもしれません。 もしフロッピーディスクしか持っていない状況 であってもコピーを取るのに fdwrite を使うことを考えてください。 ローカルの変更を保存する 開発者としてはソースツリー中のファイルを 使って実験したり変更したく なるものです。 CTM はローカルの変更を制限つきでサポートします: ファイル foo の存在をチェックする前に、 foo.ctm を参照しにいきます。 このファイルが存在する場合、CTMfoo の代りにこれを処理します。 この動作はローカルの変更を保持する簡単な手段を 提供します: 単に変更したいファイルを拡張子 .ctm 付きのファイル名で コピーするだけです。あとは自由にコードをハックでき、 .ctm ファイルの方は CTM が最新状態に保ってくれます。 <application>CTM</application> のその他の面白いオプション 更新で変更されるファイルを正確に知る CTM のソースリポジトリに対する変更のリストを オプションを使って決定することができます。 これは、変更のログを保存したい、 変更されたファイルをなんらかの方法で 前・後処理したい、 または単にこだわりたい場合には、 役に立つでしょう。 更新前にバックアップを取る CTM の更新によって変更されるファイルすべてのバックアップを 取りたくなることがあります。 オプションを指定すると CTM は デルタで変更されるファイルすべてを backup-file としてバックアップするようになります。 更新で変更されるファイルを制限する CTM の更新の範囲を制限したり一連のデルタのから ほんの数ファイルを抽出したくなることがあります。 オプションを用い正規表現を指定することで、 CTM が処理するファイルのリストを制御することが できます。 例えば、lib/libc/Makefile の最新のコピーを保存してある CTM デルタのコレクションから抽出するには、 以下のコマンドを実行します。 &prompt.root; cd /where/ever/you/want/to/extract/it/ &prompt.root; ctm -e '^lib/libc/Makefile' ~ctm/src-xxx.* CTM デルタで指定されたファイルごとに、 そして オプションがコマンドラインで指定された順序で適用されます。 すべての そして オプションが適用された後に更新対象と選択された場合に限り、 CTM はそのファイルを処理します。 <application>CTM</application>の将来計画 重要なもの なんらかの CTM システムへの認証機構を用い、不正な CTM の更新の検出を可能とする。 CTM へのオプションを整理する。さもないと混乱し、 直観に反したものになります。 その他 ports コレクションに対するデルタもあるのですが、 これに興味を持っている人はまだ少ないようです。 CTM サイト CTM/FreeBSD は以下のミラーサイトから anonymous FTP によって入手できます。 もし CTM を anonymous FTP によって手にいれる場合は、 近くのサイトを利用するようにしてください。 何か問題がある場合は、&a.phk; に連絡してください。 カリフォルニア、サンフランシスコ近辺、 公式なソース 南アフリカ、ctm、sup、 CVSupなどの古い差分ファイルのバックアップサーバ 台湾/中華民国 近くにミラーサイトがない場合やミラーが不完全な場合は、 alltheweb のような検索エンジンを使ってみてください。 CVSup を使う 訳: &a.jp.iwasaki;、1997 年 2 月 27 日 紹介 CVSup は、 リモートのサーバホストにあるマスタ CVS リポジトリから ソースツリーを配布し更新するための ソフトウェアパッケージです。FreeBSD のソースは、 カリフォルニアにある中心的な開発マシンの CVS リポジトリの 中でメンテナンスしています。CVSup を使用することで、FreeBSD ユーザは 簡単に自分のソースツリーを最新の状態に しておくことができます。 CVSuppull モデルとよばれる更新のモデルを採用しています。pull モデルでは、 各クライアントが更新したい場合に更新したい時点で、 サーバに更新の問い合わせをおこないます。 サーバはクライアントからの 更新の要求を受け身の状態で待ちます。したがって、 すべての更新はクライアント主導でおこなわれます。 サーバは頼まれもしない更新情報を送るようなことはしません。 ユーザは CVSup クライアントを手動で実行して更新をおこなうか、 cron ジョブを設定して定期的に自動実行する必要があります。 用語 CVSup のように大文字で表記しているものは、ソフトウェアパッケージ 全体を指します。主な構成物は、 各ユーザマシンで実行するクライアントである cvsup、FreeBSD の各ミラーサイトで実行するサーバ cvsupd です。 FreeBSD の文書やメーリングリストを読んだ際に、 sup についての言及を 見かけたかもしれません。supCVSup の前に存在していたもので、 同様の目的で使われていました。 CVSup は sup と同じように使用されており、実際、sup と互換性のあるコンフィグレーションファイルを使用します。 CVSup の方がより高速で柔軟性もあるので、もはや sup は FreeBSD プロジェクトでは使用されていません。 インストール CVSup をインストールする最も簡単な方法は、FreeBSD Ports コレクションのパッケージ からコンパイル済みの net/cvsup パッケージをインストールすることです。 もしくは、net/cvsup でも構いません。 ただし、net/cvsup は Modula-3 システムに依存していて、構築にかかる時間、 ディスクスペースは比較的大きくなります。 たとえばサーバのような &xfree86; がインストールされていない計算機で CVSup を使おうとしているのであれば、必ず CVSup GUI が含まれていない net/cvsup-without-gui を使ってください。 CVSup のコンフィグレーション CVSup の動作は、supfile と呼ばれるコンフィグレーションファイルで制御します。 supfile のサンプルは、ディレクトリ /usr/share/examples/cvsup/ の下にあります。 supfile には以下の CVSup に関する質問への答えを記述します: どのファイルを受け取りたいのか? どのバージョンのものが欲しいのか? どこから入手したいのか? 自分のマシンのどこに置きたいのか? どこに status ファイルを置きたいのか? 次のセクションで、これらの質問に順番に答えながら典型的な supfile を組み立てていきます。最初に supfile の全体構造を説明します。 supfile はテキストファイルです。 コメントは # から行末までです。 空行とコメントだけの行は無視します。 残りの各行には、 ユーザが受け取りたいファイル群について記述します。 行の始めは、 サーバ側で定義した論理的なファイルのグループである コレクション の名称です。 コレクションの名称を指定して、欲しいファイル群を サーバに伝えます。コレクション名の後には、 ホワイトスペースで区切られた 0 個以上のフィールドが続きます。 これらのフィールドが上記の質問に対する答えになります。 フィールドには 2 種類あります: flag フィールドと value フィールドです。flag フィールドは deletecompress のような 単独のキーワードから成ります。また、value フィールドもキーワードで始まりますが、 キーワードの後にはホワイトスペースは入らず、 = と二つめの単語が続きます。例えば、 release=cvs は value フィールドです。 通常、supfile には受け取りたいコレクションを一つ以上指定します。 supfile を組み立てる一つの方法として、 コレクション毎にすべての関係の あるフィールドを明示的に指定する方法があります。しかし、 これでは supfile のすべてのコレクションに対して ほとんどのフィールドが同じになるため、 行が非常に長くなってしまい不便になります。 これらの問題を避けるため、CVSup ではデフォルトを指定することのできる メカニズムが提供されています。特殊な擬似コレクション名 *default で始まる行は、 supfile 中の後続の コレクションに対して使用する flag フィールドと value フィールドのデフォルトを設定するために利用できます。 個々のコレクションで固有の値を指定すると、 デフォルト値を無効にできます。また 行を追加すると、supfile の途中からデフォルト値の変更や追加が可能になります。 これまでの予備知識を基に、 FreeBSD-current のメインのソースツリーを受け取って更新するための supfile を組み立ててみましょう。 どのファイルを受け取りたいのか? CVSup を通して入手できるファイルは コレクション と呼ばれる名前の付けられたグループにまとめられています。 利用可能なコレクションについては 後の節の中で説明しています。 ここでは、FreeBSD システムのメインのソースツリー全体 を受け取るための設定例を紹介します。 すべてを含む src-all という単一の大きなコレクションがあります。 supfile を組み立てる最初のステップとして、 これらのコレクションを一行に一つずつ記述します (この場合は一行だけです)。 src-all どのバージョンのものが欲しいのか? CVSup を使用すると、 かつて存在していたことのある、事実上どのバージョンの ソースでも受け取ることができます。これは cvsupd サーバがすべてのバージョンを含む CVS リポジトリに基づいて動作することにより、 実現されています。 tag= および の value フィールドを使用して、 欲しいバージョンの 一つを指定します。 tag= のフィールドの指定は正確に行うように十分注意 してください。いくつかのタグは特定のコレクションに 対してのみ有効です。 タグの綴りが違っていたり不適切なタグを指定すると、 CVSup はユーザが消し たくないファイルまで削除してしまいます。特に ports-* のコレクション に対しては tag=. だけ を指定するようにしてください。 tag= フィールドはリポジトリ中のシンボリックタグを指定します。 tag には revision tag と branch tag の二種類があります。 revision tag は特定のリビジョンを指します。これは、 毎日同じ状態に保つことになります。一方 branch tag は、 ある時点での開発分流の最新のリビジョンを指します。 branch tag は特定のリビジョンを指定している訳ではないので、 今日と明日では 異なるリビジョンを参照することになるかもしれません。 にはユーザが興味を持つであろうリビジョンタグの一覧が載せられています。 CVSup の設定ファイル中でタグを指定する時は、 tag= に続けて書きます (RELENG_4tag=RELENG_4 になります)。 tag=. だけが ports コレクションには 適切であることに注意してください。 tag 名を示した通りにタイプされているか十分注意してく ださい。CVSup は tag 名が正しいかどうかを見分けることはできません。tag が間違っていた場合、 たまたまファイルがまったく存在しない正しい tag が 指定されたものとしてCVSup は動作します。その場合は、現在あるソースが削 除されるでしょう。 branch tag を指定した際には、 通常はその開発分流の最新バージョンの ファイルを受け取ります。 いくらか前のバージョンを受け取りたい場合は、 の value フィールドを使って日付を指定することで、 これを実現することが できます。&man.cvsup.1; のマニュアルページで、 その方法を説明しています。 例として、FreeBSD-current を受け取りたいとします。 次の行を supfile の始めに追加します: *default tag=. tag= フィールドも date= フィールドも指定しなかった場合に 動き出す重要な特殊なケースがあります。そのケースでは、 特定のバージョンの ファイルを受け取るのではなく、 サーバの CVS リポジトリから実際の RCS ファイルを直接受け取ります。 一般的に開発者はこの処理のモードが好きなようです。 彼らのシステム上にリポジトリそのものの コピーを維持することで、 リビジョン履歴を閲覧し過去のバージョンの ファイルを検査できるようになります。しかし、 これには大きなディスクスペースが必要になります。 どこから入手したいのか? 更新情報をどこから入手するかを cvsup に伝えるために host= フィールドを使用します。 CVSup ミラーサイト のどこからでも入手できますが、 ネット上での最寄りのサイトを選ぶべきでしょう。 この例では、仮想上の FreeBSD 配布サイト cvsup666.FreeBSD.org を使用します: *default host=cvsup666.FreeBSD.org CVSup を実行する前にホスト名を 実在のものに変更する必要があります。どのように cvsup を実行しても、この設定は を 使用してコマンドラインで変更することができます。 自分のマシンのどこに置きたいのか? prefix= フィールドは、 cvsup に受け取ったファイルをどこに置くかを伝えます。 この例では、ソースファイルを直接メインのソースツリー /usr/src に置きます。 src ディレクトリはすでにファイルを受け取るために 選択したコレクションで暗黙に指定しているので、 これは正しい仕様となります: *default prefix=/usr どこに status ファイルを置きたいのか? CVSup クライアントは base ディレクトリと呼ばれる場所に、ある status ファイルを維持しています。 すでに受け取った更新情報を追従し続けることで、 これらのファイルは CVSup がより効果的に動作することを支援します。標準の base ディレクトリ /usr/local/etc/cvsup を使用します: *default base=/usr/local/etc/cvsup supfile に指定がない場合は、 この設定をデフォルトで使用しますので、 実際には上の行は必要ありません。 base ディレクトリが存在しない場合は作成しておきましょう。base ディレクトリが存在しない場合、cvsup クライアントは実行を拒否します。 その他もろもろの supfile の設定: 通常 supfile に入れておくべき行がもう一つあります: *default release=cvs delete use-rel-suffix compress release=cvs は、サーバがメインの FreeBSD CVS リポジトリから その情報を取得するように指示します。 ほとんどの場合はこのようにしておきますが、 ここでの説明の範疇をこえるような 状況では他の指定をすることも可能です。 deleteCVSup にファイルを削除することを許可します。 CVSup が ソースツリーを完全に最新の状態に 保てるようにするためには、これは常に 指定しておくべきでしょう。 CVSup は、 これらの責任範囲のファイルだけを慎重に削除します。 たまたま存在する他の余分なファイルについては、 まったく手をつけずに残しておきます。 use-rel-suffix は、…神秘的なものです。これについて本当に知りたい人は、 &man.cvsup.1; のマニュアルページをご覧ください。 でなければ、何も考えずに指定してみてください。 compress は通信チャネルで gzip 形式の圧縮の使用を有効にします。 ご使用のネットワーク接続が T1 speed 以上である場合、 この圧縮を使用しない方がよいかもしれません。 そうでない場合は十分に役に立ちます。 supfile の例のまとめ: 以下は supfile の例の全体です: *default tag=. *default host=cvsup666.FreeBSD.org *default prefix=/usr *default base=/usr/local/etc/cvsup *default release=cvs delete use-rel-suffix compress src-all <filename>refuse</filename> ファイル 既に述べたように、CVSup取り寄せ法 (pull method)を用いるのですが、 これは基本的に次のようなことを意味します。 まずあなたが CVSup サーバに接続します。 するとサーバは あなたがダウンロードできるのはこれこれです と言います。 それに対し、あなたが使っているクライアントは わかりました。 では、これとこれとこれをもらいます と答えます。 デフォルトの設定の CVSup クライアントは、 設定ファイルで選んだコレクションとタグに適合する すべてのファイルを取得します。 しかし、これは常にあなたの望む動作と一致するとは限りません。 特に docportswww のツリーを同期させる場合などはそうでしょう。 ほとんどの人は四か国語も五か国語も操れるわけではありませんから、 特定の言語のファイルのダウンロードは必要ないでしょう。 Ports コレクションを CVSup で取得する場合には、各コレクションを個別に指定することができます (たとえば、単に ports-all とするかわりに ports-astrologyports-biology などと書きます)。 一方、docwww のツリーは言語別のコレクションになっていません。 そこであなたは CVSup のたくさんある洗練された機能の一つ、 refuse ファイルを使う必要があります。 refuse ファイルは CVSup に対し、 コレクションに含まれる一部のファイルを取得することを伝えます。 言い換えれば、それはクライアントに対し、 サーバから来る一部のファイルを拒否するよう指定するということです。 refuse ファイルは base/sup/ にあります (もしファイルがない場合には作成してください)。 basesupfile 内で定義されています。 デフォルトでは /usr/local/etc/cvsup です。つまり、 refuse ファイルのデフォルトは /usr/local/etc/cvsup/sup/refuse ということになります。 refuse ファイルの書式は、単にダウンロードしたくないファイルや ディレクトリの名前が書いてあるだけの非常にシンプルなものです。 たとえば、英語以外にはドイツ語を少し話せるだけの人で、 ドイツ語のアプリケーション (やその他英語以外の言語のためのアプリケーション) を必要と感じなければ 以下のような refuse ファイルが考えられます。 ports/chinese ports/french ports/german ports/hebrew ports/hungarian ports/japanese ports/korean ports/polish ports/portuguese ports/russian ports/ukrainian ports/vietnamese doc/da_* doc/de_* doc/el_* doc/es_* doc/fr_* doc/it_* doc/ja_* doc/nl_* doc/no_* doc/pl_* doc/pt_* doc/ru_* doc/sr_* doc/zh_* 他の言語についても同様です (全リストは FreeBSD CVS リポジトリ をご覧になってください)。 この実に便利な機能を使うと まったく必要としないファイルをダウンロードする必要がなくなり、 インターネット接続の回線が遅かったり従量制で課金されている人は 貴重な時間を節約できるようになります。 refuse ファイルの詳細や CVSup が持つその他の便利な機能に関しては マニュアルページを参照してください。 <application>CVSup</application> の実行 さて、更新の準備ができました。 これを実行するコマンドラインは実に簡単です: &prompt.root; cvsup supfile もちろん、ここでの supfile は作成したばかりの supfile のファイル名です。X11 環境で実行するものと仮定して、cvsup は 通常の操作に必要なボタンを持つ GUI ウィンドウを表示します。 go ボタンを押して、 実行を監視してください。 この例では実際の /usr/src ツリーを更新しているので、cvsup にファイルを更新するのに必要なパーミッションを与えるために、 ユーザ root で実行する必要があります。 コンフィグレーションファイルを作ったばかりで、 しかも以前にこのプログラムを実行したことがないので、 神経質になるのは無理もない話だと思います。 大切なファイルに触らずに試しに実行する簡単な方法があります。 どこか適当な場所に空のディレクトリを作成して、 コマンドラインの引数で指定するだけです: &prompt.root; mkdir /var/tmp/dest &prompt.root; cvsup supfile /var/tmp/dest 指定したディレクトリは、すべての更新されるファイルの 更新先ディレクトリとして使用します。 CVSup/usr/src の下のファイルを検査しますが、 変更や削除はまったくおこないません。かわりに /var/tmp/dest/usr/src に更新されたすべてのファイルが置かれるようになります。 この方法で実行した場合は、CVSup は base ディレクトリの status ファイルを更新せずにそのままにします。 これらのファイルの新しいバージョンは指定されたディレクトリ に書き込まれます。/usr/src の読み取り許可がある限り、このような試し実行のためにユーザ root になる必要はありません。 X11 を利用していないとか単に GUI が気に入らない場合は、 cvsup 起動時にコマンドラインに 二つほどオプションを追加する必要があります: &prompt.root; cvsup -g -L 2 supfile オプションは CVSup に GUI を使用しないように伝えます。X11 を利用していない場合には自動的に指定されますが、 そうでない場合は明示的に指定します。 オプションは cvsup にファイル更新中の詳細情報をプリントアウト するように伝えます。冗長性には から までの三つのレベルがあります。 デフォルトは 0 であり、エラーメッセージ以外はまったく出力 しません。 たくさんの他のオプション変数があります。 それらの簡単な一覧は cvsup -H で表示されます。 より詳しい説明はマニュアルページをご覧ください。 動作している更新の方法に満足したら、&man.cron.8; を使って CVSup を定期的に 実行させる準備をすることができます。cron から起動する際には、 明示的に CVSup が GUI を使わないようにする必要があります。 <application>CVSup</application> ファイルコレクション CVSup 経由で入手できるファイルコレクションは 階層的に組織化されています。 いくつか大きなコレクションがあり、 それらは小さなサブコレクションに 分割されています。 大きなコレクションは、そのサブコレクション毎に 受信することと同じことになります。 下の一覧ではコレクション間の階層関係を 字下げして表現します。 最も一般的に使用するコレクションは src-allports-all です。 他のコレクションは特別な目的を持つ人達だけが使用しており、 ミラーサイトはそれらのすべてを 持っていないかもしれません。 cvs-all release=cvs メインの FreeBSD CVS リポジトリであり、 暗号のコードを含んでいます。 distrib release=cvs FreeBSD の配布とミラーに関連するファイルです。 doc-all release=cvs FreeBSD ハンドブックおよびその他のドキュメントのソースです。 これには FreeBSD web サイトのファイルは含まれません。 ports-all release=cvs - FreeBSD Ports Colleciton です。 + FreeBSD Ports Collection です。 ports-all (ports ツリー全体) を更新せずに、 以下のサブコレクションの一つを使う場合は、常に ports-base サブコレクションを更新することを忘れないでください! ports の構築システムに変更があると、 ports-base に反映されます。 そしてほとんどの場合、その変更は新しい ports で実際に使われるからです。 つまり、個々の ports だけを更新していると、 奇妙なエラーで構築に失敗する可能性が非常に高くなるということです。 ports-base サブコレクションが 最新状態であるかどうかの確認は、 何よりも最初にやらなければならない ことなのです。 ports-archivers release=cvs アーカイビングのツール。 ports-astro release=cvs 天文学関連の ports。 ports-audio release=cvs サウンドサポート。 ports-base release=cvs Ports Collection の構築システム部分。 /usr/ports のサブディレクトリ Mk/Tools/ にある、さまざまなファイルが含まれています。 上の注意文をご覧ください。 FreeBSD Ports Collection の一部分を更新する時には、 このサブコレクションも常に更新しなければなりません。 ports-benchmarks release=cvs ベンチマークプログラム。 ports-biology release=cvs 植物学関連のプログラム。 ports-cad release=cvs CAD ツール。 ports-chinese release=cvs 中国語サポート。 ports-comms release=cvs 通信ソフトウェア。 ports-converters release=cvs 文字コードコンバータ。 ports-databases release=cvs データベース。 ports-deskutils release=cvs コンピュータが発明される前に 卓上で使われていたものたち。 ports-devel release=cvs 開発ユーティリティ。 ports-dns release=cvs DNS 関連のソフトウェア。 ports-editors release=cvs エディタ。 ports-emulators release=cvs 他の OS のエミュレータ。 ports-finance release=cvs 金融、財務関連のアプリケーション。 ports-ftp release=cvs FTP クライアントとサーバ。 ports-games release=cvs ゲーム。 ports-german release=cvs ドイツ語サポート。 ports-graphics release=cvs グラフィックユーティリティ。 ports-hungarian release=cvs ハンガリー語のサポート。 ports-irc release=cvs インターネットリレーチャット (IRC) 用のユーティリティ。 ports-japanese release=cvs 日本語サポート。 ports-java release=cvs &java; ユーティリティ。 ports-korean release=cvs 韓国語サポート。 ports-lang release=cvs プログラミング言語。 ports-mail release=cvs メールソフトウェア。 ports-math release=cvs 数値計算ソフトウェア。 ports-mbone release=cvs MBone アプリケーション。 ports-misc release=cvs 色々なユーティリティ。 ports-multimedia release=cvs マルチメディアソフトウェア。 ports-net release=cvs ネットワーキングソフトウェア。 ports-news release=cvs USENET ニュースのソフトウェア。 ports-palm release=cvs Palm シリーズ用ソフトウェア。 ports-polish release=cvs ポーランド語のサポート。 ports-portuguese release=cvs ポルトガル語のサポート。 ports-print release=cvs 印刷ソフトウェア。 ports-russian release=cvs ロシア語サポート。 ports-security release=cvs セキュリティユーティリティ。 ports-shells release=cvs コマンドラインシェル。 ports-sysutils release=cvs システムユーティリティ。 ports-textproc release=cvs 文書処理ユーティリティ (デスクトップパブリッシングは含まない)。 ports-vietnamese release=cvs ベトナム語サポート。 ports-www release=cvs World Wide Web 関連のソフトウェア。 ports-x11 release=cvs X window システムをサポートする ports。 ports-x11-clocks release=cvs X11 上で動作する時計の数々。 ports-x11-fm release=cvs X11 上で動作するファイラ。 ports-x11-fonts release=cvs X11 のフォントとフォントユーティリティ。 ports-x11-toolkits release=cvs X11 のツールキット。 ports-x11-servers 各種 X11 サーバ。 ports-x11-wm release=cvs X11 のウィンドウマネージャ。 src-all release=cvs メインの FreeBSD ソース群であり、 暗号のコードを含んでいます。 src-base release=cvs /usr/src のトップにあるその他のファイル。 src-bin release=cvs シングルユーザモードで必要な ユーザユーティリティ (/usr/src/bin)。 src-contrib release=cvs FreeBSD プロジェクト外部からの ユーティリティおよびライブラリ、 比較的無修正 (/usr/src/contrib)。 src-crypto release=cvs FreeBSD プロジェクトの外部で開発された暗号ユーティリティとライブラリで、 ほとんどそのままの形で使われます (/usr/src/crypto)。 src-eBones release=cvs Kerberos と DES (/usr/src/eBones) のこと。 現在の FreeBSD リリースでは使われていません。 src-etc release=cvs システムコンフィグレーションファイル (/usr/src/etc)。 src-games release=cvs ゲーム (/usr/src/games)。 src-gnu release=cvs GNU Public License 下にあるユーティリティ (/usr/src/gnu)。 src-include release=cvs ヘッダファイル (/usr/src/include)。 src-kerberos5 release=cvs Kerberos5 セキュリティパッケージ (/usr/src/kerberos5)。 src-kerberosIV release=cvs KerberosIV セキュリティパッケージ (/usr/src/kerberosIV)。 src-lib release=cvs ライブラリ (/usr/src/lib)。 src-libexec release=cvs システムプログラムであり、 通常は他のプログラムから実行される (/usr/src/libexec)。 src-release release=cvs FreeBSD の release を構築するために必要なファイル (/usr/src/release)。 src-sbin release=cvs シングルユーザモード用の システムユーティリティ (/usr/src/sbin)。 src-secure release=cvs 暗号化ライブラリとコマンド (/usr/src/secure)。 src-share release=cvs 多様なシステム間で共有可能なファイル (/usr/src/share)。 src-sys release=cvs カーネル (/usr/src/sys)。 src-sys-crypto release=cvs カーネル用の暗号コード (/usr/src/sys/crypto)。 src-tools release=cvs FreeBSD の保守用の色々なツール (/usr/src/tools)。 src-usrbin release=cvs ユーザユーティリティ (/usr/src/usr.bin)。 src-usrsbin release=cvs システムユーティリティ (/usr/src/usr.sbin)。 www release=cvs FreeBSD WWW サイトのソースです。 distrib release=self CVSup サーバ自身のコンフィグレーションファイルです。CVSup ミラーサイトが使用します。 gnats release=current GNATS バグトラッキングデータベースです。 mail-archive release=current FreeBSD 関連メーリングリストのアーカイブ。 www release=current 前処理された FreeBSD www サイトのファイルです (ソースではありません)。 WWW ミラーサイトが使用します。 詳細について CVSup の FAQ や CVSup に関するその他の情報については The CVSup Home Page をご覧ください。 CVSup のほとんどの FreeBSD 関連の議論は &a.hackers; でおこなわれています。 ソフトウェアの新しいバージョンは &a.announce; で アナウンスされます。 質問とバグ報告はプログラムの作者、 cvsup-bugs@polstra.com へ 送ってください。 CVSup サイト FreeBSD の CVSup サーバは以下のサイトで稼働しています。 &chap.mirrors.cvsup.inc; CVS タグ cvsCVSup でソースを入手したり同期させたりするとき、リビジョンタグ (日時で参照されている) を指定しなければなりません。 リビジョンタグは、FreeBSD 開発ブランチのどれか、 もしくはある時刻に対応しています。前者を ブランチタグ、 後者を リリースタグ と呼びます。 ブランチタグ ここにある HEAD (常に有効なタグ) 以外のすべてのタグは、src/ のみに有効です。 ports/doc/www/ ツリーは、ブランチに分けられていません。 HEAD 主要部をなす流れ、すなわち FreeBSD-CURRENT のための名前です。また、 どのリビジョンも指定されなかったときにはこれになります。 CVSup では、 このタグは . で表されます (句読点ではありません。. 文字そのものです)。 CVS ではこれがリビジョンタグが指定されなかった時のデフォルトです。 STABLE な計算機上に CURRENT のソースをチェクアウトしたりアップデートするのは、 思うところがあってやっているのというのでなければ、 よい考えとはいえません RELENG_5_1 FreeBSD-5.1 用のリリースブランチ。セキュリティ勧告や その他の深刻なセキュリティ上の修正があった場合にのみ使われます。 RELENG_5_0 FreeBSD-5.0 用のリリースブランチ。セキュリティ勧告や その他の重要なセキュリティ上の修正があった場合にのみ使われます。 RELENG_4 FreeBSD-4.X の開発のための流れです。 FreeBSD-STABLE としても知られています。 RELENG_4_9 FreeBSD-4.9 用のリリースブランチ。セキュリティ勧告や その他の重要なセキュリティ上の修正があった場合にのみ使われます。 RELENG_4_8 FreeBSD-4.8 用のリリースブランチ。セキュリティ勧告や その他の重要なセキュリティ上の修正があった場合にのみ使われます。 RELENG_4_7 FreeBSD-4.7 用のリリースブランチ。セキュリティ勧告や その他の重要なセキュリティ上の修正があった場合にのみ使われます。 RELENG_4_6 FreeBSD-4.6 および FreeBSD-4.6.2 用のリリースブランチ。セキュリティ勧告や その他の重要なセキュリティ上の修正があった場合にのみ使われます。 RELENG_4_5 FreeBSD-4.5 用のリリースブランチ。セキュリティ勧告や その他の重要なセキュリティ上の修正があった場合にのみ使われます。 RELENG_4_4 FreeBSD-4.4 用のリリースブランチ。セキュリティ勧告や その他の重要なセキュリティ上の修正があった場合にのみ使われます。 RELENG_4_3 FreeBSD-4.3 用のリリースブランチ。セキュリティ勧告や その他の重要なセキュリティ上の修正があった場合にのみ使われます。 RELENG_3 FreeBSD-3.X の開発のための流れです。 3.X-STABLE としても知られています。 RELENG_2_2 FreeBSD-2.2.X の開発のための流れです。2.2-STABLE としても知られています。このブランチは大部分が すたれています。 リリースタグ これらのタグは、FreeBSD src/ ツリー (および ports/doc/www/ ツリー) で、各バージョンの FreeBSD がリリースされた時点に対応しています。 RELENG_4_9_0_RELEASE FreeBSD 4.9 RELENG_5_1_0_RELEASE FreeBSD 5.1 RELENG_4_8_0_RELEASE FreeBSD 4.8 RELENG_5_0_0_RELEASE FreeBSD 5.0 RELENG_4_7_0_RELEASE FreeBSD 4.7 RELENG_4_6_2_RELEASE FreeBSD 4.6.2 RELENG_4_6_1_RELEASE FreeBSD 4.6.1 RELENG_4_6_0_RELEASE FreeBSD 4.6 RELENG_4_5_0_RELEASE FreeBSD 4.5 RELENG_4_4_0_RELEASE FreeBSD 4.4 RELENG_4_3_0_RELEASE FreeBSD 4.3 RELENG_4_2_0_RELEASE FreeBSD 4.2 RELENG_4_1_1_RELEASE FreeBSD 4.1.1 RELENG_4_1_0_RELEASE FreeBSD 4.1 RELENG_4_0_0_RELEASE FreeBSD 4.0 RELENG_3_5_0_RELEASE FreeBSD-3.5 RELENG_3_4_0_RELEASE FreeBSD-3.4 RELENG_3_3_0_RELEASE FreeBSD-3.3 RELENG_3_2_0_RELEASE FreeBSD-3.2 RELENG_3_1_0_RELEASE FreeBSD-3.1 RELENG_3_0_0_RELEASE FreeBSD-3.0 RELENG_2_2_8_RELEASE FreeBSD-2.2.8 RELENG_2_2_7_RELEASE FreeBSD-2.2.7 RELENG_2_2_6_RELEASE FreeBSD-2.2.6 RELENG_2_2_5_RELEASE FreeBSD-2.2.5 RELENG_2_2_2_RELEASE FreeBSD-2.2.2 RELENG_2_2_1_RELEASE FreeBSD-2.2.1 RELENG_2_2_0_RELEASE FreeBSD-2.2.0 AFS サイト FreeBSD の AFS サーバは以下のサイトで稼働しています: スウェーデン ファイルは以下の場所にあります: /afs/stacken.kth.se/ftp/pub/FreeBSD/ stacken.kth.se # Stacken Computer Club, KTH, Sweden 130.237.234.43 #hot.stacken.kth.se 130.237.237.230 #fishburger.stacken.kth.se 130.237.234.3 #milko.stacken.kth.se (保守担当 ftp@stacken.kth.se) rsync ミラーサイト 次のサイトは、FreeBSD を rsync プロトコルで提供しています。 rsync ユーティリティは &man.rcp.1; コマンドとほぼ同じ機能を実現するもので、 こちらの方が豊富なオプションを備え、送り側と受け側の差分だけを 転送するという rsync リモート更新プロトコルを使用するという点が異なります。 rsync を使うと、ネットワーク経由での同期を非常に高速に行なうことが可能です。 特に、FreeBSD FTP サーバや CVS リポジトリのミラーサイトを作成する時に便利でしょう。 rsync は、多くのオペレーティングシステムで 利用することができます。FreeBSD 版は、 net/rsync の port か、package を使ってください。 チェコ共和国 rsync://ftp.cz.FreeBSD.org/ 提供しているコレクション: ftp: FreeBSD FTP サーバの部分ミラー FreeBSD: FreeBSD FTP サーバの全体ミラー ドイツ rsync://grappa.unix-ag.uni-kl.de/ 提供しているコレクション: freebsd-cvs: FreeBSD CVS リポジトリ全体 このマシンは、他に NetBSD プロジェクトと OpenBSD プロジェクトの CVS リポジトリもミラーしています。 オランダ rsync://ftp.nl.FreeBSD.org/ 提供しているコレクション: vol/3/freebsd-core: FreeBSD FTP サーバの全体ミラー イギリス rsync://rsync.mirror.ac.uk/ 提供しているコレクション: ftp.FreeBSD.org: FreeBSD FTP サーバの全体ミラー アメリカ合衆国 rsync://ftp-master.FreeBSD.org/ このサーバは、FreeBSD の一次ミラーサイトとしてのみ使われています。 提供しているコレクション: FreeBSD: FreeBSD FTP サーバのマスタアーカイブ acl: The FreeBSD マスタ ACL リスト rsync://ftp13.FreeBSD.org/ 提供しているコレクション: FreeBSD: FreeBSD FTP サーバの全体ミラー
diff --git a/ja_JP.eucJP/books/handbook/ports/chapter.sgml b/ja_JP.eucJP/books/handbook/ports/chapter.sgml index 93a8c8d756..5e7c697a4a 100644 --- a/ja_JP.eucJP/books/handbook/ports/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/ports/chapter.sgml @@ -1,1248 +1,1248 @@ アプリケーションのインストール - packages と ports この章では FreeBSD の基本システムだけでは、 それほどたくさんのことを行うことはできません。 もしあなたがオペレーティングシステムの開発者であれば、 FreeBSD の基本システムにはあなたの望むすべてがあるでしょう。 しかし、そのような利用を考えていなければ、 — ウェブサーバ、メールリーダ、 KDE または GNOME のようなグラフィカル環境、 といったソフトウェアをインストールしようと思うでしょう。 すでに Unix システムを使ったことのある人ならば、 サードパーティ製ソフトウェアの典型的なインストール手順が 以下のようになることをご存知でしょう。 ソースコード、またはバイナリ形式で 配布されているソフトウェアをダウンロードする。 配布時のフォーマット (一般的には &man.compress.1; または &man.gzip.1; で圧縮された tarball) からソフトウェアを取り出す。 ドキュメントを探しだし (おそらく README ファイル、あるいは doc/ サブディレクト中のファイル)、 ソフトウェアのインストール方法を調べる。 ソース形式でソフトウェアが配布されている場合はコンパイルを行う。 ここでは、Makefile の編集、 または、configure スクリプトの実行、 あるいは他の作業を伴うことがある。 ソフトウェアの動作を確認し、インストールする。 すべてがうまくいったならば、インストール作業は以上です。 もしインストールしているソフトウェアパッケージが、 FreeBSD を意識して移植されたものでなければ、 適切に動くようコードを調べ、編集する必要があるかもしれません。 あなたが望むのであれば、FreeBSD 上へのソフトウェアのインストールに 従来 の方法を使い続けることができます。 しかしながら、FreeBSD は インストール時にかかるたくさんの労力を軽減する 2 つの技術、 すなわち packages と ports を提供しています。 この文書を書いている時点では、 4,000 を越えるサードパーティ製アプリケーションがこれらの方法で 利用可能となっています。 FreeBSD package では、いかなるアプリケーションに対しても ダウンロードする必要のあるファイルはただ一つです。 package には、コンパイル済みのアプリケーションの全コマンド、 各種設定ファイルやドキュメントが含まれています。 FreeBSD に用意されている &man.pkg.add.1;, &man.pkg.delete.1;, &man.pkg.info.1; といった pkg_* コマンドで、 ダウンロードした package ファイルを扱うことができます。 新しいアプリケーションをインストールするには、 たった一つのコマンドを実行するだけです。 FreeBSD port は、アプリケーションをソースコードからコンパイルする際の 処理を自動化するように設計されたファイルの集まりです。 プログラムをコンパイルする時のことを思い出して下さい。 通常、とてもたくさんの手順 (展開、パッチ作業、コンパイル、インストール) を踏まなくてはなりません。 port を構成するファイルは、 これらすべての作業をあなたの代わりに行うために必要な情報を含んでいます。 いくつかの簡単なコマンドを実行すると、 自動的にアプリケーションのソースコードがダウンロードされ、展開、 パッチ作業、コンパイル、そして、インストール作業が行われます。 さらに ports システムは、pkg_* コマンドで 扱うことのできる packages を生成することもできます。 packages と ports は依存関係を理解します。 ある特定のライブラリに依存する アプリケーションをインストールするとします。 また、アプリケーションとライブラリは FreeBSD ports や packages によって 入手可能であるとします。 アプリケーションを追加するために pkg_add コマンドまたは ports システムを用いると、 インストールされていないライブラリが検出され、 先に依存するライブラリがインストールされます。 2 つの技術が非常に類似していて、 なぜ FreeBSD がわざわざ両者を採用しているのか不思議に思うでしょう。 packages と ports にはそれぞれ独自の特徴があり、 どちらを使うかはあなたの好みによります。 package の利点 一般的に、あるアプリケーションの package の tarball は、 ソースコードを含む tarball より小さなサイズとなります。 packages はコンパイル作業を必要としません。 このことは、Mozilla, KDE, または GNOME といった大きなアプリケーションで重要となります。 特にシステムが遅い場合にはなおさら重要です。 packages を用いれば、 ソフトウェアのコンパイルに関する知識は必要ありません。 ports の利点 packages は、通常最も多くのシステムで実行できるように、 非常に保守的な設定で構築されています。 port からインストールすることで、 たとえば 686 プロセッサに特化したコードを生成するような コンパイルオプションを指定できます。 packages のなかには、コンパイル時に プログラムの機能を決めるようなオプションを設定するものがあります。 たとえば、Apache は多種多様な ビルトインオプションを設定できます。 port から構築することで、デフォルトオプションではなく、 自分でオプションを設定することができます。 設定を区別するために、同じアプリケーションに対して 複数の packages が存在することがあります。 たとえば、Ghostscript は X11 サーバーがインストールされているかどうかにより、 ghostscript package と ghostscript-nox11 package が選択可能となっています。 packages でもこのような方法が可能ですが、 アプリケーションのコンパイルオプションが さらに用意されている場合は困難となります。 ライセンス条項で、 バイナリでの配布を禁止しているソフトウェアがあります。 それらはソースコードで配布されなくてはいけません。 バイナリ配布を信用していない人もいます。 ソースコードがあれば、少なくともソースコードを読んで (理論的には) 潜在的な問題点を自分で見つけ出すことができます。 ローカルなパッチがある場合、 それを適用するためにソースコードが必要になります。 ソースコードを手元に置いておきたい人たちもいます。 彼らは、退屈したときに眺めたり、あちこち解析してみたり、 ソースコードを借用したり (もちろん、 ライセンスが許せばの話ですが) するのです。 この章では、packages と ports を用いた FreeBSD 上での サードパーティ製ソフトウェアの インストール方法や管理方法について説明します。 アプリケーションの探し方 どんなアプリケーションをインストールするにしても、 まずあなたが何を望んで、 またその名前がなんというのかを理解している必要があります。 FreeBSD 上で利用可能なアプリケーションのリストは常に増えています。 現在 4,000 以上ものアプリケーションが packages または ports として利用可能です。 あなたの望むものは多くの方法で探すことができます。 FreeBSD ウェブサイトは、 利用可能なすべてのアプリケーションの検索できる最新の一覧を http://www.FreeBSD.org/ports/ で公開しています。 アプリケーションの名前はカテゴリに分類されており、 (名前を知っているならば) 名前で検索できます。 また、カテゴリ中の利用可能な すべてのアプリケーションを表示させることもできます。 Dan Langille は http://www.freshports.org/ で FreshPorts を公開しています。 FreshPorts は ports ツリー中のアプリケーションの変更を追跡します。 一つまたはそれ以上の ports を 監視 することができ、 変更があるとメールで更新情報を送ってくれます。 ご希望のアプリケーションの名前がわからなければ、 FreshMeat (http://www.freshmeat.net/)、 または、AppWatch (http://www.appwatch.com/) のようなサイトでアプリケーションを探して下さい。 その後、そのアプリケーションが ports で利用可能かどうかを FreeBSD サイトで調べて下さい。 packages システムの利用 package のインストール インストールするアプリケーションを決めたら、 package ファイルをダウンロードしてインストールすることになります。 これを行う方法はいくつかあります。 さまざまな方法によるダウンロードとインストール package の削除 package の更新 Ports Collection の利用 このセクションでは、Ports Collection を利用してシステムにプログラムをインストールしたり、 システムから削除したりする基本的な手順について説明します。 ports のインストール 一番最初に知らなければならないのは、 Ports Collection は スケルトン と呼ばれるもので構成されているという事実です。 port スケルトンは簡単に言うと、アプリケーションを FreeBSD 上でコンパイルしインストールするために必要となる最小限のファイルのセットのことです。 それぞれの port スケルトンには、次のファイルが含まれています。 MakefileMakefile にはアプリケーションのコンパイル方法やシステムのどこにインストールするかを指定する、 さまざまな命令文が含まれています。 distinfo ファイル。 このファイルには、その port を構築するために ダウンロードする必要があるファイルのファイル名と、 そのファイルがダウンロードによって壊れていないか チェックするためのチェックサム情報が含まれています。 files ディレクトリ。 このディレクトリには FreeBSD システム上でプログラムをコンパイルし、 インストールするための修正パッチが含まれています。 修正パッチ (patch) とは基本的に、 個々のファイルに対する変更点を表した小さなファイル群のことです。 ファイルはプレインテキスト形式で、 10 行目を削除26 行目を ... に変更 などと書かれています。 修正パッチは、diff (差分) とも呼ばれます。 これは、修正パッチが diff プログラムで作成されるからです。 このディレクトリには、その port の構築に必要な その他のファイルが入る場合もあります。 pkg-comment ファイル。 これにはプログラムの一行説明文が含まれています。 pkg-descr ファイル。 これにはプログラムの、複数行にわたる詳しい説明文が含まれます。 pkg-plist ファイル。 これは、その port によってインストールされる全ファイルのリストです。 これにはプログラムを削除する際に、 どのファイルを削除すれば良いのかを ports システムに伝える役割もあります。 さて、Ports Collection が何を目的として使われるものなのか、 それ理解するための基礎的な知識はこれで十分です。 最初の port をインストールする準備ができました。 port のインストールには二つの方法があります。 実際の作業に入る前に、 インストールする port を選ぶ必要があります。 選ぶ方法はいくつかありますが、最も簡単なのは FreeBSD ウェブサイトの ports リストを利用することでしょう。 そこにリストされている ports や、 サイトの検索機能を使って閲覧することができます。 各々の port には説明文が含まれていますので、 インストールを決める前にその port に関する説明を読むこともできます。 もう一つの方法は、whereis コマンドを使うことです。 whereis コマンドを使うには、 プロンプトから単に whereis <インストールしたいプログラム名> と入力します。 もし、あなたのシステム上でプログラムが見つかれば、 それがどこにあるのかが次のように表示されます。 &prompt.root; whereis xchat xchat: /usr/ports/irc/xchat &prompt.root; この表示は、xchat (irc クライアントの一つ) が /usr/ports/irc/xchat というディレクトリに見つかったことを示しています。 また、Ports Collection の持つ検索機能を利用して port を検索する方法もあります。 この検索機能を利用するには、カレントディレクトリが /usr/ports である必要があります。 そのディレクトリに移動したら、 make search key=プログラム名 と入力してください。 プログラム名 の部分には検索したいプログラム名を入れます。 たとえば、xchat を探したい場合には次のようにします。 &prompt.root; cd /usr/ports &prompt.root; make search key=xchat Port: xchat-1.3.8 Path: /usr/ports/irc/xchat Info: An X11 IRC client using the GTK+ toolkit, and optionally, GNOME Maint: jim@FreeBSD.org Index: irc B-deps: XFree86-3.3.5 bzip2-0.9.5d gettext-0.10.35 giflib-4.1.0 glib-1.2.6 gmake-3.77 gtk-1.2.6 imlib-1.9.8 jpeg-6b png-1.0.3 tiff-3.5.1 R-deps: XFree86-3.3.5 gettext-0.10.35 giflib-4.1.0 glib-1.2.6 gtk-1.2.6 imlib-1.9.8 jpeg-6b png-1.0.3 tiff-3.5.1 出力のうち特に注意して見なければならないのは Path という行です。 この行は xchat がどこにあるかを示しています。 出力される他の情報は port をインストールする際には直接必要となるものではありませんので、 ここでは触れないでおきます。 ports をインストールするには、 root ユーザにならなければなりません。 インストールしたい port が見つかったら、 実際のインストールに移ることができます。 CD-ROM からのコンパイル タイトルから想像できると思いますが、 このセクションで説明する内容は、FreeBSD の CDROM セットを持っていることを前提としています。 もし CDROM セットを持っていなければ、 FreeBSD Mall で注文することができます。 FreeBSD CDROM がドライブに挿入されていて、 /cdrom (マウントポイントは必ず /cdrom でないといけません) にマウントされていれば、port をインストールすることができます。 まず、カレントディレクトリをインストールしたい port のあるディレクトリに変更してください。 &prompt.root; cd /usr/ports/irc/xchat xchat ディレクトリに移動すると、 port スケルトンがあるのが確認できると思います。 次に行なうのは、port のコンパイル (構築、ビルド (build) とも呼ばれます) です。 これは、プロンプトから単に make と入力するだけで行なえます。 そうすると、次のような出力が現われるはずです。 &prompt.root; make >> xchat-1.3.8.tar.bz2 doesn't seem to exist on this system. >> Attempting to fetch from file:/cdrom/ports/distfiles/. ===> Extracting for xchat-1.3.8 >> Checksum OK for xchat-1.3.8.tar.bz2. ===> xchat-1.3.8 depends on executable: bzip2 - found ===> xchat-1.3.8 depends on executable: gmake - found ===> xchat-1.3.8 depends on shared library: gtk12.2 - found ===> xchat-1.3.8 depends on shared library: Imlib.5 - found ===> xchat-1.3.8 depends on shared library: X11.6 - found ===> Patching for xchat-1.3.8 ===> Applying FreeBSD patches for xchat-1.3.8 ===> Configuring for xchat-1.3.8 ... [configure output snipped] ... ===> Building for xchat-1.3.8 ... [compilation snipped] ... &prompt.root; コンパイルが終了してプロンプトに戻ることを確認してください。 次に port をインストールを行ないます。 port をインストールするのに必要なのは、 make コマンドに一つの単語、 install を指定することだけです。 &prompt.root; make install ===> Installing for xchat-1.3.8 ===> xchat-1.3.8 depends on shared library: gtk12.2 - found ===> xchat-1.3.8 depends on shared library: Imlib.5 - found ===> xchat-1.3.8 depends on shared library: X11.6 - found ... [install routines snipped] ... ===> Generating temporary packing list ===> Installing xchat docs in /usr/X11R6/share/doc/xchat ===> Registering installation for xchat-1.3.8 &prompt.root; プロンプトに戻ったら、 インストールしたプログラムは実行できるようになっています。 makemake install と二つに分けられた手順の代わりに、 最初から make install と実行することで、 手順の二番目の操作を省くことができます。 port には CDROM への収録を許可しないライセンス条項を持つものがあることに 注意してください。 これにはダウンロード前に登録を必要としたり、 再配布が禁止されているなどというさまざまな理由があります。 CDROM に含まれていない port をインストールしたい場合には、 ネットワークに接続する必要があります (次のセクションをご覧ください)。 インターネット経由での ports のコンパイル 前セクションと同じように、このセクションでは、 インターネットへの接続が可能であることを前提としています。 もしインターネット接続が不可能な場合は、 CDROM からのインストールが必要になるでしょう。 インターネット経由で port をインストールする方法は、 CDROM からインストールする場合と完全に同じです。 唯一異なる部分はプログラムのソースコードを CDROM からではなく、 インターネット経由でダウンロードするということです。 次のように、必要な手順は同じです。 &prompt.root; make install >> xchat-1.3.8.tar.bz2 doesn't seem to exist on this system. >> Attempting to fetch from http://xchat.org/files/v1.3/. Receiving xchat-1.3.8.tar.bz2 (305543 bytes): 100% 305543 bytes transferred in 2.9 seconds (102.81 Kbytes/s) ===> Extracting for xchat-1.3.8 >> Checksum OK for xchat-1.3.8.tar.bz2. ===> xchat-1.3.8 depends on executable: bzip2 - found ===> xchat-1.3.8 depends on executable: gmake - found ===> xchat-1.3.8 depends on shared library: gtk12.2 - found ===> xchat-1.3.8 depends on shared library: Imlib.5 - found ===> xchat-1.3.8 depends on shared library: X11.6 - found ===> Patching for xchat-1.3.8 ===> Applying FreeBSD patches for xchat-1.3.8 ===> Configuring for xchat-1.3.8 ... [configure output snipped] ... ===> Building for xchat-1.3.8 ... [compilation snipped] ... ===> Installing for xchat-1.3.8 ===> xchat-1.3.8 depends on shared library: gtk12.2 - found ===> xchat-1.3.8 depends on shared library: Imlib.5 - found ===> xchat-1.3.8 depends on shared library: X11.6 - found ... [install routines snipped] ... ===> Generating temporary packing list ===> Installing xchat docs in /usr/X11R6/share/doc/xchat ===> Registering installation for xchat-1.3.8 &prompt.root; ご覧のとおり、 出力の違いはシステムがどこから port を入手したか示す行だけです。 以上が、システムに ports をインストールするために必要な操作です。 次のセクションでは、システムにインストールされている port を削除する方法について学びます。 インストールされた ports の削除 ports のインストール方法について知ればおそらく、 インストールの後になって、それが間違っていたことに気付いた時などに備えて それらを削除する方法はどうすれば良いのか疑問に感じることでしょう。 ここでは、その削除の方法について扱います。 さて、前の例 (例のまま何も変更していない人は xchat) を削除してみましょう。ports のインストールと同じように、 まず最初にやらなければならないのは port のディレクトリに移動することです。 port のディレクトリは /usr/ports/irc/xchat でしたね。 ディレクトリを移動したら、xchat を削除するのに必要な準備は終わりです。 削除するには、make deinstall コマンド (わかりやすいですよね?) を実行します。 &prompt.root; cd /usr/ports/irc/xchat &prompt.root; make deinstall ===> Deinstalling for xchat-1.3.8 &prompt.root; 極めて簡単な作業です。 これでうまく xchat をシステムから削除することができました。 もう一度再インストールしたい場合には、 /usr/ports/irc/xchat から make reinstall を実行することで行なうことができます。 トラブルシューティング このセクションでは、Ports Collection について良く質問される質問と、 いくつかの基本的なトラブルシューティングテクニック、 そして port がうまく動かない場合にできることについて扱います。 質問と回答集 私はモデムについての議論を しているのかと思っていました??! なるほど。 あなたはきっと、 コンピュータの背面についているシリアルポートのことだと思ってしまったのでしょう。 あるバージョンの Unix から、 - 別のバージョンの Unix へとプログラムを移殖することを + 別のバージョンの Unix へとプログラムを移植することを porting というのですが、 ここでわたしたちは porting の結果という意味で port を使っています。 パッチ (patch) とは何ですか? パッチとは、 あるバージョンから他のバージョンへどのように変更するかを 示す、(通常は) 小さなファイルです。 23 行目を削除468 行目の後にこれらの 2 行を追加、 または 197 行目をこのように変更 というような内容を含んでいます。 これは、diff という名前のプログラムで生成されます。 tarball とは一体何ですか? .tar または .tar.gz という拡張子を持つファイルです (.tar.Z のようなバリエーションもありますし、 DOS のファイルシステム用に .tgz と短縮される場合もあります)。 これは基本的にファイルを一つにまとめた (.tar) ディレクトリツリーです。 圧縮されている (.gz) 場合もあります。 元々 Tape ARchives (訳注: テープアーカイブ) (このため tar という名前なのです) で使われていたものなのですが、 インターネット上でプログラムのソースコードを配布するために 広く使われている方法です。 これらのファイルの中身を見たり、 展開したりすることもできます。FreeBSD の基本システムに付属する Unix 標準の tar コマンドを使ってみると 次のようになります。 &prompt.user; tar tvzf foobar.tar.gz &prompt.user; tar xzvf foobar.tar.gz &prompt.user; tar tvf foobar.tar &prompt.user; tar xvf foobar.tar チェックサムとは何ですか? これは、 チェックしたいファイル中のすべてのデータを加えて生成した 数値です。何か文字が書き換わっていたら、 チェックサムが一致しなくなります。そのため、 単純な比較だけで違いを見つけることができるのです。 今まで「CD-ROM からの ports のコンパイル」にあるようにして ports をインストールできていたのですが、 kermit のインストールをしようとするとうまくいきません。 &prompt.root; make install >> cku190.tar.gz doesn't seem to exist on this system. >> Attempting to fetch from ftp://kermit.columbia.edu/kermit/archives/. なぜ cku190.tar.gz が見つからないのでしょうか? 不良品の CDROM を買ってしまったのでしょうか? CD-ROM からの ports のコンパイル のセクションで説明されているとおり、 ports の一部にライセンス上の制限から CDROM には収録できない種類のものが存在します。 kermit はその一例です。 kermit のライセンス条件は tarball を CDROM に収録することを禁じているため、 申し訳ありませんが手動で tarball を取得してください。 質問にあるようなエラーメッセージが表示されるのは、 あなたがそのときにインターネットへ接続していなかったことによります。 一度 MASTER_SITES のいずれかから (Makefile の中に書いてあります) ダウンロードしておけば、プロセスを再開することができます。 kermit の tarball を入手しましたが、 /usr/ports/distfiles に ファイルを置こうとすると、 書き込み権がないというエラーがでます。 ports は /usr/ports/distfiles から tarball を探します。しかし、これは読み出し専用の CDROM へのシンボリックリンクなので、 ここにファイルを置くことはできません。 次のようにすれば他の場所を探すよう ports に指示することができます。 &prompt.root; make DISTDIR=/where/you/put/it install ports は、すべてを /usr/ports に置いたときだけ動作するのでしょうか? システムの管理者によると、私の個人的なファイルは /u/people/guests/wurzburger に入れなければならないのですが、 これではうまくいかないように思います。 PORTSDIR 変数と PREFIX 変数を変更することで、 違うディレクトリを 使用することができます。 たとえば、 &prompt.root; make PORTSDIR=/u/people/guests/wurzburger/ports install とすると、ports は /u/people/guests/wurzburger/ports でコンパイルされ、すべて /usr/local 以下にインストールされます。 &prompt.root; make PREFIX=/u/people/guests/wurzburger/local install この場合、コンパイルは /usr/ports でおこない、 /u/people/guests/wurzburger/local にインストールします。 もちろん、 &prompt.root; make PORTSDIR=../ports PREFIX=../local install とすれば両者を組み合わせることが可能です (省略せずに記述したらこのページに収めるには長すぎるのですが、 考え方は理解していただけたと思います)。 (X Window System に含まれる) &man.imake.1; を使用する ports の場合は PREFIX が機能せず、 /usr/X11R6 の下へインストールしようとします。 また、Perl 関連の ports も同様に PREFIX を無視して Perl ツリーにインストールします。 これらの ports で PREFIX がきちんと参照されるように変更するのは、ほとんど不可能です。 もし ports をインストールするたびにこれらを毎回タイプするのが気に入らないのであれば、 これらを環境変数にセットしてしまうという手があります。 どのようにすれば良いかについては、 あなたの使っているシェルのマニュアルページを参照してください。 わたしは FreeBSD の CDROM を持っていませんが、 すべての tarball を システムに置いておきたいのです。 そうすれば ports をインストール するたびに毎回ダウンロードが終わるのを待たなくてすむでしょう。 これを一度におこなう簡単な方法はありませんか? Ports Collection 全体の tarball を持ってくるには、 次のようにします。 &prompt.root; cd /usr/ports &prompt.root; make fetch ports の下の一つのディレクトリの tarball を持ってくるには、次のようにします。 &prompt.root; cd /usr/ports/directory &prompt.root; make fetch ports を一つだけ持ってくる方法は、 きっとすでにご存知だと思います。 近くにある FreeBSD のミラーサイトから tarball を持ってくる方がおそらく速いはずです。 MASTER_SITES に書かれているサイト以外から持ってくるように ports に指示する方法はありませんか? もちろんあります。たとえば ftp.FreeBSD.orgMASTER_SITES に書かれている サイトより近いとしたら、以下のようにしてください。 &prompt.root; cd /usr/ports/directory &prompt.root; make MASTER_SITE_OVERRIDE=ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch make がダウンロードしようとする前に、 どんなファイルが必要とするか知りたいのですが。 make fetch-list とすると、ports に必要なファイルの一覧を表示できます。 ports のコンパイルを途中で止める方法はありますか? 私はインストールをする前に いろいろとソースコードを解析したいのですが、毎回 control-C を打たなければならないのが少し面倒です。 make extract を実行すると、 ファイル転送とソースコードの展開まで行なったところで停止します。 自分で ports を作ろうとしています。 わたしの作ったパッチが正しく処理できることを確認できるように、 コンパイルを止めたいのです。 パッチのための make extract のようなものはありませんか? あります。make patch があなたの望むものです。 おそらく PATCH_DEBUG オプションも同様に役に立つことでしょう。 あなたの努力に感謝いたします!! あるコンパイルオプションはバグの原因になるという話を聞きました。 本当なのでしょうか? どうやったら正しい設定で ports をコンパイルできますか? 本当です。 gcc の バージョン 2.6.3 (FreeBSDの 2.1.0 と 2.1.5 に付属している バージョン) では、 オプションを オプションなしで 使うと、バグのあるコードを出力します (ほとんどの ports は オプションを使いません)。 コンバイルオプションは次のように定義すべきです。 &prompt.root; make CFLAGS='-O2 -fno-strength-reduce' install これを /etc/make.conf に書いておくこともできますが、 残念なことにすべての ports がこの指定を尊重してくれるわけではありません。 もっとも確実なのは make configure を実行し、ソースディレクトリの Makefile を見て、手で修正することですが、 ソースが多くのサブディレクトリに分かれていて、 各々に Makefile がある場合は大変な仕事になります。 FreeBSD の標準コンパイルオプションは非常に保守的ですので、 変更していなければ問題となることはないでしょう。 ports がたくさんありすぎて、 わたしの欲しいものがなかなか見つけられません。 どんな ports が使えるのか、リストはどこかにありませんか? /usr/ports の中にある INDEX ファイルを見てみましょう。 また、あるキーワードで ports コレクションを検索することも可能です。 たとえば以下のようにすれば、プログラミング言語 LISP に関連した ports を探すことができます。 &prompt.user; cd /usr/ports &prompt.user; make search key=lisp foo ports をインストールしたいのですが、それのコンパイルは すぐに停止して、bar ports のコンパイルが始まってしまいます。一体どうして? foo ports が、 bar ports の提供する何らかの機能を必要としているからです。 たとえば foo が画像を扱うもので bar がその画像処理に必要なライブラリを持っている場合などです。 もしくは barfoo をコンパイルするのに必要なツールなのかもしれません。 ports から grizzle プログラムをインストールしましたが、まったく ディスクスペースの浪費です。削除したいのですが、 すべてのファイルがどこへインストールされたのかわかりません。 何か手がかりはありませんか? 大丈夫、次のようにしてください。 &prompt.root; pkg_delete grizzle-6.5 もしくは、次のようにします。 &prompt.root; cd /usr/ports/somewhere/grizzle &prompt.root; make deinstall ちょっと待ってください。 削除しようとするコマンドのバージョン番号を 知っていなくてはならないのでしょうか? あなたは、わたしがバージョン番号を 覚えていると本気で思っているのですか? そんなことはありません。 バージョン番号は次のようにすればわかります。 &prompt.root; pkg_info -a | grep grizzle Information for grizzle-6.5: grizzle-6.5 - the combined piano tutorial, LOGO interpreter and shoot 'em up arcade game. ディスク容量のことなのですが、ports のディレクトリは非常に膨大な容量を使うように見えます。 残しておいた方がよいのでしょうか? それとも削除してしまって構わないのでしょうか? はい。インストールが首尾よく終わり、 もうソースコードが必要でないと思うなら、 それらを残しておく理由はないでしょう。 一番良い方法は、次のとおりです。 &prompt.root; cd /usr/ports &prompt.root; make clean これはすべての ports のサブディレクトリを調べ、 各 ports のスケルトン以外の削除をおこないます。 これを試してみたのですが、tarball や ports で使われたファイルが distfiles ディレクトリに残っています。 これも削除してしまっても大丈夫ですか? はい。それを使った作業が終わったのであれば、 削除してしまっても大丈夫です。 手動でファイルを操作するか、 もしくは make distclean を使えば削除することができます。 わたしはとてもとてもたくさんのプログラムを楽しみたいのです。 一度にすべての ports をインストールする方法はありませんか? 次のようにしてください。 &prompt.root; cd /usr/ports &prompt.root; make install ports の中には、 同じ名前でインストールを行なうものがあるということに注意してください。 二つのグラフィック ports をインストールして、 それらが両方とも /usr/local/bin/plot をインストールする場合などは明らかに問題となるでしょう。 やってみました。 時間がとてもかかるだろうと思ったので、 そのまま実行を続けさせて、わたしは寝ました。 翌朝コンピュータを見てみると、 三つ半の ports しか処理が終わっていませんでした。 何か悪かったのでしょうか? ports の中には、 わたしたちの決められないこと (たとえば、あなたが A4 の 用紙に印刷したいのか、US レターサイズの用紙に印刷したいのかなど) について質問してくるものがあるからです。 それらの質問には手動で答える必要があります。 一日中モニタの前に座って過ごしたりしたくないのですが、 何か良いアイディアはありませんか? では、あなたが寝に / 仕事に / 公園にいく前に以下を実行してください。 &prompt.root; cd /usr/ports &prompt.root; make -DBATCH install これでユーザの入力を要求しないすべての ports をインストールします。 そして戻ってきてから次のように実行してください。 &prompt.root; cd /usr/ports &prompt.root; make -DIS_INTERACTIVE install そして残りの作業を実行してください。 わたしたちは Ports Collection にある frobble を使っています。 ですが、わたしたちの必要に応じて ports を変更したところがあるのです。 自分で package を作って、 それをわたしたちのサイトのまわりに簡単に配布できるような方法がありますか? もちろんあります。 変更点をパッチにする方法は知っていますよね? &prompt.root; cd /usr/ports/somewhere/frobble &prompt.root; make extract &prompt.root; cd work/frobble-2.8 [あなたのパッチをあててください] &prompt.root; cd ../.. &prompt.root; make package この ports の技術は本当に賢いですね。 わたしはこれがどのようにして動いているのか知りたいのですが、 その秘密とは何ですか? 秘密なんて一切ありません。 Makefiles ディレクトリ にある bsd.port.mkbsd.port.subdir.mk ファイルを見てください。 (複雑なシェルスクリプトを嫌う読者は、 このリンクを追いかけないほうが良いでしょう…。) たすけて! port がうまく動かない! port がうまく動作しない状況に遭遇したら、 あなたにできることは次のようなことしかありません。 自分で直しましょう! port の作り方 のセクションが参考になるはずです。 苦情を言いましょう — ただし電子メールで! まず port の保守担当者に電子メールを送ってください。 make maintainer と入力するか、 Makefile を直接読み、 保守担当者の電子メールアドレスを調べます。 メールを送る際には、port 名とバージョン番号 (Makefile$FreeBSD: 行)、 そしてエラーが出力されるまでの出力ログを忘れずに添付してください。 保守担当者から返信がなければ、send-pr を使ってバグレポートを提出しても構いません。 その port のことは忘れてしまってください。 これは最も気楽な方法です — 重要 な ports というのは、 ほんの一握りしかありません。 また、port が更新された時に問題が解決しているかも知れません。 近くの FTP サイトから package を入手しましょう。 マスタ package コレクションは、 ftp.FreeBSD.orgpackage のディレクトリにありますが、 まずはあなたの地域のミラーサイトを最初に調べてください。 ソースからコンパイルすることを試みるより確実ですし、 時間もかかりません。 package をシステムにインストールするには、&man.pkg.add.1; を使います。 高度な話題 以前ここにあった文書は、探しやすいように Porter's Handbook へ移動しました。 あなたが ports の作成や提出をしたいと考えているなら、そちらへどうぞ。 diff --git a/ja_JP.eucJP/books/handbook/printing/chapter.sgml b/ja_JP.eucJP/books/handbook/printing/chapter.sgml index 709a84008b..a75458fb0f 100644 --- a/ja_JP.eucJP/books/handbook/printing/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/printing/chapter.sgml @@ -1,5296 +1,5296 @@ プリンタの利用 原作: Sean Kelly kelly@ad1440.net、1995 年 9 月 30 日 改訂: &a.jim;、2000 年 3 月 訳: &a.jp.kimura;、1996 年 9 月 3 日 この章では LPD スプーリングシステム 印刷 FreeBSD でプリンタを使用するためには、 バークレーラインプリンタスプーリングシステム (LPD スプーリングシステムとしても知られています) が機能するようにプリンタをセットアップする必要があります。 本章では設定例を通して、LPD スプーリングシステム (大抵の場合、単に LPD と呼ばれる) について紹介します。 もし、LPD や他のプリンタスプーリングシステムについてすでに詳しい知識をお持ちの方は、 スプーリングシステムのセットアップから読み始めても構いません。 はじめに LPD はあるホストのプリンタに関する制御の一切を行ないます。 ここで言う制御としては、次のことがあげられます。 ホストに接続されたプリンタ、 あるいはネットワーク上の他ホストに接続されたプリンタに対するアクセス制御を行ないます。 プリントジョブ ファイルをプリントする要求に対して許可を与えます。 この要求は特にジョブと呼ばれています。 各々のプリンタのキューを管理することにより、 複数のユーザがあるプリンタに対して同時にアクセスすることを防ぎます。 ヘッダページ (バナーまたは バーストページとしても知られています) をプリントすることができます。 これにより、 プリントアウトの山の中から自分がプリントしたジョブを見つけやすくなります。 シリアルポートに接続したプリンタ用に通信パラメータを管理します。 ネットワーク経由で他のホスト上の LPD スプーラにジョブを送ることができます。 様々なプリンタ言語やプリンタの能力に応じてジョブの形式を整えるため、 特別なフィルタを起動することができます。 プリンタの使用に対して課金を行なうことができます。 設定ファイルを通して、あるいは特別なフィルタプログラムを用いることにより、 多種多様なプリンタ機器に対して、 上述の機能の全部または一部を LPD システムに行なわせることができます。 どうしてスプーラを使うべきなのか あなたのシステムを利用するのがあなた一人だけだとしたら、 アクセス制御もヘッダページも プリンタ利用に対する課金も必要ないのに、 なぜわざわざスプーラに煩わされなければならないのか疑問に思うかも知れません。 プリンタに対する直接アクセスを許可することもできるのですが、 とにかくスプーラを使用するべきです。その理由は、 LPD はジョブをバックグラウンドで処理します。 データがプリンタに送信されるまで待つ必要がなくなります。 TeX LPD ではジョブをフィルタを通してプリントすることが簡単にできます。 これにより、印刷物のヘッダに時刻や日付を入れたり、 特別なファイル形式 (TeX の DVI ファイルなど) をプリンタが処理できる形式に変更することができ、 これらの作業を手動で行なう必要がなくなります。 プリント処理を行なうフリー、 または商用のプログラムのほとんどは、 システムのスプーラとやりとりするように作られています。 スプーリングシステムをセットアップすることで、 今後加えるかもしれない、あるいは、 すでに持っている別のソフトウェアをより簡単にサポートすることができるでしょう。 基本的なセットアップ LPD スプーリングシステムを用いてプリンタを使用するためには、 プリンタ機器と LPD 用ソフトウェアの両方を準備する必要があります。 本文書では次の二段階のレベルに分けて説明をします。 プリンタを接続する方法、 プリンタにどのように通信するかを LPD に指示する方法や、 プレインテキストをプリンタで印字する方法については、 プリンタの簡単な設定をご覧ください。 様々な形式のファイルを印字する方法、 ヘッダページを印字する方法、 ネットワーク経由でプリンタに印字する方法、 プリンタを制御する方法、 プリンタの使用に対する課金を行なう方法についてはプリンタ設定 上級編をご覧ください。 プリンタ設定導入編 この節では、プリンタ機器やプリンタを使用するための LPD 用ソフトウェアを設定する方法について述べます。 この節の概要は次のとおりです。 プリンタ機器の設定では、 プリンタをコンピュータに接続するためのヒントがいくつか書かれています。 ソフトウェアの設定では、 LPDのスプーラ設定ファイル /etc/printcap の設定方法について書かれています。 データをプリンタに送るためにシリアルまたはパラレルインタフェースではなく、 ネットワークプロトコルを使用する場合は、 ネットワークにおけるデータストリームインタフェースを持つプリンタをご覧ください。 この節のタイトルは プリンタ設定導入編 ですが、 実際の設定はかなり複雑です。 プリンタをコンピュータに接続し、 LPD スプーラを起動させることは一番困難な作業です。 ヘッダページを出力させたり課金したりするオプションの設定は、 一度プリンタがうまく動くようになればとても簡単です。 プリンタ機器の設定 この節では、プリンタに PC を接続するための様々な方法について説明しています。 ここでは、ポートやケーブルの種類、 FreeBSD がプリンタとの通信に必要なカーネルコンフィグレーションについても言及しています。 もしプリンタが既に接続されていて、 他のオペレーティングシステム上でプリンタからの印字に成功している場合は、 ソフトウェアの設定まで読み飛ばすことが多分できるでしょう。 ポートとケーブル 最近の PC 用のプリンタほとんどには次のインタフェースの一つもしくは両方がついています。 プリンタ シリアル シリアルインタフェースでは、 プリンタにデータを送信するためにコンピュータにあるシリアルポートが使用されます。 シリアルインタフェースはコンピュータ業界で共通して使用されています。 そのケーブルは容易に手に入りますし、簡単に自作することもできます。 シリアルインタフェースの場合は時々、 特別なケーブルや何か複雑な通信方式選択の設定が必要になることがあります。 プリンタ パラレル パラレルインタフェースではプリンタにデータを送信するために、 コンピュータにあるパラレルポートを使用します。 パラレルインタフェースは PC 業界では良く使われます。 ケーブルの入手は容易ですが、 自作するのはシリアルよりも困難です。 パラレルインタフェースには通常、通信方式の選択はなく、 設定は極めて単純です。 セントロニクス パラレルプリンタ パラレルインタフェースは セントロニクス インタフェースとして知られています。 これは、プリンタ用のコネクタタイプとして採用された後に名付けられました。 シリアルインタフェースはパラレルインタフェースよりも普通はデータの伝送速度が遅くなります。 パラレルインタフェースでは、通常、 (コンピュータからプリンタへの) 単方向通信のみを行なうのに対して、 シリアルインタフェースは双方向通信を行ないます。 FreeBSD でも IEEE1284 準拠のケーブルを使えば、 最近のパラレルポートとプリンタの多くで双方向通信を行なうことができます。 PostScript 通常、プリンタで双方向通信が必要となるのは、プリンタが PostScript 言語に対応しているときだけです。 PostScript プリンタは非常に冗長に動作させることができます。 事実、PostScript によるジョブでは、プログラムを本当にプリンタに送信します。 このことは、印字作業を必ずしもする必要がないことを意味しますし、 そのプログラムの結果はコンピュータに直接返されるかも知れません。 PostScript プリンタでは双方向通信を使って PostScript プログラムのエラーや紙づまりといった問題をコンピュータに報告します。 ユーザはそれらの情報を知りたいと思うかも知れません。 また、PostScript プリンタで課金作業をもっとも効率よく行なうためには、 双方向通信が必要となります。 この方法ではまず、プリンタの現在のページカウント (起動してから今まで何枚の紙を印字したか) の情報を得ます。 次に、ユーザのジョブを実行し、終了後、再びページカウントを得ます。 この二つの数を差によって、 課金対象となる紙の枚数を知ることができるのです。 パラレルポート プリンタをパラレルインタフェースを使って接続する場合は、 セントロニクスケーブルでプリンタとコンピュータを接続してください。 詳しい説明はプリンタやコンピュータに付属する説明書に書かれているはずです。 その際、 どのパラレルポートを使用したかを覚えておいてください。 FreeBSD では最初のポートは /dev/lpt0、 二番目 /dev/lpt1 であ り、 三番目以降も同様に続きます。 シリアルポート シリアルインタフェースを使ってプリンタを使う場合は、 適切なシリアルケーブルでプリンタとコンピュータを接続してください。 詳しい説明はプリンタ、コンピュータ、あるいは両方に付属する説 明書に書かれているはずです。 適切なシリアルケーブル が良くわからないときは、 次のどれかを試してみてください。 モデム用ケーブルでは、 それぞれのピンは他方のコネクタの対応するピンと線でつながっています。 このタイプのケーブルは DTE-DCE 間ケーブルとしても知られています (訳注: 日本ではストレートケーブルという名前で売られています)。 ヌルモデム用ケーブル ヌルモデム用ケーブルでは、 あるピンは対応するピンとを接続していますが、 あるピン (たとえば、データ送信用とデータ受信用のピン) が交差して接続したり、 いくつかのピンは内部で短絡していたりします。 このタイプのケーブルは、 DTE-DTE 間ケーブルと呼ばれています (訳注: 日本ではクロスケーブルという名前で売られています)。 A シリアルプリンタ用ケーブルは、 ある特定のプリンタで必要とされるものです。 ヌルモデムケーブルと似ていますが、 内部で短絡させる代わりに、 ある信号を他方側に送るために使用しています。 ボーレート パリティ フローコントロールプロトコル この他に、 プリンタ用の通信パラメータを設定する必要があります。 通常、 プリンタのフロントパネルや DIP スイッチによって制御します。 コンピュータとプリンタの双方で設定できる最高の通信速度 [bps] (ビット/秒、 ボーレートと示されているときもある) を選んでください。そして、データビット (7 または 8)、 パリティ (偶/奇/なし)、ストップビット (1 または 2) を選んでください。 そして、フローコントロールの有無 (制御なし、または XON/XOFF (イン・バンド または ソフトウェア フローコントロールとも呼ばれる)) を選びます。 以下に続くソフトウェアの設定のために、 ここでの設定を覚えておいてください。 ソフトウェアの設定 本節では FreeBSD の LPD スプーリングシステムで印字をおこなうために 必要となるソフトウェアの設定について説明しています。 本節の概要は次のようになります。 プリンタで使用するポートのために、必要があれば、 カーネルの書き変えをおこないます。「カーネルの変更」で、 このためにしなくてはならないことを説明しています。 パラレルポートを使用している場合は、 パラレルポートのための通信モードの設定します。詳細は、「 パラレルポートの通信モードを設定する 」で説明しています。 オペレーティングシステムからプリンタにデータが送ら れているかをテストします。「 プリンタとの通信状況を調べる」で、 どのようにテストするかの提案をいくつかおこなっています。 ファイル/etc/printcapを変更し、 LPDの設定をおこないます。この節で、どのように変更するかを 説明しています。 カーネルの変更 オペレーティングシステムのカーネルの コンパイルをおこなうことによって、 指定されたのデバイスが機能するようになります。シリアル、 または、パラレルインタフェースをプリンタで使用する場合、 必要なデバイスがこの指定の中に含まれていなくてはなりません。 したがって、 必要なデバイスがカーネルに組み込まれていない場合、 追加のシリアル、または、パラレルポートをサポートするために、 カーネルの再コンパイルが必要となるかもしれません。 シリアルポートが現在使用しているカーネルで サポートされているかどうかを調べるためには、 次のように入力します。 &prompt.root; dmesg | grep sioN ここで、N はシリアルポートの番号を示し、この番号は 0 から始まります。 次のような出力があった場合、 カーネルはそのポートをサポートしています。 sio2 at 0x3e8-0x3ef irq 5 on isa sio2: type 16550A パラレルポートが現在使用しているカーネルで サポートされているかどうかを調べるためには、 次のように入力します。 &prompt.root; dmesg | grep lptN ここで、N はパラレルポートの番号を示し、この番号は 0 から始まります。 次のような出力があった場合、 カーネルはそのポートをサポートしています。 lpt0 at 0x378-0x37f on isa 上記の出力が得られない場合、プリンタを使うため、 オペレーティングシステムにパラレル、または、 シリアルポートを認識し、使用できるようにするためには カーネルを変更する必要があります。 シリアルポートをサポートさせるには、「 FreeBSDカーネルのコンフィグレーション」の節をご覧く ださい。パラレルポートをサポートさせる場合も、その節と、 あわせて、 この節に続く節もご覧ください。 ポート用エントリを <filename>/dev</filename> に追加する カーネルがシリアル、または、パラレルポートを通じての通 信をサポートしていたとしても、システム上で動いているプログ ラムがデータの送受信をおこなうための ソフトウェアインタフェースがさらに必要になります。 そのインタフェースは、/dev ディレクトリにあるエントリに相当します。 /dev エントリにポートを加えるために &man.su.1; コマンドで root になります。su コマンド でパスワードを聞かれたら、ルート用のパスワードを入力し ます。 /dev ディレクトリに移動します。 &prompt.root; cd /dev 次のように入力します。 &prompt.root; ./MAKEDEV port ここで、port は、 作成するポート名です。1 番目 のパラレルポートのときは lpt0 に、2 番目のときは lpt1 になり、以降同様になります。 1番目のシリア ルポートのときは、 ttyd0 に、2 番目のときは ttyd1 になり、 これも以降同様となります。 次を入力し、デバイスのエントリができたか確認します。 &prompt.root; ls -l port パラレルポートの通信モードを設定する パラレルインタフェースを使用している場合、FreeBSD では、 割り込み駆動型にするか、 プリンタとの通信の状況をカーネルに監 視させるかのいずれかを選択できます。 GENERIC カーネルでは割り込み駆動方式が、 デフォルトになっています。この方式では、 オペレーティングシ ステムはプリンタがデータを受け付けられるかどうかを調べ るために、IRQ ラインを一つ使用します。 監視方式では、 オペレーティングシステムにプ リンタがもっとデータを受け付けられるかどうかを繰り返し 尋ねるように指示します。そして、受け付けるという応答を 受けたとき、 カーネルはさらなるデータを送信します。 割り込み駆動方式は、いくらか高速になりますが、貴重な IRQ ラインを一つ消費します。 うまく機能するものをお使いください。 通信モードを設定するためには 2 つの方法があります。 1つはカー ネルを変更することで、もう一つは &man.lptcontrol.8; プログラムを使用する方法です。 カーネルを設定することによって、 通信モードを変更する。 カーネルコンフィグレーションファイルを変更します。 lpt0 のエントリを探すか追加してください。2 番目 のパラレルポートを設定するときは、代わりに lpt1 を使います。以下、 3 番目のポートは lpt2 となってい きます。 イベント駆動方式にする場合は、 irq 指定を追加します。 device lpt0 at isa? port? tty irq N vector lptintr ここで、N はパラレルポート用の IRQ 番号です。 監視方式を使用する場合は、 irq を追加してはいけません。 device lpt0 at isa? port? tty vector lptintr ファイルをセーブし、config プログラムを起動し、 カーネルの構築、インストールをおこないます。そして、 リブートしてください。詳細は、「 FreeBSDカーネルのコンフィグレーション」を参照 してください。 &man.lptcontrol.8; で通信モードを設定する場合 lptN をイベント駆動方式に設定する場合は、 次のように入力します。 &prompt.root; lptcontrol -i -u N lptN を監視方式に設定する場合は、次のように入力します。 &prompt.root; lptcontrol -p -u N これらのコマンドを /etc/rc.local ファイルに追加 しておくと、システムをブートする度に通信モードを設定する ことができます。詳細については、 &man.lptcontrol.8; をご覧ください。 プリンタとの通信状況を調べる スプーリングシステムの設定に進む前に、オペレーティング システムがプリンタにデータを送ることに成功しているかどうか を確かめるべきでしょう。これにより、印字がうまくいかないと き、プリンタとの通信が問題なのか、スプーリングシステムが問 題なのかを分けて調べることがかなり容易になります。 プリンタをテストするためには、 プリンタに何かのテキストを送 信してみます。送信した文字をすぐに印字してくれるプリンタに は、&man.lptest.1; コマンドを使うと有用です。このコマンドは印 字可能な 96 文字の ASCII 文字すべてを 96 行生成します。 PostScript PostScript (または他の言語に対応した) プリンタの場合 は、もっと巧妙なテストが必要になります。次のような、簡単な PostScript プログラムを使えば十分でしょう。 %!PS 100 100 moveto 300 300 lineto stroke 310 310 moveto /Helvetica findfont 12 scalefont setfont (Is this thing working?) show showpage 上の PostScript コードはファイルに保存し、 以降の節で例として示されているように利用することができます。 PCL このドキュメントでプリンタ用言語を参照するときは、 PostScript のような言語を仮定しており、Hewlett Packard の PCL は考慮していません。PCL は非常に機能的なの ですが、 プレインテキストにエスケープシーケンスを混ぜること ができます。PostScript ではプレインテキストを直接印字 することはできません。 このような種類のプリンタ言語に対しては、 特別な対応をおこなわなければなりません。 パラレルポートのプリンタとの接続を調べる プリンタ パラレル この節では、FreeBSD がパラレルポートに接続されたプリ ンタと通信できているかどうかを調べる方法について説明し ています。 パラレルポートのプリンタをテストするために &man.su.1; コマンドで root になります。 プリンタにデータを送ります。 プリンタがプレインテキストを印字できる場合、 &man.lptest.1; コマンドを使います。 次のように入力してください。 &prompt.root; lptest > /dev/lptN ここで、N はパラレルポートの番号で、番号は 0 から始まります。 プリンタが PostScript か他のプリンタ 言語を使用している場合、そのプリンタに簡単なプロ グラムを送信してください。次のように入力します。 &prompt.root; cat > /dev/lptN そして、一行一行、 プログラムを慎重に入力して 下さい。RETUREN または ENTER キーを入力してしま うと、その行は編集できなくなります。プログラムの 入力が終わったら、CONTROL+D か、あなたが設定して いるファイル終了のキーを押してください。 もしくは、プログラムを入力したファイルがある 場合は、次のように入力してください。 &prompt.root; cat file > /dev/lptN ここで、file はプログラムが格納されていて、 プリンタに送信するファイルの名前です。 これで何かがプリントされることでしょう。 印字されたテキ ストがおかしくても心配しなくても構いません。それについ ては、後で修正します。 シリアルポートのプリンタとの接続を調べる プリンタ シリアル この節では、FreeBSDがシリアルポートに接続されたプリ ンタと通信できているかどうかを調べる方法について述べられ ています。 シリアルポートのプリンタをテストするために &man.su.1; コマンドで root になります。 /etc/remote ファイルを編集します。次のエントリを加えてください。 printer:dv=/dev/port:br#bps-rate:pa=parity bit/秒 シリアルポート パリティ ここで、port シリアルポート (ttyd0ttyd1 など) のデバイスエントリで、 bps-rateは プリンタとの通信の転送速度[bit/秒]、 parityはプリ ンタとの通信で必要とされるパリティ (evenoddnonezeroのいずれか) を表わしていま す。 次の例は、 プリンタをシリアルケーブルでパリティなし、転送速度 19200bps で第 3 番目のシリアルポートに接続した場 合です。 printer:dv=/dev/ttyd2:br#19200:pa=none &man.tip.1; コマンドでプリンタと接続します。 次のように入力してください。 &prompt.root; tip printer これがうまくいかなかった場合は、 /etc/remoteを編集して、 /dev/ttydN の代わりに /dev/cuaaN を試してみてください。 プリンタにデータを送ります。 プリンタがプレインテキストを印字できる場合、 &man.lptest.1; コマンドを使います。 次のように入力してください。 ~$lptest プリンタが PostScript か他のプリンタ 言語を使用している場合、そのプリンタに簡単なプロ グラムを入力します。一行一行、 プログラムを慎 重に入力してください。 バックスペースキーや他の編集用のキーは、 プリンタの制御コードに割り当てられ ているかもしれません。プログラムが終了したことを プリンタに伝えるための特別なファイル終了キーを入 力する必要があるかもしれません。PostScript プリンタの場合、CONTROL+D を入力します。 もしくは、プログラムを入力したファイルがある 場合は、次のように入力してください。 ~>file ここで、file はプログラムが格納されているファイル名です。 &man.tip.1; コマンドでファイルを送信した後は、 ファイル終了を表わすキーを入力する必要があります。 これで何かがプリントされることでしょう。 印字されたテキ ストがおかしくても心配しなくても構いません。 それについては、後で修正します。 スプーラに許可を与える: <filename>/etc/printcap</filename> ファイル ここまでで、プリンタはコンピュータに接続され、(必要なら) プリンタと通信できるようにカーネルを変更し、簡単なデータをプ リンタに送信することができているはずです。これで、LPD にプリ ンタへのアクセスを 制御させる設定をおこなう準備が整いました。 LPD の設定は /etc/printcap を編集することでおこないます。 LPD スプーリングシステムはスプーラが使われる毎にこのファイル を参照します。そのため、ファイルを更新するとすぐにその変更が 反映されます。 プリンタ ケイパビリティ &man.printcap.5; ファイルの書式は簡単です。 /etc/printcap の編集はお好みのテキストエディタをお 使いください。このファイルの書式は、 /usr/share/misc/termcap/etc/remote といった他のケイパビリティファイルと一致しています。 この書式 のついての詳細な情報については &man.cgetent.3; をご覧ください。 スプーラの単純な設定法は、 次のステップでおこないます。 プリンタに名前 (と簡単な別名 2 〜 3 個) を付け、それを /etc/printcap ファイルに記述します。 これについては、「 プリンタに名前を付ける」 を参照してください。 ヘッダページ sh の項目を追加することで、 ヘッダページの出力を禁止します (デフォルトは許可)。 これについては、「 ヘッダページの印字を禁止する」 を参照してください。 スプール用のディレクトリを作成し、その位置を sd 項目で指定します。これについては、 「 スプーリングディレクトリの作成」 を参照してください。 プリンタを使用するために /dev エントリを設定し、/etc/printcaplp 項目でそのエントリを指定します。 これについては、「 プリンタデバイスの特定」 を参照してください。 プリンタをシリアルポートに接続した場合は、 fsfcxsxc の項目を設定する必要があります。こちらについては、 「 スプーラのための通信パラメータの設定」 を参照してください。 プレインテキスト用の入力フィルタのインストールを おこないます。「 テキストフィルタのインストール」 を参照してください。 &man.lpr.1; コマンドで何かを印字することで設定のテス トをおこないます。 印字してみよう と トラブルシューティング を参照してください。 PostScript プリンタのような、 プリンタ言語を使用しているプリンタには、 プレインテキストを直接印字させることができません。 上にアウトラインを示し、 以下の節で説明する簡単な設定方法の説明では、 そのようなプリンタを設置している場合は、 プリンタが認識できるファイルだけを印字の対象としているという 仮定をしています。 多くの場合、 利用者はシステムに設置されているプリンタすべてで プレインテキストが印字できることを期待しています。 印字作業をおこなうために LPD のインタフェースを利用するプログラムでも、 通常、そのような仮定を置きます。 プリンタ言語を使用するプリンタを設置しており、 そのプリンタ言語で記述されたジョブと、 これに加えて、 プレインテキストのジョブも印字できるようにしたいならば、 上で示した簡単な設定方法に加えて、 さらなる設定をおこなうことを強くお勧めします。すなわち、 原始的なプレインテキストから PostScript (もしくは、 他のプリンタ言語) に変換するプログラムをインストールしてください。「 プレインテキストのジョブを PostScript プリンタで印字する」 で、それをどのようにおこなえばよいのかが説明されています。 訳注 日本語を印字したい場合は、プリンタ言語を使用し ていない「日本語プリンタ」についても、 プリンタ固有のエスケープシーケンスを送る必要があります。 また、漢字コードをプリン タが設定しているものに変換したりする必要があり、 各プリンタ毎に、日本語用のフィルタが必要になります。 プリンタに名前を付ける 最初の (簡単な) ステップで、プリンタの名前を考えます。 プリンタには別名をいくつか付けることもできるので、 機能的な名前 でも風変わりな名前でもどちらを選んでもまったく 問題はありません。 少なくとも1つのプリンタには、 /etc/printcap の中で、 lp という別名を持たせるべきでしょう。 この名前はデフォルトのプリンタ名になっています。 ユーザが環境変数 PRINTER を設定しておらず、 かつ、LPD コマンドのコマンドラインで プリンタの名前が指定されていない場合、lp がデフォルトのプリンタ名となり、 そのプリンタに出力されます。 それから、これは共通の慣習ですが、 プリンタの最後の別名には、 メーカーやモデル名を含むプリンタの完全な名称をつけることに なっています。 名前と別名のいくつかを決めたら、 /etc/printcap ファイルに設定します。 プリンタ名は一番左のカラムから書き始めます。 別名はそれぞれ縦棒によって区切られ、 最後の別名の後ろにコロンを置きます。 次の例では、2 台のプリンタ (Diablo 630 ラインプリンタと Panasonic KX-P4455 PostScript レーザライタプリンタ) が定義 されている /etc/printcap のスケルトンを記しています。 # # /etc/printcap for host rose # rattan|line|diablo|lp|Diablo 630 Line Printer: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4: この例では、最初のプリンタに rattan という名前と別名として、linediablolp そして Diablo 630 Line Printer が付けられています。別名とし て lp があるので、このプリンタはデフォルトのプリンタとなっ ています。2 番目は bamboo と名付けられ、 別名として、psPSSpanasonicPanasonic KX-P4455 PostScript v51.4 が付けられています。 ヘッダページの印字を禁止する 印刷 ヘッダページ LPDスプーリングシステムでは、 デフォルトでジョブ毎に ヘッダページを印字します。 ヘッダページにはジョブを要求したユーザ名、 ジョブが送られたホスト名、そして、ジョブの名前が素晴 らしい大きな文字で印字されています。 残念なことに、この余分なテキストすべてが、 簡単なプリンタ設定法のデバッグの際に紛れ込んできてしまいます。 このため、ヘッダページの出力を禁止しておきます。 ヘッダページの出力を禁止するには、 /etc/printcap にあるプリンタのエントリに sh の項目を追加します。次に、sh を加えた /etc/printcap の例を示します。 # # /etc/printcap for host rose - no header pages anywhere # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh: この書式を正しく使うための注意をしておきます。 最初の行は左端のカラムから始まります。それに続く行は TAB ひとつ分だけ字下げします。最後の行以外のすべての行は、 行末にバックスラッシュを記述します。 スプーリングディレクトリの作成 プリンタスプール プリントジョブ スプーラの簡単な設定の次のステップでは、 スプーリングディレクトリを作成します。 プリンタに送られるジョブは、 その印字が終了するまでこのディレクトリに置かれます。また、 他のたくさんのスプーラもこのディレクトリにファイルを置きます。 様々な事情によりスプーリングディレクトリは、通常、慣例 として /var/spool の下に置きます。 また、スプーリングディレクトリの内容は バックアップをする必要はありません。 &man.mkdir.1; によってディレクトリを 作るだけでスプーリングディレクトリの復旧は完了します。 スプーリングディレクトリの名前は、これも慣例ですが、 次のようにプリンタの名前と同じにします。 &prompt.root; mkdir /var/spool/printer-name しかしながら、ネットワーク上に使用可能なプリンタがたく さんあるならば、LPD で印字するための専用のディレクトリに スプーリングディレクトリを置きたいと思うかもしれません。 例に出てきたプリンタ rattanbamboo について、この方式を採用すると、 次のようになります。 &prompt.root; mkdir /var/spool/lpd &prompt.root; mkdir /var/spool/lpd/rattan &prompt.root; mkdir /var/spool/lpd/bamboo 各ユーザが印字するジョブのプライバシを守りた いと考えているならば、スプーリングディレクトリを保護し て、これを誰からでもアクセスできないようにしたいと思う - かもしれません。スプーリングディレクトリは、deamon ユー + かもしれません。スプーリングディレクトリは、daemon ユー ザと daemon グループに所有され、読み込み、書き込み、検 索可能であり、他からはアクセスできないようにするべきで す。例題のプリンタに対して、次のようにすることにしましょ う。 &prompt.root; chown daemon:daemon /var/spool/lpd/rattan &prompt.root; chown daemon:daemon /var/spool/lpd/bamboo &prompt.root; chmod 770 /var/spool/lpd/rattan &prompt.root; chmod 770 /var/spool/lpd/bamboo 最後に、/etc/printcap ファイルで、 これらのディ レクトリの位置を LPD に伝える必要があります。 スプーリ ングディレクトリのパス名は sd 項目で指定します。 # # /etc/printcap for host rose - added spooling directories # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh:sd=/var/spool/lpd/rattan: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo: プリンタ名が最初のカラムから始まっており、そのプリンタ に関して記述される他のエントリは TAB で字下げされてい ること、各行がバックスラッシュで終わっていることに注意 してください。 sd によりスプーリングディレクトリが指定されていな い場合、 スプーリングシステムは /var/spool/lpd デフォルト値として使用します。 プリンタデバイスの特定 ポート用エントリを /dev に追加する」では、FreeBSD でプリン タとの通信に使用される /dev ディレクトリ内のエントリを特定します。そして、LPD にその情報を伝えます。印字するジョブを受け取ると、 スプーリングシステムは、 (プリンタにデータを渡す義務がある) フィルタプログラムに 代わって指定されたデバイスをオープンします。 /etc/printcap ファイルで lp 項目を使って /dev エントリを記入します。 ここでの例では、rattan は 1 番目のパラレルポートに、bamboo は 6 番目のシリアルポートに接続されていることにしましょう。 このとき、/etc/printcap には 次のようになります。 # # /etc/printcap for host rose - identified what devices to use # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo:\ :lp=/dev/ttyd5: /etc/printcap でプリンタの lp 項目が指定 されていない場合は、LPD はデフォルトとして /dev/lp を使用します。/dev/lp は、現在の FreeBSD には存在していません。 設置したプリンタがパラレルポートに 接続されている場合は、 「 テキストフィルタのインストール」 まで読み飛ばしてください。 そうでない場合は、次節の説明に続いてください。 スプーラのための通信パラメータの設定 プリンタ シリアル シリアルポートにプリンタを接続した場合、 プリンタにデータを送信するフィルタプログラムに代わり、 通信速度やパリティ、 その他のシリアル通信パラメータを設定することができます。 このことによる利点は、 /etc/printcap を編集するだけで、 様々な通信パラメータを試してみることができます。 フィルタプログラムを再コンパイルする必要はありません。 スプーリングシステムで、 シリアル通信の設定が異なっているかもしれない複数のプリンタに 同じフィルタプログラムを使うことが可能になります。 次の /etc/printcap の項目で、 lp で指定された デバイスのシリアル通信パラメータを制御できます。 br#bps-rate デバイスの通信速度を bps-rate に設定します。 ここ で、bps-rate は 50、 75、110、134、150、200、300、600、1200、1800、2400、 4800、9600、19200、38400[bit/秒] のいずれかです。 fc#clear-bits デバイスをオープンした後で、 sgttyb 構造体の clear-bits フラグビットをクリアします。 fs#set-bits sgttyb 構造体の clear-bits フラグビットをセットします。 xc#clear-bits デバイスをオープンした後で、ローカルモードビット clear-bits をクリアします。 xs#set-bits ローカルモードビット set-bits をセットします。 fcfsxc、そして xs のビットに関する詳しい情報については、 /usr/include/sys/ioctl_compat.h を参照してください。 項目 lp で指定されたデバイスを LPD がオープンするとき、LPD は sgttyb 構造体のフラグビットを読み出します。そして、項目 fc の全ビットをクリアします。次に、 項目 fs のビットをセットし、 その結果を設定します。 ローカルモードビットに関しても同様におこなわれます。 例題のプリンタで6番目のシリアルポートに接続された プリンタの設定を追加してみましょう。 通信速度は 38400bps に設定します。 フラグビットとして、TANDEM、ANYP、LITOUT、 FLUSHO、PASS8 をセットします。ローカルモードビットでは、 LITOUT と PASS8 フラグをセットします。 bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo:\ :lp=/dev/ttyd5:fs#0x82000c1:xs#0x820: テキストフィルタのインストール プリントフィルタ ここまでで、 プリンタにジョブを送るために使うテキストフィ ルタを LPD に設定する準備が整いました。 テキストフィルタとは、 入力フィルタとしても知られていますが、 印字するジョブがあるときに LPD が起動するプログラムです。 LPD がプリンタのためにテキストフィルタを起動するとき、LPD はフィルタの標準入力からプリントするジョブを入力し、 フィルタの標準出力に項目 lp で指定されたプリンタデバイスを接続します。フィルタは、 標準入力からジョブを読み込み、 プリンタのための必要な変換をおこなった後、 その結果を標準出力に出力する、 これにより印字がなされることを期待されています。 テキストフィルタについての更に詳しい情報については、「 フィルタはどのように機能しているか」 をご覧ください。 ここでの簡単なプリンタ設定では、 プリンタにジョブを送るため、/bin/cat を実行するだけの簡単なシェルスクリプトで間に合います。 FreeBSD に標準で付属している lpf というフィルタでは、バックスペース文字を使った 下線引きの動作をおこなう文字ストリームをうまく扱うことができない プリンタのための代替処理をおこなってくれます。 もちろん、 他のどんなフィルタプログラムを使っても構いません。 フィルタ lpf については、「テキストフィルタ lpf」で詳しく説明します。 最初に、簡単なテキストフィルタであるシェルスクリプト /usr/local/libexec/if-simple を作ってみましょう。 次のテキストをお好みのテキストエディタでファイルに 書き込んでください。 #!/bin/sh # # if-simple - Simple text input filter for lpd # Installed in /usr/local/libexec/if-simple # # Simply copies stdin to stdout. Ignores all filter arguments. /bin/cat && exit 0 exit 2 そして、このファイルを実行可能にします。 &prompt.root; chmod 555 /usr/local/libexec/if-simple LPD にこのテキストフィルタを使うことを設定するためには、 /etc/printcapif 項目を使って指定します。これまでの /etc/printcap の例のプリンタ 2 台に、 このフィルタを加えてみましょう。 # # /etc/printcap for host rose - added text filter # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0:\ :if=/usr/local/libexec/if-simple: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo:\ :lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:\ :if=/usr/local/libexec/if-simple: LPD を起動します &man.lpd.8; は lpd_enable 変数に従って /etc/rc から実行されます。この変数の デフォルト値は NO です。まだ そうしていなかったならば lpd_enable="YES" の行を /etc/rc.conf に追加して 計算機を再起動するか、そのまま &man.lpd.8; を 起動してください。 &prompt.root; lpd 印字してみよう 簡単な LPD 設定も終わりにたどり着きました。残念ながら、 設定はこれでおしまいというわけではありません。なぜなら、 さらに、設定をテストし、 すべての問題点を解決しなくてはならないからです。 設定をテストするために、 何かを印字してみましょう。LPD システムで印字をするためには、 &man.lpr.1; コマンドを使います。このコマンドは、 印字するためのジョブを投入する働きをします。 &man.lpr.1; コマンドを 「 プリンタとの通信状況を調べる」で紹介した、 あるテスト用のテキストを生成してくれる &man.lptest.1; プログラムと一緒に使うこともできます。 簡単な LPD 設定をテストするために: 次のように入力してください。 &prompt.root; lptest 20 5 | lpr -Pprinter-name ここで、printer-name/etc/printcap で指定したプリンタ名 (もしくはその別名) です。デフォルト のプリンタを使用する場合は、 引数を付けないで &man.lpr.1; を打ち込んでください。もう一度述べますが、 ポストスクリプトを期待しているプリンタをテストするならば、 &man.lptest.1; を使う代わりに PostScript で書かれた プログラムをプリンタに送ってください。 プログラムを送るためには、プログラムをファイルに格納して、 lpr file と打ち込みます。 PostScript プリンタの場合、 送信したプログラムによる結果が得られるでしょう。 &man.lptest.1; を使った場合は、 以下のような結果が見られるでしょう。 !"#$%&'()*+,-./01234 "#$%&'()*+,-./012345 #$%&'()*+,-./0123456 $%&'()*+,-./01234567 %&'()*+,-./012345678 更にプリンタをテストしたい場合は、 (言語ベースのプリンタのための) もっと大きなプログラムを送信するか、 引数を変えて &man.lptest.1; を実行します。例えば、lptest 80 60 で、それぞれ 80 文字の行を 60 行生成します。 プリンタがうまく動かなかった場合は、次の節、「 トラブルシューティング」をご覧ください。 プリンタ設定上級編 この節では、特殊な形式のファイルを印字するためのフィルタ、 ヘッダページ、ネットワーク越しのプリンタへの印字、そして、 プリンタ使用の制限や課金について説明しています。 フィルタ プリントフィルタ LPD では、ネットワークプロトコル、キュー、アクセス制御、 そして、印字のためのその他の側面について扱いますが、 実際の作業のほとんどは フィルタ よっておこなわれています。 フィルタは、プリンタと通信し、 プリンタのデバイス依存性や特殊な要求を扱うプログラムです。 簡単なプリンタ設定では、 プレインテキストのためのフィルタをインストールしました。 このプレインテキストフィルタは、 ほとんどのプリンタで機能する極めて単純なものでした (「 テキストフィルタのインストール」を参照)。 しかしながら、形式変換やプリンタ課金、特定のプリンタの癖、 など をうまく利用するためには、 フィルタがどのように機能するかという ことを理解しておくべきです。これらの側面を扱うためには、 最終的には、フィルタの責任であるからです。 そして、これは悪い情報ですが、ほとんどの場合において、 あなた自身が フィルタを供給する必要があるということです。また都合のよいことには、 たくさんのフィルタが一般的に利用できるということです。 もしフィルタがなかったとしても、 普通はフィルタを作るのは簡単です。 FreeBSD にも、プレインテキストを印字させることができる /usr/libexec/lpr/lpf というフィルタが 1 つ付いています (このフィルタはファイルに含まれるバックスペースやタブを扱います また、課金をすることもできますが、 できることはこれだけしかありません)。 いくつかのフィルタとフィルタの構成要素は FreeBSD Ports Collection にもあります。 この節で述べることは次の通りです。 フィルタはどのように機能しているか」では、 印字の過程におけ るフィルタの役割を概説します。 この節を読むことで、LPD がフィルタを使うときに、 見えないところで 何が 起こっているかが理解できるでしょう。このことを知っておくと、 プリンタそれぞれに様々なフィルタをインストールしたときに 遭遇するかもしれない問題を予期したり、 デバッグするときに役立つでしょう。 LPD では、すべてのプリンタからデフォルトで プレインテキストを印字できることを期待しています。このことは、 プレインテキストを直接印字できない PostScript (また は他の言語用の) プリンタでは問題を引き起こします。「 プレインテキストのジョブを PostScript プリンタで印字する」 で、 この問題を克服する方法について述べます。 PostScript プリンタをお持ちの方は、 この節をお読みになることをおすすめします。 PostScript は様々なプログラムのための有名な出 力形式です。ある人たちは (著者自身を含めて) PostScript のコードさえも直接書いてしまいます。しかし、PostScript プリンタは高価です。「非 PostScript プリンタで PostScript をシミュレートする」では、PostScript データを非 PostScript プリンタに受けつけさせ、 印字させるために、 どのようにしてプリンタ用のテキストフィルタをさらに変更すればよいのか、 ということについて述べます。PostScript プリンタを持っていない方は、 この節をお読みになることをおすすめします。 変換フィルタ」では、 図形や組版データといった特定のファイル形式を、 プリンタが理解できる形式へ変換する作業を自動的におこなわせる方法について述べます。 この節を読むと、troff のデータを印字するには lpr -t、または、TeX DVI を印字するには lpr -d、 ラスタイメージデータを印字するには lpr -v、 などといったようにユーザが入力することができるように プリンタの設定をおこなうことができます。 この節もお読みになることをお薦めします。 出力フィルタ」 では、あまり使われない LPD の機能のすべて、すなわち、 出力フィルタに関することが記述されています。ヘッダページ (「 ヘッダページ」参照) を印字させていない場合は、 多分、この節は飛ばしても構わないでしょう。 テキストフィルタ lpf」では、lpf についての説明が、ほぼ完全におこなわれています。これは FreeBSD に付属するラ インプリンタ (または、 ラインプリンタのように動作するレーザプリンタ) のための、 単純なテキストフィルタです。 プレインテキストを印字したことに対して課金をおこなう方法が 至急必要な場合、もしくは、バックスペース文字を印字しようと すると煙を発するプリンタを持っている場合は、絶対に lpf を検討するべきです。 フィルタはどのように機能しているか 既に言及したように、フィルタとは、プリンタにデータを送る際に、 デバイスに依存した部分を取り扱うために LPD によって起動される実行プログラムです。 LPD がジョブ中のファイルを印字しようとするとき、LPD はフィルタプログラムを起動します。このとき、 フィルタの標準入力を印字するファイルに、 標準出力をプリンタに、そして、標準エラー出力を エラーログファイル (/etc/printcap 内の lf 項目で指定されたファイル、または、 指定されていない場合は、デフォルトとして /dev/console) にセットします。 troff LPD が起動するフィルタと、その引数が何であるかは、 /etc/printcap ファイルの内容と、ジョブの起動時にユーザが指定した &man.lpr.1; コマンドの引数に依存しています。 例えば、ユーザが lpr -t と入力した場合は、 LPD は出力先のプリンタ用の tf 項目で指定されている troff 用のフィルタを起動させるでしょう。 ユーザがプレインテキストの印字を指示したときは、 if で指定されたフィルタが起動されるでしょう (このことはほとんどの場合にあてはまります。 詳細については、「 出力フィルタ」をご覧ください)。 /etc/printcap で指定可能なフィルタは次の3種類があります。 テキストフィルタ (LPD のドキュメントでは紛らわしいことに 入力フィルタと呼んでいますが) は一般のテキストの印字を扱います。これはデフォルトのフィルタと 考えてください。LPD では、すべてのプリンタに対して、 デフォルトでプレインテキストが印字できることを期待しています。 さらに、バックスペースやタブを正しく扱い、また、 他の特殊な文字が入力されてもプリンタに混乱を来さないように するのはテキストフィルタの仕事であると考えています。 プリンタの使用に対して課金をしなくてはならない環境にあ るときは、テキストフィルタが印字したページ数を数える作 業もしなくてはなりません。この作業は、通常、印字した行 数を数え、これをプリンタが 1 ページ当たりに印字できる行 数と比較することでおこなわれます。 テキストフィルタは、次のような引数を付けて起動されます。 filter-name -c -wwidth -llength -iindent -n login -h host acct-file ここで、 lpr -l によってジョブが入力されたときに与えられます。 width /etc/printcap で指定された pw (page width) 項目の値が与えられます。デフォルトは、 132 です。 length pl (page length) 項目で指定された値が与えられます。 デフォルトは 66 です。 indent lpr -i によって与えられた字下げの量で、 デフォルトは 0 です。 login ファイルを印字したユーザのアカウント名が 与えられます。 host ジョブが入力されたホスト名が 与えられます。 acct-file af 項目で指定されている課金データファイル の名前が与えられます。 プリンタ フィルタ 変換フィルタは、 特定のファイル形式をプリンタ が紙に印字できるようなものに変換します。例えば、 プリンタで ditroff 組版データを直接印字することはできません。 しかし、ditroff データをプリンタが消化し、 印字することができる形式へ変換するために、ditroff ファイル用フィルタをインストールすることができます。 「 変換フィルタ」 で、これらに関するすべてについて説明します。 プリンタの課金をする必要がある場合は、 変換フィルタでも印字ページを数える作業が必要となります。 変換フィルタは次の引数をとって起動されます。 filter-name -xpixel-width -ypixel-height -n login -h host acct-file ここで、pixel-width は、 px 項目で指定された値 (デフォルトは 0)、 pixel-height は、 py 項目で指定された値 (デフォルトは 0) です。 出力フィルタは、 テキストフィルタが指定されて おらず、かつ、 ヘッダページの出力が許可されている場合にのみ使われます。 「 出力フィルタ」で、これらのことについて説明します。 アウトプットフィルタに対する引数は次の 2 つだけです。 filter-name -wwidth -llength ここで、 は、 テキストフィルタの場合と同じです。 フィルタは、次に示すの終了状態をもってプログラムを exit するべきです。 exit 0 フィルタがファイルを正常に印字した場合。 exit 1 フィルタはファイルの印字に失敗したが、LPD に再度ファイルの印字を試みて欲しい場合。 この終了状態で終了した場合、LPD はフィルタを再スタートします。 exit 2 フィルタはファイルの印字に失敗し、かつ、LPD に再出力を試みて欲しくない場合。この場合、LPD はそのファイルを放棄します。 FreeBSD に付属するテキストフィルタ /usr/libexec/lpr/lpf は、FORM FEED 文字が送られたときやプリンタ使用に対する課金をどのようにするかを決定するために、 ページ幅やページ長の引数を利用します。また、 課金用のエントリを作成するため、ログイン名、ホスト名、 課金ファイル名の引数を利用します。 もし、フィルタの購入を検討しているならば、LPD と互換性があるかどうかを確認してください。もしそうならば、 上述の引数リストをサポートしていなければなりません。 一般向けの使用のためにフィルタを作成する計画をしている場合は、 同じ引数リストと終了コードをサポートしてください。 プレインテキストのジョブを PostScript プリンタで印字する プリントジョブ コンピュータと PostScript (または、他の言語に対応した) プリンタをあなたしか使用しない場合は、プリンタにプレ インテキストを絶対に送らない、そして、 プリンタにプレインテキストを送りたがっている 様々なプログラムの機能を決して使わないことにしてください。そうすれば、 この節に書かれたことに心を煩わせる必要はまったくなくなります。 しかし、PostScript とプレインテキストの両方のジョブをプリンタへ送りたいと思っている場合は、 プリンタ設定についての要求が増えるでしょう。 両者をプリンタへ送信するためには、 到着したジョブがプレインテキストであるか PostScript であるかを検出するテキストフィルタが必要です。 PostScript のジョブはすべて %! で始まらなければならないことになっています (他のプリンタ言語に関しては、 プリンタのドキュメントをご覧ください)。 ジョブの最初の 2 文字がこれならば、PostScript であることが分かります。 したがって、 ジョブのそれ以降の部分をプリンタに直接送ることができます (訳注: PostScript では、% 以降はコメントとして扱われるので、最初の %! の行を読み捨てても問題はない)。 最初の2文字が %! でない場合は、 フィルタはテキストを PostScript に変換し、 その結果を使って印字をおこないます。 この作業をどうやってやればよいのでしょうか。 プリンタ シリアル シリアルポートにプリンタを接続した場合は、 lprps をインストールすることをお勧めします。 lprps は PostScript 用のフィルタで、 プリンタとの双方向通信をおこないます。 このフィルタでは、プリンタからの冗長な情報を得ることで、 プリンタの状況を示すファイルが更新されていきます。 したがって、ユーザや管理者は (トナー残量少紙詰まりといった) プリンタの状況を正確に知ることができます。しかし、 もっと重要なことは、psif と呼ばれるプログラムが含まれているということです。 このプログラムは、 入力されたジョブがプレインテキストかどうかを検出し、 これを PostScript に変換するために、textps (lprps に付属する別のプログラム) を呼び出します。そして、このジョブをプリンタに送るために、 lprps が使われます。 lprps は FreeBSD Ports Collection に含まれています (Ports Collection を参照してください)。 もちろん、自分自身でプログラムを取ってきて、コンパイルし、 インストールすることもできます。lprps をインストールした後は、lprps の一部である psif プログラムのパス名を指定するだけです。Ports Collection から lprps をインストールしたときは、 /etc/printcap の中のシリアル接続した PostScript プリンタのエントリに対して、次を使ってください。 :if=/usr/local/libexec/psif: LPD にプリンタをリード・ライトモードでオープンさせるために、 rw 項目も指定すべきです。 パラレルポートに接続したプリンタの場合 (すなわち、 lprps が 必要としているプリンタとの双方向通信ができない)、 テキストフィルタとして次のシェルスクリプトを使うことができます。 #!/bin/sh # # psif - Print PostScript or plain text on a PostScript printer # Script version; NOT the version that comes with lprps # Installed in /usr/local/libexec/psif # IFS="" read -r first_line first_two_chars=`expr "$first_line" : '\(..\)'` if [ "$first_two_chars" = "%!" ]; then # # PostScript job, print it. # echo "$first_line" && cat && printf "\004" && exit 0 exit 2 else # # Plain text, convert it, then print it. # ( echo "$first_line"; cat ) | /usr/local/bin/textps && printf "\004" && exit 0 exit 2 fi 上記のスクリプトにおいて、textps はプレインテキストから PostScript へ変換するために別にインストールしたプログラムです。 テキストから PostScript へ変換するのには、お好みのどんなプロ グラムでも使うことができます。FreeBSD Ports Collection (Ports Collection を参照してください) には、a2ps と呼ばれるテキストから PostScript に変換するプログラムが入っています。 非 PostScript プリンタで PostScript をシミュレートする PostScript エミュレーション Ghostscript PostScript は質の高い組版と印字をおこなうための事実 上の標準です。しかしながら、PostScript は、 高価な標準です。ありがたいことに、 Alladin Enterprises から Ghostscript と呼ばれる、 PostScript 互換の動作をするフリーのプログラムが出されていて、 FreeBSD で動きます。 Ghostscript はほとんどの PostScript ファイルを読むことができ、 これらの各ページをたくさんのブランドの非 PostScript プリンタを含む 様々なデバイス用に変換することができます。 Ghostscript をインストールし、 プリンタ用の特別なテキストフィルタを使うことによって、 非 PostScript プリンタをあたかも本物の PostScript プリンタであるかのように動作させることができます。 Ghostscript は FreeBSD Ports Collection に入っていますので、 そこからインストールすることができます。また、 自分でソースプログラムを持ってきて、コンパイルし、インストー ルすることもできます。この作業はとても簡単にできます。 PostScript プリンタをシミュレートさせる場合は、 テキストフィルタに PostScript ファイルを印字しようとしているかどうかを検出させます。 PostScript ファイルでない場合は、 フィルタはそのファイルを直接プリンタに送ります (訳注: テキストファイルを直接印字できない場合は、もちろん、 変換フィルタを通す必要があります)。PostScript の場合は、 まず、Ghostscript を使い、 ファイルをそのプリンタが理解できる形式へ変換します。 次の例のスクリプトは、Hewlett Packard DeskJet 500 プリンタ用 のテキストフィルタです。 他のプリンタで用いるときは、 引数を gs (Ghostscript) コマンドに変えてください (gs -h と入力すると、現在インストールされている Ghostscript でサポートされているデバイスのリストが得られます)。 #!/bin/sh # # ifhp - Print Ghostscript-simulated PostScript on a DeskJet 500 # Installed in /usr/local/libexec/hpif # # Treat LF as CR+LF: # printf "\033&k2G" || exit 2 # # Read first two characters of the file # IFS="" read -r first_line first_two_chars=`expr "$first_line" : '\(..\)'` if [ "$first_two_chars" = "%!" ]; then # # It is PostScript; use Ghostscript to scan-convert and print it. # # Note that PostScript files are actually interpreted programs, # and those programs are allowed to write to stdout, which will # mess up the printed output. So, we redirect stdout to stderr # and then make descriptor 3 go to stdout, and have Ghostscript # write its output there. Exercise for the clever reader: # capture the stderr output from Ghostscript and mail it back to # the user originating the print job. # exec 3>&1 1>&2 /usr/local/bin/gs -dSAFER -dNOPAUSE -q -sDEVICE=djet500 \ -sOutputFile=/dev/fd/3 - && exit 0 # /usr/local/bin/gs -dSAFER -dNOPAUSE -q -sDEVICE=djet500 -sOutputFile=- - \ && exit 0 else # # Plain text or HP/PCL, so just print it directly; print a form # at the end to eject the last page. # echo "$first_line" && cat && printf "\033&l0H" && exit 0 fi exit 2 最後に、if 項目を通して、LPD にこのフィルタを教えてやる必要があります。 :if=/usr/local/libexec/hpif: これでおしまいです。lpr plain.text とか lpr whatever.ps と入力してみましょう。どちらも正常に印字されるはずです。 訳注 日本語を印字する場合は、 日本語対応の Ghostscript が必要です。日本語対応版の Ghostscript も Ports Collection に入っています。 変換フィルタ プリンタ設定導入編」 に書かれた簡単な設定が完了したら、最初に、 やってみたいと思うことは、多分 (プレイン ASCII テキストに加えて) 好みのファイル形式のための変換フィルタをインストールすることでしょう。 なぜ、変換フィルタをインストールするのか? TeX dvi ファイルの印刷 変換フィルタによって、 様々な種類のファイルを印字することが簡単になります。例えば、TeX 組版システムでたくさんの仕事をしたと仮定しましょう。 そして、PostScript プリンタが接続 されているとします。 すると、TeX で DVI ファイルを作成する度に、DVI ファイルを印字するために、 これを PostScript ファイルに変換する必要があります。 このコマンドは次のようになるでしょう。 &prompt.user; dvips seaweed-analysis.dvi &prompt.user; lpr seaweed-analysis.ps DVI ファイル用の変換フィルタがインストールしてあると、 LPD に 変換を肩代わりさせることで毎回毎回 おこなわなければならなかった面倒な変換作業を省くことができます。 つまり、DVI を生成したら、 次のような 1 回のコマンド入力だけで、これが印字されます。 &prompt.user; lpr -d seaweed-analysis.dvi LPD に DVI ファイルの変換をさせるためには、 オプション を指定します。 変換オプションのリストは「 整形と変換に関するオプション」 に載せてあります。 変化のオプションのそれぞれをプリンタに サポートさせるためには、 変換フィルタをインストールし、 そのパス名を /etc/printcap の中で指定しなくてはなりません。変換フィルタは、 プレインテキストを印字する代わりに、フィルタはファイルを プリンタが理解できる形式に変換するところを除けば、 「プリンタの簡単な設定」で説明したテキストファイル (「 テキストフィルタのインストール」 を見て下さい) に似ています。 どの変換フィルタをインストールすべきか? 使いたいと思う変換フィルタをインストールすべきです。 DVI のデータを頻繁に印字するならば、DVI 変換フィルタ をインストールするのが適切でしょう。印字しなくてはなら ない troff を大量に抱えている場合は、多分、 troff フィルタが欲しくなるはずです。 次の表は、LPD で動作するフィルタと、 /etc/printcap ファイルでのエントリする項目、そして、 lpr コマンドで呼び出す方法をまとめたものです。 ファイル形式 /etc/printcap項目 lpr オプション cifplot cf DVI df plot gf ditroff nf FORTRAN text rf troff tf raster vf プレインテキスト if なし、、または 先の例のように、lpr -d を使うためには、出力先のプリンタの /etc/printcap 内のエントリで、 df 項目が必要であることが分かります。 fortran 反論はあるかも知れませんが、FORTRAN テキストや plot のような形式は、多分、廃れてていくでしょう。 あなたのサイトで、自前のフィルタをインストールするだけで、 プリントオプションのいくつか、あるいは、 全部に新しい意味を与えることができます。例えば、 - Prinerleaf ファイル (Interleaf + Printerleaf ファイル (Interleaf デスクトップパブリッシングプログラムによるファイル) を直接印字したいとします。 そして、Printerleaf 用の変換フィルタを gf 項目で 指定したパスにインストールすれば、lpr -g の意味は Printerleaf ファイルを印字する 意味だとユーザに教えることができます。 変換フィルタのインストール 変換フィルタは FreeBSD の基本システムのインストールとは別にインストールするプログラムなので、 変換フィルタは、多分、 /usr/local ディレクトリの下に置くべきです。 フィルタは LPD だけが実行する特別なプログラム、 すなわち、一般ユーザが実行する必要すらないプログラムなので、 /usr/local/libexec ディレクトリに置くのが普通です。 変換フィルタを使用可能にするためには、 /etc/printcap の目的のプリンタの適切な項目に フィルタがあるパス名を指定します。 DVI 変換フィルタをプリンタ bamboo のエントリに加えてみましょう。プリンタ bamboodf 項目を新たに加えた /etc/printcap ファイルの例を以下に再掲します。 # # /etc/printcap for host rose - added df filter for bamboo # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0:\ :if=/usr/local/libexec/if-simple: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo:\ :lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:\ :if=/usr/local/libexec/psif:\ :df=/usr/local/libexec/psdf: DVI フィルタは /usr/local/libexec/psdf という 名前のシェルスクリプトです。 このスクリプトは次のようになっています。 #!bin/sh # # psdf - DVI to PostScript printer filter # Installed in /usr/local/libexec/psdf # # Invoked by lpd when user runs lpr -d # exec /usr/local/bin/dvips -f | /usr/local/libexec/lprps "$@" このスクリプトでは、dvips をフィルタモード (引数 ) で、 標準入力上で起動しています。標準入力は印字するジョブです。 それから、PostScript プリンタ用フィルタ lprps (これについては「 プレインテキストのジョブを PostScript プリンタで印字する」 を参照してください) を LPD に与えられた引数を付けて起動します。 lprps はこれらの引数を印字されたページ分の課金をおこなうために使われます。 変換フィルタのその他の例 変換フィルタのインストールには決まったステップがないので、 その代わりに、例をもっと挙げることにします。 これを自分でフィルタを作る際のガイドにしてください。 適当な例があったら、それをそのまま使ってください。 次のスクリプト例は、Hewlett Packard LaserJet III-Si のための、raster (ええと・・実は、GIF ファイル) 用の変換フィルタです。 #!/bin/sh # # hpvf - Convert GIF files into HP/PCL, then print # Installed in /usr/local/libexec/hpvf PATH=/usr/X11R6/bin:$PATH; export PATH giftopnm | ppmtopgm | pgmtopbm | pbmtolj -resolution 300 \ && exit 0 \ || exit 2 ここでは、GIF ファイルから PNM (portable anymap) 形式に変換し、次に PGM (portable graymap) 形式に変換してから、 LaserJet/PCL-互換データに変換しています。 上記のフィルタを使うプリンタのためのエントリを付け加えた /etc/printcap ファイルは次のようになります。 # # /etc/printcap for host orchid # teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ :lp=/dev/lpt0:sh:sd=/var/spool/lpd/teak:mx#0:\ :if=/usr/local/libexec/hpif:\ :vf=/usr/local/libexec/hpvf: 次のスクリプトは、PostScript プリンタ bamboo のための groff 組版システムの troff データのための変換フィルタです。 #!/bin/sh # # pstf - Convert groff's troff data into PS, then print. # Installed in /usr/local/libexec/pstf # exec grops | /usr/local/libexec/lprps "$@" 上記のスクリプトではプリンタとの通信をおこなうため、 lprps をまた利用しています。 プリンタがパラレルポートに接続されている場合は、代わりに、 次のスクリプトを使うかもしれません。 #!/bin/sh # # pstf - Convert groff's troff data into PS, then print. # Installed in /usr/local/libexec/pstf # exec grops これで完成しました。次に、フィルタを使用可能にするため に /etc/printcap に加える必要があるエントリを示します。 :tf=/usr/local/libexec/pstf: 次の例をみたら、FORTRAN のベテランは赤面するかもしれません。 この FORTRAN テキストフィルタは、 プレインテキストを直接印字できるすべてのプリンタで利用できます。 このフィルタをプリンタ teak にインストールすることにしましょう。 #!/bin/sh # # hprf - FORTRAN text filter for LaserJet 3si: # Installed in /usr/local/libexec/hprf # printf "\033&k2G" && fpr && printf "\033&l0H" && exit 0 exit 2 そして、このフィルタを使用可能にするため、以下の行を /etc/printcap のプリンタ teak のエントリに加えます。 :rf=/usr/local/libexec/hprf: これが最後の、そして、若干複雑な例です。前に紹介した LaserJet プリンタ teak に、DVI フィルタを加える ことにしましょう。最初に、 簡単な部分をおこないます。すなわち、DVI フィルタの位置を /etc/printcap に書き加えます。 :df=/usr/local/libexec/hpdf: さて、難しい部分であるフィルタの作成をおこないます。 このために、DVI から LaserJet/PCL への変換プログラムが必要です。FreeBSD の Ports Collection (Ports Collection を参照してください) には、それがあります。 dvi2xx というのがそのパッケージの名前です。 これをインストールすると、必要なプログラム dvilj2p が使えます。このプログラムは DVI を LaserJet IIp、LaserJet III、そして LaserJet 2000 の互換コードへ変換してくれます。 dvilj2p はフィルタ hpdf を極めて複雑にしています。 なぜなら、dvilj2p は標準入力からデータを読み込むことができないからです。 このプログラムを働かせるためには、ファイル名が必要です。 もっと悪いことに、ファイル名は .dvi で終わっている必要があり、標準入力の代わりに、 /dev/fd/0 を使うのは問題があります。 この問題は、(.dvi で終わる) 一時的なファイル名から/dev/fd/0 に (シンボリックな) リンクを張る ことで回避することができます。これで、 dvilj2p に強制的に標準入力からデータを読み込ませることができます。 もう1つの問題は、一時的なリンクを張るために /tmp ディレクトリを使うことができないという事実です。 シンボリックリンクはユーザ、グループが bin であるユーザに所有されています。フィルタはユーザ daemon として起動します。そして、 /tmp ディレクトリはスティッキービットが立っています。 フィルタはリンクを作ることができます。しかし、 リンクは別のユーザに所有されているため、 作業が終了したとき、このリンクを削除することができません。 その代わりに、シンボリックリンクは現在の作業ディレクトリ、 すなわち、スプーリングディレクトリ (/etc/printcapsd 項目で指定する) に作ることにします。 フィルタが作業するにはここの場所は完璧な場所で、なぜなら、 特に、スプーリングディレクトリのディ スクの空き容量は (ときどき) /tmp ディレクトリよりもたくさんあるからです。 以下に示すのが最後のフィルタです。 #!/bin/sh # # hpdf - Print DVI data on HP/PCL printer # Installed in /usr/local/libexec/hpdf PATH=/usr/local/bin:$PATH; export PATH # # Define a function to clean up our temporary files. These exist # in the current directory, which will be the spooling directory # for the printer. # cleanup() { rm -f hpdf$$.dvi } # # Define a function to handle fatal errors: print the given message # and exit 2. Exiting with 2 tells LPD to do not try to reprint the # job. # fatal() { echo "$@" 1>&2 cleanup exit 2 } # # If user removes the job, LPD will send SIGINT, so trap SIGINT # (and a few other signals) to clean up after ourselves. # trap cleanup 1 2 15 # # Make sure we are not colliding with any existing files. # cleanup # # Link the DVI input file to standard input (the file to print). # ln -s /dev/fd/0 hpdf$$.dvi || fatal "Cannot symlink /dev/fd/0" # # Make LF = CR+LF # printf "\033&k2G" || fatal "Cannot initialize printer" # # Convert and print. Return value from dvilj2p does not seem to be # reliable, so we ignore it. # dvilj2p -M1 -q -e- dfhp$$.dvi # # Clean up and exit # cleanup exit 0 自動変換: その他の変換フィルタ ここまでに述べてきたフィルタによって、 印字環境の能率が上がったことと思います。しかし、 これはどのフィルタを使うかを (&man.lpr.1; のコマンドライン上で) ユーザが指定しなくてはならないという代価を支払って実現されています。 コンピュータの事情にあまり詳しくないユーザにとって、 フィルタのオプションを指定させられるということは いらいらさせられるものになるでしょう。更に悪いことに、 間違ったフィルタオプションを指定されると、 間違った形式のファイルがそのフィルタに適用されることになり、 その結果、何百枚もの紙を吐き出すことになるかもしれません。 そのような結果になるならば、 変換フィルタをインストールするよりもむしろ、 テキストフィルタ (これがデフォルトフィルタなので) に印字するよう要求されたファイルの形式を検出させ、自動的に、 適切な変換フィルタを起動するようにしたいと思うかもしれません。 ここでは file コマンドのようなツールを役立たせることができます。 もちろん、いくつかの ファイル形式の違いを見分けることは難しいことでしょう。 そして、もちろん、それらのファイルに対しては、 変換フィルタを提供するだけで済ますこともできるのです。 apsfilter プリンタ フィルタ apsfilter FreeBSD Ports Collection には、apsfilter と呼ばれる自動変換をおこなうテキストフィルタがあります。 このフィルタは プレインテキスト、PostScript、DVI ファイルを検出し、適当な変換をおこなった後、 データを印字することができます。 出力フィルタ LPD スプーリングシステムでは、 ここまでにまだ取り上げていないフィルタ形式、 出力フィルタをサポートしています。出力フィルタは、 テキストフィルタのように、 プレインテキストのみを印字するために意図されたものですが、 非常に簡単化されています。テキストフィルタを用いずに、 出力フィルタを使っている場合は、次のようになります。 LPD はジョブ中の各ファイルに一度ではなく、 ジョブ全体に対して一度だけ出力フィルタを起動します。 LPD は出力フィルタに対し、 ジョブ中のファイルの先頭や末尾を特定するための対策を 一切おこなっていません。 LPD はユーザのログイン名やホスト名をフィルタに渡しません。 したがって、課金の処理をおこなうことは考えていません。 実際、出力フィルタには、以下2つの引数しか与えられません。 filter-name -wwidth -llength ここで、width は対象となるプリンタの pw 項目、 lengthpl 項目に指定された数です。 出力フィルタの簡便さに誘惑されてはいけません。もし、 ジョブ中のそれぞれのファイルに別のページ番号を付加しようとしても、 出力フィルタはうまく動作しないでしょう。 そのような動作を期待しているならば、 (入力フィルタとしても知られている) テキストフィルタを使ってください。 詳しくは、「 テキストフィルタのインストール」をご覧ください。 さらに、出力フィルタは、実のところ、 もっと複雑になっています。まず、 特殊なフラグ文字を検出するために、 フィルタに送られてくるバイトストリームを検査する必要があります。 また、LPD に代わって、 自分自身にシグナルを送らなければなりません。 しかしながら、ヘッダページの印字をおこないたい場合、 また、 エスケープシーケンスやヘッダページを印字できるようにする その他の初期化文字列を送信する必要がある場合、 出力ファイルが必要です。 1台のプリンタに対し、LPD では出力フィルタとテキスト、 または、他のフィルタを両方使うことができます。 このような場合、LPD はヘッダページ (「 ヘッダページ」 を参照してください) だけを印字させるために、出力フィルタを起動させます。 それから LPD では、アウトプットフィルタに 2 バイトの文字 (ASCII 031 の次に ASCII 001) を送ることで、 出力フィルタが自力で停止することを期待しています。 2 バイト (031, 001) が出力フィルタに送られたとき、 出力フィルタは自分自身にシグナル SIGSTOP を送ることによって停止するべきです。 LPD がその他のフィルタの起動を完了したとき、 LPD は出力フィルタにシグナル SIGCONT を送ることで、出力フィルタを再起動させます。 出力フィルタがあり、 テキストフィルタがない場合、LPD はプレインテキストのジョブをおこなう際に、 出力フィルタを使います。前述したように、出力フィルタでは、 ジョブ中の各ファイルの並びの間に FROM FEED 文字や紙を排出する他の文字を入れることはしません。 この動作は多分、 あなたが求めているものとは異なっているでしょう。 ほとんどすべての場合において、 テキストフィルタが必要とされるはずです。 プログラム lpf は、 テキストフィルタの項で既に紹介しましたが、 出力フィルタとしても動作させることができます。もし、 簡便で極悪な出力フィルタが必要で、かつ、 バイトストリームを検査したりシグナルを送るコードを書きたくないときには、 lpf をお試しください。 あるいは、プリントが要求する初期化コードを送るために、 lpf をシェルスクリプトに包んで使うこともできます。 テキストフィルタ <command>lpf</command> プログラム /usr/libexec/lpr/lpf は、 FreeBSD の バイナリ配布に付属しているテキストフィルタ (入力フィルタ) で、出力を字下げしたり (lpr -i でジョブが入力さ れたとき)、 文字を未処理のままプリンタに送ったり (lpr -l でジョブが入力されたとき)、 ジョブ中のバックスペースやタブの印字位置を調節したり、 印字したページに対して課金したりすることができます。また、 このフィルタは出力フィルタとしても動作させることができます。 lpf は多くの印字環境において使用することに適しています。 このフィルタには、プリンタに初期化文字列を送る機能はありませんが、 必要とされる初期化をおこない、それから lpf を実行させるためのシェルスクリプトを作成するのはたやすいことです。 ページ課金 課金 プリンタ lpf に対して、 印字ページへの課金を正確におこなわせるためには、 /etc/printcap ファイルの中の pwpl の項目に正確な値を入れておく必要があります。これらの値は、 どのくらいの量のテキストがページにフィットするか、また、 ユーザのジョブが何ページあるのかを調べるために使われます。 プリンタの課金についての詳しい情報については、「 プリンタの利用に対する課金」をご覧ください。 ヘッダページ あなたが管理するシステムのユーザが たくさんおり、 ユーザ全員が様々なプリンタを使用する場合、多分、 必要悪であるヘッダページを 印字させることを検討したいと思うかもしれません。 バナーページ ヘッダページ ヘッダページ ヘッダページは、バナー とか バーストページ としても知られていますが、 出力されたジョブが誰によるものなのかを特定させる働きがあります。 印字結果の山の中において、 ユーザのジョブによって印字された本物のドキュメント部分よりも際立たせるために、 ヘッダページは、通常、多分、縁が装飾されている大きな太文字で印字されます。 ヘッダページにより、 ユーザは自分が出したジョブがどこにあるのかをすばやく見つけることができます。 ヘッダページの欠点は、明らかに、すべてのジョブに対して、 紙が 1 枚余分に印字されるということです。 この紙の有効期間は短く、2 〜 3 分も続きません。最終的に、 これらの紙は再利用紙入れの中かくずの山に入れられることでしょう (ヘッダページはジョブ中の各ファイル毎に印字されるのではなく、 ジョブ毎に印字されるということに注意してください。したがって、 紙の消費はそれほどひどくはないかもしれません)。 もし、 プリンタがプレインテキストを直接印字できるならば、LPD システムは印字物に対して自動的にヘッダページを付けることができます。 PostScript プリンタを使っている場合は、 ヘッダページを生成する外部プログラムが必要になります。これについては、 「PostScript プリンタでのヘッダページ」をご覧ください。 ヘッダページの印字を許可する プリンタ設定導入編 」 では、/etc/printcap ファイルの sh (``suppress header'' : ヘッダを供給しない という意味) を指定して、 ヘッダページの印字を止めていました。 プリンタでのヘッダページの印字を許可するには、 sh 項目を取り除くだけよい訳です。 とても簡単そうに見えるけど、本当かな? それは本当です。 プリンタに初期化文字列を送るための 出力フィルタを用意しなくてはならないかもしれません。次に、Hewlett Packard PCL 互換プリンタの例を挙げます。 #!/bin/sh # # hpof - Output filter for Hewlett Packard PCL-compatible printers # Installed in /usr/local/libexec/hpof printf "\033&k2G" || exit 2 exec /usr/libexec/lpr/lpf of 項目に出力フィルタのパス名を指定してください。 詳細については、「出力フィルタ」 をご覧ください。 次に、以前紹介したプリンタ teak のための /etc/printcap ファイルの例を示します。ここでは、 ヘッダページの印字を許可し、上記の出力フィルタを追加しました。 # # /etc/printcap for host orchid # teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\ :if=/usr/local/libexec/hpif:\ :vf=/usr/local/libexec/hpvf:\ :of=/usr/local/libexec/hpof: さて、ユーザが teak からジョブを印字させたとき、 それぞれのジョブ毎にヘッダページが印字されます。 もし、ユーザが印字物を探すのに時間を費やしたいと思うなら、 lpr -h によってジョブを入力することで、 ヘッダページの印字を止めることができます。 これ以外の &man.lpr.1; のオプションについては、 「 ヘッダページ用オプション」 をご覧ください。 LPD では、ヘッダページの最後に、FORM FEED 文字が印 字されます。プリンタに紙排出をさせるために、別な文字、 もしくは、別な文字列が利用されている場合は、 /etc/printcap 中の ff 項目で指定することができます。 ヘッダページを制御する ヘッダページの印字が許可されていると、LPD は 長いヘッ ダを作ります。これには、 紙全面に大きな文字でユーザ名、ホスト名、 ジョブ名が書かれています。次に、このヘッダページの例を示 します (kelly が ジョブ名 outline を rose というホストから印字 された場合)。 k ll ll k l l k l l k k eeee l l y y k k e e l l y y k k eeeeee l l y y kk k e l l y y k k e e l l y yy k k eeee lll lll yyy y y y y yyyy ll t l i t l oooo u u ttttt l ii n nnn eeee o o u u t l i nn n e e o o u u t l i n n eeeeee o o u u t l i n n e o o u uu t t l i n n e e oooo uuu u tt lll iii n n eeee r rrr oooo ssss eeee rr r o o s s e e r o o ss eeeeee r o o ss e r o o s s e e r oooo ssss eeee Job: outline Date: Sun Sep 17 11:04:58 1995 LPD はこのテキストの終わりに FROM FEED 文字を加えます ので、ジョブは新しいページから開始されます (ただし、 /etc/printcap で出力先のプリンタのエントリに sf (suppress form feeds) が指定されているときはこ の限りではありません)。 お望みならば、LPD に短いヘッダページを出力させることもできます。 この場合は、 /etc/printcap ファイルの中で sb (short banner) を指定してください。 ヘッダページは次のようになります。 rose:kelly Job: outline Date: Sun Sep 17 11:07:51 1995 デフォルトでは、LPD はヘッダページを最初に印字し、 次にジョブの印字をおこないます。この順番を逆にするときは、 /etc/printcaphl (header last) を指定してください。 ヘッダページに対する課金 LPD に備わっているヘッダページ出力機能を使うと、 入力されたジョブに対して課金をおこなうことができても、 ヘッダページは無料で提供しなくてはならない、 という特有のやり方を強要されます。 なぜでしょうか。 出力フィルタは単なる外部プログラムなので、 課金をするための制御をおこなうとすれば、 それはヘッダページを印字するときですが、出力フィルタには、 ユーザ名とホスト名 の情報や課金情報を格納するファイルがどれな のかということが知らされません。それゆえ、出力ファイルには、 誰にプリンタ利用の課金をおこなえばよいのかが分からないのです。 テキストフィルタやその他の変換フィルタ (これらのフィルタはユーザやホストの情報が知らされます) が出力ページの枚数に 1ページ分水増しする だけでは十分ではありません。 なぜなら、ユーザは lpr -h に よってヘッダページの出力を止めることができるからです。 やみくもに 1 ページを水増しすると、 印字されてもいないヘッダページに対する 料金をとることになります。基本的に、lpr -h は環境に優しい心を持つユーザに好まれるオプションですが、 これを使うように奨励することもできません。 各々のフィルタに独自のヘッダページを生成させる (その結果、ヘッダページに課金することができる) という方法でも十分であるとはいえません。 この場合、LPD はフィルタに の情報を送りませんので、lpr -h によってヘッダページを印字しないオプションを選択したとしても、 依然としてヘッダページは印字され、 その分の課金がおこなわれてしまいます。 では、どのような選択肢があるのでしょうか。 ヘッダページへの課金に関しては、 次のことができます。 LPD のやり方を受け入れ、 ヘッダページは無料とする。 LPRng などの LPD の代替品をインストールする。 LPD と入れ替えが可能な他のスプーリングソフトウェアに関しては、 標準スプーラの代替品をご覧ください。 スマートな 出力フィルタを作成する。通常、 出力フィルタはプリンタを初期化するか、 単純な文字列変換をする程度の働きしかしません。 (テキスト (入力) フィルタがない場合) 出力フィルタはヘッダページとプレインテキストの印字をおこなうのに適しています。 プレインテキストを印字するためのテキストフィルタがない場合、 LPD はヘッダページを印字するためだけの目的で出力フィルタを起動します。 そして、LPD が生成するヘッダページのテキストを解析することにより、 出力フィルタはヘッダページに課金するために必要なユーザ名と ホスト名を取得することができます。この方式の唯一の問題点は、 出力フィルタは課金情報を格納するデータファイルの名前を知ることが できないということです (af 項目で指定されたファイル名は 出力ファイルに渡されません)。しかし、既知の 名前の課金データファイルを使うのならば、 その名前を出力フィルタのプログラム中に埋め込むことができます。 解析の手順を簡単にするためには、 /etc/printcapsh 項目 (短いヘッダを指定) を使うとよいでしょう。 そしてまた、 ここまでの方法は少なからぬトラブルを生じさせるかもしれません。 そうなれば、もちろんユーザはヘッダページを無料で 提供してくれる気前のよいシステム管理者に感謝することでしょう。 PostScript プリンタでのヘッダページ これまでに述べたように、LPD ではプレインテキストのヘッダページを たくさんのプリンタに合うように生成することができます。 残念ながら、PostScript プリンタは、 プレインテキストを直接印字することができません。ですから、 LPD のヘッダページ機能はまったく役に立たない、 あるいはほとんどの場合で役に立ちません。 ヘッダページを出力するための自明な方法の1つに、 すべての変換フィルタとテキストフィルタにヘッダページを生成させる方法があります。 フィルタは、 適切なヘッダページを生成するために、 ユーザ名とホスト名の引数を使うべきです。この方法の欠点は、いつでも、 lpr -h によってジョブが入力された場合でさえも、 ヘッダページが印字されるということです。 この方法で試してみましょう。次のスクリプトは、3 つの引数 (ユーザ のログイン名、ホスト名、ジョブ名) をとり、簡単な PostScript 用 のヘッダページを生成します。 #!/bin/sh # # make-ps-header - make a PostScript header page on stdout # Installed in /usr/local/libexec/make-ps-header # # # These are PostScript units (72 to the inch). Modify for A4 or # whatever size paper you are using: # page_width=612 page_height=792 border=72 # # Check arguments # if [ $# -ne 3 ]; then echo "Usage: `basename $0` <user> <host> <job>" 1>&2 exit 1 fi # # Save these, mostly for readability in the PostScript, below. # user=$1 host=$2 job=$3 date=`date` # # Send the PostScript code to stdout. # exec cat <<EOF %!PS % % Make sure we do not interfere with user's job that will follow % save % % Make a thick, unpleasant border around the edge of the paper. % $border $border moveto $page_width $border 2 mul sub 0 rlineto 0 $page_height $border 2 mul sub rlineto currentscreen 3 -1 roll pop 100 3 1 roll setscreen $border 2 mul $page_width sub 0 rlineto closepath 0.8 setgray 10 setlinewidth stroke 0 setgray % % Display user's login name, nice and large and prominent % /Helvetica-Bold findfont 64 scalefont setfont $page_width ($user) stringwidth pop sub 2 div $page_height 200 sub moveto ($user) show % % Now show the boring particulars % /Helvetica findfont 14 scalefont setfont /y 200 def [ (Job:) (Host:) (Date:) ] { 200 y moveto show /y y 18 sub def } forall /Helvetica-Bold findfont 14 scalefont setfont /y 200 def [ ($job) ($host) ($date) ] { 270 y moveto show /y y 18 sub def } forall % % That is it % restore showpage EOF そして、変換フィルタやテキストフィルタがそれぞれ、 最初にこのスクリプトを起動することで、 ヘッダページが出力され、それから、 ユーザのジョブの印字をおこないます。次に、 このドキュメントの始めのほうで紹介した DVI 変換フィルタを、 ヘッダページを印字するように変更したものを示します。 #!/bin/sh # # psdf - DVI to PostScript printer filter # Installed in /usr/local/libexec/psdf # # Invoked by lpd when user runs lpr -d # orig_args="$@" fail() { echo "$@" 1>&2 exit 2 } while getopts "x:y:n:h:" option; do case $option in x|y) ;; # Ignore n) login=$OPTARG ;; h) host=$OPTARG ;; *) echo "LPD started `basename $0` wrong." 1>&2 exit 2 ;; esac done [ "$login" ] || fail "No login name" [ "$host" ] || fail "No host name" ( /usr/local/libexec/make-ps-header $login $host "DVI File" /usr/local/bin/dvips -f ) | eval /usr/local/libexec/lprps $orig_args このフィルタがユーザ名やホスト名を決定するために 引数リストをどのように解析しなくてはならないかという点に注意してください。 この解析方法は他の変換フィルタに対しても同様です。 しかしながら、テキストフィルタについては、 引数の設定が少し異なっています (これについては、「 フィルタはどのように機能しているか」 をご覧ください)。 前述の通り、上記の手法は、極めて単純なのにも関らず、 lprヘッダページを印字しない オプション ( オプション) が使えなくなっています。 ユーザが森林資源を (あるいは、 ヘッダページが課金されているならば、その僅かな金額を)、 節約したいと望んでいる場合でも、 すべてのフィルタがすべてのジョブ毎にヘッダページを印字 することになっているので、節約することはできません。 ジョブ毎に印字されるヘッダページを ユーザが抑制できるようにするためには、「 ヘッダページに対する課金」で紹介したトリックを 使う必要があります。すなわち、LPD が生成するヘッダページの解析をおこない、PostScript 版のヘッダページを出力させる出力フィルタを作るのです。 この場合、ユーザが lpr -h でジョブを入力すると、 LPD はヘッダページを生成しなくなり、また、 出力フィルタも起動されません。そうでないならば、 作成した出力フィルタが LPD からのテキストを読み込み、 ヘッダページを印字する適当な PostScript のコードがプリンタに送られるでしょう。 PostScript プリンタがシリアルポートに接続されている場合、 出力フィルタとして lprps を、 上記の動作をおこなうものとして psof を使うことができます。ただし、psof はヘッダページに対して課金をおこないませんので注意してください。 リモートプリンタからの出力 プリンタ ネットワーク ネットワークプリンタ FreeBSD では、ネットワーク越しの印字、すなわち、 ジョブをリモートプリンタに送ることをサポートしています。 リモートプリンタからの出力をするには、一般に、 次の 2 つを参照してください。 リモートホストに接続されたプリンタにアクセスする方法。 プリンタがあるホストのシリアル、 または、パラレルインタフェースに接続されている場合、 ネットワーク上の他のホストからこのプリンタにアクセスできるように LPD を設定します。「リモートホストに 接続されたプリンタ」 でどのようにするかを説明します。 ネットワークに直接接続されているプリンタにアクセスする方法。 プリンタに、旧来のシリアル、または、 パラレルインタフェースに加えて (もしくは、これらに代わって) ネットワーク用のインタフェースがある場合。 そのようなプリンタは次のように動作するでしょう。 そのプリンタが LPD のプロトコルを理解でき、 リモートホストからのジョブを キューに入れることさえできる場合。この場合、 プリンタは、LPD が起動している一般のホストのように振る舞います。 そのようなプリンタを設定するために、 「 リモートホストに接続されたプリンタ」 と同様の手順をおこなってください。 そのプリンタが、 データストリームによるネットワーク接続をサポートしている場合。 この場合、ネットワーク上の1つのホストとしてプリンタを 接続 します。 このホストは、ジョブをスプーリングする責任を負い、 スプーリングされたジョブはプリンタに送られます。 そのようなプリンタをインストールするためのいくつかの提案が 「 ネットワークにおけるデータストリームの インタフェースを持つプリンタ」にあります。 リモートホストに接続されたプリンタ LPD スプーリングシステムでは LPD (または LPD 互換のシステム) が起動している他のホストへジョブを送る機能が 始めからサポートされています。この機能により、 あるホストに接続されたプリンタへ、 他のホストからアクセスできるようになります。また、 LPD プロトコルを理解するネットワークインタフェースを持ったプリンタに対しても、 この機能は働きます。 リモートプリンタへの出力を許可するためには、最初に、 あるホスト (これを、 プリンタホストと呼びます) にプリンタを接続します。そして、「 プリンタ設定導入編」 に書かれた簡単なプリンタの設定をおこなってください。 必要ならば、「プリンタ設定上級編」 にある、更に進んだ設定をおこなってください。そして、 そのプリンタをテストしてうまく動作することを確認し、LPD に許可した機能がうまく働くかどうかを見てください。さらに ローカルホストプリンタホストの LPD サービスの使用を 許可されているか確認して下さい (「 リモートホストからのプリンタの利用を制限する 」参照)。 プリンタ ネットワーク ネットワークプリンタ LPD 互換のネットワークインタフェースを持つプリンタを使用している場合は、 そのプリンタ自身が以下で説明する プリンタホストになります。そして、 プリンタ名とは、 そのプリンタに設定した名前のことを指します。 これについては、プリンタ、および (または)、 プリンタのネットワークインタフェースに付属するドキュメントを参照してください。 ヒューレット・パッカード社の Laserjet シリーズを使用している場合には、 プリンタ名を text とすると、 自動的に LF から CRLF への変換が行なわれます。 そのため、hpif スクリプトは必要ありません。 次に、 そのプリンタにアクセスしたいと思っている他ホストにおいて、 そのホストの /etc/printcap ファイルに次にあげるエントリを作ります。 名前のエントリ。どんな名前でもよいのですが、簡単のため、多分、 プリンタホストで設定されたプリンタ名や別名と同じものを使いたいと思うでしょう。 lp 項目で指定されるデバイスは明示的に空にする (:lp=: とする)。 スプーリングディレクトリを作成し、 sd 項目でその位置を指定する。LPD では、プリンタホストにジョブを送信するまでの間、 このディレクトリにジョブを格納します。 rm 項目でプリンタホストの名前を指定します。 rp 項目で プリンタホストに接続したプリンタ名を指定します。 これで終わりです。 変換フィルタやページの大きさやその他の事項を /etc/printcap に加える必要はありません。 次に、 リモートホストに接続されたプリンタで印字するための設定例 を示します。ホスト rose には2台のプリンタ bamboorattan が接続されています。これらのプリンタをホスト orchid のユーザが使えるようにしましょう。最初に orchid/etc/printcap を示します (このファイルは、「 ヘッダページの出力を許可する」 で参照することができます)。このファイルには、既に、プリンタ teak 用のエントリがありました。以下では、 これに、 ホスト rose にある2台のプリンタ用のエントリが加えられています。 # # /etc/printcap for host orchid - added (remote) printers on rose # # # teak is local; it is connected directly to orchid: # teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:\ :if=/usr/local/libexec/ifhp:\ :vf=/usr/local/libexec/vfhp:\ :of=/usr/local/libexec/ofhp: # # rattan is connected to rose; send jobs for rattan to rose: # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan: # # bamboo is connected to rose as well: # bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo: orchid で必要となる作業はスプーリングディレクトリを作ることだけです。 &prompt.root; mkdir -p /var/spool/lpd/rattan /var/spool/lpd/bamboo &prompt.root; chmod 770 /var/spool/lpd/rattan /var/spool/lpd/bamboo &prompt.root; chown daemon:daemon /var/spool/lpd/rattan /var/spool/lpd/bamboo これで、orchid のユーザが rattanbamboo で印字す ることができるようになりました。 例えば、orchid のユーザが次のように入力したとします。 &prompt.user; lpr -P bamboo -d sushi-review.dvi すると、orchid の LPD システムは、 ジョブをスプーリングディレクトリ /var/spool/lpd/bamboo にコピーし、これが DVI ファイルを印字するジョブであることを記録します。 ホスト rose の bamboo 用のスプーリングディレクトリに十分な容量が確保でき次第、 両者の LPD は、ジョブのファイルを rose に転送します。 このファイルは、そのすべてが印字されるまで、rose のキューに留まります。 (bamboo は PostScript プリンタなので) DVI から PostScript への変換は rose でおこなわれます。 ネットワークにおけるデータストリームの インタフェースを持つプリンタ プリンタのネットワークインタフェースカードは、 2 種類に分類することができます。 1 つはスプーラをエミュレートするもの (高価) で、もう 1 つはシリアルやパラレルポートを使うように プリンタにデータを送ることができるだけのもの (安価) です。この節では、 後者の使い方を説明します。前者のプリンタは、前節「 リモートホストに接続されたプリンタ」 の方法が適用できます。 /etc/printcap ファイルでは、 シリアルかパラレルのインタフェースのどちらを使うのか、 そして、(シリアルインタフェースを使う場合) そのボーレートはいくらであるか、フロー制御は使うのか、 タブのための遅延を加えるのか、 改行文字を変換するかなどの指定をおこなうことができます。 しかし、TCP/IP や他のネットワークポートからデータを受け取るプリンタを 接続するための指定をおこなうことはでき ません。 ネットワーク接続されたプリンタにデータを送るためには、 テキストフィルタと変換フィルタから呼び出すことができる 通信プログラムを開発する必要があります。以下に、 そのようなプログラムの例を示します。スクリプト netprint では、 標準入力から印字データをすべて受け取り、 ネットワーク接続されたプリンタにこれを送ります。 netprint の最初の引数でプリンタのホスト名を、 2 番目の引数で接続するポート番号を指定します。 このプログラムでは単方向通信 (FreeBSD からプリンタ) のみをサポートしていることに注意してください。 ネットワークプリンタの多くは双方向通信をサポートしていますので、 その恩恵 (プリンタの状態を得たり、 課金をおこなうなど) にあずかりたいと思われるかもしれません。 #!/usr/bin/perl # # netprint - Text filter for printer attached to network # Installed in /usr/local/libexec/netprint # $#ARGV eq 1 || die "Usage: $0 <printer-hostname> <port-number>"; $printer_host = $ARGV[0]; $printer_port = $ARGV[1]; require 'sys/socket.ph'; ($ignore, $ignore, $protocol) = getprotobyname('tcp'); ($ignore, $ignore, $ignore, $ignore, $address) = gethostbyname($printer_host); $sockaddr = pack('S n a4 x8', &AF_INET, $printer_port, $address); socket(PRINTER, &PF_INET, &SOCK_STREAM, $protocol) || die "Can't create TCP/IP stream socket: $!"; connect(PRINTER, $sockaddr) || die "Can't contact $printer_host: $!"; while (<STDIN>) { print PRINTER; } exit 0; このスクリプトは、 様々なフィルタが利用することができます。仮に、Diablo 750-N ラインプリンタを持っており、 これがネットワークに接続されているとしましょう。 プリンタはポート番号 5100 にて印字するデータを受け取ります。 プリンタのホスト名は scrivener とします。このとき、 このプリンタのテキストフィルタは次のようになります。 #!/bin/sh # # diablo-if-net - Text filter for Diablo printer `scrivener' listening # on port 5100. Installed in /usr/local/libexec/diablo-if-net # exec /usr/libexec/lpr/lpf "$@" | /usr/local/libexec/netprint scrivener 5100 プリンタの利用に制約を与える プリンタ 利用制限 本節では、プリンタの利用に制約を与えるための情報を記しています。 LPD システムでは、プリンタ (ローカル、 リモートのいずれに接続されていても) にアクセスできる人を制限する機能、 複数部のコピーの印字の可否を制御する機能、 ジョブのサイズの最大値やプリンタキューに入る ジョブの最大個数を制御する機能を提供しています。 複数部のコピーの印字を制限する LPD システムではユーザが複数部のコピーの印字を簡単におこなう 機能を提供しています。ユーザが、(例えば) lpr -#5 コマンドを使ってジョブを印字すると、 ジョブのそれぞれのファイルのコピーを 5 部得ることができます。 これがよい機能であると思うかどうかは人それぞれでしょう。 複数部のコピーの印字によってプリンタが 必要以上に消耗してしまうと感じるならば、 /etc/printcap ファイルに sc 項目を加えてください。これにより、 &man.lpr.1; の オプションの使用が禁止されます。 このオプションが指定されているにも関らず、 オプションを使うと、 次のようなメッセージが表示され、 このオプションの利用できない旨を伝えます。 lpr: multiple copies are not allowed リモートホストからプリンタをアクセスできる 設定にしている場合 (この 設定については、「 リモートホストに接続されたプリンタ」 をご覧ください)、そのリモートホストの /etc/printcap にも同じように sc 項目を追加する必要があることに注意してください。 そうしないと、ユーザは別なホストから複数部のコピーの 印字することができてしまいます。 例を使って説明しましょう。次に示す /etc/printcap ファイルは、ホスト rose のものです。プリンタ rattan は極めて頑丈なので、 複数部のコピーの印字は許可されています。しかし、 レーザプリンタの bamboo はもう少しデリケートで、 このプリンタから複数部のコピーを印字することを sc 項目を追加することで禁止しています。 # # /etc/printcap for host rose - restrict multiple copies on bamboo # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0:\ :if=/usr/local/libexec/if-simple: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo:sc:\ :lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:\ :if=/usr/local/libexec/psif:\ :df=/usr/local/libexec/psdf: さらに、orchid の /etc/printcap にも sc 項目を追加する必要があります (orchid でこの編集をおこなっているときに、ついでに、プリンタ teak でも複数部のコピーの印字を禁止することにしましょう)。 # # /etc/printcap for host orchid - no multiple copies for local # printer teak or remote printer bamboo teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ :lp=/dev/lpt0:sd=/var/spool/lpd/teak:mx#0:sc:\ :if=/usr/local/libexec/ifhp:\ :vf=/usr/local/libexec/vfhp:\ :of=/usr/local/libexec/ofhp: rattan|line|diablo|lp|Diablo 630 Line Printer:\ :lp=:rm=rose:rp=rattan:sd=/var/spool/lpd/rattan: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :lp=:rm=rose:rp=bamboo:sd=/var/spool/lpd/bamboo:sc: sc 項目を指定することにより、 lpr -# の使用を防ぐことができます。しかし、この状態では &man.lpr.1; を複数回起動したり、 1 回のジョブで次のように同じファイルを複数個指定することを防ぐまでには至っていません。 &prompt.user; lpr forsale.sign forsale.sign forsale.sign forsale.sign forsale.sign このような悪用を防ぐ方法は (その指示を無視することも含めて) たくさんあります。 各自で調べてみてください。 プリンタを使用できる人を限定する それぞれのプリンタを使用できる人を限定するには、Unix の グループ権限のメカニズムを利用し、さらに、 /etc/printcaprg 項目を指定することでおこないます。 あるプリンタにアクセスさせてもよいと思うユーザすべてを Unix のあるグループに入れてください。そして、 そのグループ名を rg で指定します。 このとき、そのグループに含まれないユーザ (root も含む) には、次のようなメッセージが表示され、 プリンタの使用はできません。 lpr: Not a member of the restricted group sc (suppress multiple copies : 複数部のコピーの印字を禁止する) を指定するときと同様に、rg が指定されたプリンタがリモートホストからもアクセスでき (この設定については、 「 リモートホストに接続されたプリンタ」 をご覧ください)、かつ、 そのホストでもプリンタを使用できる人を限定するのが 妥当であると思う場合は、 そのホストの /etc/printcap にも rg 指定をおこなう必要があります。 例えば、プリンタ rattan は誰でも利用できるが、bamboo はグループ artists に属している人のみが利用できるようにしてみましょう。 以下に、もうお馴染みとなったホスト rose/etc/printcap を示します。 # # /etc/printcap for host rose - restricted group for bamboo # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0:\ :if=/usr/local/libexec/if-simple: bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:\ :lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:\ :if=/usr/local/libexec/psif:\ :df=/usr/local/libexec/psdf: これ以外の /etc/printcap ファイル (ホスト orchid のもの) はそのままにしておくことにします。もちろん、 orchid のユーザは全員 bamboo を利用することができます。これは、 orchid には特定のユーザのみにしかアクセスさせておらず、 そのユーザにはプリンタを利用させたいと思っているからなのかもしれませんし、 そうでないかもしれません。 1台のプリンタを複数グループのユーザに利用させることはできません。 入力可能なジョブのサイズを制限する プリントジョブ たくさんのユーザからプリンタが利用される場合には、多分、 ユーザが印字要求を出すことができるファイルのサイズに 上限値を置く必要が生じるでしょう。結局のところ、 スプーリングディレクトリ が置かれているファイルシステムの空き容量がその 上限値になる訳ですが、 あるユーザがこれを独占的に使用すること避けるために、 他ユーザからのジョブ用の空き容量を確保する必要もあります。 プリントジョブ 制御 LPD では、mx 項目を指定することにより、 ジョブ中の個々のファイルのサイズの上限値を制限する機能を提供しています。 指定される ファイルサイズの単位は BUFSIZ ブロックで、1 BUFSIZ ブロックは 1024バイトを表わします。この mx 項目の値として 0 が指定されると、 ファイルサイズの制限はなくなります。 mx が指定されない場合は、 デフォルトの制限として 1000 ブロックが使われます。 この制限はジョブ中の各 ファイルに対して適用されるものであり、 ジョブ全体のサイズ を制限するものではありません ところで、 プリンタに設定された上限値を超えるファイルサイズの ファイルが入力された場合でも、LPD はこれを拒否しません。 その代わりに、このファイルは、 その先頭から上限値のファイルサイズまでしかキューに入れられません。 そして、その部分までが印字され、 残りの部分は捨てられます。 これが正しい動作といえるのかどうかは議論の余地があるところです。 それでは、設定例に登場しているプリンタ rattanbamboo の印字可能なファイルサイズに制限を加えてみましょう。artists グループの人達が作る PostScript ファイルのサイズは 巨大になる傾向があるので、上限値を 5M バイトとします。 それから、 プレインテキスト用のラインプリンタは無制限とします。 # # /etc/printcap for host rose # # # No limit on job size: # rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh:mx#0:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0:\ :if=/usr/local/libexec/if-simple: # # Limit of five megabytes: # bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\ :lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:\ :if=/usr/local/libexec/psif:\ :df=/usr/local/libexec/psdf: この場合もそうですが、この制限はローカル (ホスト rose) のユーザのみに適用されます。 リモートホストからプリンタを利用できるように設定している場合は、 そのリモートホストのユーザはこの制限を受けません。 これらのユーザにも制限を加える場合は、リモートホストの /etc/printcapmx を指定する必要があります。 リモートホストから印字するための詳しい情報については、 「 リモートホストに接続されたプリンタ」 を参照してください。 リモートホストに接続されたプリンタへのジョブの サイズを制限する特別な方法は他にもあります。これについては、 「 リモートホストからのプリンタの利用を制限する」 を参照してください。 リモートホストからのプリンタの利用を制限する LPD スプーリングシステムでは、リモートホストから要求された ジョブの印字を制限するための方法がいくつか提供されています。 ホストの制限 ローカルの LPD が印字要求を受け付けるリモートホストは、ファイル /etc/hosts.equiv/etc/hosts.lpd によって制御することができます。LPD では、 あるホストから印字の要求がきたとき、 このホストの名前がこれら 2 つのファイルのどちらかに含まれている かどうかを調べます。これが含まれていない場合は、LPD はこの要求を拒否します。 これらのファイルの形式は単純です。 各行にホストの名前を 1つずつ書いていきます。ファイル /etc/hosts.equiv の方は &man.ruserok.3; プロトコルでも利用され、 &man.rsh.1; や &man.rcp.1; といったプログラムの動作に影響するので注意が必要です。 /etc/hosts.equiv の記述は慎重におこないましょう。 例として、以下にホスト rose/etc/hosts.lpd を示します。 orchid violet madrigal.fishbaum.de この例では、rose はホスト orchidviolet、 そして madrigal.fishbaum.de からの要求を受け付けることになります。 その他のホストが rose の LPD にアクセスしようと しても、LPD はそのジョブを拒否します (訳注: 拒否されるのは、そのホストが /etc/hosts.equiv にも含まれていない場合です)。 サイズの制限 スプーリングディレクトリがある ファイルシステムに残しておく必要がある 空き容量の大きさを制御することができます。 ローカルプリンタ用のスプーリングディレクトリに minfree という名前のファイルを作成します。そして、 そのファイルの中にリモートホストからのジョブの 要求を受け付けるために必要な空き容量のディスクブロックサイズ (1 ディスクブロック = 512 バイト) を記します。 これで、 リモートホストのユーザにファイルシステムを満杯にされないことが保証されます。 この機能を使うと、 ローカルホストのユーザに対してある種の優先権を与えることもできます。 ローカルホストのユーザは、 minfree ファイルで指定された値よりもディスクの空き容量が下回った後でもずっと、 ジョブをキューに入れることができるのです。 例えば、プリンタ bamboo 用の minfree を作ってみましょう。 このプリンタのスプーリングディレクトリを調べるために、 /etc/printcap を調べてみましょう。 以下に、bamboo のエントリ部分を示します。 bamboo|ps|PS|S|panasonic|Panasonic KX-P4455 PostScript v51.4:\ :sh:sd=/var/spool/lpd/bamboo:sc:rg=artists:mx#5000:\ :lp=/dev/ttyd5:fs#0x82000e1:xs#0x820:rw:mx#5000:\ :if=/usr/local/libexec/psif:\ :df=/usr/local/libexec/psdf: スプーリングディレクトリは sd で指定されます。LPD がリモートホストからのジョブを受け付けるために必要な ファイルシステムの空き容量を 3M バイト (=6144 ディスクブロック) にすることにしましょう。 &prompt.root; echo 6144 > /var/spool/lpd/bamboo/minfree 利用ユーザの制限 /etc/printcaprs 項目を指定することで、 ローカルプリンタを利用できるリモートホストのユーザを 制限することができます。 ローカルホストに接続されたプリンタ用のエントリに rs 項目が指定されている場合、LPD は印字を要求したユーザのアカウントと同じログイン名が ローカルホストに登録されている場合に限り、 そのジョブが受け付けられます。 そうでないユーザからのジョブは LPD は拒否します。 この機能は、(例えば) 複数の部署がネットワークを共有しており、 この内のあるユーザが部署の境界を越えて活動している場合には特に有用です。 そのようなユーザに対して、システムのアカウントを与えるだけで、 これらのユーザは自分が所属する部署のシステムから そのシステムに接続されているプリンタを使用することができます。 これらのユーザにはむしろ、 プリンタの使用だけを認め、 その他のコンピュータ資源を利用させたくないときは、 それらのユーザにはホームディレクトリを与えず、 ログインシェルはシェルとしては何の役にも立たない /usr/bin/false などを指定して、 これらのユーザのアカウントはプリンタ用の 形式的な ものとします。 プリンタの利用に対する課金 課金 プリンタ という訳で、印字するためには料金をとることが必要です。 取らない理由などありましょうか。紙やインクにはお金がかかります。 そして、プリンタの維持費もかかります。 プリンタには可動部分が搭載されており、 これらの部分は壊れやすいという傾向があります。 プリンタや、その利用形態、維持費について調査をし、1 ページ (1 フィート、1 メートルなど) 当たりにかかるコストを調べておいてください。 これに基づき、プリンタの利用に対する課金を、実際に、 どのように始めればよいのでしょうか。 さて、残念ながら、この部分に関しては LPD スプーリングシステムはほとんど役に立ちません。 課金は使用しているプリンタの種類、印字するもののファイルの形式、 プリンタの利用に対する課金での あなた自身の要求に大きく左右されます。 課金システムを実現するためには、プリンタのテキストフィルタ (プレインテキストのジョブに対して課金するため) と変換フィルタ (その他のファイル形式に対して課金するため) を変更して、 印字したページを数えたり、 プリンタに印字したページ数を取得するための要求を送る必要があります。 ただし、出力フィルタのみを利用している場合は、 課金をおこなうことができません。フィルタに関しては、 「 フィルタ」をご覧ください。 一般に、課金方式には次の 2 つがあります。 定期的に課金する方法 はよく利用される方法です。この理由は、 恐らく比較的簡単に実現できるからです。 誰かがジョブを印字する度に、フィルタはそのユーザ名、 ホスト名、印字したページ数を課金データファイルに記録します。 毎月、毎学期、毎年、その他お好みの時期に、 各プリンタの課金用ファイルを集め、 それぞれのユーザが印字したページ数を合計して その分の課金をおこないます。 次回の課金期間をデータを 0 にして課金を再開するために、 すべてのログファイルを削除します。 利用毎に課金する方法 はあまり利用されていません。これは、 実現するのが比較的難しいからです。この方式では、 プリンタを使用したらすぐに、 フィルタがユーザにその利用に対する課金をおこないます。 ディスククオータのように、課金作業は瞬時におこなわれます。 この方式では、ユーザのアカウントが赤字になる場合に、 ユーザが印字をおこなうことを拒否することができます。 また、ユーザに プリンタ版 quota を調べたり、 調整したりする方法を提供したいと思うかもしれ ません。 これを実現するためには、ユーザとその quota を追跡するために、 あるデータベース用のコードが必要となります。 LPD スプーリングシステムでは、 両方式を簡単にですがサポートしています。これは、(ほとんどの場合で) 印字作業をフィルタがおこなっていたように、 課金作業もこのためのコードも用意することで実現されています。 しかし、明るい面もあります。 それは、課金方式に関して、非常に大きな柔軟性が与えられたということです。 例えば、「定期的に課金する方法」か、 「利用毎に課金する方法」のどちらかを選びまず、そして、 どんな情報 (ユーザ名、ホスト名、ジョブのタイプ、印字された頁数、 使用した紙の大きさ、印字をするために要した時間など) をログに記録するかを決めます。 以上のことをおこなうには、上記の情報を保持するために、 フィルタを変更しなくてはなりません。 手軽なプリンタ課金方法 FreeBSD には、「定期的に課金する方法」による課金を すぐに設定できるように、2 個のプログラムを添付しています。 その内の1つはテキストフィルタ lpf で、 これについては、「 テキストフィルタ lpf」をご覧ください。もう1つは、 &man.pac.8; で、 これはプリンタの課金データファイルからのエントリを集め、 これを合計するプログラムです。 フィルタはどのように機能しているか」で述べたように、 LPD ではテキストフィルタや変換フィルタを起動しますが、 そのコマンドラインで使用している課金データファイルの名前が指定されます。 両フィルタはこの引数を使って、 どの課金データファイルのエントリに書き込めばよいのかを知ることができます。 このファイルの名前は /etc/printcap 中の af 項目によって指定されます。 このファイルが絶対パ スで指定されない場合は、 スプーリングディレクトリからの相対パスとして扱われます。 LPD は、紙のページの幅と行数 (pwpl 項目で 指定される) を引数として lpf を起動します。lpf では、何ページ印字したかを決定するためにこれらの引数を使用します。 ファイルをプリンタに送った後、 課金情報を課金データファイルに書き込みます。 このファイルは次のようになります。 2.00 rose:andy 3.00 rose:kelly 3.00 orchid:mary 5.00 orchid:mary 2.00 orchid:zhang 課金データファイルはプリンタ毎に分けて作るべきです。 これは、lpf にはデータファイルをロックする機構が組み込まれていないためです。 したがって、lpf が 2 つ起動されたとき、 同じファイルに同時に書き込みをおこなった場合、 お互いのエントリが破壊されてしまうかもしれません。 課金用ファイルを各プリンタ毎に確実に分けるには、 /etc/printcap 中の af=acct 項目を使います。 プリンタの利用に対してユーザに課金する準備ができたら、 スプーリングディレクトリに移動した後、 &man.pac.8; と入力してください。 次のような、ドル中心主義の課金リストが表示されます (訳注: ドル中心主義という表現は、 表示がドルで出ることへの著者の皮肉でしょう。 セントがあるので小数点以下が表示されますが、 この機能も日本では邪魔ですね)。 Login pages/feet runs price orchid:kelly 5.00 1 $ 0.10 orchid:mary 31.00 3 $ 0.62 orchid:zhang 9.00 1 $ 0.18 rose:andy 2.00 1 $ 0.04 rose:kelly 177.00 104 $ 3.54 rose:mary 87.00 32 $ 1.74 rose:root 26.00 12 $ 0.52 total 337.00 154 $ 6.74 &man.pac.8; が受け付ける引数には次のようなものがあります。 プリンタ printer の利用に対する課金リストを作成します。 このオプションは、/etc/printcapaf が絶対パスで指定されていた場合に限り、動作します。 ユーザ名のアルファベット順ではなく、 課金額の低い順にリストを並べます。 課金データファイルにあるホスト名を無視します。 このオプションを使用すると、ホスト alpha のユーザ smith とホスト gamma のユーザ smith は同一人物として扱われます。 このオプションが指定されない場合は、 両者は別なユーザとして扱います。 /etc/printcappc 項目で指定された値、または、 デフォルトの値 (2 セント) に代わり、紙1ページ、または、 1フィート当たりの価格を指定します。 price として、 浮動小数点数を指定することができます。 リストの並べる順番を逆順にします。 課金リストを作成し、 課金データファイルを削除します。 name ユーザ names に対する課金情報のみを表示します。 &man.pac.8; が生成するデフォルトのリストには、 各ホストのユーザ別に印字ページ数が表示されます。 (ユーザがサイト内のすべてのホストを使用できるため) ホスト名の情報が意味を持たない場合、 pac -m を実行してください。次のようなリストが得られます。 Login pages/feet runs price andy 2.00 1 $ 0.04 kelly 182.00 105 $ 3.64 mary 118.00 35 $ 2.36 root 26.00 12 $ 0.52 zhang 9.00 1 $ 0.18 total 337.00 154 $ 6.74 課金額を決めるために、 &man.pac.8; は /etc/printcap ファイルの pc 項目で指定された値 (デフォルト値は 200、すなわち 1 ページ当たり 2 セント) を使います。この項目で、印字物に課金したい ファと思う 1 ページ当たり、 または、1 フィート当たりの価格を 100 分の 1 セント単位で指定します。 &man.pac.8; を オプション付きで起動すると、 この値を置き換えることができます。 この オプションで指定する額の単位は、 100 分の 1 セント単位ではなく、ドル単位です。例えば、次の指定では、 1 ページ当たりの単価が 1 ドル 50 セントになります。 &prompt.root; pac -p1.50 このオプションを使うと、 実際の課金額を集計することができます。 最後に、pac -s を起動すると、課金情報は課金データ累計ファイルに保存されます。 このファイルの名前は、プリンタの課金データファイルの後ろに _sum を付けたものとなります。そして、 課金データファイルは削除されます。次に &man.pac.8; が起動されると、 その時点までの累計金額を得るために、 課金データ累計ファイルが読み込まれ、 通常の課金データファイルからの情報に加算されます。 印字されたページ数をどのように数えるか? 課金を、リモートホストからの印字でさえも、 正確におこなうためには、 ジョブで使用された紙が何ページであるかを特定できる必要があります。 このことは、プリンタ利用に対する課金をおこなう上の根本的な問題です。 プレインテキストのジョブの場合、 問題を解決するのはさほど難しくはありません。 ジョブが何行であったかを数え、プリンタがサポートしている紙 1 ページに印字できる最大の行数と比較すればよいのです。 重ね打ちするために利用されるファイル中のバックスペース文字や、 物理的に複数の行に渡る長い論理行に対する取り扱いを忘れずにおこなってください。 (「テキストフィルタ lpf」で紹介した) テキストフィルタ lpf では、課金をおこなうときに、 これらの取り扱いをおこなってくれます。 課金をおこなうために必要なテキストフィルタを作成している方は、 lpf のソースコードが参考になるでしょう。 これに対して、他のファイル形式の処理はどのようにすれば よいのでしょうか。 まず、DVI から LaserJet、または、DVI から PostScript への変換の場合、フィルタが dviljdvips の 出力メッセージを解析することで、 何ページ分の変換がおこなわれたかを知ることができます。 他のファイル形式とその変換プログラムに関しても、 同様のことができるかもしれません。 しかし、この方式には問題点があります。それは、 変換されたページがすべて印字されるとは限らないということです。 例えば、プリンタが紙詰まりを起こしたり、トナー切れになったり、 はたまた、爆発したりするかもしれません。 そのような状況により印字が途中で中止されたとしても、この方式では、 ユーザは全ページ分の料金を課されてしまうのです。 それでは、どのような対策をたてることができるのでしょうか。 正確な 課金をおこなうための唯一の確実な方法は、 何ページ印字したのかを知らせることができるプリンタを入手し、 これをシリアルポートかネットワークに接続することです。 ほとんどすべての PostScript プリンタではこの概念がサポートされています。 他のプリンタも同様です (Imagen レーザプリンタをネットワーク接続するなど)。 それぞれのプリンタのフィルタを、 ジョブを印字した後で印字ページ数を得るように変更してください。 そして、課金情報はここで得られた値のみに 基づいて記録してください。行数を数えたり、 エラーが生じやすいファイルの調査は必要とされません。 もちろん、 気前よく印字料金をすべて無料にすることもできます。 プリンタを使う プリンタ 使い方 この節では、FreeBSD で設定したプリンタを使う方法について説明します。 ここでは、ユーザレベルでのコマンドを概説します。 &man.lpr.1; 印字をおこないます。 &man.lpq.1; プリンタキューを調べます。 &man.lprm.1; プリンタキューにあるジョブを削除します。 管理者用コマンド &man.lpc.8; もありますが、 これは「プリンタを管理する」 に記します。このコマンドは、 プリンタやそのキューの制御のために用いられます。 &man.lpr.1;、&man.lprm.1;、そして &man.lpq.1; の 3 コマンドは、 オプションをとり、これによって、 /etc/printcap のように操作の対象となる プリンタやキューを指定します。 これによって、様々なプリンタに対してジョブを送る、 取り消す、調査することができます。 が使われなかった場合は、これらのコマンドは PRINTER 環境変数で指定されたプリンタを使用します。 そして、PRINTER 環境変数がなかった場合は、 これらのコマンドはデフォルトのプリンタ lp を使います。 以下では、デフォルトプリンタ という用語が意味するプリンタは、PRINTER 環境変数で指定されたプリンタ、もしくは、PRINTER 環境変数がない場合は、lp という名前のプリンタです。 印字する ファイルを印字するためには、 次のように入力してください。 &prompt.user; lpr filename ... 印刷 これにより、 入力されたファイルのそれぞれをデフォルトのプリンタ から印字します。ファイル名が与えられなかった場合、 &man.lpr.1; は標準入力から印字するデータを読み込みます。例えば、 次のコマンドにより、ある重要なシステムファイルが印字されます。 &prompt.user; lpr /etc/host.conf /etc/hosts.equiv 印字させるプリンタを選択するためには、 次のように入力します。 &prompt.user; lpr -P printer-name filename ... 次の例では、プリンタ rattan に、 カレントディレクトリにあるファイルの詳細なリストを印字しています。 &prompt.user; ls -l | lpr -P rattan 上記の &man.lpr.1; コマンドではファイル名の指定がないので、 lpr は標準入力から印字するデータ、 この場合、ls -l コマンドの出力、を読み込みます。 &man.lpr.1; コマンドでは、 出力の整形を制御したり、ファイル変換を適用したり、 複数部数のコピーを作成したり、 などといた様々な幅広いオプションを受け付けることもできます。 詳細については、 「 その他の印字オプション」をご覧ください。 ジョブの処理状況を調べる プリントジョブ &man.lpr.1; コマンドを使って印字をする場合、プリントしようと するデータは プリントジョブ と呼ばれる箱に一緒に置かれ、 これが LPD スプーリングシステムに送られます。 プリンタにはそれぞれジョブ用のキューがあり、 送られてきたジョブはあなたや他のユーザからの別のジョブと一緒にそのキューで並んで、 処理される順番を待ちます。 プリンタは到着順にこれらのジョブの印字をおこないます。 デフォルトプリンタのキューの状態を表示するには、 &man.lpq.1; と入力します。プリンタを指定するときは、 オプションを使います。例えば、次のコマンド &prompt.user; lpq -P bamboo は、プリンタ bamboo のキューの状態を表示します。この lpq コマンドの出力結果の例を次に示します。 bamboo is ready and printing Rank Owner Job Files Total Size active kelly 9 /etc/host.conf, /etc/hosts.equiv 88 bytes 2nd kelly 10 (standard input) 1635 bytes 3rd mary 11 ... 78519 bytes この例では、bamboo のキューに 3 つのジョブがあることが分かります。 最初のジョブはユーザ kelly からのものであり、 ジョブ番号 9 が割り当てられています。 プリンタのすべてのジョブには一意なジョブ番号が付けられています。 ほとんどの場合、このジョブ番号は無視することができますが、 ジョブをキャンセルするときにはこの番号が必要になります。 このことの詳細については、「ジョブの削除 」をご覧ください。 ジョブ番号 9 のジョブは 2 つのファイルを処理します。すなわち、 &man.lpr.1; のコマンドラインに複数のファイル名が与えられたときは、 1つのジョブとして扱われるのです。このジョブは、現在、 アクティブジョブ (Rank の欄の active という後に注目) になっています。 これは、プリンタからそのジョブが現在印字されているはずであることを意味しています。 2 番目のジョブでは、 &man.lpr.1; コマンドに標準入力からデータが与えられています。 3番目のジョブはユーザ mary から与えられました。 このジョブのサイズはとても大きくなっています。 彼女がプリントしようとしたファイルのパス名はここで表示させるには長すぎるため、 &man.lpq.1; コマンドはドットを 3 つだけ表示しています。 &man.lpq.1; からの出力で一番最初の行もまた有益な情報を与えています。 この行から、プリンタが現在何をしているか (あるいは、少なくとも LPD がプリンタがしていると思っていること) が分かります。 &man.lpq.1; コマンドは オプションもサポートしています。 これにより、 詳しい情報が表示されます。 lpq -l の実行例を次に示します。 waiting for bamboo to become ready (offline ?) kelly: 1st [job 009rose] /etc/host.conf 73 bytes /etc/hosts.equiv 15 bytes kelly: 2nd [job 010rose] (standard input) 1635 bytes mary: 3rd [job 011rose] /home/orchid/mary/research/venus/alpha-regio/mapping 78519 bytes ジョブの削除 印字するようジョブを 送った後で印字を中断したくなったときは、 &man.lprm.1; コマンドで、 キューの中からそのジョブを削除することができます。 大抵の場合、アクティブジョブでさえも &man.lprm.1; を使って削除することができますが、 そのジョブの一部またはすべてが印字されてしまうかもしれません。 デフォルトプリンタへのジョブを削除するためには、最初に、 &man.lpq.1; を使ってそのジョブ番号を調べます。 すなわち、それから、 次のように入力して、ジョブを削除します。 &prompt.user; lprm job-number 特定のプリンタへのジョブを削除するときは、 オプションを使ってそのプリンタを指定します。 例えば、プリンタ bamboo のキューからジョブ番号 10 のジョブを削除するには次のようにします。 &prompt.user; lprm -P bamboo 10 &man.lprm.1; コマンドには略記法がいくつかあります。 lprm - あなたが (デフォルトプリンタへ) 送ったジョブをすべて削除します。 lprm user ユーザ user が (デフォルトプリンタへ) 送ったジョブをすべて削除します。 他のユーザのジョブを削除できるのはスーパユーザだけです。 あなたは、あなた自身のジョブしか削除することはできません。 lprm ジョブ番号もユーザ名もシンボル も指定されないときは、 &man.lprm.1; は現在のアクティブジョブを、 そのジョブを送ったのがあなた自身であるときに限り、 デフォルトプリンタから削除します。ただし、 スーパユーザは任意のアクティブジョブを削除することができます。 上記の略記法をデフォルトプリンタではなく 特定のプリンタに対しておこなうときは、 オプションでそのプリンタを指定するだけよ いのです。例えば、 プリンタ rattan のキューへあなたが送ったジョブを すべて削除するためには次のようにします。 &prompt.user; lprm -P rattan - ネットワーク環境で作業をしている場合、 あるホストから送られたプリンタジョブは、これを送ったホストで &man.lprm.1; を使った場合に限って、 これを削除することができます。 他のホストで同じプリンタを使えたとしても、 このジョブを削除することはできません。 次の例では、他ホストからジョブを削除することを試みています。 &prompt.user; lpr -P rattan myfile &prompt.user; rlogin orchid &prompt.user; lpq -P rattan Rank Owner Job Files Total Size active seeyan 12 ... 49123 bytes 2nd kelly 13 myfile 12 bytes &prompt.user; lprm -P rattan 13 rose: Permission denied &prompt.user; logout &prompt.user; lprm -P rattan 13 dfA013rose dequeued cfA013rose dequeued その他の印字オプション &man.lpr.1; コマンドには、テキストの整形や、 図や他のファイル形式の変換、複数部コピーの生成、 ジョブの扱いなどを制御することができます。 この節では、これに関するオプションについて記しています。 整形と変換に関するオプション 以下の &man.lpr.1; 用のオプションはジョブにおける ファイルの整形の制御に関するものです。 このオプションは、ジョブにプレインテキストが含まれない場合や &man.pr.1; ユーティリティを使ってプレインテキストを整形する場合に用いてください。 TeX 次の例では、プリンタ bamboo に (TeX 組版システムによる) DVI ファイル fish-report.dvi を印字しています。 &prompt.user; lpr -P bamboo -d fish-report.dvi このオプションは、 ジョブに含まれるすべてのファイルに対して適用されます。 したがって、1 つのジョブに (例えば) DVI ファイルと ditroff ファイルを混在させることはできません。その代わりに、 ファイルを形式毎に別々のジョブに分け、 それぞれのジョブでその形式用の変換オプションを使って印字してください。 を除くすべてのオプションを使用 するためには、 出力先プリンタ用の変換フィルタが必要です。例えば、 オプションを使用するには、DVI 用の変換フィルタが必要 です。詳細については、「 変換フィルタ」で説明しています。 cifplot ファイルを印字します。 DVI ファイルを印字します。 FORTRAN プログラムを印字します。 plot のデータを印字します。 出力に対して、number カラム分の字下げをおこないます。 number が省略されると、 8 カラム分字下げされます。 このオプションはある変換フィルタと一緒の指定されたときのみに機能します。 と数字の間に空白を入れてはいけません。 制御文字を含む文字通りのテキストデータを印字します。 ditroff (device independent troff) データを印字します。 -p 印字する前に &man.pr.1; によってプレインテキストを整形します。 詳細については &man.pr.1; をご覧ください。 &man.pr.1; コマンドにより生成されるヘッダを、 ファイル名の代わりに title とする。 このオプションは、 と一緒に使ったときのみ機能する。 troff データを印字します。 ラスタのデータを印字します。 次の例では、&man.ls.1; のマニュアルを美しく整形したものをデフォルトプリンタで印字しています。 &prompt.user; zcat /usr/share/man/man1/ls.1.gz | troff -t -man | lpr -t &man.zcat.1; コマンドで &man.ls.1; のマニュアルのソースファイルの圧縮を復元し、これを &man.troff.1; コマンドに渡しています。 これによりソースファイルが整形され GNU troff の形式となります。 その結果は &man.lpr.1; に渡され、 LPD スプーラへジョブの要求が発せられます。 &man.lpr.1; には オプションが使われているため、 スプーラでジョブを印字したときに GNU troff の形式から、デフォルトプリンタ解釈できる形式へと変換されます。 ジョブに関するオプション 以下のオプションは、&man.lpr.1; によって、 そのジョブを特殊な扱いにするよう LPD に指示するためのものである。 -# copies ジョブに含まれるファイルのそれぞれを 1 部だけ印字するのではなく、 copies 部のコピーを生成させるものです。管理者によっては、 プリンタの消耗を避け、コピー機による複製を奨励するために このオプションの使用が禁止されているかもしれません。 これに関しては、「 複数部のコピーの印字を制限する 」をご覧ください。 次の例では、デフォルトプリンタで parser.c を3 部コピーし、次に、 parser.h を3部コピーしています。 &prompt.user; lpr -#3 parser.c parser.h -m 印字ジョブが完了した後で、メールを送ります。 このオプショ ンを付けると、LPD システムはジョブの扱いが終了したときに、 あなたのアカウントにメールを送ります。 メールのメッセージには、ジョブが正常終了したのか、あるいは、 何か異常があり、(しばしば) その異常が何であったのかが書かれています。 -s 印字ファイルをスプールディレクトリにコピーせず、 代わりに、 シンボリックリンクを作成するよう指示します。 印字させるジョブのサイズが大きいとき、 このオプションを使うと便利かもしれません。このオプションにより、 スプー ルディレクトリの容量が節約されます (それに、 巨大なジョブのお陰でスプールディレクトリのあるファイルシステムの空き容量がなくなってしまうかもしれません)。 さらに、LPD がいちいちすべてのデータをコピーする必要がなくなりますので、 時間の節約にもなります。 ただし、欠点もあります。LPD はオリジナルのファイルを直接参照するので、 印字が終了するまでそのファイルを変更したり削除することができません。 リモートのプリンタで印字している場合、LPD は、 結局のところ、 ローカルホストからリモートホストにファイルをコピーする必要があります。したがって、 オプションはローカルのスプーリングディレクトリの空き容量を節約するだけで、 リモート側では節約されません。それにも関わらず、 このオプションはそれでも有用です。 -r ジョブに含まれるファイルを、 スプーリングディレクトリに ファイルをコピーした後に削除します。もしくは、 オプションと一緒に使われた場合は、 印字終了後に削除されます。 このオプションの使用には十分注意して下さい。 ヘッダページ用オプション 以下のオプションにより、 ジョブのヘッダページに通常印字さ れるテキストを &man.lpr.1; に調整させることができます。 対象のプリンタからヘッダページが出力されない場合は、 これらのオプションは何の効力も持ちません。 ヘッダページの設定に関する情報については、 「 ヘッダページ」を参照してください。 -C text ヘッダページに印字されるホスト名を text に置き換えます。なお、 ホスト名の場所には、通常、 ジョブの要求があったホストの名前が印字されます。 -J text ヘッダページに印字されるジョブ名を text に置き換えます。 ジョブ名の場所には、通常、ジョブの最初のファイル名、 または、標準入力からデータが印字されたときは stdin が印字されます。 -h - ヘッダページを出力を禁止します。 + ヘッダページの出力を禁止します。 サイトによっては、 そのヘッダページの生成方法により、 このオプションの効果が現れないかもしれません。 詳細は、「 ヘッダページ」をご覧ください。 プリンタを管理する プリンタの管理者として、プリンタの設置、設定、 そして、それらのテストをおこなう必要がありました。 &man.lpc.8; コマンドにより、 これまでとは別な管理方法がプリンタと対話的におこなわれます。 &man.lpc.8; により、次のことが可能となります。 プリンタの起動、停止をおこなう。 キューへの入力の許可、禁止をおこなう。 それぞれのキューにあるジョブの順番を変更する。 最初に用語に関する注意をしておきます。 プリンタが停止しているとは、 キューの中にあるどのジョブも印字されることがない状態 を言います。この状態においても、 ユーザはまだジョブの要求をおこなうことができますが、 これらのジョブはキューの中で、 プリンタがスタートする状態になるまで、 あるいは、キューの内容が削除されるまで待たされることになります。 キューが禁止状態にあるとは、(root 以外の) すべてのユーザが プリンタにジョブを要求することができない状態のことを言います。 キューが許可状態にある場合は、 ジョブの入力が許可されます。 キューが禁止状態にある場合でも、 プリンタをスタートす る状態にすることは可能です。この場合は、 キューが空になるまで、 キュー内のジョブの印字が続けられます。 一般的に、 &man.lpc.8; コマンドを使用するには root の権限を持っている必要があります。一般のユーザも &man.lpc.8; コマンドを使うことはできますが、 プリンタの状態を取得することとハングしたプリンタ を再スタートすることだけに使用が制限されています。 以下に、 &man.lpc.8; コマンドに関する説明の要約を述べます。 ほとんどのコマンドでは、操作対象となるプリンタを指定するため printer-name 引数を与えます。 printer-name の代わりに all が与えられると、操作は /etc/printcap 内にある全プリンタに対しておこなわれることになります。 abort printer-name 現在のジョブをキャンセルし、プリンタを停止させます。 キューが許可状態にある場合は、 ユーザはまだジョブを入力することができます。 clean printer-name プリンタのスプーリングディレクトリから、 ジョブの古いファイルを削除します。状況によって、 とりわけ、印字途中でエラーが発生していたり、 管理操作が頻発していた場合には、 ジョブで作られたファイルを LPD が完全に削除しないことが あります。このコマンドでは、 スプーリングディレクトリに入っていないファイルを見つけ出し、 それを削除しています。 disable printer-name キューに新しいジョブを入れることを禁止します。 プリンタ がスタート状態にあるときは、 キューに残っているジョブの印字は続けられます。ただし、 キューが禁止状態にあったとしても、スーパーユーザ (root) は常にジョブを入力することができます。 このコマンドは、 新しいプリンタやフィルタを設置している間に使用すると有用です。 すなわち、キューを禁止状態にしておくと、 root によるジョブのみが入力されます。そして、 その他のユーザは、テストが完了し、 enable コマンドでキューが再度許可状態になるまで、 ジョブの入力はできなくなります。 down printer-name message プリンタをダウンさせます。これは、 disable をおこなった後で、 stop をおこなった場合と等価になります。 message は、ユーザが &man.lpq.1; コマンドでプリンタのキューの状態を調べたり、 lpc status でプリンタの状態を調べたときに、 プリンタの状況として表示されるメッセージです。 enable printer-name プリンタのキューを許可状態にします。 ユーザはジョブの入力ができるようになりますが、 プリンタがスタートの状態になるまでは、 プリンタからは何も印字されません。 help command-name command-name コマンドのヘルプメッセージを表示します。 command-name が指定されなかった場合は、 利用できるコマンドの要約が表示されます。 restart printer-name プリンタをスタートさせます。通常のユーザは、 LPD がある異常な状況でハングしたときに限り、 このコマンドを使用することができます。しかし、 stop または down コマンドにより、 停止状態にあるプリンタをスタートさせることはできません。 restart コマンドは、 abort の後に start をおこなったことと同じになります。 start printer-name プリンタをスタートさせます。 プリンタのキューにあるジョブを印字することでしょう。 stop printer-name プリンタを停止します。プリンタは、 現在のジョブを終了させ、そして、 キューにあるその他のジョブは印字しません。 プリンタが停止状態にあったとしても、まだ、 許可状態にあるキューに対して、ジョブを送ることができます。 topq printer-name job-or-username printer-name のキューに対して、ジョブ番号 job のジョブ、または、ユーザ username から送られたジョブを置き換えて、キューの先頭に持ってきます。 このコマンドに関しては、 printer-name の代わりに all を使用することはできません。 up printer-name プリンタをアップ状態にします。これの反対のコマンドが down です。start の次に enable をおこなったことと等しくなります。 コマンドラインから上記のコマンドを入力すると、 &man.lpc.8; はこれを受け付けます。コマンドが入力されなかった場合は、 &man.lpc.8; は対話モードに入り、 exitquit、 または、 ファイル終端文字が入力されるまでコマンドの入力ができます。 標準スプーラの代替品 このマニュアルを最初から通読されている方ならば、ここまでで、 FreeBSD 付属の LPD スプーリングシステムに関して知っておくべき ことすべてを学ばれたことと思います。 多分、このシステムにあるたくさんの欠点について認識できたことでしょう。 すると、 (FreeBSD 上で動作する) スプーリングシステムには他にどのようなものがあるのか という疑問が自然と湧いてきます。 LPRng LPRng LPRng は、その称するところの意味は 次世代の LPR です。これは PLP を完全に書き換えたものになっています。 Patrick Powell と Justin Mason (PLP の主要な管理者) の共同で LPRng が作成されました。 LPRng の主要サイトは ftp://dickory.sdsu.edu/pub/LPRng/ です。 トラブルシューティング &man.lptest.1; を使った簡単なテストをおこなった結果、 正しい出 力を得られずに、以下に示すような出力が得られるかもしれません。 しばらくしたら出力される、または、 紙の全体が出てこない プリンタは上で示されたような印字を おこなったのですが、しばらくして止まってしまい、 動かなくなってしまいました。 印字された結果をプリンタから取り出すためには、 プリンタにある PRINT REMAINING ボタン、または、FORM FEED ボタンを押す必要があるようです。 この場合は、 おそらくジョブはプリントをする前に 更にデータが送られてこないか待ち続けているのでしょう。 この問題を解決するためには、プリンタに FORM FEED 文字 (あるいは特定の必要な文字コード) を 送るテキストフィルタを使ってください。 プリンタ内部に残ったデータをプリンタにすぐに印字させるには、 普通はこれで十分です。 次のジョブが前のジョブの最終ページの中央の どこかから印字を開始させないためにも、 紙の途中で印字のジョブが終了したかどうかを確認するのは有益です。 シェルスクリプト /usr/local/libexec/if-simple を次のように変更して、プリンタへジョブを送信した後に FORM FEED 文字を印字させるようにします。 #!/bin/sh # # if-simple - Simple text input filter for lpd # Installed in /usr/local/libexec/if-simple # # Simply copies stdin to stdout. Ignores all filter arguments. # Writes a form feed character (\f) after printing job. /bin/cat && printf "\f" && exit 0 exit 2 階段効果 が現れた 次のような印字結果が得られた。 !"#$%&'()*+,-./01234 "#$%&'()*+,-./012345 #$%&'()*+,-./0123456 MS-DOS OS/2 ASCII あなたは「階段効果」 の新たなる犠牲者になってしまいました。この原因は、 改行を表わすべき文字がなんであるか の解釈が混乱していることにあります。Unix スタイルのオペレーティングシステムでは、改行文字は ASCII コード 10 の line feed (LF) の 1 文字が使われています。MS-DOS や OS/2 などは ASCII コード 10の LF 、ASCII コード 13 の文字 (carriage return または CR) - をペアで使います (訳注: Machintosh では CR + をペアで使います (訳注: Macintosh では CR のみで表現されています)。大抵のプリンタでは、 改行を表わすために MS-DOS の慣習にしたがいます。 FreeBSD で印字する場合、印字したテキストは LF 文字だけ が使われていました。プリンタでは LF 文字を見つけると、紙を 1 行分送り出しました。しかし、 次の文字を印字するた めの紙の水平方向の位置は維持されました。すなわち、CR 文字が意味することは、 次の文字を印字する位置を紙の左端に動かすことです。 FreeBSD がプリンタに動作をして欲しいと思っている動作を以下に示します。 プリンタが CR を受け取ったとき CR 動作 (復帰) をおこなう プリンタが LF を受け取ったとき CR + LF 動作 (復帰、改行) をおこなう このように動作させるための方法がいくつかあります。 これらの文字の解釈を変えるために、 プリンタの設定スイッチかコントロールパネルを操作する方法。 どのようにして設定をするかはプリンタのマニュアルを参照してください。 FreeBSD 以外のオペレーティングシステムを切り替えて使う場合、 CR と LF 文字の解釈をそのオペレーティングシステムで使われているようにプリンタを 再設定する必要があるかもしれません。 以下に示す解決方法のいずれかを 選ぶのがよいかもしれませんね。 自動的に LF を CR+LF に変換してくれる FreeBSD 用のシリアルドライバを入手する方法。 もちろん、このドライバはプリンタ専用に接続される シリアルポート のみで動作します。 この機能を許可するためには、 /etc/printcap ファイルで対象プリンタの fs 項目で CRMOD ビットをセットします。 LF 文字の扱いを一時的に変更するための エスケープコード をプリンタに送る方法。 プリンタがサポートしているかもしれないエスケープコード については、 プリンタのマニュアルを参照してください。 適切なエスケープコードが見つかったら、 最初にそのコードを送り、次にプリントジョブを送信 するようにテキストフィルタを変更してください。 PCL 次に、Hewlett Packard 社の PCL エスケープコードに対応しているプリンタのための テキストフィルタの例を示します。 このフィルタでは、プリンタ に LF 文字を LF と CR の2文字として扱わせます。 その後に、プリンタにジョブを送ります。最後に、 ジョブの最終ページの紙を排出するため、FROM FEED 文字を送ります。このフィルタは Hewlett Packard 社のほとんどすべてのプリンタで機能するはずです。 #!/bin/sh # # hpif - Simple text input filter for lpd for HP-PCL based printers # Installed in /usr/local/libexec/hpif # # Simply copies stdin to stdout. Ignores all filter arguments. # Tells printer to treat LF as CR+LF. Ejects the page when done. printf "\033&k2G" && cat && printf "\f" && exit 0 exit 2 ホスト orchid にある /etc/printcap の例を以下に示します。ここには、 一番目のパラレルポートにプリンタ (Hewlett Packard LaserJet 3Si) が一台接続されており、そのプリンタ名は teak です。 # # /etc/printcap for host orchid # teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ :lp=/dev/lpt0:sh:sd=/var/spool/lpd/teak:mx#0:\ :if=/usr/local/libexec/hpif: 訳注 LF を CR+LF に置き換える cat コマンドを作る方法も当然考えられます。 そして、このコマンドと、if-simple の cat の部分を置き換えればよいわけです。 具体的にどのようにするかは、 読者への練習問題としましょう。 各行が重ね書きされてしまった プリンタは紙送りをまったくしませんでした。 テキストすべての行がある行の上で重ねて印字されてしまいました。 この問題は、 階段現象とは 正反対 な問題で、 ほとんどまれにしか起こりません。FreeBSD では行末として扱われる LF 文字が、紙の左端に印字位置を復帰しますが、 紙送りはしない CR 文字として扱われています。 プリンタの設定スイッチかコントロールパネルを使って、 LF と CR の文字を次のような解釈をするようにしてください。 プリンタが受け取ったとき プリンタがおこなう CR CR 動作 (復帰) LF CR + LF (復帰、改行) 訳注 LF を CR+LF に置き換える cat コマンドを作る方法も当然考えられます。 そして、このコマンドと、 if-simple の cat の部分を置き換えればよいわけです。 具体的にどのようにするかは、 読者への練習問題としましょう。 プリンタが文字を紛失してしまう 印字しているのですが、 各行の 2 〜 3 文字が印字されません。 プリンタを動かせば動かすほど、 もっとたくさんの文字が紛失されていき、 この問題は更に悪くなっていくかもしれませんでした。 この問題は、 シリアルポートを通してコンピュータから送られてくるデータの速度に、 プリンタがついていけないことに起因します (この問題は、パラレルポートに接続された プリンタでは発生することはありません)。 この問題を克服する方法が2つあります。 プリンタが XON/XOFF のフロー制御をサポート している場合は、項目 fs で TANDEM ビット をセットして、FreeBSD にこの機能を使用させてください。 プリンタがキャリアフロー制御をサポートして いる場合は、項目 fs で MDMBUF ビットをセットして下さい。それから、 プリンタとコンピュータを接続しているシリアルケーブルが キャリアフロー制御用に正しく配線されたものかどうかを確認してください。 プリンタがフロー制御をまったく サポートしていない場合は、項目 fs の NLDELAY と TBDELAY、 CRDELAY、VTDELAY、BSDELA のいくつかのビットを組み合わせて使い、 プリンタへ送るデータの流れに適当な遅延を加えてください。 プリンタは意味不明な文字列を印字した プリンタはランダムなゴミのように 見えるものを印字しましたが、 意図したテキストは印字してくれませんでした。 この問題は、通常、 シリアルポートに接続したプリンタでの 通信パラメータの誤りからくる前項とは別の症状です。 br 項目の通信速度と fsfc 項目のパリティビットの設定を共に調べてみてください。 また、プリンタでの設定が /etc/printcap ファイルで設定した 内容と一致しているかどうかも確認してください。 訳注 simple-if のような単純なフィルタだけの状態で、 日本語を含むテキストを印字しようとした場合にも、 シリアルポート、パラレルポートの使用に関係なく、 このような症状は見られます。日本語プリンタの場合、 漢字コードそのもの を送信しただけでその漢字を印字してくれるものは、 少なくとも訳者は見たことがありません。 漢字を印字するための制御 コードを別途送信するフィルタが必要となります。 また、そのようなフィルタを使用していても、 そのフィルタが想定してる漢字コードと異なった文書を プリントしようとしたときもこのような症状は出ます。 もちろん、これはプリンタ用の 言語を持たないプリンタの話で、PostScript プリンタ などにプレインテキストを送信しても、日本語対応、 非対応に関らず、意味不明な文字列が印字される (もしくは、何も印字されない) ことでしょう。 何も起きない もしプリンタが何の動作もしないのであれば、 ハード的な問題ではなく、多分 FreeBSD の中に問題があります。 /etc/printcap ファイルで、 デバッグしているプリンタのエントリに (lf 項目で) ログファイルを取るように 設定を追加してください。例えば、プリンタ rattan 用のエントリの項目 lf は次のようになります。 rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0:\ :if=/usr/local/libexec/if-simple:\ :lf=/var/log/rattan.log 次に、もう一度印字をおこなってみます。そして、 発生したと思われるエラーメッセージを見るためにログファイル (上記の例では、 /var/log/rattan.log) を調べます。そこで見られたメッセージを元に、 問題を解決してみてください。 項目 lf が指定されていない場合、LPD はデフォルト のログファイルとして /dev/console を使います。 diff --git a/ja_JP.eucJP/books/handbook/serialcomms/chapter.sgml b/ja_JP.eucJP/books/handbook/serialcomms/chapter.sgml index ad2c402d69..97c79ea3f8 100644 --- a/ja_JP.eucJP/books/handbook/serialcomms/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/serialcomms/chapter.sgml @@ -1,3159 +1,3159 @@ シリアル通信 この章では シリアル通信 Unix は現在に至るまで、常にシリアル通信機能をサポートしていました。 実際、本当に初期の Unix マシンは、ユーザとの入出力にシリアル通信を使っていました。 10 文字毎秒のシリアルプリンタ、 キーボードから構成された 端末(terminal) が広く使われていた当時とは、 何もかもがすっかり変わっています。この章では、FreeBSD でシリアル通信を行なういくつかの方法について説明しています。 シリアル接続の基礎 Assembled from FAQ. このセクションには、 シリアルポートについての一般的な情報が書かれていま す。 あなたが求めている情報が、もしここで見つからなかった場合には、 ハン ドブックの端末とダイアルアップのセクションを見てください。 ttyd cuaa ttydX (または cuaaX) デバイスは、アプリケーション上 でシリアルポートをオープンする時に使用する、 標準的なデバイスです。プロセスがデバイスをオープンする際、端末 I/O 設定の デフォルトセットが使用されます。これらの設定内容は、 次のコマンドで確認することができます。 &prompt.root; stty -a -f /dev/ttyd1 このデバイスの設定を変更した場合、その設定はデバイスが クローズされるまで有効です。デバイスが再びオープンされる時、 デフォルトの設定値に戻ります。 デフォルトの設定を変更するためには、 初期状態 を設定した いデバイスをオープンして調節することができます。例えば、ttyd5 というデバイスに対して、デフォルトで CLOCAL モードを ON にして、8 bits の設定をおこない、 XON/XOFF フロー制御を行うように設定したい場合は、次のようにします。 &prompt.root; stty -f /dev/ttyid5 clocal cs8 ixon ixoff rc ファイル rc.serial このコマンドを記述するのに適しているファイルは、 /etc/rc.serial です。 アプリケーションがttyd5 をオープンするときに、 デフォルトでこの設定をおこなうようになります。これらの設定は、 好きなように変更することができます。 また、固定状態 のデバイスに調節を行うことで、 ある一定の設定が アプリケーションに変更されることを防ぐこともできます。例えば、 ttyd5 のスピードを 57600 bps に固定したい場合には、次のようにします。 &prompt.root; stty -f /dev/ttyld5 57600 これで、ttyd5 をオープンして、 シリアルポートの転送スピードを 変更しようとするアプリケーションは 57600 bps に固定されるでしょう。 MAKEDEV 本来、デバイスの初期状態を変更したり設定を固定するのは、 root だけが行うべきです。 MAKEDEV スクリプトがデバイスエントリを作成する時は、 これをおこないません シリアル端末 端末 原作: Sean Kelly kelly@ad1440.net 28 July 1996 訳: &a.max; シリアル端末を利用することで、 コンピュータのコンソールのそばにいないと きや、 手近にネットワーク接続されているコンピュータがないときでも、 FreeBSD の機能を便利に、かつ安価に利用することができます。 ここでは、FreeBSD にシリアル端末を接続する方法を解説します。 端末の種類と利用方法 もともと Unix システムにはコンソールがありませんでした。 ユー ザはコンピュータのシリアル ポートに接続された端末からログインして プログラムを利用していました。 ちょうどモデムと通信ソフトを使ってリモート のコンピュータにログインし、テキスト ベースのプログラムを利用するのと よく似ています。 最近の PC は、 高品質の画像を表示できるコンソールを搭載していま すが、 ほとんどすべての Unix 系 OS には未だにシリアル ポートを使ってログ インするための機能があり、FreeBSD でもこの機能がサポートされています。 現在使用されていないシリアル ポートに端末を接続することでシステムに ログインし、 通常はコンソールや Xウィンドウ システムの xterm のウィ ンドウ上で起動しているテキスト ベースのプログラムであれば何 でも利用することができます。 職場での利用ということで考えるならば、FreeBSD が動作しているコンピュー タに接続された何台ものシリアル端末を 各社員の机に配置するというようなこ とが可能です。また、 家庭での利用方法としては、余っている古い IBM PC や Macintosh を FreeBSD が動いているパワフルなコンピュータの端末として利 用することができます。普通ならシングルユーザのコンピュータを、 パワフ ルなマルチユーザのシステムに変えることができるのです。 FreeBSD では、以下に挙げる3種類の端末が利用できます。 ダム (dumb) 端末 PCを利用した端末 X 端末 以下は、それぞれについての解説です。 ダム端末 ダム端末は、シリアルライン経由でのコンピュータとの接続専 用のハードウェアです。ダム端末は、 テキストの送受信および表示ができる 程度の計算能力しかもっていないので、dumb (間抜け) というように呼ば れています。 この端末上でプログラムを実行することはできません。テキスト エディタ、コンパイラ、E-mail、 ゲームなどなどのプログラムを実行するのは、 ダム端末を接続しているコンピュータの方です。 Digital Equipment社の VT-100 や、Wyse社の WY-75 を初めとして、多くのメーカが何百種類もの ダム端末を作っています。ほとんどどんな種 類のダム端末でも FreeBSD に接続して使用できます。さらに、高性能の端 末の中には画像を取り扱えるものもありますが、 限られた数のソフトウェア パッケージしかこういった機能には対応していません。 ダム端末は、X ウィンドウ システムで提供されるようなグラ フィックアプリケーションを必要としない 職場で広く用いられています。 PC を端末として利用する ダム端末 がテキストの表示およ び送受信の機能をそなえただけのものならば、言うまでもなく、 どんなPC もダム端末になり得ます。 必要なものは適切なケーブルと、そのPCの上 で動作する端末エミュレーション を行うソフトウェアのみです。 このような環境は、家庭においてよく利用されます。 たとえば、あなたの同居 人が FreeBSD のコンソールを専有している時などに、あまりパワーのないコ ンピュータを FreeBSD システムにシリアル端末として接続し、 その端末上で テキストだけを用いる作業をおこなうことができます。 X 端末 X 端末は、既存のものの中で最も洗練された種類の端末といえ ます。X 端末は、たいていの場合シリアル ポートではなく、 イーサネッ トのようなネットワークを利用した接続をおこないます。また、 アプリケーション の利用においても、 テキストベースのものだけでなく、X アプリケーション の利用が可能です。 ここでは、参考までに 端末について紹介しただけで、X 端 末の設定や利用についての解説は おこないません ケーブルとポート シリアル端末を FreeBSD システムに接続するためには、 適切なケー ブルと、 端末を接続するためのシリアルポートが必要です。ここでは、これ らについて説明します。もし既にあなたの利用したい端末と、 その端末 を接続するためのケーブルについてよく理解していれば、 設定 の章まで読み飛ばしてください。 ケーブル 端末の接続は、シリアルポートを利用します。そこで、端末を FreeBSD システムに接続するためには、シリアルケーブル (RS-232C ケーブ ルとも呼ばれています) が必要となります。 シリアルケーブルには2種類のケーブルがあります。 どちらの種類の ケーブルを使わなければいけないかは、 どんな端末を接続したいかによります。 ヌルモデムケーブル もし、PC を端末として利用したい場合は、ヌルモデム ケーブル (リバースケーブルもしくは クロスケーブルと呼ばれることもしばしばあります) を使用してください。ヌルモデムケーブルは、 コンピュータ同士や端末同士を接続するために用い られるケーブルです。 もし、本物の端末を接続するのであれば、その端末につい てきたドキュメントからどのようなケーブルを 使うべきか調べてください。も しドキュメントがない場合は、 まず ヌルモデム ケーブルを試してみて、うまくいかない場合は スタンダード ケーブル (しばしばストレートケーブルと呼 ばれます) を試してみてください。 また、端末側と FreeBSD 側の 両方の シリアルポート の形状が、 あなたが使用しようとしているケーブルについているコネクタの形 状と一致していなければなりません。 ヌルモデムケーブル ヌルモデムケーブル (またはリバースケーブルあるいはクロ スケーブル) は、たとえば signal ground 信号のように、いくつかの信 号はそのまま通しますが、 他の信号は途中で入れ替えて通します。たとえば、send data 信号のピンは、反対側のコネクタの receive data 信号の ピンと繋がっています。 自分で使うケーブルは自分で作りたいということであれば、 以下にター ミナルを接続する際に推奨される ヌルモデムケーブルの結線を示しておきま す。この表では、 RS-232C の信号線の名前と、DB-25 コネクタ上のピンの番 号を示しています。 Signal Pin # Pin # Signal TxD 2 connects to 3 RxD RxD 3 connects to 2 TxD DTR 20 connects to 6 DSR DSR 6 connects to 20 DTR SG 7 connects to 7 SG DCD 8 connects to 4 RTS RTS 4 5 CTS CTS 5 connects to 8 DCD DCD と RST では、コネクタ内部でピン4を5に接続し、 そして逆側のコネクタのピン8と接続します。 スタンダード RS-232C ケーブル RS-232C ケーブル スタンダードシリアルケーブル (またはストレートケーブル) の場合は、すべての RS-232C 信号をそのまま通します。つまり、片方の send data 信号のピンは、逆側の send data 信号のピンと繋がっています。モデムを FreeBSD に接続するときや、一部の端末を接続するときにこのタイプの ケーブルを使用します。 ポート シリアルポートは、FreeBSDが動作しているホスト コンピュータと端 末の間でデータのやりとりを行うために用いるデバイスです。 ここでは、現在存在するポートの種類と FreeBSD でのポートのアクセス方法について解 説します。 ポートの種類 シリアルポートには何種類かのものがあります。 ケーブルを購 入したり自作したりする前に、 そのケーブルのコネクタの形状が端末および FreeBSD システムのポートの形状と一致していることを 確認してください。 ほとんどの端末は DB25 ポートを搭載しています。 FreeBSDが動作しているも のを含めて、PCは DB25 または DB9 ポートを搭載しています。マルチポート のシリアルカードの場合は、RJ-12 や RJ-45 のポートを搭載しているかもし れません。 利用されているポートの種類に関しては、 ハードウェアについてきたドキュメ ントを参照してください。 また、多くの場合、ポートの形状から判断すること もできるでしょう。 ポートの名前 FreeBSDでは、/dev ディレクトリ内のエントリを介 してシリアルポートへのアクセスがおこなわれます。 2種類の異なったエン トリがあります。 着信用のポートの名前は、 /dev/ttydx ( x は 0から始まるポート番号) となっています。一般に端末の接続には 着信用ポートを用います。着信用のポートでは、 シリアルラインのデータ キャリア検出 (DCD) 信号がオンになっている必要があります。 発信用のポートの名前は、 /dev/cuaax となっています。 発信用のポートは普通モデムの接続に用い、端末の接続には 利用しません。ただ、 ケーブルまたは端末がキャリア検出信号を使えない タイプのものの場合は、 発信用のポートを使うとよいでしょう。 詳しくは、&man.sio.4; のマニュアルをご覧ください。 たとえば、端末を一つ目のシリアルポート (DOS でいうところの COM1) に接 続したとすると、/dev/ttyd0 がこの端末を指すことになります。また、 二つ目のシリアルポート (COM2) ならば /dev/ttyd1 となり、 以下この形式のデバイスエントリを使います。 各シリアルポート、 特にマルチポートのシリアルカードを利用する ために、kernel の設定をおこなう必要がある場合がありますので、注意してくだ さい。詳しくは、FreeBSD カーネルのコンフィグレーション をご覧ください。 設定 ここでは、端末からのログインを可能にするために必要な FreeBSD 側の設定について解説します。 既に端末を接続するポートが利用できるように kernel の設定をおこない、端末が接続されているものと考えて、解説を進め ます。 簡単に言えば、プロセス管理や初期化をおこなっている init プロセス に対して、 ログイン名を読み込み login プログラムを起動している getty を実行するように指示します。 これをおこなうには、/etc/ttys の内容を編集する必要があります。まず、su コマンドで root になって、/etc/ttys に以下の 変更を加えてください。 端末を接続するポートの /dev のエントリが含ま れている行がまだ存在しなければ、これを /etc/ttys に追加してく ださい。 /usr/libexec/getty が対象となるポートに対して 実行されるように指定してください。また、 /etc/gettytab ファイ ル内の適切な getty タイプのエントリを指定してください。 デフォルトのターミナルタイプを指定してください。 対象となるポートを on に設定してください。 そのポートが secure であるかどうかを指定してください。 init/etc/ttys を読み込みなおさせてく ださい。 また、必要に応じて /etc/gettytab を変更し、上の 2で使用する getty のエントリを追加してください。 このドキュメントではこの方 法については特に解説しませんので、&man.gettytab.5; および &man.getty.8; のマニュアルをご覧ください。 以下では、上のステップについて詳しく解説します。 実例を用いて、何をす べきかを解説していきます。Wyse-50 と、 古い IBM の 286 マシン上で通信 ソフト Procomm を使って VT-100 エミュレーションをおこなっているものを端 末の例として紹介します。また、Wyse は 2番目のポートに、 286マシンは 6 番目のポート (マルチポートのシリアルカード上のポート) に接続します。 /etc/ttys について、 より詳しくは、&man.ttys.5; のマニュアルをご覧 ください。 <filename>/etc/ttys</filename> へのエントリの追加 既にエントリがある場合を除いて、まず初めに /etc/ttys にエントリを追加しなければいけません。 /etc/ttys には、 FreeBSDシステム上のログインを許可するすべての ポートを記述します。たとえば、一つ目の仮想コンソール ttyv0 のエン トリもこのファイルにあります。このエントリのおかげで、 コンソールからの ログインが可能になっています。 このファイルには、他の仮想コンソール、シ リアルポートおよび仮想端末のエントリも含まれています。 端末を接続する 場合は、そのポートの /dev のエントリを、 /dev の部分 を省略して記述します。 FreeBSD のインストール当初の状態では、 ttyd0 から ttyd3 までの、初めの四つのシリアルポートのエントリが /etc/ttys に記述され ています。 これらのポートのいずれかに端末を接続する場合は、新たなエント リを追加する必要はありません。 ここで紹介している例では、 既にファイルにエントリが存在する 2番目のシリ アルポート、 ttyd1 に Wyse-50 を接続しています。 一方、6番目のシ リアルポートに接続する 286マシン用のエントリは、新たに追加してやらな ければなりません。以下に、エントリを追加した後の /etc/ttys か ら抜粋して示します。 ttyd1 "/usr/libexec/getty std.9600" unknown off secure ttyd5 <replaceable>getty</replaceable> タイプの指定 次に、 端末からのログインを処理するプログラムの指定をおこな います。 FreeBSDでは、標準的には /usr/libexec/getty をこの目的 で利用しています。login: プロンプトを送り出しているのは、このプロ グラムです。 getty プログラムは、 コマンドラインパラメータとして、 getty タイプをとります。ただし、 このパラメータは必須ではあ りません。 getty タイプは、 ボーレートやパリティといった、接続され た端末の特徴を表すものです。getty プログラムは、与えられた getty タイプに対応したこれらの特徴を /etc/gettytab から 読み込みます。 ファイル /etc/gettytab には、 新旧の端末に関する多数のエントリ が記述されています。 ほとんどの場合、std という文字列で始まる名前 のエントリを使えば、 接続された端末に対してログインセッションを提供す ることができます。これらのエントリを利用した場合、 パリティは無視されま す。110 bps から 115200 bps までのボーレートに対応した std のエン トリがあります。当然、 新たなエントリを追加することも可能です。 &man.gettytab.5; のマニュアルに、 さらに詳しく解説されています。 /etc/ttysgetty タイプの設定をする際は、 端末側の通信 パラメータの設定が、getty タイプのものと一致していることを確認し てください。 紹介している実例では、Wyse50 はパリティなし 38400 bps で接続していま す。また、286 マシンの方は、パリティなし 19200 bps の接続です。以下は、 この段階でのこの二つの端末に関する /etc/ttys の設定です。 ttyd1 "/usr/libexec/getty std.38400" unknown off secure ttyd5 "/usr/libexec/getty std.19200" ここで、実行するプログラムを指定している 2番目のフィールドが、ダブルクォー テーションに囲まれていることに注意してください。 こうしないと、getty のタイプの指定が、 つぎのフィールドとして判断されてしまう可 能性があるので、 十分注意することが必要です。 デフォルトのターミナルタイプの指定 /etc/ttys の 3番目のフィールドには、 そのポートのター ミナルタイプのデフォルトを指定します。 ダイアルアップ用のポートの場合 は、 ユーザがどのタイプの端末あるいは 通信ソフトを利用してダイアルアップ してくるかは分からないので、unknowndialup を記述するの が一般的です。一方、 直結された端末の場合、ターミナルタイプが変わるこ とはありませんから、 このフィールドには実際のターミナルタイプを記述し ます。 一般に、ユーザは .login.profile などのファイル内で tset コマンドを使って、 ターミナルタイプをチェックし、必要ならば ターミナルタイプの入力を求めるプロンプトを 表示するようにします。この とき、 /etc/ttys の中でターミナルタイプが指定されていれば、 このプロンプトを表示せずに先に進むことが可能です。 termcap FreeBSD 上で、どのターミナルタイプを利用できるかは、 /usr/share/misc/termcap をご覧ください。 このファイルには、お よそ 600 のターミナルタイプが定義されています。 必要ならば、新たなエン トリを追加することも可能です。詳しくは &man.termcap.5; のマニュアルをご覧ください。 紹介している例では、Wyse-50 のターミナルタイプは Wyse-50 です (もっ とも他のタイプをエミュレートすることも可能ですが、ここでは Wyse-50 モー ドで使用します)。また、286マシン上では Procomm が VT-100 エミュレー ションをおこなうように設定されています。以下が、まだ未完成の /etc/ttys の関連部分です。 ttyd1 "/usr/libexec/getty std.38400" wy50 off secure ttyd5 "/usr/libexec/getty std.19200" vt100 ポートを利用可能にする /etc/ttys のつぎのフィールド、 つまり 4番目のフィー ルドは、 そのポートをアクティブにするかどうかの設定です。 このフィールド に on を指定すると、 init プロセスが2番目のフィールドに書かれ たプログラム、getty を実行し、 ログインのためのプロンプトを送り出 すようになります。 このフィールドに off を記述すると、 getty は起動されず、 よってこのポートからのログインもできなくなります。 ということで、当然このフィールドには on を指定します。以下が /etc/ttys です。それぞれのポートを on にしました。 ttyd1 "/usr/libexec/getty std.38400" wy50 on secure ttyd5 "/usr/libexec/getty std.19200" vt100 on ``secure'' なポートの指定 とうとう最後のフィールドの設定です。 (実際にはここでは触れ ませんが、 オプショナルなwindow の設定のフィールドも存在するので、 ほぼ最後のフィールドといった方が正確かもしれません) 最後のフィールド では、 そのポートが安全かどうかを指定します。 ここで、安全 なポートとはどういうポートのことでしょう? これは、root のアカウント (または、ユーザ ID が 0 のアカウント) がロ グインしてもよいポートということです。 安全でないポートでは、root のロ グインは許可されません。 では、どのように安全なポートとそうでない ポートを使えばよいでしょう? ポートを安全ではないとすることで、 そのポートに接続された端末からは、root のログインを禁止することができます。FreeBSDシステムの root のパス ワードを知っている人は、 まず一般ユーザとしてログインしなければなりませ ん。 スーパユーザの特権を得るためには、そのうえで su コマンドを 利用しなければいけません。 これによって、root アカウントが不正に利用された場合に、 その経過を調査 する上で二つの記録を利用できるようになります。 loginsu コマンドは、共にシステムのログに記録を残します (また、 ログイン は wtmp にも記録を残します。 )。 ポートを安全なものとして指定すると、その端末からの root のログインが可 能になります。root のパスワードを知っている人は、単に root としてログ インできます。この場合は、当然ログインの記録や su コマンドのログ は残りません。 では、どちらを使うべきでしょうか? 単純に insecure を使うのがよいでしょう。 公共の場所にある訳ではな い端末や、 鍵のかかったドアの内側にある端末にも insecure を指 定する方がよいでしょう。 スーパユーザの特権が必要な場合でも、ログイ ンして su を実行するのは、 ごく簡単なことなんですから。 以下に、ようやく完成した /etc/ttys のエントリに端末の場所を表 すコメントを追加したものを示します。 ttyd1 "/usr/libexec/getty std.38400" wy50 on insecure # Kitchen ttyd5 "/usr/libexec/getty std.19200" vt100 on insecure # Guest bathroom <command>init</command> にファイル <filename>/etc/ttys</filename> の再読み 込みをさせる FreeBSD をブートすると、最初に起動されるプロセス、 init/etc/ttys を読み込んで、記述されているプログラムを利用可能な ポートに対して実行し、 ログインプロンプトを送り出させます。 /etc/ttys の編集が終わった後、 init に変更を認識させるた めに、わざわざ FreeBSD をブートしなおしたくはないでしょう。このような 場合のために、init は、 SIGHUP (hangup) シグナルを受信すると、 /etc/ttys を読み込みなおすようになっています。 /etc/ttys の変更を保存したら、 以下のようなコマンドを実行して、init に対して SIGHUP を送信します。 &prompt.root; kill -HUP 1 (init プロセスのプロセス ID は 常に 1です) すべての設定が正しくおこなわれ、 すべてのケーブルがただしく接続されてい て、 かつ端末の電源が入っていれば、 端末にはログインプロンプトが表示され ているはずです。これで、 これらの端末からの最初のログインの準備が完了で す! トラブルシューティング 細心の注意を払って設定をおこなっても、 ときには端末の接続がう まくいかない場合があるでしょう。以下に、 よく見られる問題とその解決方法 を示します。 ログインプロンプトが表示されない 端末の電源が接続され、 スイッチが入っていることを確認してください。もし、PC を端末として利用している場合は、 通信ソフトが適切なシリアルポー トを利用する設定になっているかどうか確かめてください。 ケーブルがしっかりと端末と FreeBSDが動作しているコンピュータの両方に接続され ていることを確認してください。また、 正しい種類のケーブルを利用している か確かめてください。 端末と FreeBSD の間の通信速度とパリティの設定が一致していることを確認 してください。 出力をモニタに表示するタイプの端末の場合は、モニタ のコントラストと明るさの設定を確認してください。また、 出力が印刷 されるタイプの端末の場合は、 紙とインクが十分にあるかどうかを確かめてく ださい。 getty が動いていて、 端末を認識していることを確認してください。以 下のコマンドで動作中の getty プロセスのリストを得ることができます。 &prompt.root; ps -axww|grep getty その端末に対する getty の情報が表示されるはずです。たとえば、以下 の表示例は、getty は 2番目のシリアルポート (ttyd1) に対し て /etc/gettytab 中の std.38400 のエントリを使って動作し ているということを示しています。 22189 d1 Is+ 0:00.03 /usr/libexec/getty std.38400 ttyd1 もし、getty プロセスが一つも動いていないようであれば、 /etc/ttys の中で、 そのポートを利用可能にする設定をしたかどう か確かめてください。また、kill -HUP 1 を確実に実行してください。 ログインプロンプトの代わりにゴミが表示される 端末と FreeBSD の間の通信速度およびパリティの設定が一致していることを確 かめてください。また、getty プロセスの情報を調べて、適切な getty のタイプが使用されていることを確認してください。間違った getty タイプが使用されている場合は、 /etc/ttys を修正し てから、 kill -HUP 1 を実行してください。 文字が重複して表示される、 入力したパスワードが表示される 端末または通信ソフトの設定で、半二重 (half duplex) あるいは ローカ ルエコー となっているところを、全二重 (full duplex) に変更してください。 ダイアルインサービス ダイアルインサービス 原作: &a.ghelmer;. 訳: &a.max;. 6 September 1996. このドキュメントでは、FreeBSD で外部からのモデムによるアクセスを受け付 けるための設定に関してまとめてあります。このドキュメントは筆者が FreeBSD 1.0、1.1 および 1.1.5.1 での経験と、他の Unix 系 OS での経験を 基に書いたものですが、 必ずしも十分な内容でないかもしれませんし、掲載し た実例もあなたが今お使いの環境とは一致しないかもしれません。 また、筆者 はこのドキュメントに従って行われた作業で データが失われたりシステムが破 壊されるようなことがあっても、 一切責任をとれません。 設定を始める前に 筆者は、読者が FreeBSD に関する基本的な知識をもっていることを仮定して このドキュメントをまとめました。まず、FreeBSD が既にインストールされ ていて、Unix 系環境においてファイルの編集の方法やシステムに付属のマニュ アルを参照する方法を知っている必要があります。また、 以下に示すように、FreeBSD の特定のバージョンが必要となりますし、いくつかの用語に関する 知識、 そしてモデムや多少の配線に関する知識も必要となります。 FreeBSD のバージョン まず、FreeBSD のバージョンは 1.1 以上を使用してください (バージョン 2.X でもかまいません)。FreeBSD 1.0 には、 2種類のシリアル ドライバ が含まれているので、 混乱の元となり得ます。また、FreeBSD のシリアル ディバイス ドライバ (sio) は、 バージョンを追う毎に改善されてき ていますので、 より新しいバージョンの FreeBSD を使用することで、よりよ い、 より効率の高いドライバを利用することができるはずです。 用語解説 以下、簡単にいくつかの用語について解説しておきます。 bps bits-per-second Bits per Second の略で、 データの転送速度を表す単位。 DTE DTE Data Terminal Equipment の略。 たとえばコンピュータ本体のこと。 DCE DCE Data Communications Equipment の略で、 具体的にはモデムのこと。 RS-232 RS-232 ケーブル EIA (米電気産業協会) のハードウェア間シリアル通信の標準規 格。 これらの用語やデータ通信一般に関して、 より詳しい情報が必要な場合は、The RS-232 Bible という本 (誰か ISBN 分かる方いませんか?) が参考 になると思います。 通信においてのデータ転送速度に関して、 このドキュメントでは ボーレー ト (baud rate) ではなく、bps (bits per second) をその単位として 使うことにします。これは、 ボーというのは一定時間に生じる電気的状態の変 化の数を表す単位にすぎず、bps という単位の方が実体に即しているか らです (少なくとも、 こういう表現をしておけば、意地の悪い人に怒られる こともないのではないかと思います)。 外づけモデムと内蔵モデムについて ダイアルアップのサービスに関していえば、 外づけのモデムの方が適している ようです。これは、 多くの外づけのモデムは設定を不揮発ラムに書き込んで半 永久的に保存することができますし、また RS-232 に関する重要な情報を知る ための点滅するライトによるインディケータが 搭載されているからです。点滅 するライトは、 システムを見に来た訪問者に強い印象を与えるという効果だけ でなく、モデムが適切に動作しているかどうかを知るためにも 有効です。 一方、たいていの内蔵型のモデムには 不揮発性ラムが搭載されていないため、ディップ スイッチの変更以外に設定を保存する方法がありません。また、も しインディケータがついていても、おそらくコンピュータのケース カバーが 外されていなければその状態を確認するのは 難しいでしょう。 モデムとケーブル 以下のことに関して、予め知っておく必要があります。 コンピュータとモデムの間での通信が 行えるようにするための接続方 法。 (内蔵型の場合は接続の必要はありません) お使いのモデムのコマンドについての知識、 あるいはコマンドの解説 の在処 (通信ソフトを使っての) モデムの不揮発ラムに保存可能な設定の変更 方法 1番目のモデムの接続はたいてい簡単に行えるはずです。 ほとんどのストレー ト シリアル ケーブルが使えるでしょう。 使用すべきケーブルは、両端に適 切なコネクタ (DB-25 または DB-9 の雄または雌) のついた、DCE-DTE 間接 続用のもので、 以下の信号線が接続されていなければなりません。 モデムコマンド Transmitted Data (SD) Received Data (RD) Request to Send (RTS) Clear to Send (CTS) Data Set Ready (DSR) Data Terminal Ready (DTR) Carrier Detect (CD) Signal Ground (SG) FreeBSD で 2400bps 以上の転送速度を利用する場合には、 フロー制御のため に RTS 信号と CTS 信号が必要です。また、 接続の確立と回線の切 断を検出するために CD 信号を利用します。さらに、 DTR 信号を使っ て回線切断後のモデムのリセットを行います。ケーブルの中には、 総ての必要 な信号線が接続されていないものもありますので、 たとえば、回線切断後でも ログイン セッションが残ってしまうといった問題が発生した場合などには、 ケーブルに問題がある可能性もあります。 次に、お使いのモデムにもよりますが、 もしモデムのコマンドをよく覚えてい ない場合は、 モデムのマニュアルをすぐに参照できるようにしておいてくださ い。このドキュメントでは例として USR Sportstar の 14,400 bps の外づけ型 モデムのコマンドを示しておきます。 他の種類のモデムをお使いの場合も、参 考になるかもしれません。 最後に、FreeBSDで快適にモデムを使うためにも、 モデムの設定方法を知って おく必要があります。FreeBSD も他の Unix 系 OS と同様、回線の接続およ び切断の検出や回線の切断および回線切断後の モデムの初期化にハードウェア シグナルを利用します。FreeBSD は、モデムに対するコマンドの送信やモデ ムの状態の監視を行いません。パソコンで運用されている BBS への接続に慣 れている方にとっては、 ちょっとめんどうかもしれませんね。 シリアル インタフェースについて FreeBSD では、NS8250-、NS16450-、NS16550- および NS16550A- に基づ いた EIA RS-232C (CCITT V.24) 規格のシリアル インタフェースをサポート しています。8250 および 16450 ベースのディバイスには1文字のキャラクタ バッファが搭載されています。また、16550 系のディバイスには、 16文字分 のバッファが搭載されていて、 はるかによいパフォーマンスを得られます (ただし、無印の 16550 では、バグがあって 16 文字バッファが利用できませ んので、可能であれば 16550A 系のディバイスを利用してください)。1文字 のバッファの物は、 16550 系のものと比べて OS にかける負荷が大きいので、16550A 系ディバイスの利用を強く推奨します。多数のシリアル ポートを利 用する場合や、負荷の高いシステムにおいては、 16550A 系ディバイスを使う ことで、 エラー発生率を低く押さえることができます。 概要 FreeBSD は以下の手順でモデムからのログインを受付ます。 init から起 動された getty のプロセスが、割り当てられたシリアル ポート (この 例では /dev/ttyd0) がオープンされるのを辛抱強く待ちます。ps ax コマンドを実行すると、 以下のような出力が得られるはずです。 4850 ?? I 0:00.09 /usr/libexec/getty V19200 ttyd0 ユーザがモデムに電話をかけ、モデム同士が接続されると、 モデムの CD が検出されます。その結果、 kernel がキャリア信号を検出して、getty によるポートのオープンの処理が終了します。 getty は、login: プロンプトを指定されている初期回線速度で送信します。 getty は、 正常に文字列を受信できるかどうか監視し、通常の設定では、 もし以上な文字列を検出した場合 (理由としては、 getty の速度とモデ ムの接続速度が異なっているような場合が考えられます)、 正常に文字列が 受信できるまで、getty は速度を変え続けます。 /usr/bin/login getty が正しい速度を検出すれば、 ユーザに対して login: プロン プトが表示されるはずです。ユーザがログイン名を入力すると、 getty/usr/bin/login を起動して、 パスワードの入力を要求し、その 後ユーザのシェルを起動します。 それでは、続いて設定についての解説です。 kernel の設定 通常、FreeBSD の kernel は、MS-DOS の世界で COM1:COM2:COM3: および COM4: と呼ばれる四つのシリアル ポートを 探す ように設定されています。また、FreeBSD では、現在のところ Boca の 1008 や 2016 のような、単純なマルチポートのシリアル インタフェースもサポー トしています (マルチポートのシリアル ボードに関しての kernel の設定 については、&man.sio.4; のマニュアルを参照してください)。 デフォルト の kernel は、COM ポートだけを探します。 搭載されているシリアル ポートのいずれかを、kernel が認識しているかどう か確認したい場合は、kernel 起動時のメッセージを注意深く見ているか、あ るいは /sbin/dmesg コマンドを使って、 ブート時の出力メッセージ を確認してください。特に、 sio で始まるメッセージをよく見てくださ い。 参考までに、以下のコマンドで sio という文字列を含むメッセージ だけを表示することができます。 &prompt.root; /sbin/dmesg | grep 'sio' たとえば、シリアル ポートを四つ持つシステムの場合は、 以下のようなシリ アル ポートに関するメッセージが kernel によって表示されます。 sio0 at 0x3f8-0x3ff irq 4 on isa sio0: type 16550A sio1 at 0x2f8-0x2ff irq 3 on isa sio1: type 16550A sio2 at 0x3e8-0x3ef irq 5 on isa sio2: type 16550A sio3 at 0x2e8-0x2ef irq 9 on isa sio3: type 16550A もし、kernel に正常に認識されないポートがある場合は、 おそらくカスタマ イズした kernel を構築する必要があるでしょう。 kernel 構築と構築のための設定に関しては、BSD System Manager's Manual の Building Berkeley Kernels with Config (config コマンドによる BSD kernel の構築) [ソース ファイルは /usr/src/share/doc/smm にあります]と FreeBSD Configuration Options [ /sys/conf/options および /sys/arch/conf/options.arch arch の部分をたとえば i386 としたファイル ] を参照 してください。 kernel の設定と構築をするためには、kernel のソース (FreeBSD 1.1 では srcdist/srcsys.??、 FreeBSD 1.1.5.1 では srcdist/sys.??、 またFreeBSD 2.0 では総てのソース)を展開 する必要があります。 まだ自分のシステムの kernel 用のコンフィギュレーション ファイルを作っ ていない場合は、 /sys/i386/confcd して作成してくださ い。初めてコンフィギュレーション ファイルを作る場合は、まず GENERICAH (FreeBSD 1.x で BusTek の SCSI コントローラを使っている場合は GENERICBT) というファイルを、 YOURSYS にコピーしてください。ここ で、 YOURSYS はあなたのシステム名で、 大文字である必要があります。このファイルを編集して、 ディバイスに関する記述を変更します。 device sio0 at isa? port "IO_COM1" tty irq 4 vector siointr device sio1 at isa? port "IO_COM2" tty irq 3 vector siointr device sio2 at isa? port "IO_COM3" tty irq 5 vector siointr device sio3 at isa? port "IO_COM4" tty irq 9 vector siointr システムに搭載されていないディバイスに関する記述は、 コメントアウトまた は削除してしまってかまいません。 Boca の BB2016 のようなマルチポートの シリアル ボードをお持ちの場合は、&man.sio.4; のマニュアルを見て、マ ルチポートのボードのためのコンフィギュレーション ファイルの記述のし方 に関して確認してください。ディバイスのフラグの 指定方法がバージョンによっ て異なりますので、別のバージョンの FreeBSD で利用していたコンフィギュ レーション ファイルを流用する場合には 十分注意してください。 なお、port "IO_COM1"IO_COM2IO_COM3 および IO_COM4 は、 それぞれのポートの一般的なアドレスである 0x3f80x2f80x3e8 および 0x2e8 を表します。また、割り込 み番号 4、3、5 と 9 は、それぞれ COM1: から COM4: のポー トで一般的に使用される IRQ です。また、ISA バスのコンピュータの場合、 一般的なシリアルポートは複数のポートで一つの IRQ を共有することが できませんので注意が必要です (マルチポートのシリアル ボードの 場合は、複数の 16550A ベースのポートで一つまたは二つの IRQ を共有する ための機構を備えています)。 コンフィギュレーション ファイルの編集が終わったら、 Building Berkeley Kernels with Config (config コマンドによる BSD kernel の構築) および &man.config.8; のマニュアルにしたがって、 config コマンド を使って kernel 構築のためのディレクトリを作成した後、kernel の構築、 インストールおよびテストを行ってください。 ディバイス スペシャル ファイル kernel に組み込まれているほとんどのディバイスは、 /dev ディレ クトリにある、 ディバイス スペシャル ファイル を介してアクセスされ ます。 sio ディバイスの場合は、着信用の /dev/ttyd? およ び、発信用の /dev/cuaa? が利用されます。さらに、FreeBSD の 1.1.5 以降では、 初期化ディバイス (/dev/ttyi?/dev/cuai0?) およびロッキング ディバイス (/dev/ttyld?/dev/cual0?) も合わせて利用されます。初期化ディバイスは、通信 ポートがオープンされる度に、 そのポートの初期設定を行うために使われます。たとえば、 CTS/RTS によるフロー制御を行うモデムが接続されてい る場合の crtscts などのパラメータの初期化が行われます。ロッキング ディバイスは、ポートの設定をロックし、 他のユーザやプログラムにこれらを 変更されることのないようにするために利用されます。 通信ポートの設定、初 期化とロックおよび設定の変更に関しては、 それぞれ &man.termios.4;、&man.sio.4; と &man.stty.1; のマニュアルをご覧ください。 ディバイス スペシャル ファイルの作成 ディバイス スペシャル ファイルの管理は、ディレクトリ /dev にあるシェル スクリプト MAKEDEV によって行います (FreeBSD 1.1.5 の &man.MAKEDEV.8; のマニュアルの COM ポートに関する記述は、 かなりいい加減なので無視してください)。 MAKEDEV を使って、 COM1: (ポート 0) をダイアルアップのポートとして利用するためのディ バイス スペシャル ファイルを作るには、 /devcd して から、MAKEDEV ttyd0 と実行してください。 同様に、MAKEDEV ttyd1 とすることで、COM2: (ポート 1) 用のディバイス スペシャル ファイル を作成することができます。 MAKEDEV は、 /dev/ttyd? のディバイス ファイルだけでなく、 /dev/cuaa? (および FreeBSD 1.1.5 以降では総ての初期化ディバイ スとロッキング ディバイスのスペシャル ファイル) も作成します。さらに、もしシリアル端末用のスペシャル ファイル /dev/tty0? が存在すれ ば、それらの削除も行います。 ディバイス スペシャル ファイルの作成後、 これらのファイルのパーミション が適切に設定されていて、 これらのディバイスを利用してもよいユーザのみが 読み書きできるようになっていることを確認してください (特に /dev/cua* のパーミションには注意を払ってください)。この確認 を怠ると、 一般のユーザがあなたのモデムを使うことができるようなことにな りかねません。デフォルトの /dev/cua* のパーミションは、以下の ようになっていて、 たいていの場合適切なものだと思います。 crw-rw---- 1 uucp dialer 28, 129 Feb 15 14:38 /dev/cuaa1 crw-rw---- 1 uucp dialer 28, 161 Feb 15 14:38 /dev/cuaia1 crw-rw---- 1 uucp dialer 28, 193 Feb 15 14:38 /dev/cuala1 上の設定では、ユーザ uucp と、 グループ dialer に属するユーザ が発信用のディバイスを利用できます。 設定ファイル FreeBSD のシステムへのダイアル アップによるアクセスを実現するために編 集が必要と思われる設定ファイルが、/etc ディレクトリに三つあ ります。まず、 /etc/gettytab には、 /usr/libexec/getty デーモンの設定を記述します。つぎに、 /etc/ttys に保存されている情報から、 /sbin/init はど の tty ディバイスに対して getty のプロセスを実行するべきか判 断します。最後に、お使いの FreeBSD が 1.1.5.1 以降のものならば /etc/rc.serial スクリプトに、 それ以前のものならば /etc/rc.local スクリプトにシリアル ポートの初期化のためのコマ ンドを記述することができます。 Unix にダイアル アップ モデムを接続する方法には、 二つの考え方がありま す。一つの方法は、ダイアル インしてくるユーザの接続速度に関係なく、常 にモデムとローカルのコンピュータの RS-232 インタフェースの接続速度を一 定に保つように設定する方法です。 この設定の長所は、ユーザがダイアル イ ンして接続されると、 即座にシステムからのログイン プロンプトが送信され るということです。短所は、 システムが実際のモデム間の速度を知ることがで きないために、 Emacs のようなフル スクリーンのプログラムが、端末との接 続速度が遅い場合でも、 そのような場合に効果的な方法で画面出力を行わない 点です。 もう一つは、モデムの RS-232 インタフェースとコンピュータの接続速度を、 モデム間の接続速度に応じて変化させるような設定です。たとえば、 モデム間 の接続が V.32bis (14.4 Kbps) ならば、 モデムとコンピュータの間の接続を 19.2 Kbps とし、 モデム間の接続が 2400 bps の時には、モデムとコンピュー タ間も 2400 bps で接続するような設定をします。この場合、 getty は、モデムが返すリザルト コードからモデムとコンピュータの接続速度を認識す ることができませんので、getty は、 まず初期速度で login: とい う文字列を送信して、それに対する応答の文字列を監視します。 ここで、ユー ザ側の端末に無意味な文字列が表示された場合、 ユーザは意味のある文字列を 受信するまで <Enter> キーを繰り返し押さなければならない ということを知っていると仮定しています。 もし接続速度が間違っている場合、getty は、 ユーザから送られた文字を無意味な文字列として扱い、次の 速度を試します。そして、ここで再度 login: プロンプトを送信します。 この一連の動作が異常な回数繰り返されることも考えられますが、 普通は1度 か2度のキー入力があれば、 ユーザはまともなプロンプトを受信できます。こ のログインの動作が前者の固定速度による方法に 比べて美しくないのは明らか ですが、この方法では、 低速度で接続しているユーザに対するフル スクリー ンのプログラムからのレスポンスが改善されます。 このドキュメントでは、両方の設定方法について解説しますが、 どちらかとい うとモデム間の速度に応じて RS-232 インタフェースの速度が変化するような 設定の方に偏った説明になってしまうと思います。 <filename>/etc/gettytab</filename> /etc/gettytab /etc/gettytab は、&man.getty.8; の設定ファイルで、&man.termcap.5; と同様の形式で記述されます。ファイルのフォーマットや定 義できる機能についての詳細については、&man.gettytab.5; のマニュアルを ご覧ください。 固定速度の設定 モデムとコンピュータ間の通信速度を固定して使う場合、 おそらく /etc/gettytab に特に変更を加える必要はないはずです。 可変速度の設定 getty が利用するモデムとコンピュータの接続速度に関する情報を /etc/gettytab に記述する必要があります。もし、2400 bps のモ デムをお使いになるのであれば、既存の D2400 のエントリがそのまま利 用できるでしょう。このエントリは FreeBSD の 1.1.5.1 の gettytab には既に含まれていますので、 あなたの FreeBSD のバージョンでこのエント リが存在しているのであれば、 新たに追加する必要はありません。 # # Fast dialup terminals, 2400/1200/300 rotary (can start either way) # D2400|d2400|Fast-Dial-2400:\ :nx=D1200:tc=2400-baud: 3|D1200|Fast-Dial-1200:\ :nx=D300:tc=1200-baud: 5|D300|Fast-Dial-300:\ :nx=D2400:tc=300-baud: 高速モデムをお使いの場合は、おそらく /etc/gettytab に新たなエ ントリを追加する必要があります。以下の例は、14.4 Kbps のモデムを、最 大インタフェース速度を 19.2 Kbps として利用するためのエントリです。 # # Additions for a V.32bis Modem # um|V300|High Speed Modem at 300,8-bit:\ :nx=V19200:tc=std.300: un|V1200|High Speed Modem at 1200,8-bit:\ :nx=V300:tc=std.1200: uo|V2400|High Speed Modem at 2400,8-bit:\ :nx=V1200:tc=std.2400: up|V9600|High Speed Modem at 9600,8-bit:\ :nx=V2400:tc=std.9600: uq|V19200|High Speed Modem at 19200,8-bit:\ :nx=V9600:tc=std.19200: 上記の例を利用した場合、FreeBSD 1.1.5 以降ではパリティなし、8ビットの 接続が行われます。FreeBSD 1.1 では、:np: パラメータをファイルの 先頭の std.xxx のエントリに追加することで、パリティなし、 8ビットの接続が行われますが、 このパラメータを追加しなければ接続は偶数 パリティ、 7ビットになります。 上記の例では、まず 19.2 Kbps (V.32bis) によるモデムとコンピュータ間の 接続を試み、続いて 9600 bps (V.32)、2400 bps、1200 bps、300 bpsと順に 試み、再び 19.2 Kbps による接続を試みるという循環に入ります。この接続 速度の循環は、nx=(next table) の機能で実現されています。ま た、 各行はそれぞれ tc=(table continuation) の機能を使って、 その他の接続速度に依存した 標準的な 設定を取り込んでいます。 もし、お使いのモデムが 28.8 Kbps であったり、14.4 Kbps の圧縮転送の機 能を有効に利用したい場合は、19.2 Kbps よりも速い速度を利用するように 設定する必要があります。 以下に 57.6 Kbps から接続を試みる gettytab の設定例を示しておきます。 # # Additions for a V.32bis or V.34 Modem # Starting at 57.6 Kbps # vm|VH300|Very High Speed Modem at 300,8-bit:\ :nx=VH57600:tc=std.300: vn|VH1200|Very High Speed Modem at 1200,8-bit:\ :nx=VH300:tc=std.1200: vo|VH2400|Very High Speed Modem at 2400,8-bit:\ :nx=VH1200:tc=std.2400: vp|VH9600|Very High Speed Modem at 9600,8-bit:\ :nx=VH2400:tc=std.9600: vq|VH57600|Very High Speed Modem at 57600,8-bit:\ :nx=VH9600:tc=std.57600: もし、お使いの CPU が低速のものであったり、CPU に対する負荷が高い場合 で、16550A 系のシリアル ポートをお使いでない場合、57.6 Kbps の接続に おいて、sio の silo エラーが発生するかもしれません。 <filename>/etc/ttys</filename> /etc/ttys /etc/ttys には、 init が監視すべき tty のリストを記 述します。さらに、/etc/ttys は、 login に対してセキュリ ティに関する情報を提供します。(ユーザ root は、secure とマー クされている tty のみからログインできます)。詳しくは &man.ttys.5; のマニュアルをご覧ください。 /etc/ttys の既存の行を変更するか、 あるいは新しい行を追加して、init が自動的に新しいダイアル アップ サービス用のポートに対して getty プロセスを起動するようにしてください。書式は、固定速度の設 定か可変速度の設定かに関わらず、以下のとおりです。 ttyd0 "/usr/libexec/getty xxx" dialup on 1番目の項目は、このエントリで対象とするディバイス スペシャル ファイル です。上の例では ttyd0 として、 /dev/ttyd0getty に監視させることを表しています。2番目の項目 "/usr/libexec/getty xxx" (xxx は初期段階で使われる gettytab のエントリ に置き換えてください) が、init がこのディバイスに対して起動する プロセスです。3番目の dialup は、デフォルトのターミナル タイプで す。4番目の on は、 この行が有効であることを init に対して示 しています。5番目の項目に secure を指定することもできますが、これ は、 たとえばシステムのコンソールのように、 物理的に安全な端末に対しての み指定するようにしてください。 デフォルトのターミナル タイプ (上記の例では dialup) は、ローカル のユーザの好みによって異なってきます。ユーザがログイン スクリプトをカ スタマイズして、ターミナル タイプが dialup の時には自動的に他のター ミナル タイプを設定できるように、ダイアル アップのポートのデフォルトの ターミナル タイプには dialup が伝統的に用いられています。 しかし、筆者のサイトでは、ほとんどのユーザが VT102 エミュレイションを使ってい るので、ダイアル アップのポートのデフォルト ターミナル タイプとして vt102 を指定しています。 /etc/ttys の修正がすんだら、 以下のようなコマンドを使って init プロセスに HUP シグナルを送り、/etc/ttys を 読み込み直させてください。 &prompt.root; kill -HUP 1 ただ、もし初めてシステムを設定しているのであれば、 モデムが適切に設定さ れて接続されるまでは、init に対してシグナルを送らない方がいいか もしれません。 固定速度の設定 速度を固定する設定では、/etc/ttys の中で、getty に対し て固定速度のエントリを指定する必要があります。たとえば、 以下の例はポー トのスピードが 19.2 Kbps に固定されたモデムのための ttys のエント リです。 ttyd0 "/usr/libexec/getty std.19200" dialup on 別の速度でモデムのポートのスピードを固定したい場合は、 /etc/gettytab から適切なエントリを選んで、上の例の std.19200 の部分を std.speed として、適切な速度のも のに置き換えてください。 可変速度の設定 可変速度の設定では、ttys のエントリが、/etc/gettytab の中の適切な 自動速度調整 の初期設定のエントリを参照していなければな りません。 たとえば、もし前述の 19.2 Kbps から接続を試みる可変速度の設 定例 (V19200gettytab エントリ)をそのまま ttys に追 加したのであれば、 ttys エントリは以下のようになります。 ttyd0 "/usr/libexec/getty V19200" dialup on <filename>/etc/rc.serial</filename> または <filename>/etc/rc.local</filename> rc ファイル rc.local rc ファイル rc.serial V.32、V.32bis または V.34 モデムのような高速モデムを利用する場合、ハー ドウェア (RTS/CTS) フロー制御を行う必要があります。FreeBSD kernel のモデム ポートにハードウェア フロー制御のフラグを設定するため の stty コマンドを、FreeBSD 1.1.5.1 以降では /etc/rc.serial に、FreeBSD 1.1 では /etc/rc.local に 記述できます。 たとえば、FreeBSD 1.1.5.1 の /etc/rc.serial のサンプルは以下 のとおりです。 #!/bin/sh # # Serial port initial configuration stty -f /dev/ttyid1 crtscts stty -f /dev/cuai01 crtscts この例では、termio のフラグ crtscts をシリアル ポート #1 (COM2:) のダイアル インおよびダイアル アウトの初期化ディバイスに 設定しています。 古い FreeBSD 1.1 では、以下のエントリが crtscts フラグを設定する ために /etc/rc.local に追加されていました。 # Set serial ports to use RTS/CTS flow control stty -f /dev/ttyd0 crtscts stty -f /dev/ttyd1 crtscts stty -f /dev/ttyd2 crtscts stty -f /dev/ttyd3 crtscts FreeBSD 1.1 には初期化のためのディバイス スペシャル ファイルがないので、ディバイス ファイルそのものにフラグを設定して、その後はフラグをクリア してしまうような極悪人が現れないことを願うしかありません。 モデムの設定 もし、あなたのモデムがパラメータを不揮発ラムに 保存できるタイプならば、MS-DOS 上の Telix や FreeBSD 上の tip などのような通信プログラム を使って、 パラメータを設定してください。getty が利用する初期速度でモデムに接続して、以下の条件を満たすよ うに不揮発ラムの設定を変更してください。 接続時に CD 信号がオンになる 接続時に DTR がオンになり、 DTR オフで回線を切断しモ デムをリセットする。 送信時フロー制御には CTS を利用。 XON/XOFF によるフロー制御を行わない。 受信時のフロー制御は RTS を使用。 Quiet mode (リザルト コードを返さない) コマンド エコーを返さない。 これらを実現するためのコマンドやディップ スイッチの設定に関しては、モ デムのマニュアルを参照してください。 以下に、USRobotics Sportster の 14,400 bps の外づけモデムの設定例を示 しておきます。 ATZ AT&C1&D2&H1&I0&R2&W ことのついでに、たとえば、V42.bis や MNP5 のデータ圧縮を使用するかど うかなどのモデムの他の設定について確認、 調整しておくのもよいかもしれま せん。 さらに、USRobotics Sportster の 14,400 bps の外づけモデムでは、以下の ようなディップ スイッチの設定も必要です。他のモデムをお使いの方も、以 下の例を設定の参考にしてください。 スイッチ1: UP — DTR 標準 スイッチ2: 無視 (リザルト コードを単語形式にするか数値形式にす るか) スイッチ3: UP — リザルト コードを返さない スイッチ4: DOWN — コマンド エコーを返さない スイッチ5: UP — 自動着信 スイッチ6: UP — CD 標準 スイッチ7: UP — 不揮発ラムからデフォルト値をロードする スイッチ8: 無視 (Smart Mode/Dumb Mode) リザルト コードを返さないように設定しておかないと、 getty が誤っ て login: プロンプトをコマンド モードのモデムに送信してしまった場 合に、 モデムがこの入力をエコーしたり、この入力に対するリザルト コード を返してしまったりすることになります。この結果として、 モデムと getty の間で延々と無意味なやりとりが続いたというケースを聞いたこ とがあります。 固定速度の設定 固定速度の設定では、 モデムとコンピュータ間の通信速度をモデムとモデム間 の接続速度に関係なく、常に一定に保つように、 モデムを設定する必要があり ます。USRobotics Sportster の 14,400 bps 外づけモデムの場合、以下のコ マンドで、 モデムとコンピュータ間の速度が、コマンド送信時の速度に固定さ れます。 ATZ AT&B1&W 可変速度の設定 可変速度の設定では、シリアル ポートの速度が、 着信速度に応じて変化する ように設定しなければいけません。 USRobotics Sporster の 14,400 bps 外 づけモデムの場合、 以下のコマンドで、エラー訂正機能を利用した通信の場合 は、 コマンドを送信した時の通信速度にシリアル ポートの速度を固定し、エ ラー訂正機能を利用しない接続では、 シリアル ポートの速度が変化するよう に設定されます。 ATZ AT&B2&W モデムの設定の確認 ほとんどの高速モデムには、 現在の設定をある程度人間にも理解できる形式に して表示させるコマンドがあります。USRobotics Sporster の 14,400 bps 外づけモデムの場合は、ATI5 コマンドで、現在の不揮発ラムの設定を 表示することができます。 さらに、ディップ スイッチの設定も含めた現在の 設定を確認するためには、ATZ コマンドを送信してから、ATI4 コマンドを送信してください。 他のメーカーのモデムをお使いの場合は、 モデムのマニュアルで設定値の確認 方法を確認してください。 トラブルシューティング 以下の手順でダイアル アップ モデムの動作を確認することができます。 FreeBSD システムの動作確認 モデムを FreeBSD システムに接続し、 システムをブートします。あなたのモ デムにモデムの状態を確認するためのインジケータがあれば、 DTR のイ ンジケータの状態に注目してください。もし、 システムのコンソールに login: プロンプトが表示された時に、DTR のインジケータが点灯 すれば、FreeBSD が適切なポートに対して getty を起動し、モデムへ の着信を待っている状態であることを意味しています。 もし DTR のインジケータが点灯しない場合は、システムのコンソールか ら FreeBSD にログインして、ps ax を実行し、 FreeBSD が 適切なポー トに対してgetty プロセスを起動しようとしているのかどうか確認して ください。 プロセスに関する情報の中に、以下のような行が表示されるはずで す。 114 ?? I 0:00.10 /usr/libexec/getty V19200 ttyd0 115 ?? I 0:00.10 /usr/libexec/getty V19200 ttyd1 モデムにまだ着信がない状態の時に、 以下のように上とは異なる出力があった 場合、getty は既にモデム ポートのオープンを終了したということに なります。 114 d0 I 0:00.10 /usr/libexec/getty V19200 ttyd0 getty は、CD (carrier detect) 信号がオンの状態になるまで、 ポートのオープンを完了することはできませんので、 この場合は接続に問題が あるか、あるいはモデムの設定に問題があることが考えられます。 もし、適切なポートをオープンしようとしている getty が見あたらない 場合は、再度 /etc/ttys の内容を確認し、 書式などに誤りがないか 調べてみてください。また、ログ ファイル /var/log/messagesinit および getty から何か出力がないかどうかも確認してみてく ださい。 もし何かメッセージが記録されていたら、再度 /etc/ttys/etc/gettytab の二つの設定ファイルと、 ディバイス スペシャル ファイル /dev/ttyd? を確認し、 記述に誤りがないか、足りないエ ントリがないか、 足りないディバイス スペシャルファイルがないかといった 点について調べてみてください。 モデムで接続してみる 実際にモデムを使って別のコンピュータから 接続してみてください。この時、8ビット、パリティなし、 1ストップ ビットで接続するようにしてください。 接続後すぐにプロンプトが返ってこない場合や、 無意味な文字列が表示される 場合は、1秒に1回くらいの割合で <Enter> キーを押してみて ください。 しばらくたって、なおも login: プロンプトが現れない場合 は、BREAK 信号を送信してみてください。この時、端末側で使って いるモデムが高速モデムならば、 このモデムのインタフェースの接続速度を固 定してから、 再度ダイアル インしてみてください。(たとえば、USRobotics Sportster の場合は、AT&B1) それでもまだ login: プロンプトが表示されない場合は、 /etc/gettytab の以下の点について再度確認してみてください。 /etc/ttys の対応する行の 2番目の項目で、/etc/gettytab の中で定義されているエントリが指定されているか nx=/etc/gettytab の中で定義されているもの が指定されているか tc=/etc/gettytab の中で定義されているもの が指定されているか もしダイアル インしても、FreeBSD システム側のモデムが応答しない場合は、FreeBSD 側のモデムが DTR がオンになった時に電話にでるように設定さ れているかを確認してください。 もしモデムの設定に問題がなさそうならば、 モデムのインジケータ (がもしあれば) で、 DTR がオンになっているか を確認してください。 この確認のステップを数回繰り返しても うまくいかない場合は、一度休憩して、 しばらくたってから挑戦してみましょう。それでもだめなら、 おそらく &a.questions; にあなたのモデムについての情報と問題を書いたメールを送れ ば、 メーリング リストのメンバーが問題の解決を助けるべく努力してくれる でしょう。 謝辞 以下の方々から、 多くのコメントやアドバイスをいただきました。ここに謝意 を表します。 Sean Kelly <kelly@fsl.noaa.gov> 多くのすばらしい助言をいた だきました ダイアルアウトサービス ダイアルアウトサービス 原作: FAQ からの情報 訳: &a.jp.tmaruya;. 31 December 1996. 以下はモデムを利用して他のコンピュータと 接続する方法を説明しています。 これはリモートホストとターミナル接続を確立するための 適切な方法です。 これは BBS に接続するときによく使います。 この種の接続は PPP 接続に問題がある場合、Internet 上にあるファイルを 転送するのに非常に役に立ちます。FTP で何らかのファイルを転送したいのに PPP 接続を確立できない場合は、ファイルを FTP 転送するためにターミナルセッション を利用します。そして ZMODEM を利用してファイルを転送します。 <command>tip</command> や <command>cu</command> が実行できないはなぜ? あなたのシステムで tipcu というプログラムは uucpdialer というグループに所属しているユーザのみが 実行できるようになっているのでしょう。リモートホストやモデムを 利用できる dialer のグループにあなたのアカウントを 加えましょう。 もしくは下記のコマンドを使うことによって、そのシステムで tipcu を誰でも使えるようになります: &prompt.root; chmod 4511 /usr/bin/tip このコマンドは cu に対しておこなう必要はありません、それは cutip に対するハードリンクだからです。 私の Hayes モデムはサポートされていません、 どうしよう? 実際、tip の マニュアルページは古くなっています。既に Hayes ダイアラが組み込まれています。/etc/remote ファイル中で at=hayes を使ってください。 Hayes ドライバは、最近のモデムの新しい機能である BUSYNO DIALTONECONNECT 115200などのメッセージを 認識できるほど賢くはなく、単に混乱を起こすだけです。 tipを使う場合には、 (ATX0&W とするなどして) これらの メッセージを表示させないようにしなくてはいけません。 また、tip のダイアルのタイムアウトは 60秒です。モデムの タイムアウト設定はそれより短くすべきであり、 そうしないと tip は通信に問題があると判断するでしょう。 ATS7=45&W を実行してください。 実際、デフォルトの tip は Hayes の完全なサポートを しているわけではありません。解決方法は /usr/src/usr.bin/tip/tip の下の tipconf.h を変更することです。 もちろんこれにはソース配布ファイルが必要です。 #define HAYES 0 と記述されている行を #define HAYES 1 と変更し、そして makemake install を実行します。これでうまく動作するでしょう。 これらの AT コマンドを入力するには? /etc/remote /etc/remote ファイルの中で direct エントリを作ります。たとえばモデムが 1番目のシリアルポートである /dev/cuaa0 に接続されている場合、次のようにします: cuaa0:dv=/dev/cuaa0:br#19200:pa=none モデムがサポートする最大の bps レートを br フィールドに使います。そして tip cuaa0 を実行すると、モデムが利用できるようになります。 /dev/cuaa0 がシステムに存在しない場合は、次のようにします: &prompt.root; cd /dev &prompt.root; ./MAKEDEV cuaa0 または root になって以下のように cu コマンドを実行します: &prompt.root; cu -lline -sspeed line にはシリアルポートを指定します (例えば /dev/cuaa0)。そして speed には接続する速度を指定します (例えば 57600)。その後 AT コマンドを実行したら、~. と入力すれば終了します。 pn 機能の <literal>@</literal> 記号が使えません! 電話番号 (pn) 機能の中での @ 記号は、 tip に /etc/phone にある電話番号を参照するように伝えます。しかし @ の文字は /etc/remote のような 設定ファイルの中では特殊文字となります。 バックスラッシュを使ってエスケープをおこないます: pn=\@ コマンドラインから電話番号を指定するには? generic エントリと呼ばれるものを /etc/remote に追加します。 例えば次のようにします: tip115200|Dial any phone number at 115200 bps:\ :dv=/dev/cuaa0:br#115200:at=hayes:pa=none:du: tip57600|Dial any phone number at 57600bps:\ :dv=/dev/cuaa0:br#57600:at=hayes:pa=none:du: そして &prompt.root; tip -115200 5551234 のように利用できます。 tip より cu を使いたい場合、 cu の generic エントリを使います: cu115200|Use cu to dial any number at 115200bps:\ :dv=/dev/cuaa1:br#57600:at=hayes:pa=none:du: そして &prompt.root; cu 5551234 -s 115200 と実行します。 毎回 bps レートを入力しなければいけませんか? tip1200cu1200 用のエントリを記述し、適切な通信速度を br フィールドに設定します。tip は 1200 bps が正しいデフォルト値であるとみなすので、 tip1200 エントリを参照します。もちろん 1200 bps を使わなければならないわけではありません。 ターミナルサーバを経由して 複数のホストへアクセスしたいんです。 毎回接続されるのを待って CONNECT <host> と入力する かわりに、tip の cm 機能を使います。 例えば、/etc/remote に次のようなエントリを追加します: pain|pain.deep13.com|Forrester's machine:\ :cm=CONNECT pain\n:tc=deep13: muffin|muffin.deep13.com|Frank's machine:\ :cm=CONNECT muffin\n:tc=deep13: deep13:Gizmonics Institute terminal server:\ :dv=/dev/cuaa2:br#38400:at=hayes:du:pa=none:pn=5551234: これで、tip paintip muffin と実行すると pain や muffin のホストに接続することができ、 tip deep13 を実行するとターミナルサーバに接続します。 tip を使ってそれぞれのサイトの 複数の回線に接続できますか? これは大学に電話回線がいくつかあって 数千人の学生が接続しようとする 場合によくある問題です。 あなたの大学のエントリを /etc/remote ファイルに作成して、pn のフィールドには @ を使います: big-university:\ :pn=\@:tc=dialout dialout:\ :dv=/dev/cuaa3:br#9600:at=courier:du:pa=none: そして /etc/phone ファイルに大学の電話番号の一覧を書きます: big-university 5551111 big-university 5551112 big-university 5551113 big-university 5551114 tip は一連の電話番号を試みて、 最終的に接続できなければあきらめます。 リトライを続けさせたい場合は、tip を while ループに入れて 実行します。 CTRL+P を 1回送るために 2度押す必要があるのはなぜ? CTRL+P は通常 force (強制) 文字であり、 tip に次の文字が リテラルデータであることを伝えます。force 文字は 変数の設定 を意味する ~s エスケープによって他の文字にすることができます。 ~sforce=single-char と入力して改行します。single-char は、任意の 1バイト文字です。 single-char を省略すると NUL 文字になり、これは CTRL+2 や CTRL+SPACE を押しても入力できます。また、 single-char に SHIFT+CTRL+6 を割り当てる方法を使っているターミナルサーバもあります。 $HOME/.tiprc に次のように定義することで、任意の文字を force 文字として利用できます: force=<single-char> 打ち込んだ文字が突然すべて大文字になりました?? CTRL+A を押してしまい、caps-lock キーが壊れている場合のために設計された tipraise character モードに入ったのでしょう。 既に述べたように ~s を使って、 raisechar をより適切な値に 変更してください。もしこれら両方の機能を使用しないのであれば、 force 文字と同じ設定にすることもできます。 以下は CTRL+2 や CTRL+A などを頻繁に使う必要のある Emacs ユーザにうってつけの .tiprc ファイルのサンプルです: force=^^ raisechar=^^ ^^ は SHIFT+CTRL+6 です。 <command>tip</command> でファイルを転送するには? もし他の Unix のシステムと接続しているなら、 ~p(put) や ~t(take) でファイルの送受信ができます。これらのコマンドは 相手のシステムの上で catecho を実行することで 送受信をします。 書式は以下のようになります: ~p ローカルのファイル名 リモートのファイル名 ~t リモートのファイル名 ローカルのファイル名 この方法ではエラーチェックをおこないませんので、zmodem などの他のプロトコルを使った方がよいでしょう。 <command>tip</command> から zmodem を実行するには? ファイルを受信するには、 リモート側で送信プログラムを起動します。そして ~C rz と入力すると、ローカル側へのファイルの受信が 始まります。 ファイルを送信するには、 リモート側で受信プログラムを起動します。そして ~C sz files と入力すると、 リモート側への ファイルの送信が始まります。 シリアルコンソールの設定 シリアルコンソール 原作: &a.yokota;、&a.wpaul; この文書はほとんどが &a.wpaul; 氏の /sys/i386/boot/biosboot/README.serial に基づいています。 導入 FreeBSD/i386 オペレーティングシステムは、コンソールとして シリアルポート上のダム端末しか持たないシステムでも起動できます。 この様な構成はきっと次のような二種類の人達に便利でしょう。それは、 キーボードやモニタのないマシンに FreeBSD をインストールしたいシステム管理者と、 カーネルやデバイスドライバをデバッグしたい開発者です。 バージョン 3.1 から、FreeBSD/i386 は 3 ステージ構成のブートストラップ を用いるようになりました。最初の 2 つのステージは、 ブートディスクにある FreeBSD スライスの最初に格納されている、 ブートブロックのコードが行います。 それからブートブロックは、第 3 ステージのコードとしてブートローダ (/boot/loader) を読み込み、実行します。 (ブートプロセスの詳細については &man.boot.8; と &man.loader.8; をご覧下さい。) シリアルコンソールを設定するためには、ブートブロックコード、 ブートローダコード、カーネルを設定する必要があります。 FreeBSD バージョン 3.0 では、ブートローダはないので ブートストラップは 2 ステージです。つまり、ブートブロックが直接 カーネルをメモリに読み込みます。もしあなたが FreeBSD 3.0 を使って いるなら、このセクションでブートローダについて述べている部分は無視してください。 それでもシリアルポートをコンソールとして使うのに支障はありません。 FreeBSD バージョン 2.X と 3.X のシリアルポートドライバ &man.sio.4 は全く違いますので、設定も異なった方法で行う必要があります。 この章ではバージョン 2.X システム用の設定については扱っていません。 もしあなたが古いバージョンの FreeBSD を使っているなら、かわりに /sys/i386/boot/biosboot/README.serial を調べてみてください。 シリアルコンソールを設定するための 6 ステップ シリアルケーブルを用意してください。 ヌルモデムケーブル ヌルモデムケーブル、 もしくは標準シリアルケーブルとヌルモデムアダプタが必要となります。 シリアルケーブルについては をご覧下さい。 キーボードをはずして下さい。 たいていの PC システムは Power-On Self-Test (POST) の間にキーボードを検出し、もし見つからなければエラーと なります。また、キーボードがないことを大きな音で知らせ、 キーボードが接続されるまでは起動を中断するようなマシンもあります。 コンピュータがエラーを表示していても、 とにかく起動するなら特別な対応は必要ありません - (Phoneix BIOS を搭載しているマシンには、 + (Phoenix BIOS を搭載しているマシンには、 Keyboard failed と表示されても、正常に起動するものがあります)。 あなたのコンピュータがキーボードを接続していない状態で 起動しないようなら、(もし可能ならば) エラーを無視するように BIOS を設定する必要があります。設定方法の詳細については、 マザーボードのマニュアルを調べてください。 BIOS の設定でキーボードを Not installed にするということは、キーボードを使えないということを 意味しているわけではありません。これは、BIOS がキーボードがなくても文句を言わないように、電源投入時には キーボードを探すな、と指示するだけです。このフラグを Not installed にしていてもキーボードを 接続したままにできますし、ちゃんと動作します。 あなたのシステムが PS/2 マウスを使っているなら、 おそらくマウスもキーボード同様にはずす必要があるでしょう。 というのは、PS/2 マウスは部分的にキーボードとハードウェアを 共有しており、マウスを接続したままにしていると、 キーボードも存在する、と誤って検出してしまう可能性があるからです。 AMI BIOS を持つ Gateway 2000 Pentium 90MHz システム はこれに該当すると言われています。 一般的にこれは問題ではありません。なぜなら、どっちにしても マウスはキーボードなしではたいして役に立たないからです。 COM1: (sio0) にダム端末を接続してください。 ダム端末がなければ、かわりに古い PC/XT でモデム プログラムを走らせて使ったり、シリアルボートに他の Unix マシンを繋いだりできます。もしも COM1: (sio0) がなければ、作成してください。 今のところ、COM1: 以外のポートを 選択するためにはブートブロックの再コンパイルが必要です。 すでに COM1: を他の装置に 使っていた場合は、一時的にその装置をはずして いったん FreeBSD がうまく動作してから、 新しいブートブロックとカーネルをインストールしてください。 (上記はとにかくファイル/演算/端末サーバの COM1: が利用可能であると仮定して います。あなたが本当に何かのために COM1: が必要 (で、なおかつその何かを COM2: (sio1) に付け替えることができない) ならば、多分、そもそも 悩んでる場合ではありません。) カーネルコンフィグファイルの COM1: (sio0) に適切なフラグを 設定していることを確認してください。 関連するフラグ: 0x10 このポートのコンソールサポートを有効にします。 このフラグが設定されない場合、他のフラグは無視されます。 現在のところ、一つのポートしかコンソールサポートを有効に できません。(config ファイルに書かれた順番で) 最初にこのフラグを 指定されたポートが選択されます。 なお、このオプションを指定するだけでシリアルポートが コンソールとして使えるわけではありません。 このフラグと一緒に、以下のフラグも指定するかもしくは オプションも使ってください。 0x20 後述される オプション を無視して、(他に優先度の高いコンソールがない限り) このポートをコンソールとして指定します。 このフラグは FreeBSD バージョン 2.X の COMCONSOLE オプションに対応するものです。 フラグ 0x20 は必ず フラグ と一緒に指定されなければなりません。 0x40 (0x10 と組み合わせることで) このポートを予約し、通常のアクセスができない ようにします。 このフラグは、シリアルコンソールとして使いたいポートに 指定すべきではありません。 唯一の使い道は、ユニットがカーネルのリモートデバッグ用 であることを指定することです。 リモートデバッグの詳細については The Developer's Handbook を参照してください。 FreeBSD 4.0-CURRENT 以降では、 フラグ 0x40 の意味が若干異なり、 シリアルポートにリモートデバッグを指定するためには、 別のフラグを使います。 例: device sio0 at isa? port "IO_COM1" tty flags 0x10 irq 4 詳細については &man.sio.4; を参照して下さい。 もしこれらのフラグがセットされていなければ、(別のコンソールで) UserConfig を実行するか、 カーネルを再コンパイルする必要があります。 ブートドライブの a パーティションの ルートディレクトリに boot.config を作成してください。 このファイルは、ブートブロックコードに対してどのように システムを起動したいかを教えます。 シリアルコンソールを活かすためには、以下のオプションを幾つか dash; 複数の場合も一行で、設定する必要があります: 内蔵コンソールとシリアルコンソールの切替えを行います。 これを使用してコンソールデバイスを変更できます。 例えば、内蔵 (ビデオ) コンソールからブートした場合、 カーネルとブートローダがコンソールデバイスとして シリアルポートを使用するようにするため、 を使って指示できます。 反対に、シリアルポートからブートした場合、 ブートローダとカーネルがコンソールとして代わりに ビデオディスプレイを使用するようにするため、 を使用できます。 シングルとデュアルのコンソール設定を切り替えます。 シングル設定では、上記の オプションの状態によって、コンソールは内蔵コンソール (ビデオディスプレイ)かシリアルポートのいずれかになります。 デュアルコンソール設定では、ビデオディスプレイと シリアルポートの両方が、 オプションの状態によらず、同時にコンソールになります。 しかし、デュアルコンソール設定は、ブートブロックが 実行されている間でしか効果を持ちません。 一旦ブートローダに制御が移ると、 オプションによって指定されたコンソールが 唯一のコンソールになります。 ブートブロックがキーボードを検出するようにします。 キーボードが発見できなかった場合には、 オプションが自動的にセットされます。 現バージョンのブートブロックでは容量の制限により、 オプションは拡張キーボードしか 検出できません。キーが 101 個より少ない (そして F11 と F12 がない) キーボードは検出されない可能性があります。 この制限から、いくつかのラップトップコンピュータの キーボードは正しく検出されないでしょう。 残念ながら、この問題の回避策はありません。 オプションを使ってコンソールを 自動的に選ぶか、 オプションを使って シリアルコンソールを有効にしてください。 さらに &man.boot.8; で説明されている他のオプションも使う ことができます。 以外のオプションはブートローダ (/boot/loader) に渡されます。 ブートローダは、 オプションだけの状態を 調べることで内蔵ビデオとシリアルポートのどちらがコンソールに なるのか決めます。 つまり、/boot.config の中で オプションを指定して オプションを指定しなかった場合、 ブートブロック実行中でのみシリアルポートをコンソールとして 使うことができます。ブートローダは内蔵ビデオディスプレイを コンソールとして使います。 マシンを起動する。 FreeBSD を起動したとき、ブートブロックは /boot.config の内容をコンソールに表示 します。例えば、 /boot.config: -P Keyboard: no 行の二番目は、 /boot.config にオプション が指定してあるときだけ表示され、 キーボードが存在するかどうかを表します。 これらのメッセージは、シリアルか内蔵のいずれか、 あるいはその両方のコンソールに表示されます。 どちらに表示されるかは、 /boot.config の設定によって変わります。 オプション指定 メッセージの表示される場所 なし 内蔵 シリアル シリアルと内蔵の両方 シリアルと内蔵の両方 、キーボードが存在する場合 内蔵 、キーボードが存在しない場合 シリアル このメッセージが表示された後、 ブートブロックがブートローダのロードを再開し、 他の全てのメッセージがコンソールに表示されるまで、 若干時間がかかります。通常の環境では、ブートブロックに 割り込みをかける必要はありませんが、 ちゃんとセットアップされているかどうか確かめるために、 割り込みをかけることができるようになっています。 ブートプロセスに割り込みをかけるには、 コンソールの(Enter/Return キー以外の)キーをたたいて下さい。 ブートブロックはその時、操作を指定するためのプロンプトを表示します。 こんな風に表示されるでしょう。 >> FreeBSD/i386 BOOT Default: 0:wd(0,a)/boot/loader boot: 上に示したメッセージが、シリアルか内蔵、 あるいはその両方といった、/boot.config で指定したとおりのコンソールに表示されることを確認して下さい。 メッセージが正しいコンソールに表示されたら、Enter/Return キーを押してブートプロセスを継続してください。 もし、シリアルコンソールを利用するように設定しているのに シリアル端末にプロンプトが出てこない場合は、 設定のどこかに間違いがあります。 ブートブロック(とブートローダ、カーネル)に対して シリアルポートをコンソールに使うことを伝えるため、 割り込みをかけた時に を入力し、 (可能ならば) Enter/Return キーを押して下さい。そして、 一度システムを起動させてから、どこが悪いのかをチェックして下さい。 ブートローダがロードされ、ブートプロセスの第三ステージに いる時には、まだ内蔵コンソールとシリアルコンソールを切り替えることができます。 それにはブートローダの環境変数を適切に設定すれは良いのですが、 詳細については を参照してください。 まとめ このセクションで扱ったさまざまな設定と、 最終的に選択されるコンソールに関するまとめです。 Case 1: sio0 の flags に 0x10 をセットした場合 device sio0 at isa? port "IO_COM1" tty flags 0x10 irq 4 /boot.config 内のオプション ブートブロック実行中のコンソール ブートローダ実行中のコンソール カーネルのコンソール なし 内蔵 内蔵 内蔵 シリアル シリアル シリアル 内蔵、シリアルの両方 内蔵 内蔵 内蔵、シリアルの両方 シリアル シリアル 、キーボードが存在する場合 内蔵 内蔵 内蔵 、キーボードが存在しない場合 内蔵、シリアルの両方 シリアル シリアル Case 2: sio0 の flags に 0x30 をセットした場合 device sio0 at isa? port "IO_COM1" tty flags 0x30 irq 4 /boot.config 内のオプション ブートブロック実行中のコンソール ブートローダ実行中のコンソール カーネルのコンソール なし 内蔵 内蔵 シリアル シリアル シリアル シリアル 内蔵、シリアルの両方 内蔵 シリアル 内蔵、シリアルの両方 シリアル シリアル 、キーボートが存在する場合 内蔵 内蔵 シリアル 、キーボードが存在しない場合 内蔵、シリアルの両方 シリアル シリアル シリアルコンソールを利用する上で役に立つ情報 シリアルポートの通信速度をもっと速いものに設定するには デフォルトのシリアルポート通信速度は、9600 ボー、 8 ビット、パリティなし、ストップビット 1 です。 通信速度を変更したい場合には、少なくとも ブートブロックの再コンパイルが必要になります。 /etc/make.conf に次のような行を追加して、 新しくブートブロックをコンパイルして下さい。 BOOT_COMCONSOLE_SPEED=19200 もし、シリアルコンソールがブート時の オプション以外の方法で設定されていたり、 カーネルが利用するシリアルコンソールが ブートブロック実行中のものと異なる場合には、 カーネルコンフィグレーションファイルに次のオプションを追加して、 新しくカーネルをコンパイルしなければなりません。 options CONSPEED=19200 <devicename>sio0</devicename> 以外のシリアルポートを コンソールとして使うには sio0 以外のポートをコンソールとして使うには、再コンパイルが必要です。 それがどんな理由であれ、他のポートを使用する場合には ブートブロック、ブートローダ、カーネルを 次のようにして再コンパイルして下さい。 カーネルソースを取得する。 /etc/make.conf を編集し、 BOOT_COMCONSOLE_PORT に 使用したいポートのアドレス(0x3F8、0x2F8、0x3E8 or 0x2E8)を 設定してください。使用可能なのは sio0 から sio3 (COM1: から COM4:) までで、 マルチポートシリアルカードは使えません。 また、ここで割り込みの設定をする必要はありません。 設定を変更するために新たなカーネルコンフィグレーションファイルを作成し、 使いたいシリアルポートのフラグを適切に設定します。 例えば、sio1 (COM2:) をコンソールにしたければ、 device sio1 at isa? port "IO_COM2" tty flags 0x10 irq 3 または、 device sio1 at isa? port "IO_COM2" tty flags 0x30 irq 3 とします。その際、 他のシリアルポートにコンソールフラグをつけてはいけません。 ブートブロックを再コンパイルし、インストールする。 &prompt.root; cd /sys/boot/i386/boot2 &prompt.root; make &prompt.root; make install ブートローダを再コンパイルし、インストールする。 &prompt.root; cd /sys/boot/i386/loader &prompt.root; make &prompt.root; make install カーネルを再構築し、インストールする。 &man.disklabel.8; を使ってブートブロックをブートディスクに書き込み、 新しいカーネルから起動する。 シリアルポートから DDB デバッガを起動するには シリアルコンソールからカーネルデバッガを起動したい(これは リモートで診断する際に便利ですが、もしおかしな BREAK 信号がシリアルポートに送られるような場合には危険です!) 場合には、次のオプションを使ってカーネルをコンパイルして下さい。 options BREAK_TO_DEBUGGER options DDB シリアルコンソールにログインプロンプトを表示させるには シリアルコンソールからブートメッセージを確認したり、 シリアルコンソールを経由してカーネルデバッグセッションに入ることが できるので、これは必要がないかもしれませんが、 login プロンプトをシリアルポートに 出力するように設定することもできます。 これには、次のようにします。 エディタで /etc/ttys というファイルを開き、 次に示す行に移動して下さい。 ttyd0 "/usr/libexec/getty std.9600" unknown off secure ttyd1 "/usr/libexec/getty std.9600" unknown off secure ttyd2 "/usr/libexec/getty std.9600" unknown off secure ttyd3 "/usr/libexec/getty std.9600" unknown off secure ttyd0 から ttyd3 は、 COM1 から COM4 に対応しています。 設定したいポートの offon に変更して下さい。 また、もしシリアルポートの通信速度を変更しているなら、 std.9600 が実際の通信速度になるように、 例えば std.19200 のように変更して下さい。 さらに、実際のシリアル端末に合わせて、 端末タイプを unknown から変更することも可能です。 ファイルの編集が終了したら、 変更を有効化するために kill -HUP 1 を実行しなければなりません。 ブートローダからコンソールを変更するには 前セクションは、ブートブロックの設定を変更することでシリアルコンソールを セットアップする方法について解説していました。 このセクションでは、ブートローダへのコマンド入力と環境変数設定で コンソールの指定を行なう方法を紹介します。 ブートローダがブートブロックの後、 ブートプロセスの第三ステージとして呼び出されたとき、 ブートローダの設定には、ブートブロックの設定がそのまま使われます。 シリアルコンソールをセットアップする ブートローダとカーネルに対して シリアルコンソールを使用するように設定するには、 単に /boot/loader.rc のファイルに、次のような一行を書くだけで実現できます。 set console=comconsole これは、前セクションで扱ったブートブロックの設定に 全く関係なく機能します。 上に示した行は、 /boot/loader.rc の最初の行に書き込まなくてはいけません。 これはできるだけ早く、ブートメッセージをシリアルコンソールに 出力させるために必要なことです。 同様にして、次のように内蔵コンソールを指定することもできます。 set console=vidconsole もし、ブートローダの環境変数 console が設定されていない場合、 ブートローダ、そしてその次に起動するカーネルは ブートブロックで指定された オプションに 示されたコンソールを使用します。 3.2 以降のバージョンにおいては /boot/loader.rc ではなく、 /boot/loader.conf.local/boot/loader.conf にコンソール指定を書き込みます。 その場合、 /boot/loader.rc は次のようになっていなければなりません。 include /boot/loader.4th start それから、/boot/loader.conf.local を作成して、次の行をそこに追加して下さい。 console=comconsole か、もしくは console=vidconsole です。詳細については、&man.loader.conf.5; を参照して下さい。 その際、ブートローダはオプション指定なし (ブートブロックに オプションが指定されたのと等価)になり、 キーボードの存在を調べて 内蔵コンソールとシリアルコンソールを自動的に選択する機能は働きません。 <devicename>sio0</devicename> 以外のシリアルポートを コンソールとして使うには sio0 以外のシリアルポートを コンソールとして使うには、ブートローダを再コンパイルする必要があります。 それには、 に書かれている説明にしたがって下さい。 注意 シリアルコンソールというアイデアは、 グラフィック出力用のハードウェアやキーボードが接続されていない 専用サーバのセットアップを可能にするためのものです。 (ほとんど?)全てのシステムはキーボードなしで起動できますが、 不幸にも、グラフィックアダプタなしでは起動できないシステムはたくさんあります。 AMI BIOS を採用しているマシンでは、CMOS 設定の `graphics adapter' を `Not Installed' にするだけで、 グラフィックアダプタがなくとも起動できるように設定することができます。 しかしながら、多くのマシンはこのようなオプションを持っていませんし、 ディスプレイハードウェアがシステムに存在しないと起動しないように なっています。そのようなマシンでは、 モニタを接続する必要がなかったとしても、 適当なグラフィックカード(モノクロのジャンク品でも構いません)を 挿入したままにしておく必要があるでしょう。 また、AMI BIOS をインストールする、という手もあります。 diff --git a/ja_JP.eucJP/books/handbook/x11/chapter.sgml b/ja_JP.eucJP/books/handbook/x11/chapter.sgml index 9cea14f90d..0d3c47ae3d 100644 --- a/ja_JP.eucJP/books/handbook/x11/chapter.sgml +++ b/ja_JP.eucJP/books/handbook/x11/chapter.sgml @@ -1,1113 +1,1113 @@ X Window System この章では FreeBSD では、ユーザに強力なグラフィカルインタフェイスを提供するためにXFree86を採用しています。 XFree86 は X Window System のオープンソースな実装です。この章では FreeBSD における XFree86 のインストールと設定について解説します。XFree86 についての情報や、それがサポートするビデオハードウェアについては XFree86 の Web サイトをご覧ください。 この章を読めば以下のことがわかります。 X Window System の様々なコンポーネントと、それらが互いにどのように連携しているか。 XFree86 のインストールと設定について 様々なウィンドウマネージャのインストール方法 XFree86 での TrueType フォントの使い方 GUI ログイン (XDM) のセットアップ方法 この章を読み始める前に以下のことに注意してください。 サードパーティ製ソフトウェアのインストール方法について知っていること ()。 X を理解する 初めて X を使う場合、Microsoft Windows や Mac OS といった他の GUI 環境に慣れている人は多少ショックを受けるでしょう。 様々な X のコンポーネントについての詳細の全てや、それらがどのようにやり取りするかについては理解する必要はありませんが、基本的なことをいくつか知っていると X を使う際に強力な武器になるでしょう。 なぜ X? X は、UNIX 用に書かれた最初のウィンドウシステムではありませんが、最もポピュラーなものです。X のオリジナルの開発チームは X を書く前に別のウィンドウシステムを開発していました。そのシステムの名前は W (Windowの W) です。X は単にローマ字でその次の文字だというだけなのです。 X は XX Window SystemX11、もしくはその他の用語で呼ぶことができます。X11 を X Windows と呼ぶと気を悪くする人もいます。詳しくは &man.X.1; をご覧ください。 X のクライアント/サーバモデル X は最初からネットワークを意識してデザインされており、クライアント - サーバモデルを採用しています。 X では、X サーバはキーボードやモニター、マウスが接続されたコンピュータ上で動きます。このサーバはディスプレイの表示を管理したり、キーボード、マウスなどからの入力を処理したりします。各 X アプリケーション (XTermNetscape など) は クライアントになります。クライアントはこの座標にウィンドウを描いてくださいといったメッセージをサーバへ送り、サーバはユーザが OK ボタンを押しましたといったようなメッセージを送り返します。 家庭や小さなオフィスのような環境で、1 台しかコンピューターがないという場合には、X サーバと X クライアントは同じコンピューター上で動くことになるでしょう。しかし、X サーバを非力なデスクトップコンピューターで動かし、X アプリケーション (クライアント) は例えばオフィス全体を捌くような高機能で高価なマシンで動かすことも可能なのです。この場合、X のクライアントとサーバの通信はネットワーク越しに行なわれます。 これは、ある人々を混乱させることがあります。X での用語は彼らが想定するものとは正反対だからです。彼らはX サーバは地下にある大きなパワフルなマシンであり、X クライアントが自分たちのデスク上にあると想像するのです。 Xサーバとはモニターとキーボードがついているマシンのことであり、Xクライアントとはウィンドウを表示するプログラムだということを思い出してください。 X のプロトコルには、クライアントとサーバのマシンが同じ OS で動いていなければならないといったことを強制するものはなにもありませんし、同じ機種で動いている必要もありません。X サーバを Microsoft Windows や Apple の Mac OS で動かすことも可能ですし、そのようなソフトウェアもフリーのものから商用のまでいろいろとあります。 FreeBSD に付いてくる X サーバは XFree86 と呼ばれるもので、FreeBSD のライセンスに似たライセンスに従ってフリーで配布されています。FreeBSD 用の商用 X サーバも入手可能です。 X ウィンドウマネージャ X のデザイン哲学は UNIX のそれに非常によく似ており、ツールであってポリシーではないのです。 つまり、X はあるタスクがどのように達成されるべきかを示すものではありません。その代わり、ユーザにはツールが与えられ、それらをどうするかはユーザに委ねられているのです。 この哲学は、X ではスクリーン上でウィンドウがどのように見えるべきか、マウスでそれらをどうやって動かすか、ウィンドウ間を移動するのにどういうキーストロークを使うべきか (例えば Microsoft Windows における Alt Tab )、各ウィンドウのタイトルバーはどのように見えるべきか、それらはクローズボタンを持つべきかどうか、といったことを示すものではないというところまで拡大して解釈できます。 その代わりに、X ではそういったことをウィンドウマネージャと呼ばれるアプリケーションに任せるのです。X 用のウィンドウマネージャは以下のようにたくさんあります。AfterStepBlackboxctwmEnlightenmentfvwmSawfishtwmWindow Maker、などなど。これらのウィンドウマネージャはそれぞれ異なるルックアンドフィールを持っていますし、いくつかはバーチャルデスクトップをサポートしていますし、いくつかはデスクトップのマネージメントにキーストロークをカスタマイズできたり、スタートボタンやそれに類するもの持っているものもありますし、テーマをサポートをしており新しいテーマを適用することによってルックアンドフィールを完全に変えることができるものもあります。これらのウィンドウマネージャやさらに多くのものはportsコレクションの x11-wm というカテゴリーからインストールすることが可能です。 加えて、KDEGNOME といったデスクトップ環境はともにそれぞれのデスクトップに統合された独自のウィンドウマネージャを持っています。 それぞれのウィンドウマネージャはまた異なる設定機構を備えており、手で設定ファイルを編集しなければならないものや、設定作業のほとんどを GUI ツールですることができるものもあります。少なくとも 1 つ (sawfish) は Lisp 言語の変種で書かれた設定ファイルを持っています。 フォーカスポリシー ウィンドウマネージャのもう一つの機能はマウスのフォーカスポリシーに関するものです。 全てのウィンドウシステムは、ウィンドウを選択しキーストロークを受け付けるようにするための方法が必要です。 そして、どのウィンドウがアクティブなのかを示す必要もあります。 よく知られているフォーカスポリシーは click-to-focus と呼ばれるもので、このモデルは Microsoft Windows で利用されており、あるウィンドウ内でマウスをクリックすればそのウィンドウがアクティブになる、というものです。 X は特定のフォーカスポリシーを採用していません。代わりにウィンドウマネージャがそれをコントロールします。それぞれのウィンドウマネージャが、それぞれのフォーカスポリシーをサポートしています。全てのものは click-to-focus をサポートしていますし、多くのものは他の方法もサポートしています。 最もポピュラーなフォーカスポリシーは次のものでしょう focus-follows-mouse マウスポインターの下にいるウィンドウがフォーカスされるというものです。ウィンドウは最前面にある必要はありません。フォーカスを変えるには他のウィンドウにマウスポインターを動かすだけです。クリックする必要はありません。 sloppy-focus これは focus-follows-mouse を少し拡張したものです。focus-follows-mouse では、マウスがルートウィンドウ (背景) に移動した時には、フォーカスされているウィンドウがなくなり、キーストロークは単に破棄されます。sloppy-focus であればポインターが別のウィンドウに移った時のみフォーカスが変わり、現在のウィンドウから出ただけでは変わりません。 click-to-focus アクティブなウィンドウはマウスクリックにより選択されます。 ウィンドウは持ち上げられ、他の全てのウィンドウの前にきます。 ポインターが別のウィンドウに動いた時でも、全てのキーストロークがこのウィンドウに届きます。 多くのウィンドウマネージャはこういったものに加え、他のポリシーもサポートしています。ウィンドウマネージャ自身のドキュメントもよく読んでください。 ウィジェット X のツールを提供してもポリシーは提供しないというアプローチは、各アプリケーションでスクリーンに現われるウィジェットにも適用されます。 ウィジェットはクリック可能であったり、他の方法で操作可能な全てのユーザインタフェイス用アイテムを指す用語です。ボタンやチェックボックス、ラジオボタン、アイコン、リスト、などがそうです。Microsoft Windows はこれらをコントロールと呼んでいます。 Microsoft Windows や Apple の Mac OS はともに非常に厳密なポリシーをウィジェットに課しています。アプリケーション開発者は共通のルックアンドフィールに確実に従うことを想定されているわけです。X では、グラフィカルなスタイルやウィジェットのセットが特定のものに合わせたりすることに対してそれほど意識していませんでした。 すなわち、X アプリケーションに共通のルックアンドフィールを期待してはいけません。いくつかのポピュラーなウィジェットセットやその亜種があります。MIT のオリジナルの Athena ウィジェットや Motif (Microsoft Windows をモデルにした、斜めになったエッジやグレイの陰影のウィジェットセットを持っている)、OpenLook などです。 比較的新しい X アプリケーションのほとんどが、KDE で使われている Qt や GNOME プロジェクトで使われている GTK のようにモダンな見た目を持ったウィジェットセットを使っています。この点で言えば、UNIX のルックアンドフィールは収斂されてきており、初心者がより簡単に使えるようになってきています。 XFree86 のインストール XFree86 をインストールする前にどのバージョンを動かすかを決めてください。XFree86 3.x は XFree86 におけるメンテナンスブランチです。これは非常に安定しており、非常にたくさんの数のグラフィックカードをサポートしているのですが、もう新しい機能は追加されません。XFree86 4.X はシステムを完全に見直して設計したものであり、フォント自体のもっと良いサポートやアンチエイリアスなどといった多くの新しい機能も追加されています。残念ながら、この新しいアーキテクチャーではビデオドライバーの書き直しが必要なため、3.X でサポートされていたいくつかの古いカードはまだサポートされていません。 FreeBSD のセットアッププログラムを使えば、OS のインストール時に XFree86 3.3.6 をインストールして設定することができます (に書かれています)。XFree86 4.x を使いたい場合、まずベースとなる FreeBSD をインストールしてから XFree86 のインストールを行うことになります。例えば、XFree86 4.X を ports コレクションからビルドしてインストールする場合には次のようにします。 &prompt.root; cd /usr/ports/x11/XFree86-4 &prompt.root; make all install clean 他には pkg_add ツールを用いたり、XFree86 の Webサイトで直接提供されているものを利用して XFree86 4.X のバイナリパッケージをインストールするという方法もあります。 この章の残りでは、XFree86 をどのように設定すればいいか、また productive なデスクトップ環境をどのように設定するかについて解説します。 Christopher Shumway 寄稿: XFree86 の設定 XFree86 4.X XFree86 はじめに XFree86 4.Xの設定を始める前に, 次の情報が必要となります。 モニターの仕様 ビデオアダプタのチップセット ビデオアダプタのメモリー 水平走査周波数 垂直同期周波数 モニターの仕様は、XFree86 がどの解像度とリフレッシュレートで動くかを決定するために用いられます。 こういった仕様は、通常はモニターに付いてくるドキュメントや製造元のWebサイトから取得することができます。必要なものは二つの数字の範囲、一つは水平走査周波数でもう一つは垂直同期周波数、です。 ビデオアダプタのチップセットは XFree86 がグラフィックハードウェアとやり取りするためにどのドライバーモジュールを使うかを定義します。ほとんどのチップセットが自動認識されますが、正常に認識されない時のために知っておくとよいでしょう。 ビデオメモリーは、グラフィックアダプタがどの解像度とどの色数で動くことができるかを決めます。 これは、ユーザが自分のシステムにおける制限を理解するために知っておくことが重要です。 XFree86 4.Xの設定 XFree86 4.X の設定は複数のステップの処理に分けられます。 まずは XFree86 オプションを付けて初期設定ファイルを作りましょう。スーパーユーザになって次のようにしてください。 &prompt.root; XFree86 -configure これにより、現在のワーキングディレクトリに XF86Config.new という XFree86 の設定ファイルのスケルトンが生成されます。 XFree86 プログラムはシステム上のグラフィックハードウェアを検出し, そのハードウェア用の適切なドライバーを読み込む設定ファイルを作ります。 次のステップは、作成した設定ファイルで XFree86 が動くことを確認することです。 そのためには以下のようにします。 &prompt.root; XFree86 -xf86config XF86Config.new 黒とグレーのグリッドと X のマウスポインターが現われればその設定は成功です。 テストから抜け出すためには単に次のキーを同時に押します。 Ctrl Alt Backspace XFree86 4 のチューニング 次は XF86Config.new を好みに合うように調整します。 &man.emacs.1; や &man.ee.1; のようなテキストエディターでファイルを開いてください。 まずモニターの周波数を加えます。これらは水平と垂直の同期周波数と表現されるのが普通です。 これらの値は XF86Config.new の "Monitor" のセクションに次のように加えます。 Section "Monitor" Identifier "Monitor0" VendorName "Monitor Vendor" ModelName "Monitor Model" HorizSync 30-107 VertRefresh 48-120 EndSection HorizSyncVertRefresh というキーワードが設定ファイル中にない場合があります。その場合には, Horizsync キーワードの後には水平走査周波数の, VertRefresh キーワードの後には垂直同期周波数の正しい値を加えてください。 上の例では対象となるモニターの周波数が書かれています。 X はモニターが対応していれば DPMS (Energy Star) 機能を使うことができます。 'xset' プログラムでタイムアウトをコントロールしたり、強制的にスタンバイ、サスペンドや電源オフにすることができます。 モニターの DPMS 機能を有効にしたい場合は、"Monitor" のセクションに次の行を加えてください。 Option "DPMS" XF86Config XF86Config.new はエディターで開いたままにしておき, デフォルトの解像度と色数を好みで選びましょう。 Screen セクションに以下のように書きます。 Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Depth 24 Modes "1024x768" EndSubSection EndSection DefaultDepth というキーワードはデフォルトで動く色数について記述するためのものです。 &man.XFree86.1; のコマンドラインスイッチ -bpp が使用された場合はこちらが優先されます。 Modes というキーワードは与えられた色数におけるデフォルトの解像度を記述しておくためのものです。 上の例ではデフォルトの色数はピクセルあたり24ビットであり、この色数での解像度は1024ピクセル×768ピクセルです。 1024x768の解像度で動かすためには DefaultDepth というキーワードに 24 という値を与えて書き加えおき, "Display" サブセクションに求める DepthModes のキーワードを書いておきます。 ターゲットのシステムのフラフィックハードウェアによって定義されているように、VESAスタンダードモードのみがサポートされていることに注意してください。 最後に、設定ファイルを保存し、上の例にあるようにテストしてみてください。全てうまくいったなら、&man.XFree86.1; が見つけることができる共通の場所に設定ファイルを置きます。 これは、通常は /etc/X11/XF86Config/usr/X11R6/etc/X11/XF86Config です。 &prompt.root; cp XF86Config.new /etc/X11/XF86Config 設定ファイルを共通の場所に置いたら、設定は完了です。 &man.startx.1; で XFree86 4.X を起動するために x11/wrapper ポートをインストールします。 また、XFree86 4.X を &man.xdm.1; で立ち上げることも可能です。 高度な設定 Intel i810 グラフィックチップセットの設定 Intel i810 graphic chipset Intel i810 統合チップセットを設定には、XFree86にカードを制御させるためにAGP プログラミングインタフェイスである agpgart が必要になります。 agpgart を利用するには、&man.kldload.8; を使って agp.ko というカーネルローダブルモジュールをカーネルにロードしておく必要があります。 これは、/boot/loader.conf に次のように書いておけば &man.loader.8; がブート時に自動的にやってくれます。 agp_load="YES" 次に、プログラミングインタフェイス用にデバイスノードを作る必要があります。 AGP のデバイスノードを作るには、/dev で &man.MAKEDEV.8; を次のように起動します。 &prompt.root; cd /dev &prompt.root; sh MAKEDEV agpgart これで他のグラフィックカードと同様に設定を行うことができるようになります。 もし XFree86 4.1.0 (もしくはそれ以降) を使っており, fbPictureInit といったようなシンボルが見つからないというメッセージが現われるなら, XFree86 設定ファイルで Driver "i810" の後に次のような行を入れてみてください。 Option "NoDDC" Murray Stokely Contributed by XFree86 でのフォントの使用 Type1 フォント XFree86 に付いてくるデフォルトのフォントは通常のデスクトップパブリッシングアプリケーションにとっては理想的とは言えない程度のものです。 文字を大きくするとジャギーになりプロフェッショナルとは言えないようなものになりますし, Netscape での小さなフォントは頭が悪そうに見えます。 しかし、世の中には質の高い Type1 (PostScript) フォントがいくつかあり, XFree86 ではバージョン 3.X でも 4.X でもそれらを簡単に利用することができます。 例えば、URW フォントコレクション (x11-fonts/urwfonts) には高品質の Type1 フォント (Times Roman、Helvetica、Palatino など) が含まれています。 freefont コレクション (x11-fonts/freefont) にはもっとたくさんのフォントが含まれていますが, それらは Gimp のようなグラフィックソフトウェアで使用するためのものであり, スクリーンフォントとしては十分ではありません。さらに、XFree86 は簡単に TrueType フォントを使うように設定することも可能です。 後に出てくる TrueType フォントのセクション を参照してください。 上記の Type1 フォントコレクションを ports から入れる場合には次のコマンドを実行してください。 &prompt.root; cd /usr/ports/x11-fonts/urwfonts &prompt.root; make install clean freefont や他のコレクションでも同じようにします。 X サーバにこれらのフォントがあることを教えるには (XFree86 バージョン 3 の場合は /etc/, バージョン 4 では /etc/X11/ にある) XF86Config の適切な場所に次のような行を加えます。 FontPath "/usr/X11R6/lib/X11/fonts/URW/" 別の方法としては、X のセッション中に次のようなコマンドラインを実行します。 &prompt.user; xset fp+ /usr/X11R6/lib/X11/fonts/URW &prompt.user; xset fp rehash これは動くのですが、X のセッションが終了すると消えてしまいます。 消えないようにするには X の起動時に読み込まれるファイル (通常の startx セッションの場合は ~/.xinitrc, XDM のようなグラフィカルなログインマネージャを通してログインする時は ~/.xsession) に加えておきます。 三番目の方法は新しい XftConfig ファイルを使うことです。 これに関しては アンチエイリアスのセクションを参照してください。 TrueType フォント XFree86 4.X には TrueType フォントのレンダリング機能が組み込まれています。 この機能を実現するために二つの異なるモジュールがあります。 ここでは、"freetype" のほうがより他のフォントレンダリングバックエンドと似ているため, このモジュールを使うことにします。 freetype モジュールを使うためには /etc/X11/XF86Config ファイルに以下の行を追加するだけです。 Load "freetype" XFree86 3.3.X の場合, TrueType フォントサーバが別に必要となります。 Xfstt がよく使われるものです。 Xfstt とインストールするのは簡単で, x11-servers/Xfstt ポートを利用してください。 さて、まずは TrueType フォント用のディレクトリ (例えば /usr/X11R6/lib/X11/fonts/TrueType) を作り、そこに TrueType フォントを全て放り込みましょう。 Macintosh の TrueType フォントは、そのままでは使うことができませんので注意してください。 XFree86 で使うには Unix/DOS/Windows 用のフォーマットでなければなりません。 ファイルを置いたら ttmkfdir を使って fonts.dir ファイルを作ってください。 このファイルにより、X は新しいファイルがイントールされたことを理解します。 ttmkfdir は FreeBSD Ports コレクション, x11-fonts/ttmkfdir、からインストールできます。 &prompt.root; cd /usr/X11R6/lib/X11/fonts/TrueType &prompt.root; ttmkfdir > fonts.dir 次に TrueType フォントのディレクトリをフォントパスに追加します。 上の Type1 フォントの場合と同じように, &prompt.user; xset fp+ /usr/X11R6/lib/X11/fonts/TrueType &prompt.user; xset fp rehash とするか、もしくは XF86Config ファイルに 行を追加するのです。 これで終わりです。NetscapeGimpStarOffice といった全ての X アプリケーションから TrueType フォントを使うことができます。 (高解像度なディスプレイで見る Web ページ上のテキストみたいな) とても小さなフォントや (StarOffice にあるような) 非常に大きなフォントもかなり綺麗に見えるようになることでしょう。 フォントのアンチエイリアス XFree86 では 4.0.2 以降でフォントのアンチエイリアスをサポートしています。 今のところ、ほとんど全てのソフトがこの新しい機能を使うメリットを亨受するようにはなっていません。 しかし、Qt (KDE デスクトップ用のツールキット) はサポートしていますので, XFree86 4.0.2 以降と Qt 2.3 以降及び KDE を使う場合には全ての KDE/Qt アプリケーションでアンチエイリアスなフォントを使うことができます。 アンチエイリアスを使うように設定するには, /usr/X11R6/lib/X11/XftConfig ファイルを作ります (既にある場合には編集してください)。 このファイルを使えばいくつかの先進的な機能を使うことができるのですが, このセクションでは最も簡単なところだけを解説します。 まず、X サーバに対してアンチエイリアスをかけるべきフォントを指定します。 それぞれのフォントディレクトリに対して次のような行を加えます。 dir "/usr/X11R6/lib/X11/Type1" アンチエイリアスをかけたい他のフォントのディレクトリ (URW や truetype など) についても同じようにします。 アンチエイリアスはスケーラブルなフォント (基本的には Type1 と TrueType) にのみ有効ですので、ビットマップフォントのディレクトリは加えないようにしてください。 ここに含めたディレクトリは XF86Config ではコメントアウトします。 アンチエイリアスをかけることによって境界が少しぼやけ, そのためにとても小さなテキストはさらに読みやすくなり, 大きなフォントではギザギザが消えるのです。 しかし、普通のテキストにかけた場合には目が疲れることになります。 9から13ポイントのサイズのフォントについて、アンチエイリアスをかけないようにするには次の行を加えます。 match any size > 8 any size < 14 edit antialias = false; いくつかの等幅フォントは, アンチエイリアスをかけるとスペーシングがうまくいかなくなる場合があります。 特に KDE でその傾向があるようです。 解決策の一つとして、そういったフォントのスペーシングを100に設定する方法があります。 そうするためには次の行を加えてください。 match any family == "fixed" edit family =+ "mono"; match any family == "console" edit family =+ "mono"; (これによりfixedというフォントに他の "mono" という名前のエイリアスを付けます) そして次の行も加えてください。 match any family == "mono" edit spacing = 100; 等幅フォントが必要な時にはつねに Lucidux を使うように (このフォントは実際見目もよく、スペーシングの問題もありません) するためには最後の行を次のように変更します (最後の行は異なるものに同じファミリー名を付けています)。 match any family == "mono" edit family += "LuciduxMono"; match any family == "Lucidux Mono" edit family += "LuciduxMono"; match any family == "LuciduxMono" edit family =+ "Lucidux Mono"; 最後に、このファイルを自分の .xftconfig として保存し、次のコマンドを追加します。 includeif "~/.xftconfig" 最後に一つ。LCD スクリーンではサブピクセルサンプリングが必要な場合があります。 これは、基本的には (水平方向に分かれている) 赤、緑, 青の各コンポーネントを別々に扱うことによって水平方向の解像度を良くするというもので, そうすることによって劇的な結果が得られます。 これを有効にするには XftConfig ファイルに次の行を加えます (ディスプレイの種類にもよりますが最後は ``rgb'' ではなく ``bgr''や ``vrgb''、``vbgr'' の場合もあるので、試してみて最も良いものを使ってください)。 match edit rgba=rgb; アンチエイリアスは、次に X サーバを立ち上げた時から有効になります。 しかし、上でも述べたようにその恩恵を受けるにはプログラム側での対処も必要です。 今のところ Qt は対応しているため、KDE 環境全体でアンチエイリアスのかかったフォントを用いることができます (KDE についての詳しいことは をご覧ください)。 gtk+ を同じようにするパッチもありますので、そのパッチを当てた gtk+ を使ってコンパイルし直せば GNOME 環境や Mozilla もまたアンチエイリアスなフォントを使うことができます。 実際には x11/gdkxft という port があり, リコンパイルしなくてもアンチエイリアスなフォントを使うことができます。 詳しくは をご覧ください。 アンチエイリアスは、FreeBSD や XFree86 ではまだ新しい機能ですが、その設定はもっと簡単になるでしょうし, すぐにもっとたくさんのアプリケーションがサポートするようになるでしょう。 Seth Kingsley Contributed by X ディスプレイマネージャ 概要 X ディスプレイマネージャ (XDM) は X Window System のオプショナルな一部分であり、ログインセッションの管理に用います。 最低限の機能を実装した X 端末やデスクトップ, 大規模なネットワークディレプレイサーバといった場面ではこれが有用です。 X Window System はネットワークとプロトコルから独立しているため, ネットワークで繋がれた X のクライアントとサーバを動かすための設定はかなり幅が広くなります。 XDM はどのディスプレイサーバに接続するかを選択でき、ログイン名とパスワードの組み合わせなど認証情報を入力できるグラフィカルなインタフェイスを提供しています。 XDM がユーザに &man.getty.8; (詳しくはをご覧ください) と同じ機能を提供することを考えてみてください。 つまり、ディスプレイ上でシステムへのログインができ、ユーザの代わりにセッションマネージャ (通常は X のウィンドウマネージャ) を起動することができるのです。 それからXDMは、ユーザが作業を終えてディスプレイからログアウトする合図を送ってきてプログラムが終了するのを待ちます。 この時点で、XDM は次にログインするユーザのためにログイン画面や chooser 画面を表示することができるのです。 XDM の使用 XDM のデーモンプログラムは /usr/X11R6/bin/xdm にあります。 このプログラムは root になればいつでも起動することができ, ローカルマシン上のディスプレイの管理を始めます。 マシンをブートする際、いつも XDM を起動したい場合には、/etc/ttys にそのためのエントリを加えておくのが簡単です。 このファイルのフォーマットや使用方法についての詳細は を参照してください。デフォルトの /etc/ttys ファイルには仮想端末上で XDM のデーモンプログラムを起動するための行: ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure があります。このエントリーはデフォルトでは無効になっており, 有効にするには 5 番目のカラムを off から on にし、 の指示に従って &man.init.8; を再起動します。最初のカラムはこのプログラムが管理する端末の名前で, この場合 ttyv8 になります。 つまり、XDM は 9 番目仮想端末で起動されるということです。 XDM の設定 XDM の設定用ディレクトリは /usr/X11R6/lib/X11/xdm です。 このディレクトリには XDM の振る舞いや見た目を変更するために用いられるいくつかのファイルがあります。 だいたいは以下のような感じです。 ファイル 説明 Xaccess クライアント認証のルールセット Xresources デフォルトの X リソース Xservers 管理すべきリモートやローカルのディスプレイのリスト Xsession デフォルトのログイン時のセッションスクリプト Xsetup_* ログインインタフェイスの前にアプリケーションを起動するためのスクリプト xdm-config このマシンで動いている全てのディスプレイのグローバルな設定 xdm-errors サーバプログラムによって生成されるエラー xdm-pid 現在動いている XDM のプロセス ID このディレクトリにはまた、XDM の動作中にデスクトップをセットアップするために用いられるスクリプトやプログラムがいくつかあります。 それぞれのファイルの目的を簡単に解説しましょう。 正確な文法や使い方は &man.xdm.1; に記述されています。 デフォルトの設定では,単純な四角のログインウィンドウがあり, そこにはマシンのホスト名が大きなフォントで表示され、Login:Password: のプロンプトがその下に表示されています。 XDM スクリーンのルックアンドフィールを変えるにはここから始めるのがいいでしょう。 Xaccess XDM がコントロールするディスプレイに接続するためのプロトコルは X Display Manager Connection Protocol (XDMCP) と呼ばれます。 このファイルにはリモートのマシンからの XDMCP 接続をコントロールするためのルールセットが書かれます。 デフォルトでは、どんなクライアントからの接続も許可するようになっていますが, xdm-config を変更してリモートからのコネクションを待ち受けるようにしない限り問題ではありません。 Xresources これはディスプレイの chooser とログインスクリーン用の application-defaults ファイルです。 このファイルでログインプログラムの見た目を変更することができます。 フォーマットは XFree86 のドキュメントで記述されている app-defaults ファイルのものと同じです。 Xservers これは、chooser が選択肢として提供するリモートのディスプレイの一覧です。 Xsession XDM でログインした後に実行されるデフォルトのセッションスクリプトです。 通常、各ユーザは ~/.xsessionrc というカスタマイズしたセッションスクリプトを持っており、こちらが優先されます。 Xsetup_* これらは chooser やログインインタフェイスが表示される前に自動的に実行されます。 それぞれのディスプレイには, Xsetup_ に続けてローカルのディスプレイ番号を付けたもの (例えばXsetup_0) を名前とするスクリプトがあります。 典型的な使い方は xconsole のようなバックグラウンドで動かすプログラムを一つか二つ起動することです。 xdm-config app-defaultsの書式で書かれた、このインストレーションで管理されるすべてのディスプレイに適用される設定を保持しています。 xdm-errors このファイルには XDM が起動しようとしている X サーバからの出力が書き出されます。 XDM が起動しようとしているディスプレイがなんらかの理由でハングした場合, このファイルのエラーメッセージを見てください。 そういったメッセージは各ユーザの ~/.xsession-errors にもセッション毎に書き出されます。 ネットワークディスプレイサーバの起動 あるディスプレイサーバに他のクライアントが接続することができるようにするために, アクセスコントロールのルールを編集し、コネクションリスナーを有効にします。 デフォルトでは保守的な設定になっています。 XDM がそういったコネクションを待ち受けるようにするためには xdm-config にある次の行をコメントアウトします。 ! SECURITY: do not listen for XDMCP or Chooser requests ! Comment out this line if you want to manage X terminals with xdm DisplayManager.requestPort: 0 そして、XDM を再起動します。 app-defaults ファイルにおけるコメントは ! であっていつものような # ではないことに注意してください。 アクセス制限はもっと厳しくしたいかもしれません。 Xaccess にある例を参考にしたり、オンラインマニュアル &man.xdm.1; を参照したりしてください。 XDM の代わりになるもの デフォルトの XDM に代わるものがいくつかあります。 一つは KDM (KDE に付属しています) はその一つであり、この章の後ろで解説します。 KDM はログイン時にウィンドウマネージャを選ぶことができるのに加え, 見た目もかなり綺麗にしてくれます。 Valentino Vaschetto Contributed by デスクトップ環境 このセクションでは、FreeBSD 上の X で利用可能ないくつかのデスクトップ環境について解説します。 デスクトップ環境とは、単なるウィンドウマネージャから KDEGNOME といったような完全なデスクトップアプリケーションスイートまでカバーします。 GNOME GNOME について GNOME はユーザフレンドリーなデスクトップ環境で, ユーザはコンピューターを簡単に使ったり設定したりできるようになります。 GNOME にはパネル (アプリケーションを起動したり状態を表示したりするもの) 、デスクトップ (データやアプリケーションが置かれる場所), 標準的なデスクトップツールやアプリケーションのセット, そしてアプリケーションが互いにうまくやり取りできるような仕組みが含まれています。 他の OS や環境に慣れている人でも GNOME の提供するグラフィック環境であれば心地よく感じるでしょう。 GNOME のインストール GNOME をインストールする最も簡単な方法は, 第 2 章で解説した FreeBSD のインストールメニューのデスクトップ環境の設定を通して行うことです。 また、package や ports を利用しても簡単にインストールできます。 GNOME packageをネットワークからインストールするには, 以下のようにするだけです。 &prompt.root; pkg_add -r gnome GNOME をソースから構築する場合, 次のように ports ツリーを使いましょう。 &prompt.root; cd /usr/ports/x11/gnome &prompt.root; make install clean GNOMEがインストールできたら、デフォルトのウィンドウマネージャの代わりに GNOME を起動するように X サーバに教えます。 自分の .xinitrc が既にある場合には、ウィンドウマネージャを起動するところの行を /usr/X11R6/bin/gnome-session を起動するように変更するだけです。 特にこのファイルを用意していない場合には次のようにすれば十分でしょう。 &prompt.user; echo "/usr/X11R6/bin/gnome-session" > ~/.xinitrc 次に、startx とタイプすれば GNOME デスクトップ環境が起動します。 もし XDM のようなディスプレイマネージャを使っているなら, この方法ではうまくいきません。その代わり、実行可能な .xsession というファイルを作成し, 同じコマンドを起動するようにします。 そのためには、このファイルを編集してウィンドウマネージャを /usr/X11R6/bin/gnome-session で置き換えます。 &prompt.user; echo "#!/bin/sh" > ~/.xsession &prompt.user; echo "/usr/X11R6/bin/gnome-session" >> ~/.xsession &prompt.user; chmod +x ~/.xsession もう一つの方法は、ログイン時にウィンドウマネージャを選択できるようにディスプレイマネージャを設定することです。 KDE2 の詳細についてのセクションで KDE のディスプレイマネージャである kdm を使ってどのようにすればいいのかを解説しています。 GNOME でアンチエイリアスなフォントの使用 XFree86 デスクトップでは、フォントのアンチエイリアスは KDE 環境ではじめて登場し標準のインストールでサポートされていますが, GNOME 環境のような gtk アプリケーションでも可能です。 最も素直なやり方は恐らく x11/gdkxft port にある libgdkxftライブラリ を使うことです。 この port をインストールしたら /usr/X11R6/share/doc/gdkxft/README を注意深く読んでください。 あとは gtk アプリケーションにフォントのレンダリング関数を標準の libgdk.so よりも前に libgdkxft.so から探すようにさせるだけです。 これは、環境変数が正しい位置を指すようにするだけでできます。 Bourne シェル (/bin/sh) 系のシェルの場合, (The Gimp を起動するなら) 次のようにタイプします。 &prompt.user; LD_PRELOAD=/usr/X11R6/lib/libgdkxft.so gimp csh 系のシェルであれば次のようにしてください。 &prompt.user; setenv LD_PRELOAD /usr/X11R6/lib/libgdkxft.so &prompt.user; gimp もしくは, LD_PRELOAD=/usr/X11R6/lib/libgdkxft.so export LD_PRELOAD というコマンドを、X をどのように立ち上げるかに依って .xinitrc.xsession, もしくは /usr/X11R6/lib/X11/xdm/Xsession に書いておきます。 ただし、こうすると GTK の Linux バイナリを起動する時にトラブるかもしれません。 KDE2 KDE2 について KDE は最近の簡単に使えるデスクトップ環境です。 KDE によりユーザは以下のようなメリットを亨受します。 美しい現代風のデスクトップ ネットワーク透過なデスクトップ KDE デスクトップやそのアプリケーションを使う際の便利で統一されたヘルプにアクセスできるような統合されたヘルプシステム 全ての KDE アプリケーションで統一されたルックアンドフィール 標準化されたメニュー、ツールバー、キーバインディング、カラースキームなど 国際化: KDE は 40を越える言語で利用可能 集中したダイアログベースのデスクトップ設定 膨大な数の KDE アプリケーション KDE はその KParts テクノロジーをベースにしたオフィススイートを持っており, それにはスプレッドシート、プレゼンテーションアプリケーション、オーガナイザー, ニュースクライアントなどが含まれています。 KDE にはまた Konqueror と呼ばれる Web ブラウザーも付属しており、これは Unix システム上の他の Web ブラウザーの強力な競争相手です。 KDE の詳細については KDE の Webサイトをご覧ください。 KDE2 のインストール GNOME や他のデスクトップ環境と全く同じように, KDE をインストールする最も簡単な方法は第 2 章にある FreeBSD のインストールメニューでのデスクトップ設定を利用することです。 またまた同じことですが、package や ports コレクションからインストールするのも簡単です。 ネットワーク越しに KDE2 package をインストールするには次のようにします。 &prompt.root; pkg_add -r kde2 ソースから KDE を構築するには次のように ports ツリーを使いましょう &prompt.root; cd /usr/ports/x11/kde2 &prompt.root; make install clean KDE2 がインストールできたら X サーバに、デフォルトのウィンドウマネージャの代わりにこのアプリケーションを立ち上げるように教えます。 .xinitrc ファイルを次のように編集しましょう。 &prompt.user; echo "/usr/X11R6/bin/startkde" > ~/.xinitrc さぁ、これで startx でいつ X Window System を立ち上げても KDE2 がデスクトップになります。 xdm のようなディスプレイマネージャを使っている場合, 設定は少し異なります。 代わりに .xsession ファイルを編集しましょう。 kdm 用の説明はこの章の後のほうにあります。 KDE2 の詳細について さぁ、KDE2 のインストールができました。 ほとんどのことはヘルプページを見たりいろんなメニューをつつけばわかるでしょう。 Windows や Mac のユーザにも簡単なはずです。 KDE2 の最も良いリファレンスはオンラインドキュメントです。 KDE には独自の Web ブラウザー Konqueror が付属してますし、膨大な数の便利なアプリケーションや詳しいドキュメントもあります。 このセクションの残りではなんとなく使っているだけでは理解し難い技術的なところを解説します。 KDE ディスプレイマネージャ マルチユーザシステムの管理者であれば、ユーザを迎えるにあたってグラフィカルなログインスクリーンが欲しいと思うかもしれません。 xdm は上で述べたようにその目的で使うことができます。 しかしながら、KDE にはその代わりになる KDM が付いており、より魅力的な見た目で、ログイン時のオプションもたくさんあります。 特に、(メニューを使って) ログイン後にどのデスクトップ環境か (KDE2GNOME など) を簡単に選ぶこともできます。 まず最初に rootKDE2 のコントロールパネル kcontrol を起動しましょう。 一般には X 環境全体を root で動かすのは安全ではありませんので, ウィンドウマネージャは普通のユーザで起動しておいて (xterm - や KDEkconsole のような) + や KDEkonsole のような) ターミナルウィンドウを開き、su コマンドで root になり (そのユーザは wheel グループに入ってなければなりません) kcontrol とタイプします。 左側にあるシステム と書かれたアイコンをクリックし, ログインマネージャ をクリックします。 右側には様々な設定オプションがあり、これらについては KDE のマニュアルに細かく解説されています。右側にある セッション をクリックしてください。 新規追加 をクリックして様々なウィンドウマネージャやデスクトップ環境を加えます。 これらはただのラベルですので startkdegnome-session ではなく KDEGNOME とできます。 failsafe というラベルも入れてください。 他のメニューでも遊んでみてください。それらはだいたい見た目に関するもので, 見ればわかります。終わったら下のほうにある 適用 ボタンをクリックしてコントロールセンターを終了します。 (KDEGNOME といった) ラベルが何かを kdm が確実に理解してくれるように, xdm で使われているファイルを編集します。 KDE 2.2 では、これは変更され kdm は独自の設定ファイルを持ちます。 詳しくは KDE 2.2 のドキュメントを参照してください。 ターミナルウィンドウで root/usr/X11R6/lib/X11/xdm/Xsession ファイルを編集します。 中ほどに次のような行があるはずです。 case $# in 1) case $1 in failsafe) exec xterm -geometry 80x24-0-0 ;; esac esac このセクションにもう少し行を追加する必要があります。 KDE2GNOME というラベルが付いてると仮定すると, 以下の行を追加してください。 case $# in 1) case $1 in kde) exec /usr/local/bin/startkde ;; GNOME) exec /usr/X11R6/bin/gnome-session ;; failsafe) exec xterm -geometry 80x24-0-0 ;; esac esac KDE を尊重してログイン時のデスクトップのバックグラウンドを変える場合には /usr/X11R6/lib/X11/xdm/Xsetup_0 に次の行を加えます。 /usr/local/bin/kdmdesktop 最後に、次のブート時で立ち上がるように /etc/ttyskdm を書きます。 上の xdm のセクションの解説で /usr/X11R6/bin/xdm となっている部分を /usr/local/bin/kdm とすればいいだけです。 アンチエイリアスフォント 4.0.2 以降、XFree86 ではその "RENDER" 拡張によってアンチエイリアスがサポートされています。 (KDE で利用されているツールキットである) Qt では 2.3 以降でこの拡張がサポートされています。 その設定は X11 フォントでのアンチエイリアスに関して で解説されています。従って最新のソフトウェアであれば KDE2 デスクトップ上でアンチエイリアスを利用することが可能なのです。 KDE2 のメニューから 設定 -> ルックアンドフィール -> フォント と辿り, フォントとアイコンをアンチエイリアス表示 をクリックしてください。 KDE の一部になっていない Qt アプリケーションの場合, QT_XFT という環境変数をプログラムを起動する前に設定する必要があります。 XFCE XFCE について XFCEGNOME で使われている GTK ツールキットをベースにしたデスクトップ環境ですが、非常に軽く, 使用や設定が簡単なのにも関わらずシンプルで効率的なデスクトップです。 見ためとしては商用 Unix システムが採用している CDE にかなり似ています。XFCE の機能のいくつかを下に挙げておきます。 シンプルで使いやすいデスクトップ マウスのドラッグアンドドロップなどで全ての設定が可能 CDE に似たメインパネルとメニューやアプレット、ランチャー 統合されたウィンドウマネージャ、ファイルマネージャ、サウンドマネージャと GNOME 準拠のモジュールなど (GTK なので) テーマをサポート 速くて軽くて効率的: 古いマシンや遅いマシン、メモリーの限られたマシン向き XFCE に関する詳しい情報は XFCE の Web サイトから得られます。 XFCE のインストール (この文章を書いている時点で) xfce のバイナリーパッケージがあります。インストールするにはただ次のようにタイプするだけです &prompt.root; pkg_add -r xfce また、ports コレクションを利用してソースから作ることも可能です &prompt.root; cd /usr/ports/x11-wm/xfce &prompt.root; make install clean 次に X が起動した時に XFCE が起動されるように設定します。 次のようにしてください。 &prompt.user; echo "/usr/X11R6/bin/startxfce" > ~/.xinitrc 次に X が起動する時 XFCE のデスクトップが立ち上がります。 上と同様に、xdm のようなディスプレイマネージャを使っている場合には GNOME のセクションに書いてあるのと同じように .xsession ファイルを作り、/usr/X11R6/bin/startxfce を起動するようにします。 もしくは、kdm のセクションにあるようにディスプレイマネージャから XFCE を選ぶことができるように設定します。