この記事では、以下の内容について学びます。
- プリンター共有の作成と構成を行う方法
- Samba と CUPS (Common UNIX Print System) の連携を設定する方法
- Windows プリント・ドライバーの管理と、プリント・ドライバーをダウンロードするための設定を行う方法
- [print$] 共有を構成する方法
- プリント共有に起因するセキュリティー問題
- 印刷のアカウンティングのセットアップと管理を行う方法
この記事は、LPIC-3 Specialty「302 Mixed Environment Exam」試験の主題 312 の目標 312.3 の試験対策となります。この目標の重要度は 2 です。
この連載記事を最大限に活用するには、Linux の高度な知識と、記事に記載されたコマンドを演習できる実際の Linux システムが必要です。さらに、ファイルおよびプリント・アクセスのテストに使用できる Windows 環境を利用できることも条件となります。
Samba のプリンター共有を設定するには、ファイル共有を設定する場合とほとんど同じく、セクションを定義し、いくつかのパラメーターを設定し、クライアントを接続します。ただし、印刷が関連してくるため、プリンター共有とファイル共有の設定では、微妙な違いがいくつかあります。リスト 1 は、smb.conf 内でのごく一般的な設定です。
リスト 1. 一般的な印刷の設定
[global] load printers = yes printing = sysv [printers] comment = Printers path = /var/spool/samba writable = no printable = yes |
リスト 1 では、特定のプリンターを 1 つも定義していません。代わりに、Samba にシステム・プリンターのリストをロードするよう指示し、続いて [printers] という名前のテンプレート・セクションを定義しています。以前の記事で、ホーム・ディレクトリーのテンプレートとして
[homes] セクションを使用したことを思い出してください。プリンターでこのセクションに相当するのが、[printers] セクションです。
グローバル・レベルでは、まず load printers パラメーターによって Samba
に対し、システム・プリンターを検索して見つかったプリンターを共有プリンターとして設定するように指示をしています。次の printing = sysv は、古い SysV 印刷システムを使用することを意味します。今のところはこれで問題ありませんが、後で、これよりも新しい CUPS 印刷システムを使用するように設定する方法を説明します。
[printers] セクションでは、各プリンター共有の内容を定義します。プリンターごとに特殊なオプション
(ユーザーの制限など) を指定する必要がない限り、通常はテンプレートを使用するので問題ありません。path
は、Samba が使用するパスです。ユーザーが Samba プリンターに印刷する際、smbd
はシステムの印刷機能にジョブを送信する前に、この path
パラメーターで指定されたディレクトリーにファイルをスプールすることになります。そして、このセクションの最後で、共有が書き込み可能でないこと (writable = no)、そして印刷可能であること (printable = yes) を確実にして、Samba がプリンター共有を適切に使用できるようにします。
このように設定した後、サーバーを閲覧すると、プリンターのリストを確認できるはずです。適切なプリンター・ドライバーが Windows クライアントにインストールされていれば、そのプリンターをインストールして、ネットワークを介して使用できるようになります。
ほとんどの Linux ディストリビューションでは、CUPS が SysV 印刷システムに置き換わっています。SysV 印刷システムよりも柔軟でユーザー・フレンドリーな
CUPS は、レガシーの印刷システムとシームレスに連携する互換レイヤーとなります。lp または lpq コマンドを使用しているとしたら、おそらく CUPS を経由しているはずです。
CUPS がレガシーの印刷システムを改良した点の 1 つに印刷ジョブの事前処理があります。例えば、PDF ファイルをプリンターに送信すると、CUPS はそのファイル・フォーマットを理解し、GhostScript のような手段を使って出力を送信し、プリンターが理解できる言語にファイルを変換することができます。かつて、このプロセスを可能にするには相当なハッキングが必要でしたが、今では CUPS がまとめて対応してくれます。
リスト 2 は、CUPS 印刷を使用可能にするために最小限必要となる設定です。
リスト 2. CUPS サポートを使用可能にするt
[global] printing = cups printcap = cups |
リスト 2 の設定はグローバル・モードで適用されます。最初の printing では、lpr の代わりに CUPS ライブラリーを使用して印刷が行われるように指定しています。そして次の printcap では、Samba に対し、システムの printcap ファイルからではなく、CUPS デーモンからプリンターのリストを取得するように指示をしています。ただし、CUPS を使用するとしても CUPS に非対応のアプリケーションにも対応するために、printcap ファイルはそのまま残されます。
Samba に CUPS を統合した場合でも、印刷キューを管理するには CUPS ツールを使用します。CUPS についてよく知らない場合のために、特に重要なコマンドについて以下で概説しておきます。
lp: 出力をプリンターに送信します (通常は、例えばcat /etc/motd | lpのように、このコマンドに他のコマンドによる出力をパイプします)。cupsenableおよびcupsdisable: それぞれプリンターを起動、停止するコマンドです (この 2 つは、プリンターをリセットする場合にも使えるコマンドです)。cupsreject: プリンターに対するジョブを拒否または受け入れます (このコマンドはプリンターの状態を変更することなく、CUPS に着信ジョブを拒否するように指示します)。lpadmin: プリンターの設定をするために使用することができます。例えばクォータを割り当てるなどです。lpq: 指定されたプリンターのキューに入れられているエントリーを表示します。lprm: ジョブをキャンセルしてプリンターから削除するために使用することができます。
通常、プリンターは Adobe PostScript や PCL (Printer Command Language) などのページ記述言語 (PDL: Page Description Language) を理解します。プリンターによっては、ベンダー固有の PDL を使用する場合もあります。アプリケーションの印刷コマンドをプリンターが理解する PDL に変換するのは、Windows のプリンター・ドライバーの役目です。プリンター・ドライバーなしでは、アプリケーションが生成するコマンドが直接テキストとして印刷されることになり、印刷対象とは関係のない文字が大量に出力されてしまいます。
このようにクライアントに印刷対象の文書を処理させ、プリンターに対応するフォーマットにする方法は、RAW 印刷と呼ばれます。このモードの場合、Samba は単にクライアントからのデータをプリンターにコピーするだけに過ぎません。この手法には、以下の 2 つの欠点があります。
- クライアントにプリンター固有のドライバーがなければ印刷することができません。
- 例えば印刷されたページ数をログに記録する場合など、Samba がジョブの実行内容を簡単に理解することができません。
以上の欠点はありますが、RAW 印刷は簡単にセットアップすることができます。また、さらに手を加えることで、Samba サーバーからプリンター・ドライバーを配布することも可能です。
Samba にプリンター・ドライバーを配布させるのは簡単なことではありません。最善の方法は、汎用の PostScript プリンター・ドライバーをインストールして、これをすべてのプリンターに対して使用することです。クライアントの PostScript は、CUPS のインテリジェントな印刷システムによって、プリンターが理解可能な内容に変換されます。また、この方法をネイティブ・ドライバーの代わりに使用することで、印刷されるページ数を把握できるようにもなります。
この方法を用いるには、CUPS ドライバーをダウンロードする必要があります。最新のドライバー・ファイルは cups-windows-6.0-1.i386.rpm です (「参考文献」のリンクを参照)。このパッケージは、以下のファイルを /usr/share/cups/drivers にインストールします。
- cups6.inf
- cups6.ini
- cupsps6.dll
- cupsui6.dll
CUPS ドライバーがサポートするのは、Microsoft Windows 2000 以降のクライアントだけです。通常はこれで問題ありませんが、後で使用する Samba ユーティリティーは、レガシーの Microsoft ドライバーを見つけるようにハード・コーディングされており、該当するドライバーが見つからなければ失敗します。お使いのシステムには以下のファイルがあるはずです。これらのファイルを /usr/share/cups/drivers にもコピーしてください。
- ps5ui.dll
- pscript5.dll
- pscript.hlp
- pscript.ntf
一般に、上記のファイルは C:\WINDOWS\ServicePackFiles\i386 ディレクトリーに配置されています。
これで、CUPS ドライバー・ディレクトリーに 8 個のファイルがすべて揃ったので、print$ 共有を作成する作業に取り掛かります。print$ 共有は Windows クライアントにハード・コーディングされ、プリンターのインストール時には、クライアントはここでプリンター・ドライバーを探すことになります。このプリンター共有はごく標準的な共有です (リスト 3 を参照)。
リスト 3. print$ 共有
[print$] comment = Printer Driver Export path = /etc/samba/drivers browseable = yes guest ok = no read only = yes write list = root |
リスト 3 に記載されている単純な共有は、root 以外の全ユーザーに対しては読み取り専用となっています。この共有を有効にするには、忘れずに Samba を再起動してください。
最後に、cupsaddsmb
コマンドを使用してプリンター・ドライバーをインストールします。Downstairs_Laser の場合は、cupsaddsmb -v
Downstairs_Laser を実行するだけでインストールすることができます。促されるのに応じて root のパスワードを入力すると、画面に一連のアクティビティーが相次いで表示されます。
インストールが完了すると、クライアントは Samba サーバーを閲覧してプリンターをダブルクリックすることで、そのプリンターを使用できるようになります。プリンターを識別したり、ドライバーをインストールしたりするなどの追加のステップを行う必要はありません。
汎用の CUPS PostScript ドライバーを使用すれば、CUPS は何の印刷が行われているのかを理解することができます。Windows
ドライバーを配布することにした場合の手順は上記手順とよく似ていますが、cupsaddsmb
コマンドは使用しません。また、自分でドライバーを /etc/samba/drivers
にコピーしますが、ドライバー・ファイルはアーキテクチャー固有のディレクトリーに配置する必要があります (cupsaddsmb を使用すると、自動的にドライバーが配置されます)。例えば、32 ビット・ドライバーには W32X86 が使用されます。
Samba にドライバーの情報を提供するには、rpcclient
コマンドを使用します。ドライバーの情報としては、プリンター・ドライバー・ファイルの名前とプリンターの正式な名前を渡す必要があります。「参考文献」から詳しい解説付きの例を参照してください。
プリンターに関する「アカウンティング」は、ユーザーごとのページ使用状況を追跡、制限することに尽きます。一方、「セキュリティー」とは、必要に応じてどのユーザーがプリンターを使用していて、アクセスを制限しているかを判別できることを意味します。この場合のアクセスは、プリンターへの出力が可能なアクセスである場合も、他のユーザーのジョブをキャンセルすることが可能なアクセスである場合もあります。
印刷プロセスにおける Samba の役割は、クライアントの印刷ファイル (PostScript など) を取得し、それを CUPS に送信することです。例えば印刷キューの状態をクライアントに表示する場合など、Samba は何を行うにしても、CUPS 経由で行います。CUPS はファイルをキューに入れます。つまり、CUPS がプリンターを制御し、Samba が CUPS とクライアントの間の仲介役を務めるということです。
Internet Printing Protocol を使用すれば、クライアントから直接 CUPS に印刷させるようにすることも可能ですが、Microsoft Network Neighborhood からプリンターをインストールする際の容易さを見過ごすことはできません。クライアントが直接 CUPS に接続する場合、Samba レベルで行うあらゆる制御が CUPS レベルでは無効になる可能性があることを忘れないでください。
例えば、プリンター共有を保護するために、valid users = alice, bob を設定して、2 人のユーザーだけに印刷を許可しているとします。この場合、ユーザー mallory が Samba を使用して印刷しようとしても、その要求は拒否されます。けれども、CUPS に同じような許可が設定されていない場合は、mallory は CUPS キューを介してプリンターに印刷することができます。
もう 1 つのセキュリティー上の考慮事項は、ゲスト・ユーザーの使用です。印刷操作を行う必要があるすべてのユーザーを認証できる場合には、設定ファイルの [printers]
セクションに必ず guest ok = no と指定してください。これにより、認証されたユーザーだけに印刷が許可されることになります。さもなければ、不明なユーザーでもプリンターに出力できてしまいます。
印刷ジョブの場合と同じく、アカウンティング作業に対処するのは Samba ではなく、CUPS です。CUPS では、プリンター・クォータを使用することができます。プリンター・クォータは、ユーザー 1 人あたりが特定の期間に印刷できるページ数を制限します。リスト 4 に、プリンターにクォータを設定する方法を示します。
リスト 4. プリンターにクォータを設定する
# lpadmin -p Downstairs_Laser -o job-quota-period=604800 -o job-page-limit=100 \ job-k-limit=50000 |
リスト 4 は、プリンターに 3 つのオプションを設定しています。最初のオプションは、ジョブのクォータ期間で、上記の例では、604,800 秒 (1 週間) に設定されています。2 番目のオプションは、この指定のウォータ期間のページ制限です。上記の例では 100 ページに制限されています。3 番目のオプションは、印刷可能なサイズを 50MB に制限していますが、この最後のオプションは必須ではありません。この値を測定するのは難しいというのがその理由ですが、グラフィックが多用されたファイルの印刷を制限する必要がある場合には、このオプションが役立ちます。
プリンターのクォータを検証または確認するには、/etc/cups/printers.conf を調べてください。QuotaPeriod、PageLimit、および KLimit オプションに、上記で追加した値がそれぞれ設定されているはずです。クォータを削除するには、値を 0 に設定します。
各印刷ジョブは、page.log という名前のファイルにログを記録します。このファイルは多くの場合、/var/log/cups に配置されています。リスト 5 に、このファイルに記録される典型的な行を記載します。
リスト 5. 典型的なページ・アカウンティング・ログ
Downstairs_Laser 755 sean [26/Apr/2011:15:02:27 -0500] 1 1 - localhost smbprn.0019.FWqosE |
プリンターのアカウンティングに特に関連するのは、行の左側の部分です。これらのフィールドの内容を記載順に説明します。
- プリンター名
- 印刷ジョブに割り当てられたジョブ番号
- 印刷を行ったユーザー
- GMT 形式の日付とタイムゾーンのオフセット
- 印刷されたページ数
- 送信された部数
したがって、使用されたページの数は、印刷されたページ数と送信された部数を掛けた値となります。残りのフィールドについての説明は、「参考文献」を参照してください。
注: CUPS クォータに伴う最大の制約事項は、これがすべてのユーザーに適用されることです。
次回は LPI-302 試験の目標 312.4 に備えるために、Samba をプライマリー・ドメイン・コントローラーとバックアップ・ドメイン・コントローラーとして機能するように構成し、Microsoft のプライマリーおよびバックアップ・ドメイン・コントローラーと連携させる方法について詳しく説明します。
学ぶために
- Web バージョンの smb.conf の man
ページは、コマンドライン・バージョンよりも使い勝手に優れています。
- developerWorks の主題 107
に関する教材を読んで、コマンドラインによる印刷について復習してください。
- Samba HOWTO の第
21 章で、CUPS が登場する前に使用されていた「旧式」の印刷サポートについて説明しています。このサイトには、Windows
プリンター・ドライバーを追加する例と解説も記載されています。
- Samba HOWTO の第
22 章で、CUPS と Samba の統合をさらに詳しく説明しています。
- この記事で説明したページ・ログのフィールドの他に報告しなければならない情報がある場合には、CUPS
マニュアルの page_log
セクションに、ページ・ログ内のすべてのフィールドがリストされています。
- LPIC Program サイトでは、LPI の 3 つの Linux
システム管理資格認定レベルについて、詳しい目標、タスクのリスト、そして出題例を調べられます。特に、LPI-302
の具体的な目標とタスクおよび出題例を調べてください。
- developerWorks の連載「LPI exam
prep」をすべて読んで、Linux の基礎を学び、2009年4月以前の LPI 試験の目標に基づくシステム管理者認定試験に備えてください。
- 「Exam
Preparation Resources for Revised LPIC Exams」に、LPI で管理している他の認定の教材がリストされています。
- developerWorks Linux ゾーンで、Linux 開発者および管理者向けのハウツー記事とチュートリアル、そしてダウンロード、ディスカッション、フォーラムなど、豊富に揃った資料を探してください。
- さまざまな IBM 製品および IT 業界についての話題に絞った developerWorks の Technical
events and webcasts で時代の流れをキャッチしてください。
- 無料の
developerWorks Live! briefing に参加して、IBM の製品およびツール、そして IT 業界の傾向を素早く学んでください。
- developerWorks の
on-demand demos で、初心者向けの製品のインストールとセットアップから、熟練開発者向けの高度な機能に至るまで、さまざまに揃ったデモを見てください。
- Twitter で developerWorks
をフォローするか、developerWorks で Linux
に関するツイートのフィードに登録してください。
製品や技術を入手するために
- Windows CUPS
ドライバーをダウンロードしてください。
- Samba の最新バージョンを入手して、最新機能を追加してください。
- ご自分に最適な方法で IBM
製品を評価してください。評価の方法としては、製品の試用版をダウンロードすることも、オンラインで製品を試してみることも、クラウド環境で製品を使用することもできます。また、SOA Sandbox
では、数時間でサービス指向アーキテクチャーの実装方法を効率的に学ぶことができます。
議論するために
- My developerWorks
コミュニティーに加わってください。ここでは他の developerWorks ユーザーとのつながりを持てる他、開発者が主導するブログ、フォーラム、グループ、ウィキを調べることができます。
