GB | BIG5
|
| 首頁 > 應用技術 > 其它 > 正文 |
 |
| Samba-HOWTO最新匯集--4. Samba 2.2.x中的打印支持 |
| 本文出自: http://6bytes.com/meaculpa 編譯:meaculpa (2001-05-31 13:04:00) |
4.1. 介紹
4.2. 配置
4.2.1. 建立[print$]項
4.2.2. 為現有打印機設定驅動程序
4.2.3. 支持大量打印機
4.2.4. 通過Windows NT APW添加新打印機
4.2.5. Samba和打印機端口
4.3. Imprints工具包
4.3.1. 什是Imprints?
4.3.2. 建立打印機驅動程序包
4.3.3. Imprints服務器
4.3.4. 客戶端安裝程序
4.4. 從Samba 2.0.x向2.2.x遷移
4.1. 介紹
在2.2.0版本中,Samba使用MS-RPC(例如SPOOLSS命名管道)實現了本地Windows NT打印機制。以前的版本只支持LanMan打印調用。
新的SPOOLSS還提供了以下的額外功能:
根據需要,支持Windows 95/98/NT/2000客戶端下載打印機驅動程序。
使用Windows NT添加打印機向導(APW)或Imprints工具包(參考http://imprints.sourceforge.net)上傳打印機驅動程序。
支持本地MS-RPC打印調用,如StartDocPrinter、numJobs()等等(關Win32打印API的詳情請參考MSDN文檔http://msdn.microsoft.com/)。
支持打印對象的訪問控制表(ACL)。
通過使用內部信息數據庫來保存脫機任務信息,更好地支持打印隊列操作。
注意,Windows NT/2000客戶端要求Samba服務器為打印機分配一個合法的驅動程序。為此,就要考慮支持MSRPC打印調用以;而Windows 9x客戶端無須Samba主機安裝打印機的驅動程序。而且,Samba也不使用這些驅動程序來處理假脫機文件,驅動程序完全是客戶端使用的。
--------------------------------------------------------------------------------
4.2. 配置
[print$] 與 [printer$]
在以前的版本中,Samba推薦使用一個名為[printer$]的共享,它來自Windows 9x共享打印機時所創建的printer$服務。Windows 9x打印服務器總是用這個printer$服務來讓用戶不用口令就可以下載打印機驅動程序。
另外,在那些版本中還有兩個與此有關的選項:printer driver location、printer driver。前者用指定保存打印機驅動程序的目錄,者定義打印機驅動程序名。
現在它們已被忽略,所以請別再用了。關如何進行更新,請參考移植部分。
--------------------------------------------------------------------------------
4.2.1. 建立[print$]項
為了上傳打印機驅動程序文件,你必須先配置共享項[print$]。注意,它的名稱很重要(print$是Windows NT打印服務器用來提供打印機驅動程序下載的服務項),別寫錯了。你可以參考一下下面這個例子(當然,有些選項值,如‘path’是任意的,可以用適當的值進行替換):
[print$]
path = /usr/local/samba/printers
guest ok = yes
browseable = yes
read only = yes
; 由把它配置為只讀,所以需要一個‘write list’。檢查文件
; 系統權限以確保該賬號可以向這個共享拷貝文件。如果這個賬號
; 不是root賬號,則應該作為‘printer admin’。
write list = ntadmin
使用write list選項可以讓指定的用戶具有寫權限,這樣他/她就可以在這個共享中更新文件。配置文件共享的詳情請參見smb.conf(5)手冊頁。
guest ok = yes這個選項的取舍取決你的站點是如何配置的。如果Samba服務器上的每個用戶都有賬號,就無須使用了。
作者注:無須使用的含義是,如果所有的Windows NT用戶都可以通過Samba服務器進行驗証(這說明域用戶及NT本地用戶已經可以通過域控制器進行驗証),那guest訪問是不必要的。當然,如果你沒有禁止某些用戶訪問服務器,同時也沒有安全方面的顧慮,還是可以放心使用這個功能的。要禁止用戶,可以在[global]段中加入map to guest = Bad User選項,不過在使用前最好徹底理解該選項的含義。--jerry
Windows NT打印服務器要支持多種客戶端平台下載相應的驅動程序文件,必須在[print$]服務項中建立對應每一種平台的子目錄,Samba也使用了這種方法。
你可以在[print$]共享項下為每一種希望支持的平台建立對應的子目錄。
[print$]-----
|-W32X86 ; "Windows NT x86"
|-WIN40 ; "Windows 95/98"
|-W32ALPHA ; "Windows NT Alpha_AXP"
|-W32MIPS ; "Windows NT R4000"
|-W32PPC ; "Windows NT PowerPC"
注意!需要權限
在當前版本中,要為samba服務器添加新打印機,必須滿足以下兩個條件中的任意一個:
向Samba服務器添加打印機的賬號,其uid必須為0(如,root賬號)。
向Samba服務器添加打印機的賬號必須是printer admin列表中的成員之一。
當然,該賬號還應該有權在[print$]子目錄下添加文件。要記住,缺省情況下所有文件共享項都是‘只讀’的。
當建立了所需的[print$]服務項及相關子目錄,只要在Windows NT 4.0客戶端用root賬號(或printer admin)登錄到Samba服務器。選到Samba服務器的“打印機”文件夾中,這時應該就看到服務器定義的打印機共享列表。
--------------------------------------------------------------------------------
4.2.2. 為現有打印機設定驅動程序
如上所述,Samba服務器打印機文件夾中的打印機列表還沒有分配實際的驅動程序。但在缺省情況下,Samba會把驅動程序名設為“NO PRINTER DRIVER AVAILABLE FOR THIS PRINTER”。要是你試圖查看打印機屬性,就會得到如下信息:
Device settings cannot be displayed. The driver for the specified printer is not installed, only spooler properties will be displayed. Do you want to install the driver now?
在對話框中點擊“No”就會出現打印機屬性窗口,這時有兩種可選的方法來安裝驅動程序:
點“New Driver...”按鈕安裝一套新的,或者
從已安裝的驅動程序下拉列表中進行選擇。最初該列表為空。
如果你要安裝Windows NT x86以外的操作系統驅動程序,就要使用打印機屬性對話框中的“Sharing”書簽。(譯者注:該書簽中有一按鈕為“Other Driver”)
如果你使用root賬號連接到服務器,還可以在這個對話框中修改其它打印機的屬性,如ACLs和設備設定。
最還要說明一下,Windows NT打印服務器有可能會把並未共享的打印機列在打印機文件夾中。但Samba就不考慮這種情況了,根據定義,它只共享smb.conf文件指定的那些打印機。
另外還有一點很有趣,Windows NT客戶機並不使用SMB打印共享,而寧願使用MS-RPC直接打印到遠程NT主機。當然,這要假定要打印的人在遠程主機上必須有一定權限,Windows NT為打印機分配的缺省權限為:“Everyone”組可打印。
--------------------------------------------------------------------------------
4.2.3. 支持大量打印機
在我們開發Samba 2.2的時候曾經出現過一個問題,那就是需要支持下載100台打印機的驅動程序。如果用Windows NT APW來實現的話就稍微有點麻煩了。要是多台打印機都共用驅動程序的話,就可以用rpcclient的setdriver命令對已安裝的驅動程序進行關聯。例如:
$ rpcclient pogo -U root%secret -c "enumdrivers"
Domain=[NARNIA] OS=[Unix] Server=[Samba 2.2.0-alpha3]
[Windows NT x86]
Printer Driver Info 1:
Driver Name: [HP LaserJet 4000 Series PS]
Printer Driver Info 1:
Driver Name: [HP LaserJet 2100 Series PS]
Printer Driver Info 1:
Driver Name: [HP LaserJet 4Si/4SiMX PS]
$ rpcclient pogo -U root%secret -c "enumprinters"
Domain=[NARNIA] OS=[Unix] Server=[Samba 2.2.0-alpha3]
flags:[0x800000]
name:[\\POGO\hp-print]
description:[POGO\\POGO\hp-print,NO DRIVER AVAILABLE FOR THIS PRINTER,]
comment:[]
$ rpcclient pogo -U root%secret \
> -c "setdriver hp-print \"HP LaserJet 4000 Series PS\""
Domain=[NARNIA] OS=[Unix] Server=[Samba 2.2.0-alpha3]
Successfully set hp-print to driver HP LaserJet 4000 Series PS.
--------------------------------------------------------------------------------
4.2.4. 通過Windows NT APW添加新打印
缺省情況下,Samba在“打印機”文件夾中會提供smb.conf文件定義的所有共享打印機。同時,如果滿足以下條件,就會在該文件夾中提供添加打印機向導的圖標:
連接的用戶可以用管理權限(如root賬號或printer admin)調用OpenPrinterEx(\\server)。
指定選項show add printer wizard = yes (缺省值)。
要用APW在Samba服務器上添加打印機,必須定義add printer command選項,這個選項所指定的程序也必須可以用來向系統(例如/etc/printcap或相應的文件)及smb.conf添加打印機。
當客戶端使用APW圖標添加的共享打印機不存在時,smbd會執行add printer command並重新分析smb.conf文件,然查找新的打印機共享。如果該共享還未定義,則向客戶端返回“拒絕訪問”出錯信息。注意,add printer program是以連接的用戶身份執行的,它並不需要root來執行。
另外還有一個附加選項delete printer command,可以用它來從“打印機”文件夾中刪除打印機項。
--------------------------------------------------------------------------------
4.2.5. Samba和打印機端口
Windows NT/2000打印服務器為每台打印機分配一個端口,通常是LPT1:、COM1:、FILE:等等。同樣,Samba也必須支持打印機端口這種概念,但系統上缺省只有一個打印機端口,稱為“Samba Printer Port”,這並不是一個真正的打印端口,因為只有Windows客戶機才需要它。
注意,Samba並不支持“打印機緩沖池”這個概念,當一台邏輯打印機分配了多個端口時,緩沖池用作負載均衡或失敗重試。
如果你需要定義多個端口,smb.conf文件中有一個enumports command選項,你可以用它指定一個外部程序,通過這個程序在系統上產生一列端口。
--------------------------------------------------------------------------------
4.3. Imprints工具包
Imprints工具包提供了一套與Windows NT APW等價的UNIX程序。詳情請參見Imprints的網站http://imprints.sourceforge.net/。另外,它的源代碼發布包中有詳細的文檔可以參考,本節只簡要介紹一下。
--------------------------------------------------------------------------------
4.3.1. 什是Imprints?
Imprints是一套工具包,它支持以下功能:
統一存儲Windows NT及95/98的打印機驅動程序。
提供建立Imprints打印機驅動程序所必須的工具集。
提供了一套用客戶訪問、安裝遠程Samba及Windows NT服務器打印機的程序。
--------------------------------------------------------------------------------
4.3.2. 建立打印機驅動程序包
建立打印機驅動程序包的細節超出了本文的范圍(詳情請參見Samba發布包中的Imprints.txt文件)。簡而言之,Imprints驅動程序包是一套含有驅動程序、相關INF文件及客戶端安裝所需之控制文件的壓縮包。
--------------------------------------------------------------------------------
4.3.3. Imprints服務器
Imprints服務器實際上是個數據庫服務器,你可以通過標準HTTP機制對它進行查詢。數據庫中的每個打印驅動程序項都有一個相關的URL用下載。而且每個包還附帶GnuPG產生的數字簽名,用這個簽名就可以驗証所下載包的真實性。建議“不要”禁止這個安全特性。
--------------------------------------------------------------------------------
4.3.4. 客戶端安裝程序
Imprints客戶端安裝程序的詳情請參見源代碼包所含之Imprints-Client-HOWTO.ps文件。
Imprints客戶端安裝程序有兩種形式:
一組Perl命令行腳本
一個基GTK+的Perl命令行腳本的圖形界面
用客戶端程序可以查詢Imprints數據庫服務器已知的打印機型號,還可以下載並安裝遠程Samba和Windows NT打印服務器提供的驅動程序。
基本安裝過程有四個步驟,並用smbclient和rpcclient對Perl代碼進行了包裝。
foreach (支持的打印機架構平台)
{
1. rpcclient: 取得遠程服務器上的適當上傳目錄
2. smbclient: 上傳驅動程序文件
3. rpcclient: 發送AddPrinterDriver() MS-RPC調用
}
4. rpcclient: 發送AddPrinterEx() MS-RPC調用,實際建立打印機
當在各種客戶端平台上執行Imprints工具包時會遇到驅動程序名的問題。例如,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的那一套驅動程序名,這當然沒有問題,因為NT只查找現有的NT版驅動程序。但Samba沒有這種特性,因此,當驅動程序還沒有安裝時,就不能只使用一種驅動程序名?
要解決這種問題,就需要使Imprints的打印機驅動程序包同時含有Windows NT和95/98的驅動程序,並且先安裝NT的。
校對中……
--------------------------------------------------------------------------------
4.4. 從Samba 2.0.x向2.2.x遷移
在Samba 2.2中,打印機驅動程序的管理已經與以前的版本有所改變(我們希望有所改進),從你現有版本向2.2遷移可能會遇到象下面這樣的問題。
一般說來,Windows系統具有一定的記憶功能。如果Windows NT客戶端已連接過Samba 2.0服務器的話,它會記住這是一台LanMan打印服務器。而Samba2.2版本會盡可能支持MSRPC打印,當你升級以,NT客戶還是記住以前的設置。
要使用全新的MSRPC打印功能,先用下面的命令停掉客戶端的假脫機服務,再刪除[HKLM\SYSTEM\CurrentControlSet\Control\Print]中與打印服務器有關的注冊鍵。
C:\WINNT\> net stop spooler
請小心操作注冊表。
當刪除了相應的注冊表項之,請用start替換掉剛才命令中的stop來重啟假脫機服務。
另一方面,Windows 9x使用LanMan打印調用,無須進行任何修改操作。
警告
我們將考慮把以下的smb.conf選項作廢掉,所以請不要在新的安裝中再使用了。
printer driver file (G)
printer driver (S)
printer driver location (S)
在遷移過程中,你可能會面臨如下的方案:
無須支持Windows NT打印機驅動程序,則只要使用現有的選項就可以了。
如果要支持NT打印機驅動程序,但卻不想把9x驅動程序遷移到新服務器上,那請保留現有的printers.def文件。當smbd在TDB中查找打印機的9x版驅動程序失敗時,就會使用printers.def文件(及所有相關的選項)。make_printerdef工具仍會保持向兼容,不過已經這屬那種老掉牙的工具了。
如果在Samba服務器上安裝了打印機的Windows 9x版驅動程序,那這套程序的優先級最高,上面那三個舊的打印選項將被忽略(包括printer driver location)。
如果要把現有的printers.def文件遷移到新服務器上,那只能用Windows NT的APW來安裝NT及9x驅動程序了。詳情請參見smbclient和rpcclient的用法。另外在http://imprints.sourceforge.net/有Imprints客戶端安裝程序的示例。
(http://www.fanqiang.com)
進入【UNIX論壇】
|
|
| 相關文章 |
巧配samba實現WIN2000和Linux文件共享 (2001-12-23 08:30:00) Samba的圖形化配置工具-SWAT (2001-10-01 07:00:00) Samba的三種典型配置 (2001-09-30 13:05:00) 如何利用Samba實現Linux與Windows98的資源共享 (2001-09-30 09:05:00) Samba的簡介 (2001-09-30 08:05:01) Samba 和 Windows 的密碼處理認証方式 (2001-09-30 07:05:00) RedHat6.2服務器配置方案大全--第三章 DHCP,第四章 Samba (2001-09-28 09:00:00) 中文man手冊:smbstatus - 報告當前samba的聯接狀態 (2001-09-22 13:05:00) 中文man手冊:make_smbcodepage - 為Samba創建代碼頁文件 (2001-09-21 08:00:00) 尋找Linux下的網絡鄰居(圖形工具:gnomba,Tk Samba,xSMBrowser,LinNeighborhood) (2001-08-24 09:00:00)
|
===更多相關=== |
|
|
 |
★ 樊強制作 歡迎分享 ★ |