| ## Using Samba Robert Eckstein, David Collier-Brown, Peter Kelly 共著 第一版 1999 年 11 月 1-56592-449-5, 注文番号: 4495 416 ページ, 34.95 ドル ハードコピー版(英語)を購入する 目次

| Chapter 7 印刷と名前解決 |

> ## 7.2 Windows クライアント上のプリンタへの印刷

> Windows 95/98 や Windows NT 4.0 が動作しているクライアントに接続されたプリンタに対して、Samba からアクセスすることも可能である。Samba には、Windows ベースのプリンタに印刷ジョブをスプールすることが可能な smbprint というツールが同梱されている。ただし、これを用いるためには、クライアントマシン上でプリンタを共有リソースとして設定する必要がある。まだ行なっていない場合は、スタートボタンからたどれる 図 7.7のような「プリンタ」ウインドウから、設定を行なうことができる。

> #### 図 7.7: 「プリンタ」ウィンドウ

> ローカルに接続されているプリンタを選択し(ここでは Canon のプリンタになっている)、右クリックをしてメニューを表示させ、「共有」を選択する。これで 図 7.8のような、プリンタのプロパティ中の「共有」タブが表示される。LAN 上の誰でも Windows のゲストユーザとして印刷できるようにしたい場合は、パスワードを入力しないこと。

> #### 図 7.8: プリンタの「共有」タブ

> ここまでの作業が完了したら、プリンタを標準的なプリンタのリスト(monyo 訳注: /etc/printcap のこと)に追加することで、Samba がワークグループ内の他のPCに利用させることが可能になる。UNIX 上でのインストールを簡単にするために、Samba の配布パッケージには、2つのサンプルスクリプト: smbprint と smbprint.sysvが含まれている。1つ目はBSD形式のプリンタ用で、もう1つは、System V プリンタ用に書かれたものである。

> ### 7.2.1 BSD プリンタ

> BSD UNIX がリモートのプリンタを認識できるようにするには、2つのステップが必要である:

> 1. /etc/printcap ファイル(もしくは同等のもの)にプリンタのエントリを記述する。

> 2. /var/spool ディレクトリにプリンタ用の設定ファイルを配置する。

> まず、 /etc/printcap ファイルを編集して、リモートプリンタのエントリを追加する。マシンがWindows 95/98 の場合、input フィルタ(`if`)のエントリには、 smbprintプログラムを設定する必要がある。以下の設定例は Linux マシン上で確認したものである:

>     laserjet:\
>       :sd=/var/spool/lpd/laser:\

>     # spool directory
>       :mx#0:\

>     # maximum file size (none)
>       :sh:\

>     # surpress burst header (no)
>       :if=/usr/local/samba/bin/smbprint:

>     # text filter

> その後上記の`sd` パラメータで指定したスプールディレクトリに設定ファイルを作成する必要がある(ディレクトリ自体を作成する必要があるかも知れない)。ファイルは .configという名前で、以下の情報を含んでいる必要がある:

> - プリンタサーバとなっているWindowsマシンのNetBIOS名

> - プリンタを共有しているサービス名

> - サービスにアクセスするためのパスワード

> 後ろ二つのパラメータは、Windows マシン上の該当リソースの「共有」ダイアログで設定されたものである。今回の例では .config ファイルには、以下の3行が書き込まれる:

>     server = phoenix
>     service = CANON
>     password = ""

> この設定を行なってから、Samba サーバのマシンを再起動し、通常のUNIXプログラムから印刷を行なってみてほしい。

> ### 7.2.2 System V プリンタ

> System V UNIX システムからの印刷ジョブの送信は、少しだけ簡単である。この場合、 smbprint.sysvスクリプトを /usr/local/samba/examples/printingディレクトリに配置して、以下のように設定を行なう:

> 1. スクリプト中の`server`, `service`, `password` パラメータを、それぞれNetBIOS名、共有されているプリンタサービス名、パスワードに変更する。例えば前述した例では、以下のように設定を行なえばよい:

>     server = phoenix
>     service = CANON
>     password = ""

> 2. 以下のコマンドを実行して、プリンタ構成ファイル中のプリンタと関連づけを行なう。新しいUNIXプリンタのエントリが`canon_printer`と名付けられていることに注意すること:

