samba如何設定自動安裝windows 印表機的驅動程 式

建立日期:2007/08/17
作者:cschen33.tw@yahoo.com.tw

我們在windows的環境下分享印表機時,遠端可以幫你直 接安裝驅動程式,但linux下的samba如何設定呢?
google找不到完整的解答
在www.samba.org的文件有說明http://us3.samba.org/samba/docs/man/Samba-HOWTO-Collection/classicalprinting.html#id387484, 然而卡在某些步驟
因為不了解其命令及參數或原理

建立分享[print$]
在smb.conf中加入
path=/etc/samba/drivers
browseable=no
read  only=yes
write list = root

#testparm
*測試一下設定,並使用windows來連線測試一下
net use g: \\samba-server\print$
[print$]的分享 目錄結構
其下至少包含二個目錄
[print$]--->W32X86                            #Windows NT x86     (NT XP,2000,20003
           --->WIN40                               #                                 (95/98)
又W32X86中可以含能2和3的子目錄
#新的版本是將驅動程式放在3的子目錄下

#這是基本的操作流程





安裝驅動程式
使用命令rpcclient   (adddriver/setdriver),   smbclient
1.查 詢印表機驅動程式的檔案
rpcclient -U使用者名稱%密碼 -c 'getdriver "印表機驅動程式的名稱"' 主機名稱(IP)
#如果你不知道"印表機驅動程式的名稱"可以使用下面的命令來查詢
rpcclient -U使用者%密碼   -c 'enumdrivers' 印表機伺服器
#印表機名稱不分大小寫,但需要完整的名稱(安裝時的命名),另外主機可以是任何電腦,不一樣要印表機伺服器,只要它有裝驅動程式,而且是本機的才可以查 的到
#因為我的SAMBA和ad整合,因此使用者使用AD的管理者 ,因如果你只要查詢目錄3如下,否則它會秀出所有的驅動程式
rpcclient -U使用者名稱%密碼 -c 'getdriver "印表機名稱" 3' 主機名稱(IP)
例1:RICOH AFICIO 1045 pcl
[Windows 4.0]
Printer Driver Info 3:
        Version: [0]
        Driver Name: [RICOH Aficio 1045 PCL 5e]
        Architecture: [Windows 4.0]
        Driver Path: [\\10.10.1.1\print$\WIN40\0\RIC548.DRV]
        Datafile: [\\10.10.1.1\print$\WIN40\0\RIC548.DAT]
        Configfile: [\\10.10.1.1\print$\WIN40\0\RIC548.DRV]
        Helpfile: [\\10.10.1.1\print$\WIN40\0\RIC548.HLP]

        Dependentfiles: [\\10.10.1.1\print$\WIN40\0\RIC548.DRV]
        Dependentfiles: [\\10.10.1.1\print$\WIN40\0\RIC548.DAT]
        Dependentfiles: [\\10.10.1.1\print$\WIN40\0\RIC548C.DLL]
        Dependentfiles: [\\10.10.1.1\print$\WIN40\0\RIC548E.DLL]
        Dependentfiles: [\\10.10.1.1\print$\WIN40\0\RIC548G.DLL]
        Dependentfiles: [\\10.10.1.1\print$\WIN40\0\RIC548H.W95]
        Dependentfiles: [\\10.10.1.1\print$\WIN40\0\RIC548B.DLL]
        Dependentfiles: [\\10.10.1.1\print$\WIN40\0\RIC548J.DLL]
        Dependentfiles: [\\10.10.1.1\print$\WIN40\0\RIC548K.DLL]
        Dependentfiles: [\\10.10.1.1\print$\WIN40\0\RIC548A.DLL]
        Dependentfiles: [\\10.10.1.1\print$\WIN40\0\RIC548.HLP]
        Dependentfiles: [\\10.10.1.1\print$\WIN40\0\RIC548X.DLL]
        Dependentfiles: [\\10.10.1.1\print$\WIN40\0\RIC548WM.DLL]
        Dependentfiles: [\\10.10.1.1\print$\WIN40\0\RIC548X.EXE]
        Dependentfiles: [\\10.10.1.1\print$\WIN40\0\RICTI16.DLL]
        Dependentfiles: [\\10.10.1.1\print$\WIN40\0\RICTI32.DLL]
        Dependentfiles: [\\10.10.1.1\print$\WIN40\0\TRACKID.DLL]
        Dependentfiles: [\\10.10.1.1\print$\WIN40\0\TIFMTA.DLL]
        Dependentfiles: [\\10.10.1.1\print$\WIN40\0\TIBASE64.DLL]

        Monitorname: []
        Defaultdatatype: [RAW]


