- 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に書かなくてもプリンタごとに設定することもできます。
- 上で設定した、この場合は/export/printers以下に、以下の5つのディレクトリを作成します。
W32ALPHA
W32MIPS
W32PPC
W32X86
WIN40
- プリンタを設定します。Vine Linuxの場合は、printtoolなどを使うと
簡単にprintcapを作成してくれます。(ここでの詳しい手順は省略します)。
lprでプリントできるところまで、設定を済ませてください。
プリンタが特殊言語を要求する場合は、
別にWindowsのドライバが対応していれば
直接コマンドラインからlprでその言語が使えるものがなくても問題ありません。
接続できるようにだけ、してください。
- 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から共有が可能になると思います。
- プリンタドライバを、sambaへインストールします。
ドライバのインストールは、最初にsmb.confで指定しているprinter adminで設定した人がしてください。
ここからの作業はWindowsから実行します。
samba共有の、printersディレクトリ?を開いて、さらにその中で
ドライバを入れようとしているプリンタを、右クリックしてプロパティを開きます。
- ドライバをインストールするかどうか聞いてくるので、ここではいったん[No]を押します。
- 開いたプロパティより、Advancedのタブを選び、New Driverのボタンを押します。
プリンタドライバをインストールしてください。
sambaサーバへプリンタドライバがコピーされます。
これで、プリンタドライバのインストールは完了です。いったんOKを押してプロパティを閉じます。
Windows 98やMeなど、別のアーキテクチャのドライバも入れたい場合は再び同様にプロパティを開き、
Sharingのタブを選び、Addtional Driversのボタンを押して、続けてください。
- ドライバをインストールしたあとは、再びプロパティを開くと、オプションや印刷の設定が可能です。
なお、オプションの設定などは、最初にsmb.confで指定しているprinter adminで設定した人がしてください。
ここでした設定は、各ユーザのインストール直後のデフォルトの設定となりますので
念入りにしてください(^^)。
- これで、設定は終わりです。プリンタを使用したい各ユーザに、
printersではなくて、おもてに出ているプリンタのアイコンをダブルクリックしてもらいます。
これだけで、あとはしばらく待つだけでドライバは自動でクライアントへダウンロードされて
プリンタを使用することが可能になります(これは簡単!)。
クライアントがWindows xpなら、放っておくだけでも知らないあいだにプリンタがインストールされていることでしょう。
また、サーバ側でプリンタドライバをアップデートしたり、オプションの項目を変更すると、
その内容は自動的にインストールした各クライアントへ反映されます(これも便利!)。
(Windows 9x系のOSは、SPOOLSSの機能ではなく従来のLanManの機能をで印刷するため、
あとからサーバ側からのドライバ自動アップデートなどはできません。)
- 各ユーザが、プリンタのプロパティを開くのに時間がかかることがあります。
これは、サーバ側からの名前解決などに時間がかかっていることがあります。
クライアントをDNSへ登録したり、WINSの設定を見直すことで改善されることがありますので
試してみてください。
(間違えてもここにきてdisable spoolss = Yesなどとしてしまうと、
これまでの努力が水の泡になってしまいますので気をつけてください ^^;)。
- あと、ダイレクト・ホスティングSMBサービス(TCP/TCPポート番号445)は
使用できるようにしておいてください。
PC単独でファイアーオールやウィルス検出ソフトをインストールしていると、
このサービスは普段は使わないのと、外向けにあけているとあまりよくないのとで、
大概勝手にふさがれてしまっていると思います。
- プリンタドライバについては、マイクロソフトの署名があったほうがいいです。
余計な?
機能のいっぱいついたプリンタドライバは、自動でインストールできないことがあります。
経験では、B社のものとかR社のなんたらCSのドライバなどは成功していません。
これらのプリンタドライバについては、今のところ自動インストールを私はあきらめています。
そしてユーザ単位でドライバをインストールしてもらっています。
(サーバへドライバをインストールしていないので、アイコンをダブルクリックしたところで
ドライバを要求してきます。ここでドライバを個々に入れてもらいます)。
なお、プリンタドライバをサーバへ入れずに個別にインストールする場合には、
コントロールパネルから自身のプリンタを開いたときに、ステータスのところに
「アクセスが拒否されました。接続できません」と表示されることがあります。
このままでも印刷できるので気にしなくてよいのですが、これについては
sambaのバグと書かれているところもあります。
自動インストールをあきらめたプリンタは、プリンタ単位でsmb.confに
use client driver = Yes
書いておくことでこの現象は回避できると思いますので、書き足しておくとよいと思います。
- (おまけ) 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
}