>     # lpadmin -p canon_printer -v /dev/null -i ./smbprint.sysv
>     # enable canon_printer
>     # accept canon_printer

> この作業を行なってから、Samba デーモンを再起動して、通常のUNIXプログラムを用いて印刷を行なってみてほしい。ネットワーク経由で、Windows 上のプリンタにデータを送信することが出来るようになっている筈である。

> ### 7.2.3 Samba の印刷オプション

> 表 7.2 に Samba の印刷オプションをまとめてある。

> 表 7.2: 印刷設定オプション
> オプション | パラメータ | 機能 | デフォルト | 範囲
> --- | --- | --- | --- | ---
> `printing` | `bsd`, `sysv`, `hpux`, `aix`, `qnx`, `plp`, `softq`, or `lprng` | UNIX システムに応じた印刷システムの形式を設定する | システムに依存する | 共有
> `printable (print ok)` | 真偽値 | 共有をプリンタ共有として機能させる | `no` | 共有
> `printer (printer name)` | 文字列 (UNIX のプリンタ名) | クライアントに公開するプリンタの名前を設定する | システムに依存する | 共有
> `printer driver` | 文字列 (プリンタドライバ名) | プリンタにデータを送信するためにクライアントによって使われるドライバ名を指定する | なし | 共有
> `printer driver file` | 文字列 (フルパス名) | プリンタドライバファイル名を設定する | なし | グローバル
> `printer driver location` | 文字列 (ネットワークパス名) | プリンタドライバの存在する共有のパス名(monyo 訳注:UNC 名)を指定する | なし | 共有
> `lpq cache time` | 数値 (秒単位の時間) | Samba が lpq ステータスをキャッシュする時間を秒単位で設定する | `10` | グローバル
> `postscript` | 真偽値 | 各ファイルの先頭に、`%!`を付加することで、印刷ジョブをポストスクリプトとして扱うようにする | `no` | 共有
> `load printers` | 真偽値 | printcap ファイル中の各プリンタを、プリンタ共有として自動的に設定する | `no` | グローバル
> `print command` | 文字列 (シェルコマンド) | 印刷を行なうためのUNIXコマンドを設定する | 以下を参照のこと | 共有
> `lpq command` | 文字列 (シェルコマンド) | 印刷キューの状況を返却するためのUNIXコマンドを設定する | 以下を参照のこと | 共有
> `lprm command` | 文字列 (シェルコマンド) | 印刷キューからジョブを削除するためのUNIXコマンドを設定する | 以下を参照のこと | 共有
> `lppause command` | 文字列 (シェルコマンド) | 印刷キュー上のジョブを一時停止させるためのUNIXコマンドを指定する | 以下を参照のこと | 共有
> `lpresume command` | 文字列 (シェルコマンド) | 印刷キュー上で一時停止させたジョブを再開させるためのUNIXコマンドを設定する | 以下を参照のこと | 共有
> `printcap name` `(printcap)` | 文字列 (フルパス名) | プリンタ構成ファイルの位置を指定する | システムに依存する | グローバル
> `min print space` | 数値 (キロバイト単位) | 印刷のために必要な最低限のディスクの空き容量を設定する | `0` | 共有
> `queuepause command` | 文字列 (シェルコマンド) | キューを一時停止させるためのUNIXのコマンドを指定する | 以下を参照のこと | 共有
> `queueresume command` | 文字列 (シェルコマンド) | キューを再開させるためのUNIXコマンドを指定する | 以下を参照のこと | 共有

> #### 7.2.3.1 printing

> `printing` 設定オプションは、Samba に、UNIX の印刷システムに関する情報を提供する。これは印刷パーサによって利用される。UNIXには印刷や印刷のステータスを管理するためのコマンドセットが幾つか存在する。Sambaは7つの異なったタイプを提供している。これらを 表 7.3に示す。

> 表 7.3: 印刷タイプ
> 変数 | 定義
> --- | ---
> BSD | Berkeley UNIX システム
> SYSV | System V
> AIX | AIX オペレーティングシステム (IBM)
> HPUX | Hewlett-Packard UNIX
> QNX | QNX Realtime Operating System (QNX)
> LPRNG | LPR Next Generation (Powell)
> SOFTQ | SOFTQ システム
> PLP | Portable Line Printer (Powell)