[Windows NT x86]
Printer Driver Info 3:
        Version: [3]
        Driver Name: [RICOH Aficio 1045 PCL 5e]
        Architecture: [Windows NT x86]
        Driver Path: [\\10.10.1.1\print$\W32X86\3\RIC548K.DLL]
        Datafile: [\\10.10.1.1\print$\W32X86\3\RIC548K.DLL]
        Configfile: [\\10.10.1.1\print$\W32X86\3\RIC548U.DLL]
        Helpfile: [\\10.10.1.1\print$\W32X86\3\RIC548.HLP]

        Dependentfiles: [\\10.10.1.1\print$\W32X86\3\RIC548P.DLL]
        Dependentfiles: [\\10.10.1.1\print$\W32X86\3\RIC548C.DLL]
        Dependentfiles: [\\10.10.1.1\print$\W32X86\3\RIC548L.DLL]
        Dependentfiles: [\\10.10.1.1\print$\W32X86\3\RIC548X.DLL]
        Dependentfiles: [\\10.10.1.1\print$\W32X86\3\RIC548S.DLL]
        Dependentfiles: [\\10.10.1.1\print$\W32X86\3\RIC548J.DLL]
        Dependentfiles: [\\10.10.1.1\print$\W32X86\3\RIC548Q.EXE]
        Dependentfiles: [\\10.10.1.1\print$\W32X86\3\RIC548ZU.DLL]
        Dependentfiles: [\\10.10.1.1\print$\W32X86\3\RIC548ZK.DLL]
        Dependentfiles: [\\10.10.1.1\print$\W32X86\3\RIC548WU.DLL]
        Dependentfiles: [\\10.10.1.1\print$\W32X86\3\RIC548WK.DLL]
        Dependentfiles: [\\10.10.1.1\print$\W32X86\3\RIC548X.EXE]
        Dependentfiles: [\\10.10.1.1\print$\W32X86\3\TrackID.DLL]
        Dependentfiles: [\\10.10.1.1\print$\W32X86\3\TIBase64.dll]
        Dependentfiles: [\\10.10.1.1\print$\W32X86\3\TIFmtA.dll]

        Monitorname: []
        Defaultdatatype: []

#另外可以列印測試頁,就會有相關的資訊,這是XP列印頁的部份內容
列印測試頁
2.下 載驅動程式到linux
能可以在分享的w32x86下面下這個命令,如此可少一次上傳的動作
cd /etc/samba/drivers   #這個位置會你上面的設定而有所不同
smbclient //主機名稱/print\$ -U使用者%密碼 -c 'cd w32x86/3;mget RIC*.* TrackID.DLL TI*.*'

如此它就會問你是否要get檔案,根據上述1下載你的檔案
#-c '執行的命令' ,cd w32x86/3 切換目錄  ,mget 多重下載後命接檔案名稱,有多個檔案使用空白分開
如果你要完全互動,-c的命令後面再給
#smbclient //主機名稱/print\$ -U使用者%密碼
smb: \>cd w32x86
smb: \w32x86\>
smb: \w32x86\>mget 檔名

3.上 傳到[print$]的w32x86
同上使用put或mput上傳檔案,如果你根據2就不需要再上傳
4.安 裝驅動程式
rpcclient -U使用者%密碼 -c 'adddriver "Windows NT x86"    "印表機的程式.............."
#其中印表機的程式的規格如下:  使用man rpcclient 來查詢,相對於rpcclient getdriver的命令所查到的
Driver Name:Driver Path:DataFile:ConfigFile:HelpFile:Language Monitor Name:Default Data Type:相依檔案,若多檔使用逗點分開
#空白使用NULL,Monitor Name使用NULL ,Default Data Type使用RAW
rpcclient -U使用者名稱%密碼 -c 'adddriver  "Windows NT x86"\
"RICOH Aficio 1045 PCL 5e:RIC548K.DLL:RIC548K.DLL:RIC548U.DLL:\
RIC548.HLP:NULL:RAW:\
RIC548P.DLL,RIC548C.DLL,RIC548L.DLL,RIC548X.DLL,RIC548S.DLL\
,RIC548J.DLL,RIC548Q.EXE,RIC548ZU.DLL,RIC548ZK.DLL,RIC548WU.DLL\
,RIC548WK.DLL,RIC548X.EXE,TrackID.DLL,TIBase64.dll,TIFmtA.dll" 3' 主機名稱或IP

#如果有問題請先將smb.conf的read only = yes 變成 no
5.設 定驅動程式對應到的印表機
rpcclient -U使用者名稱%密碼 -c 'setdriver 印表機名稱 驅動程式' 主機


問題:
1.如何得知印表機的驅動程式
    rcpclient -U使用者%密碼 -c "enumdrivers" 已安裝印表機之主機
2. 在linux設定印表機?
    請參考網路上有關Cups說明
3.如果rpcclient adddriver有無法複製的錯誤訊息,
   我將smb.conf中的 read  only=yes 改為no