*

* Tips   * Top

samba 2.2(samba 3.0)を使ったプリンタドライバの自動インストールが可能なサーバ構築

せっかくサーバにsamba2.2(samba 3.0)を使っているのだから、 プリンタなんてプリントサーバのプリンタアイコンをダブルクリックするだけでインストール完了!! って、お手軽にいきたいものですよね。ここでは samba 2.2(samba 3.0)で使用している新方式(SPOOLSS)を使用します。

(ご注意) このページをご利用になった結果の影響については、 一切責任を負いませんので、あらかじめご了承願います。

  1. smb.confに、以下を追加します。
    [print$]
        comment = printers
        path = /export/printers
        writeable = Yes
    
    [global]
        disable spoolss = No (デフォルト)
        use client driver = No (デフォルト)
        printer admin = root,shacho (ドライバをインストールできるユーザ)
    ※use client driverについては、globalに書かなくてもプリンタごとに設定することもできます。

  2. 上で設定した、この場合は/export/printers以下に、以下の5つのディレクトリを作成します。
        W32ALPHA
        W32MIPS
        W32PPC
        W32X86
        WIN40

  3. プリンタを設定します。Vine Linuxの場合は、printtoolなどを使うと 簡単にprintcapを作成してくれます。(ここでの詳しい手順は省略します)。 lprでプリントできるところまで、設定を済ませてください。 プリンタが特殊言語を要求する場合は、 別にWindowsのドライバが対応していれば 直接コマンドラインからlprでその言語が使えるものがなくても問題ありません。 接続できるようにだけ、してください。

  4. sambaのプリンタ共有の設定を記述します。 以下のように[printers]の項目を設定するだけで充分です。 これだけで/var/spool/lpdにあるプリンタを全部見にいってくれます。
    [printers]
        comment = All Printers
        path = /var/spool/samba
        guest account = guest
        guest ok = Yes
        printable = Yes
        browseable = Yes
        available = Yes
    ただし、個々にプリンタの設定をしたい場合は、 [printers]の項目のbrowseableとavailableの項目をそれぞれNoにしておいて、 以下のように、個別に共有を作成することもできます。 この例の場合は、lp0をPrinter0の名称で共有します。
    [printer0]
        comment = Printer0
        path = /var/spool/samba
        guest account = guest
        guest ok = Yes
        printable = Yes
        printer name = lp0
    ここまでくれば、Windowsから共有が可能になると思います。

  5. プリンタドライバを、sambaへインストールします。 ドライバのインストールは、最初にsmb.confで指定しているprinter adminで設定した人がしてください。 ここからの作業はWindowsから実行します。 samba共有の、printersディレクトリ?を開いて、さらにその中で ドライバを入れようとしているプリンタを、右クリックしてプロパティを開きます。

  6. ドライバをインストールするかどうか聞いてくるので、ここではいったん[No]を押します。

  7. 開いたプロパティより、Advancedのタブを選び、New Driverのボタンを押します。 プリンタドライバをインストールしてください。 sambaサーバへプリンタドライバがコピーされます。 これで、プリンタドライバのインストールは完了です。いったんOKを押してプロパティを閉じます。 Windows 98やMeなど、別のアーキテクチャのドライバも入れたい場合は再び同様にプロパティを開き、 Sharingのタブを選び、Addtional Driversのボタンを押して、続けてください。

  8. ドライバをインストールしたあとは、再びプロパティを開くと、オプションや印刷の設定が可能です。 なお、オプションの設定などは、最初にsmb.confで指定しているprinter adminで設定した人がしてください。 ここでした設定は、各ユーザのインストール直後のデフォルトの設定となりますので 念入りにしてください(^^)。

  9. これで、設定は終わりです。プリンタを使用したい各ユーザに、 printersではなくて、おもてに出ているプリンタのアイコンをダブルクリックしてもらいます。 これだけで、あとはしばらく待つだけでドライバは自動でクライアントへダウンロードされて プリンタを使用することが可能になります(これは簡単!)。 クライアントがWindows xpなら、放っておくだけでも知らないあいだにプリンタがインストールされていることでしょう。 また、サーバ側でプリンタドライバをアップデートしたり、オプションの項目を変更すると、 その内容は自動的にインストールした各クライアントへ反映されます(これも便利!)。 (Windows 9x系のOSは、SPOOLSSの機能ではなく従来のLanManの機能をで印刷するため、 あとからサーバ側からのドライバ自動アップデートなどはできません。)

  10. 各ユーザが、プリンタのプロパティを開くのに時間がかかることがあります。 これは、サーバ側からの名前解決などに時間がかかっていることがあります。 クライアントをDNSへ登録したり、WINSの設定を見直すことで改善されることがありますので 試してみてください。 (間違えてもここにきてdisable spoolss = Yesなどとしてしまうと、 これまでの努力が水の泡になってしまいますので気をつけてください ^^;)。

  11. あと、ダイレクト・ホスティングSMBサービス(TCP/TCPポート番号445)は 使用できるようにしておいてください。 PC単独でファイアーオールやウィルス検出ソフトをインストールしていると、 このサービスは普段は使わないのと、外向けにあけているとあまりよくないのとで、 大概勝手にふさがれてしまっていると思います。

  12. プリンタドライバについては、マイクロソフトの署名があったほうがいいです。 余計な? 機能のいっぱいついたプリンタドライバは、自動でインストールできないことがあります。 経験では、B社のものとかR社のなんたらCSのドライバなどは成功していません。 これらのプリンタドライバについては、今のところ自動インストールを私はあきらめています。 そしてユーザ単位でドライバをインストールしてもらっています。 (サーバへドライバをインストールしていないので、アイコンをダブルクリックしたところで ドライバを要求してきます。ここでドライバを個々に入れてもらいます)。 なお、プリンタドライバをサーバへ入れずに個別にインストールする場合には、 コントロールパネルから自身のプリンタを開いたときに、ステータスのところに 「アクセスが拒否されました。接続できません」と表示されることがあります。 このままでも印刷できるので気にしなくてよいのですが、これについては sambaのバグと書かれているところもあります。 自動インストールをあきらめたプリンタは、プリンタ単位でsmb.confに use client driver = Yes 書いておくことでこの現象は回避できると思いますので、書き足しておくとよいと思います。

  13. (おまけ) sambaサーバへインストールしたプリンタドライバが PCを再起動すると削除されてしまうことはありませんか? インストールされたプリンタドライバ等についての情報は /var/cache/samba 以下 ntdrivers.tdb と ntprinters.tdb の2ファイルへ記録されるようですが、 ここのディレクトリはPCを再起動するとすべて削除されてしまいます。 ここは、すこし乱暴ですが sambaを停止する前にこれらの情報ファイルを別の場所へ退避させておき、 次に起動するときに戻してやるとよいでしょう。 以下は、sambaサーバでのプリンタドライバ等の情報ファイルを、 samba停止時に /etc/samba へ保存して、起動時に /var/cache/samba へ復元するように、 samba起動スクリプト /etc/rc.d/init.d/smb へ追加した例です。
    start() {
        # Copy Printer Driver Lock File
        if [ ! -f /var/lock/subsys/smb ] ; then
            if [ -d /var/cache/samba ] ; then
                [ -f /etc/samba/ntdrivers.tdb  ] && \
                    [ ! -f /var/cache/samba/ntdrivers.tdb  ] && \
                        cp -p /etc/samba/ntdrivers.tdb  /var/cache/samba
                [ -f /etc/samba/ntprinters.tdb ] && \
                    [ ! -f /var/cache/samba/ntprinters.tdb ] && \
                        cp -p /etc/samba/ntprinters.tdb /var/cache/samba
            fi
        fi
            :
            :
        smbdを起動‥‥
    }
    
    stop() {
        smbdを停止‥‥
            :
            :
        # Copy Printer Driver Lock File
        if [ -f /var/lock/subsys/smb ] ; then
            [ -f /etc/samba/ntdrivers.tdb  ] && rm -f /etc/samba/ntdrivers.tdb
            [ -f /etc/samba/ntprinters.tdb ] && rm -f /etc/samba/ntprinters.tdb
            if [ -d /etc/samba/ ] ; then
                [ -f /var/cache/samba/ntdrivers.tdb  ] && \
                    cp -p /var/cache/samba/ntdrivers.tdb  /etc/samba
                [ -f /var/cache/samba/ntprinters.tdb ] && \
                    cp -p /var/cache/samba/ntprinters.tdb /etc/samba
            fi
        fi
    }


shacho@critical.ne.jp
Last modified: Tue Jan 09 23:40:00 JST 2007