> このオプションの値はこれらの7つの値のいずれかになる。以下に例を示す:

>     printing = SYSV

> このオプションのデフォルト値はシステム依存であり、Samba がコンパイルされたときに決定される。多くのシステムでは、 configure スクリプトが利用する印刷システムを自動的に検出し、Samba の makefile 中で正しく設定を行なう。ただし、印刷システムが PLP, LPRNG, QNX 印刷システムの場合は、これを明示的に makefile 中かプリンタ共有で指定する必要がある。

> 一般的に用いられるシステムのタイプは、BSD と SYSV である。BSD UNIX サーバ上の各プリンタは、プリンタ構成ファイル - 通常 /etc/printcap で設定される。

> `printing`設定オプションにより、少なくとも`print` `command`, `lpq` `command`, `lprm` `command`という3つの印刷関連のオプションがそのプリンタ共有に対して自動的に設定される。Samba をこれらの印刷形式が提供されていないシステム上で動作させている場合は、単純にこれらのオプションを個々に設定すればよい。

> #### 7.2.3.2 printable

> printable オプションは、共有がプリンタサービスであることを示すために、`yes`に設定しなければならない。このオプションが設定されていない場合、共有はディスク共有として扱われる。このオプションは以下のように設定する:

>     [printer1]
>     	printable = yes

> #### 7.2.3.3 printer

> このオプションは、しばしば `printer` `name` とも呼ばれ、共有が出力するサーバ上のプリンタ名を指定する。このオプションにデフォルト値はなく、明示的に設定ファイル中で指定する必要がある。これは、UNIXシステムがデフォルトのプリンタ名が `lp` 等になっている場合でも同様である。このオプションは以下のように設定する:

>     [deskjet]
>     	printer = hpdkjet1

> #### 7.2.3.4 printer driver

> `printer` `driver` オプションは、SambaがWindowsクライアントに対してプリンタを通知するのに用いる文字列を設定する。オプションが正しく設定されていると、Windows のプリンタの追加ウィザードはどのプリンタを用いるかを予め知ることができるので、ダイアログボックスが一つ少なくなる分だけ、エンドユーザのインストール作業が簡単になる。この文字列は、 図 7.9でプリンタの追加ウィザードが表示している文字列と対比される。例えば、Apple の LaserWriter は通常 `Apple` `LaserWriter` という文字列、Hewlett Packard Deskjet 560C は `HP` `DeskJet` `560C` `Printer`という文字列を用いる。

> #### 図 7.9: Windows 98 におけるプリンタの追加ウィザードのダイアログボックス

> Samba でプリンタドライバを自動設定する方法については、この章の前半の Section 7.1.7, Automatically Setting Up Printer Driversで子細に記述されている。

> #### 7.2.3.5 printer driver file

> このグローバルオプションは Windows 95/98 用のプリンタドライバ定義ファイルの位置を設定する。このファイルは Samba のプリンタを用いるクライアントにプリンタドライバを提供するために必要である。このオプションのデフォルト値は /usr/local/samba/lib/printers.def である。デフォルト値は、以下のようにして変更することができる:

>     [deskjet]
>     	printer driver file = /var/printers/printers.def

> このオプションの詳細は、この章の前半の セクション 7.1.7で子細に記述されている。

> #### 7.2.3.6 printer driver location

> このオプションは、Windows 95/98 用のプリンタドライバと定義ファイルが置かれている共有の位置を指定する。このパラメータにデフォルト値はない。位置に付いてはネットワークのパス名(monyo 訳注: UNC 形式)で記述することが可能である。一般的には以下のようにして、自分のマシン上の共有を指定する:

>     [deskjet]
>     	printer driver location = \\%L\PRINTER$

> このオプションについても、この章の前半の Section 7.1.7 で子細に記述されている。

> #### 7.2.3.7 lpq cache time

> グローバルな `lpq` `cache` `time` オプションにより Samba が現在のプリンタの状況を記憶している秒数を設定することができる。この時間が過ぎると、Samba は lpq コマンド(もしくは `lpq` `command` オプションで指定した何らかのコマンド)を発行して状況を更新する。デフォルトは10秒であるが、多数のクライアントがあったり、`lpq` `command` の実行に非常に時間がかかっている場合は、この値を増加させることもできる。以下の例では、この時間を30秒に変更している:

