目次
印刷はユーザーに取ってしばしばミッションクリティカルなサービスである。Sambaは、 Windows ワークステーションからなるクライアントネットワークのために、信頼性が あり、シームレスなこのサービスを提供出来る。
Samba印刷サービスは、ファイルサービス機能と並列に、あるいは専用のサーバー上で、スタンド
アロンかドメインメンバーサーバーで動かす事が出来る。これは、必要に応じて強力に、あるいは
比較的穏やかにセキュアにすることが出来る。設定は簡単になることも複雑になることもある。
有効な認証スキームは、以前の章にあるようなファイルサービス用に説明されたのと基本的に
同じである。全体的に、現在、Sambaの印刷サポートは、多くの場合、付加機能を付けた上で、
Windows NTまたはWindows2000印刷サーバーと完全に対等で、置き換えることが出来る。
クライアントはクライアント上でなじみのあるポイント アンド プリント
メカニズムを通して、ドライバーをダウンロードし、プリンターをインストールできる。
ログオンスクリプト
で実行されるプリンターのインストールは何の問題もない。
管理者はおなじみのプリンター追加ウィザード
を使ってクライアントで
使うことによって、ドライバーのアップロードと管理ができる。更に追加の便利な機能としては、
ドライバーとプリンター管理はコマンド行かスクリプトを通して実行でき、これは、大量の
プリンターがある場合により効率的である。もしも、集中した印刷ジョブの利用状況管理
(訳注:原文はaccount)(すべての単一ページの追跡といろいろな統計レポートに生データを
供給すること)が必要とされる場合、この機能は、Sambaサーバー下の印刷サブシステムとして、
新しい共通UNIX印刷システム(CUPS)によって最もよくサポートされている。
この章では、より現代的なUNIXのBSDとSystem V形式の印刷システムによって実装された、 Sambaの印刷機能の基礎を概観する。この章中の情報の大多数はCUPSにも適用出来る。 もしもCUPSを使っているならば、次の章に飛んでも良いが、すべきことのうち少なくとも いくつかはきっと取りこぼすだろう。さらなる情報は、 CUPS 印刷環境を参照のこと。
Sambaの印刷サポートは、常時それが動作しているUNIX OS上の、インストールされている印刷
サブシステム上に依存している。Sambaは仲介者
である。Windows(か
他のSMB)クライアントから印刷ファイルを受け取り、それをさらなる処理のために実際の印刷
システムに渡す。そのため、両方に接続する必要がある。すなわち、Windows印刷クライアントと
UNIX印刷システムである。それゆえ、異なった機能と異なった形でアクセスされる、種々の
UNIX印刷サブシステムと同様、おのおのが異なって振る舞う種々のクライアントOSの間での違いを
認める必要がある。
この章では伝統的なUNIX印刷方式について取り扱う。次の章では、より最新のCUPSについて、 より詳しく説明する。
現在、Samba管理の側面において、最も問題があることの一つは印刷の設定であることは、Samba メーリングリスト上で投稿されたことでも明らかである。多くの新しいSamba管理者は、Sambaが ある種の印刷処理を実行しているというような印象を持っている。保証するが、Sambaは 何らの印刷処理をも実行しない。何らの印刷フィルタリングも行わない。
Sambaは、ローカルスプール領域にスプールされる、クライアントからデータストリーム (印刷ジョブ)を受け取る。印刷ジョブ全部を受け取ると、SambaはローカルのUNIX/Linux印刷 コマンドを起動し、それに対してスプールされたファイルを渡す。それはローカルの印刷 サブシステムを起動し、正しく印刷ジョブを処理し、プリンターに対してデータを渡す。
Sambaサーバー経由でWindowsクライアントからUNIXプリンターへの印刷がうまくいくためには、 6つ(潜在的には7つ)のステージがある:
プリンター共有に対してWindowsがコネクションをオープンする。
Sambaはユーザーを認証しなければならない。
Windowsがネットワーク経由でSambaのスプール領域に印刷ファイルの コピーを送る。
Windowsはコネクションをクローズする。
Sambaは、UNIX印刷サブシステムの印刷領域経由でファイルを扱う ために印刷コマンドを起動する。
UNIX印刷サブシステムが印刷ジョブを処理する。
印刷ファイルはSambaスプール領域から明示的に削除される必要がある。 これの要素は使用しているマシンのプリントスプーラの構成の設定に依存する。
Sambaの印刷動作を制御するための設定パラメーターは多数ある。それらの概要については
smb.conf
のマニュアルページを参照してほしい。他のパラメーターと同様、グローバルレベル
(一覧上でGとタグが付いているもの)とサービスレベル
(S)パラメーターがある。
これらは明示的に共有定義に記述しなくても良い。
もしもエラーになったならば、(もしも動作させたならば)testparm
ユーティリティでそれを見つけることが出来、そのことを表示する。
これらはsmb.conf
中の[global]
セクションで指定しても良い。この場合、個人毎すべてかサービスレベルの
共有の既定値の動作を定義する(同じパラメーターに対して異なった設定の定義を
を持たない形で提供されるので、グローバルの既定値を上書きする)。
BSD印刷環境での簡単な設定は、簡単な印刷の設定を示して
いる。もしも現在使っている環境と比較して、OSベンダーによってあらかじめ設定されている追加の
パラメーターを見つけるかもしれない。以下は、パラメーターについての議論と説明である。この例は
多くのパラメーターを使っていない。しかし、多くの環境において、すべてのクライアントに対して
印刷を有効にする有効なsmb.conf
ファイルを提供するためには、これは十分である。
これは単に例としての設定である。Sambaはすべての設定パラメーターに対して既定値を割り当てて
いる。既定値は保守的でかつ賢明な値となっている。パラメーターがsmb.conf
ファイル中で指定
されたならば、それは既定値を上書きする。rootでtestparm
ユーティリティ
を実行すると、smb.conf
ファイルの設定のように両方の既定値とすべての設定を報告する
機能がある。Testparm
は間違った設定のすべてに対して警告を表示する。
完全な出力は360行を軽く超えるので、その結果をページャープログラムに渡しても良いだろう。
設定ファイルの文法は理解するのが簡単である。その文法について細かいことを知らなくても
よい。この文書のどこかで説明されているが、Sambaはある種の綴りミスには寛容であり
(たとえば、browsableの代わりにbrowseable
など)、綴りは大文字小文字を無視する。論理値に対して、Yes/No
か
True/False
を使うことも出来る。名前のリストは、カンマ、空白か
タブで分離できる。
暗黙で使えるものを含む、Samba中で印刷に関連したすべての(あるいはほとんど全部)を見る
ためには、以下で概要を説明しているコマンドを使う。このコマンドは
testparm
の出力中に現れるすべての
lp
、print
、spool
、driver
,
ports
と[
を検出する。これは、動作している
smbd
の印刷設定の簡便な概要を提供する。このコマンドは個別に作成された
プリンター共有かそれが使えるスプールパスを表示しない。
上記の例で示される設定で設定したSambaの出力は以下の
ようになる:
root#
testparm -s -v | egrep "(lp|print|spool|driver|ports|\[)"
Load smb config files from /etc/samba/smb.conf Processing section "[homes]" Processing section "[printers]" [global] smb ports = 139 445 lpq cache time = 10 load printers = Yes printcap name = /etc/printcap disable spoolss = No enumports command = addprinter command = deleteprinter command = show add printer wizard = Yes os2 driver map = min print space = 0 max print jobs = 1000 printable = No printing = bsd print command = lpr -r -P'%p' %s lpq command = lpq -P'%p' lprm command = lprm -P'%p' %j lppause command = lpresume command = printer name = use client driver = No [homes] [printers] path = /var/spool/samba printable = Yes
Sambaの既定値の動作によって暗黙で追加される設定を検査するのは簡単である。 確認:Sambaの将来の関係で重要かもしれない。
Samba-3中のtestparm
は2.2.xのものとは動作が異なる。「-v」
スイッチなしで使うと、実際に書かれた設定のみを表示する。使用している完全な設定を見る
ためにはtestparmに「-v」オプションを追加する。
どのようなステージでもトラブルシュートをする必要があるので、常時、最初にこの点に戻り、
testparm
が期待しているパラメーターを表示するかを検査する。
個人的な経験から忠告すると、load printersパラメーターを
コメントアウトすることを試すこと。もしも2.2.xシステムの動作が、私の環境のようで
あれば、以下のような表示が出る:
root#
grep "load printers" /etc/samba/smb.conf # load printers = Yes # This setting is commented out!!root#
testparm -v /etc/samba/smb.conf | egrep "(load printers)" load printers = Yes
この設定をコメントアウトするとSambaが自分のプリンターを公開させなくすると仮定したが、 実際には引き続き公開している。理由を理解するのには時間がかかった。少なくともこれに よって、もはや馬鹿にされることはない。
root#
grep -A1 "load printers" /etc/samba/smb.conf
load printers = No # The above setting is what I want! # load printers = Yes # This setting is commented out!root#
testparm -s -v smb.conf.simpleprinting | egrep "(load printers)"
load printers = No
パラメーターを明示的にload printers = Noに設定する時 にのみ、Sambaは意向にかなう。そのため、以下を強く推奨する:
コメントアウトしたパラメーターには決して頼らない。
常時、そう動作させたいと意図するものについては、明示的に パラメーターを設定する。
意向を反映しないかもしれない隠れた設定を、見える化するために
testparm
を使う。
以下は最小の設定ファイルである:
root#
cat /etc/samba/smb.conf-minimal
[printers]
この例は、任意のSamba構成ファイルをテストするために、testparm
を
使って表示すべきである。実際、現在動いているシステム(正確に何をやっているか知っている
限り)を変更しないことを勧める。smbd再起動後にのみ変更の影響が
反映されるという仮定に頼ってはいけない!これは本当ではない。Sambaは60秒ごととクライアント
からの接続時に再読込を行う。適用する事を意図しない製品のクライアントのために、変更に
直面しなければならないかもしれない。そのほか、いくつかの興味深いことに注意するとよい。
testparm
は、この最低限の構成を使う時にSambaの印刷設定がどうあるかを
識別するために便利である。以下では、見つけようと思っているものがある:
root#
testparm -v smb.conf-minimal | egrep "(print|lpq|spool|driver|ports|[)"
Processing section "[printers]" WARNING: [printers] service MUST be printable! No path in service printers - using /tmp lpq cache time = 10 load printers = Yes printcap name = /etc/printcap disable spoolss = No enumports command = addprinter command = deleteprinter command = show add printer wizard = Yes os2 driver map = min print space = 0 max print jobs = 1000 printable = No printing = bsd print command = lpr -r -P%p %s lpq command = lpq -P%p printer name = use client driver = No [printers] printable = Yes
testparm
は2つの警告を表示する:
[printers]
セクションが印刷可能と指定していない。
どのスプールディレクトリを使うかをSambaに指定していない。
しかし、これは致命的ではなく、Sambaは動作するように既定値を設定する。が、この例を
頼らず、使わないでほしい。これは、自分が何を要求しているかを正確にわかっている設定と
注意深い設計を手助けするために用意された。使用しているシステムからの結果は、異なった
コンパイル時オプションによって構築されたSambaで、いくつかのパラメーターによっていろいろと
変わる。警告:有効な行の行末にコメントサイン
を置いてはいけない。この場合、パラメーターは無視される(行頭にコメントサインを置いたのと
同じになる)。最初にこれは使用しているSambaのバージョンのバグではないかと思った。しかし、
マニュアルページには明確に
パラメーター値の内部の空白は、正確にその通りに保持される
と書いてある。
これは、たとえば以下のような行があると
# これはLPRngを印刷システムとして定義する。 |
printing = lprng |
定義したい値として=
記号の後の文字列すべてを尊重する。これは、不正な
値なので無視され、この場所では既定値が使われる。
拡張BSD印刷環境の設定は、BSD形式の印刷設定中の印刷に
関連した設定のためのより詳細な設定を表示する。下記は、いろいろなパラメーターの議論と
説明である。昔からのUNIX/Linuxマシン上で最も一般的に使われているので、BSD形式の
印刷環境を使う事をした。主に新しいシステムでは、別の章で議論されているCUPSを使う
だろう。例は、既定値で設定されていないという理由で、指定するのが不要なたくさんの
パラメーターを明示的にリストアップする。よりスリムなsmb.conf
を使うことも、
testparm
を使う事も、既定値に設定されているすべてのパラメーターを
smb.conf
から削除して最適化するために、SWAT
を使う事もできる。
例21.2 拡張BSD印刷環境設定
これは設定の例である。OSベンダーによって提供されている設定ファイル中でのすべての設定は
ここにはない。明示的に設定されていないSamba設定パラメーターは、既定値で賢明な値に設定
されている。すべての設定を見るには、root
になり、
testparm
ユーティリティを使う。testparm
は
設定の間違いを指摘する。
以下は拡張BSD印刷環境の設定についての議論である。
[global]
セクションは4つの特別なセクションの1つであり
(残りは[homes]
, [printers]
と
[print$]
)、これらはサーバー全体に適用されるすべてのパラメーターを
含んでいる。ここにはグローバルな意味を持つパラメーターのみが配置される。すべての他の
セクションと共有に対しての既定値の設定を定義する、サービスレベルのパラメーターを含む
こともできる。この方法は設定を簡単化し、同じ値を繰り返し設定することを防ぐ(設定
できる個別のセクションか共有内で行えるが、グローバルに設定した共有の設定と他の値の
指定を上書きする)。
BSD(RFC 1179形式かLPR/LPD)として知られてもいる)BSDのために適用出来る
Sambaが使う既定値の印刷コマンドを指定する。一般的に、
printing
パラメーターは、仮定している印刷サブシステム
をSambaに告げる。SambaはCUPS, LPD, LPRNG, SYSV, HPUX, AIX, QNXと PLPを
サポートしている。各システムは異なったprint command
(と他のキュー制御コマンド)を既定値としている。
printingパラメーターは通常サービスレベルの
パラメーターである。[global]
セクション中のここに
記述後は、異なる設定をしていないすべてのプリンター共有に効果が及ぶ。
Samba はもはやSOFTQ 印刷サービスをサポートしない。
Sambaにすべての有効なプリンター共有を自動的に作成させる。有効なプリンター
共有はprintcapファイルをスキャンすることで調べる。作成されたすべての
プリンター共有はブラウジングでも表示される。もしもこのパラメーターを使う
場合、各プリンター毎に分割する必要はない。自動的に作成されたプリンター
共有のおのおのは、[printers]
セクション中に
ある設定オプションの設定の複製である
(load printers = no
の設定は、
誰でも見えて使えるようにしたくないいくつかのものをする(leaving out)、
各UNIXプリンターを指定できるようにする)。
設定は通常既定値によって有効になっている(たとえパラメーターがsmb.conf
中で指定されていなくても)。これは、Sambaホストの共有リストの中での
プリンターフォルダー中に
プリンター追加ウィザードが出る原因である(
ネットワークコンピューターか
net view
コマンドで見られる)。これを無効にするには、
明示的にno
と設定する必要がある(コメントアウトは
十分ではない)。プリンター追加ウィザード
は
[print$]
共有にプリンタードライバーをアップロード
させ、それをプリンターに関連づけるか(もしもそれぞれのキューが動作の前に
存在するならば)、以前にアップロードされたドライバーとプリンタードライバーを
交換する)。
ある時間にSambaサーバー上で有効な印刷ジョブを最大100までに設定する。この数よりも 大きなジョブをクライアントが投稿すると、"サーバー上に容量がありません"という エラーメッセージがSambaサーバーからクライアントに返す。ゼロという設定(既定値) は全く制限がない事を意味する。
Sambaに有効なプリンター名ののリストがどこにあるかを告げる。CUPSを使って
いる場合、printcapファイルが書かれているかを確認する。これは
cupsd.conf
ファイル中のPrintcap
ディレクティブによって制御される。
lpqコマンドの結果のキャッシュ時間を制御する。これは、過度にlpqコマンドが 呼ばれる事を防ぎ、高負荷のプリントサーバーの負荷を減少させる。
もしもyes
に設定されると、Windows NT/200x/XPクライアント
のみに(Windows 95/98/MEには関係ない)影響する。このパラメーターの既定値は
No
で(あるいはFalse
)である。
これは、Sambaサーバー上で有効なドライバーがインストールされているプリント共有
では(yes
かtrue
を設定して)
決して有効にしてはならない。より詳細な説明は、
smb.conf
マニュアルページを参照のこと。
printersセクションは2つめの特別なセクションである。もしもこの名前のセクションがsmb.conf
中に現れると、Samba起動時に、printcapファイル中で見つかるすべてのプリンター名に対してプリンター
共有を作成するので、ユーザーはSambaホスト上のprintcapファイル中で定義されている任意の
プリンターに接続できる。このセクションを最低の設定ですべてのプリンターを共有するための、
便利なショートカットとして見なすことができる。これはまた、すべてのプリンターに対する
既定値として適用すべき設定のためのコンテナーでもある(より詳細は、smb.conf
マニュアル
ページを参照)。この内側にあるコンテナーの設定は共有レベルパラメーターでなければならない。
commentは、クライアントが
ネットワークコンピューターかnet view
コマンド経由でサーバーに問い合わせた時、有効な共有一覧を表示する時に、
共有のそばに表示される。
[printers]
サービスはprintableとして
定義されねばならない。もしもそれ以外を指定すると、
smbdは起動時にロードを停止する。このパラメーターは、このサービスに対して
pathパラメーターで指定したディレクトリ中に、
オープン、書き込みとスプールファイルの投稿を、接続したクライアントに
許可する。これは、ファイル共有とプリンター共有とを区別するために、
Sambaによって使われる。
入力された印刷ファイルをSambaによってスプールするためのディレクトリを 指定しなければならない。UNIX印刷サブシステムの設定中で指定された スプールディレクトリと同じに設定してはならない!パスは通常 stickyビットを設定した、その他に書き込み可能な ディレクトリを指定する。
printable = yesのときは常時
no
に設定する。これは、共有それ自身が、
net view
コマンドか、エクスプローラーのブラウズリスト
中で有効な共有の一覧中で不可視にする(もちろん個々のプリンターを見る
ことは出来る)。
もしも、このプリンターがyes
に設定されているならば、
印刷サービスに接続する時にパスワードを必要としない。アクセスは、
guest accountの権限で許可される。多くのシステム
では、ゲストアカウントは"nobody"という名前にマップされる。このユーザーは
通常空白のパスワード尾持つUNIXのpasswdファイルにあるが、UNIXログインは
無効である。いくつかのシステムでは、ゲストアカウントユーザーは印刷権限を
持たないかもしれない。su - guest
を使い、以下の
システムの印刷コマンドを動かし、使用するシステムのguestユーザー中で
ロギングすることでこれをテストする:
lpr -P printername /etc/motd
guest ok = yesの同義語である。
guest ok = yesを設定すると、
これは本当にここにある必要はない(これは
「同じ共有に対して2つの矛盾している設定が偶然あるときはどうなるか?」
という興味深い質問を導く。答えはSambaが最後に見つけたものが使われる。
testparm
は同じ共有に対して同じパラメーターに対する
異なった設定に対しては注意を喚起しない。異なったユーザー名で
guest account
パラメーターに対して複数の行を
設定することでこれをテストでき、次にtestparmを動作させて、どの行が
Sambaによって本当に使われるかを見る事ができる)。
通常(共有の他のタイプのために)サービスのディレクトリ中で、ユーザーによる ファイルの作成と変更を防止する。しかし、printable サービス中では、常時ディレクトリへの書き込みが許可 されるが(もしもユーザーの権限として接続が許可されているならば)、 それは印刷スプール操作経由でのみである。通常の書き込み操作は許可 されない。
これはread only = yesの同義語である。
もしも、[my_printer_name]
セクションが、
printable = yesを含んでsmb.conf
ファイル中にある
場合、Sambaはこれをプリンター共有と見なして設定する。Windows 9x/Meクライアントは、
共有名が8文字以上の場合、接続かプリンタードライバーのロードで問題が発生するかもしれない。
存在するユーザーかファイル共有の名前と競合する、プリンター共有名を付けてはならない。
クライアントからの接続時に、Sambaは常時その名前を最初に持つものを見つけようとする。
もしもそれが見つかると、これに対して接続を行い、同じ名前を持つプリンター共有には接続
できない!
上記で書いたとおりのコメントである。
このプリンターに対するスプール領域のディレクトリを既定値の代わりに設定する。 これは異なって設定する必要はないが、オプションは有効である。
これは、クライアントが、ネットワークコンピューターで ブラウズするのが便利なように、プリンターをブラウズ可能にする。
20.4.1.2節を参照。
20.4.1.2節を参照。
hosts allowとhosts deny パラメーターを使って特定の数値でのアクセス制御を試す。これは、決して安全な 賭けではない。これは使用しているプリンターをセキュアにする方法ではない。この 行は、最初に評価されるアクセス制御中での特定のサブネットからの、すべての クライアントを許可する。
すべての一覧表示されたホストはここでは許可されない(たとえ許可された サブネットにあったとしても)。見ての通り、NetBIOSホスト名をここに書くのと 同様にIPアドレス名前を付けることが出来る。
このプリンターはゲストアカウントには公開していない。
各セクション(か[printers]
セクション中で)はプリンターを
定義し、print command
は定義されるかもしれない。これは、その
プリンターに対するSambaの印刷スプールディレクトリ中に位置するファイルを処理するコマンドを
設定する。(もしも覚えているならば、このスプールディレクトリはpath
パラメーターで設定される)。通常、このコマンドはSambaが動いているホストの印刷サブ
システムに、適切なシステムの印刷コマンドを使ってスプールファイルを渡す。しかし、もしも
この必要性に要求がなければ、たぶんそうだろう。デバッグかその他の理由で、ファイルの印刷
より何かが完全に異なることを行う事を望んでも良い。例は、プリンティングをデバッグする
ために必要とする時、さらなる調査のために一時的な場所に印刷ファイルをコピーするだけの
コマンドである。もしも、固有の印刷コマンドを作る場合(か印刷コマンドシェルスクリプトの
開発)、Sambaスプールディレクトリからファイルを削除する必要があることに注意をはらうこと。
そうしないと、すぐにディスクがいっぱいになってしまうだろう。
設定ファイル中で明示的に設定されていない場合、Sambaがほとんどの場合、多くのパラメーター について、内蔵の値を使うということは、以前の説明で理解されているかと思う。 print commandでも同じである。既定値の印刷コマンドは printingパラメーターの設定に依存して変わる。 既定値の印刷設定に一覧があるコマンド中で、 Xがp,s,Jのようなものである、 %X形式を持ついくつかのパラメーターに気がつくだろう。 これらの文字は、それぞれプリンターの名前、スプールファイルとジョブIDを表す。これらは、 キーとなる印刷オプションの概要を提供する 既定値の印刷設定中に詳細が説明されているが、 CUPSの場合は特別で、CUPS印刷サポートで 説明があるので、ここに記述はない。
表21.1 既定値の印刷設定
設定 | 既定値の印刷コマンド |
---|---|
printing = bsd|aix|lprng|plp | 印刷コマンドはlpr -r -P%p %s |
printing = sysv|hpux | 印刷コマンドはlp -c -P%p %s; rm %s |
printing = qnx | 印刷コマンドはlp -r -P%p -s %s |
printing = bsd|aix|lprng|plp | lpq コマンドはlpq -P%p |
printing = sysv|hpux | lpq コマンドはlpstat -o%p |
printing = qnx | lpq コマンドはlpq -P%p |
printing = bsd|aix|lprng|plp | lprm コマンドはlprm -P%p %j |
printing = sysv|hpux | lprm コマンドはcancel %p-%j |
printing = qnx | lprm コマンドはcancel %p-%j |
printing = bsd|aix|lprng|plp | lppause コマンドはlp -i %p-%j -H hold |
printing = sysv|hpux | lppause コマンド(...は存在しない) |
printing = qnx | lppause コマンド(...は存在しない) |
printing = bsd|aix|lprng|plp | lpresume コマンドはlp -i %p-%j -H resume |
printing = sysv|hpux | lpresume コマンド(...は存在しない) |
printing = qnx | lpresume コマンド(...は存在しない) |
printing = CUPS
用に、もしもSambaがlibcupsを使うようにコンパイル
されたならば、ジョブの投稿にCUPS APIを使用する(通常使わない位置に自動生成された
printcap ファイルに書き込むために、使用しているシステム中のcupsd.conf
ファイルが設定されている場合、printcap = cupsを
設定するのはよい方法である)。ほかの場合は、Sambaは印刷処理のために、-orawオプションを
付けて、System Vの印刷コマンドにマップする。これはすなわち、
lp -c -d%p -oraw; rm %s
を使うことである。
printing = cups
の場合と、もしもSambaがlibcupsを使うように
コンパイルされた場合、手動で設定したprint commandは何であっても無視される!
サービスに対して印刷ジョブのスプーリングが終了後、print command はスプールファイルを処理するためにsystem()呼び出し経由でSambaによって使われる。 通常指定されたコマンドはホストの印刷サブシステムにスプールファイルを投稿する。 しかし、これが本当にそうであるというべき要求は全くない。印刷サブシステムは それ固有のスプールファイルを削除しないかもしれないので、指定したコマンドは何であっても、 それが処理された後にスプールファイルは消去されるようにすべきである。
伝統的な印刷システムに対して作成した固有の印刷コマンドを使うことについては何ら違いは ない。しかし、固有のものを動かしたくないのであれば(訳注:to roll your own)、各印刷 サブシステムに対してSambaが使う既定値の内蔵コマンドについて熟知すべきである (既定値の印刷設定を参照)。最後のパラグラフに 一覧表示されているすべてのコマンドには%Xという形式のパラメーターが ある。これらはマクロかショートカットで、真のオブジェクトの 名前のためのプレースフォルダーとして使われる。このようなプレースフォルダーを使って、 コマンドを動かしたとき、Sambaは自動的に適切な値に置き換える。印刷コマンドは すべてのSambaマクロ置換を扱える。印刷に関しては、以下の以下のものは特別に扱われる:
%s, %f
スプールファイル名へのパス。
%p
適切なプリンター名。
%J
クライアントから送られたジョブ名。
%c
(もしも分かるならば)スプールされたジョブのページ数。
%z
スプールされた印刷ジョブのサイズ(バイト単位)。
印刷コマンドは少なくとも%s
か%f
のどちらか
1つを使っている必要がある。%p
の使用は任意である。もしも
プリンター名が指定されないと、%p
は印刷コマンドから何のメッセージも
なしに取り去られる。この場合、ジョブは既定値のプリンターに送られる。
[global]
セクション中で指定されると、指定されたprint commandは
固有のprint commandを持たない任意の印刷サービスに対して使われる。もしも、印刷サービスの
ためのprint commandも、グローバルのprint commandも指定されない場合、スプールファイルは
作成されるが処理されない!最も重要なことは、印刷ファイルは削除されず、そのため、ディスク
スペースを消費してしまうと言うことである。
印刷は、nobodyアカウントを使うとき、ある種のUNIXでは失敗するかも
しれない。もしもそのような事態に遭遇したら、代替のゲストアカウントを作成し、印刷権限を
付与する。このゲストアカウントを、[global]
セクション中に、
guest account
パラメーターを使って設定する。
非常に複雑な印刷コマンドを構成することも出来る。印刷コマンドはUNIXシェルに渡される
ようにする必要がある。シェルは通常のように指定されている環境変数を展開できる(UNIXの
環境変数$variable
を、Sambaの印刷コマンドの中で指定するための
形式は%$variable
である)。下記の動作する
print commandの例では、以下は印刷ジョブのログを
/tmp/print.log
に取り、ファイルを印刷し、次にそれを削除する。
セミコロン(「;」)は通常通り、シェルスクリプト中でのコマンドの分離符号である:
print command = echo Printing %s >> /tmp/print.log; lpr -P %p %s; rm %s |
動作させるシステム上で、通常どのようにファイルを印刷するかに例が依存することを考慮して、 固有のコマンドを変更しなければならないかもしれない。既定値の print commandパラメーターは、printing の設定状態に依存して代わる。他の例は下記の通り:
print command = /usr/local/samba/bin/myprintscript %p %s |
Samba-2.2.xより前は、Windowsクライアントへの印刷サーバーサポートは、 LanMan印刷機能に限定されていた。これは、Windows 9x/Me PCがプリンターを 共有するときのものと同じプロトコルレベルである。2.2.0リリースの最初から、Sambaは ネイティブなWindows NTの印刷方式のサポートを開始した。これらは MS-RPC (Remote Procedure Call)経由で実装されている。MS-RPCは すべての印刷のために、SPOOLSSという名前付きパイプを使用する。
新しいSPOOLSSサポートによって提供される追加の機能は以下を含む:
オンデマンドでWindows 95/98/NT/2000クライアントにプリンタードライバーのダウンロードを サポートする(Point'n'Print)。
Windows NTのAdd Printer Wizard (APW)か Imprintsツールセット経由で プリンタードライバーをアップロードする。
StartDocPrinter, EnumJobs()のような、ネイティブなMS-RPC印刷呼び出しをサポートする (Win32印刷APIについてのより詳細な情報は MSDN documentationを参照のこと)。
スプールされたジョブ情報のための、内部データベースを使用することによる、プリンター
キュー操作のサポートの改善(種々の*.tdb
ファイルによって
実装された)。
Samba へのアップデートによって便利になる点は、そのプリンターを Active Directory(かLDAP) に公開できることである。
Microsoft Windows NTサーバーとSambaでの操作の間には基本的な違いが存在する。Windows NTは 共有しないローカルプリンターのインストールを許可する。これは任意のWindows NTマシン(サーバーか クライアント)はユーザーがワークステーションとして使えるという不自然な結果となる。Sambaは、 既定値か、プリンター固有の共有経由での特定の定義のどちらかで、有効にしたすべてのプリンターを 公開する。
Windows NT/200x/XP Professionalクライアントは標準SMBプリンター共有を使ってはならない。 それらはMS-RPCを使って他のWindows NTホスト上の任意のプリンターに直接印刷が出来る。これは、 もちろん、クライアントがプリンターリソースを提供しているリモートホスト上で必要な権限を 持っていることを仮定している。プリンターに対してWindows NTによって割り当てられている 既定値のパーミッションは、よく知られたEveryoneグループに印刷の パーミッションを与える(Windows 9x/Meタイプの古いクライアントは、共有されたプリンター への印刷のみ出来る)。
このことが意味することについて多くの混乱がある。次のような疑問がしばしば質問される。 「Windowsクライアントからの印刷をサポートするためにSambaホスト上にプリンター ドライバーをインストールすることは必要か否か?」答えは No で不必要である。
もちろん、Windows NT/2000クライアントではドライバーをローカルに (次にSambaベースの印刷キューに繋ぎ)インストールするためにそれらのAPWも動かすことも できる。これはWindows 9x/Meクライアントによって使われるのと同じ手法である(しかし、 Samba 2.2.0では、プリンターに対する有効なドライバーをSambaサーバーが処理することを Windows NT/2000クライアントが要求させる、というバグがある。これはSamba 2.2.1で 修正されている)。
しかし、これはSambaサーバーの[print$]
共有中にプリンタードライバーを
インストールする新しい機能であり、これはとても便利である。次に、
すべてのクライアント(95/98/MEを含む)はこのプリンター共有に最初に
接続した時にインストールされているドライバーを入手する。この
[print$]
中へのドライバーのアップロード
または供託と、以下の存在するSambaプリンター共有へ、このドライバーを
結びつけることは異なった手段で達成できる:
NT/200x/XP Professionalクライアント上でAPWを動かす(これは95/98/MEクライアントでは動かない)。
Imprintsツールセットを使う。
smbclientとrpcclientコマンド行ツールを使う。
cupsaddsmbを使う(CUPS印刷システムのみ動作し、LPR/LPD、LPRngなどでは動かない)。
Sambaはスプールされたファイルに対してどのような方法でも、これらのアップロードされた ドライバーを使わない。これらのドライバーは、Sambaによってサポートされている 「ポイントアンドプリント」メカニズム経由でダウンロード、インストールする クライアントによって完全に使われる。クライアントは、プリンター(かUNIX印刷システム)が 要求する形式に印刷ファイルを生成するためにこれらドライバーを使う。Sambaが受け取る 印刷ファイルは、必要に応じてすべてのさらなる処理のために責任のある、UNIX印刷システムに 渡される。
2.2より前のSambaのバージョンでは[printer$]
という名前の
共有を使う事が出来た。この名前はWindows 9x/Meクライアントがそれによって共有される
プリンターによって作成された、同じ、名前付きのサービスから取られている。
Windows 9x/Meプリンターサーバーは、プリンタードライバーのダウンロードをサポートするために、
ードオンリのアクセス(かつパスワードなし)のサービスを常時用意している。しかし、
Sambaの最初の実装では、printer driver location
という名前の、
共有単位で使われるパラメーターが使えた。これはそのプリンターに関連するドライバー
ファイルの位置を指定した。printer driver
という名前の他の
ラメータは、クライアントに送られるプリンタードライバー名を定義する手段を提供した。
printer driver file
を含むこれらのパラメーターは、Samba
では取り除かれ、使う事は出来ない。共有名[print$]
は
ダウンロード可能なプリンタードライバーの位置のために使われる。これは、Windows NT
が動いている PC が、それによって共有されるプリンターによって作成された、
[print$]
という共有名から取られている。Windows NT の
印刷サーバーは、プリンタードライバーのダウンロードとアップロードをサポートするために、
読み書きアクセス(そのACLのコンテキスト中で)を提供する、
[print$]
というサービスを常時提供している。これは
Windows 9x/Me クライアントがこの時点で捨てられるという事を意味するわけではない。
それらには Samba の[print$]
共有がきちんとサポートする
ものを使える。
プリンタードライバーファイルのアップロード/ダウンロードをサポートするために、まずはじめに
[print$]
という名前のファイル共有を作成しなければならない。
この共有の公開される名前は、Microsoft Windowsクライアント中で埋め込まれている。
これは、プリンタードライバーファイルを検索しようとした時に、正確にこの前のサービスを
探すように、Windowsクライアントがプログラムされているため、改名することは出来ない。
グローバルパラメーターを追加するためにサーバーのファイルを変更し、
[print$]
ファイル共有を作成すべきである(もちろん、
たとえばpathのようないくつかのパラメーターの値は、サイトに
よって適切な値に置き換えるべきである)。[print\$] の例
を参照。
もちろん、pathパラメーターによって名付けられたディレクトリが、 UNIXファイルシステム上に存在するようにしておく必要もある。
[print$]
はsmb.conf
中で特別なセクションである。これは、
潜在的なプリンタードライバーダウンロードに関連する設定を含み、ローカルプリンタードライバーの
インストールのためにWindowsクライアントによって使われる。以下のパラメーターはこの共有
セクションでしばしば必要とされるものである:
共有リスト中に一覧表示された時に、共有のそばにあるコメント(通常Windows
クライアントはそれを見る事ができないが、
smbclient -L sambaserver
の出力中にも表示される)。
UNIXの観点からのWindowsドライバーファイルの保存場所の位置のパス。
[print$]
共有を見せないようにさせる。
cmd
シェルで以下を実行すると:
C:\>
net use g:\\sambaserver\print$
任意のクライアントから引き続き見る事ができる。これは、Windows エクスプローラーから
からでも行う事が出来る。
すべてのゲストユーザーにこの共有をリードオンリにする。クライアント上への
ダウンロードとプリンターのドライバーのインストールを行うためのアクセスは
許可される。guest ok = yes
が必要かどうかは、
どのようにサイトが設定されているかに依存する。もしもユーザーがSamba
ホスト上のアカウントを持つことを許可されているならば、これは何の
問題もない。
もし、Sambaサーバーによって認証されることを、すべてのWindows NTユーザーが
保証されているならば(たとえば、もしも、NTドメインサーバー経由でSambaが
認証するとき、ユーザーはすでにWindows NTセッションのためにログオンするために
ドメインコントローラーによって認証されていた場合)、ゲストアクセスは
不要である。もちろん、ばかげたアカウントとセキュリティについて
心配せずに、ワークグループ環境で印刷を行いたいのであれば、ゲストアクセス
のための共有を設定する。同じように、[global]
セクション中で、
map to guest = Bad User
を追加することを考えるべきである。これを使う前に、このパラメーターが
行う事を理解しておくこと。
誰でもがドライバーファイルをアップロード(あるいはドライバーの設定の変更)する ことは望まないので、この共有を書き込み不可にする。
[print$]
は以前の設定によってリードオンリになって
いるので、write list
も一緒に作成すべきである。UNIX
グループは先頭に「@」が付いたものである。共有上にファイルの
アップデートを必要とするこの一覧にあるユーザーは、(一般的にパブリックな
リードオンリアクセスの例外として)書き込みが許可される。
通常この設定中で管理者レベルのユーザーのみ指名したいであろう。
Windows NT印刷サーバーが、複数のクライアントアーキテクチャによってドライバーのダウンロードが
出来るようにするために、[print$]
サービス内にいくつかのサブ
ディレクトリを作成しなければならない(すなわち、pathパラメーターに
よって指定されたUNIXのディレクトリ)。これらはサポートされる各クライアントアーキテクチャ
に一致する。Sambaは同様にこのモデルに追従する。[print$]
共有
それ自身の名前と同じように、サブディレクトリは下記に一覧表示された名前と正確に一致
しなければならない(サポートする必要のないアーキテクチャのサブディレクトリはなくても
よい)。
すなわち、下記のように、[print$]
共有配下に、サポートしたい
各アーキテクチャのためのディレクトリを作成する。
[print$]--+ |--W32X86 # serves drivers to Windows NT x86 |--WIN40 # serves drivers to Windows 95/98 |--W32ALPHA # serves drivers to Windows NT Alpha_AXP |--W32MIPS # serves drivers to Windows NT R4000 |--W32PPC # serves drivers to Windows NT PowerPC
Sambaホスト上に新しいドライバーを追加するためには、2つの条件のうちの1つを真にしておかねばならない:
Sambaホストに接続する時に使われるアカウントはUIDが0でなければならない(すなわちrootアカウント)。
もちろん、接続されたアカウントは[print$]
下のサブ
ディレクトリファイルを追加するための書き込み許可が必要である。すべてのファイル
共有は既定値で「リードオンリ」に設定されていることを覚えておくこと。
要求された[print$]
サービスと関連したサブディレクトリを作成した
後、Windows NT 4.0/200x/XPクライアントワークステーションの所に行く。
ネットワークコンピューターかマイネットワークを
開き、Sambaホストをブラウズする。所定のサーバーを選択後、その
プリンターとFAXフォルダーに移動する。そうすると、Sambaホスト上で
定義されたプリンター共有にい位置するプリンターの一覧の初期値を見る事ができる。
smb.conf
中に[print$]
共有を無事作成でき、smb.conf
ファイルを
強制的にSambaに再読込させただろうか?であれば問題はない。しかし、新しい機能を使うには
まだもう少し手間がかかる。この共有中にクライアントドライバーファイルをインストールする
必要がある。そのため、まだこの共有は空の状態である。不幸にも、そこにドライバーファイルを
コピーするだけでは十分ではない。正しくインストールする必要があり、そうすると、各
ドライバーに対する適切なレコードがSamba内部データベース中に存在するようになり、
Microsoft Windowsクライアントから要求された正しいドライバーを提供することが出来るように
なる。さらに、控えめに言ってもそれは厳重さが必要である。下記では
[print$]
中にドライバーをインストールする2つの代替方法について
説明する:
任意のUNIXワークステーションから、Sambaのコマンドラインユーティリティ
rpcclient
を、種々のサブコマンド
(adddriver
とsetdriver
など)を組み合わせて
使う。
任意のWindows NT/200x/XPクライアントワークステーションから、GUI (プリンターのプロパティとプリンターの追加ウィザード) を走らせる。
後者のオプションが、おそらくより易しいであろう(たとえプロセスが最初多少奇妙に振る舞うとしても)。
プリンターは、最初、実際のプリンタードライバーがそれに割り当てられていない状態で、クライ アントのエクスプローラーからアクセスされる、Sambaホストのプリンター フォルダーに一覧表示される。既定値で、このドライバーの名前は空の文字列に設定されている。 これは変更しなければならない。NT/2000/XPクライアントから、ローカルの プリンター追加ウィザード(APW)を動かすことで、この作業ができる。
有効なプリンタードライバーのインストールは簡単である。ドライバーを割り当てたいプリンターに
対するプリンターのプロパティを表示させなければならない。Windowsのエクスプローラーを
起動し、ネットワークコンピューターを開き、Sambaホストをブラウズし、
Sambaのプリンターフォルダーを開き、プリンターアイコンを右クリックし、
を選択する。これでプリンターと既定値の
NULL
ドライバーが割り当てられているキューのためのドライバー
プロパティが見えるようになる。そして、「
デバイス設定が表示できません。指定されたプリンターのドライバーがインストールされて
いません。スプーラのプロパティのみ表示されます。ドライバーを今インストールしますか?
」というエラーメッセージが表示される。
ここで、いけない! その代わり、エラーダイアログで をクリックする。これで、 プリンタープロパティウインドウが表示される。ここから、プリンターへのドライバーの割り当ての 手順は公開されている。以下を選べる:
をクリックしてはインストール済みのポップアップリストからドライバーを選択。通常は最初リストは空である。
新しいプリンタードライバーをインストールするために
をクリック(これはAPWを起動する)。
一度APWが起動すると、Windows中でなじみがある、ものと手続きは正確に同じである(Windows NT
上のプリンタードライバーインストール手続きに慣れていることを仮定している)。接続を確認し、
printer administration 権限を持つユーザーとしてセットアップ(ユーザーが
権限を持つか分からない場合はsmbstatus
でチェックしてみる)。
クライアントOSに対してWindows NT x86の代わりのプリンター
ドライバーをインストールしたい場合、プリンタープロパティダイアログの共有
タブを使う必要がある。
管理者(root)アカウントで接続していると仮定すると、さらに、このダイアログを使って
ACLと既定値のデバイスの設定のようなプリンターのプロパティをも修正できる。
既定値のデバイス設定のためには、rpcclient
を
使った印刷ドライバーのインストールに助言が書いてあることを考慮してほしい。
[print$]
にプリンタードライバーをインストールし、有効な方法で
それを設定するための2番目の方法は、UNIXコマンドラインから行う方法である。これは、
4つの異なったステップを必要とする。
要求されたドライバーファイルについての情報を集め、ファイルを収集する。
[print$]
共有の正しいサブディレクトリ中にドライバー
ファイルを置く(おそらくsmbclient
を使うだろう)。
rpcclient
コマンドラインユーティリティを起動し、その
adddriver
サブコマンドを使う。
rpcclient
をもう一度起動し、setdriver
サブコマンドを使う。
以下の節で、これらのステップのおのおのについて詳細な説明を行う。
ドライバーファイルを見つけるためには2つのオプションがある。プリンターに付属のドライバー
CD-ROMの内容を検査することが出来る。CD-ROM上にある*.inf
ファイルの
位置を覚えておく。これは*.inf
ファイルが無いかもしれないので、
出来ない場合もある。残念なことに、最近ではベンダー固有のインストールプログラムを使う
傾向がある。これらのインストールパッケージはしばしば何らかのWindows上での書庫形式
を使っている。更に追加で、インストール処理中にファイル名が改名されるかもしれない。
これは、必要とされるドライバーファイルの識別がとても難しくなることを意味する。
次に、2番目のオプションがある。ドライバーをWindowsクライアント上にローカルに インストールし、インストール後にそれが使うファイル名とパスを調査する (サポートしたい各クライアントプラットフォーム毎にこの手続きを繰り返さなければ ならない。ここでは、すべてのWindows NT/200x/XPクライアントのためにMicrosoftによって 使われる名前である、W32X86プラットフォームのみを 表示する)。
ドライバーファイルを認識する良い方法は、ドライバーのプロパティ ダイアログでテストページを印刷してみることである(全般タブ)。 次に、印刷されたドライバーファイルのリストを見てみる。Windows(とSamba)が ドライバーファイル、データファイル、 設定ファイルと(オプションの) 依存するドライバーファイル(これはWindows NTでは若干変わる)の 何を呼び出しているかを認識する必要がある。次のステップのためにすべてのファイル名を 記録する必要がある。
ドライバーファイル名と関連するパスを迅速にテストする別の方法は、rpcclient
ユーティリティによって提供される。enumdrivers
か
getdriver
サブコマンドを指定し、infoレベルを3
に
してこれを動かす。以下の例では、TURBO_XPがWindows PCの名前である
(この場合、これはWindows XP Professionalラップトップ)。KDE-BITSHOP
という名前のSambaサーバーからTURBO_XPにローカルにドライバーをインストールしたとする。
次に対話的なrpcclient
を動かす。そうすると、
rpcclient />
が表示され、このプロンプトの状態でサブコマンドが入力
出来るようになる。これは練習として残しておこう。次に、1つのサブコマンド行を実行し、
すぐに終了するような-c
オプションをつけてrpcclient
を起動する。これは大量のプリンターとドライバーのために自動作業を行うスクリプトを作成する
時に使う手法である。異なる引用符を使い分けて単語間の異なった空白を解決するように注意:
root#
rpcclient -U'Danka%xxxx' -c \ 'getdriver "Heidelberg Digimaster 9110 (PS)" 3' TURBO_XP
cmd = getdriver "Heidelberg Digimaster 9110 (PS)" 3 [Windows NT x86] Printer Driver Info 3: Version: [2] Driver Name: [Heidelberg Digimaster 9110 (PS)] Architecture: [Windows NT x86] Driver Path: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\HDNIS01_de.DLL] Datafile: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\Hddm91c1_de.ppd] Configfile: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\HDNIS01U_de.DLL] Helpfile: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\HDNIS01U_de.HLP] Dependentfiles: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\Hddm91c1_de.DLL] Dependentfiles: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\Hddm91c1_de.INI] Dependentfiles: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\Hddm91c1_de.dat] Dependentfiles: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\Hddm91c1_de.cat] Dependentfiles: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\Hddm91c1_de.def] Dependentfiles: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\Hddm91c1_de.hre] Dependentfiles: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\Hddm91c1_de.vnd] Dependentfiles: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\Hddm91c1_de.hlp] Dependentfiles: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\HDNIS01Aux.dll] Dependentfiles: [C:\WINNT\System32\spool\DRIVERS\W32X86\2\HDNIS01_de.NTF] Monitorname: [] Defaultdatatype: []
このドライバーは大量の依存ファイル(しかしながらこれは 悪い場合である)を持つことに気がついても良いだろう。また、不思議なことに、 ドライバーファイルはここでドライバーファイル にタグ付けされている。インストールされた、いわゆるWIN40 アーキテクチャに対してまだサポートをしていない。この名前は、Microsoftによって Windows 9x/Meプラットフォームに使われる。もしもこれらをサポートしたいならば、 W32X86(すなわち、Windows NT/2000クライアント) Windows PC上に、それらのために追加でWindows 9x/Meドライバーをインストールしなければ ならない。このPCは、Windows NT,2000あるいはXPで動いたとしても、Windows 9x/Me への機能提供も出来る。
[print$]
共有が通常
ネットワークコンピューター経由でアクセス出来るので、そこにアクセス
するためにWindowsエクスプローラーからUNC記述を使う事が出来る。Windows 9x/Meドライバー
ファイルはWIN40
ディレクトリの0
という
サブディレクトリで終わる。これらに対するフルパスアクセスは
\\WINDOWSHOST\print$\WIN40\0\
である。
Windows 2000とWindowsXP上のより最新のドライバーは、「2」の代わりに 「3」というサブディレクトリ中にインストールされる。Windows NT中で使われる バージョン2のドライバーはカーネルモードで動作する。Windows2000ではこれを変更した。 それは引き続きカーネルモードのドライバーを使えるが(もしAdminによって有効にされれば)、 そのネイティブモードのプリンタードライバーはユーザーモードで動作する。これは、この目的の ために設計されたドライバーを要求する。これらのタイプのドライバーは「3」 サブディレクトリにインストールされる。
ここで、以前のステップで認識したすべてのドライバーファイルを収集する必要がある。さて、
どこからそれを得ればよいだろうか?最後のファイルを識別する手段中で調査した、同じ
[print$]
共有とそのPCからそれを検索しないのだろうか?これを
行うのにsmbclient
が使える。getdriver
によって
分かったパスと名前を使える。下記のコマンドライン業は、可読性向上のために、継続行文字を
入れて編集できる:
root#
smbclient //TURBO_XP/print\$ -U'Danka%xxxx' \ -c 'cd W32X86/2;mget HD*_de.* hd*ppd Hd*_de.* Hddm*dll HDN*Aux.DLL'
added interface ip=10.160.51.60 bcast=10.160.51.255 nmask=255.255.252.0 Got a positive name query response from 10.160.50.8 ( 10.160.50.8 ) Domain=[DEVELOPMENT] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]Get file Hddm91c1_de.ABD?
n
Get file Hddm91c1_de.def?
y
getting file \W32X86\2\Hddm91c1_de.def of size 428 as Hddm91c1_de.defGet file Hddm91c1_de.DLL?
y
getting file \W32X86\2\Hddm91c1_de.DLL of size 876544 as Hddm91c1_de.DLL [...]
このコマンドが完了すると、カレントローカルディレクトリにファイルが置かれる。この時点で、
セミコロンで分離した、-c
パラメーターのためにいくつかのコマンドが渡される
ことにおそらく気がつくだろう。これは、smbclient
コマンドが再度終了
する前にリモートのWindowsサーバー上で順番にすべてのコマンドを実行するようにさせる。
WIN40アーキテクチャが、Windows 9x/Me/XPクライアントをサポート
しなければならないために、手続きを繰り返すことを忘れないこと。さらに、それらの
アーキテクチャはWIN40/0/
サブディレクトリにあることを忘れないこと。
これがいったん終わると、Sambaサーバーの[print$]
共有にある、
収集されたファイルを格納するためにsmbclient. ..put
を動作させる
ことができる。
次は、[print$]
共有にドライバーファイルを配置する作業である。この
共有へのUNIXパスはsmb.conf
ファイル中で以前に定義した事を忘れないこと。また、サポート
したい異なったWindowsクライアントタイプのためには、サブディレクトリを作成する。たとえば
もしも、[print$]
が/etc/samba/drivers/
というUNIXパスにマップされているならば、ドライバーファイルは以下のように配置すべきである:
すべてのWindows NT, 2000,と XPクライアント用は /etc/samba/drivers/W32X86/
だが、2
サブディレクトリ中ではない。
すべてのWindows 95, 98,とMeクライアント用は /etc/samba/drivers/WIN40/
だが、0
サブディレクトリ中ではない。
再度、ネットワーク経由で、ドライバーファイルを転送するためにsmbclientを使う。オリジナルの
Windowsインストールに対してgetdriver
を走らせた
事により情報を得た同じファイルとパスを指定する。しかし、ここでは、
Samba/UNIX印刷サーバーの[print$]
共有中に
ファイルを格納する。
root#
smbclient //SAMBA-CUPS/print\$ -U'root%xxxx' -c \ 'cd W32X86; put HDNIS01_de.DLL; \ put Hddm91c1_de.ppd; put HDNIS01U_de.DLL; \ put HDNIS01U_de.HLP; put Hddm91c1_de.DLL; \ put Hddm91c1_de.INI; put Hddm91c1KMMin.DLL; \ put Hddm91c1_de.dat; put Hddm91c1_de.dat; \ put Hddm91c1_de.def; put Hddm91c1_de.hre; \ put Hddm91c1_de.vnd; put Hddm91c1_de.hlp; \ put Hddm91c1_de_reg.HLP; put HDNIS01Aux.dll; \ put HDNIS01_de.NTF'
added interface ip=10.160.51.60 bcast=10.160.51.255 nmask=255.255.252.0 Got a positive name query response from 10.160.51.162 ( 10.160.51.162 ) Domain=[CUPS-PRINT] OS=[UNIX] Server=[Samba 2.2.7a] putting file HDNIS01_de.DLL as \W32X86\HDNIS01_de.DLL putting file Hddm91c1_de.ppd as \W32X86\Hddm91c1_de.ppd putting file HDNIS01U_de.DLL as \W32X86\HDNIS01U_de.DLL putting file HDNIS01U_de.HLP as \W32X86\HDNIS01U_de.HLP putting file Hddm91c1_de.DLL as \W32X86\Hddm91c1_de.DLL putting file Hddm91c1_de.INI as \W32X86\Hddm91c1_de.INI putting file Hddm91c1KMMin.DLL as \W32X86\Hddm91c1KMMin.DLL putting file Hddm91c1_de.dat as \W32X86\Hddm91c1_de.dat putting file Hddm91c1_de.dat as \W32X86\Hddm91c1_de.dat putting file Hddm91c1_de.def as \W32X86\Hddm91c1_de.def putting file Hddm91c1_de.hre as \W32X86\Hddm91c1_de.hre putting file Hddm91c1_de.vnd as \W32X86\Hddm91c1_de.vnd putting file Hddm91c1_de.hlp as \W32X86\Hddm91c1_de.hlp putting file Hddm91c1_de_reg.HLP as \W32X86\Hddm91c1_de_reg.HLP putting file HDNIS01Aux.dll as \W32X86\HDNIS01Aux.dll putting file HDNIS01_de.NTF as \W32X86\HDNIS01_de.NTF
ヒュー;これはとても大量なタイプ量である!ほとんどのドライバーはより小さい。多くはたった
3つの汎用Postscriptドライバーファイルと1つのPPDのみを持つ。Windowsマシンからの
W32X86
の2
サブディレクトリからファイルを検索した
時、Sambaサーバーの同じサブディレクトリ中に(今は)それらを置かない。この再配置は、
間もなく動く(そして、それらを必要とすべき場合、WIN40/
サブ
ディレクトリ中に、Windows 9x/Meアーキテクチャのためのファイルを置くことを忘れない)、
adddriver
によって自動的に行われる。
次は、所定の場所にファイルがあるかどうかを確認する。これは、smbclient
で行える(が、もちろん、SSH経由でログインし、標準のUNIXシェルアクセスを通して行える)。
root#
smbclient //SAMBA-CUPS/print\$ -U 'root%xxxx' \ -c 'cd W32X86; pwd; dir; cd 2; pwd; dir'
added interface ip=10.160.51.60 bcast=10.160.51.255 nmask=255.255.252.0 Got a positive name query response from 10.160.51.162 ( 10.160.51.162 ) Domain=[CUPS-PRINT] OS=[UNIX] Server=[Samba 2.2.8a] Current directory is \\SAMBA-CUPS\print$\W32X86\ . D 0 Sun May 4 03:56:35 2003 .. D 0 Thu Apr 10 23:47:40 2003 2 D 0 Sun May 4 03:56:18 2003 HDNIS01Aux.dll A 15356 Sun May 4 03:58:59 2003 Hddm91c1KMMin.DLL A 46966 Sun May 4 03:58:59 2003 HDNIS01_de.DLL A 434400 Sun May 4 03:58:59 2003 HDNIS01_de.NTF A 790404 Sun May 4 03:56:35 2003 Hddm91c1_de.DLL A 876544 Sun May 4 03:58:59 2003 Hddm91c1_de.INI A 101 Sun May 4 03:58:59 2003 Hddm91c1_de.dat A 5044 Sun May 4 03:58:59 2003 Hddm91c1_de.def A 428 Sun May 4 03:58:59 2003 Hddm91c1_de.hlp A 37699 Sun May 4 03:58:59 2003 Hddm91c1_de.hre A 323584 Sun May 4 03:58:59 2003 Hddm91c1_de.ppd A 26373 Sun May 4 03:58:59 2003 Hddm91c1_de.vnd A 45056 Sun May 4 03:58:59 2003 HDNIS01U_de.DLL A 165888 Sun May 4 03:58:59 2003 HDNIS01U_de.HLP A 19770 Sun May 4 03:58:59 2003 Hddm91c1_de_reg.HLP A 228417 Sun May 4 03:58:59 2003 40976 blocks of size 262144. 709 blocks available Current directory is \\SAMBA-CUPS\print$\W32X86\2\ . D 0 Sun May 4 03:56:18 2003 .. D 0 Sun May 4 03:56:35 2003 ADOBEPS5.DLL A 434400 Sat May 3 23:18:45 2003 laserjet4.ppd A 9639 Thu Apr 24 01:05:32 2003 ADOBEPSU.DLL A 109568 Sat May 3 23:18:45 2003 ADOBEPSU.HLP A 18082 Sat May 3 23:18:45 2003 PDFcreator2.PPD A 15746 Sun Apr 20 22:24:07 2003 40976 blocks of size 262144. 709 blocks available
2
サブディレクトリ(おそらく以前のインストールで)中に、すでに
ドライバーファイルが存在することに注意。いったん新しいドライバーのためのファイルがそこに
あると、クライアント上からそれらを使うことが出来るようにするためからは違ういくつかの
ステップを処理することになる。この時点で行うべき唯一のことは、Windowsエクスプローラーから
print$共有を開いて、ファイル共有から普通のファイルを検索するのと同じように、クライアント
から、それらを検索することである。しかし、それはポイントアンドプリント単位でそれらを
インストールしない。その理由は、Sambaはまだそれらのファイルが特別か、すなわち、
プリンタードライバーファイルかどうかを知らないのと、それらのドライバー
ファイルが属する印刷キューがどれかを知らないということによる。
次に、[print$]
共有中に今アップロードしたファイルの特別な
カテゴリーについてSambaに通知する必要がある。これは、adddriver
で
行える。これは、Samba内部のTDBデータベースファイルにドライバーを登録するように表示
してくる。以下のコマンドと出力は、可読性向上のために編集してある:
root#
rpcclient -Uroot%xxxx -c 'adddriver "Windows NT x86" \ "dm9110:HDNIS01_de.DLL: \ Hddm91c1_de.ppd:HDNIS01U_de.DLL:HDNIS01U_de.HLP: \ NULL:RAW:Hddm91c1_de.DLL,Hddm91c1_de.INI, \ Hddm91c1_de.dat,Hddm91c1_de.def,Hddm91c1_de.hre, \ Hddm91c1_de.vnd,Hddm91c1_de.hlp,Hddm91c1KMMin.DLL, \ HDNIS01Aux.dll,HDNIS01_de.NTF, \ Hddm91c1_de_reg.HLP' SAMBA-CUPS
cmd = adddriver "Windows NT x86" \ "dm9110:HDNIS01_de.DLL:Hddm91c1_de.ppd:HDNIS01U_de.DLL: \ HDNIS01U_de.HLP:NULL:RAW:Hddm91c1_de.DLL,Hddm91c1_de.INI, \ Hddm91c1_de.dat,Hddm91c1_de.def,Hddm91c1_de.hre, \ Hddm91c1_de.vnd,Hddm91c1_de.hlp,Hddm91c1KMMin.DLL, \ HDNIS01Aux.dll,HDNIS01_de.NTF,Hddm91c1_de_reg.HLP" Printer Driver dm9110 successfully installed.
このステップの後、ドライバーはプリントサーバー上のSambaによって認識される。このコマンドを 入力するときには特別に注意を払う必要がある。フィールドの順番を交換しないこと。それは 明白である。他の変更は、ドライバーファイルのインストールが成功するかもしれないが、 ドライバーの実行が不可能になる。そのため、注意を払うこと!adddriverコマンドの文法に関する ヒントはマニュアルページにあり、必要ならばより詳細な記述を見ておくこと。
ファイルをドライバーファイルとしてSambaが認識したことを示す表示の1つは、
successfully installed
というメッセージである。
他のものは、adddriver
コマンドによってファイルが
2
サブディレクトリ中に動かされた、という事実である。これは再度
smbclient
コマンドで確認できる:
root#
smbclient //SAMBA-CUPS/print\$ -Uroot%xx \ -c 'cd W32X86;dir;pwd;cd 2;dir;pwd'
added interface ip=10.160.51.162 bcast=10.160.51.255 nmask=255.255.252.0 Domain=[CUPS-PRINT] OS=[UNIX] Server=[Samba 2.2.7a] Current directory is \\SAMBA-CUPS\print$\W32X86\ . D 0 Sun May 4 04:32:48 2003 .. D 0 Thu Apr 10 23:47:40 2003 2 D 0 Sun May 4 04:32:48 2003 40976 blocks of size 262144. 731 blocks available Current directory is \\SAMBA-CUPS\print$\W32X86\2\ . D 0 Sun May 4 04:32:48 2003 .. D 0 Sun May 4 04:32:48 2003 DigiMaster.PPD A 148336 Thu Apr 24 01:07:00 2003 ADOBEPS5.DLL A 434400 Sat May 3 23:18:45 2003 laserjet4.ppd A 9639 Thu Apr 24 01:05:32 2003 ADOBEPSU.DLL A 109568 Sat May 3 23:18:45 2003 ADOBEPSU.HLP A 18082 Sat May 3 23:18:45 2003 PDFcreator2.PPD A 15746 Sun Apr 20 22:24:07 2003 HDNIS01Aux.dll A 15356 Sun May 4 04:32:18 2003 Hddm91c1KMMin.DLL A 46966 Sun May 4 04:32:18 2003 HDNIS01_de.DLL A 434400 Sun May 4 04:32:18 2003 HDNIS01_de.NTF A 790404 Sun May 4 04:32:18 2003 Hddm91c1_de.DLL A 876544 Sun May 4 04:32:18 2003 Hddm91c1_de.INI A 101 Sun May 4 04:32:18 2003 Hddm91c1_de.dat A 5044 Sun May 4 04:32:18 2003 Hddm91c1_de.def A 428 Sun May 4 04:32:18 2003 Hddm91c1_de.hlp A 37699 Sun May 4 04:32:18 2003 Hddm91c1_de.hre A 323584 Sun May 4 04:32:18 2003 Hddm91c1_de.ppd A 26373 Sun May 4 04:32:18 2003 Hddm91c1_de.vnd A 45056 Sun May 4 04:32:18 2003 HDNIS01U_de.DLL A 165888 Sun May 4 04:32:18 2003 HDNIS01U_de.HLP A 19770 Sun May 4 04:32:18 2003 Hddm91c1_de_reg.HLP A 228417 Sun May 4 04:32:18 2003 40976 blocks of size 262144. 731 blocks available
他の検査方法は、印刷関連のTDBファイルのタイムスタンプが更新されたという事 (と、もしも条件がそろえば、そのファイルサイズが増えたこと)である。
この時点で、ドライバーはSambaによって登録された。ほんの少しの時間でこのことを確認できる。 しかし、このドライバーはまだ特定のプリンターに対して関連づけられていない。少なくとも3つの 方法で、ドライバーファイルのステータスを確認できる:
任意のWindowsクライアントの、ネットワークコンピューターによるブラウズから、Samba ホストを検索し、SambaのプリンターとFAXフォルダーを開く。任意の プリンターアイコンを選択し、右クリックしてプリンターの を選択する。詳細タブを クリックする。そのプリンターに対するドライバーを示すフィールドがここにある。ドロップ ダウンメニューでそのドライバーを変更できる(知らずにこれをしないように気をつける こと)。Sambaが理解しているすべてのドライバーの一覧を、これを使うことで見ることが できる。新しいものがその中にあるべきである(クライアントの各タイプはこの固有の アーキテクチャリストの中にのみ見ることができる。もしも各プラットフォーム用に インストールされた各ドライバーが無いならば、Windows95/98/MEかWindows NT/2000/XP を見たときとは、このリストは違っている)。
Windows 200x/XPクライアント(Windows NTではなく)の
ネットワークコンピューターによるブラウズから、Sambaサーバーを
探し、サーバーのプリンターフォルダーを開き、空白の部分(プリンターが
ハイライトされていないようにして)を右クリックする。
を選択する。
ドライバータブ上で、新しいドライバーが一覧表示されていることが
確認できる。この表示は、そのドライバーに属するファイルの一覧を調べるのにも使える
(これはWindows NTでは動作せず、Windows 2000とWindows XPでのみ動作する。
Windows NTは タブを提供しない)。この
ダイアログをより簡単に起動するための代替の方法は、DOSプロンプトで入力する方法
である(もちろん、SAMBA-CUPS
の代わりに使用している
Sambaサーバーの名前を使わなければならない)。
rundll32 printui.dll,PrintUIEntry /s /t2 /n\\SAMBA-CUPS
UNIXプロンプトから、SAMBA-CUPS
になっている場所を
使用しているSambaホストの名前にして、xxxxは、rootに割り当てられている実際の
Sambaのパスワードにして以下のコマンド(かあるいはその変形)を動かす:
rpcclient -U'root%xxxx' -c 'enumdrivers' SAMBA-CUPS
これで、Sambaが知っているすべてのドライバーが表示される。新しいものはこの中に
あるべきである。しかし、[Windows NT x86]
ヘッデイング
配下のもののみが一覧表示され、その部分をインストールしていないため、
[Windows 4.0]
配下はない。3番目のカラムは、他に
インストールされたドライバーを、各サポートしたアーキテクチャ用に、一度に
2度表示する。新しいドライバーはWindows NT 4.0 or 2000
のみに表示される。Windows 95, 98, と Meに存在
しているようにするためには、WIN40アーキテクチャとサブディレクトリに対する
完全な手続きを繰り返さなければならない。
ドライバーに好みの名前を付けることが出来る。前と同じファイルではあるが、異なったドライバー
名を付けてadddriver
ステップを繰り返したいのならば、以下のように
行う:
root#
rpcclient -Uroot%xxxx \ -c 'adddriver "Windows NT x86" \ "mydrivername:HDNIS01_de.DLL: \ Hddm91c1_de.ppd:HDNIS01U_de.DLL:HDNIS01U_de.HLP: \ NULL:RAW:Hddm91c1_de.DLL,Hddm91c1_de.INI, \ Hddm91c1_de.dat,Hddm91c1_de.def,Hddm91c1_de.hre, \ Hddm91c1_de.vnd,Hddm91c1_de.hlp,Hddm91c1KMMin.DLL, \ HDNIS01Aux.dll,HDNIS01_de.NTF,Hddm91c1_de_reg.HLP' SAMBA-CUPS
cmd = adddriver "Windows NT x86" \ "mydrivername:HDNIS01_de.DLL:Hddm91c1_de.ppd:HDNIS01U_de.DLL:\ HDNIS01U_de.HLP:NULL:RAW:Hddm91c1_de.DLL,Hddm91c1_de.INI, \ Hddm91c1_de.dat,Hddm91c1_de.def,Hddm91c1_de.hre, \ Hddm91c1_de.vnd,Hddm91c1_de.hlp,Hddm91c1KMMin.DLL, \ HDNIS01Aux.dll,HDNIS01_de.NTF,Hddm91c1_de_reg.HLP" Printer Driver mydrivername successfully installed.
任意のプリントキューにそのドライバーをバインドすることが出来る(しかし、ターゲットの
プリンターに関して意味をなすキューへのドライバーを連携させる事については、責任を
追わねばならない)。繰り返しrpcclient
adddriver
コマンドを実行することは出来ない。おのおのの実行は、それぞれのサブディレクトリ中に
それらを移動することで、[print$]
共有中にファイルを配置して
しまったので、各rpcclient ... adddriver
コマンドの前に
smbclient ... put
を1回実行させなければならない。
Sambaはどのプリンターがどのドライバーに対応しているかを知る必要がある。ドライバーからプリンター
へのマッピングを作成し、この情報をSambaのTDBファイルに格納する。
rpcclient setdriver
はこれを正しく処理する:
root#
rpcclient -U'root%xxxx' -c 'setdriver dm9110 mydrivername'
cmd = setdriver dm9110 mydrivername Successfully set dm9110 to driver mydrivername.SAMBA-CUPS
これはまずい、こういう事は期待していない。この時点では、指定する名前を繰り返す:
root#
rpcclient -U'root%xxxx' -c 'setdriver dm9110 dm9110'
cmd = setdriver dm9110 dm9110 Successfully set dm9110 to driver dm9110.SAMBA-CUPS
コマンドの文法は下記の通り:
rpcclient -U'root%sambapassword
' -c 'setdriver printername
\
drivername
' SAMBA-Hostname
.
これで、ほとんどの仕事が完了したが、まだ全部ではない。
setdriver
コマンドは、Sambaがそのプリンターをすでに知っているときにのみ
成功する。2.2.x中にあるバグは、新しくインストールされたプリンターの認識を妨害する。Samba
を再起動するか、少なくともこれに対応するために、動作中のすべてのsmbdに対してHUPシグナルを
kill -HUP `pidof smbd`
のように送信する必要がある。
Don Quixote曰く、「論より証拠」。印刷することでセットアップした内容の証明が できる。そのため、クライアントPC上にプリンタードライバーをインストールしてみよう。が、 これは思ったよりも簡単ではない。以下で説明する。
特に重要なことは、最初のクライアントPCへのインストール(各アーキテクチャプラットフォーム ごとに)である。一度これが正常に終わると、その後他のクライアントへは、簡単にセットアップ でき、さらなる注意事項は必要ない。以下でフォローすることは、推奨する最初の手順の説明で ある。ここから先はクライアントワークステーションで作業する。そのクライアントからの接続が 書き込みできないbad user nobodyにマップされていないことを確認する。 DOSプロンプトで以下を入力する:
net use \\
SAMBA-SERVER
\print$ /user:root
必要であれば、printer administrator ユーザーに
rootを置き換える。異なったユーザーですでに接続しているならば、エラーメッセージが表示
される。Windowsは共有の接続からログオフする概念が内容に見えるので、その接続のridを
取得するのに簡単な方法はない(ローカルワークステーションからのログオフと混同しない
ように。それは別の事柄である)。Windows NT/200x上では、workstation
サービスを再起動することで、すべての smb/cifs接続から強制的にログオフすることが
できる。Windows ファイルエクスプローラーとWindows用のMSIEのすべてを閉じることを試みる
ことができる。苦肉の策として、再起動しても良い。自動的な再接続の設定が無いことを
理解すること。別のワークステーションに行ってそこからつなぐ方が簡単かもしれない。
printer adminユーザーとして接続出来た後(Samba上のsmbstatus
コマンドで
これを確認できる)、Windowsワークステーションから以下を実行する:
ネットワークコンピューターを開く。
Sambaサーバーをブラウズする。
そのプリンターとFAXフォルダーを開く。
プリンターを選択して右クリックする。
を選択(Windows NT4/200xでは おそらくそれは であろう)。
新しいプリンター(Sambaサーバー上でprintername
という名前の)が
ローカルのプリンターフォルダー中に現れるはずである
( -> ->
-> プリンターとFAX
で確認)。
おそらくは、印刷テストページを出力しようとしているだろう。全部終わった後、プリンターの
プロパティを開き、 タブ上に、これを行うためのボタンがある。
しかし、やってみると"印刷テストページを印刷できませんでした
"という
エラーメッセージが表示される。これは、そのドライバーに対して有効なデバイスモードセット
がないか、「プリンタードライバーデータ」セットが引き続き不完全状態という理由
による。
有効なデバイスモード
を、ドライバーのために設定する必要がある。
それがどういう意味かはこれから説明する。
Windows NT/200x/XPクライアントからプリンターが完璧に使えるようにするには、以下の作業が 必要である:
これらのどれかが不完全だと、クライアントはせいぜい最適な出力以下しか作成できない。最悪の
場合、プリンターから読めないゴミが出力されたり、何も出なかったりするか、印刷時にエラー
メッセージが出る。Sambaは名前つきの値と、すべての印刷に関連する情報をその内部TDB
データベースファイル(ntprinters.tdb
, ntdrivers.tdb
,
printing.tdb
,と ntforms.tdb
)に格納する。
デバイスモードとプリンタードライバーデータのセットはすべてのプリントキュープロパティの ための基本的な設定の集合体であり、賢明な方法で初期化される。デバイスモードとプリンター ドライバーデータは、印刷サーバー(Sambaホスト)上で健全な値に初期化されるべきであり、 そして、クライアントは直接それらを使い始めることが出来る。どのように初期の健全な 値を設定したらよいだろうか?これは、以下の節で説明されるように、あるNT (か200x/XPクライアント)からドライバーをリモートでアクセスすることで行える。
有効なデバイスモードは printer administrator かrootによってのみ初期化できる
(理由は明白であろう)ことに気がつくこと。デバイスモードはプリンタードライバープログラムそれ
自身を実行することのみで正しく設定できる。SambaはこのWin32プラットフォームドライバー
プログラムを実行できないので、この設定は初期状態ではNULLになる(クライアントが使うためには
有効な設定ではない)。幸いなことに、ほとんどのドライバーは、APWの助けかrpcclientで
[print$]
にアップロードされた時、必要であれば、自動的にプリンター
ドライバーデータを生成する。
最初の有効なデバイスモードの生成と設定は、しかし、Sambaサーバー上にそれをクライアントから 設定するには若干のトリックを必要とする。最も簡単な方法は、サーバーのプリンター上のページの 方向を単純に変更することである。これは求められる効果を起こすために、クライアント上で プリンタードライバープログラムを実行することで十分であり、Sambaサーバーに新しいデバイスモードを 戻す。これを行うためには、Windowsクライアントから、ネイティブなWindows NT/200x/XPプリンター プロパティを、下記のようにして使うことが出来る:
手順21.1 プリンタードライバー設定の初期化手続き
ネットワークコンピューターをブラウズする。
Sambaサーバーを見つける。
SambaサーバーのプリンターとFAXフォルダーを開く。
問い合わせ中の共有プリンターを選択する。
プリンター上で右クリックする(最後の節の説明に従っているならすでにここにいるはずである)。
コンテキストメニューの下部にある
を選択する(もっと上に 引き続き エントリを表示しているなら、直近の節で説明 したように、ドライバーのインストールを完了するためにそれをクリックする必要がある)。詳細タブに移動し、 をクリックする。
ページの設定を
から に変更する(そして戻す)。変更が実際に効果を引き起こすように、ページ方向の変更の確定を確実に行う。
そこに居る間、他のクライアントにおけるドライバーインストール時に適用される、 印刷の既定値を設定してもよい。
この手続きは、クライアントプラットフォーム上でプリンタードライバープログラムを動かし、 正しいデバイスモードをSambaにフィードバックし、そして、それをTDBファイルに格納する。 一度ドライバーがクライアント上にインストールされると、もしもSambaのprinter admin ユーザーであれば、localのプリンターフォルダーに アクセスすることによって、類似したステップを行うことも出来る。ここから、印刷作業は 期待した通りに動作する。
Sambaには、プリンターのための既定値のデバイスモードを生成するための、サービスレベルの
default devmode
という名前のパラメーターがある。ある種のドライバー
機能は既定値のプロパティの値でうまく機能する。その他はクライアントのスプーラサービス
をクラッシュするかもしれない。そのたえm、このパラメーターの使用には注意が必要である。
プリンターに対する有効なデバイスモードをクライアントに作成させることと、使用している
サーバーにそれを格納することは、常時よりよい方法である。
各追加ドライバーは、今説明してきたことと同じ方法でインストールできる。
ネットワークコンピューター
をブラウズし、Sambaサーバー上の
プリンターアイコンを開き、プリンターを右クリックし、
を選択する。一度これが完了すると(数秒以上はかからない
が、ネットワークに依存するので、分単位でかかるときもある)、クライアント
ワークステーションの、ローカルのプリンターとFAXフォルダー
中に新しいプリンターが現れる。
Windows 200x/XP Professionalワークステーション上で以下のコマンドを使うことによって、 ローカルのプリンターとFAXフォルダーを開くことが出来る。
rundll32 shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder
一方Windows NT 4.0ワークステーションでは以下のように行う:
rundll32 shell32.dll,Control_RunDLL MAIN.CPL @2
DOS プロンプトウィンドウ内か、 メニュー 中の のどちらかで入力できる。
Sambaサーバー上にドライバーをインストール後(その[print$]
共有中に)、
常時最初のクライアントインストールを正しく完了させねばならない。クライアントから
printer administrator として、まさしくその最初の接続を確立することを
習慣づけるようにすること。これは、以下のように行う:
最初の有効なデバイスモードが実際に初期化される(詳細な説明は 新しいプリンター上のデバイスモードの設定を参照)。
今後のすべてのクライアントインストールのための、使用しているプリンターの既定値の プリンター設定は期待するようになる。
上の方向を横に変更し、適用をクリックし、再度戻すことでこれを行う。 次に、他の設定を変更する(たとえば、常時 A4を使っているときに、 紙のサイズをレターに既定値を変更したくないであろう?既定値として 両面印刷にプリンターを設定したいかもしれないなど)。
Sambaプリンターにrootとして接続するためには、以下のコマンドをWindows 200x/XPのDOS プロンプトから実行する:
C:\>
runas /netonly /user:root "rundll32 printui.dll,PrintUIEntry /p /t3 /n \\
SAMBA-SERVER
\printername
"
root
のSambaパスワードを入力し、しばらく待ち、
をクリックし、すべてのクライアントで使われる既定値と
すべきジョブオプションを設定する。代替として、printer administrator の
設定中のメンバーの中の名前をrootの代わりとして使うことが出来る。
これで、他のすべてのユーザーは同じ方法でドライバーのダウンロードとインストールが
(ポイントアンドプリント
を使って)出来るようになり、既定値も
同じように設定される。もしも、このステップに失敗したら、ユーザーからたくさんの
問い合わせが来ることになるが、たくさんおしゃべりが出来て楽しいことになるだろう。
ドライバーはインストールされた。クライアントによるポイントアンドプリントインストールは 準備ができた。最初のクライアントマシンでダウンロードして使ってみてもよいが、ちょっと 待ってほしい。その前に、有用だと思われる、ちょっとした助言とこつをここで伝授する。 たとえば、前の節で助言したような、プリンターに既定値を設定しなかったとする。利用者は 多くの問題に不満を言うだろう(たとえば、「各ジョブにレターからA4への紙のサイズの 変更を必要とし、それが格納できない」など)。
最後の文は、若干のユーザーと管理者には複雑な気持ちになるかもしれない。何時間もかけて 苦労したのに、設定をセーブできると思ったらそれが出来なかった。それはやった人の 問題ではない。混乱する点は、プリンター名上で右クリックをした時にポップアップされる複数の タブを持つダイアログ中で
を選択したとき、同一である ように見える2つのダイアログが現れ、それぞれは3つの異なった方法でプリンターのオプション 設定を手助けすると言ってくるということである。これの完璧な答えは、Sambaの既定値の ドライバー設定FAQにある:「Windows 200x/XP上ですべてのユーザーで既定値のプリンターオプションを 設定しセーブできない。なぜ?」. どのようにそれを行っている?操作を間違っているのではないか(確かにそれを見つけるのは簡単 ではないが)。すべてを設定するダイアログを起動するのに3つのやり方がある。すべての3つの ダイアログは同じように見えるが、そのうちの1つが意図したものである。すべてのユーザーのために AdministratorかPrint Administratorでこれを行う必要がある。XP Professionalでどのように これを再現したかは以下の通り:
最初の「間違った」方法:
Open the Printers folder.
プリンター(cupshost上のリモートプリンター)を右クリックし、 コンテキストメニューの を選択する。
しっかりとこのダイアログを見て、どのように見えるかを覚えておくこと。
2番目の「間違った」方法:
フォルダーを開く。
プリンター(cupshost上のリモートプリンター) を右クリックし、コンテキストメニューの
を選択する。全般タブをクリックする。
ボタンをクリックする。
新しいダイアログが開く。このダイアログを開いたままにして 親のダイアログに戻る。
3番目の正しい方法(これを最初に行うべきであり、そのあと上記で説明した2番目の方法の ステップ1と2を行う):
詳細タブをクリックする (もしもすべてが「灰色で選択できない」ならば、十分な 権限を持つユーザーでログインしていない)。
ボタンを クリックする。
2つの新しいタブ上のどれかで、 詳細ボタンをクリックする。
新しいダイアログが開く。これを他と比較する。これらは 「B.5」からのものとA.3からのものと比較したときに同じか?
2つの設定ダイアログで何らかの違いがあっただろうか?そうではないはずであろう。しかし、
最後のもののみ、ステップC.1からC.6までの処理は、新しいユーザーのために既定値となる、
任意の設定を恒常的に保存する。もしも全クライアントに同じ既定値を設定したいならば、
クライアントがドライバーをダウンロードする前に(上記のAまたはBの手順に従うことで、
クライアントはユーザー毎の既定値を後で設定出来る)、管理者
としてそれらのステップを行う必要がある。
Windows 200x/XPはユーザー毎の既定値設定が出来、その管理者はそれら固有の設定を行う前に
それを提供する。同一に見えるダイアログの親は、そのウィンドウ名が微妙に違っている。
1つはサーバーBar上のプリンターFoo用の既定値の印刷値
(これが必要なもの)と呼ばれ、もう1つは、
「サーバーBar上のプリンターFooの用の印刷設定
」
と呼ばれる。最後のものは、プリンターを右クリックし、
を選択した時に現れるものである。これは、Windows NTの時代に使うことを教わったものであり、
Windows 200x/XPはで同じように試すのはとても自然である。同じように見えるものに到達する
異なったパスがあるとは夢にも思わないだろうが、機能は異なり、すべてのユーザーに既定値を
設定するダイアログである。
(Windows 200x/XP上で)このコマンドを動かしてみる(正しい権限を持つユーザーで):
rundll32 printui.dll,PrintUIEntry /p /t3 /n\\
SAMBA-SERVER
\printersharename
印刷の既定値ボタン(必要としているもの)があるタブを見るには以下のコマンドを実行する:
rundll32 printui.dll,PrintUIEntry /p /t0 /n\\
SAMBA-SERVER
\printersharename
印刷のプリファレンスボタンを持つタブを見るには (システム全体の既定値を設定しない)、DOSプロンプト内でコマンドを実行するか、 -> を選択する。
昨今のSamba 開発フェーズにおいて浮かび上がった問題は、さまざまな種類のプリンターに関して ドライバーのダウンロードサポートが必要なことである。Windows NT の APW(Add Printer Wizard) を使うやり方は(控えめに言っても)筋が良いとはいえない。一人でクリック祭りをやりながら プリンターのインストールをやりつつ反復性緊張症候群(RSS)の苦痛をを味わいたくなければ、 非会話的なスクリプトについて検討する必要があるだろう。
複数のプリンターが同じドライバーを使う場合、rpcclient setdriver
コマンドは
インストールされたキューに結合されたドライバーを設定するために使える。もしもドライバーが
[print$]
で一度更新され、印刷用TDBファイルに登録されると、
複数の印刷キューによって使うことができる。この場合、すべてのキューに対して
(adddriver
を繰り返し実行する必要なしに)
rpcclient
のsetprinter
サブコマンドを繰り返す必要が
ある。以下はどのようにこれを達成するかの例である:
root#
rpcclient
cmd = enumdrivers [Windows NT x86] Printer Driver Info 1: Driver Name: [infotec IS 2075 PCL 6] Printer Driver Info 1: Driver Name: [DANKA InfoStream] Printer Driver Info 1: Driver Name: [Heidelberg Digimaster 9110 (PS)] Printer Driver Info 1: Driver Name: [dm9110] Printer Driver Info 1: Driver Name: [mydrivername] [....]SAMBA-CUPS
-U root%secret
-c 'enumdrivers'
root#
rpcclient
cmd = enumprinters flags:[0x800000] name:[\\SAMBA-CUPS\dm9110] description:[\\SAMBA-CUPS\dm9110,,110ppm HiVolume DANKA Stuttgart] comment:[110 ppm HiVolume DANKA Stuttgart] [....]SAMBA-CUPS
-U root%secret
-c 'enumprinters'
root#
rpcclient
cmd = setdriver dm9110 Heidelberg Digimaster 9110 (PPD) Successfully set dm9110 to driver Heidelberg Digimaster 9110 (PS).SAMBA-CUPS
-U root%secret
-c \ 'setdriverdm9110
"Heidelberg Digimaster 9110 (PS)
"'
root#
rpcclient
cmd = enumprinters flags:[0x800000] name:[\\SAMBA-CUPS\dm9110] description:[\\SAMBA-CUPS\dm9110,Heidelberg Digimaster 9110 (PS),\ 110ppm HiVolume DANKA Stuttgart] comment:[110ppm HiVolume DANKA Stuttgart] [....]SAMBA-CUPS
-U root%secret
-c 'enumprinters'
root#
rpcclient
cmd = setdriver dm9110 mydrivername Successfully set dm9110 to mydrivername.SAMBA-CUPS
-U root%secret
-c 'setdriverdm9110
mydrivername
'
root#
rpcclient
cmd = enumprinters flags:[0x800000] name:[\\SAMBA-CUPS\dm9110] description:[\\SAMBA-CUPS\dm9110,mydrivername,\ 110ppm HiVolume DANKA Stuttgart] comment:[110ppm HiVolume DANKA Stuttgart] [....]SAMBA-CUPS
-U root%secret
-c 'enumprinters'
(説明フィールドの2つのカンマの間に)ドライバーが一覧表示される、空の文字列がある
「dm9110」プリンターが表示される最初のenumprinters
呼び出しを認識するのは簡単ではないかもしれない。setdriver
コマンドの成功後、すべてはうまくいく。
既定値では、Sambaはsmb.conf
中で定義されているすべてのプリンター共有を、
プリンターフォルダーに表示する。また、このフォルダー中にWindows NTの
プリンター追加ウィザードアイコンも配置される。APWは下記の条件の時にのみ表示される:
接続したユーザーは管理者権限つきでOpenPrinterEx(\\server)
を
正常に実行できる(すなわち、root又はprinter administrador)。
Windows 200x/XP DOSプロント内で下記を試してみる:
runas /netonly /user:root rundll32 printui.dll,PrintUIEntry /p /t0 /n \\
SAMBA-SERVER
\printersharename
をクリックする。
... は下記の設定を含む show add printer wizard = yes (既定値) default)。
APWではいろいろなことが出来る:
新しいドライバーをSambaの[print$]
共有にアップロードする。
存在している印刷キューに(ただしまだドライバーがない)アップロードされたドライバーを関連づける。
存在する印刷キューに対して、以前にアップロードされたものと、現在使っているドライバーを、交換する。
Sambaホストに、完全な形で新しいプリンターを追加する(動作する add printer commandと組み合わせる場合のみ。 プリンターフォルダーからエントリを削除するための delete printer commandも提供してもよい)。
最後のもの(プリンターの追加)はその前のものよりもより多くの努力を必要とする。Sambaサーバーに
正しくプリンターを追加するのにAPWを使うためには、add printer command
に値が定義されている必要がある。プログラムホックは、正しくUNIX印刷システム(すなわち
/etc/printcap
、/etc/cups/printers.conf
か
他の適切なファイル)と、必要であればsmb.conf
にプリンターを追加しなければならない。
クライアントからAPWを使うとき、名前が付いたプリンター共有が存在しない場合、smbdは
add printer commandを実行し、新しいプリンター共有を配置する
ために、再度検索する。もしも共有がやはり定義されていないのであれば、クライアントに
"アクセスが拒否されました"が返る。ユーザーが接続している
状態においてのadd printer commandの実行は、rootアカウント
の必要はない。map to guest = bad userは
間違った権限で書き込みが出来なくなる接続をしてしまうだろう。
smbstatus
コマンドを使ってこのことを検査すべきである。
間違った認証情報で接続してしまった場合、すべてのエクスプローラー画面を閉じ、リブート する以外に、この状況を解決する方法はない。
net use \\SAMBA-SERVER\sharename /user:root
を使うと以下の
エラーメッセージが表示される:
「サーバーか共有リソースへの、複数の接続か、同じユーザーによっていくつかの
ユーザー名を使う事は許可されない。特にサーバー、共有リソースへのすべての接続を
切断し再度試してみる。」
「ネットワークドライブへの割り当て」->
\\SAMBASERVER\\print$
->z:
へのすべての
試みは、以下のようなメッセージがしつこく表示される:
「このネットワークフォルダーは現在異なった認証情報(ユーザー名とパスワード)の元で
接続されている。異なったユーザー名とパスワードで再度接続するために、この
ネットワーク共有への接続まず初めに切断する。」
そのためすべての接続をクローズする。そして再実行する。そうすると同じメッセージが出る。
smbstatus
を使ってSamba側でチェックを行う。するといくつか接続
されているのが分かる。それらをkillする。そうしてもクライアントは同じメッセージを出す。
デバッグレベルを上げて、再接続してsmbd.logをチェックする。ログ中に1行ではない、
いくつかのエラーメッセージがある事が分かる。何らかの接続があったかどうかを考えて見始める。
接続するときの状況を見るため、wiresharkかtcpdumpを走らせてみる。結果はこうなる:
たくさんのデータがネットワーク上に出ている。Windowsは引き続きエラーメッセージを表示して
いる。エクスプローラーのウィンドウをクローズして、再度起動する。再度接続すると今回は
うまくいった!Windowsは接続情報をどこかにキャッシュしているように見え、それは最新状態に
していない(不幸な場合、エラーメッセージを除去するためにリブートの必要があるかもしれない)。
クライアントからサーバーへのすべての接続を強制的に終了する最も簡単な方法は以下を実行する:
C:\>
net use * /delete
これは、マップされたドライバーすべても切断し、要求に応じて新しい接続が出来るようにする。
特定のドライバーに帰属するファイルについて注意するときにはきわめて注意深くする必要がある。
ドライバーバージョン「0」(Windows 9x/Me用で[print$]/WIN/0/
に入るもの)とドライバーバージョン2
(Windows NTのカーネルモード
ドライバーで、[print$]/W32X86/2/
に入るもので、Windows 200x/XPでも
使われる)と、ドライバーバージョン「3」(非カーネルモードドライバーで、
[print$]/W32X86/3/
に入るもので、Windows NTでは使われない)のための
ファイルを混同してはならない。これら異なったドライバーのバージョンは同じ名前のファイルを
含んでいるが実際には全く異なることがとても多い。Sambaからenumdrivers
コマンドで、大小文字が混じったか、小文字のみで表示されている間、もしもそれらをWindows
エクスプローラー(%WINDOWS%\system32\spool\drivers\W32X86\
内にある)で
見る時、大文字で名前を見ることになるので、とてもこれらを混同しやすくなる。もしも、
rpcclient
とサブコマンドを使い、手動でそれらをインストールした場合、
何のエラーメッセージもなしに成功する。その後、クライアント上にインストールしようと
したとき、このサーバーはプリンターに対する適切なドライバーを持っていない
というエラーメッセージを受け取ることになる。
以下は例である。しっかりと数多くのファイルに対して、その名前と綴りを確認し、バージョン2と
3の構成において、その違いを見いだすことが求められる。注意:バージョン0には40の
依存するファイル
があるので、紙面節約のためにそれらは削除してある:
root#
rpcclient -U 'Administrator%
Printer Driver Info 3: Version: [3] Driver Name: [Canon iR8500 PS3] Architecture: [Windows NT x86] Driver Path: [\\10.160.50.8\print$\W32X86\3\cns3g.dll] Datafile: [\\10.160.50.8\print$\W32X86\3\iR8500sg.xpd] Configfile: [\\10.160.50.8\print$\W32X86\3\cns3gui.dll] Helpfile: [\\10.160.50.8\print$\W32X86\3\cns3g.hlp] Dependentfiles: [\\10.160.50.8\print$\W32X86\3\aucplmNT.dll] Dependentfiles: [\\10.160.50.8\print$\W32X86\3\ucs32p.dll] Dependentfiles: [\\10.160.50.8\print$\W32X86\3\tnl32.dll] Dependentfiles: [\\10.160.50.8\print$\W32X86\3\aussdrv.dll] Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cnspdc.dll] Dependentfiles: [\\10.160.50.8\print$\W32X86\3\aussapi.dat] Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cns3407.dll] Dependentfiles: [\\10.160.50.8\print$\W32X86\3\CnS3G.cnt] Dependentfiles: [\\10.160.50.8\print$\W32X86\3\NBAPI.DLL] Dependentfiles: [\\10.160.50.8\print$\W32X86\3\NBIPC.DLL] Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cpcview.exe] Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cpcdspl.exe] Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cpcedit.dll] Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cpcqm.exe] Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cpcspl.dll] Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cfine32.dll] Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cpcr407.dll] Dependentfiles: [\\10.160.50.8\print$\W32X86\3\Cpcqm407.hlp] Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cpcqm407.cnt] Dependentfiles: [\\10.160.50.8\print$\W32X86\3\cns3ggr.dll] Monitorname: [] Defaultdatatype: [] Printer Driver Info 3: Version: [2] Driver Name: [Canon iR5000-6000 PS3] Architecture: [Windows NT x86] Driver Path: [\\10.160.50.8\print$\W32X86\2\cns3g.dll] Datafile: [\\10.160.50.8\print$\W32X86\2\IR5000sg.xpd] Configfile: [\\10.160.50.8\print$\W32X86\2\cns3gui.dll] Helpfile: [\\10.160.50.8\print$\W32X86\2\cns3g.hlp] Dependentfiles: [\\10.160.50.8\print$\W32X86\2\AUCPLMNT.DLL] Dependentfiles: [\\10.160.50.8\print$\W32X86\2\aussdrv.dll] Dependentfiles: [\\10.160.50.8\print$\W32X86\2\cnspdc.dll] Dependentfiles: [\\10.160.50.8\print$\W32X86\2\aussapi.dat] Dependentfiles: [\\10.160.50.8\print$\W32X86\2\cns3407.dll] Dependentfiles: [\\10.160.50.8\print$\W32X86\2\CnS3G.cnt] Dependentfiles: [\\10.160.50.8\print$\W32X86\2\NBAPI.DLL] Dependentfiles: [\\10.160.50.8\print$\W32X86\2\NBIPC.DLL] Dependentfiles: [\\10.160.50.8\print$\W32X86\2\cns3gum.dll] Monitorname: [CPCA Language Monitor2] Defaultdatatype: []secret
' -c 'enumdrivers 3' 10.160.50.8
もしも「バージョン 2」ファイルと「バージョン 3」ファイルを異なった テキストファイルに書き込み、その結果を比較すると以下のようになる:
root#
sdiff 2-files 3-files
cns3g.dll cns3g.dll iR8500sg.xpd iR8500sg.xpd cns3gui.dll cns3gui.dll cns3g.hlp cns3g.hlp AUCPLMNT.DLL | aucplmNT.dll > ucs32p.dll > tnl32.dll aussdrv.dll aussdrv.dll cnspdc.dll cnspdc.dll aussapi.dat aussapi.dat cns3407.dll cns3407.dll CnS3G.cnt CnS3G.cnt NBAPI.DLL NBAPI.DLL NBIPC.DLL NBIPC.DLL cns3gum.dll | cpcview.exe > cpcdspl.exe > cpcqm.exe > cpcspl.dll > cfine32.dll > cpcr407.dll > Cpcqm407.hlp > cpcqm407.cnt > cns3ggr.dll
だまされてはいけない!各バージョン用の、同一の名前のドライバーファイルは、サイズを 比較して分かるように、その内容が異なっているかもしれない:
root#
for i in cns3g.hlp cns3gui.dll cns3g.dll; do \ smbclient //10.160.50.8/print\$ -U 'Administrator%xxxx' \ -c "cd W32X86/3; dir $i; cd .. ; cd 2; dir $i"; \ done
CNS3G.HLP A 122981 Thu May 30 02:31:00 2002 CNS3G.HLP A 99948 Thu May 30 02:31:00 2002 CNS3GUI.DLL A 1805824 Thu May 30 02:31:00 2002 CNS3GUI.DLL A 1785344 Thu May 30 02:31:00 2002 CNS3G.DLL A 1145088 Thu May 30 02:31:00 2002 CNS3G.DLL A 15872 Thu May 30 02:31:00 2002
多くの例では、上記の例よりももっと違っている。結論:各ドライバーバージョン用の正しいドライバー ファイルを注意深く選択しなければならない。名前だけに頼っても、異なったドライバー バージョンに属するファイルを交換してもいけない。
Windows NT/2000印刷サーバーは各プリンターに対してポートを結びつける。これらは通常、
LPT1:
、COM1:
、FILE:
のような形式である。Sambaもプリンターに結びついたポートという概念をサポートせねば
ならない。既定値では、システム上「Sambaプリンターポート」という名前の1つの
プリンターポートのみが存在する。Sambaは印刷するために、「ポート」のようなものは
実際に必要はしていない。むしろ、これはWindowsクライアントの要求である。この情報を要求する
時、有効なポートについて告知されることを強く要求する。それ以外だとエラーメッセージを表示
する。そのため、SambaはWindowsクライアントに支障がないよう、ポート情報を偽装する。
Sambaは内部的に同等のプリンタープーリング
という概念をサポートして
いない。プリンタープーリングは論理プリンターを複数のポートに、ロードバランシングか
フェイルオーバーのように割り当てるものである。
もしも何らかの理由か、他の理由で(Sambaでそういうことが出来るか、ユーザーと管理者は知る べきではないが)複数のポートを定義する要望がある場合、システム上のポートの一覧を生成する 外部プログラムを定義するために使えるenumports commandを設定する。
印刷はうまくいっているが、まだ問題がある。ほとんどのジョブの印刷はうまくいくが、 いくつかは全く印刷できない。いくつかのジョブはうまくいっていないように見えるフォントの 問題を抱えている。いくつかのジョブは速やかに印刷するが、いくつかはとても遅い。それら 全部について触れることは出来ないが、 CUPSによる印刷の章の 「間違ったPostscriptドライバー設定の防止」、 クライアント上の危険なPostscriptドライバー設定の防止 の短い節を読むことを推奨する。
ImprintsツールセットはWindows NT APWの同等品をUNIXで提供する。完全な情報は、Imprints のソースディストリビューションを含むドキュメントがある、 ImprintsのWebサイトを参照して ほしい。この節は、Imprintsの機能について簡単な紹介を提供するのみ行う。
不幸にも、Imprintsツールセットはもはやメンテナンスされていない。2000年12月から プロジェクトは新しいメンテナを必要としている。持つべきスキルのうち最も重要なものは PerlのコーディングとSambaで使うMS-RPCベースの印刷についての興味である。もしも ボランティアを希望するならば、Sambaテクニカルメーリングリストで希望を調整してほしい。 ツールセットはいまだに便利であるが、使うために準備されているパッケージは古いプリンター モジュールに対してのもののみである。Imprintsが持つべきであるならば、より更新された プリンタードライバーのパッケージが必要である。Imprintsにツールセットに関する情報は Imprintsホームページから 得ることが出来る。
Imprintsは以下をサポートするためのツールの集合体である:
Windows NTと 95/98プリンタードライバーパッケージに関連する集中した情報のリポジトリを提供する。
Imprintsプリンタードライバーパッケージを作成するためのツールを提供する。
中央のインターネット(又はイントラネット)Imprintsサーバーリポジトリからプリンタードライバーを 得、リモートのSambaとWindows NT印刷サーバー上にそれをインストールする事を提供する。
プリンタードライバーパッケージの作成手順はこのドキュメントの範囲外である(より詳細は、Sambaの ディストリビューションに含まれているImprints.txtを参照)。簡単に言うと、Imprintsドライバー パッケージは、ドライバーファイル、関連するINFファイルとクライアントがインストールするのに 必要な制御ファイルを含む、gzipされたtar形式ファイルである。
Imprintsサーバーは、実際には、標準HTTPメカニズム経由で問い合わせを受けることが出来る データベースサーバーである。データベース中の各プリンターエントリは、実際にダウンロード するパッケージを示すURLに関連づけられている。各パッケージは、実際にダウンロードした ものが、Imprintsデータベース中で参照されるものかどうかを検査できるよう、GnuPGを使って デジタル署名されている。このセキュリティ検査を無効にしないことを強く推奨する。
Imprintsクライアントに関連するさらなる情報は、Imprintsソースパッケージ中にある、
Imprints-Client-HOWTO.ps
という文書ファイルに書いてある。
Imprintsクライアントインストールは以下の2つの形式がある:
コマンドラインPerlスクリプト一式。
コマンドラインPerlスクリプトへのGTK+ベースのグラフィカルインタフェース
(両方の形式による)クライアントのインストールは、リモートSambaとWindows NTプリントサーバー 上へのダウンロードとドライバーのインストールという意味と同じような、既存のプリンターモデル名 の一致リストのための、Imprintsデータベースサーバーに問い合わせる手段を提供する。
基本的なインストール手順は4つのステップがあり、Perlコードはsmbclientとrpcclientを包み こんでいる。
与えられたドライバーがサポートする各アーキテクチャに対して:
rpcclient: リモートサーバー上の適切なアップロードディレクトリを取得する。
smbclient: ドライバーファイルをアップロードする。
rpcclient: AddPrinterDriver() MS-RPCを発行する。
rpcclient: 実際にプリンターの作成を行うためにAddPrinterEx() MS-RPCを発行する。
Imprintsツールセットを実装するときに発生した問題の1つは、数多くサポートされている クライアントアーキテクチャ間での名前空間の問題であった。例えば、Windows NTには 「Apple LaserWriter II NTX v51.8」という名前のドライバーを含んでいるが、 Windows 95はこのドライバーの対応するバージョン「Apple LaserWriter II NTX」 を呼び出す。
問題は、プリンターに対してどんなクライアントドライバーをアップロードするかということを どのようにして知るかと言うことである。抜け目がない読者は、Windows NTのプリンター プロパティのダイアログのみが、そのプリンタードライバー名に空白を含んでいることを覚えて いるだろう。下記のWindows NT 4.0システムレジストリを簡単に見てみると、
HKLM\System\CurrentControlSet\Control\Print\Environment
これは、Windows NTが常時 NTドライバー名を使うことを明白にしている。これは、Windows NTが 少なくともWindows NTバージョンのプリンタードライバーが存在することを常時要求しているので 問題はない。Sambaは内部的にはそれを要求しない。そのため、 「すでにインストールされていないのに、なぜNTドライバー名を使うことが出来るのか?」 という疑問が生じるだろう。
この限界を回避する方法は、すべてのImprintsドライバーパッケージがIntel Windows NTと95/98 プリンタードライバーを含み、そのNTドライバーが最初にインストールされることを要求することである。
以下のMS Knowledgeベースの記事は、Windows 2000クライアントを扱う必要がある場合に何らかの
手助けになるかもしれない。
ユーザーによる操作なしで Windows にプリンターを追加する方法
(Microsoft KB 189105(日本語))。
これは又Windows XP Professionalクライアントにも適用できる。この節で示すアイデアの概要は、
ネットワークとローカルプリンターとそのドライバーをインストールするために適用できるコマンド
ライン手法を説明するこの記事によって触発されたものである。これは、ログオンスクリプトと
統合すると最も便利である。コマンドプロンプト(DOSプロンプト
)で
以下のようにタイプすることにより、どのようなオプションが有効かを見ることができる:
rundll32 printui.dll,PrintUIEntry /?
すべての有効なコマンドラインスイッチを表示するウィンドウがポップアップする。 大規模な 例題リストも提供される。これは、Windows 200x/XPのみである。Windows NT上では動作 しない。Windows NTはそれぞれねリソースキット内である種の他のツールをおそらく 持っている。各行が実際に何をするかについての簡単な説明がある、クライアントログオン スクリプトが含んでも良いかもしれないものについての助言は以下の通り(これはSamba 経由で200x/XP Windowsクライアントがプリンターにアクセスする場合に動作し、さらに、 Windowsベースのプリンターでも同様である)。
rundll32 printui.dll,PrintUIEntry /dn /n "\\cupsserver\infotec2105-IPDS" /q
rundll32 printui.dll,PrintUIEntry /in /n "\\cupsserver\infotec2105-PS"
rundll32 printui.dll,PrintUIEntry /y /n "\\cupsserver\infotec2105-PS"
コマンドラインパラメーターで使われるパラメーターの一覧である:
ネットワークプリンターを削除する。
表示を抑制する。
プリンターに名前を付ける。
ネットワークプリンター接続を追加する。
プリンターを既定値のプリンターにする。
1行目ではinfotec2105-IPDSという以前に存在していた可能性の
あるネットワークプリンターを削除する(CUPSに変換された、サーバーから削除されたLPRngの
ネイティブなWindowsドライバーで使われていた)。終わりにある/q
は、ポップアップする確認あるいはエラーダイアログボックスを抑制する。これらは
ユーザーログオンについては提供されない。
2行目では、新しいプリンターinfotec2105-PS(実際には同じ物理
デバイスであるが、新しいCUPS印刷システムによって動作し、CUPS/Adobe PSドライバー
と関連づけられる)を追加する。プリンターとそのドライバーはユーザーのログインに先立って
追加されねばならない(すなわち、この章の前の方で説明した手順か、
cupsaddsmb
を動かすことによって)。ドライバーはユーザーがログイン
しようとしているときに、クライアントPCに自動的にダウンロードされる。
3行目では、この新しいネットワークプリンターを既定値のプリンターに設定する(この方法を 使っていくつかのプリンターが存在するかもしれなく、また、そのうちのいくつかは同じ ようにローカルであってもよいので、既定値のプリンターを決める事が必要となる)。 既定値のプリンターの選択は、もちろん、異なったユーザーでは異なっても良い。
2番目の行は、もしもプリンターinfotec2105-PSがすでに
cupsserver
上のプリントキューで動作していて、もしも
プリンタードライバーがSambaのドライバーリポジトリである[print$]
中に、すでにきちんとアップロード(APW
,
smbclient/rpcclient
かcupsaddsmb
経由で)
されている場合にのみ動作する。バージョン3.0より前のある種のSambaのバージョンでは、
プリンターインストール後とドライバーアップロード後にsmbdの再起動を要求する。そうでないと、
スクリプト(かその他のルライアンとドライバーダウンロード)は失敗する。
ログオンスクリプトからの、インストールされたネットワークプリンターの存在をテストする簡単な 方法は無いので、わざわざ調べる必要はない。ユーザーログイン時に毎回インストールの削除/ 再インストールが出来るようにしておくこと。それはとても短時間である(1から2秒くらい)。
ほかにこの件に関する有用な情報は以下の通り:
全部のユーザーログイン時に自動的に、任意のプリンター既定値の設定変更を適切に設定する。
異なったワークステーションからドメインにユーザーが「ローミング」でログイン出来るようにする。
各ユーザー毎にネットワークプリンターがインストールされるので、これにより、インストールの 最新性を保持する作業をより単純化する。ログイン時に数秒余計にかけることはほとんど 目立たないだろう。プリンターは、クライアントからユーザーが介入する必要性なしにサーバー上で 集中して追加、変更と削除ができる(ログインスクリプトは最新性を保持する必要はある)。
addprinter
コマンドはSambaによって実行されるシェルスクリプトか
プログラムとして設定できる。これはSambaプリントサーバーに対してクライアントからAPWを
走らせることによって起動される。APWはユーザーにいくつかのフィールドを埋めることを
要求する(それはたとえばプリンター名、使用するドライバー、コメント、ポートモニターなど)。
これらのパラメーターはAPWによってSamba上に渡される。もしも、addprinterコマンドが
新しいプリンターを作成できるように(旧式のシステム上で、適切なprintcapエントリを書くか、
より新しいシステム上でlpadmin
コマンドを実行することによって)と、
それに関連する共有を作成するように設計されていた場合、APWはSamba上とUNIX印刷
システム上に、結果として新しいプリンターを作る!
基本的なNT形式のプリンタードライバー管理は2.2.xリリースから3.0ではほとんど変更はなかった (小さな改善はたくさん適用されたが)。特に、設定中で廃止されるパラメーターを使うのをやめる、 前述の助言に従うならば、移行はとても簡単である。既存の2.0.x設定か、Samba 2.2で Windows 9x/Me形式の印刷形式を継続したいのであれば、それはもっと努力が必要となる。 適切なリリースノートとSamba-2.2.xのHOWTO文書を読んでほしい。以下のいくつかの方法に 沿うことが出来る。移行のための可能なシナリオは以下の通り:
新しい Windows NTプリンターとドライバーサポートについて学習し、使う必要がある。以前
使っていたパラメーターprinter driver file
,
printer driver
とprinter driver location
はもはやサポートされない。
もしもWindows NTプリンタードライバーサポートを利用したいのであれば、新しい設定の ために、Windows 9x/Meドライバーを新しいものへ移行する必要がある。
存在するprinters.def
ファイル(削除されたパラメーター
printer driver file
中で指定されているもの)はもはやSamba
では動作しない。3.0 において、smbd は[print$]
中と TDB ファイル中の
追加の設定だけで、プリンター用の Windows 9x/Me ドライバーファイルを捜そうとする。
もしもそれが失敗すると、(2.2.xが使うように)printers.def
(とすべての関連するパラメーター)を使うようにはならない。
make_printerdef ツールは削除され、これに関する下位互換性はない。
使用しているSambaホスト上のプリンター用の
[print$]
共有中にWindows 9x/Meドライバーをインストールする
必要がある。ドライバーファイルは[print$]
の
「WIN40/0」サブディレクトリ中に格納され、その他の設定と情報は印刷
関連のTDBファイル中に格納される。
もしも、存在するprinters.def
ファイルを新しい設定中に移行
したいならば、現在唯一の解は、NTドライバーと9x/Meドライバーをインストールするために、
Windows NT APWを使うことである。これはsmbclientとrpcclientを使うスクリプトで
行える。その例は、
Imprints
のWebサイト上にあるImprintsクライアントインストールを参照。また、
CUPS 印刷環境中のrpcclientの使用法についての
議論も参照のこと。
この件に関しては、 リモートとローカル管理Netコマンドでも 触れられている。もしもこの機能に関しての文書の更新をボランティアとして手助けしてくれる のであれば、John H. Terpstraに連絡を してほしい。
UNIXシステムで有効な(とほとんどの場合、/etc/shadow
というファイルに
1方向ハッシュ形式として格納される)rootパスワードと、Samba認証時に使うパスワードと混同
しないこと。SambaはUNIXパスワードを知らない。Sambaリソースへのrootアクセスは最初に作成
されなければならないSamba用のrootアカウントを必要とする。これは以下のように、
smbpasswd
を使って行える:
root#
smbpasswd -a root
New SMB password: secret
Retype new SMB password: secret
存在するUNIX印刷システムスプールディレクトリをSambaスプールディレクトリに使っては
ならない。それは、簡単で場所を節約できるように見えるが、これは問題を引き起こす。
2つは分離せねばならない。UNIX/Linuxシステムプリントスプールディレクトリ(すなわち
/var/spool/cups
)は通常cups
や
lp
のような非特権ユーザーによって所有される。さらに追加で、
スプールディレクトリのパーミッションは、通常所有者とグループに対して制約されて
いる。別の言い方をすると、Sambaスプールディレクトリは全員に対して書き込み可能で、
一時スプールファイルの所有者のみがファイルを変更したり削除できるようにする、
't'ビットを設定すべきである。
UNIX/Linuxホスト上で使う印刷スプールシステムのタイプに依存するので、スプール管理 アプリが見つける、管理されているジョブキューの一部でないファイルは削除される。 これは、ジョブが(Sambaによって)このディレクトリ中にスプールされて消えてしまう現象の 説明になるだろう。