>     [deskjet]
>     	lpq cache time = 30

> #### 7.2.3.8 postscript

> `postscript` オプションにより、指定されたプリンタが送信されたすべてのデータを Postscript として扱うようになる。これは、各印刷ジョブの先頭行の最初に、`%!` 文字を置くことによって行なわれる。このオプションは、通常 `^D` (control-D or end-of-file mark) を PostScript ファイルの先頭に挿入してしまう PC を用いてる際に利用される。このオプションは、非 PostScript プリンタを PostScript プリンタにするものではない。このオプションのデフォルト値は `no`である。この値は以下のようにして変更できる:

>     [deskjet]
>     	postscript = yes

> #### 7.2.3.9 print command, lpq command, lprm command, lppause command, lpresume command

> これらのオプションにより、Samba がプリンタを制御したり、データを送信したりするときに、どういった UNIX のコマンドを利用するかが指定される。関係する UNIX コマンドは、 lpr (send to Line PRinter), lpq (List Printer Queue), lprm (Line printer ReMove) およびオプションであるが、 lppause, lpresume である。システムのデフォルトを変更する必要がある場合に備えて、Samba はこれらのコマンドに因んだオプションを提供している。一例として以下の場合を考えてみよう:

>     lpq command = /usr/ucb/lpq %p

> これにより、`lpq command` に /usr/ucb/lpq が設定される。同様に

>     lprm command = /usr/local/lprm -P%p %j

> では、Samba がプリンタを削除するコマンドが /usr/local/lprm となり、`%j` 変数を用いて、印刷ジョブの番号が提供される。

> これらのオプションのデフォルト値は`printing` オプションの値に依存する。 表 7.4 では printing オプション毎のデフォルト値を表示している。最も一般的な 印刷システムは BSD である。

> 表 7.4: 様々な printing コマンド毎のデフォルトのコマンド
> オプション | BSD, AIX, PLP, LPRNG | SYSV, HPUX | QNX | SOFTQ
> --- | --- | --- | --- | ---
> `print command` | `lpr -r -P%p %s` | `lp -c -d%p %s; rm %s` | `lp -r -P%p %s` | `lp -d%p -s %s; rm %s`
> `lpq command` | `lpq -P%p` | `lpstat -o%p` | `lpq -P%p` | `lpstat -o%p`
> `lprm command` | `lprm -P%p %j` | `cancel %p-%j` | `cancel %p-%j` | `cancel %p-%j`
> `lppause command` | `lp -i %p-%j -H hold` (SYSV only) | None | None | None
> `lpresume command` | `lp -i %p-%j -H resume`(SYSV のみ) | None | None | `qstat -s -j%j -r`

> 通常 Samba においてこれらのオプションを変更する必要はないが、 `print` `command`は例外である。このオプションは、印刷システムに`-r` (印刷後にジョブを削除する) オプションのあるコマンドが存在しない場合、明示的に設定する必要がある場合がある。以下その場合の例である:

>     /usr/local/lpr -P%p %s; /bin/rm %s

> 少し工夫することで、これらの smb.conf のオプションはデバッグの目的に利用することも可能である

>     print command = cat %s >>/tmp/printlog; lpr -r -P%p %s

> 一例をあげると、上記の設定はファイルが実際にSambaサーバに送信されたかどうかを確認することを可能とする。これによりすべての送信内容が /tmp/printlog ファイル中に格納される。

> BSD の次に一般的な印刷システムとしては SYSV(System V) 形式の印刷システムや IBM の AIX や Hewlett-Packard の HP-UX 等幾つかの SYSV 系列の印刷システムがあげられる。これらのシステムには /etc/printcap ファイルが存在せず、代わりに `printcap` `file` オプションにより、システムに適切な lpstat コマンドを指定する(monyo 訳注: printcap ファイルの誤りか?). これにより、Samba は lpstat コマンドからプリンタのリストを入手する。別の対策として、グローバルな設定オプションである `printcap` `name` にダミーの printcap ファイル名を指定することも可能である。後者の場合、ファイルには以下のような行が含まれている必要がある:

>     lp|print1|My Printer 1
>     print2|My Printer 2
>     print3|My Printer 3

> 各行は、プリンタ名とその別名を示す。この例の場合、最初の行のプリンタは `lp`, `print1`, `My` `Printer` `1` のいずれか利用者の好みの名前で呼ぶことが可能である。先頭の名前が Samba がプリンタ関連のコマンドを実行する際に`%p` 変数に代入される。

> Samba では、LPRNG (LPR New Generation) と PLP (Public Line Printer) という印刷システムも提供されている。これらはパブリックドメインで、オープンソースの印刷システムであり、ベンダが提供するソフトウェアの問題に対処するため、多くのサイトで用いられている。更に、SOFTQ と QNX リアルタイムオペレーティングシステムも、Samba によってサポートされている。

> #### 7.2.3.10 load printers

> `load` `printers` オプションにより、Samba は すべての既知のプリンタに対する共有を作成し、それらをブラウズリストに載せるようになる。Samba は /etc/printcap (or system equivalent) 上の各プリンタ名毎にプリンタ共有を作成し、リストに追加する。例えば、 printcap ファイルが以下のようになっている場合:[2]

> > [2] このファイルを初めてみる読者のために、各行にコメントを付加した。

>     lp:\
>       :sd=/var/spool/lpd/lp:\

>     # spool directory
>       :mx#0:\

>     # maximum file size (none)
>       :sh:\

>     # surpress burst header (no)
>       :lp=/dev/lp1:\

>     # device name for output
>       :if=/var/spool/lpd/lp/filter:

>     # text filter

>     laser:\
>       :sd=/var/spool/lpd/laser:\

>     # spool directory
>       :mx#0:\

>     # maximum file size (none)
>       :sh:\

>     # surpress burst header (no)
>       :lp=/dev/laser:\

>     # device name for output
>       :if=/var/spool/lpd/lp/filter:

>     # text filter

> 以下のように指定することで:

>     load printers = yes

> `[lp]` と `[laser]` の共有は、Samba の起動時に利用可能なプリンタ共有として自動的に作成される。両方の共有とも、設定オプションとして `[printers]` セクションで指定されたものが用いられ、Samba サーバのブラウズリスト上にも表示される。

> #### 7.2.3.11 printcap name

> `printcap` `name` オプション(`printcap`とも呼ばれる) がプリンタ共有に記述されていた場合、Samba はシステムのプリンタ構成ファイルとしてここで指定されたファイルを利用するようになる。このファイルは通常 /etc/printcap であるが、ネットワーク上で共有したいプリンタのみを含んだファイルに設定することも可能である。この値はサーバ上のプリンタ構成ファイルをさすフルパス名である必要がある:

>     [deskjet]
>     	printcap name = /usr/local/printcap

> #### 7.2.3.12 min print space

> `min` `print` `space` オプションは、印刷が行なわれる際に必要な最低のスプール領域のサイズを設定する。これをゼロ(デフォルト値)にした場合、チェックは行なわれない。それ以外の数値にした場合は、印刷時に必要なキロバイト単位の空きスペースとなる。このオプションにより、印刷ジョブがディスクの空き領域を喰い潰してしまい、他のプロセスにも影響が及ぶ事態を避けることができる:

>     [deskjet]
>     	min print space = 4000

> #### 7.2.3.13 queuepause command

> この設定オプションは、Samba に個々の印刷ジョブではなく、印刷キュー全体を一時停止させるコマンドを指定する。デフォルト値は printing type の指定に依存する。このオプションを変更する必要はないであろう。

> #### 7.2.3.14 queueresume command

> この設定オプションは、Samba が印刷キュー上のあるジョブ単位ではなく、一時停止した印刷キューを再開させるコマンドを指定する。デフォルト値は printing type の指定に依存する。このオプションを変更する必要はないであろう。

7.1 Samba への印刷ジョブの送信 |  | 7.3 Samba の名前解決

O'Reilly Home | O'Reilly Bookstores | How to Order | O'Reilly Contacts
International | About O'Reilly | Affiliated Companies

© 1999, O'Reilly & Associates, Inc.